diff --git a/AGENTS.md b/AGENTS.md index 641ad97797..09146fec4b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -80,7 +80,7 @@ pnpm native:verify:desktop # 300 native frames + a non-blank scr **CI.** The pre-push hook runs `pnpm ci:fast` drift checks only; it proves no runtime behaviour. `pnpm ci:local --full` runs the full board; `pnpm ci:local --affected --base origin/develop --target develop` runs what CI would select (dirty or unknown inputs fall back to full). A change touching only Markdown that no fixture consumes (not `AGENTS.md`/`CLAUDE.md`) runs no product CI job. Ordinary PRs into develop use the complete candidate diff: CI-only changes run CI contracts, exact template changes run scaffolder contracts and affected templates, and shared executable inputs keep the full safety board with starter as the default template smoke plus explicitly changed runtime/scenario kits. Template instruction and Markdown changes retain their contract lanes without adding runtime kits. Merge groups, explicit full runs, unknown inputs, main qualification and scheduled audits use fresh exhaustive qualification: all shipped templates, both golden journeys and the full supported native matrix. `ci-required` independently rejects a review plan for these events; Integration is a required reusable join on the same candidate, with each selected canonical job proven by a current-run/attempt receipt and independently checked completed-success API job; missing, skipped, cancelled, stale or unmapped receipts fail closed. Native per-leg authoritative completion and cold-path queue feasibility remain follow-ups before deferring any Android PR coverage. Template scenarios run once per selected kit; develop changes run one representative golden journey and full qualification retains both starter and platformer journeys. `ci-required` rejects missing or failed selected checks; retained contexts include `supply-chain`, `template-nonvisual`, `golden-path`, and native `desktop-parity` when applicable. Native host/platform tests run for native or shared runtime consumers, main qualification and unresolved scopes. Unsafe matrix/reusable verdict reuse stays disabled until authoritative complete coverage and per-leg routing exist. A new candidate runs fresh tests; only exact-run immutable build artifacts are shared. Details: `docs/PRDs/CI/PRD-483-impact-driven-ci-without-repeated-template-setup.md` and `docs/PRDs/done/PRD-373-selective-ci-and-develop-promotion.md`. Registry commands read auth from `~/.npmrc`; pass a checkout-local untracked `.npmrc` with `npm --userconfig .npmrc `. Never print either file. -TypeScript 5.9 `strict`, **ESM only**; relative imports end in `.js`. Versions come from the `catalog:` in `pnpm-workspace.yaml`, templates excepted. Biome formats — never hand-format. Interfaces are `I`-prefixed; classes and type aliases are not. Unit tests: `/__tests__/*.spec.ts`, vitest, node environment, DOM and GPU stubbed. +TypeScript 7 `strict` (the native `tsc`); `typescript` imports use the official TypeScript 6 compatibility API for AST scripts and tsup declarations, **ESM only**; relative imports end in `.js`. Versions come from the `catalog:` in `pnpm-workspace.yaml`, templates excepted. Biome formats — never hand-format. Interfaces are `I`-prefixed; classes and type aliases are not. Unit tests: `/__tests__/*.spec.ts`, vitest, node environment, DOM and GPU stubbed. **Existing harnesses — use them, don't rebuild them.** Capability lookup: `capabilities.json`, `packages/engine-mcp`. Behaviour on browser/Android/desktop/iOS: `packages/playtest --target `. User-like install and agent-friction arms: `pnpm sandbox`, `pnpm sweep:capture|judge|pair`, `scripts/score-blind.ts`. Visual baselines and LOC vs plain Three.js: `pnpm visuals`, `visuals:ab`, `visuals:baseline`, `pnpm tsx scripts/count-loc.ts`. Web-vs-native, profiling, frame meters: `pnpm parity` (`packages/runtime-native/conformance/registry.json`), `profile:native-cpu`, `bench:engines`, playtest `perf --file|--executable|--logcat`. What to verify next: `pnpm round:next`, `round:deletions`, `alpha:bar`. diff --git a/CLAUDE.md b/CLAUDE.md index e9f4a3cb22..502ad24733 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -82,7 +82,7 @@ pnpm native:verify:desktop # 300 native frames + a non-blank scr **CI.** The pre-push hook runs `pnpm ci:fast` drift checks only; it proves no runtime behaviour. `pnpm ci:local --full` runs the full board; `pnpm ci:local --affected --base origin/develop --target develop` runs what CI would select (dirty or unknown inputs fall back to full). A change touching only Markdown that no fixture consumes (not `AGENTS.md`/`CLAUDE.md`) runs no product CI job. Ordinary PRs into develop use the complete candidate diff: CI-only changes run CI contracts, exact template changes run scaffolder contracts and affected templates, and shared executable inputs keep the full safety board with starter as the default template smoke plus explicitly changed runtime/scenario kits. Template instruction and Markdown changes retain their contract lanes without adding runtime kits. Merge groups, explicit full runs, unknown inputs, main qualification and scheduled audits use fresh exhaustive qualification: all shipped templates, both golden journeys and the full supported native matrix. `ci-required` independently rejects a review plan for these events; Integration is a required reusable join on the same candidate, with each selected canonical job proven by a current-run/attempt receipt and independently checked completed-success API job; missing, skipped, cancelled, stale or unmapped receipts fail closed. Native per-leg authoritative completion and cold-path queue feasibility remain follow-ups before deferring any Android PR coverage. Template scenarios run once per selected kit; develop changes run one representative golden journey and full qualification retains both starter and platformer journeys. `ci-required` rejects missing or failed selected checks; retained contexts include `supply-chain`, `template-nonvisual`, `golden-path`, and native `desktop-parity` when applicable. Native host/platform tests run for native or shared runtime consumers, main qualification and unresolved scopes. Unsafe matrix/reusable verdict reuse stays disabled until authoritative complete coverage and per-leg routing exist. A new candidate runs fresh tests; only exact-run immutable build artifacts are shared. Details: `docs/PRDs/CI/PRD-483-impact-driven-ci-without-repeated-template-setup.md` and `docs/PRDs/done/PRD-373-selective-ci-and-develop-promotion.md`. Registry commands read auth from `~/.npmrc`; pass a checkout-local untracked `.npmrc` with `npm --userconfig .npmrc `. Never print either file. -TypeScript 5.9 `strict`, **ESM only**; relative imports end in `.js`. Versions come from the `catalog:` in `pnpm-workspace.yaml`, templates excepted. Biome formats — never hand-format. Interfaces are `I`-prefixed; classes and type aliases are not. Unit tests: `/__tests__/*.spec.ts`, vitest, node environment, DOM and GPU stubbed. +TypeScript 7 `strict` (the native `tsc`); `typescript` imports use the official TypeScript 6 compatibility API for AST scripts and tsup declarations, **ESM only**; relative imports end in `.js`. Versions come from the `catalog:` in `pnpm-workspace.yaml`, templates excepted. Biome formats — never hand-format. Interfaces are `I`-prefixed; classes and type aliases are not. Unit tests: `/__tests__/*.spec.ts`, vitest, node environment, DOM and GPU stubbed. **Existing harnesses — use them, don't rebuild them.** Capability lookup: `capabilities.json`, `packages/engine-mcp`. Behaviour on browser/Android/desktop/iOS: `packages/playtest --target `. User-like install and agent-friction arms: `pnpm sandbox`, `pnpm sweep:capture|judge|pair`, `scripts/score-blind.ts`. Visual baselines and LOC vs plain Three.js: `pnpm visuals`, `visuals:ab`, `visuals:baseline`, `pnpm tsx scripts/count-loc.ts`. Web-vs-native, profiling, frame meters: `pnpm parity` (`packages/runtime-native/conformance/registry.json`), `profile:native-cpu`, `bench:engines`, playtest `perf --file|--executable|--logcat`. What to verify next: `pnpm round:next`, `round:deletions`, `alpha:bar`. diff --git a/examples/abyss-framework/package.json b/examples/abyss-framework/package.json index e37fe7a7e9..0f396220fa 100644 --- a/examples/abyss-framework/package.json +++ b/examples/abyss-framework/package.json @@ -31,7 +31,8 @@ "create-threenative": "workspace:*", "tailwindcss": "catalog:", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" }, "optionalDependencies": { "@threenative/runtime-native": "workspace:*" diff --git a/examples/auto-lod/package.json b/examples/auto-lod/package.json index a050cc35b6..fdbd004fbf 100644 --- a/examples/auto-lod/package.json +++ b/examples/auto-lod/package.json @@ -22,6 +22,7 @@ "@threenative/runtime-native": "workspace:*", "@types/three": "0.185.3", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/examples/constrained-ik/package.json b/examples/constrained-ik/package.json index b67b0b3294..7f00c1cdd7 100644 --- a/examples/constrained-ik/package.json +++ b/examples/constrained-ik/package.json @@ -3,7 +3,9 @@ "version": "0.1.0", "private": true, "type": "module", - "threenative": { "nativeEntry": "src/game.ts" }, + "threenative": { + "nativeEntry": "src/game.ts" + }, "scripts": { "setup": "npm --prefix ../integrations/ik install --ignore-scripts --no-audit --no-fund", "dev": "vite --host 127.0.0.1", @@ -18,6 +20,7 @@ "devDependencies": { "@types/three": "0.185.3", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/examples/csg-doorway/package.json b/examples/csg-doorway/package.json index 365ce28aea..9b657ee3b0 100644 --- a/examples/csg-doorway/package.json +++ b/examples/csg-doorway/package.json @@ -24,6 +24,7 @@ "@threenative/runtime-native": "workspace:*", "@types/three": "0.185.3", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/examples/fps-friction/package.json b/examples/fps-friction/package.json index 8101406594..6353952eb6 100644 --- a/examples/fps-friction/package.json +++ b/examples/fps-friction/package.json @@ -18,6 +18,7 @@ "devDependencies": { "@types/three": "0.185.3", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/examples/native-smoke/package.json b/examples/native-smoke/package.json index 2006b8a15a..3b001594a3 100644 --- a/examples/native-smoke/package.json +++ b/examples/native-smoke/package.json @@ -21,6 +21,7 @@ "react": "catalog:", "react-dom": "catalog:", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/examples/prd140-picking/package.json b/examples/prd140-picking/package.json index 37c72c6902..f0607afa4c 100644 --- a/examples/prd140-picking/package.json +++ b/examples/prd140-picking/package.json @@ -17,6 +17,7 @@ "devDependencies": { "@types/three": "0.185.3", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/examples/prd162-replay/package.json b/examples/prd162-replay/package.json index a8fdbfb9a9..dced8ea336 100644 --- a/examples/prd162-replay/package.json +++ b/examples/prd162-replay/package.json @@ -19,7 +19,8 @@ "@types/three": "0.185.3", "create-threenative": "0.2.2", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" }, "optionalDependencies": { "@threenative/runtime-native": "0.2.0" diff --git a/examples/prd242-compute-lifetime/package.json b/examples/prd242-compute-lifetime/package.json index 44957fd491..c323ff38f6 100644 --- a/examples/prd242-compute-lifetime/package.json +++ b/examples/prd242-compute-lifetime/package.json @@ -17,6 +17,7 @@ "devDependencies": { "@types/three": "0.185.3", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/examples/prd243-cloth/package.json b/examples/prd243-cloth/package.json index 7b95d0c458..035150f0d7 100644 --- a/examples/prd243-cloth/package.json +++ b/examples/prd243-cloth/package.json @@ -17,6 +17,7 @@ "devDependencies": { "@types/three": "0.185.3", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/examples/prd249-fluid-field/package.json b/examples/prd249-fluid-field/package.json index c52d968e68..f463a41cc7 100644 --- a/examples/prd249-fluid-field/package.json +++ b/examples/prd249-fluid-field/package.json @@ -17,6 +17,7 @@ "devDependencies": { "@types/three": "0.185.3", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/examples/prd268-probe-volume/package.json b/examples/prd268-probe-volume/package.json index 1ecfad4027..036fc93bac 100644 --- a/examples/prd268-probe-volume/package.json +++ b/examples/prd268-probe-volume/package.json @@ -15,6 +15,7 @@ "devDependencies": { "@types/three": "0.185.3", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/examples/prd307-environment-cost/package.json b/examples/prd307-environment-cost/package.json index d7aab53f1d..d3e8791b73 100644 --- a/examples/prd307-environment-cost/package.json +++ b/examples/prd307-environment-cost/package.json @@ -15,6 +15,7 @@ "devDependencies": { "@types/three": "0.185.3", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/examples/prd314-clip-audit/package.json b/examples/prd314-clip-audit/package.json index 7e8046cd26..e4c1bb1d52 100644 --- a/examples/prd314-clip-audit/package.json +++ b/examples/prd314-clip-audit/package.json @@ -15,6 +15,7 @@ "devDependencies": { "@types/three": "0.185.3", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/examples/prd476-fluid-particles/package.json b/examples/prd476-fluid-particles/package.json index 10801707cf..5f9a9a4c24 100644 --- a/examples/prd476-fluid-particles/package.json +++ b/examples/prd476-fluid-particles/package.json @@ -18,6 +18,7 @@ "devDependencies": { "@types/three": "0.185.3", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/examples/prd476-fluid-particles/src/collision-proof.ts b/examples/prd476-fluid-particles/src/collision-proof.ts index dc09afd820..e35f6d1d41 100644 --- a/examples/prd476-fluid-particles/src/collision-proof.ts +++ b/examples/prd476-fluid-particles/src/collision-proof.ts @@ -71,7 +71,7 @@ async function start({ gateClosed = true, validationControl = false } = {}) { // Deliberately invalid actual WebGPU usage verifies that the scope producer rejects errors. if (validationControl) device.createBuffer({ size: 4, usage: 0 }); const adapterInfo = Object.fromEntries( - ["architecture", "description", "device", "vendor"].map((field) => [ + (["architecture", "description", "device", "vendor"] as const).map((field) => [ field, adapter.info[field] ?? "", ]), diff --git a/examples/quarry/package.json b/examples/quarry/package.json index d036442043..34d624f428 100644 --- a/examples/quarry/package.json +++ b/examples/quarry/package.json @@ -25,6 +25,7 @@ "pngjs": "7.0.0", "tsx": "4.23.5", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/examples/skinned-crowd/package.json b/examples/skinned-crowd/package.json index c5739409cd..a169aec225 100644 --- a/examples/skinned-crowd/package.json +++ b/examples/skinned-crowd/package.json @@ -3,7 +3,9 @@ "version": "0.1.0", "private": true, "type": "module", - "threenative": { "nativeEntry": "src/game.ts" }, + "threenative": { + "nativeEntry": "src/game.ts" + }, "scripts": { "build": "vite build", "build:desktop": "node ../../packages/runtime-native/scripts/bundle.mjs --project . --entry src/game.ts --target desktop --output dist/skinned-crowd-native.js", @@ -17,6 +19,7 @@ "devDependencies": { "@types/three": "0.185.3", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/examples/vfx-gallery/package.json b/examples/vfx-gallery/package.json index ec6deee2b0..cc4cf2fdc8 100644 --- a/examples/vfx-gallery/package.json +++ b/examples/vfx-gallery/package.json @@ -19,7 +19,8 @@ "@threenative/playtest": "workspace:*", "@types/three": "0.185.3", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:" }, "optionalDependencies": { "@threenative/runtime-native": "workspace:*" diff --git a/package.json b/package.json index 917d33af0d..205a2bfc5c 100644 --- a/package.json +++ b/package.json @@ -107,7 +107,8 @@ "pngjs": "7.0.0", "tsx": "4.23.5", "typescript": "catalog:", - "vitest": "4.1.10" + "vitest": "4.1.10", + "@typescript/native": "catalog:" }, "description": "ThreeNative is an application framework for games whose same vanilla Three.js source runs in the browser on WebGPU and on an owned C++ runtime for desktop and Android. It uses Godot-shaped node names, React and Tailwind for UI, and vanilla `three` underneath on every surface.", "pnpm": { diff --git a/packages/assets/package.json b/packages/assets/package.json index 9648fc7344..77da8576cb 100644 --- a/packages/assets/package.json +++ b/packages/assets/package.json @@ -42,7 +42,8 @@ "publint": "0.3.22", "threenative-blender-mcp": "workspace:*", "tsup": "8.5.1", - "typescript": "catalog:" + "typescript": "catalog:", + "@typescript/native": "catalog:" }, "dependencies": { "@gltf-transform/core": "catalog:", diff --git a/packages/blender-mcp/package.json b/packages/blender-mcp/package.json index 00f094cd49..65dd8fe3d0 100644 --- a/packages/blender-mcp/package.json +++ b/packages/blender-mcp/package.json @@ -45,6 +45,7 @@ "@gltf-transform/core": "catalog:", "publint": "0.3.22", "tsup": "8.5.1", - "typescript": "catalog:" + "typescript": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/packages/core/package.json b/packages/core/package.json index 00a8f85d45..e103199517 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -97,7 +97,8 @@ "threenative-blender-mcp": "workspace:*", "threenative-engine-mcp": "workspace:*", "tsup": "8.5.1", - "typescript": "catalog:" + "typescript": "catalog:", + "@typescript/native": "catalog:" }, "peerDependencies": { "@threenative/playtest": ">=0.3.4 <0.4.0", diff --git a/packages/create-threenative/__tests__/config.spec.ts b/packages/create-threenative/__tests__/config.spec.ts index f4717c46c1..7c63126ff3 100644 --- a/packages/create-threenative/__tests__/config.spec.ts +++ b/packages/create-threenative/__tests__/config.spec.ts @@ -135,7 +135,8 @@ export const rejected: IAudioConfig = { ${rejectedKey}: 2 }; `, ); const outcome = (await execFileAsync(process.execPath, [ - path.resolve("packages/core/node_modules/typescript/bin/tsc"), + path.resolve("packages/core/node_modules/@typescript/native/bin/tsc"), + "--ignoreConfig", "--noEmit", "--strict", "--target", diff --git a/packages/create-threenative/__tests__/scaffold.spec.ts b/packages/create-threenative/__tests__/scaffold.spec.ts index 0401caa66d..1000addd98 100644 --- a/packages/create-threenative/__tests__/scaffold.spec.ts +++ b/packages/create-threenative/__tests__/scaffold.spec.ts @@ -172,33 +172,22 @@ const BUG_REPORT_SKILL_PATHS = [ // docs/verification/prd339-exposure-proof/completion-consumer-8bf16f4.json. // Current develop c18a42b integration: all13 actual generated trees were byte-compared // against reviewed 8bf trees; only the copied Three compute-only Storage3DTexture patch changed. -// Recomputed 2026-10-04 for PRD-495's junk sweep: ten templates lost zero-reader declarations -// (several helpers in racing and shooter, one dead file in minimal), so their generated trees -// moved. platformer, snow and starter were untouched and keep their values. Every restamped value -// is the measured no-install tree, taken from the failing assertion this constant exists to raise -// and then re-run green. +// Re-measured on current develop plus TS7: restoring only each compiler manifest and +// rain's shader API import recovers all 13 develop fingerprints. const PRD_201_PARENT_SCAFFOLD_HASHES: Readonly> = { - // Recomputed 2026-10-05 on the merge of develop (PRD-345 backlight/dark defaults, #416) into - // the PRD-495 junk-cleanup branch: the merged tree carries both sides' template bytes — ten - // templates lost zero-reader declarations and all thirteen gained the bounded - // lighting/environment sources — so all thirteen generated trees were re-measured through - // createProject on that merged tree. Values below are the merged-tree measurement, not either - // side's. - // rain re-measured after Opus review restored templates/rain/tools/verify-noise-volume.mjs, - // the owner's manual storm-volume proof that the sweep had removed as junk. - "action-rpg": "4958ce9c3fc2a809262f05294481020a958fac17b70d454f648b59f09351f95a", - minimal: "572bf9ffd8b18a8b1e04186c4dfdec17216b77d31bf6d9ddc1a26ceaac3333fe", - platformer: "6de157b3c2cfa0034d48f8326b9f1a90fe90ebce3bf265ac91bae379482d017b", - puzzle: "1a83b3b4ec8de36970c589cdb50783620af09a8569f7690fb1beb2f4a7a2c2a6", - racing: "7f1ca6cd0655349331216dc9b8b08bc04406209bfc075b01af4029fedf9c6caa", - rain: "637afd242e4d7bc6ded1b102b1bd80bfbf289ed32878cdb1b20902e303292255", - rts: "c9b22f3b32846caf493699c365ffed4bcd139d418b7e4ce99dd9b67c42a325d8", - runner: "550b626387489ebf70a6a33aad2c437c52d7bdefef04b3a97c1a81413fa678f4", - sailing: "4cae0186fa08e10f6e732d79711ef42347ebd83e2b83448f656b1e6c63a8cdba", - shooter: "127fcdc64a2b48f7259c811391e07524c4e27b189f994c8a157268bd27f0d200", - snow: "791580f3b7314d4983a2cbf57b87b83be2e4740fa63e204327826120f1a0cf12", - starter: "5ab4d1828be78d82e7b83fbb2e07afa998372314ffb46accbaffd3dc4ad8cfdd", - "tower-defense": "f441c30e062185be72b7d97f63ff63c6eaf66b72a8689acdfea91e5b9907f8a2", + "action-rpg": "1e9e05b2ddd8a7b576f9b5e229a175e93db5cd5d8024b8e61b40d4f90894d631", + minimal: "a7f1a7481c6ed7667b1cdcc85990dbbccf2cbec59ce2b65799c232bf08c41918", + platformer: "8033728a0b8a14d2d42143d6665e0f3ee5822dfa320ee3f9fbae340e0082f7b9", + puzzle: "7dc75d6999576ff64d33a2ce52323334602a76f54fe29126a7a3ddfcececfac6", + racing: "8cded24d0f31cb9b76b5ab199ee0a4f1845c4466e96cc6ac49c2b3d8b8c277ac", + rain: "21dbd2a9100f3e1dfc9ea0a474fd5f3b429a55ae4e968a3741dccaf57e05bfc8", + rts: "d009ce4bf88df41780b6e98f9923c85266824e2f9e7e00075a48f779f2bfc578", + runner: "5c2c6c40fbee5d3c55c7cccbc05c6860ad62aadf9c65ae947095a9a2bbdbe79c", + sailing: "afe80626d46070fcd2ab3f520c603eaef09a07fb03acd49b1659b06a898a39be", + shooter: "c0f9f3110db4c8fa90d29ebaf37c3aa995654ee7ff3264dbd7033ac91b8e6f65", + snow: "5873bb82bab520d5f29c127161e1447c0657034b8f40e366617ad44686f4fa06", + starter: "4cd799d72f936554c2d61cfe70879f15dde39d3fc77a9183e48d891fc8f62473", + "tower-defense": "cf63b89d4f3939a05d65179291368b865e9b1491231a749339a81e1df4c40906", }; const GENERATED_SCAFFOLD_METADATA = diff --git a/packages/create-threenative/__tests__/template.spec.ts b/packages/create-threenative/__tests__/template.spec.ts index 92c9b73376..a153d6338b 100644 --- a/packages/create-threenative/__tests__/template.spec.ts +++ b/packages/create-threenative/__tests__/template.spec.ts @@ -140,12 +140,23 @@ async function linkScaffoldDependencies(target: string): Promise { path.resolve("packages/physics/node_modules/@dimforge/rapier3d-compat"), ); await linkDependency(target, "zustand", path.resolve("packages/core/node_modules/zustand")); - await linkDependency(target, "typescript", path.resolve("packages/core/node_modules/typescript")); + await linkDependency( + target, + "typescript", + path.resolve("packages/core/node_modules/@typescript/native"), + ); + if (packageJson.devDependencies?.["@typescript/typescript6"] !== undefined) { + await linkDependency( + target, + "@typescript/typescript6", + path.resolve("packages/core/node_modules/typescript"), + ); + } await linkDependency(target, "vite", await findPnpmPackage("vite")); await linkDependency(target, "@types/node", await findPnpmPackage("@types/node")); await mkdir(path.join(target, "node_modules/.bin"), { recursive: true }); await symlink( - path.resolve("packages/core/node_modules/typescript/bin/tsc"), + path.resolve("packages/core/node_modules/@typescript/native/bin/tsc"), path.join(target, "node_modules/.bin/tsc"), ); } diff --git a/packages/create-threenative/package.json b/packages/create-threenative/package.json index 40d92e4e71..003248fb75 100644 --- a/packages/create-threenative/package.json +++ b/packages/create-threenative/package.json @@ -86,7 +86,9 @@ "threenative-blender-mcp": "workspace:*", "tsup": "8.5.1", "typescript": "catalog:", - "vite": "catalog:" + "vite": "catalog:", + "@typescript/native": "catalog:", + "@typescript/typescript6": "catalog:" }, "peerDependencies": { "@threenative/assets": ">=0.3.5 <0.4.0" diff --git a/packages/create-threenative/templates/action-rpg/package.json b/packages/create-threenative/templates/action-rpg/package.json index 3d7ed0e93a..b37621d7a9 100644 --- a/packages/create-threenative/templates/action-rpg/package.json +++ b/packages/create-threenative/templates/action-rpg/package.json @@ -36,7 +36,7 @@ "esbuild": "0.27.0", "playwright": "1.62.1", "tailwindcss": "4.3.3", - "typescript": "5.9.3", + "typescript": "7.0.2", "vite": "8.2.0" }, "optionalDependencies": { diff --git a/packages/create-threenative/templates/minimal/package.json b/packages/create-threenative/templates/minimal/package.json index 327740be67..eae15cf9c0 100644 --- a/packages/create-threenative/templates/minimal/package.json +++ b/packages/create-threenative/templates/minimal/package.json @@ -27,7 +27,7 @@ "create-threenative": "0.2.8", "esbuild": "0.27.0", "playwright": "1.62.1", - "typescript": "5.9.3", + "typescript": "7.0.2", "vite": "8.2.0", "@gltf-transform/cli": "4.4.2" }, diff --git a/packages/create-threenative/templates/platformer/package.json b/packages/create-threenative/templates/platformer/package.json index 58773eb5e8..81b9255655 100644 --- a/packages/create-threenative/templates/platformer/package.json +++ b/packages/create-threenative/templates/platformer/package.json @@ -35,7 +35,7 @@ "esbuild": "0.27.0", "playwright": "1.62.1", "tailwindcss": "4.3.3", - "typescript": "5.9.3", + "typescript": "7.0.2", "vite": "8.2.0", "@gltf-transform/cli": "4.4.2" }, diff --git a/packages/create-threenative/templates/puzzle/package.json b/packages/create-threenative/templates/puzzle/package.json index 53870872fa..640452c52d 100644 --- a/packages/create-threenative/templates/puzzle/package.json +++ b/packages/create-threenative/templates/puzzle/package.json @@ -35,7 +35,7 @@ "esbuild": "0.27.0", "playwright": "1.62.1", "tailwindcss": "4.3.3", - "typescript": "5.9.3", + "typescript": "7.0.2", "vite": "8.2.0" }, "optionalDependencies": { diff --git a/packages/create-threenative/templates/racing/package.json b/packages/create-threenative/templates/racing/package.json index 046f2df284..c3c2c0d589 100644 --- a/packages/create-threenative/templates/racing/package.json +++ b/packages/create-threenative/templates/racing/package.json @@ -36,7 +36,7 @@ "esbuild": "0.27.0", "playwright": "1.62.1", "tailwindcss": "4.3.3", - "typescript": "5.9.3", + "typescript": "7.0.2", "vite": "8.2.0" }, "optionalDependencies": { diff --git a/packages/create-threenative/templates/rain/package.json b/packages/create-threenative/templates/rain/package.json index f796ec7e5d..d966b9244b 100644 --- a/packages/create-threenative/templates/rain/package.json +++ b/packages/create-threenative/templates/rain/package.json @@ -34,9 +34,10 @@ "esbuild": "0.27.0", "playwright": "1.62.1", "tailwindcss": "4.3.3", - "typescript": "5.9.3", + "typescript": "7.0.2", "vite": "8.2.0", - "@gltf-transform/cli": "4.4.2" + "@gltf-transform/cli": "4.4.2", + "@typescript/typescript6": "6.0.2" }, "optionalDependencies": { "@threenative/runtime-native": "0.3.4" diff --git a/packages/create-threenative/templates/rain/tools/generate-shaders.mjs b/packages/create-threenative/templates/rain/tools/generate-shaders.mjs index 9018119314..5b2fb6c86f 100644 --- a/packages/create-threenative/templates/rain/tools/generate-shaders.mjs +++ b/packages/create-threenative/templates/rain/tools/generate-shaders.mjs @@ -16,10 +16,10 @@ import { execFileSync } from "node:child_process"; import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"; import { dirname, relative, resolve } from "node:path"; import { fileURLToPath } from "node:url"; +import ts from "@typescript/typescript6"; import GLSLDecoder from "three/examples/jsm/transpiler/GLSLDecoder.js"; import TSLEncoder from "three/examples/jsm/transpiler/TSLEncoder.js"; import Transpiler from "three/examples/jsm/transpiler/Transpiler.js"; -import ts from "typescript"; const here = dirname(fileURLToPath(import.meta.url)); // The repository this template lives in, four levels up from `tools/`. A scaffolded project has no diff --git a/packages/create-threenative/templates/rts/package.json b/packages/create-threenative/templates/rts/package.json index 115f40a27c..d21175b12c 100644 --- a/packages/create-threenative/templates/rts/package.json +++ b/packages/create-threenative/templates/rts/package.json @@ -35,7 +35,7 @@ "esbuild": "0.27.0", "playwright": "1.62.1", "tailwindcss": "4.3.3", - "typescript": "5.9.3", + "typescript": "7.0.2", "vite": "8.2.0" }, "optionalDependencies": { diff --git a/packages/create-threenative/templates/runner/package.json b/packages/create-threenative/templates/runner/package.json index 53870872fa..640452c52d 100644 --- a/packages/create-threenative/templates/runner/package.json +++ b/packages/create-threenative/templates/runner/package.json @@ -35,7 +35,7 @@ "esbuild": "0.27.0", "playwright": "1.62.1", "tailwindcss": "4.3.3", - "typescript": "5.9.3", + "typescript": "7.0.2", "vite": "8.2.0" }, "optionalDependencies": { diff --git a/packages/create-threenative/templates/sailing/package.json b/packages/create-threenative/templates/sailing/package.json index cf9dcb7e75..a6189c5fec 100644 --- a/packages/create-threenative/templates/sailing/package.json +++ b/packages/create-threenative/templates/sailing/package.json @@ -36,7 +36,7 @@ "esbuild": "0.27.0", "playwright": "1.62.1", "tailwindcss": "4.3.3", - "typescript": "5.9.3", + "typescript": "7.0.2", "vite": "8.2.0", "@gltf-transform/cli": "4.4.2" }, diff --git a/packages/create-threenative/templates/shooter/package.json b/packages/create-threenative/templates/shooter/package.json index 3134aab85b..8aff2c0df4 100644 --- a/packages/create-threenative/templates/shooter/package.json +++ b/packages/create-threenative/templates/shooter/package.json @@ -35,7 +35,7 @@ "create-threenative": "0.2.8", "esbuild": "0.27.0", "tailwindcss": "4.3.3", - "typescript": "5.9.3", + "typescript": "7.0.2", "vite": "8.2.0", "@gltf-transform/cli": "4.4.2" }, diff --git a/packages/create-threenative/templates/snow/package.json b/packages/create-threenative/templates/snow/package.json index 9a53bc14f6..612c62fabb 100644 --- a/packages/create-threenative/templates/snow/package.json +++ b/packages/create-threenative/templates/snow/package.json @@ -36,7 +36,7 @@ "esbuild": "0.27.0", "playwright": "1.62.1", "tailwindcss": "4.3.3", - "typescript": "5.9.3", + "typescript": "7.0.2", "vite": "8.2.0", "@gltf-transform/cli": "4.4.2" }, diff --git a/packages/create-threenative/templates/starter/package.json b/packages/create-threenative/templates/starter/package.json index 90e58d1a8d..1f42a9ac48 100644 --- a/packages/create-threenative/templates/starter/package.json +++ b/packages/create-threenative/templates/starter/package.json @@ -37,7 +37,7 @@ "esbuild": "0.27.0", "playwright": "1.62.1", "tailwindcss": "4.3.3", - "typescript": "5.9.3", + "typescript": "7.0.2", "vite": "8.2.0", "@gltf-transform/cli": "4.4.2" }, diff --git a/packages/create-threenative/templates/tower-defense/package.json b/packages/create-threenative/templates/tower-defense/package.json index 53870872fa..640452c52d 100644 --- a/packages/create-threenative/templates/tower-defense/package.json +++ b/packages/create-threenative/templates/tower-defense/package.json @@ -35,7 +35,7 @@ "esbuild": "0.27.0", "playwright": "1.62.1", "tailwindcss": "4.3.3", - "typescript": "5.9.3", + "typescript": "7.0.2", "vite": "8.2.0" }, "optionalDependencies": { diff --git a/packages/engine-mcp/package.json b/packages/engine-mcp/package.json index 9ae708e684..18943dd137 100644 --- a/packages/engine-mcp/package.json +++ b/packages/engine-mcp/package.json @@ -48,6 +48,7 @@ "devDependencies": { "publint": "0.3.22", "tsup": "8.5.1", - "typescript": "catalog:" + "typescript": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/packages/metahuman/package.json b/packages/metahuman/package.json index 7a72461fc8..8e0adb5616 100644 --- a/packages/metahuman/package.json +++ b/packages/metahuman/package.json @@ -58,6 +58,7 @@ "publint": "0.3.22", "three": "catalog:", "tsup": "8.5.1", - "typescript": "catalog:" + "typescript": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/packages/physics/package.json b/packages/physics/package.json index 3b887a1fcf..3dc7453d04 100644 --- a/packages/physics/package.json +++ b/packages/physics/package.json @@ -53,6 +53,7 @@ "publint": "0.3.22", "three": "catalog:", "tsup": "8.5.1", - "typescript": "catalog:" + "typescript": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/packages/playtest/__tests__/trace-run.spec.ts b/packages/playtest/__tests__/trace-run.spec.ts index 8c1865e698..a88dc3aaba 100644 --- a/packages/playtest/__tests__/trace-run.spec.ts +++ b/packages/playtest/__tests__/trace-run.spec.ts @@ -8,6 +8,7 @@ const originalGpuDevice = Object.getOwnPropertyDescriptor(globalThis, "GPUDevice afterEach(() => { vi.restoreAllMocks(); Reflect.deleteProperty(globalThis, PIPELINE_DIAGNOSTICS); + Reflect.deleteProperty(globalThis, "__TN_TRACE_GPU_PIPELINES_INSTALLED__"); if (originalGpuDevice === undefined) Reflect.deleteProperty(globalThis, "GPUDevice"); else Object.defineProperty(globalThis, "GPUDevice", originalGpuDevice); }); @@ -54,7 +55,9 @@ describe("GPU pipeline diagnostics", () => { Object.defineProperty(globalThis, "GPUDevice", { configurable: true, value: FakeGpuDevice }); vi.spyOn(console, "error").mockImplementation(() => undefined); + const original = FakeGpuDevice.prototype.createRenderPipelineAsync; installGpuPipelineDiagnostics(); + expect(FakeGpuDevice.prototype.createRenderPipelineAsync).not.toBe(original); await new FakeGpuDevice().createRenderPipelineAsync({ depthStencil: { format: "depth24plus" } }); expect((globalThis as Record)[PIPELINE_DIAGNOSTICS]).toEqual([]); diff --git a/packages/playtest/package.json b/packages/playtest/package.json index a48e41a673..c7b39a531c 100644 --- a/packages/playtest/package.json +++ b/packages/playtest/package.json @@ -86,6 +86,7 @@ "publint": "0.3.22", "three": "catalog:", "tsup": "8.5.1", - "typescript": "catalog:" + "typescript": "catalog:", + "@typescript/native": "catalog:" } } diff --git a/packages/playtest/src/runner/observationSampling.ts b/packages/playtest/src/runner/observationSampling.ts index ad1ec09ac6..9b9cf1273d 100644 --- a/packages/playtest/src/runner/observationSampling.ts +++ b/packages/playtest/src/runner/observationSampling.ts @@ -153,9 +153,9 @@ export async function readCaptureProvenance( const observed = await page.evaluate(async () => { type Adapter = { features?: Iterable; - info?: Record; - limits?: Record; - requestAdapterInfo?: () => Promise>; + info?: Partial>; + limits?: Partial>; + requestAdapterInfo?: () => Promise>>; }; const gpu = (globalThis.navigator as Navigator & { gpu?: { requestAdapter(): Promise } }).gpu; // Which of the four ways an adapter can be unavailable actually happened is the diagnosis: @@ -181,7 +181,7 @@ export async function readCaptureProvenance( const info = infoCandidate === undefined || Object.keys(infoCandidate).length === 0 ? legacyInfo ?? infoCandidate : infoCandidate; - const adapterIdentityKeys = ["architecture", "description", "device", "vendor"]; + const adapterIdentityKeys = ["architecture", "description", "device", "vendor"] as const; const adapterIdentityEntries: Array<[string, string]> = info === undefined ? [] : adapterIdentityKeys.flatMap((key) => { @@ -195,7 +195,7 @@ export async function readCaptureProvenance( if (features.length > 0) webgpuAdapterEntries.push(["features", features.join(",")]); } if (adapterIdentityEntries.length > 0) { - for (const key of ["maxBindGroups", "maxTextureDimension2D", "maxStorageBufferBindingSize"]) { + for (const key of ["maxBindGroups", "maxTextureDimension2D", "maxStorageBufferBindingSize"] as const) { const value = adapter?.limits?.[key]; if (typeof value === "number" && Number.isFinite(value)) webgpuAdapterEntries.push([`limit.${key}`, String(value)]); } diff --git a/packages/playtest/src/runner/traceRun.ts b/packages/playtest/src/runner/traceRun.ts index f46f236f79..b991a8508f 100644 --- a/packages/playtest/src/runner/traceRun.ts +++ b/packages/playtest/src/runner/traceRun.ts @@ -166,7 +166,7 @@ async function recordTrace(args: ITraceArgs, output: string): Promise>; + readonly depthStencil?: { readonly format?: unknown }; readonly label?: string; }; type PipelineDiagnostic = { @@ -174,11 +174,12 @@ export function installGpuPipelineDiagnostics(): void { readonly label?: string; readonly stack: string; }; - const globals = globalThis as typeof globalThis & { - GPUDevice?: { prototype?: { createRenderPipelineAsync?: (descriptor: PipelineDescriptor) => Promise } }; + const globals: { + console: Pick; + GPUDevice?: { prototype?: { createRenderPipelineAsync?(descriptor: PipelineDescriptor): Promise } }; __TN_TRACE_INVALID_GPU_PIPELINES__?: PipelineDiagnostic[]; __TN_TRACE_GPU_PIPELINES_INSTALLED__?: boolean; - }; + } = globalThis; globals.__TN_TRACE_INVALID_GPU_PIPELINES__ = []; if (globals.__TN_TRACE_GPU_PIPELINES_INSTALLED__ === true) return; const prototype = globals.GPUDevice?.prototype; @@ -194,7 +195,7 @@ export function installGpuPipelineDiagnostics(): void { stack: new Error("createRenderPipelineAsync called without depthStencil.format").stack ?? "stack unavailable", }; globals.__TN_TRACE_INVALID_GPU_PIPELINES__?.push(diagnostic); - console.error("TN_INVALID_DEPTH_PIPELINE", diagnostic); + globals.console.error("TN_INVALID_DEPTH_PIPELINE", diagnostic); } return create.call(this, descriptor); }; diff --git a/packages/raw-unreal/package.json b/packages/raw-unreal/package.json index 16ff115810..1d337feff8 100644 --- a/packages/raw-unreal/package.json +++ b/packages/raw-unreal/package.json @@ -2,7 +2,7 @@ "name": "@threenative/raw-unreal", "version": "0.1.4", "license": "MIT", - "description": "Loads raw Unreal editor .uasset static meshes directly into Three.js geometry — UE5 FMeshDescription and UE4.18 FRawMesh layouts, with no interchange conversion.", + "description": "Loads raw Unreal editor .uasset static meshes directly into Three.js geometry \u2014 UE5 FMeshDescription and UE4.18 FRawMesh layouts, with no interchange conversion.", "keywords": ["threenative", "unreal", "uasset", "static-mesh", "three", "threejs", "loader"], "homepage": "https://github.com/ThreeNativeHQ/threenative#readme", "bugs": { @@ -40,7 +40,8 @@ "ooz-wasm": "2.0.0", "publint": "0.3.22", "tsup": "8.5.1", - "typescript": "catalog:" + "typescript": "catalog:", + "@typescript/native": "catalog:" }, "dependencies": { "three": "catalog:" diff --git a/packages/ueformat/package.json b/packages/ueformat/package.json index 5a05fc2ca5..d6a033702e 100644 --- a/packages/ueformat/package.json +++ b/packages/ueformat/package.json @@ -42,7 +42,8 @@ "@types/three": "0.185.3", "publint": "0.3.22", "tsup": "8.5.1", - "typescript": "catalog:" + "typescript": "catalog:", + "@typescript/native": "catalog:" }, "dependencies": { "fflate": "catalog:", diff --git a/packages/ui/package.json b/packages/ui/package.json index ec29c06bfd..05918d6a39 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -44,7 +44,8 @@ "react-dom": "catalog:", "react-test-renderer": "catalog:", "tsup": "8.5.1", - "typescript": "catalog:" + "typescript": "catalog:", + "@typescript/native": "catalog:" }, "scripts": { "build": "tsup --config tsup.config.ts && publint", diff --git a/patches/tsup@8.5.1.patch b/patches/tsup@8.5.1.patch new file mode 100644 index 0000000000..370f0b1a08 --- /dev/null +++ b/patches/tsup@8.5.1.patch @@ -0,0 +1,11 @@ +diff --git a/dist/rollup.js b/dist/rollup.js +--- a/dist/rollup.js ++++ b/dist/rollup.js +@@ -6834,7 +6834,6 @@ + tsconfig: options.tsconfig, + compilerOptions: { + ...compilerOptions, +- baseUrl: compilerOptions.baseUrl || ".", + // Ensure ".d.ts" modules are generated + declaration: true, + // Skip ".js" generation diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6035423074..f3b7cac698 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,6 +33,12 @@ catalogs: '@types/react-test-renderer': specifier: 19.1.0 version: 19.1.0 + '@typescript/native': + specifier: npm:typescript@7.0.2 + version: 7.0.2 + '@typescript/typescript6': + specifier: 6.0.2 + version: 6.0.2 '@vitejs/plugin-react': specifier: 6.0.5 version: 6.0.5 @@ -76,8 +82,8 @@ catalogs: specifier: 0.9.14 version: 0.9.14 typescript: - specifier: 5.9.3 - version: 5.9.3 + specifier: npm:@typescript/typescript6@6.0.2 + version: 6.0.2 vite: specifier: 8.2.0 version: 8.2.0 @@ -95,6 +101,9 @@ patchedDependencies: three@0.185.1: hash: c2e051df4c469d033b151cb9da5ce5112c90801aaaa984d6bfde0e09d80c9a66 path: packages/core/patches/three@0.185.1.patch + tsup@8.5.1: + hash: bdcba0cb0e0023b6ee572aae9dd40456c0c3bb0edd9c2abd290caed6ebef0770 + path: patches/tsup@8.5.1.patch importers: @@ -121,6 +130,9 @@ importers: '@types/pngjs': specifier: 6.0.5 version: 6.0.5 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 '@vitest/coverage-v8': specifier: 'catalog:' version: 4.1.10(vitest@4.1.10) @@ -141,7 +153,7 @@ importers: version: 4.23.5 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vitest: specifier: 4.1.10 version: 4.1.10(@types/node@20.19.43)(@vitest/coverage-v8@4.1.10)(vite@8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)) @@ -185,6 +197,9 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 '@vitejs/plugin-react': specifier: 'catalog:' version: 6.0.5(vite@8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5)) @@ -196,7 +211,7 @@ importers: version: 4.3.3 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -239,9 +254,12 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -258,9 +276,12 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -289,9 +310,12 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -327,9 +351,12 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -368,6 +395,9 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 react: specifier: 'catalog:' version: 19.2.0 @@ -376,7 +406,7 @@ importers: version: 19.2.0(react@19.2.0) typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -393,9 +423,12 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -415,12 +448,15 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 create-threenative: specifier: 0.2.2 version: 0.2.2 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -441,9 +477,12 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -466,9 +505,12 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -488,9 +530,12 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -507,9 +552,12 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -526,9 +574,12 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -545,9 +596,12 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -570,9 +624,12 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -598,6 +655,9 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 pngjs: specifier: 7.0.0 version: 7.0.0 @@ -606,7 +666,7 @@ importers: version: 4.23.5 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -623,9 +683,12 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -645,9 +708,12 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5) @@ -710,6 +776,9 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 ooz-wasm: specifier: 2.0.0 version: 2.0.0 @@ -721,25 +790,28 @@ importers: version: link:../blender-mcp tsup: specifier: 8.5.1 - version: 8.5.1(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5)(typescript@5.9.3) + version: 8.5.1(patch_hash=bdcba0cb0e0023b6ee572aae9dd40456c0c3bb0edd9c2abd290caed6ebef0770)(@typescript/typescript6@6.0.2)(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5) typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages/blender-mcp: devDependencies: '@gltf-transform/core': specifier: 'catalog:' version: 4.4.2 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 publint: specifier: 0.3.22 version: 0.3.22 tsup: specifier: 8.5.1 - version: 8.5.1(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5)(typescript@5.9.3) + version: 8.5.1(patch_hash=bdcba0cb0e0023b6ee572aae9dd40456c0c3bb0edd9c2abd290caed6ebef0770)(@typescript/typescript6@6.0.2)(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5) typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages/core: dependencies: @@ -771,6 +843,9 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 publint: specifier: 0.3.22 version: 0.3.22 @@ -788,10 +863,10 @@ importers: version: link:../engine-mcp tsup: specifier: 8.5.1 - version: 8.5.1(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5)(typescript@5.9.3) + version: 8.5.1(patch_hash=bdcba0cb0e0023b6ee572aae9dd40456c0c3bb0edd9c2abd290caed6ebef0770)(@typescript/typescript6@6.0.2)(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5) typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages/create-threenative: dependencies: @@ -835,6 +910,12 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 + '@typescript/typescript6': + specifier: 'catalog:' + version: 6.0.2 esbuild: specifier: 'catalog:' version: 0.27.0 @@ -846,25 +927,28 @@ importers: version: link:../blender-mcp tsup: specifier: 8.5.1 - version: 8.5.1(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5)(typescript@5.9.3) + version: 8.5.1(patch_hash=bdcba0cb0e0023b6ee572aae9dd40456c0c3bb0edd9c2abd290caed6ebef0770)(@typescript/typescript6@6.0.2)(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5) typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' vite: specifier: 'catalog:' version: 8.2.0(@types/node@20.19.43)(esbuild@0.27.0)(jiti@2.7.0)(tsx@4.23.5) packages/engine-mcp: devDependencies: + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 publint: specifier: 0.3.22 version: 0.3.22 tsup: specifier: 8.5.1 - version: 8.5.1(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5)(typescript@5.9.3) + version: 8.5.1(patch_hash=bdcba0cb0e0023b6ee572aae9dd40456c0c3bb0edd9c2abd290caed6ebef0770)(@typescript/typescript6@6.0.2)(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5) typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages/metahuman: devDependencies: @@ -874,6 +958,9 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 publint: specifier: 0.3.22 version: 0.3.22 @@ -882,10 +969,10 @@ importers: version: 0.185.1(patch_hash=c2e051df4c469d033b151cb9da5ce5112c90801aaaa984d6bfde0e09d80c9a66) tsup: specifier: 8.5.1 - version: 8.5.1(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5)(typescript@5.9.3) + version: 8.5.1(patch_hash=bdcba0cb0e0023b6ee572aae9dd40456c0c3bb0edd9c2abd290caed6ebef0770)(@typescript/typescript6@6.0.2)(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5) typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages/physics: dependencies: @@ -902,6 +989,9 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 publint: specifier: 0.3.22 version: 0.3.22 @@ -910,10 +1000,10 @@ importers: version: 0.185.1(patch_hash=c2e051df4c469d033b151cb9da5ce5112c90801aaaa984d6bfde0e09d80c9a66) tsup: specifier: 8.5.1 - version: 8.5.1(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5)(typescript@5.9.3) + version: 8.5.1(patch_hash=bdcba0cb0e0023b6ee572aae9dd40456c0c3bb0edd9c2abd290caed6ebef0770)(@typescript/typescript6@6.0.2)(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5) typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages/playtest: dependencies: @@ -927,6 +1017,9 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 playwright: specifier: 1.62.1 version: 1.62.1 @@ -938,10 +1031,10 @@ importers: version: 0.185.1(patch_hash=c2e051df4c469d033b151cb9da5ce5112c90801aaaa984d6bfde0e09d80c9a66) tsup: specifier: 8.5.1 - version: 8.5.1(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5)(typescript@5.9.3) + version: 8.5.1(patch_hash=bdcba0cb0e0023b6ee572aae9dd40456c0c3bb0edd9c2abd290caed6ebef0770)(@typescript/typescript6@6.0.2)(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5) typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages/raw-unreal: dependencies: @@ -955,6 +1048,9 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 ooz-wasm: specifier: 2.0.0 version: 2.0.0 @@ -963,10 +1059,10 @@ importers: version: 0.3.22 tsup: specifier: 8.5.1 - version: 8.5.1(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5)(typescript@5.9.3) + version: 8.5.1(patch_hash=bdcba0cb0e0023b6ee572aae9dd40456c0c3bb0edd9c2abd290caed6ebef0770)(@typescript/typescript6@6.0.2)(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5) typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages/runtime-native: dependencies: @@ -1008,15 +1104,18 @@ importers: '@types/three': specifier: 0.185.3 version: 0.185.3 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 publint: specifier: 0.3.22 version: 0.3.22 tsup: specifier: 8.5.1 - version: 8.5.1(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5)(typescript@5.9.3) + version: 8.5.1(patch_hash=bdcba0cb0e0023b6ee572aae9dd40456c0c3bb0edd9c2abd290caed6ebef0770)(@typescript/typescript6@6.0.2)(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5) typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages/ui: devDependencies: @@ -1032,6 +1131,9 @@ importers: '@types/react-test-renderer': specifier: 'catalog:' version: 19.1.0 + '@typescript/native': + specifier: 'catalog:' + version: typescript@7.0.2 publint: specifier: 0.3.22 version: 0.3.22 @@ -1046,10 +1148,10 @@ importers: version: 19.2.0(react@19.2.0) tsup: specifier: 8.5.1 - version: 8.5.1(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5)(typescript@5.9.3) + version: 8.5.1(patch_hash=bdcba0cb0e0023b6ee572aae9dd40456c0c3bb0edd9c2abd290caed6ebef0770)(@typescript/typescript6@6.0.2)(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5) typescript: specifier: 'catalog:' - version: 5.9.3 + version: '@typescript/typescript6@6.0.2' packages: @@ -2236,6 +2338,130 @@ packages: '@types/webxr@0.5.24': resolution: {integrity: sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==} + '@typescript/typescript-aix-ppc64@7.0.2': + resolution: {integrity: sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [aix] + + '@typescript/typescript-darwin-arm64@7.0.2': + resolution: {integrity: sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [darwin] + + '@typescript/typescript-darwin-x64@7.0.2': + resolution: {integrity: sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [darwin] + + '@typescript/typescript-freebsd-arm64@7.0.2': + resolution: {integrity: sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [freebsd] + + '@typescript/typescript-freebsd-x64@7.0.2': + resolution: {integrity: sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [freebsd] + + '@typescript/typescript-linux-arm64@7.0.2': + resolution: {integrity: sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [linux] + + '@typescript/typescript-linux-arm@7.0.2': + resolution: {integrity: sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==} + engines: {node: '>=16.20.0'} + cpu: [arm] + os: [linux] + + '@typescript/typescript-linux-loong64@7.0.2': + resolution: {integrity: sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==} + engines: {node: '>=16.20.0'} + cpu: [loong64] + os: [linux] + + '@typescript/typescript-linux-mips64el@7.0.2': + resolution: {integrity: sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==} + engines: {node: '>=16.20.0'} + cpu: [mips64el] + os: [linux] + + '@typescript/typescript-linux-ppc64@7.0.2': + resolution: {integrity: sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==} + engines: {node: '>=16.20.0'} + cpu: [ppc64] + os: [linux] + + '@typescript/typescript-linux-riscv64@7.0.2': + resolution: {integrity: sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==} + engines: {node: '>=16.20.0'} + cpu: [riscv64] + os: [linux] + + '@typescript/typescript-linux-s390x@7.0.2': + resolution: {integrity: sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==} + engines: {node: '>=16.20.0'} + cpu: [s390x] + os: [linux] + + '@typescript/typescript-linux-x64@7.0.2': + resolution: {integrity: sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [linux] + + '@typescript/typescript-netbsd-arm64@7.0.2': + resolution: {integrity: sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [netbsd] + + '@typescript/typescript-netbsd-x64@7.0.2': + resolution: {integrity: sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [netbsd] + + '@typescript/typescript-openbsd-arm64@7.0.2': + resolution: {integrity: sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [openbsd] + + '@typescript/typescript-openbsd-x64@7.0.2': + resolution: {integrity: sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [openbsd] + + '@typescript/typescript-sunos-x64@7.0.2': + resolution: {integrity: sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [sunos] + + '@typescript/typescript-win32-arm64@7.0.2': + resolution: {integrity: sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==} + engines: {node: '>=16.20.0'} + cpu: [arm64] + os: [win32] + + '@typescript/typescript-win32-x64@7.0.2': + resolution: {integrity: sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==} + engines: {node: '>=16.20.0'} + cpu: [x64] + os: [win32] + + '@typescript/typescript6@6.0.2': + resolution: {integrity: sha512-mbCddXd+jm7hfx7w2YU64/Av4/NqqeG3GoRZgxPcgoTxYjhrcfJRw9ULch71SS4G+Q3bOXFhRvPqjguN0Hyp5w==} + hasBin: true + '@vitejs/plugin-react@6.0.5': resolution: {integrity: sha512-BOVzne/NL162sMdResB25mUv+vWMF5NoAjNf09TeGlE7ZpszZWSD3winycicLJw72yeVsoCn/2kOhEuCvEShMA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3273,11 +3499,16 @@ packages: resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} engines: {node: '>= 18'} - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true + typescript@7.0.2: + resolution: {integrity: sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==} + engines: {node: '>=16.20.0'} + hasBin: true + ufo@1.6.4: resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} @@ -4247,6 +4478,70 @@ snapshots: '@types/webxr@0.5.24': {} + '@typescript/typescript-aix-ppc64@7.0.2': + optional: true + + '@typescript/typescript-darwin-arm64@7.0.2': + optional: true + + '@typescript/typescript-darwin-x64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-freebsd-x64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm64@7.0.2': + optional: true + + '@typescript/typescript-linux-arm@7.0.2': + optional: true + + '@typescript/typescript-linux-loong64@7.0.2': + optional: true + + '@typescript/typescript-linux-mips64el@7.0.2': + optional: true + + '@typescript/typescript-linux-ppc64@7.0.2': + optional: true + + '@typescript/typescript-linux-riscv64@7.0.2': + optional: true + + '@typescript/typescript-linux-s390x@7.0.2': + optional: true + + '@typescript/typescript-linux-x64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-netbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-arm64@7.0.2': + optional: true + + '@typescript/typescript-openbsd-x64@7.0.2': + optional: true + + '@typescript/typescript-sunos-x64@7.0.2': + optional: true + + '@typescript/typescript-win32-arm64@7.0.2': + optional: true + + '@typescript/typescript-win32-x64@7.0.2': + optional: true + + '@typescript/typescript6@6.0.2': + dependencies: + '@typescript/old': typescript@6.0.3 + '@vitejs/plugin-react@6.0.5(vite@8.2.0(@types/node@20.19.43)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.23.5))': dependencies: '@rolldown/pluginutils': 1.0.1 @@ -5336,7 +5631,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.1(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5)(typescript@5.9.3): + tsup@8.5.1(patch_hash=bdcba0cb0e0023b6ee572aae9dd40456c0c3bb0edd9c2abd290caed6ebef0770)(@typescript/typescript6@6.0.2)(jiti@2.7.0)(postcss@8.5.25)(tsx@4.23.5): dependencies: bundle-require: 5.1.0(esbuild@0.27.7) cac: 6.7.14 @@ -5357,7 +5652,7 @@ snapshots: tree-kill: 1.2.2 optionalDependencies: postcss: 8.5.25 - typescript: 5.9.3 + typescript: '@typescript/typescript6@6.0.2' transitivePeerDependencies: - jiti - supports-color @@ -5376,7 +5671,30 @@ snapshots: media-typer: 1.1.1 mime-types: 3.0.2 - typescript@5.9.3: {} + typescript@6.0.3: {} + + typescript@7.0.2: + optionalDependencies: + '@typescript/typescript-aix-ppc64': 7.0.2 + '@typescript/typescript-darwin-arm64': 7.0.2 + '@typescript/typescript-darwin-x64': 7.0.2 + '@typescript/typescript-freebsd-arm64': 7.0.2 + '@typescript/typescript-freebsd-x64': 7.0.2 + '@typescript/typescript-linux-arm': 7.0.2 + '@typescript/typescript-linux-arm64': 7.0.2 + '@typescript/typescript-linux-loong64': 7.0.2 + '@typescript/typescript-linux-mips64el': 7.0.2 + '@typescript/typescript-linux-ppc64': 7.0.2 + '@typescript/typescript-linux-riscv64': 7.0.2 + '@typescript/typescript-linux-s390x': 7.0.2 + '@typescript/typescript-linux-x64': 7.0.2 + '@typescript/typescript-netbsd-arm64': 7.0.2 + '@typescript/typescript-netbsd-x64': 7.0.2 + '@typescript/typescript-openbsd-arm64': 7.0.2 + '@typescript/typescript-openbsd-x64': 7.0.2 + '@typescript/typescript-sunos-x64': 7.0.2 + '@typescript/typescript-win32-arm64': 7.0.2 + '@typescript/typescript-win32-x64': 7.0.2 ufo@1.6.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 948cf4894e..cab8935ac3 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -26,7 +26,9 @@ catalog: '@tailwindcss/vite': 4.3.3 '@vitejs/plugin-react': 6.0.5 zod: 4.4.3 - typescript: 5.9.3 + typescript: npm:@typescript/typescript6@6.0.2 + '@typescript/native': npm:typescript@7.0.2 + '@typescript/typescript6': 6.0.2 vite: 8.2.0 vitest: 4.1.10 esbuild: 0.27.0 @@ -38,3 +40,4 @@ catalog: patchedDependencies: three@0.185.1: packages/core/patches/three@0.185.1.patch + tsup@8.5.1: patches/tsup@8.5.1.patch diff --git a/scripts/__tests__/typescript-toolchain.spec.ts b/scripts/__tests__/typescript-toolchain.spec.ts new file mode 100644 index 0000000000..d7a3787e1b --- /dev/null +++ b/scripts/__tests__/typescript-toolchain.spec.ts @@ -0,0 +1,100 @@ +import { spawnSync } from "node:child_process"; +import { mkdirSync, readFileSync, symlinkSync, writeFileSync } from "node:fs"; +import { createRequire } from "node:module"; +import path from "node:path"; +import ts from "typescript"; +import { describe, expect, it } from "vitest"; +import { makeTempDir } from "../../test-support/temp-dir.js"; +import { checkVersionPins } from "../check-version-pins.js"; + +const root = path.resolve("."); +const native = path.join(root, "node_modules/@typescript/native/bin/tsc"); + +describe("native compiler and compatibility API", () => { + it("keeps the shipped template compiler pins coherent", async () => { + expect(await checkVersionPins(root)).toEqual([]); + }); + it("runs TypeScript 7 while retaining the documented compiler API", () => { + const result = spawnSync(process.execPath, [native, "--version"], { encoding: "utf8" }); + expect(result.status).toBe(0); + expect(result.stdout.trim()).toBe("Version 7.0.2"); + const require = createRequire(path.join(root, "package.json")); + expect(require("typescript/package.json").name).toBe("@typescript/typescript6"); + expect(require("typescript/package.json").version).toBe("6.0.2"); + const source = ts.createSourceFile( + "fixture.ts", + "export const value = 1;", + ts.ScriptTarget.ES2022, + ); + expect(source.statements).toHaveLength(1); + const tsupRequire = createRequire( + require.resolve("tsup", { paths: [path.join(root, "packages/core")] }), + ); + expect(tsupRequire.resolve("typescript")).toBe(require.resolve("typescript")); + }); + + it("keeps scaffold compiler identity separate from rain's shader API dependency", () => { + const templates = path.join(root, "packages/create-threenative/templates"); + const rain = JSON.parse(readFileSync(path.join(templates, "rain/package.json"), "utf8")); + const starter = JSON.parse(readFileSync(path.join(templates, "starter/package.json"), "utf8")); + expect(starter.devDependencies.typescript).toBe("7.0.2"); + expect(rain.devDependencies.typescript).toBe("7.0.2"); + expect(rain.devDependencies["@typescript/typescript6"]).toBe("6.0.2"); + const rainRequire = createRequire(path.join(templates, "rain/package.json")); + const rootRequire = createRequire(path.join(root, "package.json")); + expect(rainRequire.resolve("@typescript/typescript6")).toBe(rootRequire.resolve("typescript")); + }); +}); + +describe("TypeScript 6 declaration worker compatibility", () => { + it("emits declarations without injecting baseUrl and preserves explicit options", async () => { + const cwd = await makeTempDir("threenative-tsup-compat-"); + writeFileSync( + path.join(cwd, "index.ts"), + "export interface IFixture { readonly value: number; }\n", + ); + writeFileSync(path.join(cwd, "package.json"), JSON.stringify({ type: "module" })); + mkdirSync(path.join(cwd, "node_modules")); + symlinkSync( + path.join(root, "node_modules/typescript"), + path.join(cwd, "node_modules/typescript"), + ); + const config = path.join(cwd, "tsconfig.json"); + const require = createRequire(path.join(root, "packages/core/package.json")); + const cli = path.join( + path.dirname(require.resolve("tsup/package.json")), + "dist/cli-default.js", + ); + const run = () => + spawnSync( + process.execPath, + [cli, "index.ts", "--dts-only", "--format", "esm", "--tsconfig", config], + { cwd, encoding: "utf8", timeout: 30_000 }, + ); + writeFileSync( + config, + JSON.stringify({ + compilerOptions: { strict: true, module: "ESNext", moduleResolution: "Bundler" }, + }), + ); + const valid = run(); + expect(valid.status, valid.stdout + valid.stderr).toBe(0); + expect(readFileSync(path.join(cwd, "dist/index.d.ts"), "utf8")).toContain( + "readonly value: number", + ); + writeFileSync( + config, + JSON.stringify({ + compilerOptions: { + strict: true, + module: "ESNext", + moduleResolution: "Bundler", + baseUrl: ".", + }, + }), + ); + const deprecated = run(); + expect(deprecated.status).not.toBe(0); + expect(deprecated.stdout + deprecated.stderr).toContain("Option 'baseUrl' is deprecated"); + }, 60_000); +}); diff --git a/scripts/make-sandbox.ts b/scripts/make-sandbox.ts index c7844515e5..9aeeb0b9df 100644 --- a/scripts/make-sandbox.ts +++ b/scripts/make-sandbox.ts @@ -445,7 +445,7 @@ function vanillaPackageJson(projectName: string, playtestTarball: string): strin devDependencies: { "@types/three": "0.185.3", playwright: "1.62.1", - typescript: "5.9.3", + typescript: "7.0.2", vite: "8.2.0", }, }, diff --git a/scripts/realism-effects-visual.ts b/scripts/realism-effects-visual.ts index cdc66aeef3..20438679d3 100644 --- a/scripts/realism-effects-visual.ts +++ b/scripts/realism-effects-visual.ts @@ -163,10 +163,10 @@ async function readAdapterInfo( gpu?: { requestAdapter(): Promise<{ info?: Record } | null> }; }; const adapter = await gpuNavigator.gpu?.requestAdapter(); - const raw = adapter?.info ?? {}; + const raw = adapter?.info; return Object.fromEntries( - ["architecture", "description", "device", "vendor"].flatMap((key) => { - const value = raw[key]; + (["architecture", "description", "device", "vendor"] as const).flatMap((key) => { + const value = raw?.[key]; return typeof value === "string" && value.trim() !== "" ? [[key, value]] : []; }), ); diff --git a/test-support/webgpu-provenance.ts b/test-support/webgpu-provenance.ts index a732e92b57..3e6f625a92 100644 --- a/test-support/webgpu-provenance.ts +++ b/test-support/webgpu-provenance.ts @@ -65,7 +65,9 @@ export async function readWebGpuAdapterInfo( return page.evaluate(async () => { const adapterIdentityKeys = ["architecture", "description", "device", "vendor"] as const; type Adapter = { - info?: Record; + info?: Partial< + Record<"architecture" | "description" | "device" | "vendor" | "isFallbackAdapter", unknown> + >; isFallbackAdapter?: boolean; }; @@ -84,7 +86,7 @@ export async function readWebGpuAdapterInfo( } function adapterFields( - info: Record, + info: NonNullable, adapter: Adapter, ): Record { const fallback = info.isFallbackAdapter ?? adapter.isFallbackAdapter; diff --git a/tsconfig.base.json b/tsconfig.base.json index b26a90fb97..2284878bdb 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -13,6 +13,7 @@ "noImplicitOverride": true, "moduleDetection": "force", "skipLibCheck": true, - "lib": ["ES2022", "DOM", "DOM.Iterable"] + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "types": ["node"] } } diff --git a/tsconfig.json b/tsconfig.json index e91e6217d8..8d9e4fa2f2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,13 +4,12 @@ "jsx": "react-jsx", "types": ["node"], "allowJs": false, - "baseUrl": ".", "paths": { - "@threenative/core": ["packages/core/src/index.ts"], - "@threenative/core/playtest": ["packages/core/src/playtest.ts"], - "@threenative/physics": ["packages/physics/src/index.ts"], - "@threenative/playtest": ["packages/playtest/src/index.ts"], - "@threenative/ui": ["packages/ui/src/index.ts"] + "@threenative/core": ["./packages/core/src/index.ts"], + "@threenative/core/playtest": ["./packages/core/src/playtest.ts"], + "@threenative/physics": ["./packages/physics/src/index.ts"], + "@threenative/playtest": ["./packages/playtest/src/index.ts"], + "@threenative/ui": ["./packages/ui/src/index.ts"] } }, "include": [