reflected 0.0.0 → 0.0.2

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.
Files changed (106) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +144 -0
  3. package/dist/async-DF1WaSCr.js +1 -0
  4. package/dist/async.js +1 -0
  5. package/dist/broadcast-D0xibjmN.js +1 -0
  6. package/dist/broadcast-Dc7wAEE6.js +1 -0
  7. package/dist/broadcast.js +1 -0
  8. package/dist/channel-CdS9bLt4.js +1 -0
  9. package/dist/i32-C78nBJH2.js +1 -0
  10. package/dist/index.js +1 -0
  11. package/dist/message-D7s0I-EX.js +1 -0
  12. package/dist/message-DLH7cJo6.js +1 -0
  13. package/dist/message.js +1 -0
  14. package/dist/sender-BMLGKAss.js +1 -0
  15. package/dist/shared-C_kd5Il-.js +1 -0
  16. package/dist/shared-MkVjuKUg.js +1 -0
  17. package/dist/shared-RFmxa5x4.js +1 -0
  18. package/dist/shared-array-buffer-cwdMr2mc.js +1 -0
  19. package/dist/sw.js +1 -0
  20. package/dist/with-resolvers-CHEvl4oe.js +1 -0
  21. package/dist/xhr-D5y-AocB.js +1 -0
  22. package/dist/xhr-DAG_4oRo.js +1 -0
  23. package/dist/xhr.js +1 -0
  24. package/package.json +91 -10
  25. package/rollup.js +59 -0
  26. package/src/async.js +8 -0
  27. package/src/broadcast.js +8 -0
  28. package/src/channel.js +1 -0
  29. package/src/index.js +33 -10
  30. package/src/main/async.js +29 -0
  31. package/src/main/broadcast.js +21 -0
  32. package/src/main/message.js +20 -0
  33. package/src/main/sab.js +12 -0
  34. package/src/main/sender.js +38 -0
  35. package/src/main/shared.js +74 -16
  36. package/src/main/xhr.js +101 -0
  37. package/src/message.js +8 -0
  38. package/src/service/listeners.js +37 -0
  39. package/src/service/worker.js +5 -0
  40. package/src/shared.js +10 -0
  41. package/src/worker/async.js +38 -0
  42. package/src/worker/{firefox.js → broadcast.js} +4 -1
  43. package/src/worker/{chrome.js → message.js} +4 -1
  44. package/src/worker/sender.js +16 -0
  45. package/src/worker/shared.js +28 -7
  46. package/src/worker/xhr.js +38 -0
  47. package/src/xhr.js +8 -0
  48. package/test/README/index.html +11 -0
  49. package/test/README/index.js +54 -0
  50. package/test/README/mini-coi.js +28 -0
  51. package/test/README/worker.js +26 -0
  52. package/test/index.html +8 -9
  53. package/test/index.js +35 -0
  54. package/test/mini-coi.js +28 -0
  55. package/test/sw.js +1 -0
  56. package/test/worker.js +16 -4
  57. package/types/async.d.ts +3 -0
  58. package/types/broadcast.d.ts +21 -0
  59. package/types/channel.d.ts +2 -0
  60. package/types/index.d.ts +9 -0
  61. package/types/main/async.d.ts +7 -0
  62. package/types/main/broadcast.d.ts +20 -0
  63. package/types/main/message.d.ts +20 -0
  64. package/types/main/sab.d.ts +5 -0
  65. package/types/main/sender.d.ts +5 -0
  66. package/types/main/shared.d.ts +44 -0
  67. package/types/main/xhr.d.ts +2 -0
  68. package/types/message.d.ts +21 -0
  69. package/types/reflected/src/async.d.ts +3 -0
  70. package/types/reflected/src/broadcast.d.ts +3 -0
  71. package/types/reflected/src/channel.d.ts +2 -0
  72. package/types/reflected/src/index.d.ts +3 -0
  73. package/types/reflected/src/main/async.d.ts +7 -0
  74. package/types/reflected/src/main/broadcast.d.ts +2 -0
  75. package/types/reflected/src/main/message.d.ts +2 -0
  76. package/types/reflected/src/main/sab.d.ts +5 -0
  77. package/types/reflected/src/main/sender.d.ts +5 -0
  78. package/types/reflected/src/main/shared.d.ts +44 -0
  79. package/types/reflected/src/main/xhr.d.ts +2 -0
  80. package/types/reflected/src/message.d.ts +3 -0
  81. package/types/reflected/src/service/listeners.d.ts +3 -0
  82. package/types/reflected/src/service/worker.d.ts +1 -0
  83. package/types/reflected/src/shared.d.ts +1 -0
  84. package/types/reflected/src/worker/async.d.ts +3 -0
  85. package/types/reflected/src/worker/broadcast.d.ts +3 -0
  86. package/types/reflected/src/worker/message.d.ts +3 -0
  87. package/types/reflected/src/worker/sender.d.ts +2 -0
  88. package/types/reflected/src/worker/shared.d.ts +11 -0
  89. package/types/reflected/src/worker/xhr.d.ts +3 -0
  90. package/types/reflected/src/xhr.d.ts +3 -0
  91. package/types/service/listeners.d.ts +3 -0
  92. package/types/service/worker.d.ts +1 -0
  93. package/types/shared.d.ts +1 -0
  94. package/types/weak-id/i32.d.ts +2 -0
  95. package/types/worker/async.d.ts +3 -0
  96. package/types/worker/broadcast.d.ts +3 -0
  97. package/types/worker/message.d.ts +3 -0
  98. package/types/worker/sender.d.ts +2 -0
  99. package/types/worker/shared.d.ts +11 -0
  100. package/types/worker/xhr.d.ts +3 -0
  101. package/types/xhr.d.ts +3 -0
  102. package/src/main/chrome.js +0 -19
  103. package/src/main/fallback.js +0 -29
  104. package/src/main/firefox.js +0 -19
  105. package/src/main/shared-id.js +0 -1
  106. package/src/worker/fallback.js +0 -1
