@gjsify/worker_threads 0.3.21 → 0.4.3
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/_virtual/_rolldown/runtime.js +1 -0
- package/lib/esm/index.js +1 -1
- package/lib/esm/message-port.js +1 -1
- package/lib/esm/worker.js +1 -1
- package/lib/types/message-port.d.ts +4 -1
- package/package.json +45 -42
- package/src/index.spec.ts +0 -1591
- package/src/index.ts +0 -148
- package/src/message-port.ts +0 -130
- package/src/test.mts +0 -8
- package/src/worker.ts +0 -394
- package/tsconfig.json +0 -29
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=Object.defineProperty,__name=(t,n)=>e(t,`name`,{value:n,configurable:!0});export{__name};
|
package/lib/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{MessagePort as e}from"./message-port.js";import{Worker as t}from"./worker.js";const n=globalThis.__gjsify_worker_context,r=!n,i=n?.parentPort??null,a=n?.workerData??null,o=n?.threadId??0,s={},c=Symbol(`worker_threads.SHARE_ENV`);var MessageChannel=class{port1;port2;constructor(){this.port1=new e,this.port2=new e,this.port1._otherPort=this.port2,this.port2._otherPort=this.port1}};const l=new Map;var BroadcastChannel=class{name;_closed=!1;onmessage=null;onmessageerror=null;constructor(e){this.name=String(e),l.has(this.name)||l.set(this.name,new Set),l.get(this.name).add(this)}postMessage(e){if(this._closed)throw Error(`BroadcastChannel is closed`);let t=l.get(this.name);if(t){for(let n of t)if(n!==this&&!n._closed){let t=structuredClone(e);Promise.resolve().then(()=>{!n._closed&&n.onmessage&&n.onmessage({data:t})})}}}close(){if(this._closed)return;this._closed=!0;let e=l.get(this.name);e&&(e.delete(this),e.size===0&&l.delete(this.name)),this.onmessage=null,this.onmessageerror=null}addEventListener(e,t){e===`message`?this.onmessage=t:e===`messageerror`&&(this.onmessageerror=t)}removeEventListener(e,t){e===`message`?this.onmessage=null:e===`messageerror`&&(this.onmessageerror=null)}dispatchEvent(e){return!0}};const u=new Map;function setEnvironmentData(e,t){t===void 0?u.delete(e):u.set(e,t)}function getEnvironmentData(e){return u.get(e)}function receiveMessageOnPort(e){if(e._hasQueuedMessages)return{message:e._dequeueMessage()}}function markAsUntransferable(e){}function markAsUncloneable(e){}function moveMessagePortToContext(e,t){return e}var d={isMainThread:r,parentPort:i,workerData:a,threadId:o,resourceLimits:s,SHARE_ENV:c,Worker:t,MessageChannel,MessagePort:e,BroadcastChannel,setEnvironmentData,getEnvironmentData,receiveMessageOnPort,markAsUntransferable,markAsUncloneable,moveMessagePortToContext};export{BroadcastChannel,MessageChannel,e as MessagePort,c as SHARE_ENV,t as Worker,d as default,getEnvironmentData,r as isMainThread,markAsUncloneable,markAsUntransferable,moveMessagePortToContext,i as parentPort,receiveMessageOnPort,s as resourceLimits,setEnvironmentData,o as threadId,a as workerData};
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{MessagePort as e}from"./message-port.js";import{Worker as t}from"./worker.js";const n=globalThis.__gjsify_worker_context,r=!n,i=n?.parentPort??null,a=n?.workerData??null,o=n?.threadId??0,s={},c=Symbol(`worker_threads.SHARE_ENV`);var MessageChannel=class{port1;port2;constructor(){this.port1=new e,this.port2=new e,this.port1._otherPort=this.port2,this.port2._otherPort=this.port1}};const l=new Map;var BroadcastChannel=class{name;_closed=!1;onmessage=null;onmessageerror=null;constructor(e){this.name=String(e),l.has(this.name)||l.set(this.name,new Set),l.get(this.name).add(this)}postMessage(e){if(this._closed)throw Error(`BroadcastChannel is closed`);let t=l.get(this.name);if(t){for(let n of t)if(n!==this&&!n._closed){let t=structuredClone(e);Promise.resolve().then(()=>{!n._closed&&n.onmessage&&n.onmessage({data:t})})}}}close(){if(this._closed)return;this._closed=!0;let e=l.get(this.name);e&&(e.delete(this),e.size===0&&l.delete(this.name)),this.onmessage=null,this.onmessageerror=null}addEventListener(e,t){e===`message`?this.onmessage=t:e===`messageerror`&&(this.onmessageerror=t)}removeEventListener(e,t){e===`message`?this.onmessage=null:e===`messageerror`&&(this.onmessageerror=null)}dispatchEvent(e){return!0}};const u=new Map;function setEnvironmentData(e,t){t===void 0?u.delete(e):u.set(e,t)}function getEnvironmentData(e){return u.get(e)}function receiveMessageOnPort(e){if(e._hasQueuedMessages)return{message:e._dequeueMessage()}}function markAsUntransferable(e){}function markAsUncloneable(e){}function moveMessagePortToContext(e,t){return e}var d={isMainThread:r,parentPort:i,workerData:a,threadId:o,resourceLimits:s,SHARE_ENV:c,Worker:t,MessageChannel,MessagePort:e,BroadcastChannel,setEnvironmentData,getEnvironmentData,receiveMessageOnPort,markAsUntransferable,markAsUncloneable,moveMessagePortToContext};export{BroadcastChannel,MessageChannel,e as MessagePort,c as SHARE_ENV,t as Worker,d as default,getEnvironmentData,r as isMainThread,markAsUncloneable,markAsUntransferable,moveMessagePortToContext,i as parentPort,receiveMessageOnPort,s as resourceLimits,setEnvironmentData,o as threadId,a as workerData};
|
package/lib/esm/message-port.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{EventEmitter as e}from"node:events";var
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{EventEmitter as e}from"node:events";function isTransferredPortPlaceholder(e){return typeof e==`object`&&!!e&&e.__gjsifyTransferredPort===!0}var t=class MessagePort extends e{_started=!1;_closed=!1;_detached=!1;_messageQueue=[];_otherPort=null;_aeWrappers=new Map;start(){this._started||this._closed||(this._started=!0,this._drainQueue())}close(){if(this._closed)return;this._closed=!0;let e=this._otherPort;this._otherPort=null,e&&(e._otherPort=null),this.emit(`close`),this.removeAllListeners()}postMessage(e,t){if(this._closed)return;let n=this._otherPort;if(!n)return;let r=[],i=[];if(t&&t.length>0){let e=new Set;for(let n of t){if(e.has(n))throw createDataCloneError(`Transfer list contains duplicate entries`);if(e.add(n),n instanceof MessagePort){if(n===this)throw createDataCloneError(`Cannot transfer source port`);if(n._closed||n._detached)throw createDataCloneError(`MessagePort in transfer list is already detached`);i.push(n);continue}let a=Object.prototype.toString.call(n).slice(8,-1);if(a===`ArrayBuffer`){let e=n;if(e.detached===!0)throw createDataCloneError(`ArrayBuffer in transfer list is detached`);r.push(e);continue}throw createDataCloneError(a===`SharedArrayBuffer`?`SharedArrayBuffer cannot appear in transfer list (it is shared, not transferred)`:`Value at index ${t.indexOf(n)} of transfer list is not transferable`)}}let a=i.slice(),o=e;i.length>0&&(o=substitutePortsWithPlaceholders(e,i));let s;try{s=structuredClone(o,{transfer:r.length>0?r:void 0})}catch(e){this.emit(`messageerror`,e instanceof Error?e:Error(`Could not clone message`));return}let c=s;if(a.length>0){let e=a.map(e=>{let t=e._otherPort,n=e._messageQueue.slice();e._messageQueue.length=0,e._otherPort=null,e._detached=!0,e._closed=!0;let r=new MessagePort;r._otherPort=t,t&&(t._otherPort=r);for(let e of n)r._messageQueue.push(e);return r});c=replacePlaceholdersWithPorts(s,e)}n._receiveMessage(c)}ref(){return this}unref(){return this}_receiveMessage(e){if(!this._closed){if(!this._started){this._messageQueue.push(e);return}this._dispatchMessage(e)}}get _hasQueuedMessages(){return this._messageQueue.length>0}_dequeueMessage(){return this._messageQueue.shift()}get _wasTransferred(){return this._detached}_drainQueue(){for(;this._messageQueue.length>0;)this._dispatchMessage(this._messageQueue.shift())}_dispatchMessage(e){Promise.resolve().then(()=>{this._closed||this.emit(`message`,e)})}addEventListener(e,t){if(t)if(e===`message`){let wrapper=e=>{t({data:e,type:`message`})};this._aeWrappers.set(t,wrapper),super.on(`message`,wrapper)}else super.on(e,t)}removeEventListener(e,t){if(t)if(e===`message`){let e=this._aeWrappers.get(t);e&&(super.off(`message`,e),this._aeWrappers.delete(t))}else super.off(e,t)}on(e,t){return super.on(e,t),e===`message`&&!this._started&&this.start(),this}addListener(e,t){return this.on(e,t)}once(e,t){return super.once(e,t),e===`message`&&!this._started&&this.start(),this}};function createDataCloneError(e){let t=globalThis.DOMException;if(typeof t==`function`){let n=new t(e,`DataCloneError`);if(n.code===void 0)try{Object.defineProperty(n,`code`,{value:25,configurable:!0})}catch{}return n}let n=Error(e);return n.name=`DataCloneError`,n.code=25,n}function substitutePortsWithPlaceholders(e,n){let r=new Map;for(let e=0;e<n.length;e++)r.set(n[e],e);function walk(e,n){if(typeof e!=`object`||!e)return e;if(e instanceof t){let t=r.get(e);return t===void 0?e:{__gjsifyTransferredPort:!0,index:t}}if(n.has(e))return n.get(e);if(Array.isArray(e)){let t=[];n.set(e,t);for(let r=0;r<e.length;r++)r in e&&(t[r]=walk(e[r],n));return t}if(Object.prototype.toString.call(e).slice(8,-1)===`Object`){let t={};n.set(e,t);for(let r of Object.keys(e))t[r]=walk(e[r],n);return t}return e}return walk(e,new Map)}function replacePlaceholdersWithPorts(e,t){function walk(e,n){if(typeof e!=`object`||!e)return e;if(isTransferredPortPlaceholder(e))return t[e.index];if(n.has(e))return n.get(e);if(Array.isArray(e)){n.set(e,e);for(let t=0;t<e.length;t++)t in e&&(e[t]=walk(e[t],n));return e}if(Object.prototype.toString.call(e).slice(8,-1)===`Object`){n.set(e,e);for(let t of Object.keys(e))e[t]=walk(e[t],n);return e}return e}return walk(e,new Map)}export{t as MessagePort};
|
package/lib/esm/worker.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{EventEmitter as e}from"node:events";import t from"@girs/gio-2.0";import n from"@girs/glib-2.0";let r=1;const i=new TextEncoder,a=i.encode(`import GLib from 'gi://GLib';
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{EventEmitter as e}from"node:events";import t from"@girs/gio-2.0";import n from"@girs/glib-2.0";let r=1;const i=new TextEncoder,a=i.encode(`import GLib from 'gi://GLib';
|
|
2
2
|
import Gio from 'gi://Gio';
|
|
3
3
|
|
|
4
4
|
const loop = new GLib.MainLoop(null, false);
|
|
@@ -2,6 +2,7 @@ import { EventEmitter } from 'node:events';
|
|
|
2
2
|
export declare class MessagePort extends EventEmitter {
|
|
3
3
|
private _started;
|
|
4
4
|
private _closed;
|
|
5
|
+
private _detached;
|
|
5
6
|
private _messageQueue;
|
|
6
7
|
/** @internal Linked port for in-process communication */
|
|
7
8
|
_otherPort: MessagePort | null;
|
|
@@ -9,12 +10,14 @@ export declare class MessagePort extends EventEmitter {
|
|
|
9
10
|
private _aeWrappers;
|
|
10
11
|
start(): void;
|
|
11
12
|
close(): void;
|
|
12
|
-
postMessage(value: unknown,
|
|
13
|
+
postMessage(value: unknown, transferList?: unknown[]): void;
|
|
13
14
|
ref(): this;
|
|
14
15
|
unref(): this;
|
|
15
16
|
_receiveMessage(message: unknown): void;
|
|
16
17
|
get _hasQueuedMessages(): boolean;
|
|
17
18
|
_dequeueMessage(): unknown | undefined;
|
|
19
|
+
/** @internal Has this port been transferred elsewhere? */
|
|
20
|
+
get _wasTransferred(): boolean;
|
|
18
21
|
private _drainQueue;
|
|
19
22
|
private _dispatchMessage;
|
|
20
23
|
/**
|
package/package.json
CHANGED
|
@@ -1,44 +1,47 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
2
|
+
"name": "@gjsify/worker_threads",
|
|
3
|
+
"version": "0.4.3",
|
|
4
|
+
"description": "Node.js worker_threads module for Gjs",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"module": "lib/esm/index.js",
|
|
7
|
+
"types": "lib/types/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./lib/types/index.d.ts",
|
|
11
|
+
"default": "./lib/esm/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"lib"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"clear": "rm -rf lib tsconfig.tsbuildinfo tsconfig.types.tsbuildinfo test.gjs.mjs test.node.mjs || exit 0",
|
|
19
|
+
"check": "tsc --noEmit",
|
|
20
|
+
"build": "gjsify run build:gjsify && gjsify run build:types",
|
|
21
|
+
"build:gjsify": "gjsify build --library 'src/**/*.{ts,js}' --exclude 'src/**/*.spec.{mts,ts}' 'src/test.{mts,ts}'",
|
|
22
|
+
"build:types": "tsc",
|
|
23
|
+
"build:test": "gjsify run build:test:gjs && gjsify run build:test:node",
|
|
24
|
+
"build:test:gjs": "gjsify build src/test.mts --app gjs --outfile test.gjs.mjs",
|
|
25
|
+
"build:test:node": "gjsify build src/test.mts --app node --outfile test.node.mjs",
|
|
26
|
+
"test": "gjsify run build:gjsify && gjsify run build:test && gjsify run test:node && gjsify run test:gjs",
|
|
27
|
+
"test:gjs": "gjsify run test.gjs.mjs",
|
|
28
|
+
"test:node": "node test.node.mjs"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"gjs",
|
|
32
|
+
"node",
|
|
33
|
+
"worker_threads"
|
|
34
|
+
],
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@gjsify/cli": "workspace:^",
|
|
37
|
+
"@gjsify/node-globals": "workspace:^",
|
|
38
|
+
"@gjsify/unit": "workspace:^",
|
|
39
|
+
"@types/node": "^25.6.2",
|
|
40
|
+
"typescript": "^6.0.3"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@girs/gio-2.0": "2.88.0-4.0.0-rc.15",
|
|
44
|
+
"@girs/glib-2.0": "2.88.0-4.0.0-rc.15",
|
|
45
|
+
"@gjsify/events": "workspace:^"
|
|
12
46
|
}
|
|
13
|
-
|
|
14
|
-
"scripts": {
|
|
15
|
-
"clear": "rm -rf lib tsconfig.tsbuildinfo tsconfig.types.tsbuildinfo test.gjs.mjs test.node.mjs || exit 0",
|
|
16
|
-
"check": "tsc --noEmit",
|
|
17
|
-
"build": "yarn build:gjsify && yarn build:types",
|
|
18
|
-
"build:gjsify": "gjsify build --library 'src/**/*.{ts,js}' --exclude 'src/**/*.spec.{mts,ts}' 'src/test.{mts,ts}'",
|
|
19
|
-
"build:types": "tsc",
|
|
20
|
-
"build:test": "yarn build:test:gjs && yarn build:test:node",
|
|
21
|
-
"build:test:gjs": "gjsify build src/test.mts --app gjs --outfile test.gjs.mjs",
|
|
22
|
-
"build:test:node": "gjsify build src/test.mts --app node --outfile test.node.mjs",
|
|
23
|
-
"test": "yarn build:gjsify && yarn build:test && yarn test:node && yarn test:gjs",
|
|
24
|
-
"test:gjs": "gjsify run test.gjs.mjs",
|
|
25
|
-
"test:node": "node test.node.mjs"
|
|
26
|
-
},
|
|
27
|
-
"keywords": [
|
|
28
|
-
"gjs",
|
|
29
|
-
"node",
|
|
30
|
-
"worker_threads"
|
|
31
|
-
],
|
|
32
|
-
"devDependencies": {
|
|
33
|
-
"@gjsify/cli": "^0.3.21",
|
|
34
|
-
"@gjsify/node-globals": "^0.3.21",
|
|
35
|
-
"@gjsify/unit": "^0.3.21",
|
|
36
|
-
"@types/node": "^25.6.2",
|
|
37
|
-
"typescript": "^6.0.3"
|
|
38
|
-
},
|
|
39
|
-
"dependencies": {
|
|
40
|
-
"@girs/gio-2.0": "2.88.0-4.0.0-rc.14",
|
|
41
|
-
"@girs/glib-2.0": "2.88.0-4.0.0-rc.14",
|
|
42
|
-
"@gjsify/events": "^0.3.21"
|
|
43
|
-
}
|
|
44
|
-
}
|
|
47
|
+
}
|