diff --git a/cli/cli_test.ts b/cli/cli_test.ts deleted file mode 100644 index 1f710a94..00000000 --- a/cli/cli_test.ts +++ /dev/null @@ -1,117 +0,0 @@ -import { assertEquals } from "@std/assert/assert-equals"; -import { stripAnsiCode } from "@std/fmt/colors"; -import { fromFileUrl, join } from "@std/path"; -import { createAssertSnapshot } from "@std/testing/snapshot"; - -// basic commands -molt("", { code: 2 }); -molt("--help"); -molt("--version"); - -// single file -molt("not_exist.ts", { code: 1 }); -molt("import.ts"); - -// special registries -molt("jsr.ts"); - -// with import maps -molt("mod.ts", { dir: "import_map" }); -molt("mod.ts --import-map deno.json", { dir: "import_map" }); - -// --ignore and --only -molt("multiple_imports.ts --ignore node-emoji"); -molt("multiple_imports.ts --ignore=deno_graph,node-emoji"); -molt("multiple_imports.ts --only deno.land/std"); -molt("multiple_imports.ts --only=deno.land/std,deno_graph"); -molt("multiple_imports.ts --only deno.land --ignore deno_graph"); - -// --write -molt("mod.ts --write", { dir: "multiple_modules" }); - -// --commit -molt("mod.ts --commit", { dir: "multiple_modules" }); -molt("mod.ts --commit --prefix :package:", { dir: "multiple_modules" }); -molt("mod.ts --commit --pre-commit=fmt", { dir: "multiple_modules" }); - -// deno.json -molt("deno.json", { dir: "import_map" }); -molt("deno.json --write", { dir: "import_map" }); -molt("deno.json --commit", { dir: "import_map" }); - -// deno.jsonc -molt("deno.jsonc", { dir: "jsonc" }); -molt("deno.jsonc --write", { dir: "jsonc" }); -molt("deno.jsonc --commit", { dir: "jsonc" }); - -// lockfile -molt("deno.json --unstable-lock not_exist.lock", { dir: "lockfile", code: 1 }); -molt("deno.json --unstable-lock", { dir: "lockfile" }); -molt("deno.json --unstable-lock --write", { dir: "lockfile" }); -molt( - "deno.json --commit --unstable-lock --prefix :package: --prefix-lock :lock:", - { dir: "lockfile" }, -); - -// --no-resolve -molt("mod.ts --no-resolve", { dir: "multiple_modules" }); - -// jsr import with path -molt("mod.ts", { dir: "jsr_with_path_in_import_map" }); -molt("deno.json", { dir: "jsr_with_path_in_import_map" }); - -// identical dependencies with and without a range specifier -molt("deno.json", { dir: "import_map_duplicated_imports" }); - -//----------------------- -// Test implementation -//----------------------- - -const BIN = new URL("./main.ts", import.meta.url).pathname; -const CASES = new URL("../test/cases", import.meta.url).pathname; -const CONFIG = new URL("../deno.json", import.meta.url).pathname; - -function molt(line: string, opts?: { - dir?: string; - code?: number; -}) { - const args = line.length > 0 ? line.split(" ") : []; - - const name = "cli - " + (opts?.dir ? opts.dir + " - " : "") + - '"' + ["molt"].concat(args).join(" ") + '"'; - - Deno.test(name, async (t) => { - const output = await new Deno.Command("deno", { - args: ["run", "-A", "--unstable-kv", "--config", CONFIG, BIN, ...args], - env: { MOLT_TEST: "1" }, - cwd: join(CASES, opts?.dir ? `/${opts?.dir}` : ""), - }).output(); - - const stdout = stringify(output.stdout); - const stderr = stringify(output.stderr); - try { - assertEquals(output.code, opts?.code ?? 0); - } catch (err) { - console.error(stdout); - console.error(stderr); - throw err; - } - await assertSnapshot(t, stdout); - await assertSnapshot(t, stderr); - }); -} - -function stringify(data: Uint8Array) { - const decoder = new TextDecoder(); - let text = decoder.decode(data); - if (Deno.build.os === "windows") { - text = text - .replace(/\r\n/g, "\n") - .replace(/\\/g, "/"); - } - return stripAnsiCode(text); -} - -const assertSnapshot = createAssertSnapshot({ - dir: fromFileUrl(new URL("../test/snapshots/", import.meta.url)), -}); diff --git a/cli/main_test.ts b/cli/main_test.ts new file mode 100644 index 00000000..d467ecf9 --- /dev/null +++ b/cli/main_test.ts @@ -0,0 +1,272 @@ +import { assertEquals } from "@std/assert/assert-equals"; +import { stripAnsiCode } from "@std/fmt/colors"; +import { describe, it } from "@std/testing/bdd"; +import dedent from "dedent"; + +const BIN = new URL("./main.ts", import.meta.url).pathname; +const DIR = new URL("../test/fixtures", import.meta.url).pathname; +const CONFIG = new URL("../deno.json", import.meta.url).pathname; + +interface CommandResult { + code: number; + stdout: string; + stderr: string; +} + +async function molt(argstr: string): Promise { + const args = argstr.split(" ").filter((it) => it.length); + const { code, stderr, stdout } = await new Deno.Command("deno", { + args: ["run", "-A", "--unstable-kv", "--config", CONFIG, BIN, ...args], + env: { MOLT_TEST: "1" }, + cwd: DIR, + }).output(); + const decoder = new TextDecoder(); + const format = (bytes: Uint8Array) => + stripAnsiCode(decoder.decode(bytes)).trim(); + return { + code, + stderr: format(stderr), + stdout: format(stdout), + }; +} + +describe("CLI", () => { + it("should error without arguments", async () => { + const { code, stderr } = await molt(""); + assertEquals(code, 2); + assertEquals(stderr, "error: Missing argument(s): modules"); + }); + + it("should print the version", async () => { + const { stdout } = await molt("--version"); + const { default: config } = await import("./deno.json", { + with: { type: "json" }, + }); + assertEquals(stdout, config.version); + }); + + it("should find updates from `deno.jsonc`", async () => { + const { stdout } = await molt("deno.jsonc"); + assertEquals( + stdout, + dedent` + 📦 @octokit/core 6.1.0 => 123.456.789 + 📦 @std/assert 0.222.0 => 123.456.789 + 📦 @std/bytes => 123.456.789 + 📦 @std/testing 0.222.0 => 123.456.789 + 📦 deno.land/std 0.222.0, => 123.456.789 + 📦 deno.land/x/deno_graph 0.50.0 => 123.456.789 + `, + ); + }); + + it("should update `deno.jsonc`", async () => { + const { code, stdout } = await molt("deno.jsonc --write"); + assertEquals(code, 0); + assertEquals( + stdout, + dedent` + 📦 @octokit/core 6.1.0 => 123.456.789 + 📦 @std/assert 0.222.0 => 123.456.789 + 📦 @std/bytes => 123.456.789 + 📦 @std/testing 0.222.0 => 123.456.789 + 📦 deno.land/std 0.222.0, => 123.456.789 + 📦 deno.land/x/deno_graph 0.50.0 => 123.456.789 + + 💾 deno.jsonc + `, + ); + }); + + it("should commit changes to `deno.jsonc`", async () => { + const { code, stdout } = await molt("deno.jsonc --commit"); + assertEquals(code, 0); + assertEquals( + stdout, + dedent` + 📦 @octokit/core 6.1.0 => 123.456.789 + 📦 @std/assert 0.222.0 => 123.456.789 + 📦 @std/bytes => 123.456.789 + 📦 @std/testing 0.222.0 => 123.456.789 + 📦 deno.land/std 0.222.0, => 123.456.789 + 📦 deno.land/x/deno_graph 0.50.0 => 123.456.789 + + 📝 bump @octokit/core from 6.1.0 to 123.456.789 + 📝 bump @std/assert from 0.222.0 to 123.456.789 + 📝 bump @std/bytes to 123.456.789 + 📝 bump @std/testing from 0.222.0 to 123.456.789 + 📝 bump deno.land/std from 0.222.0 to 123.456.789 + 📝 bump deno.land/x/deno_graph from 0.50.0 to 123.456.789 + `, + ); + }); + + it("should find updates to mod_test.ts", async () => { + // FIXME: We must pass `--import-map` explicitly because `@chiezo/amber` + // does not support `Deno.readDir` yet, which is called by `findFileUp`. + const { stdout } = await molt("mod_test.ts --import-map deno.jsonc"); + assertEquals( + stdout, + dedent` + 📦 @std/assert 0.222.0 => 123.456.789 + mod_test.ts + 📦 @std/testing 0.222.0 => 123.456.789 + deno.jsonc + 📦 deno.land/x/deno_graph 0.50.0 => 123.456.789 + mod.ts + `, + ); + }); + + it("should write updates collected from mod_test.ts", async () => { + const { code, stdout } = await molt( + "mod_test.ts --import-map deno.jsonc --write", + ); + assertEquals(code, 0); + assertEquals( + stdout, + dedent` + 📦 @std/assert 0.222.0 => 123.456.789 + mod_test.ts + 📦 @std/testing 0.222.0 => 123.456.789 + deno.jsonc + 📦 deno.land/x/deno_graph 0.50.0 => 123.456.789 + mod.ts + + 💾 deno.jsonc + 💾 mod_test.ts + 💾 mod.ts + `, + ); + }); + + it("should commit updates collected from mod_test.ts", async () => { + const { code, stdout } = await molt( + "mod_test.ts --import-map deno.jsonc --commit", + ); + assertEquals(code, 0); + assertEquals( + stdout, + dedent` + 📦 @std/assert 0.222.0 => 123.456.789 + mod_test.ts + 📦 @std/testing 0.222.0 => 123.456.789 + deno.jsonc + 📦 deno.land/x/deno_graph 0.50.0 => 123.456.789 + mod.ts + + 📝 bump @std/assert from 0.222.0 to 123.456.789 + 📝 bump @std/testing from 0.222.0 to 123.456.789 + 📝 bump deno.land/x/deno_graph from 0.50.0 to 123.456.789 + `, + ); + }); + + it("should ignore dependencies with `--ignore` option", async () => { + const { stdout } = await molt("deno.jsonc --ignore std"); + assertEquals( + stdout, + dedent` + 📦 @octokit/core 6.1.0 => 123.456.789 + 📦 deno.land/x/deno_graph 0.50.0 => 123.456.789 + `, + ); + }); + + it("should accept multiple entries for `--ignore` option", async () => { + const { stdout } = await molt("deno.jsonc --ignore=std,octokit"); + assertEquals( + stdout, + dedent` + 📦 deno.land/x/deno_graph 0.50.0 => 123.456.789 + `, + ); + }); + + it("should filter updates with `--only` option", async () => { + const { stdout } = await molt("deno.jsonc --only std"); + assertEquals( + stdout, + dedent` + 📦 @std/assert 0.222.0 => 123.456.789 + 📦 @std/bytes => 123.456.789 + 📦 @std/testing 0.222.0 => 123.456.789 + 📦 deno.land/std 0.222.0, => 123.456.789 + `, + ); + }); + + it("should accept multiple entries for `--only` option", async () => { + const { stdout } = await molt("deno.jsonc --only=octokit,deno_graph"); + assertEquals( + stdout, + dedent` + 📦 @octokit/core 6.1.0 => 123.456.789 + 📦 deno.land/x/deno_graph 0.50.0 => 123.456.789 + `, + ); + }); + + it("should not resolve local imports with `--no-resolve` option", async () => { + const { stdout } = await molt("mod_test.ts --no-resolve"); + assertEquals( + stdout, + dedent` + 📦 @std/assert 0.222.0 => 123.456.789 + `, + ); + }); + + it("should run tasks before each commit with `--pre-commit` option", async () => { + const { stdout } = await molt("mod.ts --commit --pre-commit=fmt,lint"); + assertEquals( + stdout, + dedent` + 📦 deno.land/x/deno_graph 0.50.0 => 123.456.789 + + 💾 bump deno.land/x/deno_graph from 0.50.0 to 123.456.789 + 🔨 Running task fmt... + 🔨 Running task lint... + 📝 bump deno.land/x/deno_graph from 0.50.0 to 123.456.789 + `, + ); + }); + + it("should prefix commit messages with `--prefix` option", async () => { + const { stdout } = await molt("mod.ts --commit --prefix=chore:"); + assertEquals( + stdout, + dedent` + 📦 deno.land/x/deno_graph 0.50.0 => 123.456.789 + + 📝 chore: bump deno.land/x/deno_graph from 0.50.0 to 123.456.789 + `, + ); + }); + + // FIXME: The list of files only includes `deno.jsonc` + it.ignore("should find updates to a lock file with `--unstable-lock` option", async () => { + const { stdout } = await molt( + "mod_test.ts --unstable-lock --import-map deno.jsonc --write", + ); + assertEquals( + stdout, + dedent` + 📦 @std/assert 0.222.0 => 123.456.789 + mod_test.ts + deno.lock + 📦 @std/testing 0.222.0 => 123.456.789 + deno.jsonc + deno.lock + 📦 deno.land/x/deno_graph 0.50.0 => 123.456.789 + mod.ts + deno.lock + + 💾 deno.jsonc + 💾 deno.lock + 💾 mod_test.ts + 💾 mod.ts + `, + ); + }); +}); diff --git a/cli/modules/testing.ts b/cli/modules/testing.ts index 26d5904f..7cbb90c0 100644 --- a/cli/modules/testing.ts +++ b/cli/modules/testing.ts @@ -1,24 +1,12 @@ -import { - CommandStub, - FileSystemFake, - LatestVersionStub, - ReadTextFileStub, - WriteTextFileStub, -} from "@molt/lib/testing"; +import { all, cmd, fs } from "@chiezo/amber"; +import { LatestVersionStub } from "../../test/mock.ts"; /** * Enables all test stubs. */ export default function () { - LatestVersionStub.create({ - "deno.land/std": "0.218.2", - "deno_graph": "0.69.7", - "node-emoji": "2.1.3", - "@luca/flag": "1.0.1", - "@std/": "0.218.2", - }); - const fs = new FileSystemFake(); - ReadTextFileStub.create(fs, { readThrough: true }); - WriteTextFileStub.create(fs); - Deno.Command = CommandStub.create("git"); + LatestVersionStub.create("123.456.789"); + fs.stub(new URL("../../test/fixtures", import.meta.url)); + cmd.stub("git"); + all(cmd, fs).mock(); } diff --git a/core/dependency_test.ts b/core/dependency_test.ts index 45577542..c72d6b50 100644 --- a/core/dependency_test.ts +++ b/core/dependency_test.ts @@ -1,12 +1,12 @@ import { afterAll, beforeAll, describe, it } from "@std/testing/bdd"; import { assertEquals, assertExists, assertObjectMatch } from "@std/assert"; -import { LatestVersionStub } from "@molt/lib/testing"; import { isPreRelease, parse, resolveLatestVersion, stringify, } from "./dependency.ts"; +import { LatestVersionStub } from "../test/mock.ts"; describe("parse", () => { it("deno.land/std", () => diff --git a/core/file_test.ts b/core/file_test.ts index 700d611e..857cdbc1 100644 --- a/core/file_test.ts +++ b/core/file_test.ts @@ -1,123 +1,124 @@ -import { basename, dirname } from "@std/path"; -import { format, LF } from "@std/fs/eol"; -import { assert, assertInstanceOf } from "@std/assert"; -import { fromFileUrl } from "@std/path"; -import { createAssertSnapshot } from "@std/testing/snapshot"; -import { - FileSystemFake, - LatestVersionStub, - ReadTextFileStub, - WriteTextFileStub, -} from "@molt/lib/testing"; -import { associateByFile, type FileUpdate, writeFileUpdate } from "./file.ts"; -import { collect, type CollectResult } from "./update.ts"; +import * as fs from "@chiezo/amber/fs"; +import { assertArrayIncludes, assertObjectMatch } from "@std/assert"; +import { EOL } from "@std/fs/eol"; +import * as Jsonc from "@std/jsonc"; +import { afterEach, beforeEach, describe, it } from "@std/testing/bdd"; +import { write } from "./file.ts"; +import { collect } from "./update.ts"; +import { LatestVersionStub } from "../test/mock.ts"; -function toName(path: string) { - const base = basename(path); - return base === "mod.ts" || base.endsWith(".json") || base.endsWith(".jsonc") - ? basename(dirname(path)) + "/" + base - : base; -} +describe("write", () => { + let vstub: LatestVersionStub; -const assertSnapshot = createAssertSnapshot({ - dir: fromFileUrl(new URL("../test/snapshots/", import.meta.url)), -}); - -async function assertFileUpdateSnapshot( - t: Deno.TestContext, - results: FileUpdate[], -) { - await assertSnapshot( - t, - results.map((file) => ({ - dependencies: file.dependencies.map((it) => ({ - code: it.code, - from: it.from, - map: it.map - ? { - key: it.map.key, - resolved: it.map.resolved, - } - : undefined, - to: it.to, - })), - kind: file.kind, - })), - ); -} + beforeEach(() => { + vstub = LatestVersionStub.create("123.456.789"); + fs.stub(new URL("../test/fixtures", import.meta.url)); + fs.mock(); + }); -async function assertFileSystemSnapshot( - t: Deno.TestContext, - fs: FileSystemFake, -) { - await assertSnapshot( - t, - Array.from(fs.entries()).map(([, content]) => format(content, LF)), - ); -} + afterEach(() => { + fs.dispose(); + vstub.restore(); + }); -const fs = new FileSystemFake(); -ReadTextFileStub.create(fs, { readThrough: true }); -WriteTextFileStub.create(fs); + it("deno.jsonc", async () => { + const source = new URL("../test/fixtures/deno.jsonc", import.meta.url); + await write(await collect(source)); + assertObjectMatch( + // deno-lint-ignore no-explicit-any + Jsonc.parse(await Deno.readTextFile(source)) as any, + { + imports: { + "@octokit/core": "npm:@octokit/core@123.456.789", + "@std/assert": "jsr:@std/assert@123.456.789", + "@std/bytes": "jsr:@std/bytes@123.456.789", + "@std/jsonc": "jsr:@std/jsoc@0.222.x", + "@std/testing": "jsr:@std/testing@^0.222.0", + "@std/testing/bdd": "jsr:@std/testing@123.456.789/bdd", + "@std/yaml": "jsr:@std/yaml@123.456.789", + "lib/": "./lib/", + "x/deno_graph": "https://deno.land/x/deno_graph@123.456.789/mod.ts", + "std/": "https://deno.land/std@123.456.789/", + "std/assert": "https://deno.land/std@123.456.789/assert/mod.ts", + }, + }, + ); + }); -LatestVersionStub.create({ "deno.land/std": "0.218.0", _: "123.456.789" }); + it("deps.ts", async () => { + const source = new URL("../test/fixtures/deps.ts", import.meta.url); + await write(await collect(source)); + const actual = await Deno.readTextFile(source); + assertArrayIncludes( + actual.split(EOL).filter((line) => line.startsWith("import")), + [ + 'import "npm:@octokit/core@123.456.789";', + 'import "jsr:@std/assert@123.456.789";', + 'import "jsr:@std/bytes@123.456.789";', + 'import "jsr:@std/jsonc@0.222.x";', + 'import "jsr:@std/testing@^0.222.0";', + 'import "jsr:@std/testing@123.456.789/bdd";', + 'import "jsr:@std/yaml@123.456.789";', + 'import "https://deno.land/x/deno_graph@123.456.789/mod.ts";', + 'import "https://deno.land/std@123.456.789/";', + 'import "https://deno.land/std@123.456.789/assert/mod.ts";', + ], + ); + }); -function test(path: string, name = toName(path)) { - Deno.test("write - " + name, async (t) => { - let result: CollectResult | undefined = undefined; - let updates: FileUpdate[] = []; - await t.step("associateByFile", async () => { - try { - result = await collect(new URL(path, import.meta.url), { - cwd: new URL(dirname(path), import.meta.url), - lock: path.includes("lockfile"), - }); - updates = associateByFile(result); - await assertFileUpdateSnapshot(t, updates); - } catch (error) { - if (path.includes("import_map_referred/deno.json")) { - // deno.json just reffers to another import_map.json - assertInstanceOf(error, SyntaxError, error); - } else if (path.includes("lockfile_not_importable/deno.json")) { - // can't lock an import specifier that is not importable as is - assertInstanceOf(error, Deno.errors.NotSupported); - } else { - throw error; - } - } - }); - await t.step("writeFileUpdate", async () => { - fs.clear(); - if (result) { - await writeFileUpdate(updates); - await assertFileSystemSnapshot(t, fs); - for await (const content of fs.values()) { - assert(content.endsWith("\n"), "should end with a newline"); - } - } - }); + it("mod.ts", async () => { + const source = new URL("../test/fixtures/mod.ts", import.meta.url); + await write(await collect(source)); + const actual = await Deno.readTextFile(source); + assertArrayIncludes( + actual.split(EOL).filter((line) => line.startsWith("export")), + [ + 'export { createGraph } from "https://deno.land/x/deno_graph@123.456.789/mod.ts";', + ], + ); }); -} -// Test the all cases in test/cases -for await ( - const testCase of Deno.readDir(new URL("../test/cases", import.meta.url)) -) { - if (testCase.isFile && testCase.name.endsWith(".ts")) { - test(`../test/cases/${testCase.name}`); - } - if (testCase.isDirectory) { - for await ( - const entry of Deno.readDir( - new URL("../test/cases/" + testCase.name, import.meta.url), - ) - ) { - if ( - entry.isFile && entry.name === "mod.ts" || - entry.name.endsWith(".json") || entry.name.endsWith(".jsonc") - ) { - test(`../test/cases/${testCase.name}/${entry.name}`); - } - } - } -} + it("mod_test.ts", async () => { + const source = new URL("../test/fixtures/mod_test.ts", import.meta.url); + await write( + await collect(source, { importMap: new URL("deno.jsonc", source) }), + ); + assertArrayIncludes( + (await Deno.readTextFile(source)) + .split(EOL).filter((line) => line.startsWith("import")), + [ + 'import { assertEquals } from "jsr:@std/assert@123.456.789";', + 'import { describe, it } from "@std/testing/bdd";', + 'import { createGraph } from "./mod.ts";', + ], + ); + assertArrayIncludes( + (await Deno.readTextFile(new URL("mod.ts", source))) + .split(EOL).filter((line) => line.startsWith("export")), + [ + 'export { createGraph } from "https://deno.land/x/deno_graph@123.456.789/mod.ts";', + ], + ); + assertObjectMatch( + Jsonc.parse( + await Deno.readTextFile(new URL("deno.jsonc", source)), + // deno-lint-ignore no-explicit-any + ) as any, + { + imports: { + "@octokit/core": "npm:@octokit/core@6.1.0", + "@std/assert": "jsr:@std/assert@0.222.0", + "@std/bytes": "jsr:@std/bytes", + "@std/jsonc": "jsr:@std/jsoc@0.222.x", + "@std/testing": "jsr:@std/testing@^0.222.0", + "@std/testing/bdd": "jsr:@std/testing@123.456.789/bdd", + "@std/yaml": "jsr:@std/yaml@123.456.789", + "lib/": "./lib/", + "x/deno_graph": "https://deno.land/x/deno_graph@0.50.0/mod.ts", + "std/": "https://deno.land/std@0.222.0/", + "std/assert": "https://deno.land/std/assert/mod.ts", + }, + }, + ); + }); +}); diff --git a/core/git_test.ts b/core/git_test.ts index a3f63a23..a29e39b9 100644 --- a/core/git_test.ts +++ b/core/git_test.ts @@ -1,22 +1,25 @@ -import { assertArrayIncludes, assertEquals, assertThrows } from "@std/assert"; -import { describe, it } from "@std/testing/bdd"; -import { assertSpyCall } from "@std/testing/mock"; +import { all, cmd, fs } from "@chiezo/amber"; +import { + assertArrayIncludes, + assertEquals, + assertObjectMatch, + assertThrows, +} from "@std/assert"; +import { EOL } from "@std/fs/eol"; +import * as Jsonc from "@std/jsonc"; import { basename, relative } from "@std/path"; -import { commit, getVersionChange } from "./git.ts"; -import { collect } from "./update.ts"; import { - CommandStub, - FileSystemFake, - LatestVersionStub, - ReadTextFileStub, - WriteTextFileStub, -} from "@molt/lib/testing"; - -//-------------------------------------------------------------------- -// -// Unit tests -// -//-------------------------------------------------------------------- + afterAll, + afterEach, + beforeAll, + beforeEach, + describe, + it, +} from "@std/testing/bdd"; +import { assertSpyCall } from "@std/testing/mock"; +import { commit, getVersionChange } from "./git.ts"; +import { collect, type CollectResult } from "./update.ts"; +import { LatestVersionStub } from "../test/mock.ts"; describe("getVersionChange", () => { it("single version", () => { @@ -159,92 +162,126 @@ describe("getVersionChange", () => { }); }); -//-------------------------------------------------------------------- -// -// Integration tests -// -//-------------------------------------------------------------------- - -Deno.test("commit", async (t) => { - const DIR = "test/cases/multiple_modules"; - +describe("commit", () => { + const DIR = "test/fixtures"; const LATEST = "123.456.789"; - LatestVersionStub.create(LATEST); - const EXPECTED = [ - `import { assert } from "https://deno.land/std@${LATEST}/assert/assert.ts"; -import { createGraph } from "https://deno.land/x/deno_graph@${LATEST}/mod.ts"; -import emoji from "npm:node-emoji@${LATEST}"; -import { noop } from "./lib.ts"; -`, - `import { assertEquals } from "https://deno.land/std@${LATEST}/assert/assert_equals.ts"; -export const noop = () => {}; -`, - ]; - const assertFileSystem = ( - fs: FileSystemFake, - ) => assertArrayIncludes(Array.from(fs.values()), EXPECTED); - - const cs = CommandStub.create(); - Deno.Command = cs; - - const fs = new FileSystemFake(); - ReadTextFileStub.create(fs, { readThrough: true }); - WriteTextFileStub.create(fs); + let calls: number; + let git: cmd.Stub<"git">; + let result: CollectResult; + let vers: LatestVersionStub; const normalizePath = (path: string) => Deno.build.os === "windows" ? path.replaceAll("/", "\\") : path; - let calls = 0; const assertGitAdd = ( ...paths: string[] ) => - assertSpyCall(cs, calls++, { + assertSpyCall(git, calls++, { args: [ "git", { args: ["add", ...paths.map(normalizePath)] }, ], }); + const assertGitCommit = ( message: string, ) => - assertSpyCall(cs, calls++, { + assertSpyCall(git, calls++, { args: [ "git", { args: ["commit", "-m", message] }, ], }); - const result = await collect( - new URL(`../${DIR}/mod.ts`, import.meta.url), - ); + const assertFileSystem = async () => { + assertArrayIncludes( + (await Deno.readTextFile( + new URL(`../${DIR}/mod_test.ts`, import.meta.url), + )) + .split(EOL).filter((line) => line.startsWith("import")), + [ + 'import { assertEquals } from "jsr:@std/assert@123.456.789";', + 'import { describe, it } from "@std/testing/bdd";', + 'import { createGraph } from "./mod.ts";', + ], + ); + assertArrayIncludes( + (await Deno.readTextFile(new URL(`../${DIR}/mod.ts`, import.meta.url))) + .split(EOL).filter((line) => line.startsWith("export")), + [ + 'export { createGraph } from "https://deno.land/x/deno_graph@123.456.789/mod.ts";', + ], + ); + assertObjectMatch( + Jsonc.parse( + await Deno.readTextFile( + new URL(`../${DIR}/deno.jsonc`, import.meta.url), + ), + // deno-lint-ignore no-explicit-any + ) as any, + { + imports: { + "@octokit/core": "npm:@octokit/core@6.1.0", + "@std/assert": "jsr:@std/assert@0.222.0", + "@std/bytes": "jsr:@std/bytes", + "@std/jsonc": "jsr:@std/jsoc@0.222.x", + "@std/testing": "jsr:@std/testing@^0.222.0", + "@std/testing/bdd": "jsr:@std/testing@123.456.789/bdd", + "@std/yaml": "jsr:@std/yaml@123.456.789", + "lib/": "./lib/", + "x/deno_graph": "https://deno.land/x/deno_graph@0.50.0/mod.ts", + "std/": "https://deno.land/std@0.222.0/", + "std/assert": "https://deno.land/std/assert/mod.ts", + }, + }, + ); + }; + + beforeAll(() => { + vers = LatestVersionStub.create(LATEST); + }); + + beforeEach(async () => { + calls = 0; + fs.stub(DIR); + git = cmd.stub("git"); + all(cmd, fs).mock(); + result = await collect(new URL(`../${DIR}/mod_test.ts`, import.meta.url), { + importMap: new URL(`../${DIR}/deno.jsonc`, import.meta.url), + }); + }); + + afterEach(() => { + all(cmd, fs).dispose(); + }); + + afterAll(() => { + vers.restore(); + }); - await t.step("no grouping", async () => { + it("no grouping", async () => { await commit(result); - assertGitAdd(`${DIR}/lib.ts`, `${DIR}/mod.ts`); + assertGitAdd(`${DIR}/deno.jsonc`, `${DIR}/mod_test.ts`, `${DIR}/mod.ts`); assertGitCommit("build(deps): update dependencies"); - assertFileSystem(fs); + await assertFileSystem(); }); - fs.clear(); - - await t.step("group by dependency name", async () => { + it("group by dependency name", async () => { await commit(result, { groupBy: (update) => update.to.name, composeCommitMessage: ({ group }) => `build(deps): update ${group}`, }); - assertGitAdd(`${DIR}/lib.ts`, `${DIR}/mod.ts`); - assertGitCommit("build(deps): update deno.land/std"); + assertGitAdd(`${DIR}/mod_test.ts`); + assertGitCommit("build(deps): update @std/assert"); + assertGitAdd(`${DIR}/deno.jsonc`); + assertGitCommit("build(deps): update @std/testing"); assertGitAdd(`${DIR}/mod.ts`); assertGitCommit("build(deps): update deno.land/x/deno_graph"); - assertGitAdd(`${DIR}/mod.ts`); - assertGitCommit("build(deps): update node-emoji"); - assertFileSystem(fs); + await assertFileSystem(); }); - fs.clear(); - - await t.step("group by module (file) name", async () => { + it("group by module (file) name", async () => { await commit(result, { groupBy: (update) => basename(update.referrer), composeCommitMessage: ({ group }) => { @@ -252,10 +289,10 @@ export const noop = () => {}; return `build(deps): update ${path}`; }, }); - assertGitAdd(`${DIR}/lib.ts`); - assertGitCommit(`build(deps): update lib.ts`); + assertGitAdd(`${DIR}/deno.jsonc`, `${DIR}/mod_test.ts`); + assertGitCommit(`build(deps): update mod_test.ts`); assertGitAdd(`${DIR}/mod.ts`); assertGitCommit(`build(deps): update mod.ts`); - assertFileSystem(fs); + await assertFileSystem(); }); }); diff --git a/core/update_test.ts b/core/update_test.ts index cbf4b4ff..fd763934 100644 --- a/core/update_test.ts +++ b/core/update_test.ts @@ -4,8 +4,8 @@ import { assertExists, assertObjectMatch, } from "@std/assert"; -import { LatestVersionStub } from "@molt/lib/testing"; import { collect } from "./update.ts"; +import { LatestVersionStub } from "../test/mock.ts"; Deno.test("collect - deno.jsonc", async () => { using _stub = LatestVersionStub.create("123.456.789"); diff --git a/deno.json b/deno.json index 5d36c46a..8d75a856 100644 --- a/deno.json +++ b/deno.json @@ -12,6 +12,7 @@ "update:commit": "deno task -q update --commit --prefix 'build(deps):'" }, "imports": { + "@chiezo/amber": "jsr:@chiezo/amber@^0.0.4", "@cliffy/ansi": "jsr:@cliffy/ansi@1.0.0-rc.4", "@cliffy/command": "jsr:@cliffy/command@1.0.0-rc.4", "@conventional-commits/parser": "npm:@conventional-commits/parser@^0.4.1", @@ -32,7 +33,8 @@ "@std/jsonc": "jsr:@std/jsonc@^0.222.1", "@std/path": "jsr:@std/path@^0.222.1", "@std/semver": "jsr:@std/semver@^0.222.1", - "@std/testing": "jsr:@std/testing@^0.222.1" + "@std/testing": "jsr:@std/testing@^0.222.1", + "dedent": "npm:dedent@^1.5.3" }, "lint": { "exclude": [ diff --git a/deno.lock b/deno.lock index e8995156..b93c192d 100644 --- a/deno.lock +++ b/deno.lock @@ -2,6 +2,7 @@ "version": "3", "packages": { "specifiers": { + "jsr:@chiezo/amber@^0.0.4": "jsr:@chiezo/amber@0.0.4", "jsr:@cliffy/ansi@1.0.0-rc.4": "jsr:@cliffy/ansi@1.0.0-rc.4", "jsr:@cliffy/command@1.0.0-rc.4": "jsr:@cliffy/command@1.0.0-rc.4", "jsr:@cliffy/flags@1.0.0-rc.4": "jsr:@cliffy/flags@1.0.0-rc.4", @@ -14,16 +15,21 @@ "jsr:@lambdalisue/async@^2.1.1": "jsr:@lambdalisue/async@2.1.1", "jsr:@std/assert@^0.221.0": "jsr:@std/assert@0.221.0", "jsr:@std/assert@^0.222.1": "jsr:@std/assert@0.222.1", + "jsr:@std/assert@^0.224.0": "jsr:@std/assert@0.224.0", + "jsr:@std/assert@^0.226.0": "jsr:@std/assert@0.226.0", "jsr:@std/bytes@^0.221.0": "jsr:@std/bytes@0.221.0", "jsr:@std/collections@^0.222.1": "jsr:@std/collections@0.222.1", + "jsr:@std/collections@^0.224.2": "jsr:@std/collections@0.224.2", "jsr:@std/console@0.221": "jsr:@std/console@0.221.0", "jsr:@std/dotenv@^0.222.1": "jsr:@std/dotenv@0.222.1", "jsr:@std/encoding@0.221": "jsr:@std/encoding@0.221.0", "jsr:@std/fmt@0.221": "jsr:@std/fmt@0.221.0", "jsr:@std/fmt@^0.221.0": "jsr:@std/fmt@0.221.0", "jsr:@std/fmt@^0.222.1": "jsr:@std/fmt@0.222.1", + "jsr:@std/fmt@^0.224.0": "jsr:@std/fmt@0.224.0", "jsr:@std/fs@0.221.0": "jsr:@std/fs@0.221.0", "jsr:@std/fs@^0.222.1": "jsr:@std/fs@0.222.1", + "jsr:@std/internal@^0.224.0": "jsr:@std/internal@0.224.0", "jsr:@std/io@0.221": "jsr:@std/io@0.221.0", "jsr:@std/io@0.221.0": "jsr:@std/io@0.221.0", "jsr:@std/io@^0.221.0": "jsr:@std/io@0.221.0", @@ -32,15 +38,31 @@ "jsr:@std/path@0.221.0": "jsr:@std/path@0.221.0", "jsr:@std/path@^0.221.0": "jsr:@std/path@0.221.0", "jsr:@std/path@^0.222.1": "jsr:@std/path@0.222.1", + "jsr:@std/path@^0.225.1": "jsr:@std/path@0.225.2", "jsr:@std/semver@^0.222.1": "jsr:@std/semver@0.222.1", "jsr:@std/streams@0.221.0": "jsr:@std/streams@0.221.0", "jsr:@std/testing@^0.222.1": "jsr:@std/testing@0.222.1", + "jsr:@std/testing@^0.224.0": "jsr:@std/testing@0.224.0", "jsr:@std/text@0.221": "jsr:@std/text@0.221.0", "npm:@conventional-commits/parser@^0.4.1": "npm:@conventional-commits/parser@0.4.1", + "npm:@octokit/core@6.1.0": "npm:@octokit/core@6.1.0", "npm:@octokit/rest@^20.1.0": "npm:@octokit/rest@20.1.0_@octokit+core@5.2.0", + "npm:@types/node": "npm:@types/node@18.16.19", + "npm:chalk@5": "npm:chalk@5.3.0", + "npm:dedent@^1.5.3": "npm:dedent@1.5.3", + "npm:express@^4.17": "npm:express@4.19.2", + "npm:node-emoji@2.0.0": "npm:node-emoji@2.0.0", "npm:ts-toolbelt@9.6.0": "npm:ts-toolbelt@9.6.0" }, "jsr": { + "@chiezo/amber@0.0.4": { + "integrity": "df43891314bbba07958bd237b6148129a0c0d9c1f28f2077879755e3b9adf793", + "dependencies": [ + "jsr:@std/collections@^0.224.2", + "jsr:@std/path@^0.225.1", + "jsr:@std/testing@^0.224.0" + ] + }, "@cliffy/ansi@1.0.0-rc.4": { "integrity": "df561b6a69bb5177c31618c027274504ed24b996b854fa072eb7d0a380e41ac1", "dependencies": [ @@ -100,7 +122,20 @@ "integrity": "a5f1aa6e7909dbea271754fd4ab3f4e687aeff4873b4cef9a320af813adb489a" }, "@std/assert@0.222.1": { - "integrity": "691637161ee584a9919d1f9950ddd1272feb8e0a19e83aa5b7563cedaf73d74c" + "integrity": "691637161ee584a9919d1f9950ddd1272feb8e0a19e83aa5b7563cedaf73d74c", + "dependencies": [ + "jsr:@std/fmt@^0.222.1" + ] + }, + "@std/assert@0.224.0": { + "integrity": "8643233ec7aec38a940a8264a6e3eed9bfa44e7a71cc6b3c8874213ff401967f", + "dependencies": [ + "jsr:@std/fmt@^0.224.0", + "jsr:@std/internal@^0.224.0" + ] + }, + "@std/assert@0.226.0": { + "integrity": "0dfb5f7c7723c18cec118e080fec76ce15b4c31154b15ad2bd74822603ef75b3" }, "@std/bytes@0.221.0": { "integrity": "64a047011cf833890a4a2ab7293ac55a1b4f5a050624ebc6a0159c357de91966" @@ -108,6 +143,9 @@ "@std/collections@0.222.1": { "integrity": "234099e08eead6a87e59f4f1abdcba35df5503cfb0e852e77a19f79359ed5760" }, + "@std/collections@0.224.2": { + "integrity": "e77819455294e92d4e7ddad1dbfd46f94174c09318e541e6621fac4a4d0ab326" + }, "@std/console@0.221.0": { "integrity": "8f2afc1f3f14f5d6039c0c767f057e4aa1897d2210e167c4667cb155cafb9d11" }, @@ -123,6 +161,9 @@ "@std/fmt@0.222.1": { "integrity": "ec3382f9b0261c1ab1a5c804aa355d816515fa984cdd827ed32edfb187c0a722" }, + "@std/fmt@0.224.0": { + "integrity": "e20e9a2312a8b5393272c26191c0a68eda8d2c4b08b046bad1673148f1d69851" + }, "@std/fs@0.221.0": { "integrity": "028044450299de8ed5a716ade4e6d524399f035513b85913794f4e81f07da286", "dependencies": [ @@ -137,6 +178,9 @@ "jsr:@std/path@^0.222.1" ] }, + "@std/internal@0.224.0": { + "integrity": "afc50644f9cdf4495eeb80523a8f6d27226b4b36c45c7c195dfccad4b8509291" + }, "@std/io@0.221.0": { "integrity": "faf7f8700d46ab527fa05cc6167f4b97701a06c413024431c6b4d207caa010da", "dependencies": [ @@ -166,6 +210,12 @@ "jsr:@std/assert@^0.222.1" ] }, + "@std/path@0.225.2": { + "integrity": "0f2db41d36b50ef048dcb0399aac720a5348638dd3cb5bf80685bf2a745aa506", + "dependencies": [ + "jsr:@std/assert@^0.226.0" + ] + }, "@std/semver@0.222.1": { "integrity": "43c5b526423f48f6f75375c77226646803776fdc678b331f243b0bd667d54c18" }, @@ -183,6 +233,12 @@ "jsr:@std/path@^0.222.1" ] }, + "@std/testing@0.224.0": { + "integrity": "371b8a929aa7132240d5dd766a439be8f780ef5c176ab194e0bcab72370c761e", + "dependencies": [ + "jsr:@std/assert@^0.224.0" + ] + }, "@std/text@0.221.0": { "integrity": "a2f89ceb0d8851cd33e6774064621a1da9fbc36578cf4f02c5b5bcd7e8c84b67", "dependencies": [ @@ -198,10 +254,158 @@ "unist-util-visit-parents": "unist-util-visit-parents@3.1.1" } }, + "@esbuild/android-arm64@0.17.19": { + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "dependencies": {} + }, + "@esbuild/android-arm@0.17.19": { + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "dependencies": {} + }, + "@esbuild/android-x64@0.17.19": { + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "dependencies": {} + }, + "@esbuild/darwin-arm64@0.17.19": { + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "dependencies": {} + }, + "@esbuild/darwin-x64@0.17.19": { + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "dependencies": {} + }, + "@esbuild/freebsd-arm64@0.17.19": { + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "dependencies": {} + }, + "@esbuild/freebsd-x64@0.17.19": { + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "dependencies": {} + }, + "@esbuild/linux-arm64@0.17.19": { + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "dependencies": {} + }, + "@esbuild/linux-arm@0.17.19": { + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "dependencies": {} + }, + "@esbuild/linux-ia32@0.17.19": { + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "dependencies": {} + }, + "@esbuild/linux-loong64@0.17.19": { + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "dependencies": {} + }, + "@esbuild/linux-mips64el@0.17.19": { + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "dependencies": {} + }, + "@esbuild/linux-ppc64@0.17.19": { + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "dependencies": {} + }, + "@esbuild/linux-riscv64@0.17.19": { + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "dependencies": {} + }, + "@esbuild/linux-s390x@0.17.19": { + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "dependencies": {} + }, + "@esbuild/linux-x64@0.17.19": { + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "dependencies": {} + }, + "@esbuild/netbsd-x64@0.17.19": { + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "dependencies": {} + }, + "@esbuild/openbsd-x64@0.17.19": { + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "dependencies": {} + }, + "@esbuild/sunos-x64@0.17.19": { + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "dependencies": {} + }, + "@esbuild/win32-arm64@0.17.19": { + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "dependencies": {} + }, + "@esbuild/win32-ia32@0.17.19": { + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "dependencies": {} + }, + "@esbuild/win32-x64@0.17.19": { + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "dependencies": {} + }, + "@isaacs/cliui@8.0.2": { + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "string-width@5.1.2", + "string-width-cjs": "string-width@4.2.3", + "strip-ansi": "strip-ansi@7.1.0", + "strip-ansi-cjs": "strip-ansi@6.0.1", + "wrap-ansi": "wrap-ansi@8.1.0", + "wrap-ansi-cjs": "wrap-ansi@7.0.0" + } + }, + "@jridgewell/gen-mapping@0.3.5": { + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "@jridgewell/set-array@1.2.1", + "@jridgewell/sourcemap-codec": "@jridgewell/sourcemap-codec@1.4.15", + "@jridgewell/trace-mapping": "@jridgewell/trace-mapping@0.3.25" + } + }, + "@jridgewell/resolve-uri@3.1.2": { + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dependencies": {} + }, + "@jridgewell/set-array@1.2.1": { + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dependencies": {} + }, + "@jridgewell/sourcemap-codec@1.4.15": { + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dependencies": {} + }, + "@jridgewell/trace-mapping@0.3.25": { + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "@jridgewell/resolve-uri@3.1.2", + "@jridgewell/sourcemap-codec": "@jridgewell/sourcemap-codec@1.4.15" + } + }, + "@nodelib/fs.scandir@2.1.5": { + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "@nodelib/fs.stat@2.0.5", + "run-parallel": "run-parallel@1.2.0" + } + }, + "@nodelib/fs.stat@2.0.5": { + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dependencies": {} + }, + "@nodelib/fs.walk@1.2.8": { + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "@nodelib/fs.scandir@2.1.5", + "fastq": "fastq@1.17.1" + } + }, "@octokit/auth-token@4.0.0": { "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", "dependencies": {} }, + "@octokit/auth-token@5.1.1": { + "integrity": "sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==", + "dependencies": {} + }, "@octokit/core@5.2.0": { "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", "dependencies": { @@ -214,6 +418,25 @@ "universal-user-agent": "universal-user-agent@6.0.1" } }, + "@octokit/core@6.1.0": { + "integrity": "sha512-3EvHBZUMeGtiWebCdyutlSDuVEWjjmXsvkmWfgCEMlmvFYrqzXVKTTH3jIXZFKhj0CjFAEMsJvETbEOzJnbphg==", + "dependencies": { + "@octokit/auth-token": "@octokit/auth-token@5.1.1", + "@octokit/graphql": "@octokit/graphql@8.1.1", + "@octokit/request": "@octokit/request@9.1.1", + "@octokit/request-error": "@octokit/request-error@6.1.1", + "@octokit/types": "@octokit/types@12.6.0", + "before-after-hook": "before-after-hook@3.0.2", + "universal-user-agent": "universal-user-agent@7.0.2" + } + }, + "@octokit/endpoint@10.1.1": { + "integrity": "sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==", + "dependencies": { + "@octokit/types": "@octokit/types@13.4.1", + "universal-user-agent": "universal-user-agent@7.0.2" + } + }, "@octokit/endpoint@9.0.5": { "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==", "dependencies": { @@ -229,6 +452,14 @@ "universal-user-agent": "universal-user-agent@6.0.1" } }, + "@octokit/graphql@8.1.1": { + "integrity": "sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==", + "dependencies": { + "@octokit/request": "@octokit/request@9.1.1", + "@octokit/types": "@octokit/types@13.4.1", + "universal-user-agent": "universal-user-agent@7.0.2" + } + }, "@octokit/openapi-types@20.0.0": { "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", "dependencies": {} @@ -265,6 +496,12 @@ "once": "once@1.4.0" } }, + "@octokit/request-error@6.1.1": { + "integrity": "sha512-1mw1gqT3fR/WFvnoVpY/zUM2o/XkMs/2AszUUG9I69xn0JFLv6PGkPhNk5lbfvROs79wiS0bqiJNxfCZcRJJdg==", + "dependencies": { + "@octokit/types": "@octokit/types@13.4.1" + } + }, "@octokit/request@8.4.0": { "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==", "dependencies": { @@ -274,6 +511,15 @@ "universal-user-agent": "universal-user-agent@6.0.1" } }, + "@octokit/request@9.1.1": { + "integrity": "sha512-pyAguc0p+f+GbQho0uNetNQMmLG1e80WjkIaqqgUkihqUp0boRU6nKItXO4VWnr+nbZiLGEyy4TeKRwqaLvYgw==", + "dependencies": { + "@octokit/endpoint": "@octokit/endpoint@10.1.1", + "@octokit/request-error": "@octokit/request-error@6.1.1", + "@octokit/types": "@octokit/types@13.4.1", + "universal-user-agent": "universal-user-agent@7.0.2" + } + }, "@octokit/rest@20.1.0_@octokit+core@5.2.0": { "integrity": "sha512-STVO3itHQLrp80lvcYB2UIKoeil5Ctsgd2s1AM+du3HqZIR35ZH7WE9HLwUOLXH0myA0y3AGNPo8gZtcgIbw0g==", "dependencies": { @@ -295,53 +541,1090 @@ "@octokit/openapi-types": "@octokit/openapi-types@22.1.0" } }, + "@pkgjs/parseargs@0.11.0": { + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dependencies": {} + }, + "@sindresorhus/is@5.6.0": { + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "dependencies": {} + }, + "@types/node@18.16.19": { + "integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==", + "dependencies": {} + }, "@types/unist@2.0.10": { "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", "dependencies": {} }, + "accepts@1.3.8": { + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "mime-types@2.1.35", + "negotiator": "negotiator@0.6.3" + } + }, + "ansi-regex@5.0.1": { + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dependencies": {} + }, + "ansi-regex@6.0.1": { + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dependencies": {} + }, + "ansi-styles@4.3.0": { + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "color-convert@2.0.1" + } + }, + "ansi-styles@6.2.1": { + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dependencies": {} + }, + "any-promise@1.3.0": { + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dependencies": {} + }, + "anymatch@3.1.3": { + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "normalize-path@3.0.0", + "picomatch": "picomatch@2.3.1" + } + }, + "array-flatten@1.1.1": { + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dependencies": {} + }, + "array-union@2.1.0": { + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dependencies": {} + }, + "balanced-match@1.0.2": { + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dependencies": {} + }, "before-after-hook@2.2.3": { "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", "dependencies": {} }, + "before-after-hook@3.0.2": { + "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", + "dependencies": {} + }, + "binary-extensions@2.3.0": { + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dependencies": {} + }, + "body-parser@1.20.2": { + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "bytes@3.1.2", + "content-type": "content-type@1.0.5", + "debug": "debug@2.6.9", + "depd": "depd@2.0.0", + "destroy": "destroy@1.2.0", + "http-errors": "http-errors@2.0.0", + "iconv-lite": "iconv-lite@0.4.24", + "on-finished": "on-finished@2.4.1", + "qs": "qs@6.11.0", + "raw-body": "raw-body@2.5.2", + "type-is": "type-is@1.6.18", + "unpipe": "unpipe@1.0.0" + } + }, + "brace-expansion@2.0.1": { + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "balanced-match@1.0.2" + } + }, + "braces@3.0.2": { + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "fill-range@7.0.1" + } + }, + "bundle-require@4.1.0_esbuild@0.17.19": { + "integrity": "sha512-FeArRFM+ziGkRViKRnSTbHZc35dgmR9yNog05Kn0+ItI59pOAISGvnnIwW1WgFZQW59IxD9QpJnUPkdIPfZuXg==", + "dependencies": { + "esbuild": "esbuild@0.17.19", + "load-tsconfig": "load-tsconfig@0.2.5" + } + }, + "bytes@3.1.2": { + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dependencies": {} + }, + "cac@6.7.14": { + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dependencies": {} + }, + "call-bind@1.0.7": { + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "es-define-property@1.0.0", + "es-errors": "es-errors@1.3.0", + "function-bind": "function-bind@1.1.2", + "get-intrinsic": "get-intrinsic@1.2.4", + "set-function-length": "set-function-length@1.2.2" + } + }, + "chalk@5.3.0": { + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dependencies": {} + }, + "char-regex@2.0.1": { + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", + "dependencies": {} + }, + "chokidar@3.6.0": { + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "anymatch@3.1.3", + "braces": "braces@3.0.2", + "fsevents": "fsevents@2.3.3", + "glob-parent": "glob-parent@5.1.2", + "is-binary-path": "is-binary-path@2.1.0", + "is-glob": "is-glob@4.0.3", + "normalize-path": "normalize-path@3.0.0", + "readdirp": "readdirp@3.6.0" + } + }, + "color-convert@2.0.1": { + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "color-name@1.1.4" + } + }, + "color-name@1.1.4": { + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dependencies": {} + }, + "commander@4.1.1": { + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dependencies": {} + }, + "content-disposition@0.5.4": { + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "safe-buffer@5.2.1" + } + }, + "content-type@1.0.5": { + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dependencies": {} + }, + "cookie-signature@1.0.6": { + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dependencies": {} + }, + "cookie@0.6.0": { + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dependencies": {} + }, + "cross-spawn@7.0.3": { + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "path-key@3.1.1", + "shebang-command": "shebang-command@2.0.0", + "which": "which@2.0.2" + } + }, + "debug@2.6.9": { + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "ms@2.0.0" + } + }, + "debug@4.3.4": { + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "ms@2.1.2" + } + }, + "dedent@1.5.3": { + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dependencies": {} + }, + "define-data-property@1.1.4": { + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "es-define-property@1.0.0", + "es-errors": "es-errors@1.3.0", + "gopd": "gopd@1.0.1" + } + }, + "depd@2.0.0": { + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dependencies": {} + }, "deprecation@2.3.1": { "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dependencies": {} }, - "once@1.4.0": { - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "destroy@1.2.0": { + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dependencies": {} + }, + "dir-glob@3.0.1": { + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dependencies": { - "wrappy": "wrappy@1.0.2" + "path-type": "path-type@4.0.0" } }, - "ts-toolbelt@9.6.0": { - "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", + "eastasianwidth@0.2.0": { + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dependencies": {} }, - "unist-util-is@4.1.0": { - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "ee-first@1.1.1": { + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dependencies": {} }, - "unist-util-visit-parents@3.1.1": { - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "emoji-regex@8.0.0": { + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dependencies": {} + }, + "emoji-regex@9.2.2": { + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dependencies": {} + }, + "emojilib@2.4.0": { + "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", + "dependencies": {} + }, + "encodeurl@1.0.2": { + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dependencies": {} + }, + "es-define-property@1.0.0": { + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dependencies": { - "@types/unist": "@types/unist@2.0.10", - "unist-util-is": "unist-util-is@4.1.0" + "get-intrinsic": "get-intrinsic@1.2.4" } }, - "unist-util-visit@2.0.3": { - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "es-errors@1.3.0": { + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dependencies": {} + }, + "esbuild@0.17.19": { + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", "dependencies": { - "@types/unist": "@types/unist@2.0.10", - "unist-util-is": "unist-util-is@4.1.0", - "unist-util-visit-parents": "unist-util-visit-parents@3.1.1" + "@esbuild/android-arm": "@esbuild/android-arm@0.17.19", + "@esbuild/android-arm64": "@esbuild/android-arm64@0.17.19", + "@esbuild/android-x64": "@esbuild/android-x64@0.17.19", + "@esbuild/darwin-arm64": "@esbuild/darwin-arm64@0.17.19", + "@esbuild/darwin-x64": "@esbuild/darwin-x64@0.17.19", + "@esbuild/freebsd-arm64": "@esbuild/freebsd-arm64@0.17.19", + "@esbuild/freebsd-x64": "@esbuild/freebsd-x64@0.17.19", + "@esbuild/linux-arm": "@esbuild/linux-arm@0.17.19", + "@esbuild/linux-arm64": "@esbuild/linux-arm64@0.17.19", + "@esbuild/linux-ia32": "@esbuild/linux-ia32@0.17.19", + "@esbuild/linux-loong64": "@esbuild/linux-loong64@0.17.19", + "@esbuild/linux-mips64el": "@esbuild/linux-mips64el@0.17.19", + "@esbuild/linux-ppc64": "@esbuild/linux-ppc64@0.17.19", + "@esbuild/linux-riscv64": "@esbuild/linux-riscv64@0.17.19", + "@esbuild/linux-s390x": "@esbuild/linux-s390x@0.17.19", + "@esbuild/linux-x64": "@esbuild/linux-x64@0.17.19", + "@esbuild/netbsd-x64": "@esbuild/netbsd-x64@0.17.19", + "@esbuild/openbsd-x64": "@esbuild/openbsd-x64@0.17.19", + "@esbuild/sunos-x64": "@esbuild/sunos-x64@0.17.19", + "@esbuild/win32-arm64": "@esbuild/win32-arm64@0.17.19", + "@esbuild/win32-ia32": "@esbuild/win32-ia32@0.17.19", + "@esbuild/win32-x64": "@esbuild/win32-x64@0.17.19" } }, - "universal-user-agent@6.0.1": { - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "escape-html@1.0.3": { + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dependencies": {} }, - "wrappy@1.0.2": { - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "etag@1.8.1": { + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dependencies": {} + }, + "execa@5.1.1": { + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "cross-spawn@7.0.3", + "get-stream": "get-stream@6.0.1", + "human-signals": "human-signals@2.1.0", + "is-stream": "is-stream@2.0.1", + "merge-stream": "merge-stream@2.0.0", + "npm-run-path": "npm-run-path@4.0.1", + "onetime": "onetime@5.1.2", + "signal-exit": "signal-exit@3.0.7", + "strip-final-newline": "strip-final-newline@2.0.0" + } + }, + "express@4.19.2": { + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "accepts@1.3.8", + "array-flatten": "array-flatten@1.1.1", + "body-parser": "body-parser@1.20.2", + "content-disposition": "content-disposition@0.5.4", + "content-type": "content-type@1.0.5", + "cookie": "cookie@0.6.0", + "cookie-signature": "cookie-signature@1.0.6", + "debug": "debug@2.6.9", + "depd": "depd@2.0.0", + "encodeurl": "encodeurl@1.0.2", + "escape-html": "escape-html@1.0.3", + "etag": "etag@1.8.1", + "finalhandler": "finalhandler@1.2.0", + "fresh": "fresh@0.5.2", + "http-errors": "http-errors@2.0.0", + "merge-descriptors": "merge-descriptors@1.0.1", + "methods": "methods@1.1.2", + "on-finished": "on-finished@2.4.1", + "parseurl": "parseurl@1.3.3", + "path-to-regexp": "path-to-regexp@0.1.7", + "proxy-addr": "proxy-addr@2.0.7", + "qs": "qs@6.11.0", + "range-parser": "range-parser@1.2.1", + "safe-buffer": "safe-buffer@5.2.1", + "send": "send@0.18.0", + "serve-static": "serve-static@1.15.0", + "setprototypeof": "setprototypeof@1.2.0", + "statuses": "statuses@2.0.1", + "type-is": "type-is@1.6.18", + "utils-merge": "utils-merge@1.0.1", + "vary": "vary@1.1.2" + } + }, + "fast-glob@3.3.2": { + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "@nodelib/fs.stat@2.0.5", + "@nodelib/fs.walk": "@nodelib/fs.walk@1.2.8", + "glob-parent": "glob-parent@5.1.2", + "merge2": "merge2@1.4.1", + "micromatch": "micromatch@4.0.5" + } + }, + "fastq@1.17.1": { + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "reusify@1.0.4" + } + }, + "fill-range@7.0.1": { + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "to-regex-range@5.0.1" + } + }, + "finalhandler@1.2.0": { + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "debug@2.6.9", + "encodeurl": "encodeurl@1.0.2", + "escape-html": "escape-html@1.0.3", + "on-finished": "on-finished@2.4.1", + "parseurl": "parseurl@1.3.3", + "statuses": "statuses@2.0.1", + "unpipe": "unpipe@1.0.0" + } + }, + "foreground-child@3.1.1": { + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "cross-spawn@7.0.3", + "signal-exit": "signal-exit@4.1.0" + } + }, + "forwarded@0.2.0": { + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dependencies": {} + }, + "fresh@0.5.2": { + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dependencies": {} + }, + "fsevents@2.3.3": { + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dependencies": {} + }, + "function-bind@1.1.2": { + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dependencies": {} + }, + "get-intrinsic@1.2.4": { + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "es-errors@1.3.0", + "function-bind": "function-bind@1.1.2", + "has-proto": "has-proto@1.0.3", + "has-symbols": "has-symbols@1.0.3", + "hasown": "hasown@2.0.2" + } + }, + "get-stream@6.0.1": { + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dependencies": {} + }, + "glob-parent@5.1.2": { + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "is-glob@4.0.3" + } + }, + "glob@10.4.1": { + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", + "dependencies": { + "foreground-child": "foreground-child@3.1.1", + "jackspeak": "jackspeak@3.1.2", + "minimatch": "minimatch@9.0.4", + "minipass": "minipass@7.1.2", + "path-scurry": "path-scurry@1.11.1" + } + }, + "globby@11.1.0": { + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "array-union@2.1.0", + "dir-glob": "dir-glob@3.0.1", + "fast-glob": "fast-glob@3.3.2", + "ignore": "ignore@5.3.1", + "merge2": "merge2@1.4.1", + "slash": "slash@3.0.0" + } + }, + "gopd@1.0.1": { + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "get-intrinsic@1.2.4" + } + }, + "has-property-descriptors@1.0.2": { + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "es-define-property@1.0.0" + } + }, + "has-proto@1.0.3": { + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dependencies": {} + }, + "has-symbols@1.0.3": { + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dependencies": {} + }, + "hasown@2.0.2": { + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "function-bind@1.1.2" + } + }, + "http-errors@2.0.0": { + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "depd@2.0.0", + "inherits": "inherits@2.0.4", + "setprototypeof": "setprototypeof@1.2.0", + "statuses": "statuses@2.0.1", + "toidentifier": "toidentifier@1.0.1" + } + }, + "human-signals@2.1.0": { + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dependencies": {} + }, + "iconv-lite@0.4.24": { + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": "safer-buffer@2.1.2" + } + }, + "ignore@5.3.1": { + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dependencies": {} + }, + "inherits@2.0.4": { + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dependencies": {} + }, + "ipaddr.js@1.9.1": { + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dependencies": {} + }, + "is-binary-path@2.1.0": { + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "binary-extensions@2.3.0" + } + }, + "is-extglob@2.1.1": { + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dependencies": {} + }, + "is-fullwidth-code-point@3.0.0": { + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dependencies": {} + }, + "is-glob@4.0.3": { + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "is-extglob@2.1.1" + } + }, + "is-number@7.0.0": { + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dependencies": {} + }, + "is-stream@2.0.1": { + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dependencies": {} + }, + "isexe@2.0.0": { + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dependencies": {} + }, + "jackspeak@3.1.2": { + "integrity": "sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==", + "dependencies": { + "@isaacs/cliui": "@isaacs/cliui@8.0.2", + "@pkgjs/parseargs": "@pkgjs/parseargs@0.11.0" + } + }, + "joycon@3.1.1": { + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "dependencies": {} + }, + "lilconfig@2.1.0": { + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dependencies": {} + }, + "lines-and-columns@1.2.4": { + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dependencies": {} + }, + "load-tsconfig@0.2.5": { + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", + "dependencies": {} + }, + "lodash.sortby@4.7.0": { + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dependencies": {} + }, + "lru-cache@10.2.2": { + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dependencies": {} + }, + "media-typer@0.3.0": { + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dependencies": {} + }, + "merge-descriptors@1.0.1": { + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dependencies": {} + }, + "merge-stream@2.0.0": { + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dependencies": {} + }, + "merge2@1.4.1": { + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dependencies": {} + }, + "methods@1.1.2": { + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dependencies": {} + }, + "micromatch@4.0.5": { + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "braces@3.0.2", + "picomatch": "picomatch@2.3.1" + } + }, + "mime-db@1.52.0": { + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dependencies": {} + }, + "mime-types@2.1.35": { + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "mime-db@1.52.0" + } + }, + "mime@1.6.0": { + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dependencies": {} + }, + "mimic-fn@2.1.0": { + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dependencies": {} + }, + "minimatch@9.0.4": { + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dependencies": { + "brace-expansion": "brace-expansion@2.0.1" + } + }, + "minipass@7.1.2": { + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dependencies": {} + }, + "ms@2.0.0": { + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dependencies": {} + }, + "ms@2.1.2": { + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dependencies": {} + }, + "ms@2.1.3": { + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dependencies": {} + }, + "mz@2.7.0": { + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "any-promise@1.3.0", + "object-assign": "object-assign@4.1.1", + "thenify-all": "thenify-all@1.6.0" + } + }, + "negotiator@0.6.3": { + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dependencies": {} + }, + "node-emoji@2.0.0": { + "integrity": "sha512-ZmD0gM6pfEBYt33P/WUqcBvAYb3FZrp1oCQNsfUCCJYKqA+Ww1wH0I/djym9pAJPbb2DYRV6OZF2RVewjACIiA==", + "dependencies": { + "@sindresorhus/is": "@sindresorhus/is@5.6.0", + "char-regex": "char-regex@2.0.1", + "emojilib": "emojilib@2.4.0", + "skin-tone": "skin-tone@3.0.0", + "tsup": "tsup@6.7.0_esbuild@0.17.19" + } + }, + "normalize-path@3.0.0": { + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dependencies": {} + }, + "npm-run-path@4.0.1": { + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "path-key@3.1.1" + } + }, + "object-assign@4.1.1": { + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dependencies": {} + }, + "object-inspect@1.13.1": { + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dependencies": {} + }, + "on-finished@2.4.1": { + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "ee-first@1.1.1" + } + }, + "once@1.4.0": { + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "wrappy@1.0.2" + } + }, + "onetime@5.1.2": { + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "mimic-fn@2.1.0" + } + }, + "parseurl@1.3.3": { + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dependencies": {} + }, + "path-key@3.1.1": { + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dependencies": {} + }, + "path-scurry@1.11.1": { + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "lru-cache@10.2.2", + "minipass": "minipass@7.1.2" + } + }, + "path-to-regexp@0.1.7": { + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dependencies": {} + }, + "path-type@4.0.0": { + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dependencies": {} + }, + "picomatch@2.3.1": { + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dependencies": {} + }, + "pirates@4.0.6": { + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dependencies": {} + }, + "postcss-load-config@3.1.4": { + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dependencies": { + "lilconfig": "lilconfig@2.1.0", + "yaml": "yaml@1.10.2" + } + }, + "proxy-addr@2.0.7": { + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "forwarded@0.2.0", + "ipaddr.js": "ipaddr.js@1.9.1" + } + }, + "punycode@2.3.1": { + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dependencies": {} + }, + "qs@6.11.0": { + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "side-channel@1.0.6" + } + }, + "queue-microtask@1.2.3": { + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dependencies": {} + }, + "range-parser@1.2.1": { + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dependencies": {} + }, + "raw-body@2.5.2": { + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "bytes@3.1.2", + "http-errors": "http-errors@2.0.0", + "iconv-lite": "iconv-lite@0.4.24", + "unpipe": "unpipe@1.0.0" + } + }, + "readdirp@3.6.0": { + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "picomatch@2.3.1" + } + }, + "resolve-from@5.0.0": { + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dependencies": {} + }, + "reusify@1.0.4": { + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dependencies": {} + }, + "rollup@3.29.4": { + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dependencies": { + "fsevents": "fsevents@2.3.3" + } + }, + "run-parallel@1.2.0": { + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dependencies": { + "queue-microtask": "queue-microtask@1.2.3" + } + }, + "safe-buffer@5.2.1": { + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dependencies": {} + }, + "safer-buffer@2.1.2": { + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dependencies": {} + }, + "send@0.18.0": { + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "debug@2.6.9", + "depd": "depd@2.0.0", + "destroy": "destroy@1.2.0", + "encodeurl": "encodeurl@1.0.2", + "escape-html": "escape-html@1.0.3", + "etag": "etag@1.8.1", + "fresh": "fresh@0.5.2", + "http-errors": "http-errors@2.0.0", + "mime": "mime@1.6.0", + "ms": "ms@2.1.3", + "on-finished": "on-finished@2.4.1", + "range-parser": "range-parser@1.2.1", + "statuses": "statuses@2.0.1" + } + }, + "serve-static@1.15.0": { + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "encodeurl@1.0.2", + "escape-html": "escape-html@1.0.3", + "parseurl": "parseurl@1.3.3", + "send": "send@0.18.0" + } + }, + "set-function-length@1.2.2": { + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "define-data-property@1.1.4", + "es-errors": "es-errors@1.3.0", + "function-bind": "function-bind@1.1.2", + "get-intrinsic": "get-intrinsic@1.2.4", + "gopd": "gopd@1.0.1", + "has-property-descriptors": "has-property-descriptors@1.0.2" + } + }, + "setprototypeof@1.2.0": { + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dependencies": {} + }, + "shebang-command@2.0.0": { + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "shebang-regex@3.0.0" + } + }, + "shebang-regex@3.0.0": { + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dependencies": {} + }, + "side-channel@1.0.6": { + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "call-bind@1.0.7", + "es-errors": "es-errors@1.3.0", + "get-intrinsic": "get-intrinsic@1.2.4", + "object-inspect": "object-inspect@1.13.1" + } + }, + "signal-exit@3.0.7": { + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dependencies": {} + }, + "signal-exit@4.1.0": { + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dependencies": {} + }, + "skin-tone@3.0.0": { + "integrity": "sha512-+HTlUiUJr3SjmOiKV3dPeGWcl7dgqv09OgFWJxD26vOmYss7DWKCl6sqHEjM1hddov/vXQN2bOKIMr0DMUJVSQ==", + "dependencies": { + "unicode-emoji-modifier-base": "unicode-emoji-modifier-base@1.0.0" + } + }, + "slash@3.0.0": { + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dependencies": {} + }, + "source-map@0.8.0-beta.0": { + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dependencies": { + "whatwg-url": "whatwg-url@7.1.0" + } + }, + "statuses@2.0.1": { + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dependencies": {} + }, + "string-width@4.2.3": { + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "emoji-regex@8.0.0", + "is-fullwidth-code-point": "is-fullwidth-code-point@3.0.0", + "strip-ansi": "strip-ansi@6.0.1" + } + }, + "string-width@5.1.2": { + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "eastasianwidth@0.2.0", + "emoji-regex": "emoji-regex@9.2.2", + "strip-ansi": "strip-ansi@7.1.0" + } + }, + "strip-ansi@6.0.1": { + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "ansi-regex@5.0.1" + } + }, + "strip-ansi@7.1.0": { + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "ansi-regex@6.0.1" + } + }, + "strip-final-newline@2.0.0": { + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dependencies": {} + }, + "sucrase@3.35.0": { + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "@jridgewell/gen-mapping@0.3.5", + "commander": "commander@4.1.1", + "glob": "glob@10.4.1", + "lines-and-columns": "lines-and-columns@1.2.4", + "mz": "mz@2.7.0", + "pirates": "pirates@4.0.6", + "ts-interface-checker": "ts-interface-checker@0.1.13" + } + }, + "thenify-all@1.6.0": { + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": "thenify@3.3.1" + } + }, + "thenify@3.3.1": { + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "any-promise@1.3.0" + } + }, + "to-regex-range@5.0.1": { + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "is-number@7.0.0" + } + }, + "toidentifier@1.0.1": { + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dependencies": {} + }, + "tr46@1.0.1": { + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dependencies": { + "punycode": "punycode@2.3.1" + } + }, + "tree-kill@1.2.2": { + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dependencies": {} + }, + "ts-interface-checker@0.1.13": { + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dependencies": {} + }, + "ts-toolbelt@9.6.0": { + "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", + "dependencies": {} + }, + "tsup@6.7.0_esbuild@0.17.19": { + "integrity": "sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==", + "dependencies": { + "bundle-require": "bundle-require@4.1.0_esbuild@0.17.19", + "cac": "cac@6.7.14", + "chokidar": "chokidar@3.6.0", + "debug": "debug@4.3.4", + "esbuild": "esbuild@0.17.19", + "execa": "execa@5.1.1", + "globby": "globby@11.1.0", + "joycon": "joycon@3.1.1", + "postcss-load-config": "postcss-load-config@3.1.4", + "resolve-from": "resolve-from@5.0.0", + "rollup": "rollup@3.29.4", + "source-map": "source-map@0.8.0-beta.0", + "sucrase": "sucrase@3.35.0", + "tree-kill": "tree-kill@1.2.2" + } + }, + "type-is@1.6.18": { + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "media-typer@0.3.0", + "mime-types": "mime-types@2.1.35" + } + }, + "unicode-emoji-modifier-base@1.0.0": { + "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", + "dependencies": {} + }, + "unist-util-is@4.1.0": { + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dependencies": {} + }, + "unist-util-visit-parents@3.1.1": { + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dependencies": { + "@types/unist": "@types/unist@2.0.10", + "unist-util-is": "unist-util-is@4.1.0" + } + }, + "unist-util-visit@2.0.3": { + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dependencies": { + "@types/unist": "@types/unist@2.0.10", + "unist-util-is": "unist-util-is@4.1.0", + "unist-util-visit-parents": "unist-util-visit-parents@3.1.1" + } + }, + "universal-user-agent@6.0.1": { + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "dependencies": {} + }, + "universal-user-agent@7.0.2": { + "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==", + "dependencies": {} + }, + "unpipe@1.0.0": { + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dependencies": {} + }, + "utils-merge@1.0.1": { + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dependencies": {} + }, + "vary@1.1.2": { + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dependencies": {} + }, + "webidl-conversions@4.0.2": { + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dependencies": {} + }, + "whatwg-url@7.1.0": { + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dependencies": { + "lodash.sortby": "lodash.sortby@4.7.0", + "tr46": "tr46@1.0.1", + "webidl-conversions": "webidl-conversions@4.0.2" + } + }, + "which@2.0.2": { + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "isexe@2.0.0" + } + }, + "wrap-ansi@7.0.0": { + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "ansi-styles@4.3.0", + "string-width": "string-width@4.2.3", + "strip-ansi": "strip-ansi@6.0.1" + } + }, + "wrap-ansi@8.1.0": { + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "ansi-styles@6.2.1", + "string-width": "string-width@5.1.2", + "strip-ansi": "strip-ansi@7.1.0" + } + }, + "wrappy@1.0.2": { + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dependencies": {} + }, + "yaml@1.10.2": { + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dependencies": {} } } @@ -349,6 +1632,7 @@ "remote": {}, "workspace": { "dependencies": [ + "jsr:@chiezo/amber@^0.0.4", "jsr:@cliffy/ansi@1.0.0-rc.4", "jsr:@cliffy/command@1.0.0-rc.4", "jsr:@core/match@^0.2.5", @@ -369,7 +1653,8 @@ "jsr:@std/semver@^0.222.1", "jsr:@std/testing@^0.222.1", "npm:@conventional-commits/parser@^0.4.1", - "npm:@octokit/rest@^20.1.0" + "npm:@octokit/rest@^20.1.0", + "npm:dedent@^1.5.3" ], "members": { "@molt/cli": {}, diff --git a/lib/deno.json b/lib/deno.json index e25acc83..14574e1a 100644 --- a/lib/deno.json +++ b/lib/deno.json @@ -3,8 +3,7 @@ "version": "0.18.0", "exports": { "./changelog": "./changelog.ts", - "./path": "./path.ts", - "./testing": "./testing.ts" + "./path": "./path.ts" }, "publish": { "exclude": [ diff --git a/lib/path_test.ts b/lib/path_test.ts index aa8a5a77..88220b52 100644 --- a/lib/path_test.ts +++ b/lib/path_test.ts @@ -88,6 +88,10 @@ Deno.test("findFileUp", async () => { await findFileUp(dir, "LICENSE"), fromFileUrl(new URL("../LICENSE", import.meta.url)), ); + assertEquals( + await findFileUp(dir, "deno.json"), + fromFileUrl(new URL("deno.json", import.meta.url)), + ); // Throws for a non-directory path assertRejects( () => findFileUp(import.meta.url, "deno.json"), diff --git a/lib/testing_test.ts b/lib/testing_test.ts deleted file mode 100644 index 1d83b2ab..00000000 --- a/lib/testing_test.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { assertObjectMatch } from "@std/assert"; -import { assertSpyCall, assertSpyCalls } from "@std/testing/mock"; -import { CommandStub } from "./testing.ts"; - -Deno.test("CommandStub", async () => { - const Command = CommandStub.create(); - const output = await new Command("echo").output(); - assertObjectMatch(output, { - code: 0, - stdout: new Uint8Array(), - stderr: new Uint8Array(), - success: true, - signal: null, - }); - assertSpyCall(Command, 0, { - args: ["echo", undefined], - }); - assertSpyCalls(Command, 1); -}); diff --git a/test/fixtures/deno.jsonc b/test/fixtures/deno.jsonc index e47b9668..55a1507a 100644 --- a/test/fixtures/deno.jsonc +++ b/test/fixtures/deno.jsonc @@ -15,7 +15,7 @@ // JSR - updated "@std/yaml": "jsr:@std/yaml@123.456.789", // Local - "lib/": "./lib", + "lib/": "./lib/", // HTTP "x/deno_graph": "https://deno.land/x/deno_graph@0.50.0/mod.ts", // HTTP - prefix diff --git a/test/fixtures/deno.lock b/test/fixtures/deno.lock new file mode 100644 index 00000000..801e6519 --- /dev/null +++ b/test/fixtures/deno.lock @@ -0,0 +1,44 @@ +{ + "version": "3", + "packages": { + "specifiers": { + "jsr:@std/assert@0.222.0": "jsr:@std/assert@0.222.0", + "jsr:@std/fmt@^0.222.0": "jsr:@std/fmt@0.222.1", + "jsr:@std/testing@0.222.0": "jsr:@std/testing@0.222.0" + }, + "jsr": { + "@std/assert@0.222.0": { + "integrity": "cbf00c0d8125a56c087e3d1ea0e638760d47206b30e9d300bad826b811719fc7", + "dependencies": [ + "jsr:@std/fmt@^0.222.0" + ] + }, + "@std/fmt@0.222.1": { + "integrity": "ec3382f9b0261c1ab1a5c804aa355d816515fa984cdd827ed32edfb187c0a722" + }, + "@std/testing@0.222.0": { + "integrity": "a6d10c9fbb1df052ad7f73174d511328c08b7408bdd162ef6c3bc04def49c2ae" + } + } + }, + "remote": { + "https://deno.land/x/deno_graph@0.50.0/deno_graph_wasm.generated.js": "e1d58f79f4e33c7cc1062af565600f422a2fec1b5eaee42691f2a7992d9d5e6b", + "https://deno.land/x/deno_graph@0.50.0/loader.ts": "a2e757383908f4a51659fe1b1203386887ebb17756bac930a64856d613d8d57d", + "https://deno.land/x/deno_graph@0.50.0/media_type.ts": "a89a1b38d07c160e896de9ceb99285ba8391940140558304171066b5c3ef7609", + "https://deno.land/x/deno_graph@0.50.0/mod.ts": "47b5e8560f3e66468194742239fc76cf587d611dd43c1913eeebb9b1d94fc39f", + "https://deno.land/x/dir@1.5.1/data_local_dir/mod.ts": "91eb1c4bfadfbeda30171007bac6d85aadacd43224a5ed721bbe56bc64e9eb66", + "https://deno.land/x/wasmbuild@0.14.1/cache.ts": "89eea5f3ce6035a1164b3e655c95f21300498920575ade23161421f5b01967f4", + "https://deno.land/x/wasmbuild@0.14.1/loader.ts": "d98d195a715f823151cbc8baa3f32127337628379a02d9eb2a3c5902dbccfc02" + }, + "workspace": { + "dependencies": [ + "jsr:@std/assert@0.222.0", + "jsr:@std/bytes", + "jsr:@std/jsoc@0.222.x", + "jsr:@std/testing@0.222.0", + "jsr:@std/testing@^0.222.0", + "jsr:@std/yaml@123.456.789", + "npm:@octokit/core@6.1.0" + ] + } +} diff --git a/lib/testing.ts b/test/mock.ts similarity index 51% rename from lib/testing.ts rename to test/mock.ts index da33afb3..7768c024 100644 --- a/lib/testing.ts +++ b/test/mock.ts @@ -1,100 +1,4 @@ -import { spy, type Stub, stub } from "@std/testing/mock"; -import { format, LF } from "@std/fs/eol"; -import { dirname } from "@std/path"; - -export const CommandStub = { - create(pattern = "") { - return class CommandStub extends spy(Deno.Command) { - #cmd: string; - constructor( - command: string | URL, - options?: Deno.CommandOptions, - ) { - super(command, options); - this.#cmd = command.toString(); - } - #output: Deno.CommandOutput = { - code: 0, - stdout: new Uint8Array(), - stderr: new Uint8Array(), - success: true, - signal: null, - }; - outputSync() { - return this.#cmd.toString().includes(pattern) - ? this.#output - : super.outputSync(); - } - output() { - return this.#cmd.includes(pattern) - ? Promise.resolve(this.#output) - : super.output(); - } - spawn() { - return this.#cmd.includes(pattern) - ? new Deno.ChildProcess() - : super.spawn(); - } - static clear() { - this.calls = []; - } - }; - }, -}; -export type CommandStub = ReturnType; - -export class FileSystemFake extends Map {} - -export const ReadTextFileStub = { - create( - fs: FileSystemFake, - options?: { - readThrough?: boolean; - }, - ): Stub { - const original = Deno.readTextFile; - return stub( - Deno, - "readTextFile", - async (path) => { - return fs.get(path.toString()) ?? - (path.toString().startsWith("/tmp") || options?.readThrough - ? await original(path) - : _throw(new Deno.errors.NotFound(`File not found: ${path}`))); - }, - ); - }, -}; -export type ReadTextFileStub = ReturnType; - -export const WriteTextFileStub = { - create( - fs: FileSystemFake, - ) { - const original = Deno.writeTextFile; - const tmp = getTempDir(); - return stub( - Deno, - "writeTextFile", - (path, data) => { - if (path.toString().startsWith(tmp)) { - return original(path, data); - } else { - fs.set(path.toString(), format(data.toString(), LF)); - return Promise.resolve(); - } - }, - ); - }, -}; -export type WriteTextFileStub = ReturnType; - -function getTempDir() { - const temp = Deno.makeTempFileSync(); - const tempDir = dirname(temp); - Deno.removeSync(temp); - return tempDir; -} +import { stub } from "@std/testing/mock"; export const FetchStub = { create( @@ -190,8 +94,3 @@ function parseDenoLandUrl(url: URL) { path: path.replace(/\/$/, ""), }; } - -/** Utility function to throw an error. */ -function _throw(error: Error): never { - throw error; -} diff --git a/test/snapshots/cli_test.ts.snap b/test/snapshots/cli_test.ts.snap deleted file mode 100644 index 3b850328..00000000 --- a/test/snapshots/cli_test.ts.snap +++ /dev/null @@ -1,466 +0,0 @@ -export const snapshot = {}; - -snapshot[`cli - "molt" 1`] = ` -" -Usage: molt - -Description: - - Check updates to dependencies in Deno modules and configuration files - -Options: - - -h, --help - Show this help. - -v, --version - Print version info - -w, --write - Write changes to local files (Conflicts: --commit) - -c, --commit - Commit changes to local git repository (Conflicts: --write) - --changelog [commit_types] - Show a curated changelog for each update - --debug - Print debug information - --import-map - Specify import map file - --ignore - Ignore dependencies - --no-resolve - Do not resolve local imports - --only - Check specified dependencies - --pre-commit - Run tasks before each commit (Depends: --commit) - --prefix - Prefix for commit messages (Depends: --commit) - --prefix-lock - Prefix for commit messages of updating a lock file (Depends: --commit, --unstable-lock) - --unstable-lock [file] - Enable unstable updating of a lock file - -" -`; - -snapshot[`cli - "molt" 2`] = ` -" error: Missing argument(s): modules - -" -`; - -snapshot[`cli - "molt --help" 1`] = ` -" -Usage: molt - -Description: - - Check updates to dependencies in Deno modules and configuration files - -Options: - - -h, --help - Show this help. - -v, --version - Print version info - -w, --write - Write changes to local files (Conflicts: --commit) - -c, --commit - Commit changes to local git repository (Conflicts: --write) - --changelog [commit_types] - Show a curated changelog for each update - --debug - Print debug information - --import-map - Specify import map file - --ignore - Ignore dependencies - --no-resolve - Do not resolve local imports - --only - Check specified dependencies - --pre-commit - Run tasks before each commit (Depends: --commit) - --prefix - Prefix for commit messages (Depends: --commit) - --prefix-lock - Prefix for commit messages of updating a lock file (Depends: --commit, --unstable-lock) - --unstable-lock [file] - Enable unstable updating of a lock file - -" -`; - -snapshot[`cli - "molt --help" 2`] = `""`; - -snapshot[`cli - "molt --version" 1`] = ` -"0.18.4 -" -`; - -snapshot[`cli - "molt --version" 2`] = `""`; - -snapshot[`cli - "molt not_exist.ts" 1`] = `""`; - -snapshot[`cli - "molt not_exist.ts" 2`] = ` -'Error: Path does not exist: "not_exist.ts" -' -`; - -snapshot[`cli - "molt import.ts" 1`] = ` -"📦 deno.land/std 0.200.0 => 0.218.2 -" -`; - -snapshot[`cli - "molt import.ts" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - "molt jsr.ts" 1`] = ` -"📦 @std/assert 0.210.0 => 0.218.2 -" -`; - -snapshot[`cli - "molt jsr.ts" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - import_map - "molt mod.ts" 1`] = ` -"📦 @luca/flag 1.0.0 => 1.0.1 -📦 deno.land/std 0.200.0 => 0.218.2 -📦 deno.land/x/deno_graph 0.50.0 => 0.69.7 -📦 node-emoji 2.0.0 => 2.1.3 -" -`; - -snapshot[`cli - import_map - "molt mod.ts" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - import_map - "molt mod.ts --import-map deno.json" 1`] = ` -"📦 @luca/flag 1.0.0 => 1.0.1 -📦 deno.land/std 0.200.0 => 0.218.2 -📦 deno.land/x/deno_graph 0.50.0 => 0.69.7 -📦 node-emoji 2.0.0 => 2.1.3 -" -`; - -snapshot[`cli - import_map - "molt mod.ts --import-map deno.json" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - "molt multiple_imports.ts --ignore node-emoji" 1`] = ` -"📦 @luca/flag 1.0.0 => 1.0.1 -📦 deno.land/std 0.200.0 => 0.218.2 -📦 deno.land/x/deno_graph 0.50.0 => 0.69.7 -" -`; - -snapshot[`cli - "molt multiple_imports.ts --ignore node-emoji" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - "molt multiple_imports.ts --ignore=deno_graph,node-emoji" 1`] = ` -"📦 @luca/flag 1.0.0 => 1.0.1 -📦 deno.land/std 0.200.0 => 0.218.2 -" -`; - -snapshot[`cli - "molt multiple_imports.ts --ignore=deno_graph,node-emoji" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - "molt multiple_imports.ts --only deno.land/std" 1`] = ` -"📦 deno.land/std 0.200.0 => 0.218.2 -" -`; - -snapshot[`cli - "molt multiple_imports.ts --only deno.land/std" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - "molt multiple_imports.ts --only=deno.land/std,deno_graph" 1`] = ` -"📦 deno.land/std 0.200.0 => 0.218.2 -📦 deno.land/x/deno_graph 0.50.0 => 0.69.7 -" -`; - -snapshot[`cli - "molt multiple_imports.ts --only=deno.land/std,deno_graph" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - "molt multiple_imports.ts --only deno.land --ignore deno_graph" 1`] = ` -"📦 deno.land/std 0.200.0 => 0.218.2 -" -`; - -snapshot[`cli - "molt multiple_imports.ts --only deno.land --ignore deno_graph" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - multiple_modules - "molt mod.ts --write" 1`] = ` -"📦 deno.land/std 0.200.0 => 0.218.2 - lib.ts - mod.ts -📦 deno.land/x/deno_graph 0.50.0 => 0.69.7 - mod.ts -📦 node-emoji 2.0.0 => 2.1.3 - mod.ts - -💾 lib.ts -💾 mod.ts -" -`; - -snapshot[`cli - multiple_modules - "molt mod.ts --write" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - multiple_modules - "molt mod.ts --commit" 1`] = ` -"📦 deno.land/std 0.200.0 => 0.218.2 - lib.ts - mod.ts -📦 deno.land/x/deno_graph 0.50.0 => 0.69.7 - mod.ts -📦 node-emoji 2.0.0 => 2.1.3 - mod.ts - -📝 bump deno.land/std from 0.200.0 to 0.218.2 -📝 bump deno.land/x/deno_graph from 0.50.0 to 0.69.7 -📝 bump node-emoji from 2.0.0 to 2.1.3 -" -`; - -snapshot[`cli - multiple_modules - "molt mod.ts --commit" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - multiple_modules - "molt mod.ts --commit --prefix :package:" 1`] = ` -"📦 deno.land/std 0.200.0 => 0.218.2 - lib.ts - mod.ts -📦 deno.land/x/deno_graph 0.50.0 => 0.69.7 - mod.ts -📦 node-emoji 2.0.0 => 2.1.3 - mod.ts - -📝 :package: bump deno.land/std from 0.200.0 to 0.218.2 -📝 :package: bump deno.land/x/deno_graph from 0.50.0 to 0.69.7 -📝 :package: bump node-emoji from 2.0.0 to 2.1.3 -" -`; - -snapshot[`cli - multiple_modules - "molt mod.ts --commit --prefix :package:" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - multiple_modules - "molt mod.ts --commit --pre-commit=fmt" 1`] = ` -"📦 deno.land/std 0.200.0 => 0.218.2 - lib.ts - mod.ts -📦 deno.land/x/deno_graph 0.50.0 => 0.69.7 - mod.ts -📦 node-emoji 2.0.0 => 2.1.3 - mod.ts - -💾 bump deno.land/std from 0.200.0 to 0.218.2 -🔨 Running task fmt... -📝 bump deno.land/std from 0.200.0 to 0.218.2 - -💾 bump deno.land/x/deno_graph from 0.50.0 to 0.69.7 -🔨 Running task fmt... -📝 bump deno.land/x/deno_graph from 0.50.0 to 0.69.7 - -💾 bump node-emoji from 2.0.0 to 2.1.3 -🔨 Running task fmt... -📝 bump node-emoji from 2.0.0 to 2.1.3 -" -`; - -snapshot[`cli - multiple_modules - "molt mod.ts --commit --pre-commit=fmt" 2`] = ` -"Checking for updates -Checked 2 files -Checked 2 files -Checked 2 files -" -`; - -snapshot[`cli - import_map - "molt deno.json" 1`] = ` -"📦 @luca/flag 1.0.0 => 1.0.1 -📦 deno.land/std 0.200.0 => 0.218.2 -📦 deno.land/x/deno_graph 0.50.0 => 0.69.7 -📦 node-emoji 2.0.0 => 2.1.3 -" -`; - -snapshot[`cli - import_map - "molt deno.json" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - import_map - "molt deno.json --write" 1`] = ` -"📦 @luca/flag 1.0.0 => 1.0.1 -📦 deno.land/std 0.200.0 => 0.218.2 -📦 deno.land/x/deno_graph 0.50.0 => 0.69.7 -📦 node-emoji 2.0.0 => 2.1.3 - -💾 deno.json -" -`; - -snapshot[`cli - import_map - "molt deno.json --write" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - import_map - "molt deno.json --commit" 1`] = ` -"📦 @luca/flag 1.0.0 => 1.0.1 -📦 deno.land/std 0.200.0 => 0.218.2 -📦 deno.land/x/deno_graph 0.50.0 => 0.69.7 -📦 node-emoji 2.0.0 => 2.1.3 - -📝 bump @luca/flag from 1.0.0 to 1.0.1 -📝 bump deno.land/std from 0.200.0 to 0.218.2 -📝 bump deno.land/x/deno_graph from 0.50.0 to 0.69.7 -📝 bump node-emoji from 2.0.0 to 2.1.3 -" -`; - -snapshot[`cli - import_map - "molt deno.json --commit" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - jsonc - "molt deno.jsonc" 1`] = ` -"📦 @luca/flag 1.0.0 => 1.0.1 -📦 deno.land/std 0.200.0 => 0.218.2 -📦 deno.land/x/deno_graph 0.50.0 => 0.69.7 -📦 node-emoji 2.0.0 => 2.1.3 -" -`; - -snapshot[`cli - jsonc - "molt deno.jsonc" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - jsonc - "molt deno.jsonc --write" 1`] = ` -"📦 @luca/flag 1.0.0 => 1.0.1 -📦 deno.land/std 0.200.0 => 0.218.2 -📦 deno.land/x/deno_graph 0.50.0 => 0.69.7 -📦 node-emoji 2.0.0 => 2.1.3 - -💾 deno.jsonc -" -`; - -snapshot[`cli - jsonc - "molt deno.jsonc --write" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - jsonc - "molt deno.jsonc --commit" 1`] = ` -"📦 @luca/flag 1.0.0 => 1.0.1 -📦 deno.land/std 0.200.0 => 0.218.2 -📦 deno.land/x/deno_graph 0.50.0 => 0.69.7 -📦 node-emoji 2.0.0 => 2.1.3 - -📝 bump @luca/flag from 1.0.0 to 1.0.1 -📝 bump deno.land/std from 0.200.0 to 0.218.2 -📝 bump deno.land/x/deno_graph from 0.50.0 to 0.69.7 -📝 bump node-emoji from 2.0.0 to 2.1.3 -" -`; - -snapshot[`cli - jsonc - "molt deno.jsonc --commit" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - lockfile - "molt deno.json --unstable-lock not_exist.lock" 1`] = `""`; - -snapshot[`cli - lockfile - "molt deno.json --unstable-lock not_exist.lock" 2`] = ` -"Checking for updates -Error: No such file or directory (os error 2): readfile 'not_exist.lock' -" -`; - -snapshot[`cli - lockfile - "molt deno.json --unstable-lock" 1`] = ` -"📦 @core/match 0.1.0 => 0.1.9 - deno.lock -📦 deno.land/std 0.200.0 => 0.218.2 - deno.json - deno.lock -📦 hono 3.0.0 => 3.12.12 - deno.lock -" -`; - -snapshot[`cli - lockfile - "molt deno.json --unstable-lock" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - lockfile - "molt deno.json --unstable-lock --write" 1`] = ` -"📦 @core/match 0.1.0 => 0.1.9 - deno.lock -📦 deno.land/std 0.200.0 => 0.218.2 - deno.json - deno.lock -📦 hono 3.0.0 => 3.12.12 - deno.lock - -💾 deno.json -💾 deno.lock -" -`; - -snapshot[`cli - lockfile - "molt deno.json --unstable-lock --write" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - lockfile - "molt deno.json --commit --unstable-lock --prefix :package: --prefix-lock :lock:" 1`] = ` -"📦 @core/match 0.1.0 => 0.1.9 - deno.lock -📦 deno.land/std 0.200.0 => 0.218.2 - deno.json - deno.lock -📦 hono 3.0.0 => 3.12.12 - deno.lock - -📝 :lock: bump @core/match from 0.1.0 to 0.1.9 -📝 :package: bump deno.land/std from 0.200.0 to 0.218.2 -📝 :lock: bump hono from 3.0.0 to 3.12.12 -" -`; - -snapshot[`cli - lockfile - "molt deno.json --commit --unstable-lock --prefix :package: --prefix-lock :lock:" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - multiple_modules - "molt mod.ts --no-resolve" 1`] = ` -"📦 deno.land/std 0.200.0 => 0.218.2 -📦 deno.land/x/deno_graph 0.50.0 => 0.69.7 -📦 node-emoji 2.0.0 => 2.1.3 -" -`; - -snapshot[`cli - multiple_modules - "molt mod.ts --no-resolve" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - jsr_with_path_in_import_map - "molt mod.ts" 1`] = ` -"📦 @std/testing 0.210.0 => 0.218.2 -" -`; - -snapshot[`cli - jsr_with_path_in_import_map - "molt mod.ts" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - jsr_with_path_in_import_map - "molt deno.json" 1`] = ` -"📦 @std/testing 0.210.0 => 0.218.2 -" -`; - -snapshot[`cli - jsr_with_path_in_import_map - "molt deno.json" 2`] = ` -"Checking for updates -" -`; - -snapshot[`cli - import_map_duplicated_imports - "molt deno.json" 1`] = ` -"📦 @std/testing 0.210.0 => 0.218.2 -" -`; - -snapshot[`cli - import_map_duplicated_imports - "molt deno.json" 2`] = ` -"Checking for updates -" -`; diff --git a/test/snapshots/file_test.ts.snap b/test/snapshots/file_test.ts.snap deleted file mode 100644 index 4aa4a3f5..00000000 --- a/test/snapshots/file_test.ts.snap +++ /dev/null @@ -1,1806 +0,0 @@ -export const snapshot = {}; - -snapshot[`write - export.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 71, - line: 0, - }, - start: { - character: 23, - line: 0, - }, - }, - specifier: "https://deno.land/std@0.200.0/assert/assert.ts", - }, - from: { - name: "deno.land/std", - path: "/assert/assert.ts", - protocol: "https:", - version: "0.200.0", - }, - map: undefined, - to: { - name: "deno.land/std", - path: "/assert/assert.ts", - protocol: "https:", - version: "0.218.0", - }, - }, - ], - kind: "module", - }, -] -`; - -snapshot[`write - export.ts 2`] = ` -[ - 'export { assert } from "https://deno.land/std@0.218.0/assert/assert.ts"; -', -] -`; - -snapshot[`write - lockfile_not_importable/mod.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 23, - line: 0, - }, - start: { - character: 7, - line: 0, - }, - }, - specifier: "std/version.ts", - }, - from: { - name: "deno.land/std", - path: "/", - protocol: "https:", - version: "0.200.0", - }, - map: { - key: "std/", - resolved: "https://deno.land/std@0.200.0/version.ts", - }, - to: { - name: "deno.land/std", - path: "/", - protocol: "https:", - version: "0.218.0", - }, - }, - ], - kind: "import_map", - }, - { - dependencies: [ - { - code: { - span: undefined, - specifier: "https://deno.land/std@0.200.0/version.ts", - }, - from: { - name: "deno.land/std", - path: "/", - protocol: "https:", - version: "0.200.0", - }, - map: undefined, - to: { - name: "deno.land/std", - path: "/", - protocol: "https:", - version: "0.218.0", - }, - }, - ], - kind: "lockfile", - }, -] -`; - -snapshot[`write - lockfile_not_importable/mod.ts 2`] = ` -[ - '{ - "imports": { - "std/": "https://deno.land/std@0.218.0/" - } -} -', - '{ - "version": "3", - "remote": { - "https://deno.land/std@0.218.0/version.ts": "cfb73e2f2b628978b2b70585b941c5ef5ccbf1dc06e76967206115c74ecfce49" - } -} -', -] -`; - -snapshot[`write - jsr_with_path_in_import_map/deno.json 1`] = ` -[ - { - dependencies: [ - { - code: { - span: undefined, - specifier: "jsr:@std/testing@0.210.0", - }, - from: { - name: "@std/testing", - path: "", - protocol: "jsr:", - version: "0.210.0", - }, - map: { - key: "@std/testing", - resolved: "jsr:@std/testing@0.210.0", - }, - to: { - name: "@std/testing", - path: "", - protocol: "jsr:", - version: "123.456.789", - }, - }, - ], - kind: "import_map", - }, -] -`; - -snapshot[`write - jsr_with_path_in_import_map/deno.json 2`] = ` -[ - '{ - "imports": { - "@std/testing": "jsr:@std/testing@123.456.789" - } -} -', -] -`; - -snapshot[`write - jsr_with_path_in_import_map/mod.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 43, - line: 0, - }, - start: { - character: 25, - line: 0, - }, - }, - specifier: "@std/testing/bdd", - }, - from: { - name: "@std/testing", - path: "", - protocol: "jsr:", - version: "0.210.0", - }, - map: { - key: "@std/testing", - resolved: "jsr:/@std/testing@0.210.0/bdd", - }, - to: { - name: "@std/testing", - path: "", - protocol: "jsr:", - version: "123.456.789", - }, - }, - ], - kind: "import_map", - }, -] -`; - -snapshot[`write - jsr_with_path_in_import_map/mod.ts 2`] = ` -[ - '{ - "imports": { - "@std/testing": "jsr:@std/testing@123.456.789" - } -} -', -] -`; - -snapshot[`write - multiple_imports.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 52, - line: 3, - }, - start: { - character: 30, - line: 3, - }, - }, - specifier: "jsr:@luca/flag@1.0.0", - }, - from: { - name: "@luca/flag", - path: "", - protocol: "jsr:", - version: "1.0.0", - }, - map: undefined, - to: { - name: "@luca/flag", - path: "", - protocol: "jsr:", - version: "123.456.789", - }, - }, - { - code: { - span: { - end: { - character: 71, - line: 0, - }, - start: { - character: 23, - line: 0, - }, - }, - specifier: "https://deno.land/std@0.200.0/assert/assert.ts", - }, - from: { - name: "deno.land/std", - path: "/assert/assert.ts", - protocol: "https:", - version: "0.200.0", - }, - map: undefined, - to: { - name: "deno.land/std", - path: "/assert/assert.ts", - protocol: "https:", - version: "0.218.0", - }, - }, - { - code: { - span: { - end: { - character: 74, - line: 1, - }, - start: { - character: 28, - line: 1, - }, - }, - specifier: "https://deno.land/x/deno_graph@0.50.0/mod.ts", - }, - from: { - name: "deno.land/x/deno_graph", - path: "/mod.ts", - protocol: "https:", - version: "0.50.0", - }, - map: undefined, - to: { - name: "deno.land/x/deno_graph", - path: "/mod.ts", - protocol: "https:", - version: "123.456.789", - }, - }, - { - code: { - span: { - end: { - character: 40, - line: 2, - }, - start: { - character: 18, - line: 2, - }, - }, - specifier: "npm:node-emoji@2.0.0", - }, - from: { - name: "node-emoji", - path: "", - protocol: "npm:", - version: "2.0.0", - }, - map: undefined, - to: { - name: "node-emoji", - path: "", - protocol: "npm:", - version: "123.456.789", - }, - }, - ], - kind: "module", - }, -] -`; - -snapshot[`write - multiple_imports.ts 2`] = ` -[ - 'import { assert } from "https://deno.land/std@0.218.0/assert/assert.ts"; -import { createGraph } from "https://deno.land/x/deno_graph@123.456.789/mod.ts"; -import emoji from "npm:node-emoji@123.456.789"; -import { printProgress } from "jsr:@luca/flag@123.456.789"; -', -] -`; - -snapshot[`write - import_map_referred/import_map.json 1`] = ` -[ - { - dependencies: [ - { - code: { - span: undefined, - specifier: "https://deno.land/x/dax@0.17.0/mod.ts", - }, - from: { - name: "deno.land/x/dax", - path: "/mod.ts", - protocol: "https:", - version: "0.17.0", - }, - map: { - key: "dax", - resolved: "https://deno.land/x/dax@0.17.0/mod.ts", - }, - to: { - name: "deno.land/x/dax", - path: "/mod.ts", - protocol: "https:", - version: "123.456.789", - }, - }, - ], - kind: "import_map", - }, -] -`; - -snapshot[`write - import_map_referred/import_map.json 2`] = ` -[ - '{ - "imports": { - "dax": "https://deno.land/x/dax@123.456.789/mod.ts" - } -} -', -] -`; - -snapshot[`write - import_map_referred/mod.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 19, - line: 0, - }, - start: { - character: 14, - line: 0, - }, - }, - specifier: "dax", - }, - from: { - name: "deno.land/x/dax", - path: "/mod.ts", - protocol: "https:", - version: "0.17.0", - }, - map: { - key: "dax", - resolved: "https://deno.land/x/dax@0.17.0/mod.ts", - }, - to: { - name: "deno.land/x/dax", - path: "/mod.ts", - protocol: "https:", - version: "123.456.789", - }, - }, - ], - kind: "import_map", - }, -] -`; - -snapshot[`write - import_map_referred/mod.ts 2`] = ` -[ - '{ - "imports": { - "dax": "https://deno.land/x/dax@123.456.789/mod.ts" - } -} -', -] -`; - -snapshot[`write - updated_import_and_outdated_export.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 84, - line: 1, - }, - start: { - character: 29, - line: 1, - }, - }, - specifier: "https://deno.land/std@0.200.0/assert/assert_equals.ts", - }, - from: { - name: "deno.land/std", - path: "/assert/assert_equals.ts", - protocol: "https:", - version: "0.200.0", - }, - map: undefined, - to: { - name: "deno.land/std", - path: "/assert/assert_equals.ts", - protocol: "https:", - version: "0.218.0", - }, - }, - ], - kind: "module", - }, -] -`; - -snapshot[`write - updated_import_and_outdated_export.ts 2`] = ` -[ - 'import { assert } from "https://deno.land/std@0.218.0/assert/assert.ts"; -export { assertEquals } from "https://deno.land/std@0.218.0/assert/assert_equals.ts"; -', -] -`; - -snapshot[`write - import_map/deno.json 1`] = ` -[ - { - dependencies: [ - { - code: { - span: undefined, - specifier: "jsr:@luca/flag@1.0.0", - }, - from: { - name: "@luca/flag", - path: "", - protocol: "jsr:", - version: "1.0.0", - }, - map: { - key: "flag", - resolved: "jsr:@luca/flag@1.0.0", - }, - to: { - name: "@luca/flag", - path: "", - protocol: "jsr:", - version: "123.456.789", - }, - }, - { - code: { - span: undefined, - specifier: "https://deno.land/std@0.200.0/", - }, - from: { - name: "deno.land/std", - path: "/", - protocol: "https:", - version: "0.200.0", - }, - map: { - key: "std/", - resolved: "https://deno.land/std@0.200.0/", - }, - to: { - name: "deno.land/std", - path: "/", - protocol: "https:", - version: "0.218.0", - }, - }, - { - code: { - span: undefined, - specifier: "https://deno.land/x/deno_graph@0.50.0/mod.ts", - }, - from: { - name: "deno.land/x/deno_graph", - path: "/mod.ts", - protocol: "https:", - version: "0.50.0", - }, - map: { - key: "deno_graph", - resolved: "https://deno.land/x/deno_graph@0.50.0/mod.ts", - }, - to: { - name: "deno.land/x/deno_graph", - path: "/mod.ts", - protocol: "https:", - version: "123.456.789", - }, - }, - { - code: { - span: undefined, - specifier: "npm:node-emoji@2.0.0", - }, - from: { - name: "node-emoji", - path: "", - protocol: "npm:", - version: "2.0.0", - }, - map: { - key: "node-emoji", - resolved: "npm:node-emoji@2.0.0", - }, - to: { - name: "node-emoji", - path: "", - protocol: "npm:", - version: "123.456.789", - }, - }, - ], - kind: "import_map", - }, -] -`; - -snapshot[`write - import_map/deno.json 2`] = ` -[ - '{ - "imports": { - "std/": "https://deno.land/std@0.218.0/", - "deno_graph": "https://deno.land/x/deno_graph@123.456.789/mod.ts", - "node-emoji": "npm:node-emoji@123.456.789", - "flag": "jsr:@luca/flag@123.456.789", - "/": "./" - } -} -', -] -`; - -snapshot[`write - import_map/mod.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 36, - line: 3, - }, - start: { - character: 30, - line: 3, - }, - }, - specifier: "flag", - }, - from: { - name: "@luca/flag", - path: "", - protocol: "jsr:", - version: "1.0.0", - }, - map: { - key: "flag", - resolved: "jsr:@luca/flag@1.0.0", - }, - to: { - name: "@luca/flag", - path: "", - protocol: "jsr:", - version: "123.456.789", - }, - }, - { - code: { - span: { - end: { - character: 38, - line: 0, - }, - start: { - character: 23, - line: 0, - }, - }, - specifier: "std/assert.ts", - }, - from: { - name: "deno.land/std", - path: "/", - protocol: "https:", - version: "0.200.0", - }, - map: { - key: "std/", - resolved: "https://deno.land/std@0.200.0/assert.ts", - }, - to: { - name: "deno.land/std", - path: "/", - protocol: "https:", - version: "0.218.0", - }, - }, - { - code: { - span: { - end: { - character: 40, - line: 1, - }, - start: { - character: 28, - line: 1, - }, - }, - specifier: "deno_graph", - }, - from: { - name: "deno.land/x/deno_graph", - path: "/mod.ts", - protocol: "https:", - version: "0.50.0", - }, - map: { - key: "deno_graph", - resolved: "https://deno.land/x/deno_graph@0.50.0/mod.ts", - }, - to: { - name: "deno.land/x/deno_graph", - path: "/mod.ts", - protocol: "https:", - version: "123.456.789", - }, - }, - { - code: { - span: { - end: { - character: 36, - line: 2, - }, - start: { - character: 24, - line: 2, - }, - }, - specifier: "node-emoji", - }, - from: { - name: "node-emoji", - path: "", - protocol: "npm:", - version: "2.0.0", - }, - map: { - key: "node-emoji", - resolved: "npm:node-emoji@2.0.0", - }, - to: { - name: "node-emoji", - path: "", - protocol: "npm:", - version: "123.456.789", - }, - }, - ], - kind: "import_map", - }, -] -`; - -snapshot[`write - import_map/mod.ts 2`] = ` -[ - '{ - "imports": { - "std/": "https://deno.land/std@0.218.0/", - "deno_graph": "https://deno.land/x/deno_graph@123.456.789/mod.ts", - "node-emoji": "npm:node-emoji@123.456.789", - "flag": "jsr:@luca/flag@123.456.789", - "/": "./" - } -} -', -] -`; - -snapshot[`write - import_map_duplicated_imports/deno.json 1`] = ` -[ - { - dependencies: [ - { - code: { - span: undefined, - specifier: "jsr:@std/testing@0.210.0/bdd", - }, - from: { - name: "@std/testing", - path: "/bdd", - protocol: "jsr:", - version: "0.210.0", - }, - map: { - key: "@std/testing/bdd", - resolved: "jsr:@std/testing@0.210.0/bdd", - }, - to: { - name: "@std/testing", - path: "/bdd", - protocol: "jsr:", - version: "123.456.789", - }, - }, - ], - kind: "import_map", - }, -] -`; - -snapshot[`write - import_map_duplicated_imports/deno.json 2`] = ` -[ - '{ - "imports": { - "@std/testing": "jsr:@std/testing@^0.210.0", - "@std/testing/bdd": "jsr:@std/testing@123.456.789/bdd" - } -} -', -] -`; - -snapshot[`write - import_map_duplicated_imports/mod.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 43, - line: 0, - }, - start: { - character: 25, - line: 0, - }, - }, - specifier: "@std/testing/bdd", - }, - from: { - name: "@std/testing", - path: "/bdd", - protocol: "jsr:", - version: "0.210.0", - }, - map: { - key: "@std/testing/bdd", - resolved: "jsr:@std/testing@0.210.0/bdd", - }, - to: { - name: "@std/testing", - path: "/bdd", - protocol: "jsr:", - version: "123.456.789", - }, - }, - ], - kind: "import_map", - }, -] -`; - -snapshot[`write - import_map_duplicated_imports/mod.ts 2`] = ` -[ - '{ - "imports": { - "@std/testing": "jsr:@std/testing@^0.210.0", - "@std/testing/bdd": "jsr:@std/testing@123.456.789/bdd" - } -} -', -] -`; - -snapshot[`write - npm.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 40, - line: 0, - }, - start: { - character: 18, - line: 0, - }, - }, - specifier: "npm:node-emoji@2.0.0", - }, - from: { - name: "node-emoji", - path: "", - protocol: "npm:", - version: "2.0.0", - }, - map: undefined, - to: { - name: "node-emoji", - path: "", - protocol: "npm:", - version: "123.456.789", - }, - }, - ], - kind: "module", - }, -] -`; - -snapshot[`write - npm.ts 2`] = ` -[ - 'import emoji from "npm:node-emoji@123.456.789"; -import chalk from "npm:chalk@5"; -import express from "npm:express@^4.17"; -', -] -`; - -snapshot[`write - import_and_export.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 71, - line: 0, - }, - start: { - character: 23, - line: 0, - }, - }, - specifier: "https://deno.land/std@0.200.0/assert/assert.ts", - }, - from: { - name: "deno.land/std", - path: "/assert/assert.ts", - protocol: "https:", - version: "0.200.0", - }, - map: undefined, - to: { - name: "deno.land/std", - path: "/assert/assert.ts", - protocol: "https:", - version: "0.218.0", - }, - }, - { - code: { - span: { - end: { - character: 74, - line: 1, - }, - start: { - character: 28, - line: 1, - }, - }, - specifier: "https://deno.land/x/deno_graph@0.50.0/mod.ts", - }, - from: { - name: "deno.land/x/deno_graph", - path: "/mod.ts", - protocol: "https:", - version: "0.50.0", - }, - map: undefined, - to: { - name: "deno.land/x/deno_graph", - path: "/mod.ts", - protocol: "https:", - version: "123.456.789", - }, - }, - ], - kind: "module", - }, -] -`; - -snapshot[`write - import_and_export.ts 2`] = ` -[ - 'import { assert } from "https://deno.land/std@0.218.0/assert/assert.ts"; -export { createGraph } from "https://deno.land/x/deno_graph@123.456.789/mod.ts"; -', -] -`; - -snapshot[`write - import_map_no_resolve/deno.json 1`] = `[]`; - -snapshot[`write - import_map_no_resolve/deno.json 2`] = `[]`; - -snapshot[`write - import_map_no_resolve/mod.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 71, - line: 0, - }, - start: { - character: 23, - line: 0, - }, - }, - specifier: "https://deno.land/std@0.200.0/assert/assert.ts", - }, - from: { - name: "deno.land/std", - path: "/assert/assert.ts", - protocol: "https:", - version: "0.200.0", - }, - map: undefined, - to: { - name: "deno.land/std", - path: "/assert/assert.ts", - protocol: "https:", - version: "0.218.0", - }, - }, - ], - kind: "module", - }, -] -`; - -snapshot[`write - import_map_no_resolve/mod.ts 2`] = ` -[ - 'import { assert } from "https://deno.land/std@0.218.0/assert/assert.ts"; -', -] -`; - -snapshot[`write - relative_import/mod.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 71, - line: 0, - }, - start: { - character: 23, - line: 0, - }, - }, - specifier: "https://deno.land/std@0.200.0/assert/assert.ts", - }, - from: { - name: "deno.land/std", - path: "/assert/assert.ts", - protocol: "https:", - version: "0.200.0", - }, - map: undefined, - to: { - name: "deno.land/std", - path: "/assert/assert.ts", - protocol: "https:", - version: "0.218.0", - }, - }, - ], - kind: "module", - }, -] -`; - -snapshot[`write - relative_import/mod.ts 2`] = ` -[ - 'export { assert } from "https://deno.land/std@0.218.0/assert/assert.ts"; -', -] -`; - -snapshot[`write - lockfile/deno.json 1`] = ` -[ - { - dependencies: [ - { - code: { - span: undefined, - specifier: "https://deno.land/std@0.200.0/bytes/copy.ts", - }, - from: { - name: "deno.land/std", - path: "/bytes/copy.ts", - protocol: "https:", - version: "0.200.0", - }, - map: { - key: "std/bytes", - resolved: "https://deno.land/std@0.200.0/bytes/copy.ts", - }, - to: { - name: "deno.land/std", - path: "/bytes/copy.ts", - protocol: "https:", - version: "0.218.0", - }, - }, - ], - kind: "import_map", - }, - { - dependencies: [ - { - code: { - span: undefined, - specifier: "jsr:@core/match@0.1.x", - }, - from: { - name: "@core/match", - path: "", - protocol: "jsr:", - version: "0.1.0", - }, - map: undefined, - to: { - name: "@core/match", - path: "", - protocol: "jsr:", - version: "0.1.9", - }, - }, - { - code: { - span: undefined, - specifier: "https://deno.land/std@0.200.0/bytes/copy.ts", - }, - from: { - name: "deno.land/std", - path: "/bytes/copy.ts", - protocol: "https:", - version: "0.200.0", - }, - map: undefined, - to: { - name: "deno.land/std", - path: "/bytes/copy.ts", - protocol: "https:", - version: "0.218.0", - }, - }, - { - code: { - span: undefined, - specifier: "npm:hono@^3", - }, - from: { - name: "hono", - path: "", - protocol: "npm:", - version: "3.0.0", - }, - map: undefined, - to: { - name: "hono", - path: "", - protocol: "npm:", - version: "3.12.12", - }, - }, - ], - kind: "lockfile", - }, -] -`; - -snapshot[`write - lockfile/deno.json 2`] = ` -[ - '{ - "imports": { - "std/bytes": "https://deno.land/std@0.218.0/bytes/copy.ts", - "hono": "npm:hono@^3", - "@core/match": "jsr:@core/match@0.1.x" - } -} -', - '{ - "version": "3", - "packages": { - "specifiers": { - "jsr:@core/match@0.1.x": "jsr:@core/match@0.1.9", - "npm:hono@^3": "npm:hono@3.12.12", - "npm:ts-toolbelt@9.6.0": "npm:ts-toolbelt@9.6.0" - }, - "jsr": { - "@core/match@0.1.9": { - "integrity": "ceff06cf40212bb720925972a4405bef373efe768690b344ac4fd7ca7189f746", - "dependencies": [ - "npm:ts-toolbelt@9.6.0" - ] - } - }, - "npm": { - "hono@3.12.12": { - "integrity": "sha512-5IAMJOXfpA5nT+K0MNjClchzz0IhBHs2Szl7WFAhrFOsbtQsYmNynFyJRg/a3IPsmCfxcrf8txUGiNShXpK5Rg==", - "dependencies": {} - }, - "ts-toolbelt@9.6.0": { - "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", - "dependencies": {} - } - } - }, - "remote": { - "https://deno.land/std@0.218.0/bytes/copy.ts": "f29c03168853720dfe82eaa57793d0b9e3543ebfe5306684182f0f1e3bfd422a" - }, - "workspace": { - "dependencies": [ - "jsr:@core/match@0.1.x", - "npm:hono@^3" - ] - } -} -', -] -`; - -snapshot[`write - lockfile/mod.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 32, - line: 0, - }, - start: { - character: 21, - line: 0, - }, - }, - specifier: "std/bytes", - }, - from: { - name: "deno.land/std", - path: "/bytes/copy.ts", - protocol: "https:", - version: "0.200.0", - }, - map: { - key: "std/bytes", - resolved: "https://deno.land/std@0.200.0/bytes/copy.ts", - }, - to: { - name: "deno.land/std", - path: "/bytes/copy.ts", - protocol: "https:", - version: "0.218.0", - }, - }, - ], - kind: "import_map", - }, - { - dependencies: [ - { - code: { - span: undefined, - specifier: "jsr:@core/match@0.1.x", - }, - from: { - name: "@core/match", - path: "", - protocol: "jsr:", - version: "0.1.0", - }, - map: undefined, - to: { - name: "@core/match", - path: "", - protocol: "jsr:", - version: "0.1.9", - }, - }, - { - code: { - span: undefined, - specifier: "https://deno.land/std@0.200.0/bytes/copy.ts", - }, - from: { - name: "deno.land/std", - path: "/bytes/copy.ts", - protocol: "https:", - version: "0.200.0", - }, - map: undefined, - to: { - name: "deno.land/std", - path: "/bytes/copy.ts", - protocol: "https:", - version: "0.218.0", - }, - }, - { - code: { - span: undefined, - specifier: "npm:hono@^3", - }, - from: { - name: "hono", - path: "", - protocol: "npm:", - version: "3.0.0", - }, - map: undefined, - to: { - name: "hono", - path: "", - protocol: "npm:", - version: "3.12.12", - }, - }, - ], - kind: "lockfile", - }, -] -`; - -snapshot[`write - lockfile/mod.ts 2`] = ` -[ - '{ - "imports": { - "std/bytes": "https://deno.land/std@0.218.0/bytes/copy.ts", - "hono": "npm:hono@^3", - "@core/match": "jsr:@core/match@0.1.x" - } -} -', - '{ - "version": "3", - "packages": { - "specifiers": { - "jsr:@core/match@0.1.x": "jsr:@core/match@0.1.9", - "npm:hono@^3": "npm:hono@3.12.12", - "npm:ts-toolbelt@9.6.0": "npm:ts-toolbelt@9.6.0" - }, - "jsr": { - "@core/match@0.1.9": { - "integrity": "ceff06cf40212bb720925972a4405bef373efe768690b344ac4fd7ca7189f746", - "dependencies": [ - "npm:ts-toolbelt@9.6.0" - ] - } - }, - "npm": { - "hono@3.12.12": { - "integrity": "sha512-5IAMJOXfpA5nT+K0MNjClchzz0IhBHs2Szl7WFAhrFOsbtQsYmNynFyJRg/a3IPsmCfxcrf8txUGiNShXpK5Rg==", - "dependencies": {} - }, - "ts-toolbelt@9.6.0": { - "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", - "dependencies": {} - } - } - }, - "remote": { - "https://deno.land/std@0.218.0/bytes/copy.ts": "f29c03168853720dfe82eaa57793d0b9e3543ebfe5306684182f0f1e3bfd422a" - }, - "workspace": { - "dependencies": [ - "jsr:@core/match@0.1.x", - "npm:hono@^3" - ] - } -} -', -] -`; - -snapshot[`write - jsonc/deno.jsonc 1`] = ` -[ - { - dependencies: [ - { - code: { - span: undefined, - specifier: "jsr:@luca/flag@1.0.0", - }, - from: { - name: "@luca/flag", - path: "", - protocol: "jsr:", - version: "1.0.0", - }, - map: { - key: "flag", - resolved: "jsr:@luca/flag@1.0.0", - }, - to: { - name: "@luca/flag", - path: "", - protocol: "jsr:", - version: "123.456.789", - }, - }, - { - code: { - span: undefined, - specifier: "https://deno.land/std@0.200.0/", - }, - from: { - name: "deno.land/std", - path: "/", - protocol: "https:", - version: "0.200.0", - }, - map: { - key: "std/", - resolved: "https://deno.land/std@0.200.0/", - }, - to: { - name: "deno.land/std", - path: "/", - protocol: "https:", - version: "0.218.0", - }, - }, - { - code: { - span: undefined, - specifier: "https://deno.land/x/deno_graph@0.50.0/mod.ts", - }, - from: { - name: "deno.land/x/deno_graph", - path: "/mod.ts", - protocol: "https:", - version: "0.50.0", - }, - map: { - key: "deno_graph", - resolved: "https://deno.land/x/deno_graph@0.50.0/mod.ts", - }, - to: { - name: "deno.land/x/deno_graph", - path: "/mod.ts", - protocol: "https:", - version: "123.456.789", - }, - }, - { - code: { - span: undefined, - specifier: "npm:node-emoji@2.0.0", - }, - from: { - name: "node-emoji", - path: "", - protocol: "npm:", - version: "2.0.0", - }, - map: { - key: "node-emoji", - resolved: "npm:node-emoji@2.0.0", - }, - to: { - name: "node-emoji", - path: "", - protocol: "npm:", - version: "123.456.789", - }, - }, - ], - kind: "import_map", - }, -] -`; - -snapshot[`write - jsonc/deno.jsonc 2`] = ` -[ - '{ - "imports": { - "std/": "https://deno.land/std@0.218.0/", - "deno_graph": "https://deno.land/x/deno_graph@123.456.789/mod.ts", - "node-emoji": "npm:node-emoji@123.456.789", - "flag": "jsr:@luca/flag@123.456.789", - // map root to the project root - "/": "./" - } -} -', -] -`; - -snapshot[`write - updated_and_outdated.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 84, - line: 1, - }, - start: { - character: 29, - line: 1, - }, - }, - specifier: "https://deno.land/std@0.200.0/assert/assert_equals.ts", - }, - from: { - name: "deno.land/std", - path: "/assert/assert_equals.ts", - protocol: "https:", - version: "0.200.0", - }, - map: undefined, - to: { - name: "deno.land/std", - path: "/assert/assert_equals.ts", - protocol: "https:", - version: "0.218.0", - }, - }, - ], - kind: "module", - }, -] -`; - -snapshot[`write - updated_and_outdated.ts 2`] = ` -[ - 'import { assert } from "https://deno.land/std@0.218.0/assert/assert.ts"; -import { assertEquals } from "https://deno.land/std@0.218.0/assert/assert_equals.ts"; -', -] -`; - -snapshot[`write - multiple_modules/mod.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 84, - line: 0, - }, - start: { - character: 29, - line: 0, - }, - }, - specifier: "https://deno.land/std@0.200.0/assert/assert_equals.ts", - }, - from: { - name: "deno.land/std", - path: "/assert/assert_equals.ts", - protocol: "https:", - version: "0.200.0", - }, - map: undefined, - to: { - name: "deno.land/std", - path: "/assert/assert_equals.ts", - protocol: "https:", - version: "0.218.0", - }, - }, - ], - kind: "module", - }, - { - dependencies: [ - { - code: { - span: { - end: { - character: 71, - line: 0, - }, - start: { - character: 23, - line: 0, - }, - }, - specifier: "https://deno.land/std@0.200.0/assert/assert.ts", - }, - from: { - name: "deno.land/std", - path: "/assert/assert.ts", - protocol: "https:", - version: "0.200.0", - }, - map: undefined, - to: { - name: "deno.land/std", - path: "/assert/assert.ts", - protocol: "https:", - version: "0.218.0", - }, - }, - { - code: { - span: { - end: { - character: 74, - line: 1, - }, - start: { - character: 28, - line: 1, - }, - }, - specifier: "https://deno.land/x/deno_graph@0.50.0/mod.ts", - }, - from: { - name: "deno.land/x/deno_graph", - path: "/mod.ts", - protocol: "https:", - version: "0.50.0", - }, - map: undefined, - to: { - name: "deno.land/x/deno_graph", - path: "/mod.ts", - protocol: "https:", - version: "123.456.789", - }, - }, - { - code: { - span: { - end: { - character: 40, - line: 2, - }, - start: { - character: 18, - line: 2, - }, - }, - specifier: "npm:node-emoji@2.0.0", - }, - from: { - name: "node-emoji", - path: "", - protocol: "npm:", - version: "2.0.0", - }, - map: undefined, - to: { - name: "node-emoji", - path: "", - protocol: "npm:", - version: "123.456.789", - }, - }, - ], - kind: "module", - }, -] -`; - -snapshot[`write - multiple_modules/mod.ts 2`] = ` -[ - 'import { assertEquals } from "https://deno.land/std@0.218.0/assert/assert_equals.ts"; -export const noop = () => {}; -', - 'import { assert } from "https://deno.land/std@0.218.0/assert/assert.ts"; -import { createGraph } from "https://deno.land/x/deno_graph@123.456.789/mod.ts"; -import emoji from "npm:node-emoji@123.456.789"; -import { noop } from "./lib.ts"; -', -] -`; - -snapshot[`write - import.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 71, - line: 0, - }, - start: { - character: 23, - line: 0, - }, - }, - specifier: "https://deno.land/std@0.200.0/assert/assert.ts", - }, - from: { - name: "deno.land/std", - path: "/assert/assert.ts", - protocol: "https:", - version: "0.200.0", - }, - map: undefined, - to: { - name: "deno.land/std", - path: "/assert/assert.ts", - protocol: "https:", - version: "0.218.0", - }, - }, - ], - kind: "module", - }, -] -`; - -snapshot[`write - import.ts 2`] = ` -[ - 'import { assert } from "https://deno.land/std@0.218.0/assert/assert.ts"; -', -] -`; - -snapshot[`write - unversioned.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 63, - line: 0, - }, - start: { - character: 23, - line: 0, - }, - }, - specifier: "https://deno.land/std/assert/assert.ts", - }, - from: { - name: "deno.land/std", - path: "/assert/assert.ts", - protocol: "https:", - version: undefined, - }, - map: undefined, - to: { - name: "deno.land/std", - path: "/assert/assert.ts", - protocol: "https:", - version: "0.218.0", - }, - }, - ], - kind: "module", - }, -] -`; - -snapshot[`write - unversioned.ts 2`] = ` -[ - 'import { assert } from "https://deno.land/std@0.218.0/assert/assert.ts"; -', -] -`; - -snapshot[`write - jsr.ts 1`] = ` -[ - { - dependencies: [ - { - code: { - span: { - end: { - character: 48, - line: 0, - }, - start: { - character: 23, - line: 0, - }, - }, - specifier: "jsr:@std/assert@0.210.0", - }, - from: { - name: "@std/assert", - path: "", - protocol: "jsr:", - version: "0.210.0", - }, - map: undefined, - to: { - name: "@std/assert", - path: "", - protocol: "jsr:", - version: "123.456.789", - }, - }, - ], - kind: "module", - }, -] -`; - -snapshot[`write - jsr.ts 2`] = ` -[ - 'import { assert } from "jsr:@std/assert@123.456.789"; -import { parse } from "jsr:@std/semver@^0.210.0"; -', -] -`;