osra 0.4.4 → 0.5.0

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 (46) hide show
  1. package/README.md +224 -231
  2. package/build/connections/bidirectional.d.ts +25 -15
  3. package/build/connections/index.d.ts +8 -8
  4. package/build/connections/relay.d.ts +1 -1
  5. package/build/connections/utils.d.ts +6 -5
  6. package/build/index.d.ts +11 -11
  7. package/build/index.js +782 -513
  8. package/build/index.js.map +1 -1
  9. package/build/revivables/abort-signal.d.ts +6 -4
  10. package/build/revivables/array-buffer.d.ts +2 -2
  11. package/build/revivables/async-iterator.d.ts +16 -0
  12. package/build/revivables/bigint.d.ts +1 -1
  13. package/build/revivables/blob.d.ts +3 -3
  14. package/build/revivables/date.d.ts +1 -1
  15. package/build/revivables/error.d.ts +5 -2
  16. package/build/revivables/event-target.d.ts +5 -4
  17. package/build/revivables/event.d.ts +2 -2
  18. package/build/revivables/fallbacks.d.ts +1 -1
  19. package/build/revivables/function.d.ts +4 -4
  20. package/build/revivables/headers.d.ts +1 -1
  21. package/build/revivables/identity.d.ts +3 -3
  22. package/build/revivables/index.d.ts +48 -39
  23. package/build/revivables/json-primitives.d.ts +17 -0
  24. package/build/revivables/map.d.ts +2 -2
  25. package/build/revivables/message-port.d.ts +6 -6
  26. package/build/revivables/promise.d.ts +5 -5
  27. package/build/revivables/readable-stream.d.ts +8 -4
  28. package/build/revivables/request.d.ts +4 -2
  29. package/build/revivables/response.d.ts +2 -2
  30. package/build/revivables/set.d.ts +2 -2
  31. package/build/revivables/symbol.d.ts +5 -3
  32. package/build/revivables/transfer.d.ts +2 -2
  33. package/build/revivables/typed-array.d.ts +3 -3
  34. package/build/revivables/utils.d.ts +5 -10
  35. package/build/revivables/writable-stream.d.ts +4 -4
  36. package/build/types.d.ts +12 -4
  37. package/build/utils/event-channel.d.ts +1 -1
  38. package/build/utils/index.d.ts +11 -12
  39. package/build/utils/replace.d.ts +0 -3
  40. package/build/utils/teardown.d.ts +7 -0
  41. package/build/utils/transferable.d.ts +1 -1
  42. package/build/utils/transport.d.ts +13 -15
  43. package/build/utils/type-guards.d.ts +12 -4
  44. package/build/utils/typed-event-target.d.ts +1 -1
  45. package/build/utils/typed-message-channel.d.ts +3 -2
  46. package/package.json +21 -8
@@ -1,12 +1,14 @@
1
- import type { Message } from '../types';
2
- import type { WebExtOnConnect, WebExtOnMessage, WebExtPort, WebExtRuntime, WebExtSender } from './type-guards';
1
+ import type { Browser } from 'webextension-polyfill';
2
+ import type { Message } from '../types.js';
3
+ import type { WebExtOnConnect, WebExtOnMessage, WebExtPort, WebExtRuntime, WebExtSender } from './type-guards.js';
3
4
  export type MessageContext = {
4
5
  port?: MessagePort | WebExtPort;
5
6
  sender?: WebExtSender;
6
7
  receiveTransport?: ReceivePlatformTransport;
7
8
  source?: MessageEventSource | null;
9
+ origin?: string;
8
10
  };
9
- export type ReceiveHandler = (listener: (event: Message, messageContext: MessageContext) => void) => void;
11
+ export type ReceiveHandler = (listener: (event: Message, messageContext: MessageContext) => void) => void | (() => void);
10
12
  export type EmitHandler = (message: Message, transferables?: Transferable[]) => void;
11
13
  type CustomReceive = ReceivePlatformTransport | ReceiveHandler;
12
14
  type CustomEmit = EmitPlatformTransport | EmitHandler;
@@ -31,25 +33,21 @@ export type ReceiveJsonPlatformTransport = WebSocket | WebExtPort | WebExtOnConn
31
33
  export type JsonPlatformTransport = {
32
34
  isJson: true;
33
35
  } | EmitJsonPlatformTransport | ReceiveJsonPlatformTransport;
34
- type StructuredClonePlatformTransport = Window | ServiceWorker | Worker | SharedWorker | MessagePort;
35
- export type EmitPlatformTransport = EmitJsonPlatformTransport | StructuredClonePlatformTransport;
36
- export type ReceivePlatformTransport = ReceiveJsonPlatformTransport | StructuredClonePlatformTransport;
36
+ export type EmitPlatformTransport = EmitJsonPlatformTransport | Window | ServiceWorker | Worker | SharedWorker | MessagePort;
37
+ export type ReceivePlatformTransport = ReceiveJsonPlatformTransport | Window | ServiceWorkerContainer | Worker | SharedWorker | MessagePort;
37
38
  export type PlatformTransport = EmitPlatformTransport | ReceivePlatformTransport;
