From 2404590deae6827abd5d6967c4f0051ef5585f26 Mon Sep 17 00:00:00 2001 From: Seiya KONNO Date: Sun, 6 Sep 2026 15:55:06 +0900 Subject: [PATCH 1/2] chore: run TypeScript scripts with node instead of tsx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Node 26 (this repo's engines.node floor) makes type stripping stable and default, so every script/CLI entry that used to run through tsx --tsconfig now runs as `node .ts` directly, and tsx is dropped from devDependencies. Fixes required to make that work under Node's stricter, bundler-free resolution: - Root-level scripts (bench/*, release/*, build-sea) import workspace packages by bare specifier (`@be-music/json`, etc.); tsx resolved these via tsconfig paths, but node needs an actual node_modules link, so the root package.json now depends on every @be-music/* workspace package. - Node's type stripping rejects parameter properties as non-erasable syntax (ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX). Rewrote the 9 constructors that used them (RulesetGauge, LuaRuntimeOwner, and 7 player-web view classes) as plain field declarations + assignment; generated .d.ts constructor signatures are unchanged. - fengari-web ships a webpack UMD bundle whose module.exports is built at runtime, so Node's static cjs-module-lexer can't discover its named exports the way tsx's esbuild-based loader did. Switched lua.ts to a default import and updated the hand-written .d.ts to match. - audio-renderer's package.json advertised a `./triggers` subpath export that tsdown.config.ts never actually built (tsx's tsconfig paths quietly bypassed the gap by resolving straight to source). Added the missing tsdown entry so the built dist/ matches the declared exports. - Dropped the TSX_TSCONFIG_PATH env var the three worker-spawning helpers (node-ui-runtime, node-gameplay-runtime, bga-video) set for their child workers — it configured tsx's own tsconfig lookup, which no longer runs. The --conditions=source exec flag stays: it's Node's own flag and still lets an in-source run resolve workspace packages via their exports 'source' condition. Verified: full pnpm run build/lint/typecheck/test green, plus manual smoke tests of every converted entry point (parser/stringifier/ audio-renderer/editor CLIs, all player-tui commands including a real TUI session under a pseudo-tty, build-sea.ts, the root and per-package bench scripts, and both release scripts). Pre-existing bug found in passing (not fixed, out of scope): packages/ beatoraja-skin/scripts/bench.ts is referenced by its package.json but has never existed in git history. CI never invokes it (only the root bench script, which enumerates all packages independently), so it's dead outside manual `pnpm --filter @be-music/beatoraja-skin run bench`. --- .github/workflows/ci.yml | 4 +- .github/workflows/release.yml | 4 +- package.json | 19 ++++++++-- packages/audio-renderer/package.json | 6 +-- packages/audio-renderer/tsdown.config.ts | 1 + packages/beatoraja-skin/package.json | 2 +- .../beatoraja-skin/src/fengari-types.d.ts | 19 +++++++++- packages/beatoraja-skin/src/lua.ts | 8 +++- packages/chart/package.json | 2 +- packages/editor/package.json | 4 +- packages/json/package.json | 2 +- packages/lr2-skin/package.json | 2 +- packages/parser/package.json | 4 +- packages/player-tui/package.json | 12 +++--- packages/player-tui/src/bga-video.ts | 13 ------- .../src/node/node-gameplay-runtime.ts | 14 ------- .../src/node/node-ui-runtime.test.ts | 6 +-- .../player-tui/src/node/node-ui-runtime.ts | 14 ------- packages/player-web-demo/src/main.ts | 4 +- packages/player-web/package.json | 2 +- packages/player-web/src/scene/lr2/decide.ts | 5 ++- packages/player-web/src/scene/lr2/gameplay.ts | 4 +- packages/player-web/src/scene/lr2/result.ts | 5 ++- packages/player-web/src/scene/lr2/select.ts | 4 +- packages/player-web/src/scene/pixi-utils.ts | 4 +- .../player-web/src/skin/beatoraja/audio.ts | 4 +- packages/player/package.json | 2 +- packages/player/src/ruleset/gauge.ts | 4 +- packages/stringifier/package.json | 4 +- packages/utils/package.json | 2 +- pnpm-lock.yaml | 38 +++++++++++++++++-- scripts/build-sea.ts | 2 +- 32 files changed, 128 insertions(+), 92 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e1f35ed9..ee8bac86 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -469,8 +469,8 @@ jobs: - name: Verify player SEA bundle if: needs.changes.outputs.sea_player_changed == 'true' - run: pnpm exec tsx scripts/build-sea.ts --package player --bundle-only + run: node scripts/build-sea.ts --package player --bundle-only - name: Verify audio-renderer SEA bundle if: needs.changes.outputs.sea_audio_renderer_changed == 'true' - run: pnpm exec tsx scripts/build-sea.ts --package audio-renderer --bundle-only + run: node scripts/build-sea.ts --package audio-renderer --bundle-only diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e9d3143e..9aa59ee6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -88,7 +88,7 @@ jobs: shell: bash run: | set -euo pipefail - pnpm exec tsx --tsconfig tsconfig.typecheck.json scripts/release/resolve-package-releases.ts \ + node scripts/release/resolve-package-releases.ts \ --base "${{ steps.release_refs.outputs.release_base }}" \ --head "${{ steps.release_refs.outputs.release_target }}" \ --github-output "$GITHUB_OUTPUT" \ @@ -403,7 +403,7 @@ jobs: RELEASE_TARGET: ${{ needs.prepare.outputs.release_target }} run: | set -euo pipefail - pnpm exec tsx --tsconfig tsconfig.typecheck.json scripts/release/create-package-releases.ts \ + node scripts/release/create-package-releases.ts \ --repo "$GITHUB_REPOSITORY" \ --release-target "$RELEASE_TARGET" \ --releases-json tmp/release-data/releases.json \ diff --git a/package.json b/package.json index faf89d3d..e17af849 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "private": true, "description": "TypeScript monorepo for the be-music BMS/BMSON toolchain", "license": "MIT", + "type": "module", "scripts": { "build": "pnpm -r --sort --workspace-concurrency=Infinity run build", "clean": "pnpm -r run clean && rimraf coverage \"packages/*/node_modules/.vite\"", @@ -17,9 +18,9 @@ "format:check": "pnpm -r --parallel run format:check", "test": "vitest run", "test:coverage": "vitest run --coverage", - "bench": "tsx --tsconfig tsconfig.typecheck.json scripts/bench/exports.ts", - "bench:aggregate": "tsx --tsconfig tsconfig.typecheck.json scripts/bench/aggregate-results.ts", - "bench:compare": "tsx --tsconfig tsconfig.typecheck.json scripts/bench/compare-results.ts", + "bench": "node scripts/bench/exports.ts", + "bench:aggregate": "node scripts/bench/aggregate-results.ts", + "bench:compare": "node scripts/bench/compare-results.ts", "player": "pnpm --filter @be-music/player-tui run dev", "playlog": "pnpm --filter @be-music/player-tui run playlog", "player:web": "pnpm --filter @be-music/player-web-demo run dev", @@ -33,6 +34,17 @@ "stringify": "pnpm --filter @be-music/stringifier run dev" }, "devDependencies": { + "@be-music/audio-renderer": "workspace:*", + "@be-music/chart": "workspace:*", + "@be-music/editor": "workspace:*", + "@be-music/json": "workspace:*", + "@be-music/lr2-skin": "workspace:*", + "@be-music/parser": "workspace:*", + "@be-music/player": "workspace:*", + "@be-music/player-tui": "workspace:*", + "@be-music/player-web": "workspace:*", + "@be-music/stringifier": "workspace:*", + "@be-music/utils": "workspace:*", "@changesets/cli": "^3.0.1", "@types/node": "^26.4.0", "@vitest/coverage-v8": "^4.1.10", @@ -41,7 +53,6 @@ "rimraf": "^6.0.1", "tinybench": "^6.1.3", "tsdown": "^0.22.14", - "tsx": "^4.23.13", "typescript": "^7.0.2", "vite": "^8.2.2", "vitest": "^4.1.10" diff --git a/packages/audio-renderer/package.json b/packages/audio-renderer/package.json index 251b1711..08c14554 100644 --- a/packages/audio-renderer/package.json +++ b/packages/audio-renderer/package.json @@ -27,15 +27,15 @@ "scripts": { "build:bundle": "tsdown", "build": "tsdown", - "build:sea": "tsx ../../scripts/build-sea.ts --package audio-renderer", + "build:sea": "node ../../scripts/build-sea.ts --package audio-renderer", "clean": "rimraf dist tsconfig.tsbuildinfo", - "dev": "tsx --tsconfig ../../tsconfig.typecheck.json src/cli.ts", + "dev": "node src/cli.ts", "typecheck": "tsc -p tsconfig.typecheck.json --pretty", "lint": "oxlint .", "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "tsx --tsconfig ../../tsconfig.typecheck.json scripts/bench.ts" + "bench": "node scripts/bench.ts" }, "dependencies": { "@be-music/chart": "workspace:*", diff --git a/packages/audio-renderer/tsdown.config.ts b/packages/audio-renderer/tsdown.config.ts index 8f4e808f..da3be3dc 100644 --- a/packages/audio-renderer/tsdown.config.ts +++ b/packages/audio-renderer/tsdown.config.ts @@ -9,5 +9,6 @@ export default createPackageTsdownConfig({ entries: { index: 'src/index.ts', cli: 'src/cli.ts', + 'core/triggers': 'src/core/triggers.ts', }, }); diff --git a/packages/beatoraja-skin/package.json b/packages/beatoraja-skin/package.json index 38abe6e9..22941c28 100644 --- a/packages/beatoraja-skin/package.json +++ b/packages/beatoraja-skin/package.json @@ -25,7 +25,7 @@ "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "tsx --tsconfig ../../tsconfig.typecheck.json scripts/bench.ts" + "bench": "node scripts/bench.ts" }, "dependencies": { "@be-music/utils": "workspace:*", diff --git a/packages/beatoraja-skin/src/fengari-types.d.ts b/packages/beatoraja-skin/src/fengari-types.d.ts index b823c2f1..a2d0e62e 100644 --- a/packages/beatoraja-skin/src/fengari-types.d.ts +++ b/packages/beatoraja-skin/src/fengari-types.d.ts @@ -106,7 +106,22 @@ declare module 'fengari' { } // `fengari-web` re-exports the same `lua` / `lauxlib` / `lualib` / `to_luastring` shapes as `fengari` itself, so we -// declare it as the same module surface. +// declare it as the same module surface. Unlike `fengari`, `fengari-web` ships a webpack UMD bundle whose +// `module.exports` is built at runtime (an IIFE return value) rather than plain `exports.x = ...` assignments, so +// Node's static cjs-module-lexer can't discover named exports on it — the package must be imported as a single +// default value and destructured, hence the shape below is a default export instead of `fengari`'s named ones. declare module 'fengari-web' { - export { lua_State, LuaCFunction, lua, lauxlib, lualib, to_luastring, to_jsstring, luastring_of } from 'fengari'; + import type { lua, lauxlib, lualib, lua_State, LuaCFunction, to_luastring, to_jsstring, luastring_of } from 'fengari'; + + export type { lua_State, LuaCFunction }; + + const fengariWeb: { + lua: typeof lua; + lauxlib: typeof lauxlib; + lualib: typeof lualib; + to_luastring: typeof to_luastring; + to_jsstring: typeof to_jsstring; + luastring_of: typeof luastring_of; + }; + export default fengariWeb; } diff --git a/packages/beatoraja-skin/src/lua.ts b/packages/beatoraja-skin/src/lua.ts index 3a5e6ccf..aedaeaf3 100644 --- a/packages/beatoraja-skin/src/lua.ts +++ b/packages/beatoraja-skin/src/lua.ts @@ -18,9 +18,10 @@ // The reference beatoraja themes only use `base` / `table` / `string` / `math` so the strip is non-disruptive. import { normalizePath } from '@be-music/utils/core'; -import { lauxlib, lua, lualib, to_luastring } from 'fengari-web'; +import fengariWeb from 'fengari-web'; import type { lua_State, LuaCFunction } from 'fengari-web'; +const { lauxlib, lua, lualib, to_luastring } = fengariWeb; const { LUA_OK, LUA_REGISTRYINDEX, @@ -262,8 +263,11 @@ class LuaRuntimeOwner { private refs = 0; private closed = false; context: BeatorajaLuaRuntimeContext | undefined; + readonly L: lua_State; - constructor(readonly L: lua_State) {} + constructor(L: lua_State) { + this.L = L; + } makeFunction(ref: number): BeatorajaLuaFunctionValue { this.refs += 1; diff --git a/packages/chart/package.json b/packages/chart/package.json index 46f33d8c..c6215107 100644 --- a/packages/chart/package.json +++ b/packages/chart/package.json @@ -25,7 +25,7 @@ "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "tsx --tsconfig ../../tsconfig.typecheck.json scripts/bench.ts" + "bench": "node scripts/bench.ts" }, "dependencies": { "@be-music/json": "workspace:*" diff --git a/packages/editor/package.json b/packages/editor/package.json index c1f97578..d21e6aa0 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -23,13 +23,13 @@ "build:bundle": "tsdown", "build": "tsdown", "clean": "rimraf dist tsconfig.tsbuildinfo", - "dev": "tsx --tsconfig ../../tsconfig.typecheck.json src/cli.ts", + "dev": "node src/cli.ts", "typecheck": "tsc -p tsconfig.typecheck.json --pretty", "lint": "oxlint .", "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "tsx --tsconfig ../../tsconfig.typecheck.json scripts/bench.ts" + "bench": "node scripts/bench.ts" }, "dependencies": { "@be-music/chart": "workspace:*", diff --git a/packages/json/package.json b/packages/json/package.json index 0c56281d..5bb6f079 100644 --- a/packages/json/package.json +++ b/packages/json/package.json @@ -25,7 +25,7 @@ "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "tsx --tsconfig ../../tsconfig.typecheck.json scripts/bench.ts" + "bench": "node scripts/bench.ts" }, "dependencies": { "@be-music/utils": "workspace:*" diff --git a/packages/lr2-skin/package.json b/packages/lr2-skin/package.json index 5c34159a..7f605f2d 100644 --- a/packages/lr2-skin/package.json +++ b/packages/lr2-skin/package.json @@ -25,7 +25,7 @@ "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "tsx --tsconfig ../../tsconfig.typecheck.json scripts/bench.ts" + "bench": "node scripts/bench.ts" }, "dependencies": { "@be-music/chart": "workspace:*", diff --git a/packages/parser/package.json b/packages/parser/package.json index 553de79a..14866700 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -23,13 +23,13 @@ "build:bundle": "tsdown", "build": "tsdown", "clean": "rimraf dist tsconfig.tsbuildinfo", - "dev": "tsx --tsconfig ../../tsconfig.typecheck.json src/cli.ts", + "dev": "node src/cli.ts", "typecheck": "tsc -p tsconfig.typecheck.json --pretty", "lint": "oxlint .", "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "tsx --tsconfig ../../tsconfig.typecheck.json scripts/bench.ts" + "bench": "node scripts/bench.ts" }, "dependencies": { "@be-music/chart": "workspace:*", diff --git a/packages/player-tui/package.json b/packages/player-tui/package.json index 0a4c679f..6f52b842 100644 --- a/packages/player-tui/package.json +++ b/packages/player-tui/package.json @@ -23,18 +23,18 @@ "scripts": { "build:bundle": "tsdown", "build": "tsdown", - "build:sea": "tsx ../../scripts/build-sea.ts --package player", + "build:sea": "node ../../scripts/build-sea.ts --package player", "clean": "rimraf dist tsconfig.tsbuildinfo", - "dev": "tsx --tsconfig ../../tsconfig.typecheck.json src/cli.ts", - "playlog": "tsx --tsconfig ../../tsconfig.typecheck.json src/playlog-cli.ts", - "diag:keyboard": "tsx --tsconfig ../../tsconfig.typecheck.json src/keyboard-diagnostic.ts", - "diag:gameplay-input": "tsx --tsconfig ../../tsconfig.typecheck.json src/gameplay-input-diagnostic.ts", + "dev": "node src/cli.ts", + "playlog": "node src/playlog-cli.ts", + "diag:keyboard": "node src/keyboard-diagnostic.ts", + "diag:gameplay-input": "node src/gameplay-input-diagnostic.ts", "typecheck": "tsc -p tsconfig.typecheck.json --pretty", "lint": "oxlint .", "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "tsx --tsconfig ../../tsconfig.typecheck.json scripts/bench.ts" + "bench": "node scripts/bench.ts" }, "dependencies": { "@be-music/audio-renderer": "workspace:*", diff --git a/packages/player-tui/src/bga-video.ts b/packages/player-tui/src/bga-video.ts index 1aa37ccf..e6924b39 100644 --- a/packages/player-tui/src/bga-video.ts +++ b/packages/player-tui/src/bga-video.ts @@ -1,6 +1,5 @@ import { readFile } from 'node:fs/promises'; import { basename } from 'node:path'; -import { fileURLToPath } from 'node:url'; import { Worker } from 'node:worker_threads'; import { createAbortError, isAbortError, throwIfAborted } from '@be-music/utils/core'; import { loadOptionalNodeModule } from '@be-music/utils/optional-node-module'; @@ -244,7 +243,6 @@ export async function decodeVideoFramesToSourceFramesInWorker( : new Worker(resolveBgaVideoWorkerUrl(), { workerData: workerInitData, execArgv: resolveBgaVideoWorkerExecArgv(), - env: resolveBgaVideoWorkerEnv(), }); return await new Promise((resolve, reject) => { @@ -668,14 +666,3 @@ function resolveBgaVideoWorkerExecArgv(): string[] { return [...process.execArgv, '--conditions=source']; } -function resolveBgaVideoWorkerEnv(): NodeJS.ProcessEnv { - if (!import.meta.url.endsWith('.ts')) { - return process.env; - } - - return { - ...process.env, - TSX_TSCONFIG_PATH: - process.env.TSX_TSCONFIG_PATH ?? fileURLToPath(new URL('../../../tsconfig.typecheck.json', import.meta.url)), - }; -} diff --git a/packages/player-tui/src/node/node-gameplay-runtime.ts b/packages/player-tui/src/node/node-gameplay-runtime.ts index 46539d6c..cacd09d9 100644 --- a/packages/player-tui/src/node/node-gameplay-runtime.ts +++ b/packages/player-tui/src/node/node-gameplay-runtime.ts @@ -2,7 +2,6 @@ import { effect } from 'alien-signals'; import { createAbortError } from '@be-music/utils/core'; import type { LogEntry } from '@be-music/utils/log'; import type { BeMusicJson } from '@be-music/json'; -import { fileURLToPath } from 'node:url'; import { Worker, type MessagePort } from 'node:worker_threads'; import { createPlayerInputSignalBus } from '@be-music/player/core/input-signal-bus'; import type { PlayerLoadProgress, PlayerSummary } from '@be-music/player/core/engine'; @@ -42,7 +41,6 @@ export async function runNodeGameplayRuntime(options: NodeGameplayRuntimeOptions : new Worker(resolveNodeGameplayWorkerUrl(), { workerData: createWorkerInitData(options), execArgv: resolveNodeGameplayWorkerExecArgv(), - env: resolveNodeGameplayWorkerEnv(), }); const writeOutput = options.writeOutput ?? ((text: string) => process.stdout.write(text)); @@ -310,18 +308,6 @@ function resolveNodeGameplayWorkerExecArgv(): string[] { return [...process.execArgv, '--conditions=source']; } -function resolveNodeGameplayWorkerEnv(): NodeJS.ProcessEnv { - if (!import.meta.url.endsWith('.ts')) { - return process.env; - } - - return { - ...process.env, - TSX_TSCONFIG_PATH: - process.env.TSX_TSCONFIG_PATH ?? fileURLToPath(new URL('../../../../tsconfig.typecheck.json', import.meta.url)), - }; -} - function postWorkerMessage( worker: Worker, message: NodeGameplayWorkerInboundMessage, diff --git a/packages/player-tui/src/node/node-ui-runtime.test.ts b/packages/player-tui/src/node/node-ui-runtime.test.ts index e079b9b8..e99e3959 100644 --- a/packages/player-tui/src/node/node-ui-runtime.test.ts +++ b/packages/player-tui/src/node/node-ui-runtime.test.ts @@ -217,11 +217,9 @@ describe('node ui runtime', () => { expect(messagesOfKind(worker, 'dispose')).toHaveLength(1); }); - test('passes tsx tsconfig path to the UI worker in source runs', async () => { + test('passes the source-conditions exec flag to the UI worker in source runs', async () => { const uiSignals = createPlayerUiSignalBus(createFrame()); const runtime = await createNodeUiRuntime(createContext(uiSignals)); - const workerEnv = workerState.lastWorkerOptions?.env; - const workerEnvObject = typeof workerEnv === 'object' ? (workerEnv as NodeJS.ProcessEnv) : undefined; const workerExecArgv = workerState.lastWorkerOptions?.execArgv; const workerData = workerState.lastWorkerOptions?.workerData as | { @@ -235,8 +233,6 @@ describe('node ui runtime', () => { } | undefined; - expect(typeof workerEnv).toBe('object'); - expect(workerEnvObject?.TSX_TSCONFIG_PATH).toContain('tsconfig.typecheck.json'); expect(workerExecArgv).toContain('--conditions=source'); expect(workerData).toMatchObject({ stdinIsTTY: Boolean(process.stdin.isTTY), diff --git a/packages/player-tui/src/node/node-ui-runtime.ts b/packages/player-tui/src/node/node-ui-runtime.ts index a3039105..d3ec134b 100644 --- a/packages/player-tui/src/node/node-ui-runtime.ts +++ b/packages/player-tui/src/node/node-ui-runtime.ts @@ -1,7 +1,6 @@ import { createAbortError, isAbortError } from '@be-music/utils/core'; import type { LogEntry } from '@be-music/utils/log'; import { effect } from 'alien-signals'; -import { fileURLToPath } from 'node:url'; import { MessageChannel, type MessagePort, Worker } from 'node:worker_threads'; import type { LaneBinding } from '../manual-input.ts'; import type { PlayerStateSignals } from '@be-music/player/state-signals'; @@ -62,7 +61,6 @@ export async function createNodeUiRuntime(options: NodeUiRuntimeOptions): Promis : new Worker(resolveNodeUiWorkerUrl(), { workerData: createWorkerInitData(options), execArgv: resolveNodeUiWorkerExecArgv(), - env: resolveNodeUiWorkerEnv(), }); const workerReady = await waitForWorkerReady(worker, options.loadSignal, options.onBgaLoadProgress, options.onLog); if (!workerReady.enabled) { @@ -326,18 +324,6 @@ function resolveNodeUiWorkerExecArgv(): string[] { return [...process.execArgv, '--conditions=source']; } -function resolveNodeUiWorkerEnv(): NodeJS.ProcessEnv { - if (!import.meta.url.endsWith('.ts')) { - return process.env; - } - - return { - ...process.env, - TSX_TSCONFIG_PATH: - process.env.TSX_TSCONFIG_PATH ?? fileURLToPath(new URL('../../../../tsconfig.typecheck.json', import.meta.url)), - }; -} - async function waitForWorkerReady( worker: Worker, signal: AbortSignal | undefined, diff --git a/packages/player-web-demo/src/main.ts b/packages/player-web-demo/src/main.ts index a5742159..808d9406 100644 --- a/packages/player-web-demo/src/main.ts +++ b/packages/player-web-demo/src/main.ts @@ -419,7 +419,9 @@ class PlayerWebDemoApp { * disarmAutoRecord} so the flag doesn't survive into a future session that shouldn't be auto-captured. */ private autoRecordArmed = false; - public constructor(private readonly elements: PlayerWebDemoElements) { + private readonly elements: PlayerWebDemoElements; + public constructor(elements: PlayerWebDemoElements) { + this.elements = elements; this.guiState = { autoPlay: false, autoPauseOnBlur: false, diff --git a/packages/player-web/package.json b/packages/player-web/package.json index 91c152ad..cacf0daa 100644 --- a/packages/player-web/package.json +++ b/packages/player-web/package.json @@ -49,7 +49,7 @@ "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "tsx --tsconfig ../../tsconfig.typecheck.json scripts/bench.ts" + "bench": "node scripts/bench.ts" }, "dependencies": { "@be-music/audio-renderer": "workspace:*", diff --git a/packages/player-web/src/scene/lr2/decide.ts b/packages/player-web/src/scene/lr2/decide.ts index 8e5483dc..edd06a14 100644 --- a/packages/player-web/src/scene/lr2/decide.ts +++ b/packages/player-web/src/scene/lr2/decide.ts @@ -169,8 +169,11 @@ export class PixiDecideView { private inputUnlockHandle: ReturnType | undefined; private inputUnlocked = false; private readonly timerStartedAt = new Map(); + private readonly options: PixiDecideViewOptions; - public constructor(private readonly options: PixiDecideViewOptions = {}) {} + public constructor(options: PixiDecideViewOptions = {}) { + this.options = options; + } private get app(): Application { if (!this.host) { diff --git a/packages/player-web/src/scene/lr2/gameplay.ts b/packages/player-web/src/scene/lr2/gameplay.ts index ab9be53d..25fbebe0 100644 --- a/packages/player-web/src/scene/lr2/gameplay.ts +++ b/packages/player-web/src/scene/lr2/gameplay.ts @@ -1112,8 +1112,10 @@ export class PixiGameplayView { * `globalThis.__BE_MUSIC_PERF__ = true`). When disabled the wrapper adds no measurable overhead. */ private readonly perf = new PerfTracker('gameplay'); + private readonly options: PixiGameplayViewOptions; - public constructor(private readonly options: PixiGameplayViewOptions = {}) { + public constructor(options: PixiGameplayViewOptions = {}) { + this.options = options; if (options.initialHiSpeed !== undefined && Number.isFinite(options.initialHiSpeed)) { // Snap to the same 1/1000 grid `adjustHiSpeed` uses so a host-supplied `1.5000000000000002` (the obvious // float-drift failure mode of repeated +0.1 steps) lands on the canonical grid value the in-game adjust hotkey diff --git a/packages/player-web/src/scene/lr2/result.ts b/packages/player-web/src/scene/lr2/result.ts index 0ba95353..8c86ca61 100644 --- a/packages/player-web/src/scene/lr2/result.ts +++ b/packages/player-web/src/scene/lr2/result.ts @@ -298,8 +298,11 @@ export class PixiResultView { * interpolator (`elapsedSinceTimer`) and `isDestinationVisible`'s timer-active gating. */ private readonly timerStartedAt = new Map(); + private options: PixiResultViewOptions; - public constructor(private options: PixiResultViewOptions = {}) {} + public constructor(options: PixiResultViewOptions = {}) { + this.options = options; + } private get app(): Application { if (!this.host) { diff --git a/packages/player-web/src/scene/lr2/select.ts b/packages/player-web/src/scene/lr2/select.ts index e5805301..7d9ca205 100644 --- a/packages/player-web/src/scene/lr2/select.ts +++ b/packages/player-web/src/scene/lr2/select.ts @@ -886,8 +886,10 @@ export class PixiSongSelectView { * multiple times before the first decode resolves. */ private readonly oneShotDecoding = new Set(); + private options: PixiSongSelectViewOptions; - public constructor(private options: PixiSongSelectViewOptions = {}) { + public constructor(options: PixiSongSelectViewOptions = {}) { + this.options = options; this.selectBgmBytes = options.selectBgm; this.setOneShotBytes('decide', options.decideBgm); this.setSystemSounds(options.systemSounds); diff --git a/packages/player-web/src/scene/pixi-utils.ts b/packages/player-web/src/scene/pixi-utils.ts index 8997e1f6..3da45294 100644 --- a/packages/player-web/src/scene/pixi-utils.ts +++ b/packages/player-web/src/scene/pixi-utils.ts @@ -76,8 +76,10 @@ export class ChildPool { private idleFramesSprites = 0; private idleFramesGraphics = 0; private idleFramesTexts = 0; + private readonly layer: Container; - public constructor(private readonly layer: Container) { + public constructor(layer: Container) { + this.layer = layer; this.graphicsHost = new Container(); this.spriteHost = new Container(); this.textHost = new Container(); diff --git a/packages/player-web/src/skin/beatoraja/audio.ts b/packages/player-web/src/skin/beatoraja/audio.ts index 41c838b0..b4af29dc 100644 --- a/packages/player-web/src/skin/beatoraja/audio.ts +++ b/packages/player-web/src/skin/beatoraja/audio.ts @@ -77,8 +77,10 @@ export class BeatorajaSkinAudioPlayer { /** Active looped sources, keyed by the resolved bundle path. `audioStop(path)` consults this. */ private readonly loopingSources = new Map>(); private disposed = false; + private readonly options: BeatorajaSkinAudioPlayerOptions; - public constructor(private readonly options: BeatorajaSkinAudioPlayerOptions) { + public constructor(options: BeatorajaSkinAudioPlayerOptions) { + this.options = options; this.ownsContext = options.audioContext === undefined; this.context = options.audioContext; } diff --git a/packages/player/package.json b/packages/player/package.json index aad9cdd6..b660b40a 100644 --- a/packages/player/package.json +++ b/packages/player/package.json @@ -120,7 +120,7 @@ "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "tsx --tsconfig ../../tsconfig.typecheck.json scripts/bench.ts" + "bench": "node scripts/bench.ts" }, "dependencies": { "@be-music/audio-renderer": "workspace:*", diff --git a/packages/player/src/ruleset/gauge.ts b/packages/player/src/ruleset/gauge.ts index c48f9035..535cf87b 100644 --- a/packages/player/src/ruleset/gauge.ts +++ b/packages/player/src/ruleset/gauge.ts @@ -26,8 +26,10 @@ export class RulesetGauge { /** Set once a survival gauge has bottomed out. The run keeps judging; the gauge stays dead. */ failedMidPlay = false; private dead = false; + readonly spec: GaugeSpec; - constructor(readonly spec: GaugeSpec) { + constructor(spec: GaugeSpec) { + this.spec = spec; this.value = spec.initial; } diff --git a/packages/stringifier/package.json b/packages/stringifier/package.json index 93bb9698..39bd1f5e 100644 --- a/packages/stringifier/package.json +++ b/packages/stringifier/package.json @@ -23,13 +23,13 @@ "build:bundle": "tsdown", "build": "tsdown", "clean": "rimraf dist tsconfig.tsbuildinfo", - "dev": "tsx --tsconfig ../../tsconfig.typecheck.json src/cli.ts", + "dev": "node src/cli.ts", "typecheck": "tsc -p tsconfig.typecheck.json --pretty", "lint": "oxlint .", "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "tsx --tsconfig ../../tsconfig.typecheck.json scripts/bench.ts" + "bench": "node scripts/bench.ts" }, "dependencies": { "@be-music/chart": "workspace:*", diff --git a/packages/utils/package.json b/packages/utils/package.json index 9fd4a2af..bf50e82d 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -60,7 +60,7 @@ "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "tsx --tsconfig ../../tsconfig.typecheck.json scripts/bench.ts" + "bench": "node scripts/bench.ts" }, "dependencies": { "isoworker": "^0.2.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 379132ce..4cc17b1b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,39 @@ importers: .: devDependencies: + '@be-music/audio-renderer': + specifier: workspace:* + version: link:packages/audio-renderer + '@be-music/chart': + specifier: workspace:* + version: link:packages/chart + '@be-music/editor': + specifier: workspace:* + version: link:packages/editor + '@be-music/json': + specifier: workspace:* + version: link:packages/json + '@be-music/lr2-skin': + specifier: workspace:* + version: link:packages/lr2-skin + '@be-music/parser': + specifier: workspace:* + version: link:packages/parser + '@be-music/player': + specifier: workspace:* + version: link:packages/player + '@be-music/player-tui': + specifier: workspace:* + version: link:packages/player-tui + '@be-music/player-web': + specifier: workspace:* + version: link:packages/player-web + '@be-music/stringifier': + specifier: workspace:* + version: link:packages/stringifier + '@be-music/utils': + specifier: workspace:* + version: link:packages/utils '@changesets/cli': specifier: ^3.0.1 version: 3.0.1 @@ -32,9 +65,6 @@ importers: tsdown: specifier: ^0.22.14 version: 0.22.14(tsx@4.23.13)(typescript@7.0.2)(unrun@0.2.37) - tsx: - specifier: ^4.23.13 - version: 4.23.13 typescript: specifier: ^7.0.2 version: 7.0.2 @@ -4829,6 +4859,7 @@ snapshots: '@esbuild/win32-arm64': 0.28.2 '@esbuild/win32-ia32': 0.28.2 '@esbuild/win32-x64': 0.28.2 + optional: true estree-walker@2.0.2: {} @@ -5837,6 +5868,7 @@ snapshots: esbuild: 0.28.2 optionalDependencies: fsevents: 2.3.3 + optional: true tty-browserify@0.0.1: {} diff --git a/scripts/build-sea.ts b/scripts/build-sea.ts index 29e16a0d..6fd34e64 100644 --- a/scripts/build-sea.ts +++ b/scripts/build-sea.ts @@ -132,7 +132,7 @@ const SEA_TARGETS: Record = { function printUsage() { process.stdout.write( [ - 'Usage: tsx scripts/build-sea.ts --package [options]', + 'Usage: node scripts/build-sea.ts --package [options]', '', 'Essential options:', ' -p, --package Target package to build SEA for', From eea6ba78193ed8f0977810db83f19f531ea1bcbf Mon Sep 17 00:00:00 2001 From: Seiya KONNO Date: Sun, 6 Sep 2026 16:05:38 +0900 Subject: [PATCH 2/2] fix: resolve workspace packages from source without a prior build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The CI benchmark job installs dependencies but never runs pnpm run build, so the previous commit's dist-only resolution broke it: node scripts/bench/exports.ts couldn't find @be-music/json/dist/ index.js because nothing had built it yet. The same gap silently broke every dev/bench/playlog/diag:* command run without a prior build too — tsx never had this problem because its tsconfig paths resolved straight to source. Every workspace package's exports already carries a "source" condition pointing at the .ts file (used by tsx before this migration), so passing Node's own --conditions=source flag to every node-invoked script/CLI restores that behavior without needing a build first. Applied to every package.json script that runs a .ts entry point, plus the two CI workflow steps that call node directly (build-sea.ts, the two release scripts). Resolving straight to source instead of dist surfaced two more parameter-property constructors that a single-line grep missed because their argument lists span multiple lines (PlaylogSimulation, BeatorajaSceneBgmPlayer) — a proper paren-depth-aware rescan confirms these were the last two. Rewrote them the same way as the previous commit's nine. Verified by fully cleaning dist/, doing a frozen-lockfile install with no build step (matching the CI benchmark job exactly), and re-running every entry point that failed before: root and per-package bench, all player-tui commands including a real TUI session under a pseudo-tty, and both SEA builds. Then rebuilt normally and re-ran the full build/lint/typecheck/test suite green. --- .github/workflows/ci.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- package.json | 6 +++--- packages/audio-renderer/package.json | 6 +++--- packages/beatoraja-skin/package.json | 2 +- packages/chart/package.json | 2 +- packages/editor/package.json | 4 ++-- packages/json/package.json | 2 +- packages/lr2-skin/package.json | 2 +- packages/parser/package.json | 4 ++-- packages/player-tui/package.json | 12 ++++++------ packages/player-web/package.json | 2 +- .../player-web/src/scene/beatoraja/shared-scene.ts | 10 ++++++---- packages/player/package.json | 2 +- packages/player/src/playlog/simulate.ts | 9 +++++---- packages/stringifier/package.json | 4 ++-- packages/utils/package.json | 2 +- 17 files changed, 40 insertions(+), 37 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ee8bac86..d3ae7189 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -469,8 +469,8 @@ jobs: - name: Verify player SEA bundle if: needs.changes.outputs.sea_player_changed == 'true' - run: node scripts/build-sea.ts --package player --bundle-only + run: node --conditions=source scripts/build-sea.ts --package player --bundle-only - name: Verify audio-renderer SEA bundle if: needs.changes.outputs.sea_audio_renderer_changed == 'true' - run: node scripts/build-sea.ts --package audio-renderer --bundle-only + run: node --conditions=source scripts/build-sea.ts --package audio-renderer --bundle-only diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9aa59ee6..4dd79bec 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -88,7 +88,7 @@ jobs: shell: bash run: | set -euo pipefail - node scripts/release/resolve-package-releases.ts \ + node --conditions=source scripts/release/resolve-package-releases.ts \ --base "${{ steps.release_refs.outputs.release_base }}" \ --head "${{ steps.release_refs.outputs.release_target }}" \ --github-output "$GITHUB_OUTPUT" \ @@ -403,7 +403,7 @@ jobs: RELEASE_TARGET: ${{ needs.prepare.outputs.release_target }} run: | set -euo pipefail - node scripts/release/create-package-releases.ts \ + node --conditions=source scripts/release/create-package-releases.ts \ --repo "$GITHUB_REPOSITORY" \ --release-target "$RELEASE_TARGET" \ --releases-json tmp/release-data/releases.json \ diff --git a/package.json b/package.json index e17af849..80d970da 100644 --- a/package.json +++ b/package.json @@ -18,9 +18,9 @@ "format:check": "pnpm -r --parallel run format:check", "test": "vitest run", "test:coverage": "vitest run --coverage", - "bench": "node scripts/bench/exports.ts", - "bench:aggregate": "node scripts/bench/aggregate-results.ts", - "bench:compare": "node scripts/bench/compare-results.ts", + "bench": "node --conditions=source scripts/bench/exports.ts", + "bench:aggregate": "node --conditions=source scripts/bench/aggregate-results.ts", + "bench:compare": "node --conditions=source scripts/bench/compare-results.ts", "player": "pnpm --filter @be-music/player-tui run dev", "playlog": "pnpm --filter @be-music/player-tui run playlog", "player:web": "pnpm --filter @be-music/player-web-demo run dev", diff --git a/packages/audio-renderer/package.json b/packages/audio-renderer/package.json index 08c14554..1ac034bd 100644 --- a/packages/audio-renderer/package.json +++ b/packages/audio-renderer/package.json @@ -27,15 +27,15 @@ "scripts": { "build:bundle": "tsdown", "build": "tsdown", - "build:sea": "node ../../scripts/build-sea.ts --package audio-renderer", + "build:sea": "node --conditions=source ../../scripts/build-sea.ts --package audio-renderer", "clean": "rimraf dist tsconfig.tsbuildinfo", - "dev": "node src/cli.ts", + "dev": "node --conditions=source src/cli.ts", "typecheck": "tsc -p tsconfig.typecheck.json --pretty", "lint": "oxlint .", "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "node scripts/bench.ts" + "bench": "node --conditions=source scripts/bench.ts" }, "dependencies": { "@be-music/chart": "workspace:*", diff --git a/packages/beatoraja-skin/package.json b/packages/beatoraja-skin/package.json index 22941c28..7ddd53f1 100644 --- a/packages/beatoraja-skin/package.json +++ b/packages/beatoraja-skin/package.json @@ -25,7 +25,7 @@ "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "node scripts/bench.ts" + "bench": "node --conditions=source scripts/bench.ts" }, "dependencies": { "@be-music/utils": "workspace:*", diff --git a/packages/chart/package.json b/packages/chart/package.json index c6215107..1fb8150f 100644 --- a/packages/chart/package.json +++ b/packages/chart/package.json @@ -25,7 +25,7 @@ "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "node scripts/bench.ts" + "bench": "node --conditions=source scripts/bench.ts" }, "dependencies": { "@be-music/json": "workspace:*" diff --git a/packages/editor/package.json b/packages/editor/package.json index d21e6aa0..af983bde 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -23,13 +23,13 @@ "build:bundle": "tsdown", "build": "tsdown", "clean": "rimraf dist tsconfig.tsbuildinfo", - "dev": "node src/cli.ts", + "dev": "node --conditions=source src/cli.ts", "typecheck": "tsc -p tsconfig.typecheck.json --pretty", "lint": "oxlint .", "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "node scripts/bench.ts" + "bench": "node --conditions=source scripts/bench.ts" }, "dependencies": { "@be-music/chart": "workspace:*", diff --git a/packages/json/package.json b/packages/json/package.json index 5bb6f079..8c7093c3 100644 --- a/packages/json/package.json +++ b/packages/json/package.json @@ -25,7 +25,7 @@ "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "node scripts/bench.ts" + "bench": "node --conditions=source scripts/bench.ts" }, "dependencies": { "@be-music/utils": "workspace:*" diff --git a/packages/lr2-skin/package.json b/packages/lr2-skin/package.json index 7f605f2d..ea93a11c 100644 --- a/packages/lr2-skin/package.json +++ b/packages/lr2-skin/package.json @@ -25,7 +25,7 @@ "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "node scripts/bench.ts" + "bench": "node --conditions=source scripts/bench.ts" }, "dependencies": { "@be-music/chart": "workspace:*", diff --git a/packages/parser/package.json b/packages/parser/package.json index 14866700..459c3768 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -23,13 +23,13 @@ "build:bundle": "tsdown", "build": "tsdown", "clean": "rimraf dist tsconfig.tsbuildinfo", - "dev": "node src/cli.ts", + "dev": "node --conditions=source src/cli.ts", "typecheck": "tsc -p tsconfig.typecheck.json --pretty", "lint": "oxlint .", "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "node scripts/bench.ts" + "bench": "node --conditions=source scripts/bench.ts" }, "dependencies": { "@be-music/chart": "workspace:*", diff --git a/packages/player-tui/package.json b/packages/player-tui/package.json index 6f52b842..4eb24db3 100644 --- a/packages/player-tui/package.json +++ b/packages/player-tui/package.json @@ -23,18 +23,18 @@ "scripts": { "build:bundle": "tsdown", "build": "tsdown", - "build:sea": "node ../../scripts/build-sea.ts --package player", + "build:sea": "node --conditions=source ../../scripts/build-sea.ts --package player", "clean": "rimraf dist tsconfig.tsbuildinfo", - "dev": "node src/cli.ts", - "playlog": "node src/playlog-cli.ts", - "diag:keyboard": "node src/keyboard-diagnostic.ts", - "diag:gameplay-input": "node src/gameplay-input-diagnostic.ts", + "dev": "node --conditions=source src/cli.ts", + "playlog": "node --conditions=source src/playlog-cli.ts", + "diag:keyboard": "node --conditions=source src/keyboard-diagnostic.ts", + "diag:gameplay-input": "node --conditions=source src/gameplay-input-diagnostic.ts", "typecheck": "tsc -p tsconfig.typecheck.json --pretty", "lint": "oxlint .", "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "node scripts/bench.ts" + "bench": "node --conditions=source scripts/bench.ts" }, "dependencies": { "@be-music/audio-renderer": "workspace:*", diff --git a/packages/player-web/package.json b/packages/player-web/package.json index cacf0daa..3c5a721f 100644 --- a/packages/player-web/package.json +++ b/packages/player-web/package.json @@ -49,7 +49,7 @@ "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "node scripts/bench.ts" + "bench": "node --conditions=source scripts/bench.ts" }, "dependencies": { "@be-music/audio-renderer": "workspace:*", diff --git a/packages/player-web/src/scene/beatoraja/shared-scene.ts b/packages/player-web/src/scene/beatoraja/shared-scene.ts index 4d2afb98..46b967cd 100644 --- a/packages/player-web/src/scene/beatoraja/shared-scene.ts +++ b/packages/player-web/src/scene/beatoraja/shared-scene.ts @@ -241,11 +241,13 @@ export function isBeatorajaSceneInputReady(startMs: number, inputDelayMs: number export class BeatorajaSceneBgmPlayer { private audioContext: AudioContext | undefined; private bgmSource: AudioBufferSourceNode | undefined; + private readonly logLabel: string; + private readonly isDisposed: () => boolean; - constructor( - private readonly logLabel: string, - private readonly isDisposed: () => boolean, - ) {} + constructor(logLabel: string, isDisposed: () => boolean) { + this.logLabel = logLabel; + this.isDisposed = isDisposed; + } async start(bytes: Uint8Array | undefined): Promise { if (bytes === undefined) return; diff --git a/packages/player/package.json b/packages/player/package.json index b660b40a..009f804c 100644 --- a/packages/player/package.json +++ b/packages/player/package.json @@ -120,7 +120,7 @@ "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "node scripts/bench.ts" + "bench": "node --conditions=source scripts/bench.ts" }, "dependencies": { "@be-music/audio-renderer": "workspace:*", diff --git a/packages/player/src/playlog/simulate.ts b/packages/player/src/playlog/simulate.ts index fc435a76..3240fe6d 100644 --- a/packages/player/src/playlog/simulate.ts +++ b/packages/player/src/playlog/simulate.ts @@ -143,11 +143,12 @@ class PlaylogSimulation { private slow = 0; private exScore = 0; private lastAdvanceUs = Number.NEGATIVE_INFINITY; + private readonly playlog: BeMusicPlaylog; + private readonly config: RulesetConfig; - constructor( - private readonly playlog: BeMusicPlaylog, - private readonly config: RulesetConfig, - ) { + constructor(playlog: BeMusicPlaylog, config: RulesetConfig) { + this.playlog = playlog; + this.config = config; this.gauge = new RulesetGauge(config.gauge); this.buildLanes(); } diff --git a/packages/stringifier/package.json b/packages/stringifier/package.json index 39bd1f5e..827e78b9 100644 --- a/packages/stringifier/package.json +++ b/packages/stringifier/package.json @@ -23,13 +23,13 @@ "build:bundle": "tsdown", "build": "tsdown", "clean": "rimraf dist tsconfig.tsbuildinfo", - "dev": "node src/cli.ts", + "dev": "node --conditions=source src/cli.ts", "typecheck": "tsc -p tsconfig.typecheck.json --pretty", "lint": "oxlint .", "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "node scripts/bench.ts" + "bench": "node --conditions=source scripts/bench.ts" }, "dependencies": { "@be-music/chart": "workspace:*", diff --git a/packages/utils/package.json b/packages/utils/package.json index bf50e82d..82dc7b75 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -60,7 +60,7 @@ "lint:fix": "oxlint . --fix", "format": "oxfmt . --write", "format:check": "oxfmt . --check", - "bench": "node scripts/bench.ts" + "bench": "node --conditions=source scripts/bench.ts" }, "dependencies": { "isoworker": "^0.2.4",