@oasys/oecs 0.3.1 → 0.4.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/README.md +196 -267
- package/dist/array-CxbPyiHO.cjs +1 -0
- package/dist/array-uFR7Q8fU.js +132 -0
- package/dist/core/ecs/access_check.d.ts +77 -0
- package/dist/core/ecs/access_check.d.ts.map +1 -0
- package/dist/core/ecs/archetype.d.ts +474 -0
- package/dist/core/ecs/archetype.d.ts.map +1 -0
- package/dist/core/ecs/builtin_relations.d.ts +43 -0
- package/dist/core/ecs/builtin_relations.d.ts.map +1 -0
- package/dist/core/ecs/command_log.d.ts +113 -0
- package/dist/core/ecs/command_log.d.ts.map +1 -0
- package/dist/core/ecs/component.d.ts +106 -0
- package/dist/core/ecs/component.d.ts.map +1 -0
- package/dist/core/ecs/compute_backend.d.ts +37 -0
- package/dist/core/ecs/compute_backend.d.ts.map +1 -0
- package/dist/core/ecs/dispatch_trace.d.ts +93 -0
- package/dist/core/ecs/dispatch_trace.d.ts.map +1 -0
- package/dist/core/ecs/ecs.d.ts +533 -0
- package/dist/core/ecs/ecs.d.ts.map +1 -0
- package/dist/core/ecs/ecs_memory.d.ts +179 -0
- package/dist/core/ecs/ecs_memory.d.ts.map +1 -0
- package/dist/core/ecs/entity.d.ts +28 -0
- package/dist/core/ecs/entity.d.ts.map +1 -0
- package/dist/core/ecs/event.d.ts +54 -0
- package/dist/core/ecs/event.d.ts.map +1 -0
- package/dist/core/ecs/frame_trace.d.ts +133 -0
- package/dist/core/ecs/frame_trace.d.ts.map +1 -0
- package/dist/core/ecs/host_commands.d.ts +252 -0
- package/dist/core/ecs/host_commands.d.ts.map +1 -0
- package/dist/core/ecs/index.d.ts +41 -0
- package/dist/core/ecs/index.d.ts.map +1 -0
- package/dist/core/ecs/observer.d.ts +142 -0
- package/dist/core/ecs/observer.d.ts.map +1 -0
- package/dist/core/ecs/query.d.ts +557 -0
- package/dist/core/ecs/query.d.ts.map +1 -0
- package/dist/core/ecs/ref.d.ts +31 -0
- package/dist/core/ecs/ref.d.ts.map +1 -0
- package/dist/core/ecs/relation.d.ts +231 -0
- package/dist/core/ecs/relation.d.ts.map +1 -0
- package/dist/core/ecs/resource.d.ts +33 -0
- package/dist/core/ecs/resource.d.ts.map +1 -0
- package/dist/core/ecs/resume.d.ts +85 -0
- package/dist/core/ecs/resume.d.ts.map +1 -0
- package/dist/core/ecs/run_condition.d.ts +75 -0
- package/dist/core/ecs/run_condition.d.ts.map +1 -0
- package/dist/core/ecs/schedule.d.ts +133 -0
- package/dist/core/ecs/schedule.d.ts.map +1 -0
- package/dist/core/ecs/sparse_store.d.ts +107 -0
- package/dist/core/ecs/sparse_store.d.ts.map +1 -0
- package/dist/core/ecs/store.d.ts +1149 -0
- package/dist/core/ecs/store.d.ts.map +1 -0
- package/dist/core/ecs/store_layout_listener.d.ts +23 -0
- package/dist/core/ecs/store_layout_listener.d.ts.map +1 -0
- package/dist/core/ecs/system.d.ts +134 -0
- package/dist/core/ecs/system.d.ts.map +1 -0
- package/dist/core/ecs/utils/arrays.d.ts +7 -0
- package/dist/core/ecs/utils/arrays.d.ts.map +1 -0
- package/dist/core/ecs/utils/constants.d.ts +12 -0
- package/dist/core/ecs/utils/constants.d.ts.map +1 -0
- package/dist/core/ecs/utils/error.d.ts +51 -0
- package/dist/core/ecs/utils/error.d.ts.map +1 -0
- package/dist/core/reactive/array.d.ts +24 -0
- package/dist/core/reactive/array.d.ts.map +1 -0
- package/dist/core/reactive/index.cjs +1 -0
- package/dist/core/reactive/index.d.ts +10 -0
- package/dist/core/reactive/index.d.ts.map +1 -0
- package/dist/core/reactive/index.js +17 -0
- package/dist/core/reactive/interop.d.ts +19 -0
- package/dist/core/reactive/interop.d.ts.map +1 -0
- package/dist/core/reactive/kernel.d.ts +71 -0
- package/dist/core/reactive/kernel.d.ts.map +1 -0
- package/dist/core/reactive/map.d.ts +16 -0
- package/dist/core/reactive/map.d.ts.map +1 -0
- package/dist/core/reactive/struct.d.ts +10 -0
- package/dist/core/reactive/struct.d.ts.map +1 -0
- package/dist/core/store/__generated__/abi.d.ts +43 -0
- package/dist/core/store/__generated__/abi.d.ts.map +1 -0
- package/dist/core/store/action_ring.d.ts +136 -0
- package/dist/core/store/action_ring.d.ts.map +1 -0
- package/dist/core/store/allocator.d.ts +238 -0
- package/dist/core/store/allocator.d.ts.map +1 -0
- package/dist/core/store/buffer_backed_column.d.ts +69 -0
- package/dist/core/store/buffer_backed_column.d.ts.map +1 -0
- package/dist/core/store/column_store.d.ts +265 -0
- package/dist/core/store/column_store.d.ts.map +1 -0
- package/dist/core/store/command_dispatch.d.ts +52 -0
- package/dist/core/store/command_dispatch.d.ts.map +1 -0
- package/dist/core/store/command_ring.d.ts +107 -0
- package/dist/core/store/command_ring.d.ts.map +1 -0
- package/dist/core/store/descriptor.d.ts +80 -0
- package/dist/core/store/descriptor.d.ts.map +1 -0
- package/dist/core/store/entity_index.d.ts +108 -0
- package/dist/core/store/entity_index.d.ts.map +1 -0
- package/dist/core/store/event_ring.d.ts +95 -0
- package/dist/core/store/event_ring.d.ts.map +1 -0
- package/dist/core/store/extend.d.ts +109 -0
- package/dist/core/store/extend.d.ts.map +1 -0
- package/dist/core/store/grow.d.ts +39 -0
- package/dist/core/store/grow.d.ts.map +1 -0
- package/dist/core/store/header.d.ts +64 -0
- package/dist/core/store/header.d.ts.map +1 -0
- package/dist/core/store/index.d.ts +16 -0
- package/dist/core/store/index.d.ts.map +1 -0
- package/dist/core/store/region_table.d.ts +74 -0
- package/dist/core/store/region_table.d.ts.map +1 -0
- package/dist/core/store/snapshot.d.ts +43 -0
- package/dist/core/store/snapshot.d.ts.map +1 -0
- package/dist/core/store/state_hash.d.ts +38 -0
- package/dist/core/store/state_hash.d.ts.map +1 -0
- package/dist/core/store/store_regions.d.ts +38 -0
- package/dist/core/store/store_regions.d.ts.map +1 -0
- package/dist/extensions/editor/editor.d.ts +149 -0
- package/dist/extensions/editor/editor.d.ts.map +1 -0
- package/dist/extensions/editor/field_handle.d.ts +35 -0
- package/dist/extensions/editor/field_handle.d.ts.map +1 -0
- package/dist/extensions/editor/index.cjs +1 -0
- package/dist/extensions/editor/index.d.ts +21 -0
- package/dist/extensions/editor/index.d.ts.map +1 -0
- package/dist/extensions/editor/index.js +209 -0
- package/dist/extensions/reactive/ecs_sync.d.ts +210 -0
- package/dist/extensions/reactive/ecs_sync.d.ts.map +1 -0
- package/dist/extensions/reactive/index.cjs +1 -0
- package/dist/extensions/reactive/index.d.ts +23 -0
- package/dist/extensions/reactive/index.d.ts.map +1 -0
- package/dist/extensions/reactive/index.js +225 -0
- package/dist/extensions/solid/index.cjs +1 -0
- package/dist/extensions/solid/index.d.ts +6 -0
- package/dist/extensions/solid/index.d.ts.map +1 -0
- package/dist/extensions/solid/index.js +32 -0
- package/dist/extensions/solid/kernel_solid.d.ts +42 -0
- package/dist/extensions/solid/kernel_solid.d.ts.map +1 -0
- package/dist/index.cjs +2 -1
- package/dist/index.d.ts +16 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8565 -1310
- package/dist/interop-CT-REx0W.cjs +1 -0
- package/dist/interop-CcY6ASQc.js +18 -0
- package/dist/kernel-DgyrLFjW.js +227 -0
- package/dist/kernel-yWV3XnAb.cjs +1 -0
- package/dist/log/console_sink.d.ts +4 -0
- package/dist/log/console_sink.d.ts.map +1 -0
- package/dist/log/index.d.ts +3 -0
- package/dist/log/index.d.ts.map +1 -0
- package/dist/log/logger.d.ts +27 -0
- package/dist/log/logger.d.ts.map +1 -0
- package/dist/primitives.cjs +1 -0
- package/dist/primitives.d.ts +18 -0
- package/dist/primitives.d.ts.map +1 -0
- package/dist/primitives.js +44 -0
- package/dist/shared-BXSZnxx4.cjs +1 -0
- package/dist/shared-C678TAPY.js +99 -0
- package/dist/shared.cjs +1 -0
- package/dist/shared.d.ts +22 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +7 -0
- package/dist/topological_sort-DlRpSrxu.js +391 -0
- package/dist/topological_sort-WAT-VHb-.cjs +1 -0
- package/dist/type_primitives/assertions.d.ts +12 -8
- package/dist/type_primitives/assertions.d.ts.map +1 -1
- package/dist/type_primitives/binary_heap/binary_heap.d.ts +6 -2
- package/dist/type_primitives/binary_heap/binary_heap.d.ts.map +1 -1
- package/dist/type_primitives/bitset/bitset.d.ts +16 -4
- package/dist/type_primitives/bitset/bitset.d.ts.map +1 -1
- package/dist/type_primitives/brand.d.ts +6 -1
- package/dist/type_primitives/brand.d.ts.map +1 -1
- package/dist/type_primitives/error.d.ts +4 -0
- package/dist/type_primitives/error.d.ts.map +1 -1
- package/dist/type_primitives/index.d.ts +3 -0
- package/dist/type_primitives/index.d.ts.map +1 -1
- package/dist/type_primitives/sparse_map/sparse_map.d.ts +7 -3
- package/dist/type_primitives/sparse_map/sparse_map.d.ts.map +1 -1
- package/dist/type_primitives/sparse_set/sparse_set.d.ts +4 -0
- package/dist/type_primitives/sparse_set/sparse_set.d.ts.map +1 -1
- package/dist/type_primitives/topological_sort/topological_sort.d.ts +7 -3
- package/dist/type_primitives/topological_sort/topological_sort.d.ts.map +1 -1
- package/dist/type_primitives/typed_arrays/typed_arrays.d.ts +53 -16
- package/dist/type_primitives/typed_arrays/typed_arrays.d.ts.map +1 -1
- package/dist/utils/arrays.d.ts +1 -1
- package/dist/utils/arrays.d.ts.map +1 -1
- package/dist/utils/error.d.ts +2 -20
- package/dist/utils/error.d.ts.map +1 -1
- package/package.json +36 -9
- package/dist/archetype.d.ts +0 -108
- package/dist/archetype.d.ts.map +0 -1
- package/dist/component.d.ts +0 -45
- package/dist/component.d.ts.map +0 -1
- package/dist/ecs.d.ts +0 -104
- package/dist/ecs.d.ts.map +0 -1
- package/dist/entity.d.ts +0 -11
- package/dist/entity.d.ts.map +0 -1
- package/dist/event.d.ts +0 -30
- package/dist/event.d.ts.map +0 -1
- package/dist/query.d.ts +0 -94
- package/dist/query.d.ts.map +0 -1
- package/dist/ref.d.ts +0 -23
- package/dist/ref.d.ts.map +0 -1
- package/dist/resource.d.ts +0 -23
- package/dist/resource.d.ts.map +0 -1
- package/dist/schedule.d.ts +0 -45
- package/dist/schedule.d.ts.map +0 -1
- package/dist/store.d.ts +0 -118
- package/dist/store.d.ts.map +0 -1
- package/dist/system.d.ts +0 -16
- package/dist/system.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("../../kernel-yWV3XnAb.cjs"),p=require("../../array-CxbPyiHO.cjs");function _(a,n){if(Object.is(a,n))return!0;const s=a,r=n,i=Object.keys(s);if(i.length!==Object.keys(r).length)return!1;for(let l=0;l<i.length;l++){const u=i[l];if(!Object.prototype.hasOwnProperty.call(r,u)||!Object.is(s[u],r[u]))return!1}return!0}class v{constructor(n){this.def=n}_ctx;_eid=0;get eid(){return this._eid}field(n){return this._ctx.getField(this._eid,this.def,n)}}class w{constructor(n){this.def=n}_eid=0;_row=0;cols=new Map;arch;bind(n){this.arch=n,this.cols.clear()}get eid(){return this._eid}field(n){let s=this.cols.get(n);return s===void 0&&(s=this.arch.getColumnRead(this.def,n),this.cols.set(n,s)),s[this._row]}}class E{_ctx;_eid=0;get eid(){return this._eid}field(n,s){return this._ctx.getField(this._eid,n,s)}}function m(a,n,s,r={}){const i=p.reactiveMap(r.eq),l={...r.access,reads:[n,...r.access?.reads??[]]},u=r.grain??"entity",d=r.seedExisting??!0,b=new v(n),h=(o,t)=>{t.isDisabled(o)||(b._ctx=t,b._eid=o,i.set(o,s(b)))};let g;return f.batch(()=>{if(u==="column"){const o=new w(n);g=a.observe(n,{granularity:"archetype",onSet:t=>{o.bind(t);const c=t.entityIds;for(let e=0;e<t.entityCount;e++)o._row=e,o._eid=c[e],i.set(o._eid,s(o))},onAdd:(t,c)=>h(t,c),onRemove:t=>i.delete(t),onDisable:t=>i.delete(t),onEnable:(t,c)=>h(t,c),access:l,yieldExisting:d})}else g=a.observe(n,{granularity:"entity",onSet:(o,t)=>h(o,t),onAdd:(o,t)=>h(o,t),onRemove:o=>i.delete(o),onDisable:o=>i.delete(o),onEnable:(o,t)=>h(o,t),access:l,yieldExisting:d})}),{map:i,dispose:()=>g.dispose()}}function S(a,n,s,r={}){return m(a,n,l=>{const u={};for(let d=0;d<s.length;d++)u[s[d]]=l.field(s[d]);return u},{...r,eq:_})}function R(a,n,s,r={}){const i=p.reactiveMap(r.eq),l={...r.access,reads:[...n,...r.access?.reads??[]]},u=r.seedExisting??!0,d=new E,b=(t,c)=>{for(let e=0;e<n.length;e++)if(!t.hasComponent(c,n[e]))return!1;return!0},h=(t,c)=>{c.isDisabled(t)||b(c,t)&&(d._ctx=c,d._eid=t,i.set(t,s(d)))},g=t=>{i.delete(t)};let o;return f.batch(()=>{o=n.map(t=>a.observe(t,{granularity:"entity",onSet:h,onAdd:h,onRemove:g,onDisable:g,onEnable:h,access:l,yieldExisting:u}))}),{map:i,dispose:()=>{for(let t=0;t<o.length;t++)o[t].dispose()}}}function T(a,n,s,r,i={}){const l={};for(let e=0;e<r.length;e++)l[r[e]]=0;const[u,d]=i.into??p.reactiveStruct(l),b=f.untrack(()=>r.map(e=>u[e])),h={...i.access,reads:[n,...i.access?.reads??[]]},g=i.seedExisting??!0,o=e=>{for(let y=0;y<r.length;y++)d[r[y]](e.getField(s,n,r[y]))},t=()=>{for(let e=0;e<r.length;e++)d[r[e]](b[e])};let c;return f.batch(()=>{c=a.observe(n,{granularity:"entity",onSet:(e,y)=>{e===s&&o(y)},onAdd:(e,y)=>{e===s&&!y.isDisabled(s)&&o(y)},onRemove:e=>{e===s&&t()},onDisable:e=>{e===s&&t()},onEnable:(e,y)=>{e===s&&o(y)},access:h,yieldExisting:g})}),{struct:u,dispose:()=>c.dispose()}}function x(a,n,s,r,i={}){const l=i.into??p.reactiveArray(new Array(r.length).fill(0),i.eq),u=f.untrack(()=>l.snapshot());if(i.into!==void 0&&u.length!==r.length)throw new Error(`syncSingletonToArray: into.length (${u.length}) must equal fields.length (${r.length})`);const d={...i.access,reads:[n,...i.access?.reads??[]]},b=i.seedExisting??!0,h=new Array(r.length),g=c=>{for(let e=0;e<r.length;e++)h[e]=c.getField(s,n,r[e]);l.reconcile(h)},o=()=>l.reconcile(u);let t;return f.batch(()=>{t=a.observe(n,{granularity:"entity",onSet:(c,e)=>{c===s&&g(e)},onAdd:(c,e)=>{c===s&&!e.isDisabled(s)&&g(e)},onRemove:c=>{c===s&&o()},onDisable:c=>{c===s&&o()},onEnable:(c,e)=>{c===s&&g(e)},access:d,yieldExisting:b})}),{array:l,dispose:()=>t.dispose()}}function A(a,n){f.batch(()=>a.update(n))}exports.batchedUpdate=A;exports.shallow=_;exports.syncComponentToMap=m;exports.syncFieldsToMap=S;exports.syncJoinToMap=R;exports.syncSingletonToArray=x;exports.syncSingletonToStruct=T;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The production ECS→UI reactive bridge (#672 / ADR-0021).
|
|
3
|
+
*
|
|
4
|
+
* Drains the engine's own change detection (ADR-0013 component observers, riding
|
|
5
|
+
* the ADR-0012 per-row dirty list) into a `reactiveMap` — publishing O(changed),
|
|
6
|
+
* not O(all), each tick. Declarative selection + closure projection (the Bevy
|
|
7
|
+
* `ExtractComponent` / WatermelonDB `observeWithColumns` shape):
|
|
8
|
+
* - `syncComponentToMap(def, project)` — one component, grain `"entity"`/`"column"`.
|
|
9
|
+
* - `syncFieldsToMap(def, [fields])` — field-list sugar with auto `shallow` eq.
|
|
10
|
+
* - `syncJoinToMap([defs], project)` — multi-component join (subscribes all defs).
|
|
11
|
+
*
|
|
12
|
+
* For singleton/ephemeral UI state (net status+latency, FPS/mem, wave timer), model
|
|
13
|
+
* it as a component on a reserved singleton entity and read it keyless via per-field
|
|
14
|
+
* channels (#687 / ADR-0024) — NOT a separate reactive-resource subsystem:
|
|
15
|
+
* - `syncSingletonToStruct(def, eid, [fields])` — one singleton entity → `reactiveStruct`.
|
|
16
|
+
* - `syncSingletonToArray(def, eid, [fields])` — one singleton entity → `reactiveArray` (ordered slots).
|
|
17
|
+
*
|
|
18
|
+
* The framework-agnostic counterpart to the Solid leaf: pair the map entry points
|
|
19
|
+
* with `@oasys/oecs/solid`'s `fromKernelMap`, the singleton struct with
|
|
20
|
+
* `fromKernelStruct`, and the singleton array with `fromKernelArray`, to render.
|
|
21
|
+
*/
|
|
22
|
+
export { syncComponentToMap, syncFieldsToMap, syncJoinToMap, syncSingletonToStruct, syncSingletonToArray, batchedUpdate, shallow, type Projection, type JoinProjection, type RowReader, type JoinReader, type SyncGrain, type EcsMapSync, type EcsMapSyncOptions, type SingletonStructSync, type SingletonSyncOptions, type SingletonArraySync, type SingletonArraySyncOptions } from './ecs_sync';
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/reactive/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EACN,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,OAAO,EACP,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { b as f, u as _ } from "../../kernel-DgyrLFjW.js";
|
|
2
|
+
import { r as p, a as m, b as E } from "../../array-uFR7Q8fU.js";
|
|
3
|
+
function w(a, n) {
|
|
4
|
+
if (Object.is(a, n)) return !0;
|
|
5
|
+
const s = a, r = n, o = Object.keys(s);
|
|
6
|
+
if (o.length !== Object.keys(r).length) return !1;
|
|
7
|
+
for (let l = 0; l < o.length; l++) {
|
|
8
|
+
const u = o[l];
|
|
9
|
+
if (!Object.prototype.hasOwnProperty.call(r, u) || !Object.is(s[u], r[u])) return !1;
|
|
10
|
+
}
|
|
11
|
+
return !0;
|
|
12
|
+
}
|
|
13
|
+
class v {
|
|
14
|
+
constructor(n) {
|
|
15
|
+
this.def = n;
|
|
16
|
+
}
|
|
17
|
+
_ctx;
|
|
18
|
+
_eid = 0;
|
|
19
|
+
get eid() {
|
|
20
|
+
return this._eid;
|
|
21
|
+
}
|
|
22
|
+
field(n) {
|
|
23
|
+
return this._ctx.getField(this._eid, this.def, n);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
class R {
|
|
27
|
+
constructor(n) {
|
|
28
|
+
this.def = n;
|
|
29
|
+
}
|
|
30
|
+
_eid = 0;
|
|
31
|
+
_row = 0;
|
|
32
|
+
cols = /* @__PURE__ */ new Map();
|
|
33
|
+
arch;
|
|
34
|
+
/** Bind to an archetype for one dispatch (drops the previous column cache). */
|
|
35
|
+
bind(n) {
|
|
36
|
+
this.arch = n, this.cols.clear();
|
|
37
|
+
}
|
|
38
|
+
get eid() {
|
|
39
|
+
return this._eid;
|
|
40
|
+
}
|
|
41
|
+
field(n) {
|
|
42
|
+
let s = this.cols.get(n);
|
|
43
|
+
return s === void 0 && (s = this.arch.getColumnRead(this.def, n), this.cols.set(n, s)), s[this._row];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
class x {
|
|
47
|
+
_ctx;
|
|
48
|
+
_eid = 0;
|
|
49
|
+
get eid() {
|
|
50
|
+
return this._eid;
|
|
51
|
+
}
|
|
52
|
+
field(n, s) {
|
|
53
|
+
return this._ctx.getField(this._eid, n, s);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function A(a, n, s, r = {}) {
|
|
57
|
+
const o = p(r.eq), l = {
|
|
58
|
+
...r.access,
|
|
59
|
+
reads: [n, ...r.access?.reads ?? []]
|
|
60
|
+
}, u = r.grain ?? "entity", d = r.seedExisting ?? !0, b = new v(n), h = (i, t) => {
|
|
61
|
+
t.isDisabled(i) || (b._ctx = t, b._eid = i, o.set(i, s(b)));
|
|
62
|
+
};
|
|
63
|
+
let g;
|
|
64
|
+
return f(() => {
|
|
65
|
+
if (u === "column") {
|
|
66
|
+
const i = new R(n);
|
|
67
|
+
g = a.observe(n, {
|
|
68
|
+
granularity: "archetype",
|
|
69
|
+
onSet: (t) => {
|
|
70
|
+
i.bind(t);
|
|
71
|
+
const c = t.entityIds;
|
|
72
|
+
for (let e = 0; e < t.entityCount; e++)
|
|
73
|
+
i._row = e, i._eid = c[e], o.set(i._eid, s(i));
|
|
74
|
+
},
|
|
75
|
+
onAdd: (t, c) => h(t, c),
|
|
76
|
+
onRemove: (t) => o.delete(t),
|
|
77
|
+
// Disable = soft remove from the channel; enable = re-add (#677). The
|
|
78
|
+
// column sweep is bounded by enabled rows, so a disabled row would never
|
|
79
|
+
// refresh — drop it on disable, republish on enable.
|
|
80
|
+
onDisable: (t) => o.delete(t),
|
|
81
|
+
onEnable: (t, c) => h(t, c),
|
|
82
|
+
access: l,
|
|
83
|
+
yieldExisting: d
|
|
84
|
+
});
|
|
85
|
+
} else
|
|
86
|
+
g = a.observe(n, {
|
|
87
|
+
granularity: "entity",
|
|
88
|
+
onSet: (i, t) => h(i, t),
|
|
89
|
+
onAdd: (i, t) => h(i, t),
|
|
90
|
+
onRemove: (i) => o.delete(i),
|
|
91
|
+
onDisable: (i) => o.delete(i),
|
|
92
|
+
onEnable: (i, t) => h(i, t),
|
|
93
|
+
access: l,
|
|
94
|
+
yieldExisting: d
|
|
95
|
+
});
|
|
96
|
+
}), { map: o, dispose: () => g.dispose() };
|
|
97
|
+
}
|
|
98
|
+
function j(a, n, s, r = {}) {
|
|
99
|
+
return A(a, n, (l) => {
|
|
100
|
+
const u = {};
|
|
101
|
+
for (let d = 0; d < s.length; d++) u[s[d]] = l.field(s[d]);
|
|
102
|
+
return u;
|
|
103
|
+
}, { ...r, eq: w });
|
|
104
|
+
}
|
|
105
|
+
function M(a, n, s, r = {}) {
|
|
106
|
+
const o = p(r.eq), l = {
|
|
107
|
+
...r.access,
|
|
108
|
+
reads: [...n, ...r.access?.reads ?? []]
|
|
109
|
+
}, u = r.seedExisting ?? !0, d = new x(), b = (t, c) => {
|
|
110
|
+
for (let e = 0; e < n.length; e++) if (!t.hasComponent(c, n[e])) return !1;
|
|
111
|
+
return !0;
|
|
112
|
+
}, h = (t, c) => {
|
|
113
|
+
c.isDisabled(t) || b(c, t) && (d._ctx = c, d._eid = t, o.set(t, s(d)));
|
|
114
|
+
}, g = (t) => {
|
|
115
|
+
o.delete(t);
|
|
116
|
+
};
|
|
117
|
+
let i;
|
|
118
|
+
return f(() => {
|
|
119
|
+
i = n.map(
|
|
120
|
+
(t) => a.observe(t, {
|
|
121
|
+
granularity: "entity",
|
|
122
|
+
onSet: h,
|
|
123
|
+
onAdd: h,
|
|
124
|
+
onRemove: g,
|
|
125
|
+
// Disabling any joined component soft-removes the entity from the
|
|
126
|
+
// channel; enabling re-evaluates membership and republishes (#677). A
|
|
127
|
+
// disable fires once per carried joined component — `dropRow` is
|
|
128
|
+
// idempotent, and `publishIfMember` re-checks the full join.
|
|
129
|
+
onDisable: g,
|
|
130
|
+
onEnable: h,
|
|
131
|
+
access: l,
|
|
132
|
+
yieldExisting: u
|
|
133
|
+
})
|
|
134
|
+
);
|
|
135
|
+
}), {
|
|
136
|
+
map: o,
|
|
137
|
+
dispose: () => {
|
|
138
|
+
for (let t = 0; t < i.length; t++) i[t].dispose();
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function O(a, n, s, r, o = {}) {
|
|
143
|
+
const l = {};
|
|
144
|
+
for (let e = 0; e < r.length; e++) l[r[e]] = 0;
|
|
145
|
+
const [u, d] = o.into ?? m(l), b = _(() => r.map((e) => u[e])), h = {
|
|
146
|
+
...o.access,
|
|
147
|
+
reads: [n, ...o.access?.reads ?? []]
|
|
148
|
+
}, g = o.seedExisting ?? !0, i = (e) => {
|
|
149
|
+
for (let y = 0; y < r.length; y++) d[r[y]](e.getField(s, n, r[y]));
|
|
150
|
+
}, t = () => {
|
|
151
|
+
for (let e = 0; e < r.length; e++) d[r[e]](b[e]);
|
|
152
|
+
};
|
|
153
|
+
let c;
|
|
154
|
+
return f(() => {
|
|
155
|
+
c = a.observe(n, {
|
|
156
|
+
granularity: "entity",
|
|
157
|
+
onSet: (e, y) => {
|
|
158
|
+
e === s && i(y);
|
|
159
|
+
},
|
|
160
|
+
onAdd: (e, y) => {
|
|
161
|
+
e === s && !y.isDisabled(s) && i(y);
|
|
162
|
+
},
|
|
163
|
+
onRemove: (e) => {
|
|
164
|
+
e === s && t();
|
|
165
|
+
},
|
|
166
|
+
onDisable: (e) => {
|
|
167
|
+
e === s && t();
|
|
168
|
+
},
|
|
169
|
+
onEnable: (e, y) => {
|
|
170
|
+
e === s && i(y);
|
|
171
|
+
},
|
|
172
|
+
access: h,
|
|
173
|
+
yieldExisting: g
|
|
174
|
+
});
|
|
175
|
+
}), { struct: u, dispose: () => c.dispose() };
|
|
176
|
+
}
|
|
177
|
+
function T(a, n, s, r, o = {}) {
|
|
178
|
+
const l = o.into ?? E(new Array(r.length).fill(0), o.eq), u = _(() => l.snapshot());
|
|
179
|
+
if (o.into !== void 0 && u.length !== r.length)
|
|
180
|
+
throw new Error(
|
|
181
|
+
`syncSingletonToArray: into.length (${u.length}) must equal fields.length (${r.length})`
|
|
182
|
+
);
|
|
183
|
+
const d = {
|
|
184
|
+
...o.access,
|
|
185
|
+
reads: [n, ...o.access?.reads ?? []]
|
|
186
|
+
}, b = o.seedExisting ?? !0, h = new Array(r.length), g = (c) => {
|
|
187
|
+
for (let e = 0; e < r.length; e++) h[e] = c.getField(s, n, r[e]);
|
|
188
|
+
l.reconcile(h);
|
|
189
|
+
}, i = () => l.reconcile(u);
|
|
190
|
+
let t;
|
|
191
|
+
return f(() => {
|
|
192
|
+
t = a.observe(n, {
|
|
193
|
+
granularity: "entity",
|
|
194
|
+
onSet: (c, e) => {
|
|
195
|
+
c === s && g(e);
|
|
196
|
+
},
|
|
197
|
+
onAdd: (c, e) => {
|
|
198
|
+
c === s && !e.isDisabled(s) && g(e);
|
|
199
|
+
},
|
|
200
|
+
onRemove: (c) => {
|
|
201
|
+
c === s && i();
|
|
202
|
+
},
|
|
203
|
+
onDisable: (c) => {
|
|
204
|
+
c === s && i();
|
|
205
|
+
},
|
|
206
|
+
onEnable: (c, e) => {
|
|
207
|
+
c === s && g(e);
|
|
208
|
+
},
|
|
209
|
+
access: d,
|
|
210
|
+
yieldExisting: b
|
|
211
|
+
});
|
|
212
|
+
}), { array: l, dispose: () => t.dispose() };
|
|
213
|
+
}
|
|
214
|
+
function k(a, n) {
|
|
215
|
+
f(() => a.update(n));
|
|
216
|
+
}
|
|
217
|
+
export {
|
|
218
|
+
k as batchedUpdate,
|
|
219
|
+
w as shallow,
|
|
220
|
+
A as syncComponentToMap,
|
|
221
|
+
j as syncFieldsToMap,
|
|
222
|
+
M as syncJoinToMap,
|
|
223
|
+
T as syncSingletonToArray,
|
|
224
|
+
O as syncSingletonToStruct
|
|
225
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("solid-js"),c=require("../../interop-CT-REx0W.cjs");function l(e){const[t,o]=u.createSignal(e());return u.onCleanup(c.subscribe(e,s=>o(()=>s))),t}function f(e){return{keys:l(()=>e.keys()),cell:t=>l(()=>e.get(t))}}function i(e){const t={},o=Object.keys(e),s=new Set(o);for(const n of o)t[n]=l(()=>e[n]);return new Proxy({},{get:(n,r)=>s.has(r)?t[r]():Reflect.get(n,r),has:(n,r)=>s.has(r),ownKeys:()=>o,getOwnPropertyDescriptor:(n,r)=>s.has(r)?{get:()=>t[r](),enumerable:!0,configurable:!0}:void 0})}function a(e){return l(()=>e.snapshot())}exports.fromKernel=l;exports.fromKernelArray=a;exports.fromKernelMap=f;exports.fromKernelStruct=i;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@oasys/oecs/solid` — the SolidJS adapter plugin for oecs's reactive
|
|
3
|
+
* kernel (`@oasys/oecs/reactive` / `../../core/reactive`, #646 / ADR-0021).
|
|
4
|
+
*/
|
|
5
|
+
export { fromKernel, fromKernelMap, fromKernelStruct, fromKernelArray, type KernelMapView } from './kernel_solid';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/solid/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACN,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,KAAK,aAAa,EAClB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { createSignal as c, onCleanup as u } from "solid-js";
|
|
2
|
+
import { s as a } from "../../interop-CcY6ASQc.js";
|
|
3
|
+
function f(e) {
|
|
4
|
+
const [t, o] = c(e());
|
|
5
|
+
return u(a(e, (s) => o(() => s))), t;
|
|
6
|
+
}
|
|
7
|
+
function g(e) {
|
|
8
|
+
return {
|
|
9
|
+
keys: f(() => e.keys()),
|
|
10
|
+
cell: (t) => f(() => e.get(t))
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function m(e) {
|
|
14
|
+
const t = {}, o = Object.keys(e), s = new Set(o);
|
|
15
|
+
for (const n of o)
|
|
16
|
+
t[n] = f(() => e[n]);
|
|
17
|
+
return new Proxy({}, {
|
|
18
|
+
get: (n, r) => s.has(r) ? t[r]() : Reflect.get(n, r),
|
|
19
|
+
has: (n, r) => s.has(r),
|
|
20
|
+
ownKeys: () => o,
|
|
21
|
+
getOwnPropertyDescriptor: (n, r) => s.has(r) ? { get: () => t[r](), enumerable: !0, configurable: !0 } : void 0
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function y(e) {
|
|
25
|
+
return f(() => e.snapshot());
|
|
26
|
+
}
|
|
27
|
+
export {
|
|
28
|
+
f as fromKernel,
|
|
29
|
+
y as fromKernelArray,
|
|
30
|
+
g as fromKernelMap,
|
|
31
|
+
m as fromKernelStruct
|
|
32
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Accessor } from 'solid-js';
|
|
2
|
+
import { ReactiveArray, ReactiveMap } from '../../core/reactive';
|
|
3
|
+
/**
|
|
4
|
+
* Mirror a kernel accessor into a Solid accessor. The returned accessor tracks in
|
|
5
|
+
* Solid; it updates once per coalesced kernel change and never on an equal write.
|
|
6
|
+
*/
|
|
7
|
+
export declare function fromKernel<T>(accessor: () => T): Accessor<T>;
|
|
8
|
+
/** A kernel `reactiveMap` projected for a keyed Solid `<For>`. */
|
|
9
|
+
export interface KernelMapView<K, V> {
|
|
10
|
+
/** The live key set — pass to a keyed Solid `<For each>`. Keyed on the id. */
|
|
11
|
+
readonly keys: Accessor<readonly K[]>;
|
|
12
|
+
/** A bridged value accessor for one key — read inside the `<For>` row. */
|
|
13
|
+
cell(key: K): Accessor<V | undefined>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Bridge a kernel `reactiveMap` for keyed Solid rendering. `keys` drives a `<For>`
|
|
17
|
+
* (one row per entity, keyed on the stable id); `cell(id)` is that row's bridged
|
|
18
|
+
* value. Changing one entity wakes only its row; spawn/despawn add/remove one row.
|
|
19
|
+
*/
|
|
20
|
+
export declare function fromKernelMap<K, V>(map: ReactiveMap<K, V>): KernelMapView<K, V>;
|
|
21
|
+
/**
|
|
22
|
+
* Bridge a kernel `reactiveStruct` proxy into a Solid-reactive proxy: reading
|
|
23
|
+
* `view.field` in a Solid scope tracks that field alone (one `fromKernel` per
|
|
24
|
+
* field), so a change to one field re-renders only its readers. Completes the
|
|
25
|
+
* `fromKernel` / `fromKernelMap` / `fromKernelStruct` trio — the read side for the
|
|
26
|
+
* singleton/ephemeral UI state `syncSingletonToStruct` publishes (ADR-0024). The
|
|
27
|
+
* field set is read once from the (enumerable) struct proxy; call inside a component
|
|
28
|
+
* or `root` so each field's `onCleanup` has an owner. The kernel struct's per-field
|
|
29
|
+
* `eq` and batching carry through `fromKernel` unchanged.
|
|
30
|
+
*/
|
|
31
|
+
export declare function fromKernelStruct<T extends object>(struct: T): T;
|
|
32
|
+
/**
|
|
33
|
+
* Bridge a kernel `reactiveArray` into a Solid accessor of its snapshot, for a
|
|
34
|
+
* positional Solid `<Index each={view()}>`. `<Index>` (NOT `<For>`) is the match for
|
|
35
|
+
* an ordered slot list: it keys by position and hands each slot an accessor, so
|
|
36
|
+
* duplicate primitive values (e.g. empty army slots) don't alias and a slot change
|
|
37
|
+
* updates only that row. The snapshot is the array's coarse read (any slot change
|
|
38
|
+
* wakes it), but `<Index>` then diffs by position and touches only the changed
|
|
39
|
+
* index's DOM. Use `fromKernelMap` instead for an *entity* collection (keyed, `<For>`).
|
|
40
|
+
*/
|
|
41
|
+
export declare function fromKernelArray<T>(arr: ReactiveArray<T>): Accessor<readonly T[]>;
|
|
42
|
+
//# sourceMappingURL=kernel_solid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel_solid.d.ts","sourceRoot":"","sources":["../../../src/extensions/solid/kernel_solid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAA2B,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAAa,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEtF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAI5D;AAED,kEAAkE;AAClE,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,CAAC;IAClC,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACtC,0EAA0E;IAC1E,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;CACtC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAK/E;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAoB/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAEhF"}
|