From 14ad219ccf4b75e1c271bb2944151a4f9e54a09a Mon Sep 17 00:00:00 2001 From: bluwy Date: Tue, 12 May 2026 10:25:17 +0800 Subject: [PATCH 1/3] Add e2e tests --- .github/workflows/ci.yml | 3 + pnpm-lock.yaml | 229 ++++++++++++++++++++++ pnpm-workspace.yaml | 6 + tests/__snapshots__/fixtures.test.ts.snap | 26 +++ tests/fixtures.test.ts | 50 +++++ tests/fixtures/biome/package.json | 8 + tests/fixtures/deno/deno.json | 3 + tests/fixtures/dprint/dprint.json | 5 + tests/fixtures/dprint/package.json | 8 + tests/fixtures/oxfmt/package.json | 8 + tests/fixtures/prettier/package.json | 8 + tests/format.test.ts | 16 +- 12 files changed, 361 insertions(+), 9 deletions(-) create mode 100644 tests/__snapshots__/fixtures.test.ts.snap create mode 100644 tests/fixtures.test.ts create mode 100644 tests/fixtures/biome/package.json create mode 100644 tests/fixtures/deno/deno.json create mode 100644 tests/fixtures/dprint/dprint.json create mode 100644 tests/fixtures/dprint/package.json create mode 100644 tests/fixtures/oxfmt/package.json create mode 100644 tests/fixtures/prettier/package.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4fb1c46..7d7787f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,6 +11,9 @@ jobs: name: Test runs-on: ubuntu-latest timeout-minutes: 10 + env: + # Save dprint plugins cache to node_nodules in CI for simpler caching + DPRINT_CACHE_DIR: ${{ github.workspace }}/node_modules/.dprint-cache steps: - name: Check out repo uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 61ce4be..55c6171 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,6 +41,30 @@ importers: specifier: ^4.1.5 version: 4.1.5(@types/node@25.6.2)(vite@8.0.10) + tests/fixtures/biome: + devDependencies: + '@biomejs/biome': + specifier: ^2.4.15 + version: 2.4.15 + + tests/fixtures/dprint: + devDependencies: + dprint: + specifier: ^0.54.0 + version: 0.54.0 + + tests/fixtures/oxfmt: + devDependencies: + oxfmt: + specifier: ^0.48.0 + version: 0.48.0 + + tests/fixtures/prettier: + devDependencies: + prettier: + specifier: ^3.8.3 + version: 3.8.3 + packages: '@babel/generator@8.0.0-rc.4': @@ -77,6 +101,63 @@ packages: resolution: {integrity: sha512-bw30DV880P/VYtsjWWdoWmJpb9S2Vn1/PqayyccTELzRQ/HslIO7+BD9rNoZ4AAFOAjC1vrNeBCkAsyh6Ibfww==} engines: {node: ^20.19.0 || >=22.12.0} + '@biomejs/biome@2.4.15': + resolution: {integrity: sha512-j5VH3a/h/HXTKBM50MDMxRCzkeLv9S2XJcW2WgnZT1+xyisi+0bISrXR82gCX+8S9lvK0skEvHJRN+3Ktr2hlw==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@2.4.15': + resolution: {integrity: sha512-rF3PPqLq1yoST79zaQbDjVJwsuIeci/O+9bgNmC5QpgOqz6aqYuzA4abyAGx+mgyiDXn4A049xAN8gijbuR1Qg==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@2.4.15': + resolution: {integrity: sha512-/5KHXYMfSJs1fNXiX30xFtI8JcCFV6zaVVLxOa0M2sfqBKHkpQhRTv94yxQWxeTY2lzo2OuTlNvPC+hDQt2wcQ==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@2.4.15': + resolution: {integrity: sha512-ZPcxznxm0pogHBLZhYntyR3sR+MrZjqJIKEr7ZqVen0Rl+P/4upVmfYXjftizi9RoqZntg33fv/1fbdhbYXpEQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@biomejs/cli-linux-arm64@2.4.15': + resolution: {integrity: sha512-owaAMZD/T4LrD0ELNCk0Km3qrRHuM0X6EAyVE1FSqGY0rbLoiDLrO4Us2tllm6cAeB2Ioa9C2C08NZPdr8+0Ug==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@biomejs/cli-linux-x64-musl@2.4.15': + resolution: {integrity: sha512-CNq/9W38SYSH023lfcQ4KKU8K0YX8T//FZUhcgtMMRABDojx5XsMV7jlweAvGSl389wJQB29Qo6Zb/a+jdvt+w==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + libc: [musl] + + '@biomejs/cli-linux-x64@2.4.15': + resolution: {integrity: sha512-0jj7THz12GbUOLmMibktK6DZjqz2zV64KFxyBtcFTKPiiOIY0a7vns1elpO1dERvxpsZ5ik0oFfz0oGwFde1+g==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@biomejs/cli-win32-arm64@2.4.15': + resolution: {integrity: sha512-ouhkYdlhp/1GghEJPdWwD/Vi3gQ1nFxuSpMolWsbq3Lsq3QUR4jl6UdhhscdCugKU5vOEuMiJhvKj66O0OCq+w==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@2.4.15': + resolution: {integrity: sha512-zBrGq5mx5wwpnow4+2BxUvleDM+GNd4sLbPaMapsSLQLD0NGRCquqPBTgN+7XkUteHvj7M+BstuI8tmnV7+HgQ==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + '@changesets/apply-release-plan@8.0.0-next.3': resolution: {integrity: sha512-I0HxSn5MNtOwhgikPLSx6Q1RF9yx3GnwHFPkZ68BlKygeqw4LGWBMevaPG4rSL66hIRBrLkBaj2akLJXDAEUOw==} engines: {node: ^22.11 || ^24 || >=26} @@ -154,6 +235,68 @@ packages: resolution: {integrity: sha512-M+eZ1eGmlXBcWifuhGd3M2uFGlR/aZPlIS/d80T3DQGB1pVUPByC4gmNAKi0M8VdieU3GRJLmdQp5SK+WuR59Q==} engines: {node: ^22.11 || ^24 || >=26} + '@dprint/darwin-arm64@0.54.0': + resolution: {integrity: sha512-yqRI4enH+BDp+4+ZsPVdZM5h873JK1lN7li9l9A5u4C4cvh1oEsiBWAzEPccRkJ2ctF8LgaizBSxO38sqEVYbw==} + cpu: [arm64] + os: [darwin] + + '@dprint/darwin-x64@0.54.0': + resolution: {integrity: sha512-W9BARpgHypcQwatg5mnHaCpX6pLX5dBxxiv+tZKruhOmq8MKYOrAYDXlceMuHSowmWREfUF5yL4SRgXDGI6WQw==} + cpu: [x64] + os: [darwin] + + '@dprint/linux-arm64-glibc@0.54.0': + resolution: {integrity: sha512-VhM7p70VFuNqxZMdiv1e+nMboPj/hMFlTIBWrRaX7+6VThs9mJr9+94wrUeXgfnfsyaEKSbRFa/dru1PINoSNw==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@dprint/linux-arm64-musl@0.54.0': + resolution: {integrity: sha512-QS1A74Lv60/L9oemHCzbHgOLbV2smSJG5IxS5fjf8ZWetyUt918WDzIHBilz/+uiB+OlW2UVTsm952UG0YOrLw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@dprint/linux-loong64-glibc@0.54.0': + resolution: {integrity: sha512-8Myka2/0KbhuZnEKL6jagPXTgDKVpd/tfXDRa0oibUBgaqOSku6iRMzHGa/PhqHL+s14Gcp+/cIHz0zU3Tkgug==} + cpu: [loong64] + os: [linux] + libc: [glibc] + + '@dprint/linux-loong64-musl@0.54.0': + resolution: {integrity: sha512-/AN3xCuMhC4PK7Pbj7/4zBuhFGr4m0OHV/5uGTfzpkKX/3+AXoyKl7PbT2VlNMGXAK0kuRThfjtx23gIwlWk7Q==} + cpu: [loong64] + os: [linux] + libc: [musl] + + '@dprint/linux-riscv64-glibc@0.54.0': + resolution: {integrity: sha512-Aw2vXzzwFDpPbXh6ajsSabVCkCc66C3hCyMKprR/IxYvFtjYX80nh1ox0c7iaw6c4HacHMRLGw7FUSXvomPaEQ==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@dprint/linux-x64-glibc@0.54.0': + resolution: {integrity: sha512-zZqj3wQELOX8n6QfT2uuWoMf64Wv0lMXNyam3btm+PKkg0P6a54TPL09Bs9XsViOdxgTcamsiQ7HlErt/LEjIA==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@dprint/linux-x64-musl@0.54.0': + resolution: {integrity: sha512-it6Qdt06dyW2adbAXpOCb7/KQLxlm4i1UphUAWqWsZk4t3EYetyAza9J0g3Vu9itIWSEIo9MnccgANckQJ6+qw==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@dprint/win32-arm64@0.54.0': + resolution: {integrity: sha512-F5kjV/6I9YtNOTDWHUpTqM2HHHS510BPL7z4NJuU0nDnaVeks7GwNEltGr56CcsG8XQYhkiAsqZytPu6AhA2hQ==} + cpu: [arm64] + os: [win32] + + '@dprint/win32-x64@0.54.0': + resolution: {integrity: sha512-AAr2ye/DtgYXDplRoPS+5U++x7T6W4a3I9FvTFWFxziFmUptvAg5G2c4FcXoAduSruhYZJvjDZrLseR2c3IwXg==} + cpu: [x64] + os: [win32] + '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} @@ -533,6 +676,10 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} + dprint@0.54.0: + resolution: {integrity: sha512-sIy25poR2gRP/tWPTgP0MPeJoJcpv0xzYDcsboapvthbEt1Qw3Al252CA0xFyIh2cYEGGKyBJtKokryv4ERlJw==} + hasBin: true + dts-resolver@3.0.0: resolution: {integrity: sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==} engines: {node: ^22.18.0 || >=24.0.0} @@ -978,6 +1125,41 @@ snapshots: '@babel/helper-string-parser': 8.0.0-rc.4 '@babel/helper-validator-identifier': 8.0.0-rc.4 + '@biomejs/biome@2.4.15': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 2.4.15 + '@biomejs/cli-darwin-x64': 2.4.15 + '@biomejs/cli-linux-arm64': 2.4.15 + '@biomejs/cli-linux-arm64-musl': 2.4.15 + '@biomejs/cli-linux-x64': 2.4.15 + '@biomejs/cli-linux-x64-musl': 2.4.15 + '@biomejs/cli-win32-arm64': 2.4.15 + '@biomejs/cli-win32-x64': 2.4.15 + + '@biomejs/cli-darwin-arm64@2.4.15': + optional: true + + '@biomejs/cli-darwin-x64@2.4.15': + optional: true + + '@biomejs/cli-linux-arm64-musl@2.4.15': + optional: true + + '@biomejs/cli-linux-arm64@2.4.15': + optional: true + + '@biomejs/cli-linux-x64-musl@2.4.15': + optional: true + + '@biomejs/cli-linux-x64@2.4.15': + optional: true + + '@biomejs/cli-win32-arm64@2.4.15': + optional: true + + '@biomejs/cli-win32-x64@2.4.15': + optional: true + '@changesets/apply-release-plan@8.0.0-next.3': dependencies: '@changesets/config': 4.0.0-next.3 @@ -1111,6 +1293,39 @@ snapshots: human-id: 4.1.3 prettier: 3.8.3 + '@dprint/darwin-arm64@0.54.0': + optional: true + + '@dprint/darwin-x64@0.54.0': + optional: true + + '@dprint/linux-arm64-glibc@0.54.0': + optional: true + + '@dprint/linux-arm64-musl@0.54.0': + optional: true + + '@dprint/linux-loong64-glibc@0.54.0': + optional: true + + '@dprint/linux-loong64-musl@0.54.0': + optional: true + + '@dprint/linux-riscv64-glibc@0.54.0': + optional: true + + '@dprint/linux-x64-glibc@0.54.0': + optional: true + + '@dprint/linux-x64-musl@0.54.0': + optional: true + + '@dprint/win32-arm64@0.54.0': + optional: true + + '@dprint/win32-x64@0.54.0': + optional: true + '@emnapi/core@1.10.0': dependencies: '@emnapi/wasi-threads': 1.2.1 @@ -1381,6 +1596,20 @@ snapshots: detect-libc@2.1.2: {} + dprint@0.54.0: + optionalDependencies: + '@dprint/darwin-arm64': 0.54.0 + '@dprint/darwin-x64': 0.54.0 + '@dprint/linux-arm64-glibc': 0.54.0 + '@dprint/linux-arm64-musl': 0.54.0 + '@dprint/linux-loong64-glibc': 0.54.0 + '@dprint/linux-loong64-musl': 0.54.0 + '@dprint/linux-riscv64-glibc': 0.54.0 + '@dprint/linux-x64-glibc': 0.54.0 + '@dprint/linux-x64-musl': 0.54.0 + '@dprint/win32-arm64': 0.54.0 + '@dprint/win32-x64': 0.54.0 + dts-resolver@3.0.0: {} empathic@2.0.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 2499fbb..9327b13 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,9 @@ +packages: + - "tests/fixtures/*" + +allowBuilds: + dprint: true + dedupePeers: true overrides: diff --git a/tests/__snapshots__/fixtures.test.ts.snap b/tests/__snapshots__/fixtures.test.ts.snap new file mode 100644 index 0000000..88ba4db --- /dev/null +++ b/tests/__snapshots__/fixtures.test.ts.snap @@ -0,0 +1,26 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`detect and format biome fixture 1`] = ` +"let x = 1; +" +`; + +exports[`detect and format deno fixture 1`] = ` +"let x = 1; +" +`; + +exports[`detect and format dprint fixture 1`] = ` +"let x = 1; +" +`; + +exports[`detect and format oxfmt fixture 1`] = ` +"let x = 1; +" +`; + +exports[`detect and format prettier fixture 1`] = ` +"let x = 1; +" +`; diff --git a/tests/fixtures.test.ts b/tests/fixtures.test.ts new file mode 100644 index 0000000..6a92c38 --- /dev/null +++ b/tests/fixtures.test.ts @@ -0,0 +1,50 @@ +import cp from "node:child_process"; +import dns from "node:dns/promises"; +import path from "node:path"; +import { createFixture } from "fs-fixture"; +import { expect, test } from "vitest"; +import { detect, format, type FormatterName } from "../src/index.ts"; + +function canRunDeno() { + return new Promise((resolve) => { + const proc = cp.spawn("deno", ["--version"]); + proc.on("error", () => resolve(false)); + proc.on("exit", (code) => resolve(code === 0)); + }); +} + +// dprint requires an internet connection to download plugins (on the first run) +async function canRunDprint() { + try { + await dns.lookup("plugins.dprint.dev"); + return true; + } catch { + return false; + } +} + +const cases: FormatterName[] = ["biome", "deno", "dprint", "oxfmt", "prettier"]; + +test.for(cases)("detect and format %s fixture", async (name, ctx) => { + // Optionally skip some tests locally if the formatter isn't properly installed, + // but always run in CI + if (!process.env.CI) { + if (name === "deno" && !(await canRunDeno())) { + ctx.skip("deno is not installed"); + } + if (name === "dprint" && !(await canRunDprint())) { + ctx.skip("no internet connection for dprint plugin download"); + } + } + + const fixtureTemplateDir = path.join(import.meta.dirname, "fixtures", name); + await using fixture = await createFixture(fixtureTemplateDir); + await fixture.writeFile("file.ts", "let x=1;"); + + const detectResult = await detect({ cwd: fixture.path }); + expect(detectResult).toBe(name); + + const formatResult = await format(["file.ts"], { cwd: fixture.path, formatter: name }); + expect(formatResult).toBe(true); + expect(await fixture.readFile("file.ts", "utf-8")).toMatchSnapshot(); +}); diff --git a/tests/fixtures/biome/package.json b/tests/fixtures/biome/package.json new file mode 100644 index 0000000..a8611e5 --- /dev/null +++ b/tests/fixtures/biome/package.json @@ -0,0 +1,8 @@ +{ + "name": "@changesets/test-fixture-biome", + "version": "0.0.1", + "private": true, + "devDependencies": { + "@biomejs/biome": "^2.4.15" + } +} diff --git a/tests/fixtures/deno/deno.json b/tests/fixtures/deno/deno.json new file mode 100644 index 0000000..cc3c517 --- /dev/null +++ b/tests/fixtures/deno/deno.json @@ -0,0 +1,3 @@ +{ + "fmt": {} +} diff --git a/tests/fixtures/dprint/dprint.json b/tests/fixtures/dprint/dprint.json new file mode 100644 index 0000000..64e4462 --- /dev/null +++ b/tests/fixtures/dprint/dprint.json @@ -0,0 +1,5 @@ +{ + "typescript": {}, + "excludes": ["**/node_modules"], + "plugins": ["https://plugins.dprint.dev/typescript-0.96.0.wasm"] +} diff --git a/tests/fixtures/dprint/package.json b/tests/fixtures/dprint/package.json new file mode 100644 index 0000000..7b84b90 --- /dev/null +++ b/tests/fixtures/dprint/package.json @@ -0,0 +1,8 @@ +{ + "name": "@changesets/test-fixture-dprint", + "version": "0.0.1", + "private": true, + "devDependencies": { + "dprint": "^0.54.0" + } +} diff --git a/tests/fixtures/oxfmt/package.json b/tests/fixtures/oxfmt/package.json new file mode 100644 index 0000000..a91c441 --- /dev/null +++ b/tests/fixtures/oxfmt/package.json @@ -0,0 +1,8 @@ +{ + "name": "@changesets/test-fixture-oxfmt", + "version": "0.0.1", + "private": true, + "devDependencies": { + "oxfmt": "^0.48.0" + } +} diff --git a/tests/fixtures/prettier/package.json b/tests/fixtures/prettier/package.json new file mode 100644 index 0000000..26e2693 --- /dev/null +++ b/tests/fixtures/prettier/package.json @@ -0,0 +1,8 @@ +{ + "name": "@changesets/test-fixture-prettier", + "version": "0.0.1", + "private": true, + "devDependencies": { + "prettier": "^3.8.3" + } +} diff --git a/tests/format.test.ts b/tests/format.test.ts index 7ecfb8e..25c60da 100644 --- a/tests/format.test.ts +++ b/tests/format.test.ts @@ -37,12 +37,10 @@ const cases: { formatter: FormatterName; expectedCommand: string[] }[] = [ { formatter: "dprint", expectedCommand: ["npx", "dprint", "fmt", "file.ts"] }, ]; -for (const c of cases) { - test(`executes the correct command for ${c.formatter}`, async () => { - await using fixture = await createFixture({}); - const result = await format(["file.ts"], { cwd: fixture.path, formatter: c.formatter }); - expect(result).toBe(true); - const [command, ...args] = c.expectedCommand; - expect(mocks.spawn).toHaveBeenCalledWith(command, args, { cwd: fixture.path }); - }); -} +test.for(cases)("executes the correct command for $formatter", async (c) => { + await using fixture = await createFixture(); + const result = await format(["file.ts"], { cwd: fixture.path, formatter: c.formatter }); + expect(result).toBe(true); + const [command, ...args] = c.expectedCommand; + expect(mocks.spawn).toHaveBeenCalledWith(command, args, { cwd: fixture.path }); +}); From 4fe71ae7b24060dcf2037c3b3ab47d2b9636e6a3 Mon Sep 17 00:00:00 2001 From: bluwy Date: Tue, 12 May 2026 10:26:35 +0800 Subject: [PATCH 2/3] Update dependencies --- package.json | 2 +- pnpm-lock.yaml | 26 +------------------------- 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index f7993d7..4c3a787 100644 --- a/package.json +++ b/package.json @@ -30,5 +30,5 @@ "typescript": "~6.0.3", "vitest": "^4.1.5" }, - "packageManager": "pnpm@11.0.8" + "packageManager": "pnpm@11.1.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 55c6171..982ce10 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -75,28 +75,15 @@ packages: resolution: {integrity: sha512-dluR3v287dp6YPF57kyKKrHPKffUeuxH1zQcF1WD30TeFzWXhDiVi1U6PkqaDB0++H1PeCwRhmYl4DvoerlPIw==} engines: {node: ^20.19.0 || >=22.12.0} - '@babel/helper-validator-identifier@8.0.0-rc.3': - resolution: {integrity: sha512-8AWCJ2VJJyDFlGBep5GpaaQ9AAaE/FjAcrqI7jyssYhtL7WGV0DOKpJsQqM037xDbpRLHXsY8TwU7zDma7coOw==} - engines: {node: ^20.19.0 || >=22.12.0} - '@babel/helper-validator-identifier@8.0.0-rc.4': resolution: {integrity: sha512-HTD3bskipk5MSm08twTW6832jzIXUhxMddy4NPPzIMuyMEsrs0ZgwAaMj5ubB5+6hMlUjDu17vNconEmwsmpYg==} engines: {node: ^20.19.0 || >=22.12.0} - '@babel/parser@8.0.0-rc.3': - resolution: {integrity: sha512-B20dvP3MfNc/XS5KKCHy/oyWl5IA6Cn9YjXRdDlCjNmUFrjvLXMNUfQq/QUy9fnG2gYkKKcrto2YaF9B32ToOQ==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - '@babel/parser@8.0.0-rc.4': resolution: {integrity: sha512-0S/1yefMa15N4i2v3t8Fw9pgMHhf2gF6Lc1UEXI96Ls6FNAjqvHHZouZ2ZS/deqLhbMFtmfVeFac6iTsvFbLwA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - '@babel/types@8.0.0-rc.3': - resolution: {integrity: sha512-mOm5ZrYmphGfqVWoH5YYMTITb3cDXsFgmvFlvkvWDMsR9X8RFnt7a0Wb6yNIdoFsiMO9WjYLq+U/FMtqIYAF8Q==} - engines: {node: ^20.19.0 || >=22.12.0} - '@babel/types@8.0.0-rc.4': resolution: {integrity: sha512-bw30DV880P/VYtsjWWdoWmJpb9S2Vn1/PqayyccTELzRQ/HslIO7+BD9rNoZ4AAFOAjC1vrNeBCkAsyh6Ibfww==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1103,23 +1090,12 @@ snapshots: '@babel/helper-string-parser@8.0.0-rc.4': {} - '@babel/helper-validator-identifier@8.0.0-rc.3': {} - '@babel/helper-validator-identifier@8.0.0-rc.4': {} - '@babel/parser@8.0.0-rc.3': - dependencies: - '@babel/types': 8.0.0-rc.3 - '@babel/parser@8.0.0-rc.4': dependencies: '@babel/types': 8.0.0-rc.4 - '@babel/types@8.0.0-rc.3': - dependencies: - '@babel/helper-string-parser': 8.0.0-rc.4 - '@babel/helper-validator-identifier': 8.0.0-rc.3 - '@babel/types@8.0.0-rc.4': dependencies: '@babel/helper-string-parser': 8.0.0-rc.4 @@ -1574,7 +1550,7 @@ snapshots: ast-kit@3.0.0-beta.1: dependencies: - '@babel/parser': 8.0.0-rc.3 + '@babel/parser': 8.0.0-rc.4 estree-walker: 3.0.3 pathe: 2.0.3 From 340db69d873e52fb983ac8eaee24eeb7ba23113a Mon Sep 17 00:00:00 2001 From: bluwy Date: Tue, 12 May 2026 10:30:48 +0800 Subject: [PATCH 3/3] Setup Deno in CI --- .github/workflows/ci.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7d7787f..939b7cd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,6 +27,11 @@ jobs: node-version: 24 cache: pnpm + - name: Set up Deno + uses: denoland/setup-deno@667a34cdef165d8d2b2e98dde39547c9daac7282 # v2.0.4 + with: + deno-version: 2.x + - name: Install dependencies run: pnpm install