@ecsia/core 0.1.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.
Files changed (191) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +29 -0
  3. package/dist/bitmask/bitmask.d.ts +21 -0
  4. package/dist/bitmask/bitmask.d.ts.map +1 -0
  5. package/dist/bitmask/bitmask.js +103 -0
  6. package/dist/bitmask/bitmask.js.map +1 -0
  7. package/dist/bitmask/index.d.ts +3 -0
  8. package/dist/bitmask/index.d.ts.map +1 -0
  9. package/dist/bitmask/index.js +2 -0
  10. package/dist/bitmask/index.js.map +1 -0
  11. package/dist/component/accessor.d.ts +40 -0
  12. package/dist/component/accessor.d.ts.map +1 -0
  13. package/dist/component/accessor.js +220 -0
  14. package/dist/component/accessor.js.map +1 -0
  15. package/dist/component/column-set.d.ts +20 -0
  16. package/dist/component/column-set.d.ts.map +1 -0
  17. package/dist/component/column-set.js +60 -0
  18. package/dist/component/column-set.js.map +1 -0
  19. package/dist/component/define.d.ts +23 -0
  20. package/dist/component/define.d.ts.map +1 -0
  21. package/dist/component/define.js +155 -0
  22. package/dist/component/define.js.map +1 -0
  23. package/dist/component/descriptors.d.ts +3 -0
  24. package/dist/component/descriptors.d.ts.map +1 -0
  25. package/dist/component/descriptors.js +147 -0
  26. package/dist/component/descriptors.js.map +1 -0
  27. package/dist/component/index.d.ts +10 -0
  28. package/dist/component/index.d.ts.map +1 -0
  29. package/dist/component/index.js +6 -0
  30. package/dist/component/index.js.map +1 -0
  31. package/dist/component/sidecar.d.ts +58 -0
  32. package/dist/component/sidecar.d.ts.map +1 -0
  33. package/dist/component/sidecar.js +136 -0
  34. package/dist/component/sidecar.js.map +1 -0
  35. package/dist/config.d.ts +55 -0
  36. package/dist/config.d.ts.map +1 -0
  37. package/dist/config.js +70 -0
  38. package/dist/config.js.map +1 -0
  39. package/dist/entity/codec.d.ts +45 -0
  40. package/dist/entity/codec.d.ts.map +1 -0
  41. package/dist/entity/codec.js +53 -0
  42. package/dist/entity/codec.js.map +1 -0
  43. package/dist/entity/index-allocator.d.ts +46 -0
  44. package/dist/entity/index-allocator.d.ts.map +1 -0
  45. package/dist/entity/index-allocator.js +121 -0
  46. package/dist/entity/index-allocator.js.map +1 -0
  47. package/dist/entity/index.d.ts +13 -0
  48. package/dist/entity/index.d.ts.map +1 -0
  49. package/dist/entity/index.js +7 -0
  50. package/dist/entity/index.js.map +1 -0
  51. package/dist/entity/record.d.ts +28 -0
  52. package/dist/entity/record.d.ts.map +1 -0
  53. package/dist/entity/record.js +42 -0
  54. package/dist/entity/record.js.map +1 -0
  55. package/dist/entity/ref.d.ts +70 -0
  56. package/dist/entity/ref.d.ts.map +1 -0
  57. package/dist/entity/ref.js +104 -0
  58. package/dist/entity/ref.js.map +1 -0
  59. package/dist/entity/reservation.d.ts +12 -0
  60. package/dist/entity/reservation.d.ts.map +1 -0
  61. package/dist/entity/reservation.js +28 -0
  62. package/dist/entity/reservation.js.map +1 -0
  63. package/dist/entity/store.d.ts +60 -0
  64. package/dist/entity/store.d.ts.map +1 -0
  65. package/dist/entity/store.js +193 -0
  66. package/dist/entity/store.js.map +1 -0
  67. package/dist/env.d.ts +2 -0
  68. package/dist/env.d.ts.map +1 -0
  69. package/dist/env.js +12 -0
  70. package/dist/env.js.map +1 -0
  71. package/dist/ids.d.ts +9 -0
  72. package/dist/ids.d.ts.map +1 -0
  73. package/dist/ids.js +8 -0
  74. package/dist/ids.js.map +1 -0
  75. package/dist/index.d.ts +29 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +33 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/inspect-surface.d.ts +27 -0
  80. package/dist/inspect-surface.d.ts.map +1 -0
  81. package/dist/inspect-surface.js +14 -0
  82. package/dist/inspect-surface.js.map +1 -0
  83. package/dist/internal.d.ts +19 -0
  84. package/dist/internal.d.ts.map +1 -0
  85. package/dist/internal.js +19 -0
  86. package/dist/internal.js.map +1 -0
  87. package/dist/memory/allocU32.d.ts +25 -0
  88. package/dist/memory/allocU32.d.ts.map +1 -0
  89. package/dist/memory/allocU32.js +95 -0
  90. package/dist/memory/allocU32.js.map +1 -0
  91. package/dist/memory/buffers.d.ts +94 -0
  92. package/dist/memory/buffers.d.ts.map +1 -0
  93. package/dist/memory/buffers.js +308 -0
  94. package/dist/memory/buffers.js.map +1 -0
  95. package/dist/memory/index.d.ts +7 -0
  96. package/dist/memory/index.d.ts.map +1 -0
  97. package/dist/memory/index.js +4 -0
  98. package/dist/memory/index.js.map +1 -0
  99. package/dist/memory/layout.d.ts +37 -0
  100. package/dist/memory/layout.d.ts.map +1 -0
  101. package/dist/memory/layout.js +116 -0
  102. package/dist/memory/layout.js.map +1 -0
  103. package/dist/query/compile.d.ts +73 -0
  104. package/dist/query/compile.d.ts.map +1 -0
  105. package/dist/query/compile.js +158 -0
  106. package/dist/query/compile.js.map +1 -0
  107. package/dist/query/engine.d.ts +48 -0
  108. package/dist/query/engine.d.ts.map +1 -0
  109. package/dist/query/engine.js +230 -0
  110. package/dist/query/engine.js.map +1 -0
  111. package/dist/query/index.d.ts +8 -0
  112. package/dist/query/index.d.ts.map +1 -0
  113. package/dist/query/index.js +10 -0
  114. package/dist/query/index.js.map +1 -0
  115. package/dist/query/live-query.d.ts +122 -0
  116. package/dist/query/live-query.d.ts.map +1 -0
  117. package/dist/query/live-query.js +543 -0
  118. package/dist/query/live-query.js.map +1 -0
  119. package/dist/query/sparse-set.d.ts +18 -0
  120. package/dist/query/sparse-set.d.ts.map +1 -0
  121. package/dist/query/sparse-set.js +126 -0
  122. package/dist/query/sparse-set.js.map +1 -0
  123. package/dist/reactivity/change-version.d.ts +19 -0
  124. package/dist/reactivity/change-version.d.ts.map +1 -0
  125. package/dist/reactivity/change-version.js +76 -0
  126. package/dist/reactivity/change-version.js.map +1 -0
  127. package/dist/reactivity/index.d.ts +12 -0
  128. package/dist/reactivity/index.d.ts.map +1 -0
  129. package/dist/reactivity/index.js +12 -0
  130. package/dist/reactivity/index.js.map +1 -0
  131. package/dist/reactivity/log.d.ts +83 -0
  132. package/dist/reactivity/log.d.ts.map +1 -0
  133. package/dist/reactivity/log.js +260 -0
  134. package/dist/reactivity/log.js.map +1 -0
  135. package/dist/reactivity/observer-commands.d.ts +40 -0
  136. package/dist/reactivity/observer-commands.d.ts.map +1 -0
  137. package/dist/reactivity/observer-commands.js +111 -0
  138. package/dist/reactivity/observer-commands.js.map +1 -0
  139. package/dist/reactivity/observers.d.ts +50 -0
  140. package/dist/reactivity/observers.d.ts.map +1 -0
  141. package/dist/reactivity/observers.js +127 -0
  142. package/dist/reactivity/observers.js.map +1 -0
  143. package/dist/reactivity/reactivity.d.ts +141 -0
  144. package/dist/reactivity/reactivity.d.ts.map +1 -0
  145. package/dist/reactivity/reactivity.js +479 -0
  146. package/dist/reactivity/reactivity.js.map +1 -0
  147. package/dist/reactivity/structural-journal.d.ts +30 -0
  148. package/dist/reactivity/structural-journal.d.ts.map +1 -0
  149. package/dist/reactivity/structural-journal.js +77 -0
  150. package/dist/reactivity/structural-journal.js.map +1 -0
  151. package/dist/registry.d.ts +26 -0
  152. package/dist/registry.d.ts.map +1 -0
  153. package/dist/registry.js +58 -0
  154. package/dist/registry.js.map +1 -0
  155. package/dist/serialize-surface.d.ts +170 -0
  156. package/dist/serialize-surface.d.ts.map +1 -0
  157. package/dist/serialize-surface.js +6 -0
  158. package/dist/serialize-surface.js.map +1 -0
  159. package/dist/storage/archetype.d.ts +38 -0
  160. package/dist/storage/archetype.d.ts.map +1 -0
  161. package/dist/storage/archetype.js +47 -0
  162. package/dist/storage/archetype.js.map +1 -0
  163. package/dist/storage/cold-store.d.ts +41 -0
  164. package/dist/storage/cold-store.d.ts.map +1 -0
  165. package/dist/storage/cold-store.js +100 -0
  166. package/dist/storage/cold-store.js.map +1 -0
  167. package/dist/storage/index.d.ts +10 -0
  168. package/dist/storage/index.d.ts.map +1 -0
  169. package/dist/storage/index.js +5 -0
  170. package/dist/storage/index.js.map +1 -0
  171. package/dist/storage/signature.d.ts +27 -0
  172. package/dist/storage/signature.d.ts.map +1 -0
  173. package/dist/storage/signature.js +115 -0
  174. package/dist/storage/signature.js.map +1 -0
  175. package/dist/storage/storage.d.ts +72 -0
  176. package/dist/storage/storage.d.ts.map +1 -0
  177. package/dist/storage/storage.js +192 -0
  178. package/dist/storage/storage.js.map +1 -0
  179. package/dist/storage/store.d.ts +88 -0
  180. package/dist/storage/store.d.ts.map +1 -0
  181. package/dist/storage/store.js +473 -0
  182. package/dist/storage/store.js.map +1 -0
  183. package/dist/util/stable-index.d.ts +29 -0
  184. package/dist/util/stable-index.d.ts.map +1 -0
  185. package/dist/util/stable-index.js +51 -0
  186. package/dist/util/stable-index.js.map +1 -0
  187. package/dist/world.d.ts +262 -0
  188. package/dist/world.d.ts.map +1 -0
  189. package/dist/world.js +831 -0
  190. package/dist/world.js.map +1 -0
  191. package/package.json +52 -0
