diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6f9e6b8c47..a6b7f654c3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -48,7 +48,7 @@ jobs: - uses: oxc-project/setup-node@fdbf0dfd334c4e6d56ceeb77d91c76339c2a0885 # v1.0.4 - name: Set binding version - run: pnpm exec replace-file-content packages/cli/binding/Cargo.toml 'version = "0.0.0"' 'version = "0.0.0-${{ github.sha }}"' + run: pnpm exec tool replace-file-content packages/cli/binding/Cargo.toml 'version = "0.0.0"' 'version = "0.0.0-${{ github.sha }}"' - name: Build if: ${{ matrix.settings.target == 'x86_64-unknown-linux-gnu' }} diff --git a/packages/cli/package.json b/packages/cli/package.json index 0805551fc6..5cf6b9cc83 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -27,7 +27,7 @@ }, "scripts": { "build": "oxnode ./build.ts", - "snap-test": "snap-test" + "snap-test": "tool snap-test" }, "files": [ "bin", diff --git a/packages/global/package.json b/packages/global/package.json index a699bbd63a..5c0d90c65a 100644 --- a/packages/global/package.json +++ b/packages/global/package.json @@ -19,7 +19,7 @@ ], "scripts": { "build": "rolldown -c rolldown.config.ts", - "snap-test": "snap-test" + "snap-test": "tool snap-test" }, "dependencies": { "@voidzero-dev/vite-plus": "workspace:*", diff --git a/packages/tools/package.json b/packages/tools/package.json index 239832a3eb..370470bbf6 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -3,14 +3,13 @@ "private": true, "type": "module", "bin": { - "json-edit": "./src/json-edit.ts", - "snap-test": "./src/snap-test.ts", - "replace-file-content": "./src/replace-file-content.ts" + "tool": "./src/bin.js", + "json-edit": "./src/json-edit.ts" }, "devDependencies": { "minimatch": "catalog:" }, "scripts": { - "snap-test": "snap-test" + "snap-test": "tool snap-test" } } diff --git a/packages/tools/snap-tests/replace-file-content/snap.txt b/packages/tools/snap-tests/replace-file-content/snap.txt index b9be74f7f4..7575397ed7 100644 --- a/packages/tools/snap-tests/replace-file-content/snap.txt +++ b/packages/tools/snap-tests/replace-file-content/snap.txt @@ -14,7 +14,7 @@ crossterm = { workspace = true } napi = { workspace = true } napi-derive = { workspace = true } -> replace-file-content foo/example.toml 'version = "0.0.0"' 'version = "1.0.0"' && cat foo/example.toml # should edit toml file +> tool replace-file-content foo/example.toml 'version = "0.0.0"' 'version = "1.0.0"' && cat foo/example.toml # should edit toml file [package] name = "foo" version = "1.0.0" diff --git a/packages/tools/snap-tests/replace-file-content/steps.json b/packages/tools/snap-tests/replace-file-content/steps.json index fc01ad96e6..86118b01b7 100644 --- a/packages/tools/snap-tests/replace-file-content/steps.json +++ b/packages/tools/snap-tests/replace-file-content/steps.json @@ -3,6 +3,6 @@ }, "commands": [ "cat foo/example.toml # should show original toml file", - "replace-file-content foo/example.toml 'version = \"0.0.0\"' 'version = \"1.0.0\"' && cat foo/example.toml # should edit toml file" + "tool replace-file-content foo/example.toml 'version = \"0.0.0\"' 'version = \"1.0.0\"' && cat foo/example.toml # should edit toml file" ] } diff --git a/packages/tools/src/__tests__/utils.spec.ts b/packages/tools/src/__tests__/utils.spec.ts index 6fb60ce339..db3270efc5 100644 --- a/packages/tools/src/__tests__/utils.spec.ts +++ b/packages/tools/src/__tests__/utils.spec.ts @@ -2,7 +2,7 @@ import { tmpdir } from 'node:os'; import { describe, expect, test } from '@voidzero-dev/vite-plus/test'; -import { isPassThroughEnv, replaceUnstableOutput } from '../utils.ts'; +import { isPassThroughEnv, replaceUnstableOutput } from '../utils'; describe('replaceUnstableOutput()', () => { test('replace unstable semver version', () => { diff --git a/packages/tools/src/bin.js b/packages/tools/src/bin.js new file mode 100755 index 0000000000..1ab2daa9a8 --- /dev/null +++ b/packages/tools/src/bin.js @@ -0,0 +1,4 @@ +import '@oxc-node/core/register'; + +// defer the import to avoid the register hook is not being called +await import('./index.ts'); diff --git a/packages/tools/src/index.ts b/packages/tools/src/index.ts new file mode 100644 index 0000000000..796315ee8f --- /dev/null +++ b/packages/tools/src/index.ts @@ -0,0 +1,17 @@ +import { replaceFileContent } from './replace-file-content'; +import { snapTest } from './snap-test'; + +const subcommand = process.argv[2]; + +switch (subcommand) { + case 'snap-test': + await snapTest(); + break; + case 'replace-file-content': + replaceFileContent(); + break; + default: + console.error(`Unknown subcommand: ${subcommand}`); + console.error('Available subcommands: snap-test, replace-file-content'); + process.exit(1); +} diff --git a/packages/tools/src/json-edit.ts b/packages/tools/src/json-edit.ts index 0fb099c53d..d9593f21a5 100755 --- a/packages/tools/src/json-edit.ts +++ b/packages/tools/src/json-edit.ts @@ -1,9 +1,14 @@ #!/usr/bin/env node import { readFileSync, writeFileSync } from 'node:fs'; +import { parseArgs } from 'node:util'; -const filename = process.argv[2]; -const script = process.argv[3]; +const { positionals } = parseArgs({ + allowPositionals: true, +}); + +const filename = positionals[0]; +const script = positionals[1]; if (!filename || !script) { console.error('Usage: json-edit