Worklet support
Which @angular/* package(s) are relevant/related to the feature request?
compiler
Description
The worklets are light weighted version of web workers. Currently Angular supports web workers, but not worklets, this makes us unable to make use of Angular's Typescript and bundling support when writing a worklet (i.e. we have to write the worklet in pure Javasctript, or deal with compiling and bundling ourselves).
Proposed solution
Support worklet like web workers.
Alternatives considered
For now we have come to a hacky workaround:
-
Write the worklet as if it's a web worker. This is perfecly supported by Angular. Now the problem is, to load the compiled worker script, we don't have a trivial way to get its URL.
-
Wrap the worker code like this:
if (typeof self !== "undefined") {
postMessage(self.location.href);
} else {
// do the worklet thing
}
When self is not undefined, we know this script is loaded as a webworker (in a worklet context it would be undefined). In this case, send the script's location by postMessage.
- When trying to load the worklet, first load it as a web worker, wait for it to report the location, then terminate the worker and use the location to load the worklet.
E.g. load an audio worklet:
// probe worker url
const worker = new Worker(
new URL("path/to/the/worker", import.meta.url),
);
const url = await new Promise<string>((resolve, reject) => {
worker.onmessage = (e) => {
resolve(e.data);
worker.terminate();
};
worker.onmessageerror = reject;
});
await audioContext.audioWorklet.addModule(url);
This feature request is now candidate for our backlog! In the next phase, the community has 60 days to upvote. If the request receives more than 20 upvotes, we'll move it to our consideration list.
You can find more details about the feature request process in our documentation.
Worklets are so niche (at least for now) that I don't think it would ever get the required upvotes. However since Angular already have the support for service workers and the nature of worklets are very similar to service workers, I believe it only requires minor effort to get worklets supported too.
Just a heads up that we kicked off a community voting process for your feature request. There are 20 days until the voting process ends.
Find more details about Angular's feature request process in our documentation.
Thank you for submitting your feature request! Looks like during the polling process it didn't collect a sufficient number of votes to move to the next stage.
We want to keep Angular rich and ergonomic and at the same time be mindful about its scope and learning journey. If you think your request could live outside Angular's scope, we'd encourage you to collaborate with the community on publishing it as an open source package.
You can find more details about the feature request process in our documentation.