From 326c7e446c5afe088ec7ec7433c24b2378a1c5bb Mon Sep 17 00:00:00 2001 From: robobun <117481402+robobun@users.noreply.github.com> Date: Tue, 15 Sep 2026 12:35:36 +0000 Subject: [PATCH 1/3] test(install): build the complex-workspace migration fixture locally The fixture is generated in beforeAll against the local verdaccio registry and a loopback tarball server. It keeps the package-lock.json shapes the checked-in fixture had, except the git dependencies and sharp, and no longer installs from registry.npmjs.org, github.com, gitlab.com, bitbucket.org or GitHub Releases. --- .../migration/complex-workspace.test.ts | 372 ++- .../migration/complex-workspace/.gitignore | 2 - .../complex-workspace/bun-types/isfake.txt | 1 - .../complex-workspace/bun-types/package.json | 7 - .../complex-workspace/hello-0.3.2.tgz | Bin 196 -> 0 bytes .../complex-workspace/package-lock.json | 2164 ----------------- .../migration/complex-workspace/package.json | 17 - .../packages/body-parser/isfake.txt | 1 - .../packages/body-parser/package.json | 7 - .../packages/lol-package/package.json | 6 - .../packages/second/package.json | 12 - .../packages/with-postinstall/.gitignore | 1 - .../packages/with-postinstall/package.json | 11 - .../packages/with-postinstall/postinstall.js | 6 - .../migration/complex-workspace/readme.md | 1 - .../migration/complex-workspace/reset.ts | 10 - 16 files changed, 300 insertions(+), 2318 deletions(-) delete mode 100644 test/cli/install/migration/complex-workspace/.gitignore delete mode 100644 test/cli/install/migration/complex-workspace/bun-types/isfake.txt delete mode 100644 test/cli/install/migration/complex-workspace/bun-types/package.json delete mode 100644 test/cli/install/migration/complex-workspace/hello-0.3.2.tgz delete mode 100644 test/cli/install/migration/complex-workspace/package-lock.json delete mode 100644 test/cli/install/migration/complex-workspace/package.json delete mode 100644 test/cli/install/migration/complex-workspace/packages/body-parser/isfake.txt delete mode 100644 test/cli/install/migration/complex-workspace/packages/body-parser/package.json delete mode 100644 test/cli/install/migration/complex-workspace/packages/lol-package/package.json delete mode 100644 test/cli/install/migration/complex-workspace/packages/second/package.json delete mode 100644 test/cli/install/migration/complex-workspace/packages/with-postinstall/.gitignore delete mode 100644 test/cli/install/migration/complex-workspace/packages/with-postinstall/package.json delete mode 100644 test/cli/install/migration/complex-workspace/packages/with-postinstall/postinstall.js delete mode 100644 test/cli/install/migration/complex-workspace/readme.md delete mode 100644 test/cli/install/migration/complex-workspace/reset.ts diff --git a/test/cli/install/migration/complex-workspace.test.ts b/test/cli/install/migration/complex-workspace.test.ts index 2c8eb4f5f8d5..3852fdf8ebda 100644 --- a/test/cli/install/migration/complex-workspace.test.ts +++ b/test/cli/install/migration/complex-workspace.test.ts @@ -1,16 +1,20 @@ -import { beforeAll, expect, setDefaultTimeout, test } from "bun:test"; +// Migrates a package-lock.json spanning every resolution shape the npm migrator handles in one +// workspace: workspace packages, a `file:` folder and `file:` tarball, a remote tarball URL, `npm:` +// aliases (including a self-named alias inside a linked folder), a scoped transitive, and per- +// workspace version conflicts that force nested installs. Every tarball is served locally. +import { afterAll, beforeAll, expect, test } from "bun:test"; import fs from "fs"; -import { bunEnv, bunExe, tmpdirSync } from "harness"; +import { VerdaccioRegistry, bunEnv, bunExe, pack, tmpdirSync } from "harness"; import path from "path"; -setDefaultTimeout(1000 * 60 * 5); +const registry = new VerdaccioRegistry(); +let tarballServer: ReturnType; +let cwd: string | undefined = tmpdirSync(); -let cwd = tmpdirSync(); - -function validate(packageName: string, version: string, realPackageName?: string) { - test(`${packageName} is ${realPackageName ? `${realPackageName}@${version}` : version}`, () => { +function validate(packagePath: string, version: string, realPackageName?: string) { + test(`${packagePath} is ${realPackageName ? `${realPackageName}@${version}` : version}`, () => { if (!cwd) throw new Error("install failed"); - const pkg = JSON.parse(fs.readFileSync(path.join(cwd, packageName, "package.json"), "utf8")); + const pkg = JSON.parse(fs.readFileSync(path.join(cwd, packagePath, "package.json"), "utf8")); expect(pkg.version).toBe(version); if (realPackageName) { expect(pkg.name).toBe(realPackageName); @@ -36,86 +40,310 @@ function mustNotExist(filePath: string) { }); } -beforeAll(() => { - fs.cpSync(path.join(import.meta.dir, "complex-workspace"), cwd, { recursive: true }); -}); +// Verdaccio's checked-in packages have stable integrity hashes, so the generated package-lock.json +// carries real SRI values without any network round-trip. +const integrity = { + "a-dep@1.0.2": "sha512-786lp/Wqdz6jY9NOPFnU2OZAl/7wW/CWCHNn4I+0Or9NtA0F9I1TXtisuy8hMFw/6u6CYXwlzdwySiOdpJ94oQ==", + "a-dep@1.0.5": "sha512-eKtFd4hOTiMNvOOCpwRCkRvkUB6DU6HmDF/AFCUw28s6nhNLzX62xh/ETLWMhOmeEH8JnKx3/3IY/QMhdju1jw==", + "a-dep@1.0.10": "sha512-NeQ6Ql9jRW8V+VOiVb+PSQAYOvVoSimW+tXaR0CoJk4kM9RIk/XlAUGCsNtn5XqjlDO4hcH8NcyaL507InevEg==", + "no-deps@1.0.0": "sha512-v4w12JRjUGvfHDUP8vFDwu0gUWu04j0cv9hLb1Abf9VdaXu4XcrddYFTMVBVvmldKViGWH7jrb6xPJRF0wq6gw==", + "no-deps@1.0.1": "sha512-3X6cn4+UJdXJuLPu11v8i/fGLe2PdI6v1yKTELam04lY5esCAFdG/qQts6N6rLrL6g1YRq+MKBAwxbmUQk355A==", + "no-deps@2.0.0": "sha512-W3duJKZPcMIG5rA1io5cSK/bhW9rWFz+jFxZsKS/3suK4qHDkQNxUTEXee9/hTaAoDCeHWQqogukWYKzfr6X4g==", + "is-number@1.0.0": "sha512-PWbU1PO3loy/91zx8zOoQ37b8UWuu64eJONVIObQSlUUrYag+zy562vmZuRwRcv2hDhgK1Dc9qkJVS954CB1Nw==", + "@types/is-number@2.0.0": + "sha512-GEeIxCB+NpM1NrDBqmkYPeU8bI//i+xPzdOY4E1YHet51IcFmz4js6k57m69fLl/cbn7sOR7wj9RNNw53X8AiA==", + "two-range-deps@1.0.0": + "sha512-N+6kPy/GxuMncNz/EKuIrwdoYbh1qmvHDnw1UbM3sQE184kBn+6qAQgtf1wgT9dJnt6X+tWcTzSmfDvtJikVBA==", +}; -test("the install succeeds", async () => { - var subprocess = Bun.spawn([bunExe(), "reset.ts"], { - env: bunEnv, - cwd, - stdio: ["inherit", "inherit", "inherit"], +beforeAll(async () => { + await registry.start(); + + // Remote tarball dependency: serve bar-0.0.2.tgz over loopback instead of github.com. + const barTgz = fs.readFileSync(path.join(import.meta.dir, "..", "bar-0.0.2.tgz")); + tarballServer = Bun.serve({ + port: 0, + fetch: () => new Response(barTgz), }); - await subprocess.exited; - if (subprocess.exitCode != 0) { - cwd = false as any; - throw new Error("Failed to install"); - } + const barUrl = `http://localhost:${tarballServer.port}/bar-0.0.2.tgz`; + const barIntegrity = "sha512-" + Buffer.from(await crypto.subtle.digest("SHA-512", barTgz)).toString("base64"); + + const registryUrl = registry.registryUrl().replace(/\/$/, ""); + const reg = (name: string, version: string) => `${registryUrl}/${name}/-/${name.split("/").pop()}-${version}.tgz`; + + const write = (rel: string, content: string) => { + const full = path.join(cwd!, rel); + fs.mkdirSync(path.dirname(full), { recursive: true }); + fs.writeFileSync(full, content); + }; + + write( + "package.json", + JSON.stringify({ + name: "root", + version: "0.0.0", + dependencies: { + "a-dep": "1.0.10", + "bar": barUrl, + "bun-types": "file:bun-types", + "hello": "file:hello-0.3.2.tgz", + "is-number": "^1.0.0", + }, + workspaces: ["packages/*"], + }), + ); + + write( + "bun-types/package.json", + JSON.stringify({ + name: "bun-types", + version: "1.0.0", + dependencies: { "bun-types": "npm:no-deps@^1.0.0" }, + }), + ); + write("bun-types/isfake.txt", ""); + + write("packages/body-parser/package.json", JSON.stringify({ name: "body-parser", version: "200.0.0" })); + write("packages/lol-package/package.json", JSON.stringify({ name: "lol", dependencies: { "no-deps": "^2.0.0" } })); + write( + "packages/second/package.json", + JSON.stringify({ + name: "second", + version: "3.0.0", + dependencies: { + "a-dep": "1.0.5", + "body-parser": "npm:two-range-deps@1.0.0", + "express": "npm:a-dep@*", + "lol": "*", + "not-body-parser": "*", + }, + }), + ); + write( + "packages/with-postinstall/package.json", + JSON.stringify({ + name: "with-postinstall", + version: "1.0.0", + dependencies: { "a-dep": "1.0.2" }, + scripts: { postinstall: `${JSON.stringify(bunExe())} postinstall.js` }, + }), + ); + write( + "packages/with-postinstall/postinstall.js", + `require("fs").writeFileSync(require("path").join(__dirname, "postinstall.txt"), "i ran!");\n`, + ); + + // `file:` tarball dependency with a transitive dep that resolves against the local registry. + const helloSrc = tmpdirSync(); + fs.writeFileSync( + path.join(helloSrc, "package.json"), + JSON.stringify({ name: "hello", version: "0.3.2", dependencies: { "a-dep": "^1.0.0" } }), + ); + fs.writeFileSync(path.join(helloSrc, "version.txt"), "0.3.2\n"); + await pack(helloSrc, bunEnv, "--destination", cwd!); + if (!fs.existsSync(path.join(cwd!, "hello-0.3.2.tgz"))) throw new Error("failed to pack hello"); + const helloIntegrity = + "sha512-" + + Buffer.from(await crypto.subtle.digest("SHA-512", fs.readFileSync(path.join(cwd!, "hello-0.3.2.tgz")))).toString( + "base64", + ); - // On Windows CI, sharp's install script falls back to a node-gyp source - // build (no win32-arm64 prebuilt), which the system clang-cl-built Node 26 - // breaks (its process.config leaks thin-LTO flags that MSVC's link.exe - // rejects). This test exercises lockfile migration, not lifecycle scripts, - // so skip them there. - const installArgs = process.platform === "win32" ? [bunExe(), "install", "--ignore-scripts"] : [bunExe(), "install"]; - subprocess = Bun.spawn(installArgs, { + write( + "package-lock.json", + JSON.stringify( + { + name: "root", + version: "0.0.0", + lockfileVersion: 3, + requires: true, + packages: { + "": { + name: "root", + version: "0.0.0", + workspaces: ["packages/*"], + dependencies: { + "a-dep": "1.0.10", + "bar": barUrl, + "bun-types": "file:bun-types", + "hello": "file:hello-0.3.2.tgz", + "is-number": "^1.0.0", + }, + }, + "bun-types": { + version: "1.0.0", + dependencies: { "bun-types": "npm:no-deps@^1.0.0" }, + }, + "bun-types/node_modules/bun-types": { + name: "no-deps", + version: "1.0.0", + resolved: reg("no-deps", "1.0.0"), + integrity: integrity["no-deps@1.0.0"], + }, + "node_modules/@types/is-number": { + version: "2.0.0", + resolved: reg("@types/is-number", "2.0.0"), + integrity: integrity["@types/is-number@2.0.0"], + }, + "node_modules/a-dep": { + version: "1.0.10", + resolved: reg("a-dep", "1.0.10"), + integrity: integrity["a-dep@1.0.10"], + }, + "node_modules/bar": { + version: "0.0.2", + resolved: barUrl, + integrity: barIntegrity, + }, + "node_modules/body-parser": { resolved: "packages/body-parser", link: true }, + "node_modules/bun-types": { resolved: "bun-types", link: true }, + "node_modules/express": { + name: "a-dep", + version: "1.0.10", + resolved: reg("a-dep", "1.0.10"), + integrity: integrity["a-dep@1.0.10"], + }, + "node_modules/hello": { + version: "0.3.2", + resolved: "file:hello-0.3.2.tgz", + integrity: helloIntegrity, + dependencies: { "a-dep": "^1.0.0" }, + }, + "node_modules/is-number": { + version: "1.0.0", + resolved: reg("is-number", "1.0.0"), + integrity: integrity["is-number@1.0.0"], + }, + "node_modules/lol": { resolved: "packages/lol-package", link: true }, + "node_modules/not-body-parser": { resolved: "packages/body-parser", link: true }, + "node_modules/second": { resolved: "packages/second", link: true }, + "node_modules/with-postinstall": { resolved: "packages/with-postinstall", link: true }, + "packages/body-parser": { version: "200.0.0" }, + "packages/lol-package": { name: "lol", dependencies: { "no-deps": "^2.0.0" } }, + "packages/lol-package/node_modules/no-deps": { + version: "2.0.0", + resolved: reg("no-deps", "2.0.0"), + integrity: integrity["no-deps@2.0.0"], + }, + "packages/second": { + version: "3.0.0", + dependencies: { + "a-dep": "1.0.5", + "body-parser": "npm:two-range-deps@1.0.0", + "express": "npm:a-dep@*", + "lol": "*", + "not-body-parser": "*", + }, + }, + "packages/second/node_modules/a-dep": { + version: "1.0.5", + resolved: reg("a-dep", "1.0.5"), + integrity: integrity["a-dep@1.0.5"], + }, + "packages/second/node_modules/body-parser": { + name: "two-range-deps", + version: "1.0.0", + resolved: reg("two-range-deps", "1.0.0"), + integrity: integrity["two-range-deps@1.0.0"], + // left-pad is listed only here, with no matching `packages` entry, so the migrator has + // nothing to install for it. The `mustNotExist` checks below make that observable. + dependencies: { "@types/is-number": ">=1.0.0", "no-deps": "^1.0.0", "left-pad": "1.0.0" }, + }, + // Workspace-rooted entry two node_modules segments deep: exercises the migrator's + // nested-path walk past the first resolved level. + "packages/second/node_modules/body-parser/node_modules/no-deps": { + version: "1.0.1", + resolved: reg("no-deps", "1.0.1"), + integrity: integrity["no-deps@1.0.1"], + }, + "packages/with-postinstall": { + version: "1.0.0", + hasInstallScript: true, + dependencies: { "a-dep": "1.0.2" }, + }, + "packages/with-postinstall/node_modules/a-dep": { + version: "1.0.2", + resolved: reg("a-dep", "1.0.2"), + integrity: integrity["a-dep@1.0.2"], + }, + }, + }, + null, + 2, + ), + ); + + await registry.writeBunfig(cwd!); +}); + +afterAll(() => { + tarballServer?.stop(); + registry.stop(); +}); + +test("the install succeeds", async () => { + await using proc = Bun.spawn({ + cmd: [bunExe(), "install"], env: bunEnv, cwd, - stdio: ["inherit", "inherit", "inherit"], + stdout: "pipe", + stderr: "pipe", }); - - await subprocess.exited; - if (subprocess.exitCode != 0) { - cwd = false as any; + const [stdout, stderr, exitCode] = await Promise.all([proc.stdout.text(), proc.stderr.text(), proc.exited]); + if (exitCode !== 0) { + cwd = undefined; + console.error(stderr); throw new Error("Failed to install"); } + expect(stderr).toContain("migrated lockfile from package-lock.json"); + expect(stdout).toContain("packages installed"); }); -// bun-types +// bun-types: `file:` folder with a self-named `npm:` alias validate("node_modules/bun-types", "1.0.0"); mustExist("node_modules/bun-types/isfake.txt"); -// NOTE: ??? -// validate("node_modules/bun-types/node_modules/bun-types", "1.0.0"); +validate("node_modules/bun-types/node_modules/bun-types", "1.0.0", "no-deps"); mustNotExist("node_modules/bun-types/node_modules/bun-types/isfake.txt"); -// svelte -validate("node_modules/svelte", "4.1.2"); -validate("packages/second/node_modules/svelte", "4.1.0"); -validate("packages/with-postinstall/node_modules/svelte", "3.50.0"); -// validate("packages/body-parser/node_modules/svelte", "0.2.0", "public-install-test"); -validate("node_modules/express", "1.0.0", "svelte"); - -// install test -// validate("node_modules/install-test", "0.3.0", "publicinstalltest"); -// mustExist("node_modules/install-test/src/index.js"); -validate("node_modules/install-test1", "0.2.0", "install-test"); -mustExist("node_modules/install-test1/index.js"); -// validate("node_modules/public-install-test", "0.2.0", "public-install-test"); -// mustExist("node_modules/public-install-test/index.js"); - -// hello +// a-dep: one hoisted version plus two nested per-workspace versions +validate("node_modules/a-dep", "1.0.10"); +validate("packages/second/node_modules/a-dep", "1.0.5"); +validate("packages/with-postinstall/node_modules/a-dep", "1.0.2"); +validate("node_modules/express", "1.0.10", "a-dep"); + +// hello: `file:` tarball with a transitive dep validate("node_modules/hello", "0.3.2"); mustExist("node_modules/hello/version.txt"); -mustNotExist("packages/second/node_modules/hello/version.txt"); -// body parser +// bar: remote tarball URL +validate("node_modules/bar", "0.0.2"); + +// body-parser workspace and its aliases validate("node_modules/body-parser", "200.0.0"); validate("node_modules/not-body-parser", "200.0.0", "body-parser"); -// NOTE: bun install doesnt properly handle npm aliased dependencies -// validate("packages/second/node_modules/connect", "200.0.0", "body-parser"); -validate("packages/second/node_modules/body-parser", "3.21.2", "express"); -// NOTE: bun does not hoist this properly, but it is extremely unlikely to be a real use case -// validate("packages/second/node_modules/body-parser/node_modules/body-parser", "1.13.3", "body-parser"); - -// connect -// mustNotExist("node_modules/connect"); -// validate("packages/second/node_modules/body-parser/node_modules/connect", "2.30.2", "connect"); - -// sharp -validate("node_modules/sharp", "0.32.6"); - -// iconv-lite -mustNotExist("packages/second/node_modules/body-parser/node_modules/body-parser/node_modules/iconv-lite"); -mustNotExist("packages/second/node_modules/body-parser/node_modules/iconv-lite"); -mustNotExist("packages/second/node_modules/iconv-lite"); -mustNotExist("node_modules/iconv-lite"); +validate("packages/second/node_modules/body-parser", "1.0.0", "two-range-deps"); + +// @types/is-number: scoped transitive of two-range-deps, hoisted +validate("node_modules/@types/is-number", "2.0.0"); +validate("node_modules/is-number", "1.0.0"); + +// lol: workspace whose folder name differs from its package name. Its `^2.0.0` no-deps +// conflicts with the `1.0.1` pinned two levels deep under the aliased two-range-deps; bun +// hoists 2.0.0 to the root and preserves the pinned 1.0.1 at its nested path. +test("node_modules/lol links to packages/lol-package", () => { + if (!cwd) throw new Error("install failed"); + expect(fs.realpathSync(path.join(cwd, "node_modules", "lol"))).toBe( + fs.realpathSync(path.join(cwd, "packages", "lol-package")), + ); +}); +validate("node_modules/no-deps", "2.0.0"); +validate("packages/second/node_modules/body-parser/node_modules/no-deps", "1.0.1"); +mustNotExist("packages/lol-package/node_modules/no-deps"); + +// with-postinstall: lifecycle script ran +mustExist("packages/with-postinstall/postinstall.txt"); + +// left-pad appears in two-range-deps' lockfile `dependencies` with no matching `packages` entry, +// so the migrator must not install it anywhere. +mustNotExist("node_modules/left-pad"); +mustNotExist("packages/second/node_modules/left-pad"); +mustNotExist("packages/second/node_modules/body-parser/node_modules/left-pad"); diff --git a/test/cli/install/migration/complex-workspace/.gitignore b/test/cli/install/migration/complex-workspace/.gitignore deleted file mode 100644 index 0d4bb62c52c6..000000000000 --- a/test/cli/install/migration/complex-workspace/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -!package-lock.json -bun.lockb \ No newline at end of file diff --git a/test/cli/install/migration/complex-workspace/bun-types/isfake.txt b/test/cli/install/migration/complex-workspace/bun-types/isfake.txt deleted file mode 100644 index f32a5804e292..000000000000 --- a/test/cli/install/migration/complex-workspace/bun-types/isfake.txt +++ /dev/null @@ -1 +0,0 @@ -true \ No newline at end of file diff --git a/test/cli/install/migration/complex-workspace/bun-types/package.json b/test/cli/install/migration/complex-workspace/bun-types/package.json deleted file mode 100644 index a98eb8c83ec4..000000000000 --- a/test/cli/install/migration/complex-workspace/bun-types/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "bun-types", - "version": "1.0.0", - "dependencies": { - "bun-types": "npm:bun-types@^1.0.0" - } -} diff --git a/test/cli/install/migration/complex-workspace/hello-0.3.2.tgz b/test/cli/install/migration/complex-workspace/hello-0.3.2.tgz deleted file mode 100644 index e62e43720a52ffd58bb67310f1cd5a679d9626e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196 zcmV;#06YI5iwFP!00002|Lv1q3xY5dhIj3+7`u*jrgK66X6T_To8p!P;eYR#(oJ28 zAnmz%$FmPM#@pKBYEQUtr<51pIJPhVV6^7H{D?{qoMpKIrHlbuM}u4&O11)bA8bcg zS>TZb|Kvt^CY%drZzzsjoUyJOu^Uy7ov#`>P85Q#)0f5!``<8OZe3;+PYs9H1t diff --git a/test/cli/install/migration/complex-workspace/package-lock.json b/test/cli/install/migration/complex-workspace/package-lock.json deleted file mode 100644 index 79a82b4dc511..000000000000 --- a/test/cli/install/migration/complex-workspace/package-lock.json +++ /dev/null @@ -1,2164 +0,0 @@ -{ - "name": "root", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "root", - "version": "0.0.0", - "workspaces": [ - "packages/*" - ], - "dependencies": { - "bar": "https://github.com/oven-sh/bun/raw/f7e4eb83694aa007a492ef66c28ffbe6a2dae791/test/cli/install/bar-0.0.2.tgz", - "bun-types": "file:bun-types", - "hello": "file:hello-0.3.2.tgz", - "install-test": "bitbucket:dylan-conway/public-install-test", - "install-test1": "git+ssh://git@github.com/dylan-conway/install-test.git#596234dab30564f37adae1e5c4d7123bcffce537", - "public-install-test": "gitlab:dylan-conway/public-install-test", - "svelte": "4.1.2" - } - }, - "bun-types": { - "version": "1.0.0", - "dependencies": { - "bun-types": "npm:bun-types@^1.0.0" - } - }, - "bun-types/node_modules/bun-types": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.0.0.tgz" - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.4.tgz", - "integrity": "sha512-uBIbiYMeSsy2U0XQoOGVVcpIktjLMEKa7ryz2RLr7L/vTnANNEsPVAh4xOv7ondGz6ac1zVb0F8Jx20rQikffQ==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.4.tgz", - "integrity": "sha512-mRsi2vJsk4Bx/AFsNBqOH2fqedxn5L/moT58xgg51DjX1la64Z3Npicut2VbhvDFO26qjWtPMsVxCd80YTFVeg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.4.tgz", - "integrity": "sha512-4iPufZ1TMOD3oBlGFqHXBpa3KFT46aLl6Vy7gwed0ZSYgHaZ/mihbYb4t7Z9etjkC9Al3ZYIoOaHrU60gcMy7g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.4.tgz", - "integrity": "sha512-Lviw8EzxsVQKpbS+rSt6/6zjn9ashUZ7Tbuvc2YENgRl0yZTktGlachZ9KMJUsVjZEGFVu336kl5lBgDN6PmpA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.4.tgz", - "integrity": "sha512-YHbSFlLgDwglFn0lAO3Zsdrife9jcQXQhgRp77YiTDja23FrC2uwnhXMNkAucthsf+Psr7sTwYEryxz6FPAVqw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.4.tgz", - "integrity": "sha512-vz59ijyrTG22Hshaj620e5yhs2dU1WJy723ofc+KUgxVCM6zxQESmWdMuVmUzxtGqtj5heHyB44PjV/HKsEmuQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.4.tgz", - "integrity": "sha512-3sRbQ6W5kAiVQRBWREGJNd1YE7OgzS0AmOGjDmX/qZZecq8NFlQsQH0IfXjjmD0XtUYqr64e0EKNFjMUlPL3Cw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.4.tgz", - "integrity": "sha512-z/4ArqOo9EImzTi4b6Vq+pthLnepFzJ92BnofU1jgNlcVb+UqynVFdoXMCFreTK7FdhqAzH0vmdwW5373Hm9pg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.4.tgz", - "integrity": "sha512-ZWmWORaPbsPwmyu7eIEATFlaqm0QGt+joRE9sKcnVUG3oBbr/KYdNE2TnkzdQwX6EDRdg/x8Q4EZQTXoClUqqA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.4.tgz", - "integrity": "sha512-EGc4vYM7i1GRUIMqRZNCTzJh25MHePYsnQfKDexD8uPTCm9mK56NIL04LUfX2aaJ+C9vyEp2fJ7jbqFEYgO9lQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.4.tgz", - "integrity": "sha512-WVhIKO26kmm8lPmNrUikxSpXcgd6HDog0cx12BUfA2PkmURHSgx9G6vA19lrlQOMw+UjMZ+l3PpbtzffCxFDRg==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.4.tgz", - "integrity": "sha512-keYY+Hlj5w86hNp5JJPuZNbvW4jql7c1eXdBUHIJGTeN/+0QFutU3GrS+c27L+NTmzi73yhtojHk+lr2+502Mw==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.4.tgz", - "integrity": "sha512-tQ92n0WMXyEsCH4m32S21fND8VxNiVazUbU4IUGVXQpWiaAxOBvtOtbEt3cXIV3GEBydYsY8pyeRMJx9kn3rvw==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.4.tgz", - "integrity": "sha512-tRRBey6fG9tqGH6V75xH3lFPpj9E8BH+N+zjSUCnFOX93kEzqS0WdyJHkta/mmJHn7MBaa++9P4ARiU4ykjhig==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.4.tgz", - "integrity": "sha512-152aLpQqKZYhThiJ+uAM4PcuLCAOxDsCekIbnGzPKVBRUDlgaaAfaUl5NYkB1hgY6WN4sPkejxKlANgVcGl9Qg==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.4.tgz", - "integrity": "sha512-Mi4aNA3rz1BNFtB7aGadMD0MavmzuuXNTaYL6/uiYIs08U7YMPETpgNn5oue3ICr+inKwItOwSsJDYkrE9ekVg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.4.tgz", - "integrity": "sha512-9+Wxx1i5N/CYo505CTT7T+ix4lVzEdz0uCoYGxM5JDVlP2YdDC1Bdz+Khv6IbqmisT0Si928eAxbmGkcbiuM/A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.4.tgz", - "integrity": "sha512-MFsHleM5/rWRW9EivFssop+OulYVUoVcqkyOkjiynKBCGBj9Lihl7kh9IzrreDyXa4sNkquei5/DTP4uCk25xw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.4.tgz", - "integrity": "sha512-6Xq8SpK46yLvrGxjp6HftkDwPP49puU4OF0hEL4dTxqCbfx09LyrbUj/D7tmIRMj5D5FCUPksBbxyQhp8tmHzw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.4.tgz", - "integrity": "sha512-PkIl7Jq4mP6ke7QKwyg4fD4Xvn8PXisagV/+HntWoDEdmerB2LTukRZg728Yd1Fj+LuEX75t/hKXE2Ppk8Hh1w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.4.tgz", - "integrity": "sha512-ga676Hnvw7/ycdKB53qPusvsKdwrWzEyJ+AtItHGoARszIqvjffTwaaW3b2L6l90i7MO9i+dlAW415INuRhSGg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.4.tgz", - "integrity": "sha512-HP0GDNla1T3ZL8Ko/SHAS2GgtjOg+VmWnnYLhuTksr++EnduYB0f3Y2LzHsUwb2iQ13JGoY6G3R8h6Du/WG6uA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@types/estree": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", - "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==" - }, - "node_modules/accepts": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz", - "integrity": "sha512-R190A3EzrS4huFOVZajhXCYZt5p5yrkaQOB4nsWzfth0cYaDcSN5J86l58FJ1dt7igp37fB/QhnuFkGAJmr+eg==", - "dependencies": { - "mime-types": "~2.1.6", - "negotiator": "0.5.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/b4a": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", - "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" - }, - "node_modules/bar": { - "version": "0.0.2", - "resolved": "https://github.com/oven-sh/bun/raw/f7e4eb83694aa007a492ef66c28ffbe6a2dae791/test/cli/install/bar-0.0.2.tgz", - "integrity": "sha512-DXWxn8qZ4n87XMJjwZUdYPnsrl8Ntz66PudFoxDVkaPEkZBBzENAKsJPgbBacD782W8RwD/v4mjwVyqlPpQ59w==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/base64-url": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/base64-url/-/base64-url-1.2.1.tgz", - "integrity": "sha512-V8E0l1jyyeSSS9R+J9oljx5eq2rqzClInuwaPcyuv0Mm3ViI/3/rcc4rCEO8i4eQ4I0O0FAGYDA2i5xWHHPhzg==" - }, - "node_modules/basic-auth": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz", - "integrity": "sha512-uvq3I/zC5TmG0WZJDzsXzIytU9GiiSq23Gl27Dq9sV81JTfPfQhtdADECP1DJZeJoZPuYU0Y81hWC5y/dOR+Yw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/basic-auth-connect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz", - "integrity": "sha512-kiV+/DTgVro4aZifY/hwRwALBISViL5NP4aReaR2EVJEObpbUBHIkdJh/YpcoEiYt7nBodZ6U2ajZeZvSxUCCg==" - }, - "node_modules/batch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", - "integrity": "sha512-aQgHPLH2DHpFTpBl5/GiVdNzHEqsLCSs1RiPvqkKP1+7RkNJlv71kL8/KXmvvaLqoZ7ylmvqkZhLjjAoRz8Xgw==" - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bl/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/body-parser": { - "resolved": "packages/body-parser", - "link": true - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/bun-types": { - "resolved": "bun-types", - "link": true - }, - "node_modules/bytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.1.0.tgz", - "integrity": "sha512-k9VSlRfRi5JYyQWMylSOgjld96ta1qaQUIvmn+na0BzViclH04PBumewv4z5aeXNkn6Z/gAN5FtPeBLvV20F9w==" - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/code-red": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", - "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15", - "@types/estree": "^1.0.1", - "acorn": "^8.10.0", - "estree-walker": "^3.0.3", - "periscopic": "^3.1.0" - } - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/commander": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", - "integrity": "sha512-PhbTMT+ilDXZKqH8xbvuUY2ZEQNef0Q7DKxgoEKb4ccytsdvVVJmYqR0sGbi96nxU6oGrwEIQnclpK2NBZuQlg==", - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.5.2.tgz", - "integrity": "sha512-+2fE8M8+Oe0kAlbMPz6UinaaH/HaGf+c5HlWRyYtPga/PHKxStJJKTU4xca8StY0JQ78L2kJaslpgSzCKgHaxQ==", - "dependencies": { - "accepts": "~1.2.12", - "bytes": "2.1.0", - "compressible": "~2.0.5", - "debug": "~2.2.0", - "on-headers": "~1.0.0", - "vary": "~1.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/connect-timeout": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/connect-timeout/-/connect-timeout-1.6.2.tgz", - "integrity": "sha512-qIFt3Ja6gRuJtVoWhPa5FtOO8ERs0MfW/QkmQ0vjrAL78otrkxe8w/qjTAgU/T1W/jH5qeZXJHilmOPKNTiEQw==", - "dependencies": { - "debug": "~2.2.0", - "http-errors": "~1.3.1", - "ms": "0.7.1", - "on-headers": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/content-disposition": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.0.tgz", - "integrity": "sha512-PWzG8GssMHTPSLBoOeK5MvPPJeWU5ZVX8omvJC16BUH/nUX6J/jM/hgm/mrPWzTXVV3B3OoBhFdHXyGLU4TgUw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.3.tgz", - "integrity": "sha512-mWkFhcL+HVG1KjeCjEBVJJ7s4sAGMLiBDFSDs4bzzvgLZt7rW8BhP6XV/8b1+pNvx/skd3yYxPuaF3Z6LlQzyw==", - "engines": { - "node": "*" - } - }, - "node_modules/cookie-parser": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.5.tgz", - "integrity": "sha512-YN/8nzPcK5o6Op4MIzAd4H4qUal5+3UaMhVIeaafFYL0pKvBQA/9Yhzo7ZwvBpjdGshsiTAb1+FC37M6RdPDFg==", - "dependencies": { - "cookie": "0.1.3", - "cookie-signature": "1.0.6" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/crc": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.3.0.tgz", - "integrity": "sha512-QCx3z7FOZbJrapsnewTkh1Hxh6PHV61SRHbx6Q65Uih3y0kfIj+dDGI3uQ4Q1DLKOILyvpZxvJpoKPrxathpCg==" - }, - "node_modules/csrf": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/csrf/-/csrf-3.0.6.tgz", - "integrity": "sha512-3q1ocniLMgk9nHHEt/I/JsN9IfiGjgp6MHgYNT7+CPmQvi5DF6qzenXnZSH6f9Qaa+4DhmUDJa8SgFZ+OFf9Qg==", - "dependencies": { - "rndm": "1.2.0", - "tsscmp": "1.0.5", - "uid-safe": "2.1.4" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/csurf": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/csurf/-/csurf-1.8.3.tgz", - "integrity": "sha512-p2NJ9fGOn5HCaV9jAOBCSjIGMRMrpm9/yDswD0bFi7zQv1ifDufIKI5nem9RmhMsH6jVD6Sx6vs57hnivvkJJw==", - "dependencies": { - "cookie": "0.1.3", - "cookie-signature": "1.0.6", - "csrf": "~3.0.0", - "http-errors": "~1.3.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha512-X0rGvJcskG1c3TgSCPqHJ0XJgwlcvOC7elJ5Y0hYuKBZoVqWpAMfLOeIh2UI/DCQ5ruodIjvsugZtjUYUw2pUw==", - "dependencies": { - "ms": "0.7.1" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/depd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz", - "integrity": "sha512-OEWAMbCkK9IWQ8pfTvHBhCSqHgR+sk5pbiYqq0FqfARG4Cy+cRsCbITx6wh5pcsmfBPiJAcbd98tfdz5fnBbag==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz", - "integrity": "sha512-KB/AVLKRwZPOEo6/lxkDJ+Bv3jFRRrhmnRMPvpWwmIfUggpzGkQBqolyo8FRf833b/F5rzmy1uVN3fHBkjTxgw==" - }, - "node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/errorhandler": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.4.3.tgz", - "integrity": "sha512-pp1hk9sZBq4Bj/e/Cl84fJ3cYiQDFZk3prp7jrurUbPGOlY7zA2OubjhhEAWuUb8VNTFIkGwoby7Uq6YpicfvQ==", - "dependencies": { - "accepts": "~1.3.0", - "escape-html": "~1.0.3" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/errorhandler/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/errorhandler/node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/errorhandler/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/esbuild": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.4.tgz", - "integrity": "sha512-x7jL0tbRRpv4QUyuDMjONtWFciygUxWaUM1kMX2zWxI0X2YWOt7MSA0g4UdeSiHM8fcYVzpQhKYOycZwxTdZkA==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.19.4", - "@esbuild/android-arm64": "0.19.4", - "@esbuild/android-x64": "0.19.4", - "@esbuild/darwin-arm64": "0.19.4", - "@esbuild/darwin-x64": "0.19.4", - "@esbuild/freebsd-arm64": "0.19.4", - "@esbuild/freebsd-x64": "0.19.4", - "@esbuild/linux-arm": "0.19.4", - "@esbuild/linux-arm64": "0.19.4", - "@esbuild/linux-ia32": "0.19.4", - "@esbuild/linux-loong64": "0.19.4", - "@esbuild/linux-mips64el": "0.19.4", - "@esbuild/linux-ppc64": "0.19.4", - "@esbuild/linux-riscv64": "0.19.4", - "@esbuild/linux-s390x": "0.19.4", - "@esbuild/linux-x64": "0.19.4", - "@esbuild/netbsd-x64": "0.19.4", - "@esbuild/openbsd-x64": "0.19.4", - "@esbuild/sunos-x64": "0.19.4", - "@esbuild/win32-arm64": "0.19.4", - "@esbuild/win32-ia32": "0.19.4", - "@esbuild/win32-x64": "0.19.4" - } - }, - "node_modules/escape-html": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.2.tgz", - "integrity": "sha512-J5ahyCRC4liskWVAfkmosNWfG0eHQxI0W+Ko7k3cZaYVMfgt05dwZ68vw6S/TZM1BPvuTv3kq6CRCb7WWtBUVA==" - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/etag": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", - "integrity": "sha512-Mbv5pNpLNPrm1b4rzZlZlfTRpdDr31oiD43N362sIyvSWVNu5Du33EcJGzvEV4YdYLuENB1HzND907cQkFmXNw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/express": { - "name": "svelte", - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-1.0.0.tgz", - "integrity": "sha512-YCzdYmY4k+29yWvNNYVkZE9OI5g4RwumRyX8tnD6cOiU0FCL/6N0Qn3XHZaL1MnJAICjNTObu/OEmC9ht7ITNQ==" - }, - "node_modules/express-session": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.11.3.tgz", - "integrity": "sha512-QdSbGRRg+JMvlYpancRDFXDmIMqjEdpowriwQc4Kz3mvPwTnOPD/h5FSS21+4z4Isosta+ULmEwL6F3/lylWWg==", - "dependencies": { - "cookie": "0.1.3", - "cookie-signature": "1.0.6", - "crc": "3.3.0", - "debug": "~2.2.0", - "depd": "~1.0.1", - "on-headers": "~1.0.0", - "parseurl": "~1.3.0", - "uid-safe": "~2.0.0", - "utils-merge": "1.0.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/express-session/node_modules/uid-safe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.0.0.tgz", - "integrity": "sha512-PH/12q0a/sEGVS28fZ5evILW2Ayn13PwkYmCleDsIPm39vUIqN58hjyqtUd496kyMY6WkXtaDMDpS8nSCmNKTg==", - "dependencies": { - "base64-url": "1.2.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" - }, - "node_modules/finalhandler": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.0.tgz", - "integrity": "sha512-jJU2WE88OqUvwAIf/1K2G2fTdKKZ8LvSwYQyFFekDcmBnBmht38enbcmErnA7iNZktcEo/o2JAHYbe1QDOAgaA==", - "dependencies": { - "debug": "~2.2.0", - "escape-html": "1.0.2", - "on-finished": "~2.3.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha512-Ua9xNhH0b8pwE3yRbFfXJvfdWF0UHNCdeyb2sbi9Ul/M+r3PTdrz7Cv4SCfZRMjmzEM9PhraqfZFbGTIg3OMyA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", - "integrity": "sha512-akx5WBKAwMSg36qoHTuMMVncHWctlaDGslJASDYAhoLrzDUDCjZlOngNa/iC6lPm9aA0qk8pN5KnpmbJHSIIQQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, - "node_modules/hello": { - "version": "0.3.2", - "resolved": "file:hello-0.3.2.tgz", - "integrity": "sha512-gIib5J410ZOWSdETHA9L7lqtTBPduleEWV7kOEWX0pReX0N5Lih5ZTE4E9XvmX+DI/HOntKB+EgFljix9FVcug==", - "dependencies": { - "svelte": "4" - } - }, - "node_modules/http-errors": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz", - "integrity": "sha512-gMygNskMurDCWfoCdyh1gOeDfSbkAHXqz94QoPj5IHIUjC/BG8/xv7FSEUr7waR5RcAya4j58bft9Wu/wHNeXA==", - "dependencies": { - "inherits": "~2.0.1", - "statuses": "1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/install-test": { - "name": "publicinstalltest", - "version": "0.3.0", - "resolved": "git+ssh://git@bitbucket.org/dylan-conway/public-install-test.git#79265e2d9754c60b60f97cc8d859fb6da073b5d2" - }, - "node_modules/install-test1": { - "version": "0.2.0", - "resolved": "git+ssh://git@github.com/dylan-conway/install-test.git#596234dab30564f37adae1e5c4d7123bcffce537", - "integrity": "sha512-65iIjVoaUdhWa5GSlZ1E6JA8fCHTTaAjNdAkNqAZ4Khtzw0JK0clSCdzyA3k7rKtZgNj0a31XF8JkQ2hrpmI/A==" - }, - "node_modules/ipaddr.js": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.0.5.tgz", - "integrity": "sha512-wBj+q+3uP78gMowwWgFLAYm/q4x5goyZmDsmuvyz+nd1u0D/ghgXXtc1OkgmTzSiWT101kiqGacwFk9eGQw6xQ==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/locate-character": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" - }, - "node_modules/lol": { - "resolved": "packages/lol-package", - "link": true - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/magic-string": { - "version": "0.30.4", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.4.tgz", - "integrity": "sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.0.tgz", - "integrity": "sha512-YJiZmTZTkrqvgefMsWdioTKsZdHnfAhHHkEdPg+4PCqMJEGHQo5iJQjEbMv3XyBZ6y3Z2Rj1mqq1WNKq9e0yNw==" - }, - "node_modules/method-override": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.10.tgz", - "integrity": "sha512-Ks2/7e+3JuwQcpLybc6wTHyqg13HDjOhLcE+YaAEub9DbSxF+ieMvxUlybmWW9luRMh9Cd0rO9aNtzUT51xfNQ==", - "dependencies": { - "debug": "2.6.9", - "methods": "~1.1.2", - "parseurl": "~1.3.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/method-override/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/method-override/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/method-override/node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha512-sAaYXszED5ALBt665F0wMQCUXpGuZsGdopoqcHPdL39ZYdi7uHoZlhrfZfhv8WzivhBzr/oXwaj+yiK5wY8MXQ==", - "bin": { - "mime": "cli.js" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==" - }, - "node_modules/mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "node_modules/morgan": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.6.1.tgz", - "integrity": "sha512-WWxlTx5xCqbtSeX/gPVHUZBhAhSMfYQLgPrWHEN0FYnF+zf1Ju/Zct6rpeKmvzibrYF4QvFVws7IN61BxnKu+Q==", - "dependencies": { - "basic-auth": "~1.0.3", - "debug": "~2.2.0", - "depd": "~1.0.1", - "on-finished": "~2.3.0", - "on-headers": "~1.0.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha512-lRLiIR9fSNpnP6TC4v8+4OU7oStC01esuNowdQ34L+Gk8e5Puoc88IqJ+XAY/B3Mn2ZKis8l8HX90oU8ivzUHg==" - }, - "node_modules/multiparty": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-3.3.2.tgz", - "integrity": "sha512-FX6dDOKzDpkrb5/+Imq+V6dmCZNnC02tMDiZfrgHSYgfQj6CVPGzOVqfbHKt/Vy4ZZsmMPXkulyLf92lCyvV7A==", - "dependencies": { - "readable-stream": "~1.1.9", - "stream-counter": "~0.2.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "node_modules/negotiator": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.5.3.tgz", - "integrity": "sha512-oXmnazqehLNFohqgLxRyUdOQU9/UX0NpCpsnbjWUjM62ZM8oSOXYZpHc68XR130ftPNano0oQXGdREAplZRhaQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-abi": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.47.0.tgz", - "integrity": "sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" - }, - "node_modules/not-body-parser": { - "resolved": "packages/body-parser", - "link": true - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pause": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.1.0.tgz", - "integrity": "sha512-aeHLgQCtI3tcuYVnrvAeVb4Tkm1za4r3YDv3hMeUxcRxet3dbEhJOdtoMrsT/Q5tY3Oy2A1A9FD5el5tWp2FSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, - "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prebuild-install/node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/prebuild-install/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prebuild-install/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/prebuild-install/node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/prebuild-install/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/proxy-addr": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.10.tgz", - "integrity": "sha512-iq6kR9KN32aFvXjDyC8nIrm203AHeIBPjL6dpaHgSdbpTO8KoPlD0xG92xwwtkCL9+yt1LE5VwpEk43TyP38Dg==", - "dependencies": { - "forwarded": "~0.1.0", - "ipaddr.js": "1.0.5" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/public-install-test": { - "version": "0.2.0", - "resolved": "git+ssh://git@gitlab.com/dylan-conway/public-install-test.git#93f3aa4ec9ca8a0bacc010776db48bfcd915c44c" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/qs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz", - "integrity": "sha512-8MPmJ83uBOPsQj5tQCv4g04/nTiY+d17yl9o3Bw73vC6XlEm2POIRRlOgWJ8i74bkGLII670cDJJZkgiZ2sIkg==" - }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" - }, - "node_modules/random-bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/range-parser": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.3.tgz", - "integrity": "sha512-nDsRrtIxVUO5opg/A8T2S3ebULVIfuh8ECbh4w3N4mWxIiT3QILDJDUQayPqm2e8Q8NUa0RSUkGCfe33AfjR3Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/response-time": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.2.tgz", - "integrity": "sha512-MUIDaDQf+CVqflfTdQ5yam+aYCkXj1PY8fjlPDQ6ppxJlmgZb864pHtA750mayywNg8tx4rS7qH9JXd/OF+3gw==", - "dependencies": { - "depd": "~1.1.0", - "on-headers": "~1.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/response-time/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/rndm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/rndm/-/rndm-1.2.0.tgz", - "integrity": "sha512-fJhQQI5tLrQvYIYFpOnFinzv9dwmR7hRnUz1XqP3OJ1jIweTNOd6aTO4jwQSgcBSFUB+/KHJxuGneime+FdzOw==" - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/second": { - "resolved": "packages/second", - "link": true - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.13.0.tgz", - "integrity": "sha512-zck2y84i0SbUUiwq2l5gGPNVpCplL48og5xIhFjNjQa09003YCTy6Vb3rKfVuG8W8PWNUtUOntjQEBdwkJ9oBw==", - "dependencies": { - "debug": "~2.2.0", - "depd": "~1.0.1", - "destroy": "1.0.3", - "escape-html": "1.0.2", - "etag": "~1.7.0", - "fresh": "0.3.0", - "http-errors": "~1.3.1", - "mime": "1.3.4", - "ms": "0.7.1", - "on-finished": "~2.3.0", - "range-parser": "~1.0.2", - "statuses": "~1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/statuses": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", - "integrity": "sha512-pVEuxHdSGrt8QmQ3LOZXLhSA6MP/iPqKzZeO6Squ7PNGkA/9MBsSfV0/L+bIxkoDmjF4tZcLpcVq/fkqoHvuKg==" - }, - "node_modules/serve-favicon": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.3.2.tgz", - "integrity": "sha512-oHEaA3ohvKxEWhjP97cQ6QuTTbMBF3AxDyMSvBtvnl1jXaB2Ik6kXE7nUtPM3YVU5VHCDe6n7JZrFCWzQuvXEQ==", - "dependencies": { - "etag": "~1.7.0", - "fresh": "0.3.0", - "ms": "0.7.2", - "parseurl": "~1.3.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-favicon/node_modules/ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha512-5NnE67nQSQDJHVahPJna1PQ/zCXMnQop3yUCxjKPNzCxuyPSKWTQ/5Gu5CZmjetwGLWRA+PzeF5thlbOdbQldA==" - }, - "node_modules/serve-index": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.7.3.tgz", - "integrity": "sha512-g18EQWY83uFBldFpCyK/a49yxQgIMEMLA6U9f66FiI848mLkMO8EY/xRAZAoCwNFwSUAiArCF3mdjaNXpd3ghw==", - "dependencies": { - "accepts": "~1.2.13", - "batch": "0.5.3", - "debug": "~2.2.0", - "escape-html": "~1.0.3", - "http-errors": "~1.3.1", - "mime-types": "~2.1.9", - "parseurl": "~1.3.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/serve-static": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.3.tgz", - "integrity": "sha512-ScsFovjz3Db+vGgpofR/U8p8UULEcGV9akqyo8TQ1mMnjcxemE7Y5Muo+dvy3tJLY/doY2v1H61eCBMYGmwfrA==", - "dependencies": { - "escape-html": "~1.0.3", - "parseurl": "~1.3.1", - "send": "0.13.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-static/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static/node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==" - }, - "node_modules/serve-static/node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/serve-static/node_modules/send": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.13.2.tgz", - "integrity": "sha512-cQ0rmXHrdO2Iof08igV2bG/yXWD106ANwBg6DkGQNT2Vsznbgq6T0oAIQboy1GoFsIuy51jCim26aA9tj3Z3Zg==", - "dependencies": { - "debug": "~2.2.0", - "depd": "~1.1.0", - "destroy": "~1.0.4", - "escape-html": "~1.0.3", - "etag": "~1.7.0", - "fresh": "0.3.0", - "http-errors": "~1.3.1", - "mime": "1.3.4", - "ms": "0.7.1", - "on-finished": "~2.3.0", - "range-parser": "~1.0.3", - "statuses": "~1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-static/node_modules/statuses": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz", - "integrity": "sha512-pVEuxHdSGrt8QmQ3LOZXLhSA6MP/iPqKzZeO6Squ7PNGkA/9MBsSfV0/L+bIxkoDmjF4tZcLpcVq/fkqoHvuKg==" - }, - "node_modules/sharp": { - "version": "0.32.6", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", - "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", - "hasInstallScript": true, - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.2", - "node-addon-api": "^6.1.0", - "prebuild-install": "^7.1.1", - "semver": "^7.5.4", - "simple-get": "^4.0.1", - "tar-fs": "^3.0.4", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stream-counter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-0.2.0.tgz", - "integrity": "sha512-GjA2zKc2iXUUKRcOxXQmhEx0Ev3XHJ6c8yWGqhQjWwhGrqNwSsvq9YlRLgoGtZ5Kx2Ln94IedaqJ5GUG6aBbxA==", - "dependencies": { - "readable-stream": "~1.1.8" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/streamx": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz", - "integrity": "sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==", - "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" - } - }, - "node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/svelte": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.1.2.tgz", - "integrity": "sha512-/evA8U6CgOHe5ZD1C1W3va9iJG7mWflcCdghBORJaAhD2JzrVERJty/2gl0pIPrJYBGZwZycH6onYf+64XXF9g==", - "dependencies": { - "@ampproject/remapping": "^2.2.1", - "@jridgewell/sourcemap-codec": "^1.4.15", - "@jridgewell/trace-mapping": "^0.3.18", - "acorn": "^8.9.0", - "aria-query": "^5.3.0", - "axobject-query": "^3.2.1", - "code-red": "^1.0.3", - "css-tree": "^2.3.1", - "estree-walker": "^3.0.3", - "is-reference": "^3.0.1", - "locate-character": "^3.0.0", - "magic-string": "^0.30.0", - "periscopic": "^3.1.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/tar-fs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", - "dependencies": { - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - } - }, - "node_modules/tar-stream": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", - "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, - "node_modules/tsscmp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz", - "integrity": "sha512-aP/vy9xYiYGvtpW4xBkxdoeqbT+nNeo/37cdQk3iSiGz0xKb20XwOgBSqYo1DzEqt1ycPubEfPU3oHgzsRRL3g==", - "engines": { - "node": ">=0.6.x" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/uid-safe": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.4.tgz", - "integrity": "sha512-MHTGzIDNPv1XhDK0MyKvEroobUhtpMa649/9SIFbTRO2dshLctD3zxOwQw+gQ+Mlp5osfMdUU1sjcO6Fw4rvCA==", - "dependencies": { - "random-bytes": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha512-HwU9SLQEtyo+0uoKXd1nkLqigUWLB+QuNQR4OcmB73eWqksM5ovuqcycks2x043W8XVb75rG1HQ0h93TMXkzQQ==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/vary": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.1.tgz", - "integrity": "sha512-yNsH+tC0r8quK2tg/yqkXqqaYzeKTkSqQ+8T6xCoWgOi/bU/omMYz+6k+I91JJJDeltJzI7oridTOq6OYkY0Tw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vhost": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vhost/-/vhost-3.0.2.tgz", - "integrity": "sha512-S3pJdWrpFWrKMboRU4dLYgMrTgoPALsmYwOvyebK2M6X95b9kQrjZy5rwl3uzzpfpENe/XrNYu/2U+e7/bmT5g==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/with-postinstall": { - "resolved": "packages/with-postinstall", - "link": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "other/another-workspace-pkg": { - "name": "lol", - "extraneous": true - }, - "packages/body-parser": { - "version": "200.0.0", - "dependencies": { - "svelte": "git+ssh://git@gitlab.com/dylan-conway/public-install-test.git#93f3aa4ec9ca8a0bacc010776db48bfcd915c44c" - } - }, - "packages/body-parser/node_modules/svelte": { - "name": "public-install-test", - "version": "0.2.0", - "resolved": "git+ssh://git@gitlab.com/dylan-conway/public-install-test.git#93f3aa4ec9ca8a0bacc010776db48bfcd915c44c" - }, - "packages/lol-package": { - "name": "lol", - "dependencies": { - "esbuild": "^0.19.4" - } - }, - "packages/second": { - "version": "3.0.0", - "dependencies": { - "body-parser": "npm:express@*", - "connect": "200.0.0", - "express": "npm:svelte@*", - "hello": "0.3.2", - "lol": "*", - "not-body-parser": "*", - "svelte": "4.1.0" - } - }, - "packages/second/node_modules/body-parser": { - "name": "express", - "version": "3.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-3.21.2.tgz", - "integrity": "sha512-r3mq2RNCDxAdmZrzEAdjlk5/W7x8+vjU1aAcoAoZFq62KtkWQX+MbaSN4g59CwdUFf9MFf1VSqkZJ+LeR9jmww==", - "dependencies": { - "basic-auth": "~1.0.3", - "commander": "2.6.0", - "connect": "2.30.2", - "content-disposition": "0.5.0", - "content-type": "~1.0.1", - "cookie": "0.1.3", - "cookie-signature": "1.0.6", - "debug": "~2.2.0", - "depd": "~1.0.1", - "escape-html": "1.0.2", - "etag": "~1.7.0", - "fresh": "0.3.0", - "merge-descriptors": "1.0.0", - "methods": "~1.1.1", - "mkdirp": "0.5.1", - "parseurl": "~1.3.0", - "proxy-addr": "~1.0.8", - "range-parser": "~1.0.2", - "send": "0.13.0", - "utils-merge": "1.0.0", - "vary": "~1.0.1" - }, - "bin": { - "express": "bin/express" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "packages/second/node_modules/body-parser/node_modules/body-parser": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.13.3.tgz", - "integrity": "sha512-ypX8/9uws2W+CjPp3QMmz1qklzlhRBknQve22Y+WFecHql+qDFfG+VVNX7sooA4Q3+2fdq4ZZj6Xr07gA90RZg==", - "dependencies": { - "bytes": "2.1.0", - "content-type": "~1.0.1", - "debug": "~2.2.0", - "depd": "~1.0.1", - "http-errors": "~1.3.1", - "iconv-lite": "0.4.11", - "on-finished": "~2.3.0", - "qs": "4.0.0", - "raw-body": "~2.1.2", - "type-is": "~1.6.6" - }, - "engines": { - "node": ">= 0.8" - } - }, - "packages/second/node_modules/body-parser/node_modules/connect": { - "version": "2.30.2", - "resolved": "https://registry.npmjs.org/connect/-/connect-2.30.2.tgz", - "integrity": "sha512-eY4YHls5bz/g6h9Q8B/aVkS6D7+TRiRlI3ksuruv3yc2rLbTG7HB/7T/CoZsuVH5e2i3S9J+2eARV5o7GIYq8Q==", - "deprecated": "connect 2.x series is deprecated", - "dependencies": { - "basic-auth-connect": "1.0.0", - "body-parser": "~1.13.3", - "bytes": "2.1.0", - "compression": "~1.5.2", - "connect-timeout": "~1.6.2", - "content-type": "~1.0.1", - "cookie": "0.1.3", - "cookie-parser": "~1.3.5", - "cookie-signature": "1.0.6", - "csurf": "~1.8.3", - "debug": "~2.2.0", - "depd": "~1.0.1", - "errorhandler": "~1.4.2", - "express-session": "~1.11.3", - "finalhandler": "0.4.0", - "fresh": "0.3.0", - "http-errors": "~1.3.1", - "method-override": "~2.3.5", - "morgan": "~1.6.1", - "multiparty": "3.3.2", - "on-headers": "~1.0.0", - "parseurl": "~1.3.0", - "pause": "0.1.0", - "qs": "4.0.0", - "response-time": "~2.3.1", - "serve-favicon": "~2.3.0", - "serve-index": "~1.7.2", - "serve-static": "~1.10.0", - "type-is": "~1.6.6", - "utils-merge": "1.0.0", - "vhost": "~3.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "packages/second/node_modules/svelte": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.1.0.tgz", - "integrity": "sha512-qob6IX0ui4Z++Lhwzvqb6aig79WhwsF3z6y1YMicjvw0rv71hxD+RmMFG3BM8lB7prNLXeOLnP64Zrynqa3Gtw==", - "dependencies": { - "@ampproject/remapping": "^2.2.1", - "@jridgewell/sourcemap-codec": "^1.4.15", - "@jridgewell/trace-mapping": "^0.3.18", - "acorn": "^8.9.0", - "aria-query": "^5.3.0", - "axobject-query": "^3.2.1", - "code-red": "^1.0.3", - "css-tree": "^2.3.1", - "estree-walker": "^3.0.3", - "is-reference": "^3.0.1", - "locate-character": "^3.0.0", - "magic-string": "^0.30.0", - "periscopic": "^3.1.0" - }, - "engines": { - "node": ">=16" - } - }, - "packages/with-postinstall": { - "version": "1.0.0", - "hasInstallScript": true, - "dependencies": { - "sharp": "*", - "svelte": "3.50.0" - } - }, - "packages/with-postinstall/node_modules/svelte": { - "version": "3.50.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.50.0.tgz", - "integrity": "sha512-zXeOUDS7+85i+RxLN+0iB6PMbGH7OhEgjETcD1fD8ZrhuhNFxYxYEHU41xuhkHIulJavcu3PKbPyuCrBxdxskQ==", - "engines": { - "node": ">= 8" - } - } - } -} diff --git a/test/cli/install/migration/complex-workspace/package.json b/test/cli/install/migration/complex-workspace/package.json deleted file mode 100644 index 68a17e643e3e..000000000000 --- a/test/cli/install/migration/complex-workspace/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "root", - "version": "0.0.0", - "dependencies": { - "bar": "https://github.com/oven-sh/bun/raw/f7e4eb83694aa007a492ef66c28ffbe6a2dae791/test/cli/install/bar-0.0.2.tgz", - "bun-types": "file:bun-types", - "hello": "file:hello-0.3.2.tgz", - "install-test": "bitbucket:dylan-conway/public-install-test", - "install-test1": "git+ssh://git@github.com/dylan-conway/install-test.git#596234dab30564f37adae1e5c4d7123bcffce537", - "lines-and-columns": "^1.1.6", - "public-install-test": "gitlab:dylan-conway/public-install-test", - "svelte": "4.1.2" - }, - "workspaces": [ - "packages/*" - ] -} diff --git a/test/cli/install/migration/complex-workspace/packages/body-parser/isfake.txt b/test/cli/install/migration/complex-workspace/packages/body-parser/isfake.txt deleted file mode 100644 index f32a5804e292..000000000000 --- a/test/cli/install/migration/complex-workspace/packages/body-parser/isfake.txt +++ /dev/null @@ -1 +0,0 @@ -true \ No newline at end of file diff --git a/test/cli/install/migration/complex-workspace/packages/body-parser/package.json b/test/cli/install/migration/complex-workspace/packages/body-parser/package.json deleted file mode 100644 index e0c363a2042e..000000000000 --- a/test/cli/install/migration/complex-workspace/packages/body-parser/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "body-parser", - "version": "200.0.0", - "dependencies": { - "svelte": "git+ssh://git@gitlab.com/dylan-conway/public-install-test.git#93f3aa4ec9ca8a0bacc010776db48bfcd915c44c" - } -} diff --git a/test/cli/install/migration/complex-workspace/packages/lol-package/package.json b/test/cli/install/migration/complex-workspace/packages/lol-package/package.json deleted file mode 100644 index a90e57966ed9..000000000000 --- a/test/cli/install/migration/complex-workspace/packages/lol-package/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "lol", - "dependencies": { - "esbuild": "^0.19.4" - } -} diff --git a/test/cli/install/migration/complex-workspace/packages/second/package.json b/test/cli/install/migration/complex-workspace/packages/second/package.json deleted file mode 100644 index 5c4d8b2c95d0..000000000000 --- a/test/cli/install/migration/complex-workspace/packages/second/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "second", - "version": "3.0.0", - "dependencies": { - "body-parser": "npm:express@*", - "express": "npm:svelte@*", - "hello": "0.3.2", - "lol": "*", - "not-body-parser": "*", - "svelte": "4.1.0" - } -} diff --git a/test/cli/install/migration/complex-workspace/packages/with-postinstall/.gitignore b/test/cli/install/migration/complex-workspace/packages/with-postinstall/.gitignore deleted file mode 100644 index c0e59404b89f..000000000000 --- a/test/cli/install/migration/complex-workspace/packages/with-postinstall/.gitignore +++ /dev/null @@ -1 +0,0 @@ -postinstall.txt \ No newline at end of file diff --git a/test/cli/install/migration/complex-workspace/packages/with-postinstall/package.json b/test/cli/install/migration/complex-workspace/packages/with-postinstall/package.json deleted file mode 100644 index 5959d95be9a4..000000000000 --- a/test/cli/install/migration/complex-workspace/packages/with-postinstall/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "with-postinstall", - "version": "1.0.0", - "dependencies": { - "sharp": "*", - "svelte": "3.50.0" - }, - "scripts": { - "postinstall": "bun postinstall.js" - } -} diff --git a/test/cli/install/migration/complex-workspace/packages/with-postinstall/postinstall.js b/test/cli/install/migration/complex-workspace/packages/with-postinstall/postinstall.js deleted file mode 100644 index 88ed99cf4ce4..000000000000 --- a/test/cli/install/migration/complex-workspace/packages/with-postinstall/postinstall.js +++ /dev/null @@ -1,6 +0,0 @@ -import { writeFileSync } from "fs"; - -writeFileSync(import.meta.dir + "/postinstall.txt", `i ran!`); - -// TODO: postinstall doesnt run sharp's scripts yet :( -// import "sharp"; diff --git a/test/cli/install/migration/complex-workspace/readme.md b/test/cli/install/migration/complex-workspace/readme.md deleted file mode 100644 index 6f482035bf43..000000000000 --- a/test/cli/install/migration/complex-workspace/readme.md +++ /dev/null @@ -1 +0,0 @@ -this case has a very fun and hard to understand dependency graph. bun pm migrate is expected to migrate it without changing what packages will install. the hoisting doesnt match exactly what npm does, but it is equally valid. diff --git a/test/cli/install/migration/complex-workspace/reset.ts b/test/cli/install/migration/complex-workspace/reset.ts deleted file mode 100644 index ea157462d94a..000000000000 --- a/test/cli/install/migration/complex-workspace/reset.ts +++ /dev/null @@ -1,10 +0,0 @@ -import fs from "fs"; - -fs.rmSync("bun.lockb", { recursive: true, force: true }); -fs.rmSync("bun.lock", { recursive: true, force: true }); -fs.rmSync("node_modules", { recursive: true, force: true }); -fs.rmSync("packages/body-parser/node_modules", { recursive: true, force: true }); -fs.rmSync("packages/lol-package/node_modules", { recursive: true, force: true }); -fs.rmSync("packages/second/node_modules", { recursive: true, force: true }); -fs.rmSync("packages/with-postinstall/node_modules", { recursive: true, force: true }); -fs.rmSync("packages/with-postinstall/postinstall.txt", { recursive: true, force: true }); From f49b0d345e147717aad48287ef75d9e4a1f18db6 Mon Sep 17 00:00:00 2001 From: robobun <117481402+robobun@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:37:08 +0000 Subject: [PATCH 2/3] test(install): keep the os/cpu, optional and bin lockfile shapes in the complex-workspace fixture The original lockfile carried these through esbuild. optional-native and what-bin from the local registry stand in for it. Integrity values now come from the registry's checked-in manifests. --- .../migration/complex-workspace.test.ts | 116 ++++++++++-------- 1 file changed, 65 insertions(+), 51 deletions(-) diff --git a/test/cli/install/migration/complex-workspace.test.ts b/test/cli/install/migration/complex-workspace.test.ts index 3852fdf8ebda..e34e35679a3f 100644 --- a/test/cli/install/migration/complex-workspace.test.ts +++ b/test/cli/install/migration/complex-workspace.test.ts @@ -4,7 +4,7 @@ // workspace version conflicts that force nested installs. Every tarball is served locally. import { afterAll, beforeAll, expect, test } from "bun:test"; import fs from "fs"; -import { VerdaccioRegistry, bunEnv, bunExe, pack, tmpdirSync } from "harness"; +import { VerdaccioRegistry, bunEnv, bunExe, isWindows, pack, tmpdirSync } from "harness"; import path from "path"; const registry = new VerdaccioRegistry(); @@ -40,21 +40,18 @@ function mustNotExist(filePath: string) { }); } -// Verdaccio's checked-in packages have stable integrity hashes, so the generated package-lock.json -// carries real SRI values without any network round-trip. -const integrity = { - "a-dep@1.0.2": "sha512-786lp/Wqdz6jY9NOPFnU2OZAl/7wW/CWCHNn4I+0Or9NtA0F9I1TXtisuy8hMFw/6u6CYXwlzdwySiOdpJ94oQ==", - "a-dep@1.0.5": "sha512-eKtFd4hOTiMNvOOCpwRCkRvkUB6DU6HmDF/AFCUw28s6nhNLzX62xh/ETLWMhOmeEH8JnKx3/3IY/QMhdju1jw==", - "a-dep@1.0.10": "sha512-NeQ6Ql9jRW8V+VOiVb+PSQAYOvVoSimW+tXaR0CoJk4kM9RIk/XlAUGCsNtn5XqjlDO4hcH8NcyaL507InevEg==", - "no-deps@1.0.0": "sha512-v4w12JRjUGvfHDUP8vFDwu0gUWu04j0cv9hLb1Abf9VdaXu4XcrddYFTMVBVvmldKViGWH7jrb6xPJRF0wq6gw==", - "no-deps@1.0.1": "sha512-3X6cn4+UJdXJuLPu11v8i/fGLe2PdI6v1yKTELam04lY5esCAFdG/qQts6N6rLrL6g1YRq+MKBAwxbmUQk355A==", - "no-deps@2.0.0": "sha512-W3duJKZPcMIG5rA1io5cSK/bhW9rWFz+jFxZsKS/3suK4qHDkQNxUTEXee9/hTaAoDCeHWQqogukWYKzfr6X4g==", - "is-number@1.0.0": "sha512-PWbU1PO3loy/91zx8zOoQ37b8UWuu64eJONVIObQSlUUrYag+zy562vmZuRwRcv2hDhgK1Dc9qkJVS954CB1Nw==", - "@types/is-number@2.0.0": - "sha512-GEeIxCB+NpM1NrDBqmkYPeU8bI//i+xPzdOY4E1YHet51IcFmz4js6k57m69fLl/cbn7sOR7wj9RNNw53X8AiA==", - "two-range-deps@1.0.0": - "sha512-N+6kPy/GxuMncNz/EKuIrwdoYbh1qmvHDnw1UbM3sQE184kBn+6qAQgtf1wgT9dJnt6X+tWcTzSmfDvtJikVBA==", -}; +// The lockfile entry npm writes for a registry package: where the local registry serves it, and the +// integrity that registry's checked-in manifest records for the tarball. +function registryEntry(name: string, version: string) { + const manifest = JSON.parse( + fs.readFileSync(path.join(import.meta.dir, "..", "registry", "packages", name, "package.json"), "utf8"), + ); + return { + version, + resolved: `${registry.registryUrl()}${name}/-/${name.split("/").pop()}-${version}.tgz`, + integrity: manifest.versions[version].dist.integrity as string, + }; +} beforeAll(async () => { await registry.start(); @@ -68,9 +65,6 @@ beforeAll(async () => { const barUrl = `http://localhost:${tarballServer.port}/bar-0.0.2.tgz`; const barIntegrity = "sha512-" + Buffer.from(await crypto.subtle.digest("SHA-512", barTgz)).toString("base64"); - const registryUrl = registry.registryUrl().replace(/\/$/, ""); - const reg = (name: string, version: string) => `${registryUrl}/${name}/-/${name.split("/").pop()}-${version}.tgz`; - const write = (rel: string, content: string) => { const full = path.join(cwd!, rel); fs.mkdirSync(path.dirname(full), { recursive: true }); @@ -104,7 +98,10 @@ beforeAll(async () => { write("bun-types/isfake.txt", ""); write("packages/body-parser/package.json", JSON.stringify({ name: "body-parser", version: "200.0.0" })); - write("packages/lol-package/package.json", JSON.stringify({ name: "lol", dependencies: { "no-deps": "^2.0.0" } })); + // `lol` depended on esbuild in the original fixture. optional-native and what-bin keep what esbuild + // brought into the lockfile: optional platform packages with `os`/`cpu`, and a `bin`. + const lolDependencies = { "no-deps": "^2.0.0", "optional-native": "1.0.0", "what-bin": "1.0.0" }; + write("packages/lol-package/package.json", JSON.stringify({ name: "lol", dependencies: lolDependencies })); write( "packages/second/package.json", JSON.stringify({ @@ -175,19 +172,13 @@ beforeAll(async () => { }, "bun-types/node_modules/bun-types": { name: "no-deps", - version: "1.0.0", - resolved: reg("no-deps", "1.0.0"), - integrity: integrity["no-deps@1.0.0"], + ...registryEntry("no-deps", "1.0.0"), }, "node_modules/@types/is-number": { - version: "2.0.0", - resolved: reg("@types/is-number", "2.0.0"), - integrity: integrity["@types/is-number@2.0.0"], + ...registryEntry("@types/is-number", "2.0.0"), }, "node_modules/a-dep": { - version: "1.0.10", - resolved: reg("a-dep", "1.0.10"), - integrity: integrity["a-dep@1.0.10"], + ...registryEntry("a-dep", "1.0.10"), }, "node_modules/bar": { version: "0.0.2", @@ -198,9 +189,7 @@ beforeAll(async () => { "node_modules/bun-types": { resolved: "bun-types", link: true }, "node_modules/express": { name: "a-dep", - version: "1.0.10", - resolved: reg("a-dep", "1.0.10"), - integrity: integrity["a-dep@1.0.10"], + ...registryEntry("a-dep", "1.0.10"), }, "node_modules/hello": { version: "0.3.2", @@ -209,20 +198,43 @@ beforeAll(async () => { dependencies: { "a-dep": "^1.0.0" }, }, "node_modules/is-number": { - version: "1.0.0", - resolved: reg("is-number", "1.0.0"), - integrity: integrity["is-number@1.0.0"], + ...registryEntry("is-number", "1.0.0"), }, "node_modules/lol": { resolved: "packages/lol-package", link: true }, + // No platform is named "foo" or "bar", so none of these three may be installed. + "node_modules/native-bar-x64": { + ...registryEntry("native-bar-x64", "1.0.0"), + cpu: ["x64"], + optional: true, + os: ["bar"], + }, + "node_modules/native-foo-x64": { + ...registryEntry("native-foo-x64", "1.0.0"), + cpu: ["x64"], + optional: true, + os: ["foo"], + }, + "node_modules/native-foo-x86": { + ...registryEntry("native-foo-x86", "1.0.0"), + cpu: ["x86"], + optional: true, + os: ["foo"], + }, "node_modules/not-body-parser": { resolved: "packages/body-parser", link: true }, + "node_modules/optional-native": { + ...registryEntry("optional-native", "1.0.0"), + optionalDependencies: { "native-bar-x64": "1.0.0", "native-foo-x64": "1.0.0", "native-foo-x86": "1.0.0" }, + }, "node_modules/second": { resolved: "packages/second", link: true }, + "node_modules/what-bin": { + ...registryEntry("what-bin", "1.0.0"), + bin: { "what-bin": "what-bin.js" }, + }, "node_modules/with-postinstall": { resolved: "packages/with-postinstall", link: true }, "packages/body-parser": { version: "200.0.0" }, - "packages/lol-package": { name: "lol", dependencies: { "no-deps": "^2.0.0" } }, + "packages/lol-package": { name: "lol", dependencies: lolDependencies }, "packages/lol-package/node_modules/no-deps": { - version: "2.0.0", - resolved: reg("no-deps", "2.0.0"), - integrity: integrity["no-deps@2.0.0"], + ...registryEntry("no-deps", "2.0.0"), }, "packages/second": { version: "3.0.0", @@ -235,15 +247,11 @@ beforeAll(async () => { }, }, "packages/second/node_modules/a-dep": { - version: "1.0.5", - resolved: reg("a-dep", "1.0.5"), - integrity: integrity["a-dep@1.0.5"], + ...registryEntry("a-dep", "1.0.5"), }, "packages/second/node_modules/body-parser": { name: "two-range-deps", - version: "1.0.0", - resolved: reg("two-range-deps", "1.0.0"), - integrity: integrity["two-range-deps@1.0.0"], + ...registryEntry("two-range-deps", "1.0.0"), // left-pad is listed only here, with no matching `packages` entry, so the migrator has // nothing to install for it. The `mustNotExist` checks below make that observable. dependencies: { "@types/is-number": ">=1.0.0", "no-deps": "^1.0.0", "left-pad": "1.0.0" }, @@ -251,9 +259,7 @@ beforeAll(async () => { // Workspace-rooted entry two node_modules segments deep: exercises the migrator's // nested-path walk past the first resolved level. "packages/second/node_modules/body-parser/node_modules/no-deps": { - version: "1.0.1", - resolved: reg("no-deps", "1.0.1"), - integrity: integrity["no-deps@1.0.1"], + ...registryEntry("no-deps", "1.0.1"), }, "packages/with-postinstall": { version: "1.0.0", @@ -261,9 +267,7 @@ beforeAll(async () => { dependencies: { "a-dep": "1.0.2" }, }, "packages/with-postinstall/node_modules/a-dep": { - version: "1.0.2", - resolved: reg("a-dep", "1.0.2"), - integrity: integrity["a-dep@1.0.2"], + ...registryEntry("a-dep", "1.0.2"), }, }, }, @@ -339,6 +343,16 @@ validate("node_modules/no-deps", "2.0.0"); validate("packages/second/node_modules/body-parser/node_modules/no-deps", "1.0.1"); mustNotExist("packages/lol-package/node_modules/no-deps"); +// optional-native: its optional dependencies are for platforms that do not exist +validate("node_modules/optional-native", "1.0.0"); +mustNotExist("node_modules/native-bar-x64"); +mustNotExist("node_modules/native-foo-x64"); +mustNotExist("node_modules/native-foo-x86"); + +// what-bin: `bin` from the lockfile entry is linked +validate("node_modules/what-bin", "1.0.0"); +mustExist(`node_modules/.bin/what-bin${isWindows ? ".exe" : ""}`); + // with-postinstall: lifecycle script ran mustExist("packages/with-postinstall/postinstall.txt"); From 2f89e46f6190494671b3720f756e0c43aa529c0a Mon Sep 17 00:00:00 2001 From: robobun <117481402+robobun@users.noreply.github.com> Date: Wed, 16 Sep 2026 01:59:57 +0000 Subject: [PATCH 3/3] test(install): restore the nested workspace dependency and install script shapes body-parser, the workspace that is linked under two names, gets a nested dependency again, which is the shape #38783 records this fixture catching. The registry's electron stands in for sharp as a default-trusted package whose install script runs, and lifecycle-postinstall is blocked and counted because the migrated entry has hasInstallScript. The header no longer claims every resolution shape. The file leaves test/flaky-tests.txt: its recorded symptom was the network install. --- .../migration/complex-workspace.test.ts | 49 ++++++++++++++++--- test/flaky-tests.txt | 1 - 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/test/cli/install/migration/complex-workspace.test.ts b/test/cli/install/migration/complex-workspace.test.ts index e34e35679a3f..9963c042889a 100644 --- a/test/cli/install/migration/complex-workspace.test.ts +++ b/test/cli/install/migration/complex-workspace.test.ts @@ -1,7 +1,9 @@ -// Migrates a package-lock.json spanning every resolution shape the npm migrator handles in one -// workspace: workspace packages, a `file:` folder and `file:` tarball, a remote tarball URL, `npm:` -// aliases (including a self-named alias inside a linked folder), a scoped transitive, and per- -// workspace version conflicts that force nested installs. Every tarball is served locally. +// Migrates one package-lock.json that combines many of the shapes the npm migrator handles, then installs +// it: workspace packages (one linked under two names, with a dependency nested in it), a `file:` folder and +// a `file:` tarball, a remote tarball URL, `npm:` aliases (including a self-named alias inside a linked +// folder), a scoped transitive, version conflicts that force nested installs, optional dependencies with +// `os`/`cpu`, a `bin`, and install scripts of a workspace and of a default-trusted registry package. +// Every tarball is served locally. Git resolutions are not here: migrate.test.ts covers them. import { afterAll, beforeAll, expect, test } from "bun:test"; import fs from "fs"; import { VerdaccioRegistry, bunEnv, bunExe, isWindows, pack, tmpdirSync } from "harness"; @@ -97,7 +99,12 @@ beforeAll(async () => { ); write("bun-types/isfake.txt", ""); - write("packages/body-parser/package.json", JSON.stringify({ name: "body-parser", version: "200.0.0" })); + // body-parser is linked into node_modules under two names (`body-parser` and `not-body-parser`), and its + // a-dep conflicts with the hoisted one, so the linker meets the nested package once per name. + write( + "packages/body-parser/package.json", + JSON.stringify({ name: "body-parser", version: "200.0.0", dependencies: { "a-dep": "1.0.3" } }), + ); // `lol` depended on esbuild in the original fixture. optional-native and what-bin keep what esbuild // brought into the lockfile: optional platform packages with `os`/`cpu`, and a `bin`. const lolDependencies = { "no-deps": "^2.0.0", "optional-native": "1.0.0", "what-bin": "1.0.0" }; @@ -121,7 +128,7 @@ beforeAll(async () => { JSON.stringify({ name: "with-postinstall", version: "1.0.0", - dependencies: { "a-dep": "1.0.2" }, + dependencies: { "a-dep": "1.0.2", "electron": "1.0.0", "lifecycle-postinstall": "1.0.0" }, scripts: { postinstall: `${JSON.stringify(bunExe())} postinstall.js` }, }), ); @@ -187,6 +194,12 @@ beforeAll(async () => { }, "node_modules/body-parser": { resolved: "packages/body-parser", link: true }, "node_modules/bun-types": { resolved: "bun-types", link: true }, + // with-postinstall depended on sharp in the original fixture. The registry's electron is also on the + // default trusted list, and its preinstall script writes preinstall.txt. + "node_modules/electron": { + ...registryEntry("electron", "1.0.0"), + hasInstallScript: true, + }, "node_modules/express": { name: "a-dep", ...registryEntry("a-dep", "1.0.10"), @@ -200,6 +213,12 @@ beforeAll(async () => { "node_modules/is-number": { ...registryEntry("is-number", "1.0.0"), }, + // Not trusted, so its postinstall script is blocked. The install counts it as blocked only because + // the migrated entry says it has an install script. + "node_modules/lifecycle-postinstall": { + ...registryEntry("lifecycle-postinstall", "1.0.0"), + hasInstallScript: true, + }, "node_modules/lol": { resolved: "packages/lol-package", link: true }, // No platform is named "foo" or "bar", so none of these three may be installed. "node_modules/native-bar-x64": { @@ -231,7 +250,10 @@ beforeAll(async () => { bin: { "what-bin": "what-bin.js" }, }, "node_modules/with-postinstall": { resolved: "packages/with-postinstall", link: true }, - "packages/body-parser": { version: "200.0.0" }, + "packages/body-parser": { version: "200.0.0", dependencies: { "a-dep": "1.0.3" } }, + "packages/body-parser/node_modules/a-dep": { + ...registryEntry("a-dep", "1.0.3"), + }, "packages/lol-package": { name: "lol", dependencies: lolDependencies }, "packages/lol-package/node_modules/no-deps": { ...registryEntry("no-deps", "2.0.0"), @@ -264,7 +286,7 @@ beforeAll(async () => { "packages/with-postinstall": { version: "1.0.0", hasInstallScript: true, - dependencies: { "a-dep": "1.0.2" }, + dependencies: { "a-dep": "1.0.2", "electron": "1.0.0", "lifecycle-postinstall": "1.0.0" }, }, "packages/with-postinstall/node_modules/a-dep": { ...registryEntry("a-dep", "1.0.2"), @@ -300,6 +322,7 @@ test("the install succeeds", async () => { } expect(stderr).toContain("migrated lockfile from package-lock.json"); expect(stdout).toContain("packages installed"); + expect(stdout).toContain("Blocked 1 postinstall. Run `bun pm untrusted` for details."); }); // bun-types: `file:` folder with a self-named `npm:` alias @@ -324,6 +347,8 @@ validate("node_modules/bar", "0.0.2"); // body-parser workspace and its aliases validate("node_modules/body-parser", "200.0.0"); validate("node_modules/not-body-parser", "200.0.0", "body-parser"); +validate("packages/body-parser/node_modules/a-dep", "1.0.3"); +validate("node_modules/not-body-parser/node_modules/a-dep", "1.0.3"); validate("packages/second/node_modules/body-parser", "1.0.0", "two-range-deps"); // @types/is-number: scoped transitive of two-range-deps, hoisted @@ -356,6 +381,14 @@ mustExist(`node_modules/.bin/what-bin${isWindows ? ".exe" : ""}`); // with-postinstall: lifecycle script ran mustExist("packages/with-postinstall/postinstall.txt"); +// electron: the install script of a default-trusted registry package ran +validate("node_modules/electron", "1.0.0"); +mustExist("node_modules/electron/preinstall.txt"); + +// lifecycle-postinstall: the install script of a package that is not trusted did not run +validate("node_modules/lifecycle-postinstall", "1.0.0"); +mustNotExist("node_modules/lifecycle-postinstall/postinstall.txt"); + // left-pad appears in two-range-deps' lockfile `dependencies` with no matching `packages` entry, // so the migrator must not install it anywhere. mustNotExist("node_modules/left-pad"); diff --git a/test/flaky-tests.txt b/test/flaky-tests.txt index acc6b97766ba..d8f824491641 100644 --- a/test/flaky-tests.txt +++ b/test/flaky-tests.txt @@ -40,7 +40,6 @@ test/cli/install/config-precedence.test.ts # 4 of 80 builds test/cli/install/frozen-lockfile-missing-workspace.test.ts # 2 of 80 builds; mac, debian test/cli/install/frozen-lockfile-pruned.test.ts # 3 of 80 builds; alpine, debian; Verdaccio exited with code 2 before the test ran (alpine aarch64) test/cli/install/hoist.test.ts # 1 of 80 builds; debian -test/cli/install/migration/complex-workspace.test.ts # 1 of 80 builds; mac; error: Failed to install test/cli/install/migration/migrate.test.ts # 6 of 80 builds; parallel batch; failed in the parallel batch test/cli/install/npmrc.test.ts # 2 of 80 builds; debian, ubuntu test/cli/install/public-hoist-pattern.test.ts # 2 of 80 builds; ubuntu