osra 0.2.13 → 0.3.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.
- package/LICENSE +21 -21
- package/README.md +319 -304
- package/build/connections/bidirectional.d.ts +53 -0
- package/build/connections/index.d.ts +20 -0
- package/build/connections/utils.d.ts +31 -0
- package/build/index.d.ts +16 -630
- package/build/index.js +918 -634
- package/build/index.js.map +1 -1
- package/build/revivables/abort-signal.d.ts +20 -0
- package/build/revivables/array-buffer.d.ts +12 -0
- package/build/revivables/bigint.d.ts +14 -0
- package/build/revivables/date.d.ts +9 -0
- package/build/revivables/error.d.ts +10 -0
- package/build/revivables/event-target.d.ts +29 -0
- package/build/revivables/function.d.ts +29 -0
- package/build/revivables/headers.d.ts +9 -0
- package/build/revivables/identity.d.ts +39 -0
- package/build/revivables/index.d.ts +39 -0
- package/build/revivables/map.d.ts +11 -0
- package/build/revivables/message-port.d.ts +83 -0
- package/build/revivables/promise.d.ts +34 -0
- package/build/revivables/readable-stream.d.ts +18 -0
- package/build/revivables/request.d.ts +23 -0
- package/build/revivables/response.d.ts +18 -0
- package/build/revivables/set.d.ts +11 -0
- package/build/revivables/transfer.d.ts +37 -0
- package/build/revivables/typed-array.d.ts +15 -0
- package/build/revivables/utils.d.ts +59 -0
- package/build/types.d.ts +45 -0
- package/build/utils/capable-check.d.ts +44 -0
- package/build/utils/event-channel.d.ts +27 -0
- package/build/utils/index.d.ts +11 -0
- package/build/utils/replace.d.ts +25 -0
- package/build/utils/transferable.d.ts +20 -0
- package/build/utils/transport.d.ts +56 -0
- package/build/utils/type-guards.d.ts +58 -0
- package/build/utils/type.d.ts +2 -0
- package/build/utils/typed-event-target.d.ts +16 -0
- package/build/utils/typed-message-channel.d.ts +19 -0
- package/package.json +60 -67
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { TypedMessagePort, TypedMessagePortEventMap } from './typed-message-channel';
|
|
2
|
+
export declare class EventPort<T> extends EventTarget {
|
|
3
|
+
addEventListener<K extends keyof TypedMessagePortEventMap<T> & string>(type: K, listener: ((event: TypedMessagePortEventMap<T>[K]) => void) | null, options?: boolean | AddEventListenerOptions): void;
|
|
4
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void;
|
|
5
|
+
removeEventListener<K extends keyof TypedMessagePortEventMap<T> & string>(type: K, listener: ((event: TypedMessagePortEventMap<T>[K]) => void) | null, options?: boolean | EventListenerOptions): void;
|
|
6
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | EventListenerOptions): void;
|
|
7
|
+
_peer: EventPort<any> | undefined;
|
|
8
|
+
_queue: MessageEvent<T>[];
|
|
9
|
+
_started: boolean;
|
|
10
|
+
_closed: boolean;
|
|
11
|
+
_onClose: (() => void) | undefined;
|
|
12
|
+
private _onmessage;
|
|
13
|
+
get onmessage(): ((this: MessagePort, ev: MessageEvent<T>) => unknown) | null;
|
|
14
|
+
set onmessage(value: ((this: MessagePort, ev: MessageEvent<T>) => unknown) | null);
|
|
15
|
+
onmessageerror: ((this: MessagePort, ev: MessageEvent) => unknown) | null;
|
|
16
|
+
dispatchEvent(event: Event): boolean;
|
|
17
|
+
postMessage(message: T, _options?: Transferable[] | StructuredSerializeOptions): void;
|
|
18
|
+
start(): void;
|
|
19
|
+
close(): void;
|
|
20
|
+
}
|
|
21
|
+
export interface EventPort<T> extends Omit<TypedMessagePort<T>, 'addEventListener' | 'removeEventListener'> {
|
|
22
|
+
}
|
|
23
|
+
export declare class EventChannel<T1 = unknown, T2 = unknown> {
|
|
24
|
+
readonly port1: EventPort<T1>;
|
|
25
|
+
readonly port2: EventPort<T2>;
|
|
26
|
+
constructor();
|
|
27
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './transport';
|
|
2
|
+
export * from '../revivables';
|
|
3
|
+
export * from './replace';
|
|
4
|
+
export * from '../connections';
|
|
5
|
+
export * from './transferable';
|
|
6
|
+
export * from './type-guards';
|
|
7
|
+
export * from './typed-event-target';
|
|
8
|
+
export * from './typed-message-channel';
|
|
9
|
+
export * from './event-channel';
|
|
10
|
+
export * from './type';
|
|
11
|
+
export * from './capable-check';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
type FindMatchingBox<T, M> = M extends {
|
|
2
|
+
isType: (value: unknown) => value is infer S;
|
|
3
|
+
box: (...args: any[]) => infer B;
|
|
4
|
+
} ? T extends S ? B : never : never;
|
|
5
|
+
export type ReplaceWithBox<T, M> = [
|
|
6
|
+
FindMatchingBox<T, M>
|
|
7
|
+
] extends [never] ? T : FindMatchingBox<T, M>;
|
|
8
|
+
export type DeepReplaceWithBox<T, M> = [
|
|
9
|
+
FindMatchingBox<T, M>
|
|
10
|
+
] extends [never] ? T extends Array<infer U> ? Array<DeepReplaceWithBox<U, M>> : T extends object ? {
|
|
11
|
+
[K in keyof T]: DeepReplaceWithBox<T[K], M>;
|
|
12
|
+
} : T : FindMatchingBox<T, M>;
|
|
13
|
+
type FindMatchingRevive<T, M> = M extends {
|
|
14
|
+
box: (...args: any[]) => infer S;
|
|
15
|
+
revive: (...args: any[]) => infer R;
|
|
16
|
+
} ? T extends S ? R : never : never;
|
|
17
|
+
export type ReplaceWithRevive<T, M> = [
|
|
18
|
+
FindMatchingRevive<T, M>
|
|
19
|
+
] extends [never] ? T : FindMatchingRevive<T, M>;
|
|
20
|
+
export type DeepReplaceWithRevive<T, M> = [
|
|
21
|
+
FindMatchingRevive<T, M>
|
|
22
|
+
] extends [never] ? T extends Array<infer U> ? Array<DeepReplaceWithRevive<U, M>> : T extends object ? {
|
|
23
|
+
[K in keyof T]: DeepReplaceWithRevive<T[K], M>;
|
|
24
|
+
} : T : FindMatchingRevive<T, M>;
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { transfer } from '../revivables/transfer';
|
|
2
|
+
export { transfer };
|
|
3
|
+
/**
|
|
4
|
+
* Walk a boxed message and collect the list of Transferable references that
|
|
5
|
+
* should be moved (rather than cloned) when calling postMessage.
|
|
6
|
+
*
|
|
7
|
+
* The rules are:
|
|
8
|
+
* 1. Must-transfer types (MessagePort, streams, OffscreenCanvas) are always
|
|
9
|
+
* included — structured clone cannot represent them.
|
|
10
|
+
* 2. Clonable types (SharedArrayBuffer) are skipped entirely.
|
|
11
|
+
* 3. Other Transferable types (ArrayBuffer, ImageBitmap) are included only
|
|
12
|
+
* when the walker is inside a non-degraded transfer box — i.e. when the
|
|
13
|
+
* user explicitly opted into move semantics at the send site via
|
|
14
|
+
* transfer() AND the platform supports transferring.
|
|
15
|
+
*
|
|
16
|
+
* The transfer intent is carried on the wire by the transfer revivable box;
|
|
17
|
+
* recognising it structurally here (without importing the module) is all the
|
|
18
|
+
* coupling this file needs.
|
|
19
|
+
*/
|
|
20
|
+
export declare const getTransferableObjects: (value: unknown) => Transferable[];
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Message } from '../types';
|
|
2
|
+
import type { WebExtOnConnect, WebExtOnMessage, WebExtPort, WebExtRuntime, WebExtSender } from './type-guards';
|
|
3
|
+
export type MessageContext = {
|
|
4
|
+
port?: MessagePort | WebExtPort;
|
|
5
|
+
sender?: WebExtSender;
|
|
6
|
+
receiveTransport?: ReceivePlatformTransport;
|
|
7
|
+
source?: MessageEventSource | null;
|
|
8
|
+
};
|
|
9
|
+
export type ReceiveHandler = (listener: (event: Message, messageContext: MessageContext) => void) => void;
|
|
10
|
+
export type EmitHandler = (message: Message, transferables?: Transferable[]) => void;
|
|
11
|
+
type CustomReceive = ReceivePlatformTransport | ReceiveHandler;
|
|
12
|
+
type CustomEmit = EmitPlatformTransport | EmitHandler;
|
|
13
|
+
export type CustomTransport = {
|
|
14
|
+
isJson?: boolean;
|
|
15
|
+
} & ({
|
|
16
|
+
receive: CustomReceive;
|
|
17
|
+
emit: CustomEmit;
|
|
18
|
+
} | {
|
|
19
|
+
receive: CustomReceive;
|
|
20
|
+
} | {
|
|
21
|
+
emit: CustomEmit;
|
|
22
|
+
});
|
|
23
|
+
export type CustomEmitTransport = Extract<CustomTransport, {
|
|
24
|
+
emit: any;
|
|
25
|
+
}>;
|
|
26
|
+
export type CustomReceiveTransport = Extract<CustomTransport, {
|
|
27
|
+
receive: any;
|
|
28
|
+
}>;
|
|
29
|
+
export type EmitJsonPlatformTransport = WebSocket | WebExtPort | WebExtRuntime;
|
|
30
|
+
export type ReceiveJsonPlatformTransport = WebSocket | WebExtPort | WebExtOnConnect | WebExtOnMessage | WebExtRuntime;
|
|
31
|
+
export type JsonPlatformTransport = {
|
|
32
|
+
isJson: true;
|
|
33
|
+
} | EmitJsonPlatformTransport | ReceiveJsonPlatformTransport;
|
|
34
|
+
type StructuredClonePlatformTransport = Window | ServiceWorker | Worker | SharedWorker | MessagePort;
|
|
35
|
+
export type EmitPlatformTransport = EmitJsonPlatformTransport | StructuredClonePlatformTransport;
|
|
36
|
+
export type ReceivePlatformTransport = ReceiveJsonPlatformTransport | StructuredClonePlatformTransport;
|
|
37
|
+
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
|
+
}>;
|
|
44
|
+
export type Transport = PlatformTransport | CustomTransport;
|
|
45
|
+
export declare const getWebExtensionGlobal: () => typeof browser;
|
|
46
|
+
export declare const getWebExtensionRuntime: () => typeof browser.runtime;
|
|
47
|
+
export declare const checkOsraMessageKey: (message: any, key: string) => message is Message;
|
|
48
|
+
export declare const registerOsraMessageListener: ({ listener, transport, remoteName, key, unregisterSignal }: {
|
|
49
|
+
listener: (message: Message, messageContext: MessageContext) => void;
|
|
50
|
+
transport: ReceiveTransport;
|
|
51
|
+
remoteName?: string;
|
|
52
|
+
key?: string;
|
|
53
|
+
unregisterSignal?: AbortSignal;
|
|
54
|
+
}) => void;
|
|
55
|
+
export declare const sendOsraMessage: (transport: EmitTransport, message: Message, origin?: string, transferables?: Transferable[]) => void;
|
|
56
|
+
export {};
|
|
@@ -0,0 +1,58 @@
|
|
|
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';
|
|
4
|
+
declare const typedArrayConstructorsByName: {
|
|
5
|
+
readonly Int8Array: Int8ArrayConstructor;
|
|
6
|
+
readonly Uint8Array: Uint8ArrayConstructor;
|
|
7
|
+
readonly Uint8ClampedArray: Uint8ClampedArrayConstructor;
|
|
8
|
+
readonly Int16Array: Int16ArrayConstructor;
|
|
9
|
+
readonly Uint16Array: Uint16ArrayConstructor;
|
|
10
|
+
readonly Int32Array: Int32ArrayConstructor;
|
|
11
|
+
readonly Uint32Array: Uint32ArrayConstructor;
|
|
12
|
+
readonly Float16Array: Float16ArrayConstructor;
|
|
13
|
+
readonly Float32Array: Float32ArrayConstructor;
|
|
14
|
+
readonly Float64Array: Float64ArrayConstructor;
|
|
15
|
+
readonly BigInt64Array: BigInt64ArrayConstructor;
|
|
16
|
+
readonly BigUint64Array: BigUint64ArrayConstructor;
|
|
17
|
+
};
|
|
18
|
+
export type TypedArrayType = keyof typeof typedArrayConstructorsByName;
|
|
19
|
+
export type TypedArrayConstructor = (typeof typedArrayConstructorsByName)[TypedArrayType];
|
|
20
|
+
export type TypedArray = InstanceType<TypedArrayConstructor>;
|
|
21
|
+
export declare const typedArrayToType: (value: TypedArray) => TypedArrayType;
|
|
22
|
+
export declare const typedArrayTypeToTypedArrayConstructor: (value: TypedArrayType) => TypedArrayConstructor;
|
|
23
|
+
export declare const isTypedArray: (value: unknown) => value is TypedArray;
|
|
24
|
+
export declare const isWebSocket: (value: unknown) => value is WebSocket;
|
|
25
|
+
export declare const isServiceWorkerContainer: (value: unknown) => value is ServiceWorkerContainer;
|
|
26
|
+
export declare const isWorker: (value: unknown) => value is Worker;
|
|
27
|
+
export declare const isDedicatedWorker: (value: unknown) => value is DedicatedWorkerGlobalScope;
|
|
28
|
+
export declare const isSharedWorker: (value: unknown) => value is SharedWorker;
|
|
29
|
+
export declare const isOsraMessage: (value: unknown) => value is Message;
|
|
30
|
+
type AnyConstructor = abstract new (...args: any[]) => unknown;
|
|
31
|
+
/** True if `value` is an instance of any of the given (possibly undefined-on-this-platform)
|
|
32
|
+
* constructors. Tolerates missing globals so callers don't have to guard each one. */
|
|
33
|
+
export declare const instanceOfAny: (value: unknown, ctors: readonly (AnyConstructor | undefined)[]) => boolean;
|
|
34
|
+
export declare const isClonable: (value: unknown) => boolean;
|
|
35
|
+
export declare const isTransferable: (value: unknown) => value is Transferable;
|
|
36
|
+
export type WebExtRuntime = typeof browser.runtime;
|
|
37
|
+
export declare const isWebExtensionRuntime: (value: unknown) => value is WebExtRuntime;
|
|
38
|
+
export type WebExtPort = ReturnType<WebExtRuntime['connect']> | Runtime.Port;
|
|
39
|
+
export declare const isWebExtensionPort: (value: unknown, connectPort?: boolean) => value is WebExtPort;
|
|
40
|
+
export type WebExtSender = NonNullable<WebExtPort['sender']>;
|
|
41
|
+
export type WebExtOnConnect = WebExtRuntime['onConnect'];
|
|
42
|
+
export declare const isWebExtensionOnConnect: (value: unknown) => value is WebExtOnConnect;
|
|
43
|
+
export type WebExtOnMessage = WebExtRuntime['onMessage'];
|
|
44
|
+
export declare const isWebExtensionOnMessage: (value: unknown) => value is WebExtOnMessage;
|
|
45
|
+
export declare const isWindow: (value: unknown) => value is Window;
|
|
46
|
+
export declare const isEmitJsonOnlyTransport: (value: unknown) => value is EmitJsonPlatformTransport;
|
|
47
|
+
export declare const isReceiveJsonOnlyTransport: (value: unknown) => value is ReceiveJsonPlatformTransport;
|
|
48
|
+
export type IsJsonOnlyTransport<T extends Transport> = T extends JsonPlatformTransport ? true : false;
|
|
49
|
+
export declare const isJsonOnlyTransport: (value: unknown) => value is Extract<Transport, JsonPlatformTransport>;
|
|
50
|
+
export declare const isEmitTransport: (value: unknown) => value is EmitTransport;
|
|
51
|
+
export declare function assertEmitTransport(transport: Transport): asserts transport is EmitTransport;
|
|
52
|
+
export declare const isReceiveTransport: (value: unknown) => value is ReceiveTransport;
|
|
53
|
+
export declare function assertReceiveTransport(transport: Transport): asserts transport is ReceiveTransport;
|
|
54
|
+
export declare const isCustomEmitTransport: (value: unknown) => value is CustomEmitTransport;
|
|
55
|
+
export declare const isCustomReceiveTransport: (value: unknown) => value is CustomReceiveTransport;
|
|
56
|
+
export declare const isCustomTransport: (value: unknown) => value is CustomTransport;
|
|
57
|
+
export declare const isTransport: (value: unknown) => value is Transport;
|
|
58
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { UnderlyingType } from './type';
|
|
2
|
+
export type EventMap = Record<string, Event>;
|
|
3
|
+
export interface TypedEventTarget<T extends EventMap> extends EventTarget {
|
|
4
|
+
[UnderlyingType]?: T;
|
|
5
|
+
addEventListener<K extends keyof T & string>(type: K, listener: ((event: T[K]) => void) | null, options?: boolean | AddEventListenerOptions): void;
|
|
6
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void;
|
|
7
|
+
removeEventListener<K extends keyof T & string>(type: K, listener: ((event: T[K]) => void) | null, options?: boolean | EventListenerOptions): void;
|
|
8
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | EventListenerOptions): void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Create a new `TypedEventTarget<T>` for a given event map. Centralises the
|
|
12
|
+
* `EventTarget` → `TypedEventTarget<T>` cast so individual call sites don't
|
|
13
|
+
* each need their own (`EventTarget` lacks the generic event map at the type
|
|
14
|
+
* level, but the runtime behaviour is identical).
|
|
15
|
+
*/
|
|
16
|
+
export declare const createTypedEventTarget: <T extends EventMap>() => TypedEventTarget<T>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { UnderlyingType } from './type';
|
|
2
|
+
import type { TypedEventTarget } from './typed-event-target';
|
|
3
|
+
export type TypedMessagePortEventMap<T = unknown> = {
|
|
4
|
+
'message': MessageEvent<T>;
|
|
5
|
+
'messageerror': MessageEvent;
|
|
6
|
+
};
|
|
7
|
+
export interface TypedMessagePort<T = unknown> extends Omit<TypedEventTarget<TypedMessagePortEventMap<T>>, typeof UnderlyingType> {
|
|
8
|
+
[UnderlyingType]?: T;
|
|
9
|
+
onmessage: ((this: MessagePort, ev: MessageEvent<T>) => unknown) | null;
|
|
10
|
+
onmessageerror: ((this: MessagePort, ev: MessageEvent) => unknown) | null;
|
|
11
|
+
postMessage(message: T, transfer: Transferable[]): void;
|
|
12
|
+
postMessage(message: T, options?: StructuredSerializeOptions): void;
|
|
13
|
+
start(): void;
|
|
14
|
+
close(): void;
|
|
15
|
+
}
|
|
16
|
+
export interface TypedMessageChannel<T1 = unknown, T2 = unknown> {
|
|
17
|
+
readonly port1: TypedMessagePort<T1>;
|
|
18
|
+
readonly port2: TypedMessagePort<T2>;
|
|
19
|
+
}
|
package/package.json
CHANGED
|
@@ -1,67 +1,60 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "osra",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Easy communication between workers",
|
|
5
|
-
"files": [
|
|
6
|
-
"build"
|
|
7
|
-
],
|
|
8
|
-
"main": "build/index.js",
|
|
9
|
-
"type": "module",
|
|
10
|
-
"scripts": {
|
|
11
|
-
"build": "vite build",
|
|
12
|
-
"build-watch": "vite build --watch",
|
|
13
|
-
"build-test": "vite build --config vite.test.config.ts",
|
|
14
|
-
"build-test-watch": "vite build --config vite.test.config.ts --watch",
|
|
15
|
-
"dev": "concurrently \"npm run build-test-watch\"",
|
|
16
|
-
"_dev": "concurrently \"npm run build-watch\" \"npm run build-test-watch\" \"npm run test-watch\"",
|
|
17
|
-
"dev2": "concurrently \"npm run build-watch\" \"npm run build-test-watch\" \"npm run test-watch-headful\"",
|
|
18
|
-
"test": "npm run build-test && npx playwright test",
|
|
19
|
-
"test-watch": "set PWTEST_WATCH=1 & npx playwright test",
|
|
20
|
-
"test-watch-headful": "nodemon --watch build --exec \"npx playwright test --headed\"",
|
|
21
|
-
"test-with-coverage": "npm run build-test && npx playwright test && npm run print-coverage && npm run clean-coverage",
|
|
22
|
-
"print-coverage": "npx nyc report",
|
|
23
|
-
"clean-coverage": "rimraf .nyc_output coverage",
|
|
24
|
-
"type-check": "tsgo --noEmit",
|
|
25
|
-
"start-server": "http-server -p 3000",
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"@
|
|
45
|
-
"@
|
|
46
|
-
"@types/
|
|
47
|
-
"@types/
|
|
48
|
-
"@types/
|
|
49
|
-
"@
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
"typescript-event-target": "^1.1.1",
|
|
62
|
-
"vite": "^7.2.2",
|
|
63
|
-
"vite-plugin-dts": "^4.5.4",
|
|
64
|
-
"vite-plugin-istanbul": "^7.2.0",
|
|
65
|
-
"vite-plugin-top-level-await": "^1.6.0"
|
|
66
|
-
}
|
|
67
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "osra",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Easy communication between workers",
|
|
5
|
+
"files": [
|
|
6
|
+
"build"
|
|
7
|
+
],
|
|
8
|
+
"main": "build/index.js",
|
|
9
|
+
"type": "module",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "vite build && tsgo --declaration --emitDeclarationOnly",
|
|
12
|
+
"build-watch": "vite build --watch",
|
|
13
|
+
"build-test": "vite build --config vite.test.config.ts",
|
|
14
|
+
"build-test-watch": "vite build --config vite.test.config.ts --watch",
|
|
15
|
+
"dev": "concurrently \"npm run build-test-watch\"",
|
|
16
|
+
"_dev": "concurrently \"npm run build-watch\" \"npm run build-test-watch\" \"npm run test-watch\"",
|
|
17
|
+
"dev2": "concurrently \"npm run build-watch\" \"npm run build-test-watch\" \"npm run test-watch-headful\"",
|
|
18
|
+
"test": "npm run build-test && npx playwright test",
|
|
19
|
+
"test-watch": "set PWTEST_WATCH=1 & npx playwright test",
|
|
20
|
+
"test-watch-headful": "nodemon --watch build --exec \"npx playwright test --headed\"",
|
|
21
|
+
"test-with-coverage": "npm run build-test && npx playwright test && npm run print-coverage && npm run clean-coverage",
|
|
22
|
+
"print-coverage": "npx nyc report",
|
|
23
|
+
"clean-coverage": "rimraf .nyc_output coverage",
|
|
24
|
+
"type-check": "tsgo --noEmit && tsgo --noEmit -p tsconfig.tests.json",
|
|
25
|
+
"start-server": "http-server -p 3000",
|
|
26
|
+
"build-extension-test": "vite build --config vite.extension-test.config.ts",
|
|
27
|
+
"build-extension-test-watch": "vite build --config vite.extension-test.config.ts --watch",
|
|
28
|
+
"test-extension": "npm run build-extension-test && npx playwright test -c playwright.extension.config.ts"
|
|
29
|
+
},
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "git+https://github.com/Banou26/osra.git"
|
|
33
|
+
},
|
|
34
|
+
"author": "Banou26",
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/Banou26/osra/issues"
|
|
38
|
+
},
|
|
39
|
+
"homepage": "https://github.com/Banou26/osra#readme",
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@istanbuljs/nyc-config-typescript": "^1.0.2",
|
|
42
|
+
"@playwright/test": "^1.58.2",
|
|
43
|
+
"@types/chai": "^5.2.3",
|
|
44
|
+
"@types/chai-as-promised": "^8.0.2",
|
|
45
|
+
"@types/chrome": "^0.1.27",
|
|
46
|
+
"@types/firefox-webext-browser": "^143.0.0",
|
|
47
|
+
"@types/node": "^25.0.2",
|
|
48
|
+
"@types/webextension-polyfill": "^0.12.4",
|
|
49
|
+
"@typescript/native-preview": "^7.0.0-dev.20260404.1",
|
|
50
|
+
"chai": "^5.3.3",
|
|
51
|
+
"chai-as-promised": "^8.0.1",
|
|
52
|
+
"concurrently": "^9.1.0",
|
|
53
|
+
"http-server": "^14.1.1",
|
|
54
|
+
"nodemon": "^3.1.10",
|
|
55
|
+
"nyc": "^17.1.0",
|
|
56
|
+
"playwright": "^1.58.2",
|
|
57
|
+
"vite": "^8.0.3",
|
|
58
|
+
"vite-plugin-istanbul": "^8.0.0"
|
|
59
|
+
}
|
|
60
|
+
}
|