package/test/index.js ADDED
@@ -0,0 +1,35 @@
1
+ import reflected, { channel } from '../dist/index.js';
2
+ log.append(`bootstrapping: ${channel}\n`);
3
+
4
+ try {
5
+ const worker = await reflected('./worker.js', {
6
+ serviceWorker: location.search === '?async' ? undefined : './sw.js',
7
+ onsend: async (data, ...rest) => {
8
+ // console.log('onsend', data, rest);
9
+ return data;
10
+ },
11
+ onsync: async (data, ...rest) => {
12
+ // console.log('main', data, rest);
13
+ // await new Promise(resolve => setTimeout(resolve, 1000));
14
+ return new Int32Array([6, 7, 8, 9, 10]);
15
+ },
16
+ onerror: console.error,
17
+ });
18
+
19
+ log.append(`consuming: ${worker.channel}\n`);
20
+
21
+ worker.addEventListener(
22
+ 'message',
23
+ (event) => {
24
+ log.append(`reflected channel: ${event.data}\n`);
25
+ },
26
+ { once: true }
27
+ );
28
+
29
+ worker.send(new Int32Array([1, 2, 3, 4, 5])).then(data => {
30
+ log.append(`send: [${data}]\n`);
31
+ });
32
+ } catch (error) {
33
+ log.append(`error: ${error.message}\n`);
34
+ }
35
+
@@ -0,0 +1,28 @@
1
+ /*! coi-serviceworker v0.1.7 - Guido Zuidhof and contributors, licensed under MIT */
2
+ /*! mini-coi - Andrea Giammarchi and contributors, licensed under MIT */
3
+ (({ document: d, navigator: { serviceWorker: s } }) => {
4
+ if (d) {
5
+ const { currentScript: c } = d;
6
+ s.register(c.src, { scope: c.getAttribute('scope') || '.' }).then(r => {
7
+ r.addEventListener('updatefound', () => location.reload());
8
+ if (r.active && !s.controller) location.reload();
9
+ });
10
+ }
11
+ else {
12
+ addEventListener('install', () => skipWaiting());
13
+ addEventListener('activate', e => e.waitUntil(clients.claim()));
14
+ addEventListener('fetch', e => {
15
+ const { request: r } = e;
16
+ if (r.cache === 'only-if-cached' && r.mode !== 'same-origin') return;
17
+ e.respondWith(fetch(r).then(r => {
18
+ const { body, status, statusText } = r;
19
+ if (!status || status > 399) return r;
20
+ const h = new Headers(r.headers);
21
+ h.set('Cross-Origin-Opener-Policy', 'same-origin');
22
+ h.set('Cross-Origin-Embedder-Policy', 'require-corp');
23
+ h.set('Cross-Origin-Resource-Policy', 'cross-origin');
24
+ return new Response(status == 204 ? null : body, { status, statusText, headers: h });
25
+ }));
26
+ });
27
+ }
28
+ })(self);
package/test/sw.js ADDED
@@ -0,0 +1 @@
1
+ const e=Promise.withResolvers||function(){var e,t,n=new this((n,s)=>{e=n,t=s});return{resolve:e,reject:t,promise:n}};var t=e.bind(Promise);const[n,s]=((e=e=>e)=>{const n=new Map,s=(()=>{const e=new Int32Array(1);return()=>e[0]++})();return[()=>{let a;do{a=e(s())}while(n.has(a));const r=t();return n.set(a,r),[a,r.promise]},(e,t,s)=>{const a=n.get(e);n.delete(e),s?a?.reject(s):a?.resolve(t)}]})(),{protocol:a,host:r,pathname:o}=location,i=`${a}//${r}${o}`,c=new BroadcastChannel("fc260aad-4404-43b8-ae9d-2c06554bb294");c.addEventListener("message",({data:[e,t]})=>{if("response"===e){const[e,n]=t;s(e,`[${n.join(",")}]`)}});const d=async e=>{const[t,s]=n();return c.postMessage(["request",[t,e]]),new Response(await s)};addEventListener("activate",e=>e.waitUntil(clients.claim())),addEventListener("fetch",async e=>{const{request:t}=e;"POST"===t.method&&t.url.startsWith(i)&&(e.stopImmediatePropagation(),e.respondWith(t.json().then(d)),e.preventDefault())}),addEventListener("install",()=>skipWaiting());
package/test/worker.js CHANGED
@@ -1,10 +1,22 @@
1
- import reflected from '../src/index.js';
1
+ import reflected, { channel } from '../dist/index.js';
2
2
 
