osra 0.2.1 → 0.2.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.
package/build/index.d.ts CHANGED
@@ -1,3 +1,23 @@
1
+ import { Runtime } from 'webextension-polyfill';
2
+ import { TypedEventTarget } from 'typescript-event-target';
3
+
4
+ declare type AllocatedMessageChannel<T extends StructurableTransferable = StructurableTransferable, T2 extends StructurableTransferable = StructurableTransferable> = {
5
+ uuid: Uuid;
6
+ /** Local port */
7
+ port1: StrictMessagePort<T>;
8
+ /** Remote port that gets transferred, might be undefined if a remote context created the channel */
9
+ port2?: StrictMessagePort<T2>;
10
+ };
11
+
12
+ declare namespace arrayBuffer {
13
+ export {
14
+ type,
15
+ isType,
16
+ box,
17
+ revive
18
+ }
19
+ }
20
+
1
21
  declare type BidirectionalConnectionMessage = {
2
22
  type: 'init';
3
23
  remoteUuid: Uuid;
@@ -19,12 +39,135 @@ declare type BidirectionalConnectionMessage = {
19
39
  portId: string;
20
40
  };
21
41
 
22
- declare type Capable = Structurable | TransferBox | Transferable | Revivable | {
42
+ declare const box: <T extends ArrayBuffer, T2 extends RevivableContext>(value: T, _context: T2) => {
43
+ type: "arrayBuffer";
44
+ __OSRA_BOX__: "revivable";
45
+ } & (IsJsonOnlyTransport<T2["transport"]> extends true ? {
46
+ base64Buffer: string;
47
+ } : IsJsonOnlyTransport<T2["transport"]> extends false ? {
48
+ arrayBuffer: ArrayBuffer;
49
+ } : {
50
+ base64Buffer: string;
51
+ } | {
52
+ arrayBuffer: ArrayBuffer;
53
+ });
54
+
55
+ declare const box_2: <T extends Date, T2 extends RevivableContext>(value: T, _context: T2) => {
56
+ type: "date";
57
+ ISOString: string;
58
+ __OSRA_BOX__: "revivable";
59
+ };
60
+
61
+ declare const box_3: <T extends Error, T2 extends RevivableContext>(value: T, _context: T2) => {
62
+ type: "error";
63
+ message: string;
64
+ stack: string;
65
+ __OSRA_BOX__: "revivable";
66
+ };
67
+
68
+ declare const box_4: <T extends TypedArray, T2 extends RevivableContext>(value: T, context: T2) => {
69
+ type: "typedArray";
70
+ typedArrayType: string;
71
+ __OSRA_BOX__: "revivable";
72
+ } & (IsJsonOnlyTransport<T2["transport"]> extends true ? {
73
+ base64Buffer: string;
74
+ } : IsJsonOnlyTransport<T2["transport"]> extends false ? {
75
+ arrayBuffer: ArrayBuffer;
76
+ } : {
77
+ base64Buffer: string;
78
+ } | {
79
+ arrayBuffer: ArrayBuffer;
80
+ }) & {
81
+ [UnderlyingType]: T;
82
+ };
83
+
84
+ declare const box_5: <T, T2 extends RevivableContext = RevivableContext>(value: StructurableTransferablePort<T>, context: T2) => ({
85
+ type: "messagePort";
86
+ portId: `${string}-${string}-${string}-${string}-${string}`;
87
+ __OSRA_BOX__: "revivable";
88
+ } & {
89
+ [UnderlyingType]: StrictMessagePort<ExtractStructurableTransferable<T>>;
90
+ }) | ({
91
+ type: "messagePort";
92
+ port: StructurableTransferablePort<T>;
93
+ __OSRA_BOX__: "revivable";
94
+ } & {
95
+ [UnderlyingType]: StrictMessagePort<ExtractStructurableTransferable<T>>;
96
+ });
97
+
98
+ declare const box_6: <T, T2 extends RevivableContext>(value: CapablePromise<T>, context: T2) => BoxedPromise<ExtractCapable<T>>;
99
+
100
+ declare const box_7: <T extends (...args: any[]) => any, T2 extends RevivableContext>(value: T & CapableFunction<T>, context: T2) => BoxedFunction<T>;
101
+
102
+ declare const box_8: <T extends ReadableStream, T2 extends RevivableContext>(value: T, context: T2) => BoxedReadableStream<T>;
103
+
104
+ export declare const BoxBase: {
105
+ readonly __OSRA_BOX__: "revivable";
106
+ readonly type: string;
107
+ };
108
+
109
+ export declare type BoxBase<T extends string = string> = typeof BoxBase & {
110
+ type: T;
111
+ };
112
+
113
+ declare type BoxedFunction<T extends (...args: any[]) => any = (...args: any[]) => any> = BoxBase<typeof type_6> & {
114
+ port: BoxedMessagePort;
115
+ } & {
116
+ [UnderlyingType]: (...args: Parameters<T>) => Promise<Awaited<ReturnType<T>>>;
117
+ };
118
+
119
+ declare type BoxedMessagePort<T extends StructurableTransferable = StructurableTransferable> = BoxBase<typeof type_7> & ({
120
+ portId: string;
121
+ } | {
122
+ port: StrictMessagePort<T>;
123
+ }) & {
124
+ [UnderlyingType]: StrictMessagePort<T>;
125
+ };
126
+
127
+ declare type BoxedPromise<T extends Capable = Capable> = {
128
+ __OSRA_BOX__: 'revivable';
129
+ type: typeof type_5;
130
+ port: ReturnType<typeof box_5>;
131
+ [UnderlyingType]: T;
132
+ };
133
+
134
+ declare type BoxedReadableStream<T extends ReadableStream = ReadableStream> = {
135
+ __OSRA_BOX__: 'revivable';
136
+ type: typeof type_8;
137
+ port: BoxedMessagePort;
138
+ [UnderlyingType]: T;
139
+ };
140
+
141
+ declare type CallContext = [
142
+ /** MessagePort or portId that will be used to send the result of the function call */
143
+ MessagePort | string,
144
+ /** Arguments that will be passed to the function call */
145
+ Capable[]
146
+ ];
147
+
148
+ declare type Capable<TModules extends readonly RevivableModule[] = DefaultRevivableModules> = StructurableTransferable | InferRevivables<TModules> | {
23
149
  [key: string]: Capable;
24
150
  } | Array<Capable> | Map<Capable, Capable> | Set<Capable>;
25
151
 
152
+ declare const CapableError: unique symbol;
153
+
154
+ declare type CapableFunction<T> = T extends (...args: infer P) => infer R ? P extends Capable[] ? R extends Capable ? T : never : never : never;
155
+
156
+ declare type CapablePromise<T> = T extends Capable ? Promise<T> : {
157
+ [CapableError]: 'Message type must extend Capable';
158
+ __badType__: T;
159
+ };
160
+
26
161
  declare type ConnectionMessage = BidirectionalConnectionMessage | UnidirectionalConnectionMessage;
27
162
 
163
+ declare type Context = {
164
+ type: 'resolve';
165
+ data: Capable;
166
+ } | {
167
+ type: 'reject';
168
+ error: string;
169
+ };
170
+
28
171
  declare type CustomTransport = {
29
172
  isJson?: boolean;
30
173
  } & ({
@@ -36,10 +179,32 @@ declare type CustomTransport = {
36
179
  emit: EmitPlatformTransport | ((message: Message, transferables?: Transferable[]) => void);
37
180
  });
38
181
 
182
+ declare namespace date {
183
+ export {
184
+ type_2 as type,
185
+ isType_2 as isType,
186
+ box_2 as box,
187
+ revive_2 as revive
188
+ }
189
+ }
190
+
191
+ declare type DefaultRevivableModules = typeof defaultRevivableModules;
192
+
193
+ declare const defaultRevivableModules: readonly [typeof arrayBuffer, typeof date, typeof error, typeof typedArray, typeof promise, typeof func, typeof messagePort, typeof readableStream];
194
+
39
195
  declare type EmitJsonPlatformTransport = WebSocket | WebExtPort;
40
196
 
41
197
  declare type EmitPlatformTransport = EmitJsonPlatformTransport | Window | ServiceWorker | Worker | SharedWorker | MessagePort;
42
198
 
199
+ declare namespace error {
200
+ export {
201
+ type_3 as type,
202
+ isType_3 as isType,
203
+ box_3 as box,
204
+ revive_3 as revive
205
+ }
206
+ }
207
+
43
208
  /**
44
209
  * Protocol mode:
45
210
  * - Bidirectional mode
@@ -61,10 +226,76 @@ export declare const expose: <T extends Capable>(value: Capable, { transport: _t
61
226
  logger?: {};
62
227
  }) => Promise<T>;
63
228
 
229
+ declare type ExtractCapable<T> = T extends Capable ? T : never;
230
+
231
+ declare type ExtractStructurableTransferable<T> = T extends StructurableTransferable ? T : never;
232
+
233
+ declare type ExtractType<T> = T extends {
234
+ isType: (value: unknown) => value is infer S;
235
+ } ? S : never;
236
+
237
+ declare namespace func {
238
+ export {
239
+ type_6 as type,
240
+ CallContext,
241
+ BoxedFunction,
242
+ isType_6 as isType,
243
+ box_7 as box,
244
+ revive_6 as revive
245
+ }
246
+ }
247
+
248
+ declare type InferRevivables<TModules extends readonly unknown[]> = ExtractType<TModules[number]>;
249
+
250
+ declare type IsJsonOnlyTransport<T extends Transport> = T extends JsonPlatformTransport ? true : false;
251
+
252
+ declare const isType: (value: unknown) => value is ArrayBuffer;
253
+
254
+ declare const isType_2: (value: unknown) => value is Date;
255
+
256
+ declare const isType_3: (value: unknown) => value is Error;
257
+
258
+ declare const isType_4: (value: unknown) => value is TypedArray;
259
+
260
+ declare const isType_5: (value: unknown) => value is Promise<any>;
261
+
262
+ declare const isType_6: (value: unknown) => value is (...args: any[]) => any;
263
+
264
+ declare const isType_7: (value: unknown) => value is MessagePort;
265
+
266
+ declare const isType_8: (value: unknown) => value is ReadableStream;
267
+
64
268
  declare type Jsonable = boolean | null | number | string | {
65
269
  [key: string]: Jsonable;
66
270
  } | Array<Jsonable>;
67
271
 
272
+ declare type JsonPlatformTransport = {
273
+ isJson: true;
274
+ } | EmitJsonPlatformTransport | ReceiveJsonPlatformTransport;
275
+
276
+ declare const makeMessageChannelAllocator: () => {
277
+ getUniqueUuid: () => `${string}-${string}-${string}-${string}-${string}`;
278
+ set: (uuid: Uuid, messagePorts: {
279
+ port1: StrictMessagePort;
280
+ port2?: StrictMessagePort;
281
+ }) => void;
282
+ alloc: (uuid?: Uuid | undefined, messagePorts?: {
283
+ port1: StrictMessagePort;
284
+ port2?: StrictMessagePort;
285
+ }) => {
286
+ port1: StrictMessagePort;
287
+ port2?: StrictMessagePort;
288
+ uuid: `${string}-${string}-${string}-${string}-${string}`;
289
+ };
290
+ has: (uuid: string) => boolean;
291
+ get: (uuid: string) => AllocatedMessageChannel<StructurableTransferable, StructurableTransferable> | undefined;
292
+ free: (uuid: string) => boolean;
293
+ getOrAlloc: (uuid?: Uuid | undefined, messagePorts?: {
294
+ port1: StrictMessagePort;
295
+ port2?: StrictMessagePort;
296
+ }) => AllocatedMessageChannel<StructurableTransferable, StructurableTransferable>;
297
+ };
298
+
68
299
  declare type Message = MessageBase & MessageVariant;
69
300
 
70
301
  declare type MessageBase = {
@@ -74,6 +305,8 @@ declare type MessageBase = {
74
305
  name?: string;
75
306
  };
76
307
 
308
+ declare type MessageChannelAllocator = ReturnType<typeof makeMessageChannelAllocator>;
309
+
77
310
  declare type MessageContext = {
78
311
  port?: MessagePort | WebExtPort;
79
312
  sender?: WebExtSender;
@@ -81,9 +314,23 @@ declare type MessageContext = {
81
314
  source?: MessageEventSource | null;
82
315
  };
83
316
 
84
- declare type MessageVariant = ProtocolMessage | ConnectionMessage;
317
+ declare type MessageEventMap = {
318
+ message: CustomEvent<Message>;
319
+ };
85
320
 
86
- declare const OSRA_BOX: "__OSRA_BOX__";
321
+ declare type MessageEventTarget_2 = TypedEventTarget<MessageEventMap>;
322
+
323
+ declare namespace messagePort {
324
+ export {
325
+ type_7 as type,
326
+ BoxedMessagePort,
327
+ isType_7 as isType,
328
+ box_5 as box,
329
+ revive_7 as revive
330
+ }
331
+ }
332
+
333
+ declare type MessageVariant = ProtocolMessage | ConnectionMessage;
87
334
 
88
335
  declare const OSRA_KEY: "__OSRA_KEY__";
89
336
 
@@ -97,6 +344,17 @@ declare type PlatformCapabilities = {
97
344
 
98
345
  declare type PlatformTransport = EmitPlatformTransport | ReceivePlatformTransport;
99
346
 
347
+ declare namespace promise {
348
+ export {
349
+ type_5 as type,
350
+ Context,
351
+ BoxedPromise,
352
+ isType_5 as isType,
353
+ box_6 as box,
354
+ revive_5 as revive
355
+ }
356
+ }
357
+
100
358
  declare type ProtocolMessage = {
101
359
  type: 'announce';
102
360
  /** Only set when acknowledging a remote announcement */
@@ -110,11 +368,77 @@ declare type ProtocolMessage = {
110
368
  remoteUuid: Uuid;
111
369
  };
112
370
 
371
+ declare type PullContext = {
372
+ type: 'pull' | 'cancel';
373
+ };
374
+
375
+ declare namespace readableStream {
376
+ export {
377
+ type_8 as type,
378
+ PullContext,
379
+ BoxedReadableStream,
380
+ isType_8 as isType,
381
+ box_8 as box,
382
+ revive_8 as revive
383
+ }
384
+ }
385
+
113
386
  declare type ReceiveJsonPlatformTransport = WebSocket | WebExtPort | WebExtOnConnect | WebExtOnMessage;
114
387
 
115
388
  declare type ReceivePlatformTransport = ReceiveJsonPlatformTransport | Window | ServiceWorker | Worker | SharedWorker | MessagePort;
116
389
 
117
- declare type Revivable = MessagePort | Promise<Capable> | TypedArray | ArrayBuffer | ReadableStream | Date | Error | ((...args: Capable[]) => Promise<Capable>);
390
+ declare type RevivableContext<TModules extends readonly RevivableModule[] = DefaultRevivableModules> = {
391
+ platformCapabilities: PlatformCapabilities;
392
+ transport: Transport;
393
+ remoteUuid: Uuid;
394
+ messagePorts: Set<MessagePort>;
395
+ messageChannels: MessageChannelAllocator;
396
+ sendMessage: (message: ConnectionMessage) => void;
397
+ revivableModules: TModules;
398
+ eventTarget: MessageEventTarget_2;
399
+ };
400
+
401
+ declare type RevivableModule<T extends string = string, T2 = any, T3 extends BoxBase<T> = any> = {
402
+ readonly type: T;
403
+ readonly isType: (value: unknown) => value is T2;
404
+ readonly box: ((value: T2, context: RevivableContext) => T3) | ((...args: any[]) => any);
405
+ readonly revive: (value: T3, context: RevivableContext) => T2;
406
+ };
407
+
408
+ declare const revive: <T extends ReturnType<typeof box>, T2 extends RevivableContext>(value: T, _context: T2) => ArrayBuffer;
409
+
410
+ declare const revive_2: <T extends ReturnType<typeof box_2>, T2 extends RevivableContext>(value: T, _context: T2) => Date;
411
+
412
+ declare const revive_3: <T extends ReturnType<typeof box_3>, T2 extends RevivableContext>(value: T, _context: T2) => Error;
413
+
414
+ declare const revive_4: <T extends ReturnType<typeof box_4>, T2 extends RevivableContext>(value: T, context: T2) => T[UnderlyingType];
415
+
416
+ declare const revive_5: <T extends BoxedPromise, T2 extends RevivableContext>(value: T, context: T2) => Promise<T[typeof UnderlyingType]>;
417
+
418
+ declare const revive_6: <T extends BoxedFunction, T2 extends RevivableContext>(value: T, context: T2) => T[UnderlyingType];
419
+
420
+ declare const revive_7: <T extends StructurableTransferable, T2 extends RevivableContext>(value: BoxedMessagePort<T>, context: T2) => StrictMessagePort<T>;
421
+
422
+ declare const revive_8: <T extends BoxedReadableStream, T2 extends RevivableContext>(value: T, context: T2) => T[UnderlyingType];
423
+
424
+ declare interface StrictMessagePort<T = StructurableTransferable> extends EventTarget {
425
+ [UnderlyingType]: T;
426
+ onmessage: ((this: MessagePort, ev: MessageEvent<T>) => any) | null;
427
+ onmessageerror: ((this: MessagePort, ev: MessageEvent) => any) | null;
428
+ close(): void;
429
+ postMessage(message: T, transfer: Transferable[]): void;
430
+ postMessage(message: T, options?: StructuredSerializeOptions): void;
431
+ start(): void;
432
+ addEventListener<K extends keyof StrictMessagePortEventMap<T>>(type: K, listener: (this: MessagePort, ev: StrictMessagePortEventMap<T>[K]) => any, options?: boolean | AddEventListenerOptions): void;
433
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
434
+ removeEventListener<K extends keyof StrictMessagePortEventMap<T>>(type: K, listener: (this: MessagePort, ev: StrictMessagePortEventMap<T>[K]) => any, options?: boolean | EventListenerOptions): void;
435
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
436
+ }
437
+
438
+ declare type StrictMessagePortEventMap<T = any> = {
439
+ 'message': MessageEvent<T>;
440
+ 'messageerror': MessageEvent;
441
+ };
118
442
 
119
443
  declare type Structurable = Jsonable
120
444
  /** not really structureable but here for convenience */
@@ -122,17 +446,67 @@ declare type Structurable = Jsonable
122
446
  [key: string]: Structurable;
123
447
  } | Array<Structurable> | Map<Structurable, Structurable> | Set<Structurable>;
124
448
 
125
- declare type TransferBox<T extends Transferable = Transferable> = {
126
- [OSRA_BOX]: 'transferable';
127
- value: T;
449
+ declare type StructurableTransferable = Structurable | Transferable | {
450
+ [key: string]: StructurableTransferable;
451
+ } | Array<StructurableTransferable> | Map<StructurableTransferable, StructurableTransferable> | Set<StructurableTransferable>;
452
+
453
+ declare const StructurableTransferableError: unique symbol;
454
+
455
+ declare type StructurableTransferablePort<T> = T extends StructurableTransferable ? StrictMessagePort<T> : {
456
+ [StructurableTransferableError]: 'Message type must extend StructurableTransferable';
457
+ __badType__: T;
128
458
  };
129
459
 
130
460
  declare type Transport = PlatformTransport | CustomTransport;
131
461
 
462
+ declare const type: "arrayBuffer";
463
+
464
+ declare const type_2: "date";
465
+
466
+ declare const type_3: "error";
467
+
468
+ declare const type_4: "typedArray";
469
+
470
+ declare const type_5: "promise";
471
+
472
+ declare const type_6: "function";
473
+
474
+ declare const type_7: "messagePort";
475
+
476
+ declare const type_8: "readableStream";
477
+
132
478
  declare type TypedArray = typeof typedArrays[number];
133
479
 
480
+ declare namespace typedArray {
481
+ export {
482
+ type_4 as type,
483
+ TypedArrayConstructor,
484
+ TypedArray,
485
+ typedArrayToType,
486
+ TypedArrayType,
487
+ typedArrayTypeToTypedArrayConstructor,
488
+ isType_4 as isType,
489
+ box_4 as box,
490
+ revive_4 as revive
491
+ }
492
+ }
493
+
494
+ declare type TypedArrayConstructor = typeof typedArrayConstructors[number];
495
+
496
+ declare const typedArrayConstructors: (Int8ArrayConstructor | Uint8ArrayConstructor | Uint8ClampedArrayConstructor | Int16ArrayConstructor | Uint16ArrayConstructor | Int32ArrayConstructor | Uint32ArrayConstructor | Float16ArrayConstructor | Float32ArrayConstructor | Float64ArrayConstructor | BigInt64ArrayConstructor | BigUint64ArrayConstructor)[];
497
+
134
498
  declare const typedArrays: (BigInt64Array<ArrayBuffer> | BigUint64Array<ArrayBuffer> | Int8Array<ArrayBuffer> | Float64Array<ArrayBuffer> | Uint8ClampedArray<ArrayBuffer> | Int16Array<ArrayBuffer> | Uint16Array<ArrayBuffer> | Int32Array<ArrayBuffer> | Uint32Array<ArrayBuffer> | Float16Array<ArrayBuffer> | Float32Array<ArrayBuffer> | Uint8Array<ArrayBuffer>)[];
135
499
 
500
+ declare const typedArrayToType: <T extends TypedArray>(value: T) => "BigUint64Array" | "BigInt64Array" | "Float64Array" | "Int8Array" | "Uint8ClampedArray" | "Int16Array" | "Uint16Array" | "Int32Array" | "Uint32Array" | "Float16Array" | "Float32Array" | "Uint8Array";
501
+
502
+ declare type TypedArrayType = ReturnType<typeof typedArrayToType>;
503
+
504
+ declare const typedArrayTypeToTypedArrayConstructor: (value: TypedArrayType) => TypedArrayConstructor;
505
+
506
+ export declare const UnderlyingType: unique symbol;
507
+
508
+ export declare type UnderlyingType = typeof UnderlyingType;
509
+
136
510
  declare type UnidirectionalConnectionMessage = {
137
511
  type: 'message';
138
512
  remoteUuid: Uuid;
@@ -146,7 +520,7 @@ declare type WebExtOnConnect = WebExtRuntime['onConnect'];
146
520
 
147
521
  declare type WebExtOnMessage = WebExtRuntime['onMessage'];
148
522
 
149
- declare type WebExtPort = ReturnType<WebExtRuntime['connect']>;
523
+ declare type WebExtPort = ReturnType<WebExtRuntime['connect']> | Runtime.Port;
150
524
 
151
525
  declare type WebExtRuntime = typeof browser.runtime;
152
526