1 | export namespace SharedWorker {
|
2 | export type ProtocolIdentifier = 'experimental';
|
3 |
|
4 | export type FactoryOptions = {
|
5 | negotiateProtocol <Data = unknown>(supported: readonly ['experimental']): Experimental.Protocol<Data>;
|
6 |
|
7 | };
|
8 |
|
9 | export type Factory = (options: FactoryOptions) => void;
|
10 |
|
11 | export namespace Experimental {
|
12 | export type Protocol<Data = unknown> = {
|
13 | readonly initialData: Data;
|
14 | readonly protocol: 'experimental';
|
15 | broadcast: (data: Data) => BroadcastMessage<Data>;
|
16 | ready: () => Protocol<Data>;
|
17 | subscribe: () => AsyncIterableIterator<ReceivedMessage<Data>>;
|
18 | testWorkers: () => AsyncIterableIterator<TestWorker<Data>>;
|
19 | };
|
20 |
|
21 | export type BroadcastMessage<Data = unknown> = {
|
22 | readonly id: string;
|
23 | replies: () => AsyncIterableIterator<ReceivedMessage<Data>>;
|
24 | };
|
25 |
|
26 | export type PublishedMessage<Data = unknown> = {
|
27 | readonly id: string;
|
28 | replies: () => AsyncIterableIterator<ReceivedMessage<Data>>;
|
29 | };
|
30 |
|
31 | export type ReceivedMessage<Data = unknown> = {
|
32 | readonly data: Data;
|
33 | readonly id: string;
|
34 | readonly testWorker: TestWorker;
|
35 | reply: (data: Data) => PublishedMessage<Data>;
|
36 | };
|
37 |
|
38 | export type TestWorker<Data = unknown> = {
|
39 | readonly id: string;
|
40 | readonly file: string;
|
41 | publish: (data: Data) => PublishedMessage<Data>;
|
42 | subscribe: () => AsyncIterableIterator<ReceivedMessage<Data>>;
|
43 | teardown: <TeardownFn extends () => void> (fn: TeardownFn) => TeardownFn;
|
44 | };
|
45 | }
|
46 |
|
47 | export namespace Plugin {
|
48 | export type RegistrationOptions<Identifier extends ProtocolIdentifier, Data = unknown> = {
|
49 | readonly filename: string;
|
50 | readonly initialData?: Data;
|
51 | readonly supportedProtocols: readonly Identifier[];
|
52 | readonly teardown?: () => void;
|
53 | };
|
54 |
|
55 | export namespace Experimental {
|
56 | export type Protocol<Data = unknown> = {
|
57 | readonly available: Promise<void>;
|
58 | readonly currentlyAvailable: boolean;
|
59 | readonly protocol: 'experimental';
|
60 | publish: (data: Data) => PublishedMessage<Data>;
|
61 | subscribe: () => AsyncIterableIterator<ReceivedMessage<Data>>;
|
62 | };
|
63 |
|
64 | export type PublishedMessage<Data = unknown> = {
|
65 | readonly id: string;
|
66 | replies: () => AsyncIterableIterator<ReceivedMessage<Data>>;
|
67 | };
|
68 |
|
69 | export type ReceivedMessage<Data = unknown> = {
|
70 | readonly data: Data;
|
71 | readonly id: string;
|
72 | reply: (data: Data) => PublishedMessage<Data>;
|
73 | };
|
74 | }
|
75 | }
|
76 | }
|
77 |
|
78 | export function registerSharedWorker<Data = unknown>(options: SharedWorker.Plugin.RegistrationOptions<'experimental', Data>): SharedWorker.Plugin.Experimental.Protocol<Data>;
|
79 |
|