@lunora/platform-node 1.0.0-alpha.164 → 1.0.0-alpha.166
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/dist/conformance/index.mjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/packem_shared/{createNodePlatform-C1z36ZqT.mjs → createNodePlatform-BREG-OzE.mjs} +1 -1
- package/dist/packem_shared/{createNodeShardRegistry-D1gAjQBl.mjs → createNodeShardRegistry-BiwoJDuk.mjs} +1 -1
- package/dist/packem_shared/createNodeSocketHost-ByOmEGFe.mjs +2 -0
- package/package.json +7 -7
- package/dist/packem_shared/createNodeSocketHost-Bpn7V-ru.mjs +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createNodeShardKvStore as
|
|
1
|
+
import{NODE_CAPABILITIES as g}from"@lunora/platform";import{createNodeShardKvStore as D}from"../packem_shared/createNodeShardKvStore-DVi1OsvH.mjs";import{createNodeSchedulerHost as k}from"../packem_shared/createNodeSchedulerHost-BIJ4H38-.mjs";import{createNodeShardHost as T}from"../packem_shared/createNodeShardHost-B6mt1S-h.mjs";import{createNodeShardRegistry as H}from"../packem_shared/createNodeShardRegistry-BiwoJDuk.mjs";import{createNodeSocketHost as b}from"../packem_shared/createNodeSocketHost-ByOmEGFe.mjs";const P=()=>{const{database:o,dispose:m,host:p}=T(),h=D(o),i=H(),{directory:l}=i,{readFrames:w,restoreSocket:S,simulateRecycle:u,socket:f}=b(o),c=new Set,s=new Map,{dispose:y,scheduler:d,simulateDeadLetter:N}=k(o,{onDispatch:(e,a,t)=>{c.add(t.id),s.set(e,(s.get(e)??0)+1)}}),n=()=>{y(),m(),i.close()};return{capabilities:g,awaitAlarmFired:async e=>{await new Promise(a=>{setTimeout(a,Math.max(0,e-Date.now())+30)})},awaitJobDispatched:async e=>{const t=(await d.list?.())?.find(r=>r.id===e);return t!==void 0&&await new Promise(r=>{setTimeout(r,Math.max(0,t.scheduledFor-Date.now())+30)}),c.has(e)},cleanup:n,cronTicks:e=>s.get(e)??0,directory:l,disposeTerminally:n,kv:h,readFrames:w,restoreSocket:S,scheduler:d,shard:p,simulateDeadLetter:N,simulateRecycle:u,socket:f}};export{P as createNodeConformanceHost};
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{NODE_SCHEDULER_DISPATCH_PATH as r,createNodeDispatchRoute as t}from"./packem_shared/NODE_SCHEDULER_DISPATCH_PATH-CNBAtztq.mjs";import{createNodeGlobalStore as d,createNodeSqlExec as c}from"./packem_shared/createNodeGlobalStore-DhHyIT8I.mjs";import{createNodeHttpServer as p}from"./packem_shared/createNodeHttpServer-D4YVdhJn.mjs";import{createNodeShardKvStore as m}from"./packem_shared/createNodeShardKvStore-DVi1OsvH.mjs";import{createNodePlatform as S}from"./packem_shared/createNodePlatform-
|
|
1
|
+
import{NODE_SCHEDULER_DISPATCH_PATH as r,createNodeDispatchRoute as t}from"./packem_shared/NODE_SCHEDULER_DISPATCH_PATH-CNBAtztq.mjs";import{createNodeGlobalStore as d,createNodeSqlExec as c}from"./packem_shared/createNodeGlobalStore-DhHyIT8I.mjs";import{createNodeHttpServer as p}from"./packem_shared/createNodeHttpServer-D4YVdhJn.mjs";import{createNodeShardKvStore as m}from"./packem_shared/createNodeShardKvStore-DVi1OsvH.mjs";import{createNodePlatform as S}from"./packem_shared/createNodePlatform-BREG-OzE.mjs";import{createNodeProfileHandler as l}from"./packem_shared/createNodeProfileHandler-MX5xKPg0.mjs";import{createNodeQueueHost as h}from"./packem_shared/createNodeQueueHost-CttDb5sY.mjs";import{createNodeR2Bucket as u}from"./packem_shared/createNodeR2Bucket-6I2HobcB.mjs";import{createNodeSchedulerHost as D}from"./packem_shared/createNodeSchedulerHost-BIJ4H38-.mjs";import{createNodeShardHost as P}from"./packem_shared/createNodeShardHost-B6mt1S-h.mjs";import{createNodeShardNamespace as _}from"./packem_shared/createNodeShardNamespace-BgQjDv7V.mjs";import{createNodeShardRegistry as n}from"./packem_shared/createNodeShardRegistry-BiwoJDuk.mjs";import{bindShardSockets as w,createNodeShardState as A}from"./packem_shared/bindShardSockets-9GvSocBW.mjs";import{createNodeSocketHost as T}from"./packem_shared/createNodeSocketHost-ByOmEGFe.mjs";import{createNodeWorkflowHost as g}from"./packem_shared/createNodeWorkflowHost-B76TKiw_.mjs";import{createNodeWorkflowStore as y}from"./packem_shared/createNodeWorkflowStore-CL7RYP6H.mjs";export{r as NODE_SCHEDULER_DISPATCH_PATH,w as bindShardSockets,t as createNodeDispatchRoute,d as createNodeGlobalStore,p as createNodeHttpServer,S as createNodePlatform,l as createNodeProfileHandler,h as createNodeQueueHost,u as createNodeR2Bucket,D as createNodeSchedulerHost,P as createNodeShardHost,m as createNodeShardKvStore,_ as createNodeShardNamespace,n as createNodeShardRegistry,A as createNodeShardState,T as createNodeSocketHost,c as createNodeSqlExec,g as createNodeWorkflowHost,y as createNodeWorkflowStore};
|
package/dist/packem_shared/{createNodePlatform-C1z36ZqT.mjs → createNodePlatform-BREG-OzE.mjs}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{LunoraError as k}from"@lunora/errors";import{NODE_CAPABILITIES as N}from"@lunora/platform";import{createNodeDispatchRoute as b,createShardInvoke as g}from"./NODE_SCHEDULER_DISPATCH_PATH-CNBAtztq.mjs";import{createNodeGlobalStore as y}from"./createNodeGlobalStore-DhHyIT8I.mjs";import{createNodeShardKvStore as R}from"./createNodeShardKvStore-DVi1OsvH.mjs";import{createNodeQueueHost as T}from"./createNodeQueueHost-CttDb5sY.mjs";import{createNodeR2Bucket as q}from"./createNodeR2Bucket-6I2HobcB.mjs";import{createNodeSchedulerHost as I}from"./createNodeSchedulerHost-BIJ4H38-.mjs";import{createNodeShardHost as _}from"./createNodeShardHost-B6mt1S-h.mjs";import{createNodeShardRegistry as B}from"./createNodeShardRegistry-
|
|
1
|
+
import{LunoraError as k}from"@lunora/errors";import{NODE_CAPABILITIES as N}from"@lunora/platform";import{createNodeDispatchRoute as b,createShardInvoke as g}from"./NODE_SCHEDULER_DISPATCH_PATH-CNBAtztq.mjs";import{createNodeGlobalStore as y}from"./createNodeGlobalStore-DhHyIT8I.mjs";import{createNodeShardKvStore as R}from"./createNodeShardKvStore-DVi1OsvH.mjs";import{createNodeQueueHost as T}from"./createNodeQueueHost-CttDb5sY.mjs";import{createNodeR2Bucket as q}from"./createNodeR2Bucket-6I2HobcB.mjs";import{createNodeSchedulerHost as I}from"./createNodeSchedulerHost-BIJ4H38-.mjs";import{createNodeShardHost as _}from"./createNodeShardHost-B6mt1S-h.mjs";import{createNodeShardRegistry as B}from"./createNodeShardRegistry-BiwoJDuk.mjs";import{createNodeSocketHost as D}from"./createNodeSocketHost-ByOmEGFe.mjs";import{createNodeWorkflowHost as H}from"./createNodeWorkflowHost-B76TKiw_.mjs";import{createNodeWorkflowStore as P}from"./createNodeWorkflowStore-CL7RYP6H.mjs";const z=(e={})=>{const o=[],{database:r,dispose:i,drain:u,host:m}=_(e);o.push(i);try{const c=R(r),t=B(e);o.push(()=>{t.close()});const{directory:d}=t,l=b({adminToken:e.dispatch?.adminToken,defaultShardKey:"__root__",invoke:g(d,e.onFetch!==void 0),schedulerSecret:e.dispatch?.schedulerSecret}),{socket:f}=D(r),{dispose:n,scheduler:p}=I(r,e);o.push(n);const S=e.queues===void 0?void 0:T(r,{onBatch:e.onQueueBatch??(()=>{throw new k("VALIDATION_ERROR","@lunora/platform-node: createNodePlatform was given `queues` without `onQueueBatch`, so a delivered batch has nowhere to go — pass the worker's queue export from createWorker")}),queues:e.queues}),v=e.objectStorageDirectory===void 0?void 0:q({directory:e.objectStorageDirectory}),a=e.globalTablesPath===void 0?void 0:y({path:e.globalTablesPath});a!==void 0&&o.push(()=>{a.dispose()});const w=e.workflows===void 0?void 0:H({store:P(r),workflows:e.workflows}),h=()=>{for(const s of o.toReversed())s()};return{capabilities:N,close:h,directory:d,dispatch:s=>l(s),drain:u,globalTables:a,kv:c,objectStorage:v,queues:S,scheduler:p,shard:m,sockets:f,workflows:w,[Symbol.dispose]:h}}catch(c){for(const t of o.toReversed())try{t()}catch{}throw c}};export{z as createNodePlatform};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{mkdirSync as S,readdirSync as v}from"node:fs";import{join as l}from"node:path";import{LunoraError as f}from"@lunora/errors";import{createNodeShardKvStore as w}from"./createNodeShardKvStore-DVi1OsvH.mjs";import{createNodeShardHost as g}from"./createNodeShardHost-B6mt1S-h.mjs";import{createNodeSocketHost as A}from"./createNodeSocketHost-
|
|
1
|
+
import{mkdirSync as S,readdirSync as v}from"node:fs";import{join as l}from"node:path";import{LunoraError as f}from"@lunora/errors";import{createNodeShardKvStore as w}from"./createNodeShardKvStore-DVi1OsvH.mjs";import{createNodeShardHost as g}from"./createNodeShardHost-B6mt1S-h.mjs";import{createNodeSocketHost as A}from"./createNodeSocketHost-ByOmEGFe.mjs";const c=".sqlite3",u=r=>r.replaceAll(/[^\da-z._-]/gu,t=>[...Buffer.from(t,"utf8")].map(o=>`%${o.toString(16).padStart(2,"0").toUpperCase()}`).join("")),b=r=>decodeURIComponent(r),$=(r,t)=>{const o=t.slice(0,-c.length),s=l(r,t);let d;try{d=b(o)}catch{throw new f("SHARD_UNAVAILABLE",`@lunora/platform-node: shard database "${s}" has a basename that is not valid percent-encoding, so the shard key it holds cannot be recovered. Rename or remove the file.`)}const e=`${u(d)}${c}`;if(e!==t)throw new f("SHARD_UNAVAILABLE",`@lunora/platform-node: shard database "${s}" was written under an older shard-key encoding. It decodes to shard key "${d}", which this build stores as "${e}" — so the key would be listed for fan-out while every read opened a new, empty database. Rename it: mv "${s}" "${l(r,e)}"`);return d},I=(r={})=>{const t=new Map,o=new Set;if(r.directory!==void 0){S(r.directory,{recursive:!0});for(const e of v(r.directory))e.endsWith(c)&&o.add($(r.directory,e))}const s=e=>{const a=t.get(e);if(a!==void 0)return a.shard;const i=r.directory===void 0?void 0:l(r.directory,`${u(e)}${c}`);let n;const{database:m,dispose:p,host:y}=g({onAlarm:()=>r.onAlarm?.(n),path:i,shardKey:e}),h=A(m);return n={inbound:h,kv:w(m),shard:y,shardKey:e,sockets:h.socket},t.set(e,{dispose:p,drain:h.drain,shard:n}),o.add(e),n},d=e=>({fetch:async a=>{const i=s(e);return r.onFetch===void 0?new Response(e):r.onFetch(a,i)}});return{close:()=>{for(const e of t.values()){const a=e.drain();a===void 0?e.dispose():a.finally(e.dispose).catch(()=>{})}t.clear()},directory:{get:e=>d(String(e)),getByName:e=>d(e),idForName:e=>e},listShardKeys:()=>[...o],shardFor:s}};export{I as createNodeShardRegistry};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{deserialize as D,serialize as m}from"node:v8";import{LunoraError as F}from"@lunora/errors";import{findSocketTagBudgetViolation as L}from"@lunora/platform";import{N as M,u as P,c as U}from"./node-socket-pair-0baNnoFw.mjs";import{t as y}from"./to-array-buffer-DVyXU4Ep.mjs";const u=r=>typeof r=="object"&&r!==null||typeof r=="function",J=r=>{r.exec("CREATE TABLE IF NOT EXISTS _lunora_sockets (id TEXT PRIMARY KEY, attachment BLOB, tags TEXT NOT NULL DEFAULT '[]')");const E=r.prepare(`INSERT INTO _lunora_sockets (id, attachment, tags) VALUES (?, ?, ?)
|
|
2
|
+
ON CONFLICT (id) DO UPDATE SET attachment = excluded.attachment, tags = excluded.tags`),R=r.prepare("UPDATE _lunora_sockets SET attachment = ? WHERE id = ?"),_=r.prepare("UPDATE _lunora_sockets SET tags = ? WHERE id = ?"),A=r.prepare("SELECT attachment, tags FROM _lunora_sockets WHERE id = ?"),N=r.prepare("DELETE FROM _lunora_sockets WHERE id = ?"),a=new Map,l=new WeakMap;let p=new WeakMap;const T=(t,e)=>{r.open&&R.run(e===void 0?null:m(e),t)},v=(t,e)=>{r.open&&_.run(JSON.stringify([...e]),t)},g=t=>{const e=t;e.closed=!0,a.delete(e.id),u(e.raw)&&p.delete(e.raw),r.open&&N.run(e.id)},w=(t,e)=>{const o=t;return o.handle=e,l.set(e,o.id),e},O=(t,e)=>{const o=t,n=e,s=typeof n.close=="function"?n.close.bind(e):void 0;return typeof n.send!="function"&&(n.send=c=>{o.received.push(typeof c=="string"?c:y(c))}),n.close=(c,i)=>{g(o),s?.(c,i)},n.deserializeAttachment=()=>o.attachment,n.serializeAttachment=c=>{o.attachment=c,T(o.id,c)},w(o,e)},S=t=>{const e=t;return w(e,{close:(n,s)=>{g(e)},deserializeAttachment:()=>e.attachment,send:n=>{e.received.push(typeof n=="string"?n:y(n))},serializeAttachment:n=>{e.attachment=n,T(e.id,n)}})},f={},h=new Set,k=()=>h.size===0?void 0:Promise.all(h).then(()=>k()),C={close:(t,e,o,n)=>{let s;try{s=f.close?.(t,e,o,n)}catch(d){s=Promise.reject(d instanceof Error?d:new Error(String(d)))}const c=()=>{const d=p.get(t);d!==void 0&&g(d)},i=Promise.resolve(s).then(c,c).catch(()=>{}).finally(()=>{h.delete(i)});h.add(i)},message:(t,e)=>{try{f.message?.(t,e)}catch(o){console.error("[@lunora/platform-node] socket message handler threw",o)}}};return{drain:k,onClose:t=>{f.close=t},onMessage:t=>{f.message=t},readFrames:t=>(a.get(l.get(t)??"")?.received??[]).filter(e=>typeof e=="string"),restoreSocket:(t,e)=>{const o=r.open?A.get(t):void 0,n=o?.attachment===null?void 0:o?.attachment,s={attachment:n===void 0?e:D(n),closed:!1,handle:void 0,id:t,raw:void 0,received:[],tags:new Set(o===void 0?[]:JSON.parse(o.tags))};return a.set(t,s),o===void 0&&r.open&&E.run(t,s.attachment===void 0?null:m(s.attachment),JSON.stringify([...s.tags])),S(s)},simulateRecycle:()=>{a.clear(),p=new WeakMap},socket:{newPair:()=>U(C),upgradeResponse:t=>{if(!(t instanceof M))throw new TypeError("@lunora/platform-node: upgradeResponse called with a client end this host did not open");return P(t)},accept:(t,e,o)=>{if(!r.open)throw new Error("platform closed: cannot accept a socket");const n=L(o);if(n!==void 0)throw new F("SOCKET_TAG_BUDGET_EXCEEDED",n);const s=crypto.randomUUID(),c=new Set(o);E.run(s,e===void 0?null:m(e),JSON.stringify([...c]));const i={attachment:e,closed:!1,handle:void 0,id:s,raw:t,received:[],tags:c};return a.set(s,i),u(t)?(p.set(t,i),O(i,t)):S(i)},getSockets:t=>{const e=[...a.values()];return(t===void 0?e:e.filter(n=>n.tags.has(t))).map(n=>n.handle)},handleFor:t=>u(t)?p.get(t)?.handle:void 0,idFor:t=>{const e=l.get(t);if(e===void 0)throw new Error("@lunora/platform-node: idFor called with a handle this host never issued");return e},removeTag:(t,e)=>{if(!r.open)throw new Error("platform closed: cannot remove a tag");const o=a.get(l.get(t)??"");o!==void 0&&(e===void 0?o.tags.clear():o.tags.delete(e),v(o.id,o.tags))},setTag:(t,e)=>{if(!r.open)throw new Error("platform closed: cannot set a tag");const o=a.get(l.get(t)??"");o!==void 0&&(o.tags.add(e),v(o.id,o.tags))}}}};export{J as createNodeSocketHost};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lunora/platform-node",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.166",
|
|
4
4
|
"description": "Node implementation of the Lunora platform contracts: ShardHost, SocketHost, ShardDirectory, ShardKvStore, SchedulerHost over better-sqlite3 and an in-process socket registry (dev/test target)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"better-sqlite3",
|
|
@@ -46,13 +46,13 @@
|
|
|
46
46
|
"access": "public"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@lunora/d1": "1.0.0-alpha.
|
|
49
|
+
"@lunora/d1": "1.0.0-alpha.195",
|
|
50
50
|
"@lunora/errors": ">=1.0.0-alpha.51 <2.0.0-0",
|
|
51
|
-
"@lunora/platform": "1.0.0-alpha.
|
|
52
|
-
"@lunora/queue": "1.0.0-alpha.
|
|
53
|
-
"@lunora/runtime": "1.0.0-alpha.
|
|
54
|
-
"@lunora/sql-store": "1.0.0-alpha.
|
|
55
|
-
"@lunora/workflow": "1.0.0-alpha.
|
|
51
|
+
"@lunora/platform": "1.0.0-alpha.72",
|
|
52
|
+
"@lunora/queue": "1.0.0-alpha.120",
|
|
53
|
+
"@lunora/runtime": "1.0.0-alpha.225",
|
|
54
|
+
"@lunora/sql-store": "1.0.0-alpha.196",
|
|
55
|
+
"@lunora/workflow": "1.0.0-alpha.90",
|
|
56
56
|
"@visulima/cron-parser": "2.0.0",
|
|
57
57
|
"@visulima/workflow": "3.0.0",
|
|
58
58
|
"better-sqlite3": "^13.0.3",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{deserialize as L,serialize as u}from"node:v8";import{N as M,u as P,c as C}from"./node-socket-pair-0baNnoFw.mjs";import{t as y}from"./to-array-buffer-DVyXU4Ep.mjs";const m=s=>typeof s=="object"&&s!==null||typeof s=="function",D=s=>{s.exec("CREATE TABLE IF NOT EXISTS _lunora_sockets (id TEXT PRIMARY KEY, attachment BLOB, tags TEXT NOT NULL DEFAULT '[]')");const E=s.prepare(`INSERT INTO _lunora_sockets (id, attachment, tags) VALUES (?, ?, ?)
|
|
2
|
-
ON CONFLICT (id) DO UPDATE SET attachment = excluded.attachment, tags = excluded.tags`),R=s.prepare("UPDATE _lunora_sockets SET attachment = ? WHERE id = ?"),A=s.prepare("UPDATE _lunora_sockets SET tags = ? WHERE id = ?"),N=s.prepare("SELECT attachment, tags FROM _lunora_sockets WHERE id = ?"),_=s.prepare("DELETE FROM _lunora_sockets WHERE id = ?"),i=new Map,d=new WeakMap;let l=new WeakMap;const v=(t,e)=>{s.open&&R.run(e===void 0?null:u(e),t)},T=(t,e)=>{s.open&&A.run(JSON.stringify([...e]),t)},g=t=>{const e=t;e.closed=!0,i.delete(e.id),m(e.raw)&&l.delete(e.raw),s.open&&_.run(e.id)},w=(t,e)=>{const o=t;return o.handle=e,d.set(e,o.id),e},O=(t,e)=>{const o=t,n=e,c=typeof n.close=="function"?n.close.bind(e):void 0;return typeof n.send!="function"&&(n.send=r=>{o.received.push(typeof r=="string"?r:y(r))}),n.close=(r,f)=>{g(o),c?.(r,f)},n.deserializeAttachment=()=>o.attachment,n.serializeAttachment=r=>{o.attachment=r,v(o.id,r)},w(o,e)},S=t=>{const e=t;return w(e,{close:(n,c)=>{g(e)},deserializeAttachment:()=>e.attachment,send:n=>{e.received.push(typeof n=="string"?n:y(n))},serializeAttachment:n=>{e.attachment=n,v(e.id,n)}})},p={},h=new Set,k=()=>h.size===0?void 0:Promise.all(h).then(()=>k()),F={close:(t,e,o,n)=>{let c;try{c=p.close?.(t,e,o,n)}catch(a){c=Promise.reject(a instanceof Error?a:new Error(String(a)))}const r=()=>{const a=l.get(t);a!==void 0&&g(a)},f=Promise.resolve(c).then(r,r).catch(()=>{}).finally(()=>{h.delete(f)});h.add(f)},message:(t,e)=>{try{p.message?.(t,e)}catch(o){console.error("[@lunora/platform-node] socket message handler threw",o)}}};return{drain:k,onClose:t=>{p.close=t},onMessage:t=>{p.message=t},readFrames:t=>(i.get(d.get(t)??"")?.received??[]).filter(e=>typeof e=="string"),restoreSocket:(t,e)=>{const o=s.open?N.get(t):void 0,n=o?.attachment===null?void 0:o?.attachment,c={attachment:n===void 0?e:L(n),closed:!1,handle:void 0,id:t,raw:void 0,received:[],tags:new Set(o===void 0?[]:JSON.parse(o.tags))};return i.set(t,c),o===void 0&&s.open&&E.run(t,c.attachment===void 0?null:u(c.attachment),JSON.stringify([...c.tags])),S(c)},simulateRecycle:()=>{i.clear(),l=new WeakMap},socket:{newPair:()=>C(F),upgradeResponse:t=>{if(!(t instanceof M))throw new TypeError("@lunora/platform-node: upgradeResponse called with a client end this host did not open");return P(t)},accept:(t,e,o)=>{if(!s.open)throw new Error("platform closed: cannot accept a socket");const n=crypto.randomUUID(),c=new Set(o);E.run(n,e===void 0?null:u(e),JSON.stringify([...c]));const r={attachment:e,closed:!1,handle:void 0,id:n,raw:t,received:[],tags:c};return i.set(n,r),m(t)?(l.set(t,r),O(r,t)):S(r)},getSockets:t=>{const e=[...i.values()];return(t===void 0?e:e.filter(n=>n.tags.has(t))).map(n=>n.handle)},handleFor:t=>m(t)?l.get(t)?.handle:void 0,idFor:t=>{const e=d.get(t);if(e===void 0)throw new Error("@lunora/platform-node: idFor called with a handle this host never issued");return e},removeTag:(t,e)=>{if(!s.open)throw new Error("platform closed: cannot remove a tag");const o=i.get(d.get(t)??"");o!==void 0&&(e===void 0?o.tags.clear():o.tags.delete(e),T(o.id,o.tags))},setTag:(t,e)=>{if(!s.open)throw new Error("platform closed: cannot set a tag");const o=i.get(d.get(t)??"");o!==void 0&&(o.tags.add(e),T(o.id,o.tags))}}}};export{D as createNodeSocketHost};
|