From 9d7caa7bcd435581d83d7d0c76409636621bf36c Mon Sep 17 00:00:00 2001 From: Stefnotch Date: Thu, 10 Jul 2025 22:20:49 +0200 Subject: [PATCH 01/17] Demo using Deno to check mini-parse and wesl --- tools/deno.json | 29 ++++++++++ tools/global.d.ts | 57 +++++++++++++++++++ .../mini-parse/src/stream/CachingStream.ts | 2 +- tools/packages/mini-parse/tsconfig.json | 4 -- tools/packages/wesl/src/LinkedWesl.ts | 10 ++-- tools/packages/wesl/src/WeslDevice.ts | 2 +- .../wesl/src/parse/WeslBaseGrammar.ts | 2 +- .../packages/wesl/src/test/Tokenizer.test.ts | 2 +- .../packages/wesl/src/test/WeslDevice.test.ts | 9 ++- tools/packages/wesl/tsconfig.json | 4 -- 10 files changed, 98 insertions(+), 23 deletions(-) create mode 100644 tools/deno.json create mode 100644 tools/global.d.ts delete mode 100644 tools/packages/mini-parse/tsconfig.json delete mode 100644 tools/packages/wesl/tsconfig.json diff --git a/tools/deno.json b/tools/deno.json new file mode 100644 index 000000000..44c440e90 --- /dev/null +++ b/tools/deno.json @@ -0,0 +1,29 @@ +{ + "workspace": ["./packages/mini-parse", "./packages/wesl"], + "exclude": [ + "dist", + "examples", + "lib", + "node_modules", + "scripts", + "packages/bench", + "packages/plugin-test", + "packages/random_wgsl", + "packages/test_pkg", + "packages/wesl-link", + "packages/wesl-packager", + "packages/wesl-plugin", + "packages/wesl-reflect", + "packages/wesl-tooling", + "**/dist/**" + ], + "compilerOptions": { + "lib": ["deno.window", "deno.unstable"], + "types": ["./global.d.ts"] + }, + "lint": { + "rules": { + "exclude": ["no-explicit-any"] + } + } +} diff --git a/tools/global.d.ts b/tools/global.d.ts new file mode 100644 index 000000000..c2d4bddeb --- /dev/null +++ b/tools/global.d.ts @@ -0,0 +1,57 @@ +/** @category GPU */ +interface GPUCompilationMessage { + readonly offset: number; + readonly length: number; +} + +// Stronger typing for event listeners. + +/** @internal */ + +interface __GPUDeviceEventMap { + uncapturederror: GPUUncapturedErrorEvent; +} + +// Extensions to the generated definition below. + +interface GPUDevice { + addEventListener( + type: K, + + listener: ( + this: GPUDevice, + + ev: __GPUDeviceEventMap[K], + ) => any, + + options?: boolean | AddEventListenerOptions, + ): void; + + addEventListener( + type: string, + + listener: EventListenerOrEventListenerObject, + + options?: boolean | AddEventListenerOptions, + ): void; + + removeEventListener( + type: K, + + listener: ( + this: GPUDevice, + + ev: __GPUDeviceEventMap[K], + ) => any, + + options?: boolean | EventListenerOptions, + ): void; + + removeEventListener( + type: string, + + listener: EventListenerOrEventListenerObject, + + options?: boolean | EventListenerOptions, + ): void; +} diff --git a/tools/packages/mini-parse/src/stream/CachingStream.ts b/tools/packages/mini-parse/src/stream/CachingStream.ts index 36dc9005c..b0641ff30 100644 --- a/tools/packages/mini-parse/src/stream/CachingStream.ts +++ b/tools/packages/mini-parse/src/stream/CachingStream.ts @@ -38,7 +38,7 @@ class Cache extends Map { this.max = max; } - set(k: K, v: V): this { + override set(k: K, v: V): this { if (this.size > this.max) { const first = this.keys().next().value; if (first) this.delete(first); diff --git a/tools/packages/mini-parse/tsconfig.json b/tools/packages/mini-parse/tsconfig.json deleted file mode 100644 index 0c4886c48..000000000 --- a/tools/packages/mini-parse/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "include": ["src", "*.ts"] -} diff --git a/tools/packages/wesl/src/LinkedWesl.ts b/tools/packages/wesl/src/LinkedWesl.ts index cbefa692a..6e01c62fc 100644 --- a/tools/packages/wesl/src/LinkedWesl.ts +++ b/tools/packages/wesl/src/LinkedWesl.ts @@ -1,7 +1,7 @@ import type { SrcMap } from "mini-parse"; import { assertThatDebug } from "./Assertions.ts"; import { errorHighlight, offsetToLineNumber } from "./Util.ts"; -import type { WeslDevice } from "./WeslDevice"; +import type { WeslDevice } from "./WeslDevice.ts"; /** Results of shader compilation. Has {@link WeslGPUCompilationMessage} * which are aware of the WESL module that an error was thrown from. */ @@ -109,7 +109,6 @@ export class LinkedWesl { compilationInfo: GPUCompilationInfo, ): WeslGPUCompilationInfo { return { - __brand: compilationInfo.__brand, messages: compilationInfo.messages.map(v => this.mapGPUCompilationMessage(v), ), @@ -123,9 +122,9 @@ export class LinkedWesl { const srcPosition = srcMap.destToSrc(message.offset); // LATER what if this gets mapped to a completely different place? const srcEndPosition = - message.length > 0 - ? srcMap.destToSrc(message.offset + message.length) - : srcPosition; + message.length > 0 ? + srcMap.destToSrc(message.offset + message.length) + : srcPosition; const length = srcEndPosition.position - srcPosition.position; const [lineNum, linePos] = offsetToLineNumber( @@ -134,7 +133,6 @@ export class LinkedWesl { ); return { - __brand: message.__brand, type: message.type, message: message.message, offset: srcPosition.position, diff --git a/tools/packages/wesl/src/WeslDevice.ts b/tools/packages/wesl/src/WeslDevice.ts index b31408207..b56af53de 100644 --- a/tools/packages/wesl/src/WeslDevice.ts +++ b/tools/packages/wesl/src/WeslDevice.ts @@ -1,5 +1,5 @@ import { throwClickableError } from "./ClickableError.ts"; -import type { ExtendedGPUValidationError } from "./LinkedWesl"; +import type { ExtendedGPUValidationError } from "./LinkedWesl.ts"; /** * We want the WebGPU compilation errors to point at WESL code. diff --git a/tools/packages/wesl/src/parse/WeslBaseGrammar.ts b/tools/packages/wesl/src/parse/WeslBaseGrammar.ts index 15a6e2832..ecf7ef7ba 100644 --- a/tools/packages/wesl/src/parse/WeslBaseGrammar.ts +++ b/tools/packages/wesl/src/parse/WeslBaseGrammar.ts @@ -1,5 +1,5 @@ import { kind, or, withSepPlus } from "mini-parse"; -import type { WeslTokenKind } from "./WeslStream"; +import type { WeslTokenKind } from "./WeslStream.ts"; export const word = kind("word"); export const keyword = kind("keyword"); diff --git a/tools/packages/wesl/src/test/Tokenizer.test.ts b/tools/packages/wesl/src/test/Tokenizer.test.ts index 5b3e1fcf4..9cc97e431 100644 --- a/tools/packages/wesl/src/test/Tokenizer.test.ts +++ b/tools/packages/wesl/src/test/Tokenizer.test.ts @@ -1,5 +1,5 @@ import { expect, test } from "vitest"; -import { WeslStream, type WeslToken } from "../parse/WeslStream"; +import { WeslStream, type WeslToken } from "../parse/WeslStream.ts"; test("tokenize empty string", () => { const tokenizer = new WeslStream(""); diff --git a/tools/packages/wesl/src/test/WeslDevice.test.ts b/tools/packages/wesl/src/test/WeslDevice.test.ts index 8386ca62a..8fd3171eb 100644 --- a/tools/packages/wesl/src/test/WeslDevice.test.ts +++ b/tools/packages/wesl/src/test/WeslDevice.test.ts @@ -1,8 +1,7 @@ -import { setTimeout } from "node:timers"; import { SrcMap } from "mini-parse"; import { expect, test, vi } from "vitest"; -import { LinkedWesl } from "../LinkedWesl"; -import { makeWeslDevice } from "../WeslDevice"; +import { LinkedWesl } from "../LinkedWesl.ts"; +import { makeWeslDevice } from "../WeslDevice.ts"; test("WeslDevice doesn't conflict with uncapturederror", async () => { const GPUDeviceMock = vi.fn(function (this: GPUDevice) { @@ -35,7 +34,7 @@ test("WeslDevice doesn't conflict with uncapturederror", async () => { const TIMEOUT = setTimeout(() => { reject(); }, 1000); - device.addEventListener("uncapturederror", ev => { + device.addEventListener("uncapturederror", (ev: any) => { clearTimeout(TIMEOUT); resolve(ev.error); }); @@ -71,7 +70,7 @@ test("WeslDevice doesn't conflict with popErrorsScope", async () => { const TIMEOUT = setTimeout(() => { reject(); }, 1000); - device.popErrorScope().then(v => { + device.popErrorScope().then((v: any) => { clearTimeout(TIMEOUT); resolve(v); }); diff --git a/tools/packages/wesl/tsconfig.json b/tools/packages/wesl/tsconfig.json deleted file mode 100644 index 968483865..000000000 --- a/tools/packages/wesl/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.browser.json", - "include": ["src", "*.ts", "scripts"] -} From 7c618c55d8b088bba4c76e0be0bbefba6c9e843d Mon Sep 17 00:00:00 2001 From: Stefnotch Date: Fri, 11 Jul 2025 23:57:33 +0200 Subject: [PATCH 02/17] More deno tweaks --- tools/deno.json | 4 ++-- tools/packages/bench/src/mitata-util/MitataStats.ts | 1 + tools/packages/bench/tsconfig.json | 4 ---- tools/packages/mini-parse/deno.json | 1 + tools/packages/wesl/deno.json | 1 + tools/packages/wesl/src/test/WeslDevice.test.ts | 4 ++-- 6 files changed, 7 insertions(+), 8 deletions(-) delete mode 100644 tools/packages/bench/tsconfig.json create mode 100644 tools/packages/mini-parse/deno.json create mode 100644 tools/packages/wesl/deno.json diff --git a/tools/deno.json b/tools/deno.json index 44c440e90..78165cc63 100644 --- a/tools/deno.json +++ b/tools/deno.json @@ -1,5 +1,5 @@ { - "workspace": ["./packages/mini-parse", "./packages/wesl"], + "workspace": ["./packages/wesl", "./packages/mini-parse"], "exclude": [ "dist", "examples", @@ -18,7 +18,7 @@ "**/dist/**" ], "compilerOptions": { - "lib": ["deno.window", "deno.unstable"], + "lib": ["deno.window"], "types": ["./global.d.ts"] }, "lint": { diff --git a/tools/packages/bench/src/mitata-util/MitataStats.ts b/tools/packages/bench/src/mitata-util/MitataStats.ts index 66f119dfd..d2f83413e 100644 --- a/tools/packages/bench/src/mitata-util/MitataStats.ts +++ b/tools/packages/bench/src/mitata-util/MitataStats.ts @@ -1,3 +1,4 @@ +// @ts-types="./Mitata.d.ts" import type { CpuCounts } from "@mitata/counters"; import type { MeasureResult } from "./MitataBench.ts"; import { mapValues } from "./Util.ts"; diff --git a/tools/packages/bench/tsconfig.json b/tools/packages/bench/tsconfig.json deleted file mode 100644 index 9de2c2eeb..000000000 --- a/tools/packages/bench/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.node.json", - "include": ["src", "bin"] -} diff --git a/tools/packages/mini-parse/deno.json b/tools/packages/mini-parse/deno.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/tools/packages/mini-parse/deno.json @@ -0,0 +1 @@ +{} diff --git a/tools/packages/wesl/deno.json b/tools/packages/wesl/deno.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/tools/packages/wesl/deno.json @@ -0,0 +1 @@ +{} diff --git a/tools/packages/wesl/src/test/WeslDevice.test.ts b/tools/packages/wesl/src/test/WeslDevice.test.ts index 8fd3171eb..baa82e572 100644 --- a/tools/packages/wesl/src/test/WeslDevice.test.ts +++ b/tools/packages/wesl/src/test/WeslDevice.test.ts @@ -34,7 +34,7 @@ test("WeslDevice doesn't conflict with uncapturederror", async () => { const TIMEOUT = setTimeout(() => { reject(); }, 1000); - device.addEventListener("uncapturederror", (ev: any) => { + device.addEventListener("uncapturederror", ev => { clearTimeout(TIMEOUT); resolve(ev.error); }); @@ -70,7 +70,7 @@ test("WeslDevice doesn't conflict with popErrorsScope", async () => { const TIMEOUT = setTimeout(() => { reject(); }, 1000); - device.popErrorScope().then((v: any) => { + device.popErrorScope().then(v => { clearTimeout(TIMEOUT); resolve(v); }); From 778b7cf7a86d0564548e4ed54b465efe4cc07dbe Mon Sep 17 00:00:00 2001 From: Stefnotch Date: Fri, 11 Jul 2025 23:59:50 +0200 Subject: [PATCH 03/17] Add more deno checking --- tools/deno.json | 7 +++++-- tools/packages/wesl-plugin/deno.json | 1 + tools/packages/wesl-plugin/src/plugins/farm.ts | 2 +- tools/packages/wesl-plugin/src/plugins/nuxt.ts | 6 +++--- tools/packages/wesl-plugin/tsconfig.json | 4 ---- 5 files changed, 10 insertions(+), 10 deletions(-) create mode 100644 tools/packages/wesl-plugin/deno.json delete mode 100644 tools/packages/wesl-plugin/tsconfig.json diff --git a/tools/deno.json b/tools/deno.json index 78165cc63..00e79b536 100644 --- a/tools/deno.json +++ b/tools/deno.json @@ -1,5 +1,9 @@ { - "workspace": ["./packages/wesl", "./packages/mini-parse"], + "workspace": [ + "./packages/wesl", + "./packages/mini-parse", + "./packages/wesl-plugin" + ], "exclude": [ "dist", "examples", @@ -12,7 +16,6 @@ "packages/test_pkg", "packages/wesl-link", "packages/wesl-packager", - "packages/wesl-plugin", "packages/wesl-reflect", "packages/wesl-tooling", "**/dist/**" diff --git a/tools/packages/wesl-plugin/deno.json b/tools/packages/wesl-plugin/deno.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/tools/packages/wesl-plugin/deno.json @@ -0,0 +1 @@ +{} diff --git a/tools/packages/wesl-plugin/src/plugins/farm.ts b/tools/packages/wesl-plugin/src/plugins/farm.ts index 32c33a9f3..d8ebad08e 100644 --- a/tools/packages/wesl-plugin/src/plugins/farm.ts +++ b/tools/packages/wesl-plugin/src/plugins/farm.ts @@ -1,4 +1,4 @@ import { createFarmPlugin } from "unplugin"; -import { weslPlugin } from "../WeslPlugin"; +import { weslPlugin } from "../WeslPlugin.ts"; export default createFarmPlugin(weslPlugin); diff --git a/tools/packages/wesl-plugin/src/plugins/nuxt.ts b/tools/packages/wesl-plugin/src/plugins/nuxt.ts index da190ac4b..809f3878f 100644 --- a/tools/packages/wesl-plugin/src/plugins/nuxt.ts +++ b/tools/packages/wesl-plugin/src/plugins/nuxt.ts @@ -1,7 +1,7 @@ import { addVitePlugin, addWebpackPlugin, defineNuxtModule } from "@nuxt/kit"; -import type { WeslPluginOptions } from "../WeslPluginOptions"; -import vite from "./vite"; -import webpack from "./webpack"; +import type { WeslPluginOptions } from "../WeslPluginOptions.ts"; +import vite from "./vite.ts"; +import webpack from "./webpack.ts"; import "@nuxt/schema"; type ModuleOptions = WeslPluginOptions; diff --git a/tools/packages/wesl-plugin/tsconfig.json b/tools/packages/wesl-plugin/tsconfig.json deleted file mode 100644 index 2bd96c89d..000000000 --- a/tools/packages/wesl-plugin/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.node.json", - "include": ["src"] -} From f4e160f552e14de8b3785c21d4bc2d593cd8206c Mon Sep 17 00:00:00 2001 From: Stefnotch Date: Sat, 12 Jul 2025 11:18:45 +0200 Subject: [PATCH 04/17] More Deno tweaks --- tools/.vscode/settings.json | 4 +--- tools/deno.json | 7 ++----- tools/packages/mini-parse/src/test/RegexMatchers.test.ts | 2 +- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/tools/.vscode/settings.json b/tools/.vscode/settings.json index 626c7277f..de3730860 100644 --- a/tools/.vscode/settings.json +++ b/tools/.vscode/settings.json @@ -4,7 +4,5 @@ "inspector/promises", "inspector" ], - "files.watcherExclude": { - "**/node_modules/**": true, - }, + "deno.enable": true } diff --git a/tools/deno.json b/tools/deno.json index 00e79b536..4d3f85adc 100644 --- a/tools/deno.json +++ b/tools/deno.json @@ -5,11 +5,8 @@ "./packages/wesl-plugin" ], "exclude": [ - "dist", - "examples", - "lib", - "node_modules", - "scripts", + "./examples", + "./scripts", "packages/bench", "packages/plugin-test", "packages/random_wgsl", diff --git a/tools/packages/mini-parse/src/test/RegexMatchers.test.ts b/tools/packages/mini-parse/src/test/RegexMatchers.test.ts index 1b4a34626..58622883a 100644 --- a/tools/packages/mini-parse/src/test/RegexMatchers.test.ts +++ b/tools/packages/mini-parse/src/test/RegexMatchers.test.ts @@ -1,5 +1,5 @@ import { expect, test } from "vitest"; -import { RegexMatchers } from "../stream/MatchersStream"; +import { RegexMatchers } from "../stream/MatchersStream.ts"; test("token matcher", () => { const m = new RegexMatchers({ From 82d972bbca230ed020acb8830bf2c923af8f5e9e Mon Sep 17 00:00:00 2001 From: Stefnotch Date: Sat, 12 Jul 2025 11:32:53 +0200 Subject: [PATCH 05/17] Convince deno to check the bench --- tools/deno.json | 4 ++-- tools/packages/bench/deno.json | 5 +++++ tools/packages/bench/src/experiments/BenchManually.ts | 11 ++++++++--- tools/packages/bench/src/mitata-util/MitataBench.ts | 5 +++-- 4 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 tools/packages/bench/deno.json diff --git a/tools/deno.json b/tools/deno.json index 4d3f85adc..3b65d93d7 100644 --- a/tools/deno.json +++ b/tools/deno.json @@ -1,13 +1,13 @@ { "workspace": [ - "./packages/wesl", + "./packages/bench", "./packages/mini-parse", + "./packages/wesl", "./packages/wesl-plugin" ], "exclude": [ "./examples", "./scripts", - "packages/bench", "packages/plugin-test", "packages/random_wgsl", "packages/test_pkg", diff --git a/tools/packages/bench/deno.json b/tools/packages/bench/deno.json new file mode 100644 index 000000000..08198102b --- /dev/null +++ b/tools/packages/bench/deno.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "types": ["@types/node"] + } +} diff --git a/tools/packages/bench/src/experiments/BenchManually.ts b/tools/packages/bench/src/experiments/BenchManually.ts index ac310b5b8..db7c248e8 100644 --- a/tools/packages/bench/src/experiments/BenchManually.ts +++ b/tools/packages/bench/src/experiments/BenchManually.ts @@ -1,14 +1,15 @@ import { _linkSync, type link } from "wesl"; import type { BenchTest } from "../../bin/bench.ts"; import { diffPercent } from "../table-util/Formatters.ts"; +import * as process from "node:process"; /** manual benchmark testing w/o mitata */ export function benchManually( tests: BenchTest[], baselineLink: typeof link, ): void { - const gc = globalThis.gc || (() => {}); - console.log("gc is", globalThis.gc ? "enabled" : "disabled"); + const gc = (globalThis as any).gc || (() => {}); + console.log("gc is", (globalThis as any).gc ? "enabled" : "disabled"); for (const test of tests) { const weslSrc = Object.fromEntries(test.files.entries()); const rootModuleName = test.mainFile; @@ -56,7 +57,11 @@ function _meanTime(times: bigint[]): number { } function medianTime(times: bigint[]): number { - const sorted = [...times].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0)); + const sorted = [...times].sort((a, b) => + a < b ? -1 + : a > b ? 1 + : 0, + ); const mid = Math.floor(sorted.length / 2); return Number(sorted[mid]) / 1e6; } diff --git a/tools/packages/bench/src/mitata-util/MitataBench.ts b/tools/packages/bench/src/mitata-util/MitataBench.ts index 2f4a120cd..cace8b7ca 100644 --- a/tools/packages/bench/src/mitata-util/MitataBench.ts +++ b/tools/packages/bench/src/mitata-util/MitataBench.ts @@ -6,6 +6,7 @@ import { mitataStats, type NodeGCTime, } from "./MitataStats.ts"; +import * as process from "node:process"; export type MeasureResult = Awaited>; const maxGcRecords = 1000; @@ -156,7 +157,7 @@ async function getHeapFn(): Promise<() => number> { /** fetch the runtime's function to call gc() manually */ function gcFunction(): () => void { - const gc = globalThis.gc || (globalThis as any).__gc; + const gc = (globalThis as any).gc || (globalThis as any).__gc; if (gc) return gc; console.warn( "MitataBench: gc() not available, run node/bun with --expose-gc", @@ -188,6 +189,6 @@ function analyzeGCEntries( return { inRun, before, after, total, collects }; } -async function wait(msec = 0): Promise { +function wait(msec = 0): Promise { return new Promise(resolve => setTimeout(resolve, msec)); } From 15a1b97f0d2373a51cb32bb9e45bc3516df9f836 Mon Sep 17 00:00:00 2001 From: Stefnotch Date: Sat, 12 Jul 2025 11:44:29 +0200 Subject: [PATCH 06/17] Bless wesl-link with Deno check --- tools/deno.json | 2 +- tools/packages/wesl-link/deno.json | 1 + tools/packages/wesl-link/src/cli.ts | 3 ++- tools/packages/wesl-link/src/main.ts | 3 ++- tools/packages/wesl-link/tsconfig.json | 4 ---- 5 files changed, 6 insertions(+), 7 deletions(-) create mode 100644 tools/packages/wesl-link/deno.json delete mode 100644 tools/packages/wesl-link/tsconfig.json diff --git a/tools/deno.json b/tools/deno.json index 3b65d93d7..973a8d0b3 100644 --- a/tools/deno.json +++ b/tools/deno.json @@ -3,6 +3,7 @@ "./packages/bench", "./packages/mini-parse", "./packages/wesl", + "./packages/wesl-link", "./packages/wesl-plugin" ], "exclude": [ @@ -11,7 +12,6 @@ "packages/plugin-test", "packages/random_wgsl", "packages/test_pkg", - "packages/wesl-link", "packages/wesl-packager", "packages/wesl-reflect", "packages/wesl-tooling", diff --git a/tools/packages/wesl-link/deno.json b/tools/packages/wesl-link/deno.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/tools/packages/wesl-link/deno.json @@ -0,0 +1 @@ +{} diff --git a/tools/packages/wesl-link/src/cli.ts b/tools/packages/wesl-link/src/cli.ts index d9d4bfccd..ba9734f58 100644 --- a/tools/packages/wesl-link/src/cli.ts +++ b/tools/packages/wesl-link/src/cli.ts @@ -12,6 +12,7 @@ import { parsedRegistry, parseIntoRegistry, } from "../../wesl/src/ParsedRegistry.ts"; // LATER fix import +import { cwd } from "node:process"; type CliArgs = Awaited>; @@ -70,7 +71,7 @@ async function parseArgs(args: string[]) { async function linkNormally(argv: CliArgs): Promise { const { baseDir, projectDir, rootModule: rootModuleName } = argv; - const weslRoot = baseDir || process.cwd(); + const weslRoot = baseDir || cwd(); const weslSrc = await loadModules(projectDir, weslRoot, argv.src); const projectDirAbs = path.resolve(projectDir, "src.js"); const projectDirUrl = pathToFileURL(projectDirAbs); diff --git a/tools/packages/wesl-link/src/main.ts b/tools/packages/wesl-link/src/main.ts index c9aa79836..0b4529a7e 100644 --- a/tools/packages/wesl-link/src/main.ts +++ b/tools/packages/wesl-link/src/main.ts @@ -1,7 +1,8 @@ #!/usr/bin/env node import { hideBin } from "yargs/helpers"; import { cli } from "./cli.ts"; +import { argv } from "node:process"; -const rawArgs = hideBin(process.argv); +const rawArgs = hideBin(argv); cli(rawArgs); diff --git a/tools/packages/wesl-link/tsconfig.json b/tools/packages/wesl-link/tsconfig.json deleted file mode 100644 index 41429f51e..000000000 --- a/tools/packages/wesl-link/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.node.json", - "include": ["src", "test"] -} From ef1b580866129ede2562f796455c4ac04dc8a67d Mon Sep 17 00:00:00 2001 From: Stefnotch Date: Sat, 12 Jul 2025 11:45:02 +0200 Subject: [PATCH 07/17] Add Deno to workspace recommendations --- tools/.vscode/extensions.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 tools/.vscode/extensions.json diff --git a/tools/.vscode/extensions.json b/tools/.vscode/extensions.json new file mode 100644 index 000000000..74baffcc4 --- /dev/null +++ b/tools/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["denoland.vscode-deno"] +} From c8b68fd72aaa08f05426bc1a04477087b06a01cb Mon Sep 17 00:00:00 2001 From: Stefnotch Date: Sat, 12 Jul 2025 11:47:56 +0200 Subject: [PATCH 08/17] Another one bites the Denosaur --- tools/deno.json | 4 ++-- tools/packages/wesl-tooling/deno.json | 1 + tools/packages/wesl-tooling/test/ParseDependencies.test.ts | 2 +- tools/packages/wesl-tooling/tsconfig.json | 4 ---- 4 files changed, 4 insertions(+), 7 deletions(-) create mode 100644 tools/packages/wesl-tooling/deno.json delete mode 100644 tools/packages/wesl-tooling/tsconfig.json diff --git a/tools/deno.json b/tools/deno.json index 973a8d0b3..d20a88d15 100644 --- a/tools/deno.json +++ b/tools/deno.json @@ -4,7 +4,8 @@ "./packages/mini-parse", "./packages/wesl", "./packages/wesl-link", - "./packages/wesl-plugin" + "./packages/wesl-plugin", + "./packages/wesl-tooling" ], "exclude": [ "./examples", @@ -14,7 +15,6 @@ "packages/test_pkg", "packages/wesl-packager", "packages/wesl-reflect", - "packages/wesl-tooling", "**/dist/**" ], "compilerOptions": { diff --git a/tools/packages/wesl-tooling/deno.json b/tools/packages/wesl-tooling/deno.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/tools/packages/wesl-tooling/deno.json @@ -0,0 +1 @@ +{} diff --git a/tools/packages/wesl-tooling/test/ParseDependencies.test.ts b/tools/packages/wesl-tooling/test/ParseDependencies.test.ts index 2cf364e7b..79dd69cd8 100644 --- a/tools/packages/wesl-tooling/test/ParseDependencies.test.ts +++ b/tools/packages/wesl-tooling/test/ParseDependencies.test.ts @@ -1,7 +1,7 @@ import { expect, test } from "vitest"; import { parseDependencies } from "../src/ParseDependencies.ts"; -const thisDir = import.meta.dirname; +const thisDir = import.meta.dirname!; test("parseDepenencies finds non-root dependency", () => { const srcs = { diff --git a/tools/packages/wesl-tooling/tsconfig.json b/tools/packages/wesl-tooling/tsconfig.json deleted file mode 100644 index 2bd96c89d..000000000 --- a/tools/packages/wesl-tooling/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.node.json", - "include": ["src"] -} From f50b049c6b063d31c19d9a061b04d60acfdc3495 Mon Sep 17 00:00:00 2001 From: Stefnotch Date: Sat, 12 Jul 2025 11:49:27 +0200 Subject: [PATCH 09/17] deno check this out --- tools/deno.json | 2 +- tools/packages/wesl-reflect/deno.json | 1 + tools/packages/wesl-reflect/src/types.d.ts | 2 ++ tools/packages/wesl-reflect/tsconfig.json | 4 ---- tools/packages/wesl-reflect/vitest.config.ts | 2 +- 5 files changed, 5 insertions(+), 6 deletions(-) create mode 100644 tools/packages/wesl-reflect/deno.json delete mode 100644 tools/packages/wesl-reflect/tsconfig.json diff --git a/tools/deno.json b/tools/deno.json index d20a88d15..8a5cbe691 100644 --- a/tools/deno.json +++ b/tools/deno.json @@ -5,6 +5,7 @@ "./packages/wesl", "./packages/wesl-link", "./packages/wesl-plugin", + "./packages/wesl-reflect", "./packages/wesl-tooling" ], "exclude": [ @@ -14,7 +15,6 @@ "packages/random_wgsl", "packages/test_pkg", "packages/wesl-packager", - "packages/wesl-reflect", "**/dist/**" ], "compilerOptions": { diff --git a/tools/packages/wesl-reflect/deno.json b/tools/packages/wesl-reflect/deno.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/tools/packages/wesl-reflect/deno.json @@ -0,0 +1 @@ +{} diff --git a/tools/packages/wesl-reflect/src/types.d.ts b/tools/packages/wesl-reflect/src/types.d.ts index 7eb8741db..dab44de51 100644 --- a/tools/packages/wesl-reflect/src/types.d.ts +++ b/tools/packages/wesl-reflect/src/types.d.ts @@ -1,3 +1,5 @@ +import type { WeslStruct } from "./SimpleReflectExtension.ts"; + /** @hidden */ declare module "*?simple_reflect" { export const structs: WeslStruct[]; diff --git a/tools/packages/wesl-reflect/tsconfig.json b/tools/packages/wesl-reflect/tsconfig.json deleted file mode 100644 index 554685725..000000000 --- a/tools/packages/wesl-reflect/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.node.json", - "include": ["*.ts", "src", "generated"] -} diff --git a/tools/packages/wesl-reflect/vitest.config.ts b/tools/packages/wesl-reflect/vitest.config.ts index 3e65d3ab4..2c2d751d9 100644 --- a/tools/packages/wesl-reflect/vitest.config.ts +++ b/tools/packages/wesl-reflect/vitest.config.ts @@ -2,7 +2,7 @@ import path from "node:path"; import { fileURLToPath } from "node:url"; import type { UserConfig } from "vite"; -import viteWesl from "../wesl-plugin/src/plugins/vite"; +import viteWesl from "../wesl-plugin/src/plugins/vite.ts"; import { simpleReflect } from "./src/SimpleReflectExtension.ts"; const thisPath = fileURLToPath(import.meta.url); From 0782d181b3fd8ffbb885f2088f2b0831d7466e1e Mon Sep 17 00:00:00 2001 From: Stefnotch Date: Sat, 12 Jul 2025 12:07:28 +0200 Subject: [PATCH 10/17] Add type checking for wesl-packagers --- tools/deno.json | 2 +- tools/packages/wesl-packager/deno.json | 1 + tools/packages/wesl-packager/src/PackageWesl.ts | 2 ++ tools/packages/wesl-packager/tsconfig.json | 4 ---- 4 files changed, 4 insertions(+), 5 deletions(-) create mode 100644 tools/packages/wesl-packager/deno.json delete mode 100644 tools/packages/wesl-packager/tsconfig.json diff --git a/tools/deno.json b/tools/deno.json index 8a5cbe691..06c10efb8 100644 --- a/tools/deno.json +++ b/tools/deno.json @@ -4,6 +4,7 @@ "./packages/mini-parse", "./packages/wesl", "./packages/wesl-link", + "./packages/wesl-packager", "./packages/wesl-plugin", "./packages/wesl-reflect", "./packages/wesl-tooling" @@ -14,7 +15,6 @@ "packages/plugin-test", "packages/random_wgsl", "packages/test_pkg", - "packages/wesl-packager", "**/dist/**" ], "compilerOptions": { diff --git a/tools/packages/wesl-packager/deno.json b/tools/packages/wesl-packager/deno.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/tools/packages/wesl-packager/deno.json @@ -0,0 +1 @@ +{} diff --git a/tools/packages/wesl-packager/src/PackageWesl.ts b/tools/packages/wesl-packager/src/PackageWesl.ts index afb8990bc..a46431a50 100644 --- a/tools/packages/wesl-packager/src/PackageWesl.ts +++ b/tools/packages/wesl-packager/src/PackageWesl.ts @@ -4,6 +4,8 @@ import path from "node:path"; import { Biome, Distribution } from "@biomejs/js-api"; import { noSuffix, type WeslBundle } from "wesl"; import { loadModules, parseDependencies, zip } from "wesl-tooling"; +// Ideally this would use an import attribute instead of this Vite+Deno bodge +// @ts-types="vite/client" import weslBundleDecl from "../../wesl/src/WeslBundle.ts?raw"; import type { CliArgs } from "./PackagerCli.ts"; diff --git a/tools/packages/wesl-packager/tsconfig.json b/tools/packages/wesl-packager/tsconfig.json deleted file mode 100644 index 6e9448b14..000000000 --- a/tools/packages/wesl-packager/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.node.json", - "include": ["src", "*.ts"] -} From 8f8ae78c0522cd15e4b89f26abfe3d88afaa3b17 Mon Sep 17 00:00:00 2001 From: Stefnotch Date: Sun, 13 Jul 2025 10:49:05 +0200 Subject: [PATCH 11/17] Re-add tsconfig files --- tools/packages/bench/tsconfig.json | 4 ++++ tools/packages/mini-parse/tsconfig.json | 4 ++++ tools/packages/wesl-link/tsconfig.json | 4 ++++ tools/packages/wesl-packager/tsconfig.json | 4 ++++ tools/packages/wesl-plugin/tsconfig.json | 4 ++++ tools/packages/wesl-reflect/tsconfig.json | 4 ++++ tools/packages/wesl-tooling/tsconfig.json | 4 ++++ tools/packages/wesl/tsconfig.json | 4 ++++ 8 files changed, 32 insertions(+) create mode 100644 tools/packages/bench/tsconfig.json create mode 100644 tools/packages/mini-parse/tsconfig.json create mode 100644 tools/packages/wesl-link/tsconfig.json create mode 100644 tools/packages/wesl-packager/tsconfig.json create mode 100644 tools/packages/wesl-plugin/tsconfig.json create mode 100644 tools/packages/wesl-reflect/tsconfig.json create mode 100644 tools/packages/wesl-tooling/tsconfig.json create mode 100644 tools/packages/wesl/tsconfig.json diff --git a/tools/packages/bench/tsconfig.json b/tools/packages/bench/tsconfig.json new file mode 100644 index 000000000..9de2c2eeb --- /dev/null +++ b/tools/packages/bench/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.node.json", + "include": ["src", "bin"] +} diff --git a/tools/packages/mini-parse/tsconfig.json b/tools/packages/mini-parse/tsconfig.json new file mode 100644 index 000000000..0c4886c48 --- /dev/null +++ b/tools/packages/mini-parse/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["src", "*.ts"] +} diff --git a/tools/packages/wesl-link/tsconfig.json b/tools/packages/wesl-link/tsconfig.json new file mode 100644 index 000000000..41429f51e --- /dev/null +++ b/tools/packages/wesl-link/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.node.json", + "include": ["src", "test"] +} diff --git a/tools/packages/wesl-packager/tsconfig.json b/tools/packages/wesl-packager/tsconfig.json new file mode 100644 index 000000000..6e9448b14 --- /dev/null +++ b/tools/packages/wesl-packager/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.node.json", + "include": ["src", "*.ts"] +} diff --git a/tools/packages/wesl-plugin/tsconfig.json b/tools/packages/wesl-plugin/tsconfig.json new file mode 100644 index 000000000..2bd96c89d --- /dev/null +++ b/tools/packages/wesl-plugin/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.node.json", + "include": ["src"] +} diff --git a/tools/packages/wesl-reflect/tsconfig.json b/tools/packages/wesl-reflect/tsconfig.json new file mode 100644 index 000000000..554685725 --- /dev/null +++ b/tools/packages/wesl-reflect/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.node.json", + "include": ["*.ts", "src", "generated"] +} diff --git a/tools/packages/wesl-tooling/tsconfig.json b/tools/packages/wesl-tooling/tsconfig.json new file mode 100644 index 000000000..2bd96c89d --- /dev/null +++ b/tools/packages/wesl-tooling/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.node.json", + "include": ["src"] +} diff --git a/tools/packages/wesl/tsconfig.json b/tools/packages/wesl/tsconfig.json new file mode 100644 index 000000000..968483865 --- /dev/null +++ b/tools/packages/wesl/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.browser.json", + "include": ["src", "*.ts", "scripts"] +} From 98d65a45a65d3b6bdb2bd02c3686a0d61a49b1bd Mon Sep 17 00:00:00 2001 From: Stefnotch Date: Mon, 14 Jul 2025 23:13:57 +0200 Subject: [PATCH 12/17] Nearly there --- tools/global.d.ts | 8 ++++++++ tools/packages/wesl/src/ClickableError.ts | 2 +- tools/packages/wesl/src/LinkedWesl.ts | 2 ++ tools/tsconfig.base.json | 4 +++- tools/tsconfig.browser.json | 3 ++- tools/tsconfig.node.json | 9 +++++---- 6 files changed, 21 insertions(+), 7 deletions(-) diff --git a/tools/global.d.ts b/tools/global.d.ts index c2d4bddeb..6c019fd66 100644 --- a/tools/global.d.ts +++ b/tools/global.d.ts @@ -55,3 +55,11 @@ interface GPUDevice { options?: boolean | EventListenerOptions, ): void; } + +interface GPUCompilationInfo { + __brand: "GPUCompilationInfo"; +} + +interface GPUCompilationMessage { + __brand: "GPUCompilationMessage"; +} diff --git a/tools/packages/wesl/src/ClickableError.ts b/tools/packages/wesl/src/ClickableError.ts index 02a481c06..aa1dc12ed 100644 --- a/tools/packages/wesl/src/ClickableError.ts +++ b/tools/packages/wesl/src/ClickableError.ts @@ -75,7 +75,7 @@ export function throwClickableError(params: ClickableErrorParams): void { let oldLimit = 0; // Supported on Chrome https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/stackTraceLimit if ("stackTraceLimit" in Error) { - oldLimit = Error.stackTraceLimit; + oldLimit = Error.stackTraceLimit as any as number; Error.stackTraceLimit = 1; } diff --git a/tools/packages/wesl/src/LinkedWesl.ts b/tools/packages/wesl/src/LinkedWesl.ts index 6e01c62fc..36abee287 100644 --- a/tools/packages/wesl/src/LinkedWesl.ts +++ b/tools/packages/wesl/src/LinkedWesl.ts @@ -109,6 +109,7 @@ export class LinkedWesl { compilationInfo: GPUCompilationInfo, ): WeslGPUCompilationInfo { return { + __brand: "GPUCompilationInfo", messages: compilationInfo.messages.map(v => this.mapGPUCompilationMessage(v), ), @@ -133,6 +134,7 @@ export class LinkedWesl { ); return { + __brand: "GPUCompilationMessage", type: message.type, message: message.message, offset: srcPosition.position, diff --git a/tools/tsconfig.base.json b/tools/tsconfig.base.json index 04cfbd728..83790f8a1 100644 --- a/tools/tsconfig.base.json +++ b/tools/tsconfig.base.json @@ -1,7 +1,8 @@ { "compilerOptions": { "target": "ES2024", // we can expect a modern version with WebGPU (but we want stablility, so not "esnext") - "lib": ["ES2024"], + /* We're running in both in Node.js and browsers, but we have to pick one of them for type checking */ + "lib": ["ES2024", "DOM"], "noEmit": true, // we don't transpile with tsgo, we just typecheck @@ -26,5 +27,6 @@ "noUncheckedSideEffectImports": true // "noUncheckedIndexedAccess": true // maybe later, some lint to fix first }, + "include": [], "exclude": ["**/node_modules", "**/dist"] } diff --git a/tools/tsconfig.browser.json b/tools/tsconfig.browser.json index 87ce6af6b..d1013fc74 100644 --- a/tools/tsconfig.browser.json +++ b/tools/tsconfig.browser.json @@ -3,5 +3,6 @@ "compilerOptions": { "lib": ["ES2024", "DOM", "DOM.Iterable"], "types": ["@webgpu/types"] - } + }, + "include": [] } diff --git a/tools/tsconfig.node.json b/tools/tsconfig.node.json index 3c43c9c69..daee064bd 100644 --- a/tools/tsconfig.node.json +++ b/tools/tsconfig.node.json @@ -1,8 +1,9 @@ { "extends": "./tsconfig.base.json", "compilerOptions": { - "types": ["node", "@webgpu/types"], - "target": "ESNext", // we presume that dev machines are up to date - "lib": ["ESNext"] - } + "lib": ["ESNext", "DOM"], + "types": ["@types/node", "@webgpu/types"], + "target": "ESNext" // we presume that dev machines are up to date + }, + "include": [] } From 6f39efc321445750e15cf7c99b83e89ff8121c89 Mon Sep 17 00:00:00 2001 From: Stefnotch Date: Tue, 15 Jul 2025 14:13:00 +0200 Subject: [PATCH 13/17] Beat Deno into submission --- tools/deno.json | 4 +- tools/global.d.ts | 65 ---------------------- tools/packages/bench/deno.json | 6 +- tools/packages/bench/src/LoadSimpleTest.ts | 5 +- tools/packages/wesl-plugin/deno.json | 4 +- tools/packages/wesl-reflect/src/types.d.ts | 8 ++- tools/tsconfig.base.json | 4 +- tools/tsconfig.browser.json | 3 +- 8 files changed, 17 insertions(+), 82 deletions(-) delete mode 100644 tools/global.d.ts diff --git a/tools/deno.json b/tools/deno.json index 06c10efb8..38b4f3b94 100644 --- a/tools/deno.json +++ b/tools/deno.json @@ -18,8 +18,8 @@ "**/dist/**" ], "compilerOptions": { - "lib": ["deno.window"], - "types": ["./global.d.ts"] + "lib": ["deno.ns", "dom"], + "types": ["@webgpu/types"] }, "lint": { "rules": { diff --git a/tools/global.d.ts b/tools/global.d.ts deleted file mode 100644 index 6c019fd66..000000000 --- a/tools/global.d.ts +++ /dev/null @@ -1,65 +0,0 @@ -/** @category GPU */ -interface GPUCompilationMessage { - readonly offset: number; - readonly length: number; -} - -// Stronger typing for event listeners. - -/** @internal */ - -interface __GPUDeviceEventMap { - uncapturederror: GPUUncapturedErrorEvent; -} - -// Extensions to the generated definition below. - -interface GPUDevice { - addEventListener( - type: K, - - listener: ( - this: GPUDevice, - - ev: __GPUDeviceEventMap[K], - ) => any, - - options?: boolean | AddEventListenerOptions, - ): void; - - addEventListener( - type: string, - - listener: EventListenerOrEventListenerObject, - - options?: boolean | AddEventListenerOptions, - ): void; - - removeEventListener( - type: K, - - listener: ( - this: GPUDevice, - - ev: __GPUDeviceEventMap[K], - ) => any, - - options?: boolean | EventListenerOptions, - ): void; - - removeEventListener( - type: string, - - listener: EventListenerOrEventListenerObject, - - options?: boolean | EventListenerOptions, - ): void; -} - -interface GPUCompilationInfo { - __brand: "GPUCompilationInfo"; -} - -interface GPUCompilationMessage { - __brand: "GPUCompilationMessage"; -} diff --git a/tools/packages/bench/deno.json b/tools/packages/bench/deno.json index 08198102b..0967ef424 100644 --- a/tools/packages/bench/deno.json +++ b/tools/packages/bench/deno.json @@ -1,5 +1 @@ -{ - "compilerOptions": { - "types": ["@types/node"] - } -} +{} diff --git a/tools/packages/bench/src/LoadSimpleTest.ts b/tools/packages/bench/src/LoadSimpleTest.ts index f9dc3826a..42831bd53 100644 --- a/tools/packages/bench/src/LoadSimpleTest.ts +++ b/tools/packages/bench/src/LoadSimpleTest.ts @@ -1,5 +1,6 @@ import * as simpleTests from "../src/experiments/SimpleTests.ts"; import { loadBenchmarkFiles } from "../src/LoadBenchmarks.ts"; +import { exit } from "node:process"; export interface SimpleTest { fn: (weslSrc: Record) => any; @@ -9,7 +10,7 @@ export interface SimpleTest { export function loadSimpleTest(simpleSelect: string | undefined): SimpleTest { if (!simpleSelect) { console.error("No test name prefix provided for --simple"); - process.exit(1); + exit(1); } const testEntry = Object.entries(simpleTests).find(([name]) => @@ -21,7 +22,7 @@ export function loadSimpleTest(simpleSelect: string | undefined): SimpleTest { `No test found with prefix '${simpleSelect}' in SimpleTests.ts`, ); console.error(`Available tests: ${Object.keys(simpleTests).join(", ")}`); - process.exit(1); + exit(1); } const [name, fn] = testEntry; return { name, fn }; diff --git a/tools/packages/wesl-plugin/deno.json b/tools/packages/wesl-plugin/deno.json index 0967ef424..3300b6e15 100644 --- a/tools/packages/wesl-plugin/deno.json +++ b/tools/packages/wesl-plugin/deno.json @@ -1 +1,3 @@ -{} +{ + "exclude": ["test/**"] +} diff --git a/tools/packages/wesl-reflect/src/types.d.ts b/tools/packages/wesl-reflect/src/types.d.ts index dab44de51..1f4ccbf5a 100644 --- a/tools/packages/wesl-reflect/src/types.d.ts +++ b/tools/packages/wesl-reflect/src/types.d.ts @@ -1,6 +1,8 @@ -import type { WeslStruct } from "./SimpleReflectExtension.ts"; - /** @hidden */ declare module "*?simple_reflect" { - export const structs: WeslStruct[]; + /** + * Need to put the import here for it to augment the global scope + * https://stackoverflow.com/a/51114250/3492994 + */ + export const structs: import("./SimpleReflectExtension.ts").WeslStruct[]; } diff --git a/tools/tsconfig.base.json b/tools/tsconfig.base.json index 83790f8a1..ac23b5819 100644 --- a/tools/tsconfig.base.json +++ b/tools/tsconfig.base.json @@ -24,9 +24,9 @@ /* strictness in TypeScript */ "strict": true, "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true + "noUncheckedSideEffectImports": true, // "noUncheckedIndexedAccess": true // maybe later, some lint to fix first + "types": [] }, - "include": [], "exclude": ["**/node_modules", "**/dist"] } diff --git a/tools/tsconfig.browser.json b/tools/tsconfig.browser.json index d1013fc74..87ce6af6b 100644 --- a/tools/tsconfig.browser.json +++ b/tools/tsconfig.browser.json @@ -3,6 +3,5 @@ "compilerOptions": { "lib": ["ES2024", "DOM", "DOM.Iterable"], "types": ["@webgpu/types"] - }, - "include": [] + } } From a052650af07f3681002d3c52cee37d8075758113 Mon Sep 17 00:00:00 2001 From: Stefnotch Date: Tue, 15 Jul 2025 14:19:48 +0200 Subject: [PATCH 14/17] Reformat --- tools/package.json | 9 ++------- tools/packages/bench/src/LoadSimpleTest.ts | 2 +- tools/packages/bench/src/experiments/BenchManually.ts | 8 ++------ tools/packages/bench/src/mitata-util/MitataBench.ts | 2 +- tools/packages/wesl-link/src/cli.ts | 2 +- tools/packages/wesl-link/src/main.ts | 2 +- tools/packages/wesl/src/LinkedWesl.ts | 6 +++--- tools/packages/wesl/src/test/BulkTests.test.ts | 10 ++++++---- 8 files changed, 17 insertions(+), 24 deletions(-) diff --git a/tools/package.json b/tools/package.json index 3cf06d5c5..0344b5e36 100644 --- a/tools/package.json +++ b/tools/package.json @@ -73,13 +73,8 @@ }, "packageManager": "pnpm@10.12.4", "pnpm": { - "ignoredBuiltDependencies": [ - "es5-ext" - ], - "onlyBuiltDependencies": [ - "core-js", - "esbuild" - ], + "ignoredBuiltDependencies": ["es5-ext"], + "onlyBuiltDependencies": ["core-js", "esbuild"], "overrides": {} } } diff --git a/tools/packages/bench/src/LoadSimpleTest.ts b/tools/packages/bench/src/LoadSimpleTest.ts index 42831bd53..53ee09e92 100644 --- a/tools/packages/bench/src/LoadSimpleTest.ts +++ b/tools/packages/bench/src/LoadSimpleTest.ts @@ -1,6 +1,6 @@ +import { exit } from "node:process"; import * as simpleTests from "../src/experiments/SimpleTests.ts"; import { loadBenchmarkFiles } from "../src/LoadBenchmarks.ts"; -import { exit } from "node:process"; export interface SimpleTest { fn: (weslSrc: Record) => any; diff --git a/tools/packages/bench/src/experiments/BenchManually.ts b/tools/packages/bench/src/experiments/BenchManually.ts index db7c248e8..bc1306d0a 100644 --- a/tools/packages/bench/src/experiments/BenchManually.ts +++ b/tools/packages/bench/src/experiments/BenchManually.ts @@ -1,7 +1,7 @@ +import * as process from "node:process"; import { _linkSync, type link } from "wesl"; import type { BenchTest } from "../../bin/bench.ts"; import { diffPercent } from "../table-util/Formatters.ts"; -import * as process from "node:process"; /** manual benchmark testing w/o mitata */ export function benchManually( @@ -57,11 +57,7 @@ function _meanTime(times: bigint[]): number { } function medianTime(times: bigint[]): number { - const sorted = [...times].sort((a, b) => - a < b ? -1 - : a > b ? 1 - : 0, - ); + const sorted = [...times].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0)); const mid = Math.floor(sorted.length / 2); return Number(sorted[mid]) / 1e6; } diff --git a/tools/packages/bench/src/mitata-util/MitataBench.ts b/tools/packages/bench/src/mitata-util/MitataBench.ts index cace8b7ca..2d26262d4 100644 --- a/tools/packages/bench/src/mitata-util/MitataBench.ts +++ b/tools/packages/bench/src/mitata-util/MitataBench.ts @@ -1,4 +1,5 @@ import { type PerformanceEntry, PerformanceObserver } from "node:perf_hooks"; +import * as process from "node:process"; import type * as mitataCountersType from "@mitata/counters"; import { measure } from "mitata"; import { @@ -6,7 +7,6 @@ import { mitataStats, type NodeGCTime, } from "./MitataStats.ts"; -import * as process from "node:process"; export type MeasureResult = Awaited>; const maxGcRecords = 1000; diff --git a/tools/packages/wesl-link/src/cli.ts b/tools/packages/wesl-link/src/cli.ts index ba9734f58..b9cdcf56d 100644 --- a/tools/packages/wesl-link/src/cli.ts +++ b/tools/packages/wesl-link/src/cli.ts @@ -1,4 +1,5 @@ import path from "node:path"; +import { cwd } from "node:process"; import { pathToFileURL } from "node:url"; import { enableTracing, log } from "mini-parse"; import { astToString, link, scopeToString } from "wesl"; @@ -12,7 +13,6 @@ import { parsedRegistry, parseIntoRegistry, } from "../../wesl/src/ParsedRegistry.ts"; // LATER fix import -import { cwd } from "node:process"; type CliArgs = Awaited>; diff --git a/tools/packages/wesl-link/src/main.ts b/tools/packages/wesl-link/src/main.ts index 0b4529a7e..365e38489 100644 --- a/tools/packages/wesl-link/src/main.ts +++ b/tools/packages/wesl-link/src/main.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node +import { argv } from "node:process"; import { hideBin } from "yargs/helpers"; import { cli } from "./cli.ts"; -import { argv } from "node:process"; const rawArgs = hideBin(argv); diff --git a/tools/packages/wesl/src/LinkedWesl.ts b/tools/packages/wesl/src/LinkedWesl.ts index 36abee287..6c99471e1 100644 --- a/tools/packages/wesl/src/LinkedWesl.ts +++ b/tools/packages/wesl/src/LinkedWesl.ts @@ -123,9 +123,9 @@ export class LinkedWesl { const srcPosition = srcMap.destToSrc(message.offset); // LATER what if this gets mapped to a completely different place? const srcEndPosition = - message.length > 0 ? - srcMap.destToSrc(message.offset + message.length) - : srcPosition; + message.length > 0 + ? srcMap.destToSrc(message.offset + message.length) + : srcPosition; const length = srcEndPosition.position - srcPosition.position; const [lineNum, linePos] = offsetToLineNumber( diff --git a/tools/packages/wesl/src/test/BulkTests.test.ts b/tools/packages/wesl/src/test/BulkTests.test.ts index 6372bb42e..e18c0dffb 100644 --- a/tools/packages/wesl/src/test/BulkTests.test.ts +++ b/tools/packages/wesl/src/test/BulkTests.test.ts @@ -1,8 +1,10 @@ -import { describe, test, expect } from "vitest"; -import { fetchBulkTest, BaseDir } from "wesl-testsuite/fetch-bulk-tests"; -import bulkTests from "wesl-testsuite/test-cases-json/bulkTests" with { type: "json" }; import fs from "node:fs/promises"; import { expectNoLogAsync } from "mini-parse/test-util"; +import { describe, expect, test } from "vitest"; +import { BaseDir, fetchBulkTest } from "wesl-testsuite/fetch-bulk-tests"; +import bulkTests from "wesl-testsuite/test-cases-json/bulkTests" with { + type: "json", +}; import { link } from "../Linker.ts"; import { stripWesl } from "./StripWesl.ts"; @@ -39,7 +41,7 @@ async function runBulkTest(baseDir: string, filePath: string): Promise { }, ); const result = await expectNoLogAsync(() => - link({ weslSrc: { ["main.wgsl"]: orig }, rootModuleName: "main" }), + link({ weslSrc: { "main.wgsl": orig }, rootModuleName: "main" }), ); expect(stripWesl(result.dest)).toBe(stripWesl(orig)); } From 6d96ccc17e934208ba7c9ced958d4df3b0e7bb91 Mon Sep 17 00:00:00 2001 From: Stefnotch Date: Tue, 29 Jul 2025 13:52:35 +0200 Subject: [PATCH 15/17] Config tweaks --- tools/packages/bench/bin/bench.ts | 1 + tools/packages/bench/bin/choose_baseline.mts | 6 +++--- tools/packages/mini-parse/test-util.vite.config.ts | 1 - tools/packages/mini-parse/vite.config.ts | 1 - tools/packages/mini-parse/vitest-util.vite.config.ts | 1 - tools/packages/plugin-test/vite.config.ts | 1 - tools/packages/wesl-reflect/vitest.config.ts | 1 - tools/packages/wesl/base.vite.config.ts | 1 - tools/packages/wesl/sizetest.vite.config.ts | 1 - tools/packages/wesl/src/LinkedWesl.ts | 6 +++--- tools/packages/wesl/src/test/BulkTests.test.ts | 4 +--- tools/packages/wesl/vite.config.ts | 1 - tools/packages/wesl/vitest.config.ts | 1 - tools/tsconfig.base.json | 1 + tools/tsconfig.node.json | 2 +- 15 files changed, 10 insertions(+), 19 deletions(-) diff --git a/tools/packages/bench/bin/bench.ts b/tools/packages/bench/bin/bench.ts index f9abe02f9..733a77f19 100644 --- a/tools/packages/bench/bin/bench.ts +++ b/tools/packages/bench/bin/bench.ts @@ -16,6 +16,7 @@ import { mitataBench, } from "../src/mitata-util/MitataBench.ts"; import type { MeasuredResults } from "../src/mitata-util/MitataStats.ts"; +import process from "node:process"; export interface BenchTest { /** name of the test */ diff --git a/tools/packages/bench/bin/choose_baseline.mts b/tools/packages/bench/bin/choose_baseline.mts index 3e6922824..8d23b8b3c 100755 --- a/tools/packages/bench/bin/choose_baseline.mts +++ b/tools/packages/bench/bin/choose_baseline.mts @@ -3,6 +3,7 @@ import { execSync } from "node:child_process"; import { existsSync, mkdirSync, rmSync } from "node:fs"; import path from "node:path"; +import process from "node:process"; /** * a node script get an earlier copy of the repo as a baseline for benchmark comparisons @@ -25,9 +26,8 @@ import path from "node:path"; const version = process.argv[2]; if (!version) { - const scriptName = process.argv[1] - ? process.argv[1].split("/").pop() - : "checkout_baseline"; + const scriptName = + process.argv[1] ? process.argv[1].split("/").pop() : "checkout_baseline"; console.error(`Usage: ${scriptName} `); process.exit(1); } diff --git a/tools/packages/mini-parse/test-util.vite.config.ts b/tools/packages/mini-parse/test-util.vite.config.ts index f0fcd026e..88c0dfd34 100644 --- a/tools/packages/mini-parse/test-util.vite.config.ts +++ b/tools/packages/mini-parse/test-util.vite.config.ts @@ -1,5 +1,4 @@ import { resolve } from "node:path"; -/// import { defineConfig, type LibraryOptions } from "vite"; import { baseViteConfig } from "./base.vite.config.ts"; diff --git a/tools/packages/mini-parse/vite.config.ts b/tools/packages/mini-parse/vite.config.ts index 0642feed5..c68173203 100644 --- a/tools/packages/mini-parse/vite.config.ts +++ b/tools/packages/mini-parse/vite.config.ts @@ -1,4 +1,3 @@ -/// import { defineConfig, type LibraryOptions } from "vite"; import { baseViteConfig } from "./base.vite.config.ts"; diff --git a/tools/packages/mini-parse/vitest-util.vite.config.ts b/tools/packages/mini-parse/vitest-util.vite.config.ts index 65cccfd76..037ab2a9c 100644 --- a/tools/packages/mini-parse/vitest-util.vite.config.ts +++ b/tools/packages/mini-parse/vitest-util.vite.config.ts @@ -1,5 +1,4 @@ import { resolve } from "node:path"; -/// import { defineConfig, type LibraryOptions } from "vite"; import { baseViteConfig } from "./base.vite.config.ts"; diff --git a/tools/packages/plugin-test/vite.config.ts b/tools/packages/plugin-test/vite.config.ts index d30eec443..c02828182 100644 --- a/tools/packages/plugin-test/vite.config.ts +++ b/tools/packages/plugin-test/vite.config.ts @@ -1,4 +1,3 @@ -/// import path from "node:path"; import { fileURLToPath } from "node:url"; import type { Plugin, UserConfig } from "vite"; diff --git a/tools/packages/wesl-reflect/vitest.config.ts b/tools/packages/wesl-reflect/vitest.config.ts index 2c2d751d9..8c1b3b5a0 100644 --- a/tools/packages/wesl-reflect/vitest.config.ts +++ b/tools/packages/wesl-reflect/vitest.config.ts @@ -1,4 +1,3 @@ -/// import path from "node:path"; import { fileURLToPath } from "node:url"; import type { UserConfig } from "vite"; diff --git a/tools/packages/wesl/base.vite.config.ts b/tools/packages/wesl/base.vite.config.ts index 89849e77d..f54c9ad82 100644 --- a/tools/packages/wesl/base.vite.config.ts +++ b/tools/packages/wesl/base.vite.config.ts @@ -1,4 +1,3 @@ -/// import { resolve } from "node:path"; import type { UserConfig } from "vite"; import dts from "vite-plugin-dts"; diff --git a/tools/packages/wesl/sizetest.vite.config.ts b/tools/packages/wesl/sizetest.vite.config.ts index a15f46887..4f1ebafb8 100644 --- a/tools/packages/wesl/sizetest.vite.config.ts +++ b/tools/packages/wesl/sizetest.vite.config.ts @@ -1,5 +1,4 @@ import { resolve } from "node:path"; -/// import { defineConfig, type LibraryOptions } from "vite"; import { baseViteConfig } from "./base.vite.config.ts"; diff --git a/tools/packages/wesl/src/LinkedWesl.ts b/tools/packages/wesl/src/LinkedWesl.ts index 6c99471e1..36abee287 100644 --- a/tools/packages/wesl/src/LinkedWesl.ts +++ b/tools/packages/wesl/src/LinkedWesl.ts @@ -123,9 +123,9 @@ export class LinkedWesl { const srcPosition = srcMap.destToSrc(message.offset); // LATER what if this gets mapped to a completely different place? const srcEndPosition = - message.length > 0 - ? srcMap.destToSrc(message.offset + message.length) - : srcPosition; + message.length > 0 ? + srcMap.destToSrc(message.offset + message.length) + : srcPosition; const length = srcEndPosition.position - srcPosition.position; const [lineNum, linePos] = offsetToLineNumber( diff --git a/tools/packages/wesl/src/test/BulkTests.test.ts b/tools/packages/wesl/src/test/BulkTests.test.ts index e18c0dffb..24abbef66 100644 --- a/tools/packages/wesl/src/test/BulkTests.test.ts +++ b/tools/packages/wesl/src/test/BulkTests.test.ts @@ -2,9 +2,7 @@ import fs from "node:fs/promises"; import { expectNoLogAsync } from "mini-parse/test-util"; import { describe, expect, test } from "vitest"; import { BaseDir, fetchBulkTest } from "wesl-testsuite/fetch-bulk-tests"; -import bulkTests from "wesl-testsuite/test-cases-json/bulkTests" with { - type: "json", -}; +import bulkTests from "wesl-testsuite/test-cases-json/bulkTests" with { type: "json" }; import { link } from "../Linker.ts"; import { stripWesl } from "./StripWesl.ts"; diff --git a/tools/packages/wesl/vite.config.ts b/tools/packages/wesl/vite.config.ts index a44bd7381..932cf3101 100644 --- a/tools/packages/wesl/vite.config.ts +++ b/tools/packages/wesl/vite.config.ts @@ -1,4 +1,3 @@ -/// import { defineConfig } from "vite"; import { baseViteConfig } from "./base.vite.config.ts"; diff --git a/tools/packages/wesl/vitest.config.ts b/tools/packages/wesl/vitest.config.ts index 784db15c6..a3f1f0e36 100644 --- a/tools/packages/wesl/vitest.config.ts +++ b/tools/packages/wesl/vitest.config.ts @@ -1,4 +1,3 @@ -/// import { mergeConfig } from "vite"; import { baseViteConfig } from "./base.vite.config.ts"; diff --git a/tools/tsconfig.base.json b/tools/tsconfig.base.json index ac23b5819..83d228061 100644 --- a/tools/tsconfig.base.json +++ b/tools/tsconfig.base.json @@ -28,5 +28,6 @@ // "noUncheckedIndexedAccess": true // maybe later, some lint to fix first "types": [] }, + "include": [], "exclude": ["**/node_modules", "**/dist"] } diff --git a/tools/tsconfig.node.json b/tools/tsconfig.node.json index daee064bd..cef9a065e 100644 --- a/tools/tsconfig.node.json +++ b/tools/tsconfig.node.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig.base.json", "compilerOptions": { - "lib": ["ESNext", "DOM"], + "lib": ["ESNext"], "types": ["@types/node", "@webgpu/types"], "target": "ESNext" // we presume that dev machines are up to date }, From a811cf813ef205156a458bdc292abfb3003a5f1d Mon Sep 17 00:00:00 2001 From: Stefnotch Date: Tue, 29 Jul 2025 20:28:25 +0200 Subject: [PATCH 16/17] Tweak Deno to behave like Typescript --- tools/deno.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/deno.json b/tools/deno.json index 38b4f3b94..e55d7d0a1 100644 --- a/tools/deno.json +++ b/tools/deno.json @@ -18,7 +18,8 @@ "**/dist/**" ], "compilerOptions": { - "lib": ["deno.ns", "dom"], + "strict": true, + "lib": ["deno.ns", "dom", "dom.iterable"], "types": ["@webgpu/types"] }, "lint": { From 247f2fb2e96673244ab2badcdee67abac6724b6c Mon Sep 17 00:00:00 2001 From: Stefnotch Date: Tue, 29 Jul 2025 20:29:00 +0200 Subject: [PATCH 17/17] Reformat --- tools/packages/bench/bin/bench.ts | 2 +- tools/packages/bench/bin/choose_baseline.mts | 5 +++-- tools/packages/wesl/src/LinkedWesl.ts | 6 +++--- tools/packages/wesl/src/test/BulkTests.test.ts | 4 +++- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/tools/packages/bench/bin/bench.ts b/tools/packages/bench/bin/bench.ts index 733a77f19..075415aba 100644 --- a/tools/packages/bench/bin/bench.ts +++ b/tools/packages/bench/bin/bench.ts @@ -1,4 +1,5 @@ import path from "node:path"; +import process from "node:process"; import { link } from "wesl"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; @@ -16,7 +17,6 @@ import { mitataBench, } from "../src/mitata-util/MitataBench.ts"; import type { MeasuredResults } from "../src/mitata-util/MitataStats.ts"; -import process from "node:process"; export interface BenchTest { /** name of the test */ diff --git a/tools/packages/bench/bin/choose_baseline.mts b/tools/packages/bench/bin/choose_baseline.mts index 8d23b8b3c..7372cc8bb 100755 --- a/tools/packages/bench/bin/choose_baseline.mts +++ b/tools/packages/bench/bin/choose_baseline.mts @@ -26,8 +26,9 @@ import process from "node:process"; const version = process.argv[2]; if (!version) { - const scriptName = - process.argv[1] ? process.argv[1].split("/").pop() : "checkout_baseline"; + const scriptName = process.argv[1] + ? process.argv[1].split("/").pop() + : "checkout_baseline"; console.error(`Usage: ${scriptName} `); process.exit(1); } diff --git a/tools/packages/wesl/src/LinkedWesl.ts b/tools/packages/wesl/src/LinkedWesl.ts index 36abee287..6c99471e1 100644 --- a/tools/packages/wesl/src/LinkedWesl.ts +++ b/tools/packages/wesl/src/LinkedWesl.ts @@ -123,9 +123,9 @@ export class LinkedWesl { const srcPosition = srcMap.destToSrc(message.offset); // LATER what if this gets mapped to a completely different place? const srcEndPosition = - message.length > 0 ? - srcMap.destToSrc(message.offset + message.length) - : srcPosition; + message.length > 0 + ? srcMap.destToSrc(message.offset + message.length) + : srcPosition; const length = srcEndPosition.position - srcPosition.position; const [lineNum, linePos] = offsetToLineNumber( diff --git a/tools/packages/wesl/src/test/BulkTests.test.ts b/tools/packages/wesl/src/test/BulkTests.test.ts index 24abbef66..e18c0dffb 100644 --- a/tools/packages/wesl/src/test/BulkTests.test.ts +++ b/tools/packages/wesl/src/test/BulkTests.test.ts @@ -2,7 +2,9 @@ import fs from "node:fs/promises"; import { expectNoLogAsync } from "mini-parse/test-util"; import { describe, expect, test } from "vitest"; import { BaseDir, fetchBulkTest } from "wesl-testsuite/fetch-bulk-tests"; -import bulkTests from "wesl-testsuite/test-cases-json/bulkTests" with { type: "json" }; +import bulkTests from "wesl-testsuite/test-cases-json/bulkTests" with { + type: "json", +}; import { link } from "../Linker.ts"; import { stripWesl } from "./StripWesl.ts";