@@ -0,0 +1,19 @@
1
+ export { makeHandle, handleGeneration, CapacityExceeded, } from './entity/index.js';
2
+ export type { EntityGeneration, HandleStats, EntityLocation, EntityAccessors, } from './entity/index.js';
3
+ export { allocU32 } from './memory/index.js';
4
+ export type { AllocU32Options, U32Region } from './memory/index.js';
5
+ export { Buffers, probeCapabilities, selectBacking, sharedBacking, snapshotInto, rowSlice, columnKey, tokenToColumnLayout, fieldToColumnLayout, stringIndexElement, EID_NULL, } from './memory/index.js';
6
+ export type { Backing, BackingStrategy, Region, RegionOpts, ViewHolder, BuffersConfig, ExportedColumnHandle, ExportedRegionHandle, } from './memory/index.js';
7
+ export { registerComponentId, UNREGISTERED, resolveDescriptor, makeAccessorFactory, bindingsFor, } from './component/index.js';
8
+ export type { ComponentRuntime, DefKind, AccessorWorld, AccessorBinding, AccessorInstanceBase, BuildColumnSetParams, } from './component/index.js';
9
+ export { ComponentRegistry } from './registry.js';
10
+ export { ArchetypeStore, Storage, EMPTY_ARCHETYPE_ID, canonicalize, sigEquals, sigHash, sigHas, sigWithAdded, sigWithRemoved, buildSigWords, signatureMatches, makeColdStore, coldRowOf, } from './storage/index.js';
11
+ export type { Archetype, ColdStore, Signature, MatchTerm, RecordSurface, StorageDeps, StorageConfig, DefRegistry, } from './storage/index.js';
12
+ export { Bitmask } from './bitmask/index.js';
13
+ export type { PhaseGate } from './bitmask/index.js';
14
+ export { Reactivity, LogRing, WriteCorral, ChangeVersionStore, ObserverRegistry, OVERFLOW_SENTINEL } from './reactivity/index.js';
15
+ export type { ReactivityDeps, LogPointer, ObserverKind, ObserverHandler, ObserverDeps, } from './reactivity/index.js';
16
+ export { QueryEngine, LiveQuery, SparseSetU32, compileQuery } from './query/index.js';
17
+ export type { QueryEngineDeps, LiveQueryDeps, ReactivityQueryHooks, PooledElement, CompiledQuery, CompiledValueTerm, CompileContext, ResidualTerm, RowFilterTerm, ValueRole, Word, } from './query/index.js';
18
+ export type { ScalarValue, FieldValue, VecView, ReadonlyVecView, FieldDescriptor, TypedArrayCtor, SpawnArg, SpawnTuple, SpawnArgFor, AccessorInstance, AccessorFactory, TypedArrayLike, ColumnBinding, ReadTerm, WriteTerm, HasTerm, WithoutTerm, OptionalTerm, TermElement, UnionToIntersection, WorldQuery, LooseQueryElement, CompKey, } from '@ecsia/schema';
19
+ //# sourceMappingURL=internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EACV,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAEnE,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,QAAQ,GACT,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EACV,OAAO,EACP,eAAe,EACf,MAAM,EACN,UAAU,EACV,UAAU,EACV,aAAa,EACb,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,GACZ,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EACV,gBAAgB,EAChB,OAAO,EACP,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,EACL,cAAc,EACd,OAAO,EACP,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,OAAO,EACP,MAAM,EACN,YAAY,EACZ,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,SAAS,GACV,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,WAAW,GACZ,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAEnD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACjI,YAAY,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,eAAe,EACf,YAAY,GACb,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACrF,YAAY,EACV,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,EACT,IAAI,GACL,MAAM,kBAAkB,CAAA;AAIzB,YAAY,EACV,WAAW,EACX,UAAU,EACV,OAAO,EACP,eAAe,EACf,eAAe,EACf,cAAc,EACd,QAAQ,EACR,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,aAAa,EACb,QAAQ,EACR,SAAS,EACT,OAAO,EACP,WAAW,EACX,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,UAAU,EACV,iBAAiB,EACjB,OAAO,GACR,MAAM,eAAe,CAAA"}
@@ -0,0 +1,19 @@
1
+ // @ecsia/core — INTERNAL surface. NOT part of the published package (`package.json#exports` maps only
2
+ // `.` → index.ts). These are the kernel implementation primitives — store/bitmask/registry/query
3
+ // engine/memory backing/reactivity log classes and the low-level schema inference helpers — that this
4
+ // package's own tests reach through a RELATIVE import (`../src/internal.js`). They are deliberately
5
+ // kept OFF the public `index.ts` so the published surface stays curated.
6
+ //
7
+ // Cross-package note: the symbols genuinely needed by sibling packages (@ecsia/{relations,
8
+ // serialization}) live on the PUBLIC index.ts under an "INTERNAL (cross-package)" banner — they are
9
+ // NOT here, because removing them would break those siblings' `@ecsia/core` imports.
10
+ export { makeHandle, handleGeneration, CapacityExceeded, } from './entity/index.js';
11
+ export { allocU32 } from './memory/index.js';
12
+ export { Buffers, probeCapabilities, selectBacking, sharedBacking, snapshotInto, rowSlice, columnKey, tokenToColumnLayout, fieldToColumnLayout, stringIndexElement, EID_NULL, } from './memory/index.js';
13
+ export { registerComponentId, UNREGISTERED, resolveDescriptor, makeAccessorFactory, bindingsFor, } from './component/index.js';
14
+ export { ComponentRegistry } from './registry.js';
15
+ export { ArchetypeStore, Storage, EMPTY_ARCHETYPE_ID, canonicalize, sigEquals, sigHash, sigHas, sigWithAdded, sigWithRemoved, buildSigWords, signatureMatches, makeColdStore, coldRowOf, } from './storage/index.js';
16
+ export { Bitmask } from './bitmask/index.js';
17
+ export { Reactivity, LogRing, WriteCorral, ChangeVersionStore, ObserverRegistry, OVERFLOW_SENTINEL } from './reactivity/index.js';
18
+ export { QueryEngine, LiveQuery, SparseSetU32, compileQuery } from './query/index.js';
19
+ //# sourceMappingURL=internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,iGAAiG;AACjG,sGAAsG;AACtG,oGAAoG;AACpG,yEAAyE;AACzE,EAAE;AACF,2FAA2F;AAC3F,oGAAoG;AACpG,qFAAqF;AAErF,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,mBAAmB,CAAA;AAQ1B,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAG5C,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,QAAQ,GACT,MAAM,mBAAmB,CAAA;AAY1B,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,GACZ,MAAM,sBAAsB,CAAA;AAU7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,EACL,cAAc,EACd,OAAO,EACP,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,OAAO,EACP,MAAM,EACN,YAAY,EACZ,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,SAAS,GACV,MAAM,oBAAoB,CAAA;AAY3B,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAG5C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AASjI,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,25 @@
1
+ export interface AllocU32Options {
2
+ /** When true and the runtime allows it, back the array with a SharedArrayBuffer. */
3
+ readonly shared?: boolean;
4
+ /**
5
+ * Reserve a resizable backing whose view widens on `.grow()` up to `maxLength` elements.
6
+ * Omit for a fixed-size, non-resizable buffer.
7
+ */
8
+ readonly maxLength?: number;
9
+ }
10
+ export interface U32Region {
11
+ /**
12
+ * Length-tracking on a resizable backing (re-derives its length on `.grow()`), or fixed-size
13
+ * over a non-resizable backing. Never constructed with an explicit length argument over a
14
+ * resizable buffer.
15
+ */
16
+ readonly view: Uint32Array;
17
+ readonly backing: ArrayBufferLike;
18
+ readonly shared: boolean;
19
+ /** Current element capacity (`backing.byteLength / 4`). */
20
+ capacity(): number;
21
+ /** Grow the backing to at least `length` elements. No-op if already large enough. */
22
+ grow(length: number): void;
23
+ }
24
+ export declare function allocU32(length: number, opts?: AllocU32Options): U32Region;
25
+ //# sourceMappingURL=allocU32.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allocU32.d.ts","sourceRoot":"","sources":["../../src/memory/allocU32.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,oFAAoF;IACpF,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,2DAA2D;IAC3D,QAAQ,IAAI,MAAM,CAAA;IAClB,qFAAqF;IACrF,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AA8CD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,SAAS,CA0D9E"}
@@ -0,0 +1,95 @@
1
+ // The single length-tracking-view primitive the entity-identity flat arrays need
2
+ // This is the minimal slice of the memory layer the entity layer needs: it
3
+ // owns the one branch that decides SharedArrayBuffer vs ArrayBuffer and constructs the view
4
+ // WITH NO LENGTH ARGUMENT so it widens automatically on `.grow()`.
5
+ const BYTES = Uint32Array.BYTES_PER_ELEMENT;
6
+ // Shareable iff the SharedArrayBuffer ctor exists AND cross-origin isolation is not explicitly off.
7
+ // Node/worker_threads report `crossOriginIsolated === undefined` and CAN share SABs, so the gate is
8
+ // `!== false` (matching the Buffers capability probe, /3) rather than
9
+ // `=== true` — otherwise the entity-record regions would be AB in Node while columns are SAB, and a
10
+ // worker could not read an entity's (archetypeId, row) from the shared record region.
11
+ const canShare = () => typeof SharedArrayBuffer !== 'undefined' && globalThis.crossOriginIsolated !== false;
12
+ // SharedArrayBuffer does not EXIST as a global in non-cross-origin-isolated browsers — referencing
13
+ // it at module scope would throw on load. Resolve it lazily behind a typeof guard.
14
+ const sabCtor = () => typeof SharedArrayBuffer === 'undefined'
15
+ ? undefined
16
+ : SharedArrayBuffer;
17
+ const plainSabCtor = () => typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer;
18
+ const missingSab = () => {
19
+ throw new Error('shared backing requested but SharedArrayBuffer is unavailable (page not cross-origin isolated)');
20
+ };
21
+ const ResizableAb = ArrayBuffer;
22
+ const tryResizableSab = (byteLen, maxBytes) => {
23
+ try {
24
+ const Sab = sabCtor();
25
+ if (!Sab)
26
+ return undefined;
27
+ return new Sab(byteLen, { maxByteLength: maxBytes });
28
+ }
29
+ catch {
30
+ return undefined;
31
+ }
32
+ };
33
+ const tryResizableAb = (byteLen, maxBytes) => {
34
+ try {
35
+ return new ResizableAb(byteLen, { maxByteLength: maxBytes });
36
+ }
37
+ catch {
38
+ return undefined;
39
+ }
40
+ };
41
+ export function allocU32(length, opts = {}) {
42
+ if (!Number.isInteger(length) || length < 0) {
43
+ throw new RangeError(`allocU32 length must be a non-negative integer; got ${length}`);
44
+ }
45
+ const wantShared = opts.shared === true && canShare();
46
+ const hasMax = opts.maxLength !== undefined;
47
+ if (hasMax && (!Number.isInteger(opts.maxLength) || opts.maxLength < length)) {
48
+ throw new RangeError(`allocU32 maxLength must be an integer >= length (${length}); got ${opts.maxLength}`);
49
+ }
50
+ const byteLen = length * BYTES;
51
+ const maxBytes = hasMax ? opts.maxLength * BYTES : byteLen;
52
+ let backing;
53
+ let shared = false;
54
+ if (hasMax) {
55
+ const sab = wantShared ? tryResizableSab(byteLen, maxBytes) : undefined;
56
+ if (sab !== undefined) {
57
+ backing = sab;
58
+ shared = true;
59
+ }
60
+ else {
61
+ const ab = tryResizableAb(byteLen, maxBytes);
62
+ backing = ab ?? new ArrayBuffer(byteLen);
63
+ }
64
+ }
65
+ else {
66
+ backing = wantShared ? new (plainSabCtor() ?? missingSab())(byteLen) : new ArrayBuffer(byteLen);
67
+ shared = wantShared;
68
+ }
69
+ // No length argument: the view length-tracks the (possibly resizable) backing.
70
+ return {
71
+ view: new Uint32Array(backing),
72
+ backing,
73
+ shared,
74
+ capacity() {
75
+ return this.backing.byteLength / BYTES;
76
+ },
77
+ grow(target) {
78
+ if (target <= this.capacity())
79
+ return;
80
+ const buf = this.backing;
81
+ const resizeFn = buf.grow ?? buf.resize;
82
+ const max = buf.maxByteLength;
83
+ if (typeof resizeFn === 'function' && typeof max === 'number') {
84
+ const needBytes = target * BYTES;
85
+ if (needBytes > max) {
86
+ throw new RangeError(`allocU32 cannot grow to ${target} elements; reserved max is ${max / BYTES}`);
87
+ }
88
+ resizeFn.call(buf, needBytes);
89
+ return;
90
+ }
91
+ throw new RangeError('allocU32 region is not resizable (allocate with { maxLength } to enable growth)');
92
+ },
93
+ };
94
+ }
95
+ //# sourceMappingURL=allocU32.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allocU32.js","sourceRoot":"","sources":["../../src/memory/allocU32.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import type { ColumnLayout, ElementKind, TypedArray } from './layout.js';
2
+ export type Backing = SharedArrayBuffer | ArrayBuffer;
3
+ export type ColumnKey = string & {
4
+ readonly __columnKey: unique symbol;
5
+ };
6
+ export type RegionKey = string & {
7
+ readonly __regionKey: unique symbol;
8
+ };
9
+ export type WorkerMode = 'single' | 'sab' | 'no-sab' | 'auto';
10
+ export type BackingStrategy = 'resizable-sab' | 'grow-patch-sab' | 'resizable-ab' | 'grow-patch-ab';
11
+ export interface RuntimeCapabilities {
12
+ readonly sabAvailable: boolean;
13
+ readonly resizableSab: boolean;
14
+ readonly resizableAb: boolean;
15
+ readonly waitAsync: boolean;
16
+ readonly waitBlocking: boolean;
17
+ readonly crossOriginIsolated: boolean | undefined;
18
+ readonly backing: BackingStrategy;
19
+ }
20
+ export declare const isSharedBacking: (b: ArrayBufferLike) => b is SharedArrayBuffer;
21
+ export declare function selectBacking(req: WorkerMode, sabAvailable: boolean, resizableSab: boolean, resizableAb: boolean, emitDiagnostic?: (message: string) => void): BackingStrategy;
22
+ export declare function probeCapabilities(req: WorkerMode, emitDiagnostic?: (message: string) => void): RuntimeCapabilities;
23
+ export interface Column<TA extends TypedArray = TypedArray> {
24
+ readonly layout: ColumnLayout;
25
+ readonly key: ColumnKey;
26
+ view: TA;
27
+ backing: Backing;
28
+ capacity(): number;
29
+ }
30
+ export interface Region<TA extends TypedArray = TypedArray> {
31
+ view: TA;
32
+ backing: Backing;
33
+ readonly key: RegionKey;
34
+ capacity(): number;
35
+ }
36
+ export interface RegionOpts {
37
+ readonly fixed?: boolean;
38
+ readonly maxLength?: number;
39
+ readonly fill?: number;
40
+ }
41
+ export interface ViewHolder {
42
+ __rebind(newBacking: Backing): void;
43
+ }
44
+ export interface BuffersConfig {
45
+ readonly capabilities: RuntimeCapabilities;
46
+ readonly maxEntities: number;
47
+ /** _RESERVE_FACTOR — multiplies initialCapacity for the address-space reservation. */
48
+ readonly growthReserveFactor?: number;
49
+ /** _RESERVE_ROWS — floor on a column's reserved capacity. */
50
+ readonly minReserveRows?: number;
51
+ }
52
+ export interface ExportedColumnHandle {
53
+ readonly key: ColumnKey;
54
+ readonly backing: SharedArrayBuffer;
55
+ readonly layout: ColumnLayout;
56
+ }
57
+ export interface ExportedRegionHandle {
58
+ readonly key: RegionKey;
59
+ readonly backing: SharedArrayBuffer;
60
+ readonly element: ElementKind;
61
+ }
62
+ export interface SharedHandleManifest {
63
+ readonly columns: ReadonlyArray<ExportedColumnHandle>;
64
+ readonly regions: ReadonlyArray<ExportedRegionHandle>;
65
+ }
66
+ export interface ColumnGrowthNotice {
67
+ readonly key: ColumnKey;
68
+ readonly backing: SharedArrayBuffer;
69
+ readonly layout: ColumnLayout;
70
+ }
71
+ export interface ColumnGrowthLog {
72
+ /** Monotonic re-backing generation. Equal across two reads ⇒ nothing re-backed (the steady-state check). */
73
+ readonly generation: number;
74
+ /** Re-backing notices accumulated since the last drain (latest backing per column). Empty unless `generation` advanced. */
75
+ drain(): ColumnGrowthNotice[];
76
+ }
77
+ export declare class Buffers {
78
+ #private;
79
+ readonly capabilities: RuntimeCapabilities;
80
+ constructor(config: BuffersConfig);
81
+ column(key: ColumnKey, layout: ColumnLayout, initialCapacity: number): Column;
82
+ region(key: RegionKey, element: ElementKind, length: number, opts?: RegionOpts): Region;
83
+ grow(col: Column, newCapacity: number): Column;
84
+ columnGrowth(): ColumnGrowthLog;
85
+ registerAccessor(key: ColumnKey, accessor: ViewHolder): void;
86
+ unregisterAccessor(key: ColumnKey, accessor: ViewHolder): void;
87
+ get(key: ColumnKey | RegionKey): Column | Region | undefined;
88
+ exportSharedHandles(): SharedHandleManifest;
89
+ }
90
+ export declare function sharedBacking(col: Column): SharedArrayBuffer | null;
91
+ export declare function snapshotInto(col: Column, count: number, out: TypedArray, outOffset: number): number;
92
+ export declare function rowSlice(col: Column, row: number): TypedArray;
93
+ export declare function columnKey(archetypeId: number, componentTypeId: number, fieldIndex: number): ColumnKey;
94
+ //# sourceMappingURL=buffers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffers.d.ts","sourceRoot":"","sources":["../../src/memory/buffers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,308 @@
1
+ // The buffer layer. Owns the physical column/region representation,
2
+ // the SAB-vs-ArrayBuffer decision (the single site), and the growth protocol with its
3
+ // load-bearing correctness invariant — accessor view-invalidation:
4
+ // PRIMARY: length-tracking views over a resizable backing auto-widen on `.grow()`,
5
+ // so growth re-points NOTHING.
6
+ // FALLBACK: a non-resizable backing is re-allocated, copied, and every live ViewHolder
7
+ // is re-bound via `__rebind` (the live-accessor registry).
8
+ import { elementCtor } from './layout.js';
9
+ // SharedArrayBuffer is ABSENT as a global in non-isolated browsers — never reference it at
10
+ // module scope or in bare instanceof checks; resolve lazily behind typeof guards.
11
+ const resizableSabCtor = () => typeof SharedArrayBuffer === 'undefined'
12
+ ? undefined
13
+ : SharedArrayBuffer;
14
+ const plainSab = () => typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer;
15
+ export const isSharedBacking = (b) => typeof SharedArrayBuffer !== 'undefined' && b instanceof SharedArrayBuffer;
16
+ const missingSharedBacking = () => {
17
+ throw new Error('shared backing requested but SharedArrayBuffer is unavailable (page not cross-origin isolated)');
18
+ };
19
+ const ResizableAb = ArrayBuffer;
20
+ const tryCtor = (make) => {
21
+ try {
22
+ make();
23
+ return true;
24
+ }
25
+ catch {
26
+ return false;
27
+ }
28
+ };
29
+ export function selectBacking(req, sabAvailable, resizableSab, resizableAb, emitDiagnostic = () => { }) {
30
+ switch (req) {
31
+ case 'single':
32
+ return resizableAb ? 'resizable-ab' : 'grow-patch-ab';
33
+ case 'sab':
34
+ if (!sabAvailable) {
35
+ throw new Error("workers:'sab' requires SharedArrayBuffer + cross-origin isolation");
36
+ }
37
+ return resizableSab ? 'resizable-sab' : 'grow-patch-sab';
38
+ case 'no-sab':
39
+ return resizableAb ? 'resizable-ab' : 'grow-patch-ab';
40
+ case 'auto':
41
+ if (sabAvailable)
42
+ return resizableSab ? 'resizable-sab' : 'grow-patch-sab';
43
+ emitDiagnostic('SAB/cross-origin-isolation unavailable; running single-threaded');
44
+ return resizableAb ? 'resizable-ab' : 'grow-patch-ab';
45
+ }
46
+ }
47
+ export function probeCapabilities(req, emitDiagnostic) {
48
+ const sabCtor = typeof SharedArrayBuffer === 'function';
49
+ const coi = typeof globalThis.crossOriginIsolated !== 'undefined'
50
+ ? globalThis.crossOriginIsolated
51
+ : undefined;
52
+ const sabAvailable = sabCtor && coi !== false;
53
+ const resizableSab = sabAvailable && tryCtor(() => new (resizableSabCtor() ?? missingSharedBacking())(8, { maxByteLength: 16 }));
54
+ const resizableAb = tryCtor(() => new ResizableAb(8, { maxByteLength: 16 }));
55
+ // Atomics.waitAsync is ES2024; lib is ES2023, so it is probed through a localized cast.
56
+ const waitAsync = sabAvailable && typeof Atomics.waitAsync === 'function';
57
+ const waitBlocking = sabAvailable && typeof Atomics.wait === 'function';
58
+ const backing = selectBacking(req, sabAvailable, resizableSab, resizableAb, emitDiagnostic);
59
+ return Object.freeze({
60
+ sabAvailable,
61
+ resizableSab,
62
+ resizableAb,
63
+ waitAsync,
64
+ waitBlocking,
65
+ crossOriginIsolated: coi,
66
+ backing,
67
+ });
68
+ }
69
+ const DEFAULT_GROWTH_RESERVE_FACTOR = 16;
70
+ const DEFAULT_MIN_RESERVE_ROWS = 1024;
71
+ const isResizable = (strategy) => strategy === 'resizable-sab' || strategy === 'resizable-ab';
72
+ const isSab = (strategy) => strategy === 'resizable-sab' || strategy === 'grow-patch-sab';
73
+ function makeView(element, backing) {
74
+ // No length argument: the view length-tracks the (possibly resizable) backing.
75
+ const Ctor = elementCtor(element);
76
+ return new Ctor(backing);
77
+ }
78
+ function fillRange(view, start, end, value) {
79
+ view.fill(value, start, end);
80
+ }
81
+ function nextCapacityBytes(currentBytes, requiredBytes, maxBytes) {
82
+ // Doubling needs a non-zero base: from currentBytes===0 the doubling loop never progresses
83
+ // (0*2===0) and spins forever. Seed from requiredBytes so a grow off a zero-capacity backing
84
+ // still terminates at the required size.
85
+ let target = currentBytes > 0 ? currentBytes : requiredBytes;
86
+ while (target < requiredBytes)
87
+ target = target * 2;
88
+ return Math.min(target, maxBytes);
89
+ }
90
+ export class Buffers {
91
+ capabilities;
92
+ #maxEntities;
93
+ #growthReserveFactor;
94
+ #minReserveRows;
95
+ // One registry of column/region objects, keyed for idempotent allocation.
96
+ #registry = new Map();
97
+ #regionElement = new Map();
98
+ // The live-accessor registry: walked ONLY on the fallback grow path.
99
+ #accessors = new Map();
100
+ // Bumped + appended ONLY on the SAB #growFallback path (workers re-wrap the
101
+ // new backing at the wave fence). In-place `.grow()` never touches this — keeps it zero-cost.
102
+ #growGeneration = 0;
103
+ #pendingGrowth = new Map();
104
+ constructor(config) {
105
+ this.capabilities = config.capabilities;
106
+ this.#maxEntities = config.maxEntities;
107
+ this.#growthReserveFactor = config.growthReserveFactor ?? DEFAULT_GROWTH_RESERVE_FACTOR;
108
+ this.#minReserveRows = config.minReserveRows ?? DEFAULT_MIN_RESERVE_ROWS;
109
+ }
110
+ #maxCapacityFor(initialCapacity) {
111
+ return Math.min(Math.max(initialCapacity * this.#growthReserveFactor, this.#minReserveRows), this.#maxEntities);
112
+ }
113
+ #allocBacking(byteLen, maxBytes) {
114
+ switch (this.capabilities.backing) {
115
+ case 'resizable-sab':
116
+ return new (resizableSabCtor() ?? missingSharedBacking())(byteLen, { maxByteLength: maxBytes });
117
+ case 'resizable-ab':
118
+ return new ResizableAb(byteLen, { maxByteLength: maxBytes });
119
+ case 'grow-patch-sab':
120
+ return new (plainSab() ?? missingSharedBacking())(byteLen);
121
+ case 'grow-patch-ab':
122
+ return new ArrayBuffer(byteLen);
123
+ }
124
+ }
125
+ // Allocate (or fetch existing) a column. Idempotent per key.
126
+ column(key, layout, initialCapacity) {
127
+ const existing = this.#registry.get(key);
128
+ if (existing !== undefined)
129
+ return existing;
130
+ const rowBytes = layout.rowBytes;
131
+ const byteLen = rowBytes * initialCapacity;
132
+ const maxBytes = rowBytes * this.#maxCapacityFor(initialCapacity);
133
+ const backing = this.#allocBacking(byteLen, maxBytes);
134
+ const view = makeView(layout.element, backing);
135
+ const col = {
136
+ layout,
137
+ key,
138
+ view,
139
+ backing,
140
+ capacity() {
141
+ return this.backing.byteLength / rowBytes;
142
+ },
143
+ };
144
+ if (layout.fillOnInit !== 0) {
145
+ fillRange(view, 0, view.length, layout.fillOnInit);
146
+ }
147
+ this.#registry.set(key, col);
148
+ return col;
149
+ }
150
+ // A flat global region (entity records, bitmask words, log rings).
151
+ region(key, element, length, opts = {}) {
152
+ const existing = this.#registry.get(key);
153
+ if (existing !== undefined)
154
+ return existing;
155
+ const elementBytes = elementCtor(element).BYTES_PER_ELEMENT;
156
+ const byteLen = length * elementBytes;
157
+ const fixed = opts.fixed === true;
158
+ const maxRows = fixed ? length : (opts.maxLength ?? this.#maxCapacityFor(length));
159
+ const maxBytes = maxRows * elementBytes;
160
+ // A fixed region never grows; over a resizable strategy reserve exactly its length so the
161
+ // reservation == length and `.grow()` would refuse anyway.
162
+ const backing = this.#allocBacking(byteLen, Math.max(maxBytes, byteLen));
163
+ const view = makeView(element, backing);
164
+ const fill = opts.fill ?? 0;
165
+ if (fill !== 0)
166
+ fillRange(view, 0, view.length, fill);
167
+ const reg = {
168
+ view,
169
+ backing,
170
+ key,
171
+ capacity() {
172
+ return this.backing.byteLength / elementBytes;
173
+ },
174
+ };
175
+ this.#registry.set(key, reg);
176
+ this.#regionElement.set(key, element);
177
+ return reg;
178
+ }
179
+ // >= newCapacity rows. Returns the (possibly re-pointed) Column.
180
+ grow(col, newCapacity) {
181
+ const rowBytes = col.layout.rowBytes;
182
+ const required = newCapacity * rowBytes;
183
+ if (required <= col.backing.byteLength)
184
+ return col;
185
+ const oldCapacity = col.backing.byteLength / rowBytes;
186
+ const growable = col.backing;
187
+ const resizeFn = isResizable(this.capabilities.backing) ? (growable.grow ?? growable.resize) : undefined;
188
+ const max = growable.maxByteLength;
189
+ if (typeof resizeFn === 'function' && typeof max === 'number') {
190
+ const target = nextCapacityBytes(col.backing.byteLength, required, max);
191
+ if (target >= required) {
192
+ try {
193
+ resizeFn.call(growable, target);
194
+ // No view re-point, no registry walk, no worker re-broadcast: the length-tracking
195
+ // view (and every captured view) auto-widens.: fill to the ACTUAL post-grow capacity
196
+ // (the doubling protocol over-allocates beyond newCapacity), else eid rows in
197
+ // [newCapacity, actualCapacity) read 0 — a valid entity index, not the -1 null sentinel.
198
+ this.#fillGrownTail(col.view, col.layout, oldCapacity, col.backing.byteLength / rowBytes);
199
+ return col;
200
+ }
201
+ catch {
202
+ return this.#growFallback(col, newCapacity);
203
+ }
204
+ }
205
+ // Reservation exhausted: clamp failed to cover required → exact alloc, no cap.
206
+ }
207
+ return this.#growFallback(col, newCapacity);
208
+ }
209
+ // Serial flush point, no worker executing.
210
+ #growFallback(col, newCapacity) {
211
+ const rowBytes = col.layout.rowBytes;
212
+ const oldView = col.view;
213
+ const oldCapacity = col.backing.byteLength / rowBytes;
214
+ const newByteLen = newCapacity * rowBytes;
215
+ const newBacking = isSab(this.capabilities.backing)
216
+ ? new (plainSab() ?? missingSharedBacking())(newByteLen)
217
+ : new ArrayBuffer(newByteLen);
218
+ const newView = makeView(col.layout.element, newBacking);
219
+ newView.set(oldView);
220
+ this.#fillGrownTail(newView, col.layout, oldCapacity, newCapacity);
221
+ col.backing = newBacking;
222
+ col.view = newView;
223
+ const holders = this.#accessors.get(col.key);
224
+ if (holders !== undefined) {
225
+ for (const holder of holders)
226
+ holder.__rebind(newBacking);
227
+ }
228
+ // Main-thread holders are re-bound above, but worker views captured the OLD SAB at bootstrap.
229
+ // Record the new backing so the pool re-wraps it at the next wave fence (only SAB is worker-visible).
230
+ if (isSharedBacking(newBacking)) {
231
+ this.#growGeneration += 1;
232
+ this.#pendingGrowth.set(col.key, { key: col.key, backing: newBacking, layout: col.layout });
233
+ }
234
+ return col;
235
+ }
236
+ // The re-backing journal the worker pool drains at the wave fence. `generation` is a cheap
237
+ // monotonic int: when it is unchanged across two reads the pool skips the drain entirely (zero
238
+ // steady-state cost). `drain()` returns the latest backing per re-backed column and clears the queue.
239
+ columnGrowth() {
240
+ return {
241
+ generation: this.#growGeneration,
242
+ drain: () => {
243
+ const out = [...this.#pendingGrowth.values()];
244
+ this.#pendingGrowth.clear();
245
+ return out;
246
+ },
247
+ };
248
+ }
249
+ // Only eid columns need an explicit fill (their zero is a valid entity); everything else
250
+ // relies on the runtime zero-init of the grown region.
251
+ #fillGrownTail(view, layout, oldCapacity, newCapacity) {
252
+ if (layout.fillOnInit === 0)
253
+ return;
254
+ // Upper bound clamped to the view's real length: the grown capacity is derived from the backing
255
+ // (the doubling protocol over-allocates), so the eid -1 fill must cover the whole tail.
256
+ const end = Math.min(newCapacity * layout.stride, view.length);
257
+ fillRange(view, oldCapacity * layout.stride, end, layout.fillOnInit);
258
+ }
259
+ registerAccessor(key, accessor) {
260
+ let set = this.#accessors.get(key);
261
+ if (set === undefined) {
262
+ set = new Set();
263
+ this.#accessors.set(key, set);
264
+ }
265
+ set.add(accessor);
266
+ }
267
+ unregisterAccessor(key, accessor) {
268
+ this.#accessors.get(key)?.delete(accessor);
269
+ }
270
+ get(key) {
271
+ return this.#registry.get(key);
272
+ }
273
+ // The worker-relevant SAB handles, posted once at worker startup.
274
+ exportSharedHandles() {
275
+ const columns = [];
276
+ const regions = [];
277
+ for (const entry of this.#registry.values()) {
278
+ if (!(isSharedBacking(entry.backing)))
279
+ continue;
280
+ if ('layout' in entry) {
281
+ columns.push({ key: entry.key, backing: entry.backing, layout: entry.layout });
282
+ }
283
+ else {
284
+ const element = this.#regionElement.get(entry.key);
285
+ if (element !== undefined)
286
+ regions.push({ key: entry.key, backing: entry.backing, element });
287
+ }
288
+ }
289
+ return { columns, regions };
290
+ }
291
+ }
292
+ // Zero-copy SAB vs copy snapshot.
293
+ export function sharedBacking(col) {
294
+ return isSharedBacking(col.backing) ? col.backing : null;
295
+ }
296
+ export function snapshotInto(col, count, out, outOffset) {
297
+ const elements = count * col.layout.stride;
298
+ out.set(col.view.subarray(0, elements), outOffset);
299
+ return elements;
300
+ }
301
+ export function rowSlice(col, row) {
302
+ const n = col.layout.stride;
303
+ return col.view.subarray(row * n, row * n + n);
304
+ }
305
+ export function columnKey(archetypeId, componentTypeId, fieldIndex) {
306
+ return `${archetypeId}:${componentTypeId}.${fieldIndex}`;
307
+ }
308
+ //# sourceMappingURL=buffers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffers.js","sourceRoot":"","sources":["../../src/memory/buffers.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,sFAAsF;AACtF,mEAAmE;AACnE,mFAAmF;AACnF,+BAA+B;AAC/B,uFAAuF;AACvF,2DAA2D;AAG3D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAyBzC,2FAA2F;AAC3F,kFAAkF;AAClF,MAAM,gBAAgB,GAAG,GAAiD,EAAE,CAC1E,OAAO,iBAAiB,KAAK,WAAW;IACtC,CAAC,CAAC,SAAS;IACX,CAAC,CAAE,iBAAiE,CAAA;AACxE,MAAM,QAAQ,GAAG,GAAuD,EAAE,CACxE,OAAO,iBAAiB,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAA;AAC1E,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAkB,EAA0B,EAAE,CAC5E,OAAO,iBAAiB,KAAK,WAAW,IAAI,CAAC,YAAY,iBAAiB,CAAA;AAC5E,MAAM,oBAAoB,GAAG,GAAU,EAAE;IACvC,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAA;AACnH,CAAC,CAAA;AACD,MAAM,WAAW,GAAG,WAAoD,CAAA;AAOxE,MAAM,OAAO,GAAG,CAAC,IAAmB,EAAW,EAAE;IAC/C,IAAI,CAAC;QACH,IAAI,EAAE,CAAA;QACN,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AAED,MAAM,UAAU,aAAa,CAC3B,GAAe,EACf,YAAqB,EACrB,YAAqB,EACrB,WAAoB,EACpB,iBAA4C,GAAG,EAAE,GAAE,CAAC;IAEpD,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,QAAQ;YACX,OAAO,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,CAAA;QACvD,KAAK,KAAK;YACR,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAA;YACtF,CAAC;YACD,OAAO,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAA;QAC1D,KAAK,QAAQ;YACX,OAAO,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,CAAA;QACvD,KAAK,MAAM;YACT,IAAI,YAAY;gBAAE,OAAO,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAA;YAC1E,cAAc,CAAC,iEAAiE,CAAC,CAAA;YACjF,OAAO,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,CAAA;IACzD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,GAAe,EACf,cAA0C;IAE1C,MAAM,OAAO,GAAG,OAAO,iBAAiB,KAAK,UAAU,CAAA;IACvD,MAAM,GAAG,GACP,OAAQ,UAAgD,CAAC,mBAAmB,KAAK,WAAW;QAC1F,CAAC,CAAE,UAAgD,CAAC,mBAAmB;QACvE,CAAC,CAAC,SAAS,CAAA;IACf,MAAM,YAAY,GAAG,OAAO,IAAI,GAAG,KAAK,KAAK,CAAA;IAC7C,MAAM,YAAY,GAAG,YAAY,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;IAChI,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;IAC5E,wFAAwF;IACxF,MAAM,SAAS,GACb,YAAY,IAAI,OAAQ,OAAmC,CAAC,SAAS,KAAK,UAAU,CAAA;IACtF,MAAM,YAAY,GAAG,YAAY,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,CAAA;IACvE,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,CAAC,CAAA;IAC3F,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,SAAS;QACT,YAAY;QACZ,mBAAmB,EAAE,GAAG;QACxB,OAAO;KACR,CAAC,CAAA;AACJ,CAAC;AA2CD,MAAM,6BAA6B,GAAG,EAAE,CAAA;AACxC,MAAM,wBAAwB,GAAG,IAAI,CAAA;AAErC,MAAM,WAAW,GAAG,CAAC,QAAyB,EAAW,EAAE,CACzD,QAAQ,KAAK,eAAe,IAAI,QAAQ,KAAK,cAAc,CAAA;AAC7D,MAAM,KAAK,GAAG,CAAC,QAAyB,EAAW,EAAE,CACnD,QAAQ,KAAK,eAAe,IAAI,QAAQ,KAAK,gBAAgB,CAAA;AAE/D,SAAS,QAAQ,CAAC,OAAoB,EAAE,OAAgB;IACtD,+EAA+E;IAC/E,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IACjC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAA;AAC1B,CAAC;AAED,SAAS,SAAS,CAAC,IAAgB,EAAE,KAAa,EAAE,GAAW,EAAE,KAAa;IAC5E,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;AAC9B,CAAC;AAED,SAAS,iBAAiB,CAAC,YAAoB,EAAE,aAAqB,EAAE,QAAgB;IACtF,2FAA2F;IAC3F,6FAA6F;IAC7F,yCAAyC;IACzC,IAAI,MAAM,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAA;IAC5D,OAAO,MAAM,GAAG,aAAa;QAAE,MAAM,GAAG,MAAM,GAAG,CAAC,CAAA;IAClD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AACnC,CAAC;AAkCD,MAAM,OAAO,OAAO;IACT,YAAY,CAAqB;IACjC,YAAY,CAAQ;IACpB,oBAAoB,CAAQ;IAC5B,eAAe,CAAQ;IAChC,0EAA0E;IACjE,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAA;IAC9C,cAAc,GAAG,IAAI,GAAG,EAAuB,CAAA;IACxD,qEAAqE;IAC5D,UAAU,GAAG,IAAI,GAAG,EAA2B,CAAA;IACxD,4EAA4E;IAC5E,8FAA8F;IAC9F,eAAe,GAAG,CAAC,CAAA;IACV,cAAc,GAAG,IAAI,GAAG,EAAiC,CAAA;IAElE,YAAY,MAAqB;QAC/B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAA;QACvC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,CAAA;QACtC,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,IAAI,6BAA6B,CAAA;QACvF,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,cAAc,IAAI,wBAAwB,CAAA;IAC1E,CAAC;IAED,eAAe,CAAC,eAAuB;QACrC,OAAO,IAAI,CAAC,GAAG,CACb,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,eAAe,CAAC,EAC3E,IAAI,CAAC,YAAY,CAClB,CAAA;IACH,CAAC;IAED,aAAa,CAAC,OAAe,EAAE,QAAgB;QAC7C,QAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAClC,KAAK,eAAe;gBAClB,OAAO,IAAI,CAAC,gBAAgB,EAAE,IAAI,oBAAoB,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAA;YACjG,KAAK,cAAc;gBACjB,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAA;YAC9D,KAAK,gBAAgB;gBACnB,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,oBAAoB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;YAC5D,KAAK,eAAe;gBAClB,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAA;QACnC,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,MAAM,CAAC,GAAc,EAAE,MAAoB,EAAE,eAAuB;QAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACxC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAkB,CAAA;QAErD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;QAChC,MAAM,OAAO,GAAG,QAAQ,GAAG,eAAe,CAAA;QAC1C,MAAM,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAA;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC9C,MAAM,GAAG,GAAW;YAClB,MAAM;YACN,GAAG;YACH,IAAI;YACJ,OAAO;YACP,QAAQ;gBACN,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAA;YAC3C,CAAC;SACF,CAAA;QACD,IAAI,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YAC5B,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;QACpD,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC5B,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,mEAAmE;IACnE,MAAM,CAAC,GAAc,EAAE,OAAoB,EAAE,MAAc,EAAE,OAAmB,EAAE;QAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACxC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAkB,CAAA;QAErD,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAA;QAC3D,MAAM,OAAO,GAAG,MAAM,GAAG,YAAY,CAAA;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAA;QACjC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAA;QACjF,MAAM,QAAQ,GAAG,OAAO,GAAG,YAAY,CAAA;QACvC,0FAA0F;QAC1F,2DAA2D;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;QACxE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA;QAC3B,IAAI,IAAI,KAAK,CAAC;YAAE,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACrD,MAAM,GAAG,GAAW;YAClB,IAAI;YACJ,OAAO;YACP,GAAG;YACH,QAAQ;gBACN,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,YAAY,CAAA;YAC/C,CAAC;SACF,CAAA;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC5B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACrC,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,iEAAiE;IACjE,IAAI,CAAC,GAAW,EAAE,WAAmB;QACnC,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAA;QACpC,MAAM,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAA;QACvC,IAAI,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU;YAAE,OAAO,GAAG,CAAA;QAElD,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAA;QACrD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAmB,CAAA;QACxC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACxG,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAA;QAClC,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC9D,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAA;YACvE,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;gBACvB,IAAI,CAAC;oBACH,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;oBAC/B,kFAAkF;oBAClF,qFAAqF;oBACrF,8EAA8E;oBAC9E,yFAAyF;oBACzF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAA;oBACzF,OAAO,GAAG,CAAA;gBACZ,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;gBAC7C,CAAC;YACH,CAAC;YACD,+EAA+E;QACjF,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;IAC7C,CAAC;IAED,2CAA2C;IAC3C,aAAa,CAAC,GAAW,EAAE,WAAmB;QAC5C,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAA;QACpC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAA;QACxB,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAA;QACrD,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAA;QACzC,MAAM,UAAU,GAAY,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAC1D,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,oBAAoB,EAAE,CAAC,CAAC,UAAU,CAAC;YACxD,CAAC,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAA;QAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QACxD,OAAO,CAAC,GAAG,CAAC,OAAuC,CAAC,CAAA;QACpD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;QAClE,GAAG,CAAC,OAAO,GAAG,UAAU,CAAA;QACxB,GAAG,CAAC,IAAI,GAAG,OAAO,CAAA;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC5C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,KAAK,MAAM,MAAM,IAAI,OAAO;gBAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QAC3D,CAAC;QACD,8FAA8F;QAC9F,sGAAsG;QACtG,IAAI,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,eAAe,IAAI,CAAC,CAAA;YACzB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;QAC7F,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,2FAA2F;IAC3F,+FAA+F;IAC/F,sGAAsG;IACtG,YAAY;QACV,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,eAAe;YAChC,KAAK,EAAE,GAAyB,EAAE;gBAChC,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAA;gBAC7C,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;gBAC3B,OAAO,GAAG,CAAA;YACZ,CAAC;SACF,CAAA;IACH,CAAC;IAED,yFAAyF;IACzF,uDAAuD;IACvD,cAAc,CAAC,IAAgB,EAAE,MAAoB,EAAE,WAAmB,EAAE,WAAmB;QAC7F,IAAI,MAAM,CAAC,UAAU,KAAK,CAAC;YAAE,OAAM;QACnC,gGAAgG;QAChG,wFAAwF;QACxF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAC9D,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;IACtE,CAAC;IAED,gBAAgB,CAAC,GAAc,EAAE,QAAoB;QACnD,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;YACf,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC/B,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACnB,CAAC;IAED,kBAAkB,CAAC,GAAc,EAAE,QAAoB;QACrD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC5C,CAAC;IAED,GAAG,CAAC,GAA0B;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAChC,CAAC;IAED,kEAAkE;IAClE,mBAAmB;QACjB,MAAM,OAAO,GAA2B,EAAE,CAAA;QAC1C,MAAM,OAAO,GAA2B,EAAE,CAAA;QAC1C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAAE,SAAQ;YAC/C,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;YAChF,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBAClD,IAAI,OAAO,KAAK,SAAS;oBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;YAC9F,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;IAC7B,CAAC;CACF;AAED,kCAAkC;AAClC,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;AAC1D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,KAAa,EAAE,GAAe,EAAE,SAAiB;IACzF,MAAM,QAAQ,GAAG,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAA;IAC1C,GAAG,CAAC,GAAG,CACJ,GAAG,CAAC,IAAkE,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAiC,EAC7H,SAAS,CACV,CAAA;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,GAAW;IAC/C,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAA;IAC3B,OAAQ,GAAG,CAAC,IAAkE,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;AAC/G,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,WAAmB,EAAE,eAAuB,EAAE,UAAkB;IACxF,OAAO,GAAG,WAAW,IAAI,eAAe,IAAI,UAAU,EAAe,CAAA;AACvE,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { allocU32 } from './allocU32.js';
2
+ export type { AllocU32Options, U32Region } from './allocU32.js';
3
+ export { elementCtor, elementBytes, makeColumnLayout, tokenToColumnLayout, fieldToColumnLayout, stringIndexElement, encodeEid, decodeEid, EID_NULL, } from './layout.js';
4
+ export type { ElementKind, TypedArray, ColumnLayout } from './layout.js';
5
+ export { Buffers, probeCapabilities, selectBacking, sharedBacking, snapshotInto, rowSlice, columnKey, } from './buffers.js';
6
+ export type { Backing, ColumnKey, RegionKey, WorkerMode, BackingStrategy, RuntimeCapabilities, Column, Region, RegionOpts, ViewHolder, BuffersConfig, SharedHandleManifest, ExportedColumnHandle, ExportedRegionHandle, ColumnGrowthNotice, ColumnGrowthLog, } from './buffers.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE/D,OAAO,EACL,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,QAAQ,GACT,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAExE,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,SAAS,GACV,MAAM,cAAc,CAAA;AACrB,YAAY,EACV,OAAO,EACP,SAAS,EACT,SAAS,EACT,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,MAAM,EACN,MAAM,EACN,UAAU,EACV,UAAU,EACV,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,GAChB,MAAM,cAAc,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { allocU32 } from './allocU32.js';
2
+ export { elementCtor, elementBytes, makeColumnLayout, tokenToColumnLayout, fieldToColumnLayout, stringIndexElement, encodeEid, decodeEid, EID_NULL, } from './layout.js';
3
+ export { Buffers, probeCapabilities, selectBacking, sharedBacking, snapshotInto, rowSlice, columnKey, } from './buffers.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGxC,OAAO,EACL,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,EACT,SAAS,EACT,QAAQ,GACT,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,SAAS,GACV,MAAM,cAAc,CAAA"}