@gjsify/worker_threads 0.4.35 → 0.4.37
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/lib/esm/browser.js +1 -0
- package/lib/types/browser.d.ts +106 -0
- package/package.json +28 -12
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";const e=globalThis.DedicatedWorkerGlobalScope!==void 0&&typeof globalThis.importScripts==`function`,t=!e,n=e?Math.floor(Math.random()*2147483647)+1:0,r={},i=Symbol(`worker_threads.SHARE_ENV`),a=`__gjsifyWorkerData`,o=`__gjsifyWorkerExit`;function isWorkerDataEnvelope(e){return typeof e==`object`&&!!e&&a in e}let s=null,c=!1;const l=[];function _setWorkerData(e){for(s=e,c=!0;l.length>0;)l.shift()(e)}let u=s;function onWorkerData(){return!e||c?Promise.resolve(s):new Promise(e=>l.push(e))}const d=globalThis.MessageChannel,f=globalThis.MessagePort,p=globalThis.BroadcastChannel;function makeParentPort(){let e=globalThis,t=new Map,dataInterceptor=t=>{let n=t.data;isWorkerDataEnvelope(n)&&(e.removeEventListener(`message`,dataInterceptor),_setWorkerData(n[a]))};e.addEventListener(`message`,dataInterceptor);let makeForwarder=e=>t=>{let n=t.data;isWorkerDataEnvelope(n)||e(n)};return{postMessage(t,n){n&&n.length>0?e.postMessage(t,n):e.postMessage(t)},on(t,n){let r=t===`close`?`close`:t===`messageerror`?`messageerror`:`message`,i=r===`message`?makeForwarder(n):e=>n(e.data);return n.__wrapped=i,e.addEventListener(r,i),this},off(t,n){let r=t===`close`?`close`:t===`messageerror`?`messageerror`:`message`,i=n.__wrapped;return i&&e.removeEventListener(r,i),this},once(n,r){let i=n===`close`?`close`:n===`messageerror`?`messageerror`:`message`,a=i===`message`?makeForwarder(r):e=>r(e.data),wrapped=n=>{i===`message`&&isWorkerDataEnvelope(n.data)||(e.removeEventListener(i,wrapped),t.delete(r),a(n))};return t.set(r,wrapped),e.addEventListener(i,wrapped),this},addListener(e,t){return this.on(e,t)},removeListener(e,t){return this.off(e,t)},close(){e.close?.()},start(){},ref(){},unref(){}}}const m=e?makeParentPort():null;var Worker=class{_worker;_listeners=new Map;_exited=!1;threadId;resourceLimits;constructor(e,t){let n=e instanceof URL?e:String(e);this._worker=new globalThis.Worker(n,{type:t?.type??`module`,name:t?.name}),this.threadId=Math.floor(Math.random()*2147483647)+1,this.resourceLimits=t?.resourceLimits??{},this._worker.addEventListener(`message`,e=>{let t=e.data;if(typeof t==`object`&&t&&o in t){let e=t[o];this._worker.terminate(),this._emitExit(typeof e==`number`?e:0);return}this._emit(`message`,t)}),this._worker.addEventListener(`messageerror`,e=>this._emit(`messageerror`,e.data)),this._worker.addEventListener(`error`,e=>this._emit(`error`,e.error??e));let r={[a]:t?.workerData},i=t?.transferList;i&&i.length>0?this._worker.postMessage(r,i):this._worker.postMessage(r),queueMicrotask(()=>this._emit(`online`))}_emit(e,...t){let n=this._listeners.get(e);if(n)for(let e of[...n])e(...t)}_emitExit(e){this._exited||(this._exited=!0,this._emit(`exit`,e))}on(e,t){return this._listeners.has(e)||this._listeners.set(e,new Set),this._listeners.get(e).add(t),this}off(e,t){return this._listeners.get(e)?.delete(t),this}once(e,t){let wrapped=(...n)=>{this.off(e,wrapped),t(...n)};return this.on(e,wrapped)}addListener(e,t){return this.on(e,t)}removeListener(e,t){return this.off(e,t)}postMessage(e,t){t&&t.length>0?this._worker.postMessage(e,t):this._worker.postMessage(e)}async terminate(){return this._worker.terminate(),this._emitExit(1),1}ref(){}unref(){}};const h=new Map;function setEnvironmentData(e,t){t===void 0?h.delete(e):h.set(e,t)}function getEnvironmentData(e){return h.get(e)}function receiveMessageOnPort(e){}function markAsUntransferable(e){}function markAsUncloneable(e){}function moveMessagePortToContext(e,t){return e}var g={isMainThread:t,parentPort:m,workerData:u,onWorkerData,threadId:n,resourceLimits:r,SHARE_ENV:i,Worker,MessageChannel:d,MessagePort:f,BroadcastChannel:p,setEnvironmentData,getEnvironmentData,receiveMessageOnPort,markAsUntransferable,markAsUncloneable,moveMessagePortToContext};export{p as BroadcastChannel,d as MessageChannel,f as MessagePort,i as SHARE_ENV,Worker,g as default,getEnvironmentData,t as isMainThread,markAsUncloneable,markAsUntransferable,moveMessagePortToContext,onWorkerData,m as parentPort,receiveMessageOnPort,r as resourceLimits,setEnvironmentData,n as threadId,u as workerData};
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
type Listener = (...args: unknown[]) => void;
|
|
2
|
+
export declare const isMainThread: boolean;
|
|
3
|
+
export declare const threadId: number;
|
|
4
|
+
export declare const resourceLimits: Record<string, unknown>;
|
|
5
|
+
export declare const SHARE_ENV: unique symbol;
|
|
6
|
+
export declare let workerData: unknown;
|
|
7
|
+
/**
|
|
8
|
+
* Resolves with the value the spawner passed as `options.workerData`.
|
|
9
|
+
* Resolves immediately if the envelope already arrived. Outside a Worker scope
|
|
10
|
+
* (main page), resolves with `null`. This is the browser-faithful replacement
|
|
11
|
+
* for Node's synchronously-available `workerData`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function onWorkerData(): Promise<unknown>;
|
|
14
|
+
export declare const MessageChannel: typeof globalThis.MessageChannel;
|
|
15
|
+
export declare const MessagePort: typeof globalThis.MessagePort;
|
|
16
|
+
export declare const BroadcastChannel: typeof globalThis.BroadcastChannel;
|
|
17
|
+
interface NodeParentPort {
|
|
18
|
+
postMessage(value: unknown, transferList?: Transferable[]): void;
|
|
19
|
+
on(event: 'message' | 'messageerror' | 'close', listener: Listener): NodeParentPort;
|
|
20
|
+
off(event: 'message' | 'messageerror' | 'close', listener: Listener): NodeParentPort;
|
|
21
|
+
once(event: 'message' | 'messageerror' | 'close', listener: Listener): NodeParentPort;
|
|
22
|
+
addListener(event: 'message' | 'messageerror' | 'close', listener: Listener): NodeParentPort;
|
|
23
|
+
removeListener(event: 'message' | 'messageerror' | 'close', listener: Listener): NodeParentPort;
|
|
24
|
+
close(): void;
|
|
25
|
+
start(): void;
|
|
26
|
+
ref(): void;
|
|
27
|
+
unref(): void;
|
|
28
|
+
}
|
|
29
|
+
export declare const parentPort: NodeParentPort | null;
|
|
30
|
+
export interface WorkerOptions {
|
|
31
|
+
workerData?: unknown;
|
|
32
|
+
transferList?: Transferable[];
|
|
33
|
+
name?: string;
|
|
34
|
+
type?: 'classic' | 'module';
|
|
35
|
+
/** Accepted for Node parity; no Web equivalent (ENOTSUP). */
|
|
36
|
+
resourceLimits?: Record<string, number>;
|
|
37
|
+
/** Accepted for Node parity; ignored on the Web. */
|
|
38
|
+
argv?: unknown[];
|
|
39
|
+
/** Accepted for Node parity; ignored on the Web. */
|
|
40
|
+
execArgv?: string[];
|
|
41
|
+
/** Accepted for Node parity; ignored on the Web. */
|
|
42
|
+
env?: Record<string, string> | symbol;
|
|
43
|
+
}
|
|
44
|
+
export declare class Worker {
|
|
45
|
+
private _worker;
|
|
46
|
+
private _listeners;
|
|
47
|
+
private _exited;
|
|
48
|
+
readonly threadId: number;
|
|
49
|
+
readonly resourceLimits: Record<string, unknown>;
|
|
50
|
+
constructor(filename: string | URL, options?: WorkerOptions);
|
|
51
|
+
private _emit;
|
|
52
|
+
private _emitExit;
|
|
53
|
+
on(event: string, listener: Listener): this;
|
|
54
|
+
off(event: string, listener: Listener): this;
|
|
55
|
+
once(event: string, listener: Listener): this;
|
|
56
|
+
addListener(event: string, listener: Listener): this;
|
|
57
|
+
removeListener(event: string, listener: Listener): this;
|
|
58
|
+
postMessage(value: unknown, transferList?: Transferable[]): void;
|
|
59
|
+
/**
|
|
60
|
+
* Terminates the underlying Web Worker. Resolves with exit code 1 — Web
|
|
61
|
+
* Workers can't surface a Node-style numeric exit; a cooperative worker
|
|
62
|
+
* may instead post `{ __gjsifyWorkerExit: code }` before stopping.
|
|
63
|
+
*/
|
|
64
|
+
terminate(): Promise<number>;
|
|
65
|
+
/** No-op — the Web has no event-loop ref counting. */
|
|
66
|
+
ref(): void;
|
|
67
|
+
/** No-op — the Web has no event-loop ref counting. */
|
|
68
|
+
unref(): void;
|
|
69
|
+
}
|
|
70
|
+
export declare function setEnvironmentData(key: string, value: unknown): void;
|
|
71
|
+
export declare function getEnvironmentData(key: string): unknown;
|
|
72
|
+
export declare function receiveMessageOnPort(_port: MessagePort): {
|
|
73
|
+
message: unknown;
|
|
74
|
+
} | undefined;
|
|
75
|
+
export declare function markAsUntransferable(_object: unknown): void;
|
|
76
|
+
export declare function markAsUncloneable(_object: unknown): void;
|
|
77
|
+
export declare function moveMessagePortToContext<T>(port: T, _context: unknown): T;
|
|
78
|
+
declare const _default: {
|
|
79
|
+
isMainThread: boolean;
|
|
80
|
+
parentPort: NodeParentPort;
|
|
81
|
+
workerData: unknown;
|
|
82
|
+
onWorkerData: typeof onWorkerData;
|
|
83
|
+
threadId: number;
|
|
84
|
+
resourceLimits: Record<string, unknown>;
|
|
85
|
+
SHARE_ENV: symbol;
|
|
86
|
+
Worker: typeof Worker;
|
|
87
|
+
MessageChannel: {
|
|
88
|
+
new (): MessageChannel;
|
|
89
|
+
prototype: MessageChannel;
|
|
90
|
+
};
|
|
91
|
+
MessagePort: {
|
|
92
|
+
new (): MessagePort;
|
|
93
|
+
prototype: MessagePort;
|
|
94
|
+
};
|
|
95
|
+
BroadcastChannel: {
|
|
96
|
+
new (name: string): BroadcastChannel;
|
|
97
|
+
prototype: BroadcastChannel;
|
|
98
|
+
};
|
|
99
|
+
setEnvironmentData: typeof setEnvironmentData;
|
|
100
|
+
getEnvironmentData: typeof getEnvironmentData;
|
|
101
|
+
receiveMessageOnPort: typeof receiveMessageOnPort;
|
|
102
|
+
markAsUntransferable: typeof markAsUntransferable;
|
|
103
|
+
markAsUncloneable: typeof markAsUncloneable;
|
|
104
|
+
moveMessagePortToContext: typeof moveMessagePortToContext;
|
|
105
|
+
};
|
|
106
|
+
export default _default;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gjsify/worker_threads",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.37",
|
|
4
4
|
"description": "Node.js worker_threads module for Gjs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
".": {
|
|
10
10
|
"types": "./lib/types/index.d.ts",
|
|
11
11
|
"default": "./lib/esm/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./browser": {
|
|
14
|
+
"types": "./lib/types/browser.d.ts",
|
|
15
|
+
"default": "./lib/esm/browser.js"
|
|
12
16
|
}
|
|
13
17
|
},
|
|
14
18
|
"files": [
|
|
@@ -24,6 +28,7 @@
|
|
|
24
28
|
"prebuild:test:fixtures": "mkdir -p fixtures && cp src/fixtures/*.mjs fixtures/",
|
|
25
29
|
"build:test:gjs": "gjsify build src/test.mts --app gjs --outfile test.gjs.mjs",
|
|
26
30
|
"build:test:node": "gjsify build src/test.mts --app node --outfile test.node.mjs",
|
|
31
|
+
"build:test:browser": "gjsify build src/test.browser.mts --app browser --outfile dist/test.browser.mjs",
|
|
27
32
|
"test": "gjsify run build:gjsify && gjsify run build:test && gjsify run test:node && gjsify run test:gjs",
|
|
28
33
|
"test:gjs": "gjsify run test.gjs.mjs",
|
|
29
34
|
"test:node": "node test.node.mjs"
|
|
@@ -34,24 +39,35 @@
|
|
|
34
39
|
"worker_threads"
|
|
35
40
|
],
|
|
36
41
|
"devDependencies": {
|
|
37
|
-
"@gjsify/cli": "^0.4.
|
|
38
|
-
"@gjsify/node-globals": "^0.4.
|
|
39
|
-
"@gjsify/unit": "^0.4.
|
|
42
|
+
"@gjsify/cli": "^0.4.37",
|
|
43
|
+
"@gjsify/node-globals": "^0.4.37",
|
|
44
|
+
"@gjsify/unit": "^0.4.37",
|
|
40
45
|
"@types/node": "^25.9.1",
|
|
41
|
-
"typescript": "^
|
|
46
|
+
"typescript": "^5.9.3"
|
|
42
47
|
},
|
|
43
48
|
"dependencies": {
|
|
44
|
-
"@girs/gio-2.0": "2.88.0-4.0.
|
|
45
|
-
"@girs/glib-2.0": "2.88.0-4.0.
|
|
46
|
-
"@gjsify/events": "^0.4.
|
|
47
|
-
"@gjsify/message-channel": "^0.4.
|
|
48
|
-
"@gjsify/sab-native": "^0.4.
|
|
49
|
+
"@girs/gio-2.0": "2.88.0-4.0.4",
|
|
50
|
+
"@girs/glib-2.0": "2.88.0-4.0.4",
|
|
51
|
+
"@gjsify/events": "^0.4.37",
|
|
52
|
+
"@gjsify/message-channel": "^0.4.37",
|
|
53
|
+
"@gjsify/sab-native": "^0.4.37"
|
|
49
54
|
},
|
|
50
55
|
"gjsify": {
|
|
51
56
|
"runtimes": {
|
|
52
57
|
"gjs": "polyfill",
|
|
53
58
|
"node": "none",
|
|
54
|
-
"browser": "
|
|
59
|
+
"browser": "partial",
|
|
60
|
+
"nativescript": "none"
|
|
55
61
|
}
|
|
56
|
-
}
|
|
62
|
+
},
|
|
63
|
+
"license": "MIT",
|
|
64
|
+
"repository": {
|
|
65
|
+
"type": "git",
|
|
66
|
+
"url": "git+https://github.com/gjsify/gjsify.git",
|
|
67
|
+
"directory": "packages/node/worker_threads"
|
|
68
|
+
},
|
|
69
|
+
"bugs": {
|
|
70
|
+
"url": "https://github.com/gjsify/gjsify/issues"
|
|
71
|
+
},
|
|
72
|
+
"homepage": "https://github.com/gjsify/gjsify/tree/main/packages/node/worker_threads#readme"
|
|
57
73
|
}
|