diff --git a/baselines/audioworklet.generated.d.ts b/baselines/audioworklet.generated.d.ts index 0f0d7039f..b3dd6996c 100644 --- a/baselines/audioworklet.generated.d.ts +++ b/baselines/audioworklet.generated.d.ts @@ -216,6 +216,10 @@ declare var AudioWorkletProcessor: { new(): AudioWorkletProcessor; }; +interface AudioWorkletProcessorImpl extends AudioWorkletProcessor { + process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean; +} + /** This Streams API interface providesĀ a built-in byte length queuing strategy that can be used when constructing streams. */ interface ByteLengthQueuingStrategy extends QueuingStrategy { readonly highWaterMark: number; @@ -890,7 +894,7 @@ declare namespace WebAssembly { } interface AudioWorkletProcessorConstructor { - (options: any): AudioWorkletProcessor; + new (options: any): AudioWorkletProcessorImpl; } interface PerformanceObserverCallback { diff --git a/inputfiles/addedTypes.jsonc b/inputfiles/addedTypes.jsonc index 612082a20..6c58ca603 100644 --- a/inputfiles/addedTypes.jsonc +++ b/inputfiles/addedTypes.jsonc @@ -338,6 +338,22 @@ }, "interfaces": { "interface": { + "AudioWorkletProcessorImpl": { + "name": "AudioWorkletProcessorImpl", + "extends": "AudioWorkletProcessor", + "methods": { + "method": { + "process": { + "name": "process", + "overrideSignatures": [ + "process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: Record): boolean" + ] + } + } + }, + "exposed": "AudioWorklet", + "noInterfaceObject": true + }, "BroadcastChannel": { "events": { "event": [ diff --git a/inputfiles/overridingTypes.jsonc b/inputfiles/overridingTypes.jsonc index 813198265..b38abcaa0 100644 --- a/inputfiles/overridingTypes.jsonc +++ b/inputfiles/overridingTypes.jsonc @@ -366,6 +366,11 @@ "overrideSignatures": [ "new (...params: any[]): HTMLElement" ] + }, + "AudioWorkletProcessorConstructor": { + "overrideSignatures": [ + "new (options: any): AudioWorkletProcessorImpl" + ] } } }, diff --git a/unittests/files/audioworklet/tsconfig.json b/unittests/files/audioworklet/tsconfig.json new file mode 100644 index 000000000..80491e7bc --- /dev/null +++ b/unittests/files/audioworklet/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "es2020", + "lib": ["es2020"], + "module": "esnext", + "moduleResolution": "node", + "strict": true, + "esModuleInterop": true, + "sourceMap": true, + "noUnusedLocals": true, + "noUnusedParameters": true + }, + "include": [ + "../../../baselines/audioworklet*", + "**/*" + ] +} diff --git a/unittests/files/audioworklet/usage.ts b/unittests/files/audioworklet/usage.ts new file mode 100644 index 000000000..3641b6e8e --- /dev/null +++ b/unittests/files/audioworklet/usage.ts @@ -0,0 +1,8 @@ +registerProcessor( + "test", + class extends AudioWorkletProcessor { + process(input: Float32Array[][], output: Float32Array[][], params: { [key: string]: Float32Array }) { + return true; + } + } +); diff --git a/unittests/index.js b/unittests/index.js index f3c9cfdcf..1e1d6dd8d 100644 --- a/unittests/index.js +++ b/unittests/index.js @@ -8,3 +8,11 @@ for (const filename of await readdir(new URL("files/", import.meta.url))) { }); } } + +for (const filename of await readdir(new URL("files/audioworklet", import.meta.url))) { + if (filename.endsWith(".ts")) { + execSync(`npx tsc generated/audioworklet.generated.d.ts unittests/files/audioworklet/${filename} --target es2020 --lib es2020 --types --noEmit`, { + stdio: "inherit" + }); + } +}