3
3
  const sync = await reflected({
4
- ondata: (data, ...rest) => {
5
- console.log('worker', [...data], rest);
4
+ onsend: (data, ...rest) => {
5
+ // console.log('worker', [...data], rest);
6
+ return data;
7
+ },
8
+ onsync: (data, ...rest) => {
9
+ // console.log('worker', [...data], rest);
6
10
  return data;
7
11
  }
8
12
  });
9
13
 
10
- console.log('result', sync('test'));
14
+ for (let i = 0; i < 4; i++) sync('test');
15
+
16
+ console.time('sync');
17
+ const result = await sync('test');
18
+ console.timeEnd('sync');
19
+
20
+ console.log(channel, result);
21
+
22
+ postMessage(`${channel} - [${result?.join?.(',')}]`);
@@ -0,0 +1,3 @@
1
+ export { channel } from "./worker/async.js";
2
+ declare const _default: ((scriptURL: string, options: import("./main/shared.js").Options) => Promise<typeof import("./main/async.js").Worker>) | ((options: any) => any);
3
+ export default _default;
@@ -0,0 +1,21 @@
1
+ export { channel } from "./worker/broadcast.js";
2
+ declare const _default: ((scriptURL: string, options: import("./main/shared.js").Options) => Promise<{
3
+ new (scriptURL: any, options: any, resolve: any): {
4
+ get channel(): string;
5
+ "__#private@#next": any;
6
+ "__#private@#requests": Map<any, any>;
7
+ send(payload: any, ...rest: any[]): any;
8
+ postMessage(message: any, transfer: Transferable[]): void;
9
+ postMessage(message: any, options?: StructuredSerializeOptions): void;
10
+ terminate(): void;
11
+ addEventListener<K extends keyof WorkerEventMap>(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
12
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
13
+ removeEventListener<K extends keyof WorkerEventMap>(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
14
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
15
+ dispatchEvent(event: Event): boolean;
16
+ onerror: ((this: AbstractWorker, ev: ErrorEvent) => any) | null;
17
+ onmessage: (this: Worker, ev: MessageEvent) => any;
18
+ onmessageerror: (this: Worker, ev: MessageEvent) => any;
19
+ };
20
+ }>) | ((options: import("./worker/shared.js").Options) => Promise<(payload: unknown, ...rest: unknown[]) => unknown>);
21
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: "fc260aad-4404-43b8-ae9d-2c06554bb294";
2
+ export default _default;
@@ -0,0 +1,9 @@
1
+ export default module;
2
+ export type MainOptions = import("./main/shared.js").Options;
3
+ export type WorkerOptions = import("./worker/shared.js").Options;
4
+ /** @typedef {import('./main/shared.js').Options} MainOptions */
5
+ /** @typedef {import('./worker/shared.js').Options} WorkerOptions */
6
+ /** @type {string} */
7
+ export let channel: string;
8
+ /** @type {Function} */
9
+ declare let module: Function;
@@ -0,0 +1,7 @@
1
+ export class Worker extends Sender {
2
+ constructor(scriptURL: any, options: any, resolve: any);
3
+ get channel(): string;
4
+ }
5
+ declare const _default: (scriptURL: string, options: import("./shared.js").Options) => Promise<typeof Worker>;
6
+ export default _default;
7
+ import Sender from './sender.js';
@@ -0,0 +1,20 @@
1
+ declare const _default: (scriptURL: string, options: import("./shared.js").Options) => Promise<{
2
+ new (scriptURL: any, options: any, resolve: any): {
3
+ get channel(): string;
4
+ "__#private@#next": any;
5
+ "__#private@#requests": Map<any, any>;
6
+ send(payload: any, ...rest: any[]): any;
7
+ postMessage(message: any, transfer: Transferable[]): void;
8
+ postMessage(message: any, options?: StructuredSerializeOptions): void;
9
+ terminate(): void;
10
+ addEventListener<K extends keyof WorkerEventMap>(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
11
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
12
+ removeEventListener<K extends keyof WorkerEventMap>(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
13
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
14
+ dispatchEvent(event: Event): boolean;
15
+ onerror: ((this: AbstractWorker, ev: ErrorEvent) => any) | null;
16
+ onmessage: (this: Worker, ev: MessageEvent) => any;
17
+ onmessageerror: (this: Worker, ev: MessageEvent) => any;
18
+ };
19
+ }>;
20
+ export default _default;
@@ -0,0 +1,20 @@
1
+ declare const _default: (scriptURL: string, options: import("./shared.js").Options) => Promise<{
2
+ new (scriptURL: any, options: any, resolve: any): {
3
+ get channel(): string;
4
+ "__#private@#next": any;
5
+ "__#private@#requests": Map<any, any>;
6
+ send(payload: any, ...rest: any[]): any;
7
+ postMessage(message: any, transfer: Transferable[]): void;
8
+ postMessage(message: any, options?: StructuredSerializeOptions): void;
9
+ terminate(): void;
10
+ addEventListener<K extends keyof WorkerEventMap>(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
11
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
12
+ removeEventListener<K extends keyof WorkerEventMap>(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
13
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
14
+ dispatchEvent(event: Event): boolean;
15
+ onerror: ((this: AbstractWorker, ev: ErrorEvent) => any) | null;
16
+ onmessage: (this: Worker, ev: MessageEvent) => any;
17
+ onmessageerror: (this: Worker, ev: MessageEvent) => any;
18
+ };
19
+ }>;
20
+ export default _default;
@@ -0,0 +1,5 @@
1
+ declare function _default({ initByteLength, maxByteLength }: {
2
+ initByteLength?: number;
3
+ maxByteLength?: number;
4
+ }): any;
5
+ export default _default;
@@ -0,0 +1,5 @@
1
+ export default class Sender extends Worker {
2
+ constructor(scriptURL: any, options: any);
3
+ send(payload: any, ...rest: any[]): any;
4
+ #private;
5
+ }
@@ -0,0 +1,44 @@
1
+ export const minByteLength: number;
2
+ export function SAB({ initByteLength, maxByteLength }: {
3
+ initByteLength?: number;
4
+ maxByteLength?: number;
5
+ }): SharedArrayBuffer;
6
+ export function bootstrap<T>(Worker: T): (scriptURL: string, options: Options) => Promise<T>;
7
+ export function handler(sab: any, options: any, useAtomics: any): ({ data }: {
8
+ data: any;
9
+ }) => Promise<void>;
10
+ export function post(sab: any, options: any): any[];
11
+ export function url(scriptURL: any, reflected: any, options: any): any[];
12
+ /**
13
+ * see https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register#options
14
+ */
15
+ export type ServiceWorkerOptions = {
16
+ /**
17
+ * will use the `serviceWorker` value if that is a `string`, otherwise it refers to where the service worker file is located.
18
+ */
19
+ url?: string;
20
+ type?: "classic" | "module";
21
+ updateViaCache?: "all" | "imports" | "none";
22
+ };
23
+ export type Options = {
24
+ /**
25
+ * invoked when the worker expect a response as `Int32Array` to populate the SharedArrayBuffer with.
26
+ */
27
+ onsync: (payload: unknown) => Int32Array | Promise<Int32Array>;
28
+ /**
29
+ * invoked when the worker replies to a `worker.send(data)` call.
30
+ */
31
+ onsend?: (payload: unknown) => unknown | Promise<unknown>;
32
+ /**
33
+ * defines the initial byte length of the SharedArrayBuffer.
34
+ */
35
+ initByteLength?: number;
36
+ /**
37
+ * defines the maximum byte length (growth) of the SharedArrayBuffer.
38
+ */
39
+ maxByteLength?: number;
40
+ /**
41
+ * defines the service worker to use as fallback if SharedArrayBuffer is not supported. If not defined, the `async` fallback will be used so that no `sync` operations from the worker will be possible.
42
+ */
43
+ serviceWorker?: string | ServiceWorkerOptions;
44
+ };
@@ -0,0 +1,2 @@
1
+ declare function _default(scriptURL: any, options: any): any;
2
+ export default _default;
@@ -0,0 +1,21 @@
1
+ export { channel } from "./worker/message.js";
2
+ declare const _default: ((options: import("./worker/shared.js").Options) => Promise<(payload: unknown, ...rest: unknown[]) => unknown>) | ((scriptURL: string, options: import("./main/shared.js").Options) => Promise<{
3
+ new (scriptURL: any, options: any, resolve: any): {
4
+ get channel(): string;
5
+ "__#private@#next": any;
6
+ "__#private@#requests": Map<any, any>;
7
+ send(payload: any, ...rest: any[]): any;
8
+ postMessage(message: any, transfer: Transferable[]): void;
9
+ postMessage(message: any, options?: StructuredSerializeOptions): void;
10
+ terminate(): void;
11
+ addEventListener<K extends keyof WorkerEventMap>(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
12
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
13
+ removeEventListener<K extends keyof WorkerEventMap>(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
14
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
15
+ dispatchEvent(event: Event): boolean;
16
+ onerror: ((this: AbstractWorker, ev: ErrorEvent) => any) | null;
17
+ onmessage: (this: Worker, ev: MessageEvent) => any;
18
+ onmessageerror: (this: Worker, ev: MessageEvent) => any;
19
+ };
20
+ }>);
21
+ export default _default;
@@ -0,0 +1,3 @@
1
+ export { channel } from "./worker/async.js";
2
+ declare const _default: ((scriptURL: string, options: Options) => Promise<Worker>) | ((options: any) => any);
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ export { channel } from "./worker/broadcast.js";
2
+ declare const _default: ((scriptURL: string, options: Options) => Promise<Worker>) | ((options: import("./worker/shared.js").Options) => Promise<(data: unknown, ...rest: unknown[]) => unknown>);
3
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: "50c53a30-e088-443f-a277-88c390dbdc0c";
2
+ export default _default;
@@ -0,0 +1,3 @@
1
+ export default module;
2
+ export let channel: any;
3
+ declare let module: any;
@@ -0,0 +1,7 @@
1
+ export class Worker extends Sender {
2
+ constructor(scriptURL: any, options: any, resolve: any);
3
+ get channel(): string;
4
+ }
5
+ declare const _default: (scriptURL: string, options: Options) => Promise<globalThis.Worker>;
6
+ export default _default;
7
+ import Sender from './sender.js';
@@ -0,0 +1,2 @@
1
+ declare const _default: (scriptURL: string, options: Options) => Promise<Worker>;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: (scriptURL: string, options: Options) => Promise<Worker>;
2
+ export default _default;
@@ -0,0 +1,5 @@
1
+ declare function _default({ initByteLength, maxByteLength }: {
2
+ initByteLength?: number;
3
+ maxByteLength?: number;
4
+ }): any;
5
+ export default _default;
@@ -0,0 +1,5 @@
1
+ export default class Sender extends Worker {
2
+ constructor(scriptURL: any, options: any);
3
+ send(payload: any, ...rest: any[]): any;
4
+ #private;
5
+ }
@@ -0,0 +1,44 @@
1
+ export const minByteLength: number;
2
+ export function SAB({ initByteLength, maxByteLength }: {
3
+ initByteLength?: number;
4
+ maxByteLength?: number;
5
+ }): SharedArrayBuffer;
6
+ export function bootstrap(Worker: Worker): (scriptURL: string, options: Options) => Promise<Worker>;
7
+ export function handler(sab: any, options: any, useAtomics: any): ({ data }: {
8
+ data: any;
9
+ }) => Promise<void>;
10
+ export function post(sab: any, options: any): any[];
11
+ export function url(scriptURL: any, reflected: any, options: any): any[];
12
+ /**
13
+ * see https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register#options
14
+ */
15
+ export type ServiceWorkerOptions = {
16
+ /**
17
+ * will use the `serviceWorker` value if that is a `string`, otherwise it refers to where the service worker file is located.
18
+ */
19
+ url?: string;
20
+ type?: "classic" | "module";
21
+ updateViaCache?: "all" | "imports" | "none";
22
+ };
23
+ export type Options = {
24
+ /**
25
+ * invoked when the worker expect a response as `Int32Array` to populate the SharedArrayBuffer with.
26
+ */
27
+ onsync: (data: unknown) => Promise<Int32Array>;
28
+ /**
29
+ * invoked when the worker replies to a `worker.send(data)` call.
30
+ */
31
+ onsend?: (data: unknown) => unknown;
32
+ /**
33
+ * defines the initial byte length of the SharedArrayBuffer.
34
+ */
35
+ initByteLength?: number;
36
+ /**
37
+ * defines the maximum byte length (growth) of the SharedArrayBuffer.
38
+ */
39
+ maxByteLength?: number;
40
+ /**
41
+ * defines the service worker to use as fallback if SharedArrayBuffer is not supported. If not defined, the `async` fallback will be used so that no `sync` operations from the worker will be possible.
42
+ */
43
+ serviceWorker?: string | ServiceWorkerOptions;
44
+ };
@@ -0,0 +1,2 @@
1
+ declare function _default(scriptURL: any, options: any): any;
2
+ export default _default;
@@ -0,0 +1,3 @@
1
+ export { channel } from "./worker/message.js";
2
+ declare const _default: ((scriptURL: string, options: Options) => Promise<Worker>) | ((options: import("./worker/shared.js").Options) => Promise<(data: unknown, ...rest: unknown[]) => unknown>);
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ export function activate(event: any): any;
2
+ export function fetch(event: any): Promise<void>;
3
+ export function install(): any;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export function randomUUID(): string;
@@ -0,0 +1,3 @@
1
+ export const channel: "async";
2
+ declare function _default(options: any): any;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ export const channel: "broadcast";
2
+ declare const _default: (options: import("./shared.js").Options) => Promise<(data: unknown, ...rest: unknown[]) => unknown>;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ export const channel: "message";
2
+ declare const _default: (options: import("./shared.js").Options) => Promise<(data: unknown, ...rest: unknown[]) => unknown>;
3
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare function _default(options: any): any;
2
+ export default _default;
@@ -0,0 +1,11 @@
1
+ export function handler(promise: Promise<[SharedArrayBuffer, Options, MessageChannel | BroadcastChannel]>, listener: (event: WorkerEvent) => void): (options: Options) => Promise<(data: unknown, ...rest: unknown[]) => unknown>;
2
+ export type Options = {
3
+ /**
4
+ * transforms the resulting `Int32Array` from *main* thread into a value usable within the worker.
5
+ */
6
+ onsync: (data: Int32Array) => unknown;
7
+ /**
8
+ * invoked to define what to return to the *main* thread when it calls `worker.send(data)`.
9
+ */
10
+ onsend: (data: unknown) => unknown;
11
+ };
@@ -0,0 +1,3 @@
1
+ export const channel: "xhr";
2
+ declare function _default(options: any): any;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ export { channel } from "./worker/xhr.js";
2
+ declare const _default: (scriptURL: any, options: any) => any;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ export function activate(event: any): any;
2
+ export function fetch(event: any): Promise<void>;
3
+ export function install(): any;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export function randomUUID(): string;
@@ -0,0 +1,2 @@
1
+ declare function _default(start?: number): () => number;
2
+ export default _default;
@@ -0,0 +1,3 @@
1
+ export const channel: "async";
2
+ declare function _default(options: any): any;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ export const channel: "broadcast";
2
+ declare const _default: (options: import("./shared.js").Options) => Promise<(payload: unknown, ...rest: unknown[]) => unknown>;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ export const channel: "message";
2
+ declare const _default: (options: import("./shared.js").Options) => Promise<(payload: unknown, ...rest: unknown[]) => unknown>;
3
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare function _default(options: any): any;
2
+ export default _default;
@@ -0,0 +1,11 @@
1
+ export function handler(promise: Promise<[SharedArrayBuffer, Options, MessageChannel | BroadcastChannel]>, listener: (event: MessageEvent) => void): (options: Options) => Promise<(payload: unknown, ...rest: unknown[]) => unknown>;
2
+ export type Options = {
3
+ /**
4
+ * transforms the resulting `Int32Array` from *main* thread into a value usable within the worker.
5
+ */
6
+ onsync: (payload: Int32Array) => unknown;
7
+ /**
8
+ * invoked to define what to return to the *main* thread when it calls `worker.send(payload)`.
9
+ */
10
+ onsend: (payload: unknown) => unknown | Promise<unknown>;
11
+ };
@@ -0,0 +1,3 @@
1
+ export const channel: "xhr";
2
+ declare function _default(options: any): any;
3
+ export default _default;
package/types/xhr.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export { channel } from "./worker/xhr.js";
2
+ declare const _default: (scriptURL: any, options: any) => any;
3
+ export default _default;
@@ -1,19 +0,0 @@
1
- import { SAB, handler, post, url, withResolvers } from './shared.js';
2
-
3
- class Worker extends globalThis.Worker {
4
- constructor(scriptURL, options, resolve) {
5
- const { port1, port2 } = new MessageChannel;
6
- const sab = SAB(options);
7
- port1.addEventListener('message', handler(sab, options, true));
8
- port1.start();
9
- super(url(scriptURL, 'chrome'), { ...options, type: 'module' });
10
- super.addEventListener('message', () => resolve(this), { once: true });
11
- super.postMessage(post(sab, options), [port2]);
12
- }
13
- }
14
-
15
- export default (scriptURL, options) => {
16
- const { promise, resolve } = withResolvers();
17
- new Worker(scriptURL, options, resolve);
18
- return promise;
19
- };
@@ -1,29 +0,0 @@
1
- import CHANNEL from './shared-id.js';
2
- import { handler, post, url, withResolvers } from './shared.js';
3
- import { SharedArrayBuffer } from '/node_modules/@webreflection/utils/src/shared-array-buffer.js';
4
-
5
- const SAB = ({ minByteLength = 1032, maxByteLength = 8200 }) =>
6
- new SharedArrayBuffer(minByteLength, { maxByteLength });
7
-
8
- const sharedBC = new BroadcastChannel(CHANNEL);
9
- sharedBC.addEventListener('message', event => {
10
- console.log(event.data);
11
- });
12
-
13
- class Worker extends globalThis.Worker {
14
- constructor(scriptURL, options) {
15
- const channel = crypto.randomUUID();
16
- const bc = new BroadcastChannel(channel);
17
- const sab = SAB(options);
18
- bc.addEventListener('message', handler(sab, options, false));
19
- super(url(scriptURL, 'fallback'), { ...options, type: 'module' });
20
- super.addEventListener('message', () => resolve(this), { once: true });
21
- super.postMessage(post(sab, options).concat(channel));
22
- }
23
- };
24
-
25
- export default (scriptURL, options) => {
26
- const { promise, resolve } = withResolvers();
27
- new Worker(scriptURL, options, resolve);
28
- return promise;
29
- };
@@ -1,19 +0,0 @@
1
- import { SAB, handler, post, url, withResolvers } from './shared.js';
2
-
3
- class Worker extends globalThis.Worker {
4
- constructor(scriptURL, options, resolve) {
5
- const channel = crypto.randomUUID();
6
- const bc = new BroadcastChannel(channel);
7
- const sab = SAB(options);
8
- bc.addEventListener('message', handler(sab, options, true));
9
- super(url(scriptURL, 'firefox'), { ...options, type: 'module' });
10
- super.addEventListener('message', () => resolve(this), { once: true });
11
- super.postMessage(post(sab, options).concat(channel));
12
- }
13
- };
14
-
15
- export default (scriptURL, options) => {
16
- const { promise, resolve } = withResolvers();
17
- new Worker(scriptURL, options, resolve);
18
- return promise;
19
- };
@@ -1 +0,0 @@
1
- export default 'reflected-0123456789';
@@ -1 +0,0 @@
1
- console.log('worker', 'epic fail');