@neovand/zilion 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +160 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/shader.d.ts +15 -0
- package/dist/shader.d.ts.map +1 -0
- package/dist/shader.js +120 -0
- package/dist/shader.js.map +1 -0
- package/dist/z80-core.wgsl.d.ts +2 -0
- package/dist/z80-core.wgsl.d.ts.map +1 -0
- package/dist/z80-core.wgsl.js +790 -0
- package/dist/z80-core.wgsl.js.map +1 -0
- package/dist/zilion.d.ts +67 -0
- package/dist/zilion.d.ts.map +1 -0
- package/dist/zilion.js +184 -0
- package/dist/zilion.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"z80-core.wgsl.js","sourceRoot":"","sources":["../src/z80-core.wgsl.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,+DAA+D;AAC/D,EAAE;AACF,+EAA+E;AAC/E,kEAAkE;AAElE,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+wBvC,CAAC"}
|
package/dist/zilion.d.ts
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/** Register state of one Z80 (16-bit register pairs). */
|
|
2
|
+
export interface Z80Registers {
|
|
3
|
+
af: number;
|
|
4
|
+
bc: number;
|
|
5
|
+
de: number;
|
|
6
|
+
hl: number;
|
|
7
|
+
ix: number;
|
|
8
|
+
iy: number;
|
|
9
|
+
sp: number;
|
|
10
|
+
pc: number;
|
|
11
|
+
afPrime: number;
|
|
12
|
+
bcPrime: number;
|
|
13
|
+
dePrime: number;
|
|
14
|
+
hlPrime: number;
|
|
15
|
+
}
|
|
16
|
+
/** Per-program starting register state. All fields optional; unset = 0, except sp defaults to 0xFFFF. */
|
|
17
|
+
export type Z80RegisterInit = Partial<Z80Registers>;
|
|
18
|
+
export interface RunOptions {
|
|
19
|
+
/** Z80 instructions to execute per program (stops early on HALT). */
|
|
20
|
+
steps: number;
|
|
21
|
+
/** Optional per-program initial registers (index-aligned with `programs`). */
|
|
22
|
+
init?: Z80RegisterInit[];
|
|
23
|
+
}
|
|
24
|
+
export interface RunResult {
|
|
25
|
+
/** Number of programs run. */
|
|
26
|
+
count: number;
|
|
27
|
+
/** Bytes of memory per program. */
|
|
28
|
+
memBytes: number;
|
|
29
|
+
/** Final memory: flat Uint8Array of length count*memBytes. Use `memoryOf(i)`. */
|
|
30
|
+
memory: Uint8Array;
|
|
31
|
+
/** Final registers, one entry per program. */
|
|
32
|
+
registers: Z80Registers[];
|
|
33
|
+
/** Final memory of program `i` as a fresh Uint8Array view slice. */
|
|
34
|
+
memoryOf(i: number): Uint8Array;
|
|
35
|
+
}
|
|
36
|
+
export interface ZilionOptions {
|
|
37
|
+
/**
|
|
38
|
+
* Bytes of memory per program. Must be a power of two (the 16-bit Z80 address
|
|
39
|
+
* space wraps onto it). Default 256. Larger sizes reduce GPU occupancy.
|
|
40
|
+
*/
|
|
41
|
+
memBytes?: number;
|
|
42
|
+
/** Provide your own GPUDevice. If omitted, Zilion requests one. */
|
|
43
|
+
device?: GPUDevice;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* A batch Z80 executor. Runs many independent Z80 CPUs in parallel on the GPU.
|
|
47
|
+
* Create once, call `run` as many times as you like, then `destroy`.
|
|
48
|
+
*/
|
|
49
|
+
export declare class Zilion {
|
|
50
|
+
readonly memBytes: number;
|
|
51
|
+
readonly device: GPUDevice;
|
|
52
|
+
private pipeline;
|
|
53
|
+
private ownsDevice;
|
|
54
|
+
private destroyed;
|
|
55
|
+
private constructor();
|
|
56
|
+
/** Create a Zilion batch executor. */
|
|
57
|
+
static create(opts?: ZilionOptions): Promise<Zilion>;
|
|
58
|
+
/**
|
|
59
|
+
* Run a batch of programs. Each program is a byte array copied into that
|
|
60
|
+
* instance's memory (zero-padded / truncated to `memBytes`). Returns the
|
|
61
|
+
* final memory and registers of every program.
|
|
62
|
+
*/
|
|
63
|
+
run(programs: ArrayLike<number>[] | Uint8Array[], opts: RunOptions): Promise<RunResult>;
|
|
64
|
+
/** Release GPU resources (and the device, if Zilion created it). */
|
|
65
|
+
destroy(): void;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=zilion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zilion.d.ts","sourceRoot":"","sources":["../src/zilion.ts"],"names":[],"mappings":"AAEA,yDAAyD;AACzD,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,yGAAyG;AACzG,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAEpD,MAAM,WAAW,UAAU;IAC1B,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,IAAI,CAAC,EAAE,eAAe,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACzB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,MAAM,EAAE,UAAU,CAAC;IACnB,8CAA8C;IAC9C,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,MAAM,CAAC,EAAE,SAAS,CAAC;CACnB;AAID;;;GAGG;AACH,qBAAa,MAAM;IAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO;IAeP,sCAAsC;WACzB,MAAM,CAAC,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAkB9D;;;;OAIG;IACG,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;IAqI7F,oEAAoE;IACpE,OAAO,IAAI,IAAI;CAKf"}
|
package/dist/zilion.js
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { buildComputeShader, REG_FIELDS, REGS_PER_PROGRAM } from './shader.js';
|
|
2
|
+
const WORKGROUP_SIZE = 64;
|
|
3
|
+
/**
|
|
4
|
+
* A batch Z80 executor. Runs many independent Z80 CPUs in parallel on the GPU.
|
|
5
|
+
* Create once, call `run` as many times as you like, then `destroy`.
|
|
6
|
+
*/
|
|
7
|
+
export class Zilion {
|
|
8
|
+
memBytes;
|
|
9
|
+
device;
|
|
10
|
+
pipeline;
|
|
11
|
+
ownsDevice;
|
|
12
|
+
destroyed = false;
|
|
13
|
+
constructor(device, memBytes, ownsDevice) {
|
|
14
|
+
this.device = device;
|
|
15
|
+
this.memBytes = memBytes;
|
|
16
|
+
this.ownsDevice = ownsDevice;
|
|
17
|
+
const module = device.createShaderModule({
|
|
18
|
+
label: 'zilion-z80',
|
|
19
|
+
code: buildComputeShader(memBytes)
|
|
20
|
+
});
|
|
21
|
+
this.pipeline = device.createComputePipeline({
|
|
22
|
+
label: 'zilion-z80',
|
|
23
|
+
layout: 'auto',
|
|
24
|
+
compute: { module, entryPoint: 'main' }
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/** Create a Zilion batch executor. */
|
|
28
|
+
static async create(opts = {}) {
|
|
29
|
+
const memBytes = opts.memBytes ?? 256;
|
|
30
|
+
if (memBytes < 4 || (memBytes & (memBytes - 1)) !== 0) {
|
|
31
|
+
throw new Error(`memBytes must be a power of two >= 4 (got ${memBytes})`);
|
|
32
|
+
}
|
|
33
|
+
let device = opts.device;
|
|
34
|
+
let owns = false;
|
|
35
|
+
if (!device) {
|
|
36
|
+
const gpu = globalThis.navigator?.gpu;
|
|
37
|
+
if (!gpu)
|
|
38
|
+
throw new Error('WebGPU is not available in this environment');
|
|
39
|
+
const adapter = await gpu.requestAdapter();
|
|
40
|
+
if (!adapter)
|
|
41
|
+
throw new Error('No WebGPU adapter available');
|
|
42
|
+
device = await adapter.requestDevice();
|
|
43
|
+
owns = true;
|
|
44
|
+
}
|
|
45
|
+
return new Zilion(device, memBytes, owns);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Run a batch of programs. Each program is a byte array copied into that
|
|
49
|
+
* instance's memory (zero-padded / truncated to `memBytes`). Returns the
|
|
50
|
+
* final memory and registers of every program.
|
|
51
|
+
*/
|
|
52
|
+
async run(programs, opts) {
|
|
53
|
+
if (this.destroyed)
|
|
54
|
+
throw new Error('Zilion instance has been destroyed');
|
|
55
|
+
const count = programs.length;
|
|
56
|
+
if (count === 0) {
|
|
57
|
+
return { count: 0, memBytes: this.memBytes, memory: new Uint8Array(0), registers: [], memoryOf: () => new Uint8Array(0) };
|
|
58
|
+
}
|
|
59
|
+
const device = this.device;
|
|
60
|
+
const memBytes = this.memBytes;
|
|
61
|
+
const words = memBytes >> 2;
|
|
62
|
+
// Pack memory (flat u32 per program).
|
|
63
|
+
const memData = new Uint32Array(count * words);
|
|
64
|
+
const memBytesView = new Uint8Array(memData.buffer);
|
|
65
|
+
for (let p = 0; p < count; p++) {
|
|
66
|
+
const prog = programs[p];
|
|
67
|
+
const off = p * memBytes;
|
|
68
|
+
const len = Math.min(prog.length, memBytes);
|
|
69
|
+
for (let i = 0; i < len; i++)
|
|
70
|
+
memBytesView[off + i] = prog[i] & 0xff;
|
|
71
|
+
}
|
|
72
|
+
// Pack initial registers (defaults: 0, sp=0xFFFF).
|
|
73
|
+
const regData = new Uint32Array(count * REGS_PER_PROGRAM);
|
|
74
|
+
for (let p = 0; p < count; p++) {
|
|
75
|
+
const base = p * REGS_PER_PROGRAM;
|
|
76
|
+
regData[base + 6] = 0xffff; // sp default
|
|
77
|
+
const init = opts.init?.[p];
|
|
78
|
+
if (init) {
|
|
79
|
+
for (let f = 0; f < REG_FIELDS.length; f++) {
|
|
80
|
+
const v = init[REG_FIELDS[f]];
|
|
81
|
+
if (v !== undefined)
|
|
82
|
+
regData[base + f] = v & 0xffff;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const params = new Uint32Array([count, memBytes, opts.steps, 0]);
|
|
87
|
+
// Buffers.
|
|
88
|
+
const memBuf = device.createBuffer({
|
|
89
|
+
size: memData.byteLength,
|
|
90
|
+
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST
|
|
91
|
+
});
|
|
92
|
+
device.queue.writeBuffer(memBuf, 0, memData);
|
|
93
|
+
const regsOutBuf = device.createBuffer({
|
|
94
|
+
size: regData.byteLength,
|
|
95
|
+
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC
|
|
96
|
+
});
|
|
97
|
+
const regsInBuf = device.createBuffer({
|
|
98
|
+
size: regData.byteLength,
|
|
99
|
+
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST
|
|
100
|
+
});
|
|
101
|
+
device.queue.writeBuffer(regsInBuf, 0, regData);
|
|
102
|
+
const paramsBuf = device.createBuffer({
|
|
103
|
+
size: params.byteLength,
|
|
104
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
|
|
105
|
+
});
|
|
106
|
+
device.queue.writeBuffer(paramsBuf, 0, params);
|
|
107
|
+
const bindGroup = device.createBindGroup({
|
|
108
|
+
layout: this.pipeline.getBindGroupLayout(0),
|
|
109
|
+
entries: [
|
|
110
|
+
{ binding: 0, resource: { buffer: paramsBuf } },
|
|
111
|
+
{ binding: 1, resource: { buffer: memBuf } },
|
|
112
|
+
{ binding: 2, resource: { buffer: regsOutBuf } },
|
|
113
|
+
{ binding: 3, resource: { buffer: regsInBuf } }
|
|
114
|
+
]
|
|
115
|
+
});
|
|
116
|
+
const memStage = device.createBuffer({
|
|
117
|
+
size: memData.byteLength,
|
|
118
|
+
usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST
|
|
119
|
+
});
|
|
120
|
+
const regsStage = device.createBuffer({
|
|
121
|
+
size: regData.byteLength,
|
|
122
|
+
usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST
|
|
123
|
+
});
|
|
124
|
+
const enc = device.createCommandEncoder();
|
|
125
|
+
const pass = enc.beginComputePass();
|
|
126
|
+
pass.setPipeline(this.pipeline);
|
|
127
|
+
pass.setBindGroup(0, bindGroup);
|
|
128
|
+
pass.dispatchWorkgroups(Math.ceil(count / WORKGROUP_SIZE));
|
|
129
|
+
pass.end();
|
|
130
|
+
enc.copyBufferToBuffer(memBuf, 0, memStage, 0, memData.byteLength);
|
|
131
|
+
enc.copyBufferToBuffer(regsOutBuf, 0, regsStage, 0, regData.byteLength);
|
|
132
|
+
device.queue.submit([enc.finish()]);
|
|
133
|
+
await memStage.mapAsync(GPUMapMode.READ);
|
|
134
|
+
const outMem = new Uint8Array(memStage.getMappedRange().slice(0));
|
|
135
|
+
memStage.unmap();
|
|
136
|
+
await regsStage.mapAsync(GPUMapMode.READ);
|
|
137
|
+
const outRegs = new Uint32Array(regsStage.getMappedRange().slice(0));
|
|
138
|
+
regsStage.unmap();
|
|
139
|
+
memBuf.destroy();
|
|
140
|
+
regsOutBuf.destroy();
|
|
141
|
+
regsInBuf.destroy();
|
|
142
|
+
paramsBuf.destroy();
|
|
143
|
+
memStage.destroy();
|
|
144
|
+
regsStage.destroy();
|
|
145
|
+
// Repack memory: private-array layout stores 1 byte per u32, but we wrote
|
|
146
|
+
// it back packed 4-per-word, so outMem is already tight bytes.
|
|
147
|
+
const memory = new Uint8Array(count * memBytes);
|
|
148
|
+
memory.set(outMem.subarray(0, count * memBytes));
|
|
149
|
+
const registers = [];
|
|
150
|
+
for (let p = 0; p < count; p++) {
|
|
151
|
+
const b = p * REGS_PER_PROGRAM;
|
|
152
|
+
registers.push({
|
|
153
|
+
af: outRegs[b + 0],
|
|
154
|
+
bc: outRegs[b + 1],
|
|
155
|
+
de: outRegs[b + 2],
|
|
156
|
+
hl: outRegs[b + 3],
|
|
157
|
+
ix: outRegs[b + 4],
|
|
158
|
+
iy: outRegs[b + 5],
|
|
159
|
+
sp: outRegs[b + 6],
|
|
160
|
+
pc: outRegs[b + 7],
|
|
161
|
+
afPrime: outRegs[b + 8],
|
|
162
|
+
bcPrime: outRegs[b + 9],
|
|
163
|
+
dePrime: outRegs[b + 10],
|
|
164
|
+
hlPrime: outRegs[b + 11]
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
return {
|
|
168
|
+
count,
|
|
169
|
+
memBytes,
|
|
170
|
+
memory,
|
|
171
|
+
registers,
|
|
172
|
+
memoryOf: (i) => memory.subarray(i * memBytes, (i + 1) * memBytes)
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/** Release GPU resources (and the device, if Zilion created it). */
|
|
176
|
+
destroy() {
|
|
177
|
+
if (this.destroyed)
|
|
178
|
+
return;
|
|
179
|
+
this.destroyed = true;
|
|
180
|
+
if (this.ownsDevice)
|
|
181
|
+
this.device.destroy();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=zilion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zilion.js","sourceRoot":"","sources":["../src/zilion.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@neovand/zilion",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"publishConfig": {
|
|
5
|
+
"access": "public"
|
|
6
|
+
},
|
|
7
|
+
"description": "A zillion Z80s in parallel on your GPU — a WebGPU-accelerated, differentially-tested Z80 CPU emulator for batch execution, artificial life, and genetic programming.",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"module": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist",
|
|
20
|
+
"README.md",
|
|
21
|
+
"LICENSE"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc -p tsconfig.json",
|
|
25
|
+
"prepublishOnly": "npm run build",
|
|
26
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"z80",
|
|
30
|
+
"zilog",
|
|
31
|
+
"cpu",
|
|
32
|
+
"emulator",
|
|
33
|
+
"webgpu",
|
|
34
|
+
"gpu",
|
|
35
|
+
"gpgpu",
|
|
36
|
+
"wgsl",
|
|
37
|
+
"parallel",
|
|
38
|
+
"artificial-life",
|
|
39
|
+
"alife",
|
|
40
|
+
"genetic-programming",
|
|
41
|
+
"assembly",
|
|
42
|
+
"8-bit",
|
|
43
|
+
"retro"
|
|
44
|
+
],
|
|
45
|
+
"author": "NeoVand",
|
|
46
|
+
"license": "MIT",
|
|
47
|
+
"repository": {
|
|
48
|
+
"type": "git",
|
|
49
|
+
"url": "git+https://github.com/NeoVand/zilion.git"
|
|
50
|
+
},
|
|
51
|
+
"homepage": "https://github.com/NeoVand/zilion#readme",
|
|
52
|
+
"bugs": {
|
|
53
|
+
"url": "https://github.com/NeoVand/zilion/issues"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@webgpu/types": "^0.1.60",
|
|
57
|
+
"typescript": "^5.6.0"
|
|
58
|
+
},
|
|
59
|
+
"sideEffects": false
|
|
60
|
+
}
|