38
- export type EmitTransport = EmitPlatformTransport & Extract<CustomTransport, {
39
- emit: any;
40
- }>;
41
- export type ReceiveTransport = ReceivePlatformTransport & Extract<CustomTransport, {
42
- receive: any;
43
- }>;
39
+ export type EmitTransport = EmitPlatformTransport | CustomEmitTransport;
40
+ export type ReceiveTransport = ReceivePlatformTransport | CustomReceiveTransport;
44
41
  export type Transport = PlatformTransport | CustomTransport;
45
- export declare const getWebExtensionGlobal: () => typeof browser;
46
- export declare const getWebExtensionRuntime: () => typeof browser.runtime;
42
+ export declare const getWebExtensionGlobal: () => Browser | undefined;
43
+ export declare const getWebExtensionRuntime: () => import("webextension-polyfill").Runtime.Static | undefined;
47
44
  export declare const checkOsraMessageKey: (message: any, key: string) => message is Message;
48
- export declare const registerOsraMessageListener: ({ listener, transport, remoteName, key, unregisterSignal }: {
45
+ export declare const registerOsraMessageListener: ({ listener, transport, remoteName, key, origin, unregisterSignal }: {
49
46
  listener: (message: Message, messageContext: MessageContext) => void;
50
47
  transport: ReceiveTransport;
51
48
  remoteName?: string;
52
49
  key?: string;
50
+ origin?: string;
53
51
  unregisterSignal?: AbortSignal;
54
52
  }) => void;
55
53
  export declare const sendOsraMessage: (transport: EmitTransport, message: Message, origin?: string, transferables?: Transferable[]) => void;
@@ -1,6 +1,6 @@
1
1
  import type { Runtime } from 'webextension-polyfill';
2
- import type { Message } from '../types';
3
- import type { CustomEmitTransport, CustomReceiveTransport, CustomTransport, EmitJsonPlatformTransport, EmitTransport, JsonPlatformTransport, ReceiveJsonPlatformTransport, ReceiveTransport, Transport } from './transport';
2
+ import type { Message } from '../types.js';
3
+ import type { CustomEmitTransport, CustomReceiveTransport, CustomTransport, EmitJsonPlatformTransport, EmitTransport, JsonPlatformTransport, ReceiveJsonPlatformTransport, ReceiveTransport, Transport } from './transport.js';
4
4
  declare const typedArrayConstructorsByName: {
5
5
  readonly Int8Array: Int8ArrayConstructor;
6
6
  readonly Uint8Array: Uint8ArrayConstructor;
@@ -23,17 +23,25 @@ export declare const typedArrayTypeToTypedArrayConstructor: (value: TypedArrayTy
23
23
  export declare const isTypedArray: (value: unknown) => value is TypedArray;
24
24
  export declare const isWebSocket: (value: unknown) => value is WebSocket;
25
25
  export declare const isServiceWorkerContainer: (value: unknown) => value is ServiceWorkerContainer;
26
+ export declare const isServiceWorker: (value: unknown) => value is ServiceWorker;
26
27
  export declare const isWorker: (value: unknown) => value is Worker;
27
- export declare const isDedicatedWorker: (value: unknown) => value is DedicatedWorkerGlobalScope;
28
+ export type DedicatedWorkerGlobalScopeLike = typeof globalThis & {
29
+ postMessage: (message: unknown, transfer?: Transferable[]) => void;
30
+ name: string;
31
+ };
32
+ export declare const isDedicatedWorker: (value: unknown) => value is DedicatedWorkerGlobalScopeLike;
28
33
  export declare const isSharedWorker: (value: unknown) => value is SharedWorker;
29
34
  export declare const isOsraMessage: (value: unknown) => value is Message;
30
35
  type AnyConstructor = abstract new (...args: any[]) => unknown;
31
36
  /** True if `value` is an instance of any of the given constructors.
32
37
  * Tolerates undefined entries (constructors missing on this platform). */
33
38
  export declare const instanceOfAny: (value: unknown, ctors: readonly (AnyConstructor | undefined)[]) => boolean;
39
+ export declare const isSharedArrayBuffer: (value: unknown) => boolean;
40
+ /** @deprecated Renamed — this only ever checked SharedArrayBuffer, unlike
41
+ * the unrelated clonable fallback module. Use isSharedArrayBuffer. */
34
42
  export declare const isClonable: (value: unknown) => boolean;
35
43
  export declare const isTransferable: (value: unknown) => value is Transferable;
36
- export type WebExtRuntime = typeof browser.runtime;
44
+ export type WebExtRuntime = Runtime.Static;
37
45
  export declare const isWebExtensionRuntime: (value: unknown) => value is WebExtRuntime;
38
46
  export type WebExtPort = ReturnType<WebExtRuntime['connect']> | Runtime.Port;
39
47
  export declare const isWebExtensionPort: (value: unknown, connectPort?: boolean) => value is WebExtPort;
@@ -1,4 +1,4 @@
1
- import type { UnderlyingType } from './type';
1
+ import type { UnderlyingType } from './type.js';
2
2
  export type EventMap = Record<string, Event>;
3
3
  export interface TypedEventTarget<T extends EventMap> extends EventTarget {
4
4
  [UnderlyingType]?: T;
@@ -1,8 +1,9 @@
1
- import type { UnderlyingType } from './type';
2
- import type { TypedEventTarget } from './typed-event-target';
1
+ import type { UnderlyingType } from './type.js';
2
+ import type { TypedEventTarget } from './typed-event-target.js';
3
3
  export type TypedMessagePortEventMap<T = unknown> = {
4
4
  'message': MessageEvent<T>;
5
5
  'messageerror': MessageEvent;
6
+ 'close': Event;
6
7
  };
7
8
  export interface TypedMessagePort<T = unknown> extends Omit<TypedEventTarget<TypedMessagePortEventMap<T>>, typeof UnderlyingType> {
8
9
  [UnderlyingType]?: T;
package/package.json CHANGED
@@ -1,11 +1,19 @@
1
1
  {
2
2
  "name": "osra",
3
- "version": "0.4.4",
3
+ "version": "0.5.0",
4
4
  "description": "Easy communication between workers",
5
5
  "files": [
6
6
  "build"
7
7
  ],
8
8
  "main": "build/index.js",
9
+ "types": "./build/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./build/index.d.ts",
13
+ "import": "./build/index.js"
14
+ },
15
+ "./package.json": "./package.json"
16
+ },
9
17
  "type": "module",
10
18
  "scripts": {
11
19
  "build": "vite build && tsgo --declaration --emitDeclarationOnly",
@@ -17,16 +25,17 @@
17
25
  "dev": "concurrently \"npm run build-test-watch\"",
18
26
  "_dev": "concurrently \"npm run build-watch\" \"npm run build-test-watch\" \"npm run test-watch\"",
19
27
  "dev2": "concurrently \"npm run build-watch\" \"npm run build-test-watch\" \"npm run test-watch-headful\"",
20
- "test": "npm run build-test && npx playwright test",
28
+ "test": "npm run build && npm run build-test && npx playwright test",
21
29
  "test-watch": "set PWTEST_WATCH=1 & npx playwright test",
22
- "test-watch-headful": "nodemon --watch build --exec \"npx playwright test --headed\"",
30
+ "test-watch-headful": "nodemon --watch build-test --exec \"npx playwright test --headed\"",
23
31
  "test-with-coverage": "npm run build-test && npx playwright test && npm run print-coverage && npm run clean-coverage",
24
32
  "print-coverage": "npx nyc report",
25
33
  "clean-coverage": "rimraf .nyc_output coverage",
26
34
  "type-check": "tsgo --noEmit && tsgo --noEmit -p tsconfig.tests.json",
27
35
  "start-server": "http-server -p 3000",
28
36
  "build-extension-test": "node build-extension-test.mjs",
29
- "test-extension": "npm run build-extension-test && npx playwright test -c playwright.extension.config.ts"
37
+ "test-extension": "npm run build-extension-test && npx playwright test -c playwright.extension.config.ts",
38
+ "check-consumer-types": "npm run build && tsgo --noEmit -p tsconfig.consumer.json"
30
39
  },
31
40
  "repository": {
32
41
  "type": "git",
@@ -38,6 +47,9 @@
38
47
  "url": "https://github.com/Banou26/osra/issues"
39
48
  },
40
49
  "homepage": "https://github.com/Banou26/osra#readme",
50
+ "dependencies": {
51
+ "@types/webextension-polyfill": "^0.12.4"
52
+ },
41
53
  "devDependencies": {
42
54
  "@istanbuljs/nyc-config-typescript": "^1.0.2",
43
55
  "@playwright/test": "^1.58.2",
@@ -46,8 +58,7 @@
46
58
  "@types/chrome": "^0.1.27",
47
59
  "@types/firefox-webext-browser": "^143.0.0",
48
60
  "@types/node": "^25.0.2",
49
- "@types/webextension-polyfill": "^0.12.4",
50
- "@typescript/native-preview": "^7.0.0-dev.20260404.1",
61
+ "@typescript/native-preview": "7.0.0-dev.20260404.1",
51
62
  "chai": "^5.3.3",
52
63
  "chai-as-promised": "^8.0.1",
53
64
  "concurrently": "^9.1.0",
@@ -56,6 +67,8 @@
56
67
  "nyc": "^17.1.0",
57
68
  "playwright": "^1.58.2",
58
69
  "vite": "^8.0.3",
59
- "vite-plugin-istanbul": "^8.0.0"
60
- }
70
+ "vite-plugin-istanbul": "^8.0.0",
71
+ "ws": "^8.21.0"
72
+ },
73
+ "sideEffects": false
61
74
  }