aiecsjs 0.4.0 → 0.4.1

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 (35) hide show
  1. package/README_ZHTW.md +3 -3
  2. package/api.json +1 -1
  3. package/dist/{chunk-RHH5JA74.cjs → chunk-2CF2MNMH.cjs} +2 -2
  4. package/dist/{chunk-RHH5JA74.cjs.map → chunk-2CF2MNMH.cjs.map} +1 -1
  5. package/dist/{chunk-SJDWI3OZ.cjs → chunk-7NNM4PGP.cjs} +2 -2
  6. package/dist/{chunk-SJDWI3OZ.cjs.map → chunk-7NNM4PGP.cjs.map} +1 -1
  7. package/dist/{chunk-CTESP3XL.js → chunk-AW254W5F.js} +2 -2
  8. package/dist/{chunk-CTESP3XL.js.map → chunk-AW254W5F.js.map} +1 -1
  9. package/dist/{chunk-B777DQR7.cjs → chunk-XU3BVVCJ.cjs} +2 -2
  10. package/dist/{chunk-B777DQR7.cjs.map → chunk-XU3BVVCJ.cjs.map} +1 -1
  11. package/dist/{chunk-F7KNZ27O.js → chunk-YAHZHZNR.js} +2 -2
  12. package/dist/{chunk-F7KNZ27O.js.map → chunk-YAHZHZNR.js.map} +1 -1
  13. package/dist/{chunk-SQWZUC2Q.js → chunk-ZNLOJVCV.js} +2 -2
  14. package/dist/{chunk-SQWZUC2Q.js.map → chunk-ZNLOJVCV.js.map} +1 -1
  15. package/dist/commands.cjs +1 -1
  16. package/dist/commands.js +1 -1
  17. package/dist/index.cjs +1 -1
  18. package/dist/index.d.cts +1 -1
  19. package/dist/index.d.ts +1 -1
  20. package/dist/index.js +1 -1
  21. package/dist/observers.cjs +1 -1
  22. package/dist/observers.js +1 -1
  23. package/dist/relations.cjs +1 -1
  24. package/dist/relations.js +1 -1
  25. package/dist/serialize.cjs +1 -1
  26. package/dist/serialize.js +1 -1
  27. package/dist/worker.cjs +1 -1
  28. package/dist/worker.js +1 -1
  29. package/llms-full.txt +13 -4
  30. package/package.json +5 -8
  31. package/CHANGELOG.md +0 -292
  32. package/STABILITY.md +0 -156
  33. package/STABILITY_ZHTW.md +0 -155
  34. package/docs/MIGRATION.md +0 -252
  35. package/docs/MIGRATION_ZHTW.md +0 -252
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/internal/query.ts"],"names":["nextQueryId","moduleQueryCache","descKey","d","all","c","a","b","any","none","defineQuery","arg","desc","key","cached","q","enterQuery","query","reactive","exitQuery","ensureQueryRegistered","state","ww","withMask","createMask","anyMask","noneMask","compId","info","getComponentInfoById","bit","getOrRegisterComponentBit","setBit","bundle","isMaskZero","involvedBits","listBits","s","getQueryArchetypes","words","list","i","arch","matches","queryArchetypes","world","getWorldState","ids","out","id","runQuery","buf","e","archIds","r","iterQuery","src","forEachEntity","fn","cols","buildColumnViews","callWithCols","ents","n","eid","comp","getComponentInfo","storage","recordEntityMaskChange","changedBit","prevMask","nextMask","involved","qid","wasMatch","isMatch","pushReactive","queryId","kind","ensureReactiveBuffer","componentId","lazyGetComponentInfo","_getComponentInfoFn","registerComponentLookup"],"mappings":"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","file":"chunk-SQWZUC2Q.js","sourcesContent":["import { createMask, isMaskZero, listBits, matches, setBit } from './bitmask.js'\nimport { getComponentInfo } from './component.js'\nimport type {\n Archetype,\n ComponentInfo,\n ComponentLike,\n EntityId,\n Query,\n QueryDescriptor,\n QueryInternal,\n QueryMaskBundle,\n ReactiveBuffer,\n World,\n WorldState,\n} from './types.js'\nimport {\n getOrRegisterComponentBit,\n getWorldState,\n readEntityMask,\n tryGetComponentBit,\n} from './world.js'\n\nlet nextQueryId = 1\nconst moduleQueryCache = new Map<string, QueryInternal>()\n\nfunction descKey(d: QueryDescriptor): string {\n const all = (d.all ?? [])\n .map((c) => c.__id)\n .sort((a, b) => a - b)\n .join('-')\n const any = (d.any ?? [])\n .map((c) => c.__id)\n .sort((a, b) => a - b)\n .join('-')\n const none = (d.none ?? [])\n .map((c) => c.__id)\n .sort((a, b) => a - b)\n .join('-')\n return `A${all}|Y${any}|N${none}`\n}\n\nexport function defineQuery(arg: ComponentLike[] | QueryDescriptor): Query {\n const desc: QueryDescriptor = Array.isArray(arg) ? { all: arg } : arg\n\n // Validate all members are components\n for (const c of [...(desc.all ?? []), ...(desc.any ?? []), ...(desc.none ?? [])]) {\n if (!c || typeof c !== 'object' || typeof (c as any).__id !== 'number') {\n throw new TypeError('aiecsjs: defineQuery received a non-component value')\n }\n }\n\n const key = descKey(desc)\n const cached = moduleQueryCache.get(key)\n if (cached) return cached\n\n const q: QueryInternal = {\n id: nextQueryId++,\n mask: [],\n all: (desc.all ?? []).map((c) => c.__id),\n any: (desc.any ?? []).map((c) => c.__id),\n none: (desc.none ?? []).map((c) => c.__id),\n columnViewCache: [...(desc.all ?? []), ...(desc.any ?? [])],\n reactiveKind: 'normal',\n sourceQueryId: -1,\n sourceQuery: null,\n }\n moduleQueryCache.set(key, q)\n return q\n}\n\nexport function enterQuery(query: Query): Query {\n const q = query as QueryInternal\n const key = `enter:${q.id}`\n const cached = moduleQueryCache.get(key)\n if (cached) return cached\n const reactive: QueryInternal = {\n id: nextQueryId++,\n mask: [],\n all: q.all,\n any: q.any,\n none: q.none,\n columnViewCache: q.columnViewCache,\n reactiveKind: 'enter',\n sourceQueryId: q.id,\n sourceQuery: q,\n }\n moduleQueryCache.set(key, reactive)\n return reactive\n}\n\nexport function exitQuery(query: Query): Query {\n const q = query as QueryInternal\n const key = `exit:${q.id}`\n const cached = moduleQueryCache.get(key)\n if (cached) return cached\n const reactive: QueryInternal = {\n id: nextQueryId++,\n mask: [],\n all: q.all,\n any: q.any,\n none: q.none,\n columnViewCache: q.columnViewCache,\n reactiveKind: 'exit',\n sourceQueryId: q.id,\n sourceQuery: q,\n }\n moduleQueryCache.set(key, reactive)\n return reactive\n}\n\n// --- Per-world query setup ---\n\nfunction ensureQueryRegistered(state: WorldState, q: QueryInternal): void {\n if (state.queries[q.id] === q && state.queryMasks.has(q.id)) return\n\n // Build per-world bitmasks (this may register new bits)\n const ww = state.options.maskWordCount\n const withMask = createMask(ww)\n const anyMask = createMask(ww)\n const noneMask = createMask(ww)\n for (const compId of q.all) {\n const info = getComponentInfoById(compId)\n const bit = getOrRegisterComponentBit(state, info)\n setBit(withMask, bit)\n }\n for (const compId of q.any) {\n const info = getComponentInfoById(compId)\n const bit = getOrRegisterComponentBit(state, info)\n setBit(anyMask, bit)\n }\n for (const compId of q.none) {\n const info = getComponentInfoById(compId)\n const bit = getOrRegisterComponentBit(state, info)\n setBit(noneMask, bit)\n }\n\n const bundle: QueryMaskBundle = {\n withMask,\n anyMask,\n noneMask,\n anyHasBits: !isMaskZero(anyMask),\n }\n state.queryMasks.set(q.id, bundle)\n\n state.queries[q.id] = q\n state.queryArchetypeCache[q.id] = null\n state.queryArchetypeStamp[q.id] = -1\n\n // Build bit → queries index for fast reactive lookup\n const involvedBits: number[] = [\n ...listBits(withMask),\n ...listBits(anyMask),\n ...listBits(noneMask),\n ]\n for (const b of involvedBits) {\n let s = state.bitToQueries.get(b)\n if (!s) {\n s = new Set<number>()\n state.bitToQueries.set(b, s)\n }\n s.add(q.id)\n }\n\n // Initialize reactive buffer for enter/exit queries\n if (q.reactiveKind !== 'normal') {\n if (!state.reactiveBuffers.has(q.id)) {\n state.reactiveBuffers.set(q.id, { entered: [], exited: [] })\n }\n // Also register the source query so recordEntityMaskChange will see it\n if (q.sourceQuery) ensureQueryRegistered(state, q.sourceQuery)\n }\n}\n\nfunction getQueryArchetypes(state: WorldState, q: QueryInternal): number[] {\n ensureQueryRegistered(state, q)\n if (state.queryArchetypeCache[q.id] && state.queryArchetypeStamp[q.id] === state.queryVersion) {\n return state.queryArchetypeCache[q.id]!\n }\n const bundle = state.queryMasks.get(q.id)!\n const words = state.options.maskWordCount\n const list: number[] = []\n for (let i = 0; i < state.archetypes.length; i++) {\n const arch = state.archetypes[i]!\n if (\n matches(arch.mask, bundle.withMask, bundle.anyMask, bundle.noneMask, bundle.anyHasBits, words)\n ) {\n list.push(i)\n }\n }\n state.queryArchetypeCache[q.id] = list\n state.queryArchetypeStamp[q.id] = state.queryVersion\n return list\n}\n\nexport function queryArchetypes(world: World, query: Query): readonly Archetype[] {\n const state = getWorldState(world)\n const q = query as QueryInternal\n const ids = getQueryArchetypes(state, q)\n const out: Archetype[] = []\n for (const id of ids) {\n const arch = state.archetypes[id]!\n out.push({ id: arch.id, mask: Array.from(arch.mask), size: arch.size })\n }\n return out\n}\n\nexport function runQuery(world: World, query: Query): readonly EntityId[] {\n const state = getWorldState(world)\n const q = query as QueryInternal\n const out: EntityId[] = []\n if (q.reactiveKind === 'enter') {\n const buf = state.reactiveBuffers.get(q.id)\n if (buf) {\n for (const e of buf.entered) out.push(e as EntityId)\n buf.entered.length = 0\n }\n return out\n }\n if (q.reactiveKind === 'exit') {\n const buf = state.reactiveBuffers.get(q.id)\n if (buf) {\n for (const e of buf.exited) out.push(e as EntityId)\n buf.exited.length = 0\n }\n return out\n }\n const archIds = getQueryArchetypes(state, q)\n for (const id of archIds) {\n const arch = state.archetypes[id]!\n for (let r = 0; r < arch.size; r++) {\n out.push(arch.entities[r] as EntityId)\n }\n }\n return out\n}\n\nexport function* iterQuery(world: World, query: Query): IterableIterator<EntityId> {\n const state = getWorldState(world)\n const q = query as QueryInternal\n if (q.reactiveKind !== 'normal') {\n const buf = state.reactiveBuffers.get(q.id)\n if (!buf) return\n const src = q.reactiveKind === 'enter' ? buf.entered : buf.exited\n for (const e of src) yield e as EntityId\n src.length = 0\n return\n }\n const archIds = getQueryArchetypes(state, q)\n for (const id of archIds) {\n const arch = state.archetypes[id]!\n for (let r = 0; r < arch.size; r++) {\n yield arch.entities[r] as EntityId\n }\n }\n}\n\nexport function forEachEntity(\n world: World,\n query: Query,\n fn: (eid: EntityId, ...cols: any[]) => void,\n): void {\n const state = getWorldState(world)\n const q = query as QueryInternal\n\n if (q.reactiveKind !== 'normal') {\n const buf = state.reactiveBuffers.get(q.id)\n if (!buf) return\n const src = q.reactiveKind === 'enter' ? buf.entered : buf.exited\n if (src.length === 0) return\n const cols = buildColumnViews(state, q)\n for (let i = 0; i < src.length; i++) {\n const e = src[i] as EntityId\n callWithCols(fn, e, cols)\n }\n src.length = 0\n return\n }\n\n ensureQueryRegistered(state, q)\n const archIds = getQueryArchetypes(state, q)\n const cols = buildColumnViews(state, q)\n for (const id of archIds) {\n const arch = state.archetypes[id]!\n const ents = arch.entities\n const n = arch.size\n for (let r = 0; r < n; r++) {\n callWithCols(fn, ents[r] as EntityId, cols)\n }\n }\n}\n\nfunction callWithCols(\n fn: (eid: EntityId, ...cols: any[]) => void,\n eid: EntityId,\n cols: any[],\n): void {\n // Specialise for low arities to avoid spread allocation.\n switch (cols.length) {\n case 0:\n fn(eid)\n break\n case 1:\n fn(eid, cols[0])\n break\n case 2:\n fn(eid, cols[0], cols[1])\n break\n case 3:\n fn(eid, cols[0], cols[1], cols[2])\n break\n case 4:\n fn(eid, cols[0], cols[1], cols[2], cols[3])\n break\n case 5:\n fn(eid, cols[0], cols[1], cols[2], cols[3], cols[4])\n break\n default:\n fn(eid, ...cols)\n }\n}\n\nfunction buildColumnViews(state: WorldState, q: QueryInternal): any[] {\n const out: any[] = []\n for (const comp of q.columnViewCache) {\n const info = getComponentInfo(comp)\n const bit = state.componentBitFor.get(info.id)\n if (bit === undefined) {\n out.push(undefined)\n continue\n }\n const storage = state.componentStorageByBit[bit]\n if (!storage) {\n out.push(undefined)\n continue\n }\n if (storage.kind === 'soa') out.push(storage.soa)\n else if (storage.kind === 'aos') out.push(storage.aos)\n else out.push(true) // tag\n }\n return out\n}\n\n// --- Reactive query updates (called from migration code) ---\n\nexport function recordEntityMaskChange(\n state: WorldState,\n eid: EntityId,\n changedBit: number,\n prevMask: Uint32Array,\n nextMask: Uint32Array,\n): void {\n // Lazy-register any reactive queries (and their sources) so we can correctly\n // determine match transitions even if the user only ever called enterQuery/exitQuery.\n for (const q of moduleQueryCache.values()) {\n if (q.reactiveKind === 'normal') continue\n if (q.sourceQuery && state.queries[q.sourceQuery.id] !== q.sourceQuery) {\n ensureQueryRegistered(state, q.sourceQuery)\n }\n }\n\n const involved = state.bitToQueries.get(changedBit)\n if (!involved) return\n const words = state.options.maskWordCount\n for (const qid of involved) {\n const q = state.queries[qid]\n if (!q) continue\n if (q.reactiveKind !== 'normal') continue\n const bundle = state.queryMasks.get(qid)\n if (!bundle) continue\n const wasMatch = matches(\n prevMask,\n bundle.withMask,\n bundle.anyMask,\n bundle.noneMask,\n bundle.anyHasBits,\n words,\n )\n const isMatch = matches(\n nextMask,\n bundle.withMask,\n bundle.anyMask,\n bundle.noneMask,\n bundle.anyHasBits,\n words,\n )\n if (!wasMatch && isMatch) {\n pushReactive(state, qid, 'enter', eid)\n } else if (wasMatch && !isMatch) {\n pushReactive(state, qid, 'exit', eid)\n }\n }\n}\n\nfunction pushReactive(\n state: WorldState,\n queryId: number,\n kind: 'enter' | 'exit',\n eid: EntityId,\n): void {\n // Walk the module cache (not just state.queries) so reactive variants that\n // haven't been registered with this world yet still receive events.\n for (const r of moduleQueryCache.values()) {\n if (r.sourceQueryId !== queryId) continue\n if (r.reactiveKind !== kind) continue\n // Lazily register the reactive query in this world so subsequent reads can find it\n ensureQueryRegistered(state, r)\n const buf = ensureReactiveBuffer(state, r.id)\n if (kind === 'enter') buf.entered.push(eid as number)\n else buf.exited.push(eid as number)\n }\n}\n\nfunction ensureReactiveBuffer(state: WorldState, qid: number): ReactiveBuffer {\n let buf = state.reactiveBuffers.get(qid)\n if (!buf) {\n buf = { entered: [], exited: [] }\n state.reactiveBuffers.set(qid, buf)\n }\n return buf\n}\n\n// --- Helpers ---\n\nfunction getComponentInfoById(componentId: number): ComponentInfo {\n // We need access to the component registry's lookup by id. Re-import dynamically to avoid cycles.\n const info = lazyGetComponentInfo(componentId)\n if (!info) throw new Error(`aiecsjs: component id ${componentId} not registered`)\n return info\n}\n\nlet _getComponentInfoFn: ((id: number) => ComponentInfo | undefined) | null = null\nexport function registerComponentLookup(fn: (id: number) => ComponentInfo | undefined): void {\n _getComponentInfoFn = fn\n}\nfunction lazyGetComponentInfo(id: number): ComponentInfo | undefined {\n return _getComponentInfoFn ? _getComponentInfoFn(id) : undefined\n}\n\nexport function _resetQueryRegistry_FOR_TESTS_ONLY(): void {\n moduleQueryCache.clear()\n nextQueryId = 1\n}\n"]}
1
+ {"version":3,"sources":["../src/internal/query.ts"],"names":["nextQueryId","moduleQueryCache","descKey","d","all","c","a","b","any","none","defineQuery","arg","desc","key","cached","q","enterQuery","query","reactive","exitQuery","ensureQueryRegistered","state","ww","withMask","createMask","anyMask","noneMask","compId","info","getComponentInfoById","bit","getOrRegisterComponentBit","setBit","bundle","isMaskZero","involvedBits","listBits","s","getQueryArchetypes","words","list","i","arch","matches","queryArchetypes","world","getWorldState","ids","out","id","runQuery","buf","e","archIds","r","iterQuery","src","forEachEntity","fn","cols","buildColumnViews","callWithCols","ents","n","eid","comp","getComponentInfo","storage","recordEntityMaskChange","changedBit","prevMask","nextMask","involved","qid","wasMatch","isMatch","pushReactive","queryId","kind","ensureReactiveBuffer","componentId","lazyGetComponentInfo","_getComponentInfoFn","registerComponentLookup"],"mappings":"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","file":"chunk-ZNLOJVCV.js","sourcesContent":["import { createMask, isMaskZero, listBits, matches, setBit } from './bitmask.js'\nimport { getComponentInfo } from './component.js'\nimport type {\n Archetype,\n ComponentInfo,\n ComponentLike,\n EntityId,\n Query,\n QueryDescriptor,\n QueryInternal,\n QueryMaskBundle,\n ReactiveBuffer,\n World,\n WorldState,\n} from './types.js'\nimport {\n getOrRegisterComponentBit,\n getWorldState,\n readEntityMask,\n tryGetComponentBit,\n} from './world.js'\n\nlet nextQueryId = 1\nconst moduleQueryCache = new Map<string, QueryInternal>()\n\nfunction descKey(d: QueryDescriptor): string {\n const all = (d.all ?? [])\n .map((c) => c.__id)\n .sort((a, b) => a - b)\n .join('-')\n const any = (d.any ?? [])\n .map((c) => c.__id)\n .sort((a, b) => a - b)\n .join('-')\n const none = (d.none ?? [])\n .map((c) => c.__id)\n .sort((a, b) => a - b)\n .join('-')\n return `A${all}|Y${any}|N${none}`\n}\n\nexport function defineQuery(arg: ComponentLike[] | QueryDescriptor): Query {\n const desc: QueryDescriptor = Array.isArray(arg) ? { all: arg } : arg\n\n // Validate all members are components\n for (const c of [...(desc.all ?? []), ...(desc.any ?? []), ...(desc.none ?? [])]) {\n if (!c || typeof c !== 'object' || typeof (c as any).__id !== 'number') {\n throw new TypeError('aiecsjs: defineQuery received a non-component value')\n }\n }\n\n const key = descKey(desc)\n const cached = moduleQueryCache.get(key)\n if (cached) return cached\n\n const q: QueryInternal = {\n id: nextQueryId++,\n mask: [],\n all: (desc.all ?? []).map((c) => c.__id),\n any: (desc.any ?? []).map((c) => c.__id),\n none: (desc.none ?? []).map((c) => c.__id),\n columnViewCache: [...(desc.all ?? []), ...(desc.any ?? [])],\n reactiveKind: 'normal',\n sourceQueryId: -1,\n sourceQuery: null,\n }\n moduleQueryCache.set(key, q)\n return q\n}\n\nexport function enterQuery(query: Query): Query {\n const q = query as QueryInternal\n const key = `enter:${q.id}`\n const cached = moduleQueryCache.get(key)\n if (cached) return cached\n const reactive: QueryInternal = {\n id: nextQueryId++,\n mask: [],\n all: q.all,\n any: q.any,\n none: q.none,\n columnViewCache: q.columnViewCache,\n reactiveKind: 'enter',\n sourceQueryId: q.id,\n sourceQuery: q,\n }\n moduleQueryCache.set(key, reactive)\n return reactive\n}\n\nexport function exitQuery(query: Query): Query {\n const q = query as QueryInternal\n const key = `exit:${q.id}`\n const cached = moduleQueryCache.get(key)\n if (cached) return cached\n const reactive: QueryInternal = {\n id: nextQueryId++,\n mask: [],\n all: q.all,\n any: q.any,\n none: q.none,\n columnViewCache: q.columnViewCache,\n reactiveKind: 'exit',\n sourceQueryId: q.id,\n sourceQuery: q,\n }\n moduleQueryCache.set(key, reactive)\n return reactive\n}\n\n// --- Per-world query setup ---\n\nfunction ensureQueryRegistered(state: WorldState, q: QueryInternal): void {\n if (state.queries[q.id] === q && state.queryMasks.has(q.id)) return\n\n // Build per-world bitmasks (this may register new bits)\n const ww = state.options.maskWordCount\n const withMask = createMask(ww)\n const anyMask = createMask(ww)\n const noneMask = createMask(ww)\n for (const compId of q.all) {\n const info = getComponentInfoById(compId)\n const bit = getOrRegisterComponentBit(state, info)\n setBit(withMask, bit)\n }\n for (const compId of q.any) {\n const info = getComponentInfoById(compId)\n const bit = getOrRegisterComponentBit(state, info)\n setBit(anyMask, bit)\n }\n for (const compId of q.none) {\n const info = getComponentInfoById(compId)\n const bit = getOrRegisterComponentBit(state, info)\n setBit(noneMask, bit)\n }\n\n const bundle: QueryMaskBundle = {\n withMask,\n anyMask,\n noneMask,\n anyHasBits: !isMaskZero(anyMask),\n }\n state.queryMasks.set(q.id, bundle)\n\n state.queries[q.id] = q\n state.queryArchetypeCache[q.id] = null\n state.queryArchetypeStamp[q.id] = -1\n\n // Build bit → queries index for fast reactive lookup\n const involvedBits: number[] = [\n ...listBits(withMask),\n ...listBits(anyMask),\n ...listBits(noneMask),\n ]\n for (const b of involvedBits) {\n let s = state.bitToQueries.get(b)\n if (!s) {\n s = new Set<number>()\n state.bitToQueries.set(b, s)\n }\n s.add(q.id)\n }\n\n // Initialize reactive buffer for enter/exit queries\n if (q.reactiveKind !== 'normal') {\n if (!state.reactiveBuffers.has(q.id)) {\n state.reactiveBuffers.set(q.id, { entered: [], exited: [] })\n }\n // Also register the source query so recordEntityMaskChange will see it\n if (q.sourceQuery) ensureQueryRegistered(state, q.sourceQuery)\n }\n}\n\nfunction getQueryArchetypes(state: WorldState, q: QueryInternal): number[] {\n ensureQueryRegistered(state, q)\n if (state.queryArchetypeCache[q.id] && state.queryArchetypeStamp[q.id] === state.queryVersion) {\n return state.queryArchetypeCache[q.id]!\n }\n const bundle = state.queryMasks.get(q.id)!\n const words = state.options.maskWordCount\n const list: number[] = []\n for (let i = 0; i < state.archetypes.length; i++) {\n const arch = state.archetypes[i]!\n if (\n matches(arch.mask, bundle.withMask, bundle.anyMask, bundle.noneMask, bundle.anyHasBits, words)\n ) {\n list.push(i)\n }\n }\n state.queryArchetypeCache[q.id] = list\n state.queryArchetypeStamp[q.id] = state.queryVersion\n return list\n}\n\nexport function queryArchetypes(world: World, query: Query): readonly Archetype[] {\n const state = getWorldState(world)\n const q = query as QueryInternal\n const ids = getQueryArchetypes(state, q)\n const out: Archetype[] = []\n for (const id of ids) {\n const arch = state.archetypes[id]!\n out.push({ id: arch.id, mask: Array.from(arch.mask), size: arch.size })\n }\n return out\n}\n\nexport function runQuery(world: World, query: Query): readonly EntityId[] {\n const state = getWorldState(world)\n const q = query as QueryInternal\n const out: EntityId[] = []\n if (q.reactiveKind === 'enter') {\n const buf = state.reactiveBuffers.get(q.id)\n if (buf) {\n for (const e of buf.entered) out.push(e as EntityId)\n buf.entered.length = 0\n }\n return out\n }\n if (q.reactiveKind === 'exit') {\n const buf = state.reactiveBuffers.get(q.id)\n if (buf) {\n for (const e of buf.exited) out.push(e as EntityId)\n buf.exited.length = 0\n }\n return out\n }\n const archIds = getQueryArchetypes(state, q)\n for (const id of archIds) {\n const arch = state.archetypes[id]!\n for (let r = 0; r < arch.size; r++) {\n out.push(arch.entities[r] as EntityId)\n }\n }\n return out\n}\n\nexport function* iterQuery(world: World, query: Query): IterableIterator<EntityId> {\n const state = getWorldState(world)\n const q = query as QueryInternal\n if (q.reactiveKind !== 'normal') {\n const buf = state.reactiveBuffers.get(q.id)\n if (!buf) return\n const src = q.reactiveKind === 'enter' ? buf.entered : buf.exited\n for (const e of src) yield e as EntityId\n src.length = 0\n return\n }\n const archIds = getQueryArchetypes(state, q)\n for (const id of archIds) {\n const arch = state.archetypes[id]!\n for (let r = 0; r < arch.size; r++) {\n yield arch.entities[r] as EntityId\n }\n }\n}\n\nexport function forEachEntity(\n world: World,\n query: Query,\n fn: (eid: EntityId, ...cols: any[]) => void,\n): void {\n const state = getWorldState(world)\n const q = query as QueryInternal\n\n if (q.reactiveKind !== 'normal') {\n const buf = state.reactiveBuffers.get(q.id)\n if (!buf) return\n const src = q.reactiveKind === 'enter' ? buf.entered : buf.exited\n if (src.length === 0) return\n const cols = buildColumnViews(state, q)\n for (let i = 0; i < src.length; i++) {\n const e = src[i] as EntityId\n callWithCols(fn, e, cols)\n }\n src.length = 0\n return\n }\n\n ensureQueryRegistered(state, q)\n const archIds = getQueryArchetypes(state, q)\n const cols = buildColumnViews(state, q)\n for (const id of archIds) {\n const arch = state.archetypes[id]!\n const ents = arch.entities\n const n = arch.size\n for (let r = 0; r < n; r++) {\n callWithCols(fn, ents[r] as EntityId, cols)\n }\n }\n}\n\nfunction callWithCols(\n fn: (eid: EntityId, ...cols: any[]) => void,\n eid: EntityId,\n cols: any[],\n): void {\n // Specialise for low arities to avoid spread allocation.\n switch (cols.length) {\n case 0:\n fn(eid)\n break\n case 1:\n fn(eid, cols[0])\n break\n case 2:\n fn(eid, cols[0], cols[1])\n break\n case 3:\n fn(eid, cols[0], cols[1], cols[2])\n break\n case 4:\n fn(eid, cols[0], cols[1], cols[2], cols[3])\n break\n case 5:\n fn(eid, cols[0], cols[1], cols[2], cols[3], cols[4])\n break\n default:\n fn(eid, ...cols)\n }\n}\n\nfunction buildColumnViews(state: WorldState, q: QueryInternal): any[] {\n const out: any[] = []\n for (const comp of q.columnViewCache) {\n const info = getComponentInfo(comp)\n const bit = state.componentBitFor.get(info.id)\n if (bit === undefined) {\n out.push(undefined)\n continue\n }\n const storage = state.componentStorageByBit[bit]\n if (!storage) {\n out.push(undefined)\n continue\n }\n if (storage.kind === 'soa') out.push(storage.soa)\n else if (storage.kind === 'aos') out.push(storage.aos)\n else out.push(true) // tag\n }\n return out\n}\n\n// --- Reactive query updates (called from migration code) ---\n\nexport function recordEntityMaskChange(\n state: WorldState,\n eid: EntityId,\n changedBit: number,\n prevMask: Uint32Array,\n nextMask: Uint32Array,\n): void {\n // Lazy-register any reactive queries (and their sources) so we can correctly\n // determine match transitions even if the user only ever called enterQuery/exitQuery.\n for (const q of moduleQueryCache.values()) {\n if (q.reactiveKind === 'normal') continue\n if (q.sourceQuery && state.queries[q.sourceQuery.id] !== q.sourceQuery) {\n ensureQueryRegistered(state, q.sourceQuery)\n }\n }\n\n const involved = state.bitToQueries.get(changedBit)\n if (!involved) return\n const words = state.options.maskWordCount\n for (const qid of involved) {\n const q = state.queries[qid]\n if (!q) continue\n if (q.reactiveKind !== 'normal') continue\n const bundle = state.queryMasks.get(qid)\n if (!bundle) continue\n const wasMatch = matches(\n prevMask,\n bundle.withMask,\n bundle.anyMask,\n bundle.noneMask,\n bundle.anyHasBits,\n words,\n )\n const isMatch = matches(\n nextMask,\n bundle.withMask,\n bundle.anyMask,\n bundle.noneMask,\n bundle.anyHasBits,\n words,\n )\n if (!wasMatch && isMatch) {\n pushReactive(state, qid, 'enter', eid)\n } else if (wasMatch && !isMatch) {\n pushReactive(state, qid, 'exit', eid)\n }\n }\n}\n\nfunction pushReactive(\n state: WorldState,\n queryId: number,\n kind: 'enter' | 'exit',\n eid: EntityId,\n): void {\n // Walk the module cache (not just state.queries) so reactive variants that\n // haven't been registered with this world yet still receive events.\n for (const r of moduleQueryCache.values()) {\n if (r.sourceQueryId !== queryId) continue\n if (r.reactiveKind !== kind) continue\n // Lazily register the reactive query in this world so subsequent reads can find it\n ensureQueryRegistered(state, r)\n const buf = ensureReactiveBuffer(state, r.id)\n if (kind === 'enter') buf.entered.push(eid as number)\n else buf.exited.push(eid as number)\n }\n}\n\nfunction ensureReactiveBuffer(state: WorldState, qid: number): ReactiveBuffer {\n let buf = state.reactiveBuffers.get(qid)\n if (!buf) {\n buf = { entered: [], exited: [] }\n state.reactiveBuffers.set(qid, buf)\n }\n return buf\n}\n\n// --- Helpers ---\n\nfunction getComponentInfoById(componentId: number): ComponentInfo {\n // We need access to the component registry's lookup by id. Re-import dynamically to avoid cycles.\n const info = lazyGetComponentInfo(componentId)\n if (!info) throw new Error(`aiecsjs: component id ${componentId} not registered`)\n return info\n}\n\nlet _getComponentInfoFn: ((id: number) => ComponentInfo | undefined) | null = null\nexport function registerComponentLookup(fn: (id: number) => ComponentInfo | undefined): void {\n _getComponentInfoFn = fn\n}\nfunction lazyGetComponentInfo(id: number): ComponentInfo | undefined {\n return _getComponentInfoFn ? _getComponentInfoFn(id) : undefined\n}\n\nexport function _resetQueryRegistry_FOR_TESTS_ONLY(): void {\n moduleQueryCache.clear()\n nextQueryId = 1\n}\n"]}
package/dist/commands.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkSJDWI3OZ_cjs=require('./chunk-SJDWI3OZ.cjs');function l(n){let e={worldId:chunkSJDWI3OZ_cjs.i(n).id,ops:[],nextPlaceholder:-1,flushing:false};return h(e)}function C(n){let o=y(n);if(!o.flushing){o.flushing=true;try{let e=B(o.worldId),r=new Map;for(let t of o.ops)t.kind==="create"&&r.set(t.placeholder,chunkSJDWI3OZ_cjs.u(e));let d=t=>{let a=t;if(a<0){let f=r.get(a);if(f===void 0)throw new Error(`aiecsjs: unresolved placeholder ${a}`);return f}return t};for(let t of o.ops)t.kind==="add"?chunkSJDWI3OZ_cjs.I(e,d(t.eid),t.component,t.initial):t.kind==="remove"&&chunkSJDWI3OZ_cjs.J(e,d(t.eid),t.component);for(let t of o.ops)t.kind==="destroy"&&chunkSJDWI3OZ_cjs.v(e,d(t.eid));o.ops.length=0,o.nextPlaceholder=-1;}finally{o.flushing=false;}}}function W(n,o){let e=l(n),r=o(e);return C(e),r}var p=new WeakMap;function h(n){let o={add(e,r,d){n.ops.push({kind:"add",eid:e,component:r,initial:d});},remove(e,r){n.ops.push({kind:"remove",eid:e,component:r});},destroy(e){n.ops.push({kind:"destroy",eid:e});},create(){let e=n.nextPlaceholder--;return n.ops.push({kind:"create",placeholder:e}),e}};return p.set(o,n),o}function y(n){let o=p.get(n);if(!o)throw new Error("aiecsjs: unknown CommandBuffer");return o}function B(n){let o=k(n);return {id:o.id,capacity:o.capacity,version:o.version}}function k(n){return chunkSJDWI3OZ_cjs.i({id:n,capacity:0,version:"0.0.0"})}exports.createCommandBuffer=l;exports.flush=C;exports.withCommandBuffer=W;//# sourceMappingURL=commands.cjs.map
1
+ 'use strict';var chunk7NNM4PGP_cjs=require('./chunk-7NNM4PGP.cjs');function l(n){let e={worldId:chunk7NNM4PGP_cjs.i(n).id,ops:[],nextPlaceholder:-1,flushing:false};return h(e)}function C(n){let o=y(n);if(!o.flushing){o.flushing=true;try{let e=B(o.worldId),r=new Map;for(let t of o.ops)t.kind==="create"&&r.set(t.placeholder,chunk7NNM4PGP_cjs.u(e));let d=t=>{let a=t;if(a<0){let f=r.get(a);if(f===void 0)throw new Error(`aiecsjs: unresolved placeholder ${a}`);return f}return t};for(let t of o.ops)t.kind==="add"?chunk7NNM4PGP_cjs.I(e,d(t.eid),t.component,t.initial):t.kind==="remove"&&chunk7NNM4PGP_cjs.J(e,d(t.eid),t.component);for(let t of o.ops)t.kind==="destroy"&&chunk7NNM4PGP_cjs.v(e,d(t.eid));o.ops.length=0,o.nextPlaceholder=-1;}finally{o.flushing=false;}}}function W(n,o){let e=l(n),r=o(e);return C(e),r}var p=new WeakMap;function h(n){let o={add(e,r,d){n.ops.push({kind:"add",eid:e,component:r,initial:d});},remove(e,r){n.ops.push({kind:"remove",eid:e,component:r});},destroy(e){n.ops.push({kind:"destroy",eid:e});},create(){let e=n.nextPlaceholder--;return n.ops.push({kind:"create",placeholder:e}),e}};return p.set(o,n),o}function y(n){let o=p.get(n);if(!o)throw new Error("aiecsjs: unknown CommandBuffer");return o}function B(n){let o=k(n);return {id:o.id,capacity:o.capacity,version:o.version}}function k(n){return chunk7NNM4PGP_cjs.i({id:n,capacity:0,version:"0.0.0"})}exports.createCommandBuffer=l;exports.flush=C;exports.withCommandBuffer=W;//# sourceMappingURL=commands.cjs.map
2
2
  //# sourceMappingURL=commands.cjs.map
package/dist/commands.js CHANGED
@@ -1,2 +1,2 @@
1
- import {i,u,I,J,v}from'./chunk-F7KNZ27O.js';function l(n){let e={worldId:i(n).id,ops:[],nextPlaceholder:-1,flushing:false};return h(e)}function C(n){let o=y(n);if(!o.flushing){o.flushing=true;try{let e=B(o.worldId),r=new Map;for(let t of o.ops)t.kind==="create"&&r.set(t.placeholder,u(e));let d=t=>{let a=t;if(a<0){let f=r.get(a);if(f===void 0)throw new Error(`aiecsjs: unresolved placeholder ${a}`);return f}return t};for(let t of o.ops)t.kind==="add"?I(e,d(t.eid),t.component,t.initial):t.kind==="remove"&&J(e,d(t.eid),t.component);for(let t of o.ops)t.kind==="destroy"&&v(e,d(t.eid));o.ops.length=0,o.nextPlaceholder=-1;}finally{o.flushing=false;}}}function W(n,o){let e=l(n),r=o(e);return C(e),r}var p=new WeakMap;function h(n){let o={add(e,r,d){n.ops.push({kind:"add",eid:e,component:r,initial:d});},remove(e,r){n.ops.push({kind:"remove",eid:e,component:r});},destroy(e){n.ops.push({kind:"destroy",eid:e});},create(){let e=n.nextPlaceholder--;return n.ops.push({kind:"create",placeholder:e}),e}};return p.set(o,n),o}function y(n){let o=p.get(n);if(!o)throw new Error("aiecsjs: unknown CommandBuffer");return o}function B(n){let o=k(n);return {id:o.id,capacity:o.capacity,version:o.version}}function k(n){return i({id:n,capacity:0,version:"0.0.0"})}export{l as createCommandBuffer,C as flush,W as withCommandBuffer};//# sourceMappingURL=commands.js.map
1
+ import {i,u,I,J,v}from'./chunk-YAHZHZNR.js';function l(n){let e={worldId:i(n).id,ops:[],nextPlaceholder:-1,flushing:false};return h(e)}function C(n){let o=y(n);if(!o.flushing){o.flushing=true;try{let e=B(o.worldId),r=new Map;for(let t of o.ops)t.kind==="create"&&r.set(t.placeholder,u(e));let d=t=>{let a=t;if(a<0){let f=r.get(a);if(f===void 0)throw new Error(`aiecsjs: unresolved placeholder ${a}`);return f}return t};for(let t of o.ops)t.kind==="add"?I(e,d(t.eid),t.component,t.initial):t.kind==="remove"&&J(e,d(t.eid),t.component);for(let t of o.ops)t.kind==="destroy"&&v(e,d(t.eid));o.ops.length=0,o.nextPlaceholder=-1;}finally{o.flushing=false;}}}function W(n,o){let e=l(n),r=o(e);return C(e),r}var p=new WeakMap;function h(n){let o={add(e,r,d){n.ops.push({kind:"add",eid:e,component:r,initial:d});},remove(e,r){n.ops.push({kind:"remove",eid:e,component:r});},destroy(e){n.ops.push({kind:"destroy",eid:e});},create(){let e=n.nextPlaceholder--;return n.ops.push({kind:"create",placeholder:e}),e}};return p.set(o,n),o}function y(n){let o=p.get(n);if(!o)throw new Error("aiecsjs: unknown CommandBuffer");return o}function B(n){let o=k(n);return {id:o.id,capacity:o.capacity,version:o.version}}function k(n){return i({id:n,capacity:0,version:"0.0.0"})}export{l as createCommandBuffer,C as flush,W as withCommandBuffer};//# sourceMappingURL=commands.js.map
2
2
  //# sourceMappingURL=commands.js.map
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkRHH5JA74_cjs=require('./chunk-RHH5JA74.cjs'),chunkSJDWI3OZ_cjs=require('./chunk-SJDWI3OZ.cjs');var K={i8:"i8",u8:"u8",i16:"i16",u16:"u16",i32:"i32",u32:"u32",f32:"f32",f64:"f64",eid:"eid",bool:"bool"};function $(...n){return n.length===0?e=>e:n.length===1?n[0]:(e,r)=>{let t=e;for(let o of n)t=o(t,r);return t}}var i=class extends Error{eid;constructor(e){super(`aiecsjs: entity ${e} is not alive`),this.name="EntityNotAliveError",this.eid=e;}};function J(n,e){let r=chunkSJDWI3OZ_cjs.i(n);if(!chunkSJDWI3OZ_cjs.x(r,e))throw new i(e);return Object.freeze({id:e,worldId:r.id})}function b(n,e){let r=chunkSJDWI3OZ_cjs.i(n);if(e.worldId!==r.id)return null;let t=e.id,o=chunkSJDWI3OZ_cjs.s(t,r.options);if(o<=0||o>=r.capacity)return null;let x=r.entityArchetype[o]??0,d=r.archetypes[x];if(!d||!d.entityRow.has(e.id))return null;let C=r.generations[o]??0,A=chunkSJDWI3OZ_cjs.t(t,r.options);return C!==A?null:e.id}function X(n,e){return b(n,e)!==null}chunkRHH5JA74_cjs.i(n=>chunkSJDWI3OZ_cjs.P(n));chunkSJDWI3OZ_cjs.N((n,e,r,t,o)=>{chunkRHH5JA74_cjs.h(n,e,r,t,o);});var ae=typeof SharedArrayBuffer<"u";Object.defineProperty(exports,"defineQuery",{enumerable:true,get:function(){return chunkRHH5JA74_cjs.a}});Object.defineProperty(exports,"enterQuery",{enumerable:true,get:function(){return chunkRHH5JA74_cjs.b}});Object.defineProperty(exports,"exitQuery",{enumerable:true,get:function(){return chunkRHH5JA74_cjs.c}});Object.defineProperty(exports,"forEachEntity",{enumerable:true,get:function(){return chunkRHH5JA74_cjs.g}});Object.defineProperty(exports,"iterQuery",{enumerable:true,get:function(){return chunkRHH5JA74_cjs.f}});Object.defineProperty(exports,"queryArchetypes",{enumerable:true,get:function(){return chunkRHH5JA74_cjs.d}});Object.defineProperty(exports,"runQuery",{enumerable:true,get:function(){return chunkRHH5JA74_cjs.e}});Object.defineProperty(exports,"VERSION",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.a}});Object.defineProperty(exports,"addComponent",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.I}});Object.defineProperty(exports,"createEntity",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.u}});Object.defineProperty(exports,"createWorld",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.k}});Object.defineProperty(exports,"defineComponent",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.E}});Object.defineProperty(exports,"defineObjectComponent",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.G}});Object.defineProperty(exports,"defineTag",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.F}});Object.defineProperty(exports,"destroyEntity",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.v}});Object.defineProperty(exports,"destroyWorld",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.l}});Object.defineProperty(exports,"disposeWorld",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.l}});Object.defineProperty(exports,"entityExists",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.w}});Object.defineProperty(exports,"getComponent",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.L}});Object.defineProperty(exports,"getEntityGeneration",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.z}});Object.defineProperty(exports,"getEntityIndex",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.y}});Object.defineProperty(exports,"getWorldCapacity",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.o}});Object.defineProperty(exports,"getWorldSize",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.n}});Object.defineProperty(exports,"hasComponent",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.K}});Object.defineProperty(exports,"isEntity",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.B}});Object.defineProperty(exports,"isWorld",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.q}});Object.defineProperty(exports,"packEntity",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.A}});Object.defineProperty(exports,"removeComponent",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.J}});Object.defineProperty(exports,"resetWorld",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.m}});Object.defineProperty(exports,"setComponent",{enumerable:true,get:function(){return chunkSJDWI3OZ_cjs.M}});exports.EntityNotAliveError=i;exports.IS_SAB_SUPPORTED=ae;exports.Types=K;exports.aliveRef=X;exports.deref=b;exports.pipe=$;exports.refOf=J;//# sourceMappingURL=index.cjs.map
1
+ 'use strict';var chunk2CF2MNMH_cjs=require('./chunk-2CF2MNMH.cjs'),chunk7NNM4PGP_cjs=require('./chunk-7NNM4PGP.cjs');var K={i8:"i8",u8:"u8",i16:"i16",u16:"u16",i32:"i32",u32:"u32",f32:"f32",f64:"f64",eid:"eid",bool:"bool"};function $(...n){return n.length===0?e=>e:n.length===1?n[0]:(e,r)=>{let t=e;for(let o of n)t=o(t,r);return t}}var i=class extends Error{eid;constructor(e){super(`aiecsjs: entity ${e} is not alive`),this.name="EntityNotAliveError",this.eid=e;}};function J(n,e){let r=chunk7NNM4PGP_cjs.i(n);if(!chunk7NNM4PGP_cjs.x(r,e))throw new i(e);return Object.freeze({id:e,worldId:r.id})}function b(n,e){let r=chunk7NNM4PGP_cjs.i(n);if(e.worldId!==r.id)return null;let t=e.id,o=chunk7NNM4PGP_cjs.s(t,r.options);if(o<=0||o>=r.capacity)return null;let x=r.entityArchetype[o]??0,d=r.archetypes[x];if(!d||!d.entityRow.has(e.id))return null;let C=r.generations[o]??0,A=chunk7NNM4PGP_cjs.t(t,r.options);return C!==A?null:e.id}function X(n,e){return b(n,e)!==null}chunk2CF2MNMH_cjs.i(n=>chunk7NNM4PGP_cjs.P(n));chunk7NNM4PGP_cjs.N((n,e,r,t,o)=>{chunk2CF2MNMH_cjs.h(n,e,r,t,o);});var ae=typeof SharedArrayBuffer<"u";Object.defineProperty(exports,"defineQuery",{enumerable:true,get:function(){return chunk2CF2MNMH_cjs.a}});Object.defineProperty(exports,"enterQuery",{enumerable:true,get:function(){return chunk2CF2MNMH_cjs.b}});Object.defineProperty(exports,"exitQuery",{enumerable:true,get:function(){return chunk2CF2MNMH_cjs.c}});Object.defineProperty(exports,"forEachEntity",{enumerable:true,get:function(){return chunk2CF2MNMH_cjs.g}});Object.defineProperty(exports,"iterQuery",{enumerable:true,get:function(){return chunk2CF2MNMH_cjs.f}});Object.defineProperty(exports,"queryArchetypes",{enumerable:true,get:function(){return chunk2CF2MNMH_cjs.d}});Object.defineProperty(exports,"runQuery",{enumerable:true,get:function(){return chunk2CF2MNMH_cjs.e}});Object.defineProperty(exports,"VERSION",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.a}});Object.defineProperty(exports,"addComponent",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.I}});Object.defineProperty(exports,"createEntity",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.u}});Object.defineProperty(exports,"createWorld",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.k}});Object.defineProperty(exports,"defineComponent",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.E}});Object.defineProperty(exports,"defineObjectComponent",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.G}});Object.defineProperty(exports,"defineTag",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.F}});Object.defineProperty(exports,"destroyEntity",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.v}});Object.defineProperty(exports,"destroyWorld",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.l}});Object.defineProperty(exports,"disposeWorld",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.l}});Object.defineProperty(exports,"entityExists",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.w}});Object.defineProperty(exports,"getComponent",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.L}});Object.defineProperty(exports,"getEntityGeneration",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.z}});Object.defineProperty(exports,"getEntityIndex",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.y}});Object.defineProperty(exports,"getWorldCapacity",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.o}});Object.defineProperty(exports,"getWorldSize",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.n}});Object.defineProperty(exports,"hasComponent",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.K}});Object.defineProperty(exports,"isEntity",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.B}});Object.defineProperty(exports,"isWorld",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.q}});Object.defineProperty(exports,"packEntity",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.A}});Object.defineProperty(exports,"removeComponent",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.J}});Object.defineProperty(exports,"resetWorld",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.m}});Object.defineProperty(exports,"setComponent",{enumerable:true,get:function(){return chunk7NNM4PGP_cjs.M}});exports.EntityNotAliveError=i;exports.IS_SAB_SUPPORTED=ae;exports.Types=K;exports.aliveRef=X;exports.deref=b;exports.pipe=$;exports.refOf=J;//# sourceMappingURL=index.cjs.map
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/index.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { o as WorldOptions, W as World, E as EntityId, c as ComponentLike, b as ComponentInit, k as SoASchema, h as SoAComponent, A as AoSComponent, T as TagComponent, f as QueryDescriptor, Q as Query, a as Archetype, l as System } from './types-BGEeHad-.cjs';
2
2
  export { d as ComponentView, g as SoAColumns, i as SoAFieldDecl, j as SoAFieldType, n as Types } from './types-BGEeHad-.cjs';
3
3
 
4
- declare const VERSION = "0.4.0";
4
+ declare const VERSION = "0.4.1";
5
5
 
6
6
  declare function createWorld(options?: WorldOptions): World;
7
7
  declare function destroyWorld(world: World): void;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { o as WorldOptions, W as World, E as EntityId, c as ComponentLike, b as ComponentInit, k as SoASchema, h as SoAComponent, A as AoSComponent, T as TagComponent, f as QueryDescriptor, Q as Query, a as Archetype, l as System } from './types-BGEeHad-.js';
2
2
  export { d as ComponentView, g as SoAColumns, i as SoAFieldDecl, j as SoAFieldType, n as Types } from './types-BGEeHad-.js';
3
3
 
4
- declare const VERSION = "0.4.0";
4
+ declare const VERSION = "0.4.1";
5
5
 
6
6
  declare function createWorld(options?: WorldOptions): World;
7
7
  declare function destroyWorld(world: World): void;
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import {i as i$1,h}from'./chunk-SQWZUC2Q.js';export{a as defineQuery,b as enterQuery,c as exitQuery,g as forEachEntity,f as iterQuery,d as queryArchetypes,e as runQuery}from'./chunk-SQWZUC2Q.js';import {P,N,i as i$2,x,s,t}from'./chunk-F7KNZ27O.js';export{a as VERSION,I as addComponent,u as createEntity,k as createWorld,E as defineComponent,G as defineObjectComponent,F as defineTag,v as destroyEntity,l as destroyWorld,l as disposeWorld,w as entityExists,L as getComponent,z as getEntityGeneration,y as getEntityIndex,o as getWorldCapacity,n as getWorldSize,K as hasComponent,B as isEntity,q as isWorld,A as packEntity,J as removeComponent,m as resetWorld,M as setComponent}from'./chunk-F7KNZ27O.js';var K={i8:"i8",u8:"u8",i16:"i16",u16:"u16",i32:"i32",u32:"u32",f32:"f32",f64:"f64",eid:"eid",bool:"bool"};function $(...n){return n.length===0?e=>e:n.length===1?n[0]:(e,r)=>{let t=e;for(let o of n)t=o(t,r);return t}}var i=class extends Error{eid;constructor(e){super(`aiecsjs: entity ${e} is not alive`),this.name="EntityNotAliveError",this.eid=e;}};function J(n,e){let r=i$2(n);if(!x(r,e))throw new i(e);return Object.freeze({id:e,worldId:r.id})}function b(n,e){let r=i$2(n);if(e.worldId!==r.id)return null;let t$1=e.id,o=s(t$1,r.options);if(o<=0||o>=r.capacity)return null;let x=r.entityArchetype[o]??0,d=r.archetypes[x];if(!d||!d.entityRow.has(e.id))return null;let C=r.generations[o]??0,A=t(t$1,r.options);return C!==A?null:e.id}function X(n,e){return b(n,e)!==null}i$1(n=>P(n));N((n,e,r,t,o)=>{h(n,e,r,t,o);});var ae=typeof SharedArrayBuffer<"u";export{i as EntityNotAliveError,ae as IS_SAB_SUPPORTED,K as Types,X as aliveRef,b as deref,$ as pipe,J as refOf};//# sourceMappingURL=index.js.map
1
+ import {i as i$1,h}from'./chunk-ZNLOJVCV.js';export{a as defineQuery,b as enterQuery,c as exitQuery,g as forEachEntity,f as iterQuery,d as queryArchetypes,e as runQuery}from'./chunk-ZNLOJVCV.js';import {P,N,i as i$2,x,s,t}from'./chunk-YAHZHZNR.js';export{a as VERSION,I as addComponent,u as createEntity,k as createWorld,E as defineComponent,G as defineObjectComponent,F as defineTag,v as destroyEntity,l as destroyWorld,l as disposeWorld,w as entityExists,L as getComponent,z as getEntityGeneration,y as getEntityIndex,o as getWorldCapacity,n as getWorldSize,K as hasComponent,B as isEntity,q as isWorld,A as packEntity,J as removeComponent,m as resetWorld,M as setComponent}from'./chunk-YAHZHZNR.js';var K={i8:"i8",u8:"u8",i16:"i16",u16:"u16",i32:"i32",u32:"u32",f32:"f32",f64:"f64",eid:"eid",bool:"bool"};function $(...n){return n.length===0?e=>e:n.length===1?n[0]:(e,r)=>{let t=e;for(let o of n)t=o(t,r);return t}}var i=class extends Error{eid;constructor(e){super(`aiecsjs: entity ${e} is not alive`),this.name="EntityNotAliveError",this.eid=e;}};function J(n,e){let r=i$2(n);if(!x(r,e))throw new i(e);return Object.freeze({id:e,worldId:r.id})}function b(n,e){let r=i$2(n);if(e.worldId!==r.id)return null;let t$1=e.id,o=s(t$1,r.options);if(o<=0||o>=r.capacity)return null;let x=r.entityArchetype[o]??0,d=r.archetypes[x];if(!d||!d.entityRow.has(e.id))return null;let C=r.generations[o]??0,A=t(t$1,r.options);return C!==A?null:e.id}function X(n,e){return b(n,e)!==null}i$1(n=>P(n));N((n,e,r,t,o)=>{h(n,e,r,t,o);});var ae=typeof SharedArrayBuffer<"u";export{i as EntityNotAliveError,ae as IS_SAB_SUPPORTED,K as Types,X as aliveRef,b as deref,$ as pipe,J as refOf};//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkRHH5JA74_cjs=require('./chunk-RHH5JA74.cjs'),chunkSJDWI3OZ_cjs=require('./chunk-SJDWI3OZ.cjs');function f(n,e){if(!e)return n;if(e.aborted)return n(),()=>{};let o=()=>{n();};e.addEventListener("abort",o,{once:true});let t=false;return ()=>{t||(t=true,e.removeEventListener("abort",o),n());}}function w(n,e,o,t){return f(b(n,e,"add",o),t?.signal)}function x(n,e,o,t){return f(b(n,e,"remove",o),t?.signal)}function C(n,e,o,t){return f(b(n,e,"set",o),t?.signal)}function L(n,e,o,t,r){let s=chunkSJDWI3OZ_cjs.i(n);chunkRHH5JA74_cjs.e(n,e);let i={event:o,componentBit:-1,queryId:e.id,handler:t};return s.observers.push(i),f(()=>{let d=s.observers.indexOf(i);d>=0&&s.observers.splice(d,1);},r?.signal)}function b(n,e,o,t){let r=chunkSJDWI3OZ_cjs.i(n),s=chunkSJDWI3OZ_cjs.H(e),i=r.componentBitFor.get(s.id);i===void 0&&(i=chunkSJDWI3OZ_cjs.p(r,s));let u={event:o,componentBit:i,queryId:-1,handler:t};return r.observers.push(u),()=>{let d=r.observers.indexOf(u);d>=0&&r.observers.splice(d,1);}}function E(n,e,o){let t=Array.from(n.observers);for(let r of t)r.event==="add"&&r.componentBit===o&&n.observers.includes(r)&&r.handler(e);O(n,e,"add");}function M(n,e,o){let t=Array.from(n.observers);for(let r of t)r.event==="remove"&&r.componentBit===o&&n.observers.includes(r)&&r.handler(e);O(n,e,"remove");}function g(n,e,o,t){let r=Array.from(n.observers);for(let s of r)s.event==="set"&&n.observers.includes(s)&&(s.componentBit===o||s.queryId!==-1&&n.queries[s.queryId]?.all.includes(n.componentInfoByBit[o]?.id??-1))&&s.handler(e,t);}function O(n,e,o,t,r){let s=n.options.maskWordCount,i=(e&n.options.indexMask)*s,u=Array.from(n.observers);for(let d of u){if(d.event!==o||d.queryId===-1||!n.observers.includes(d))continue;let c=n.queryMasks.get(d.queryId);if(!c)continue;let l=chunkSJDWI3OZ_cjs.h(n.entityMask,i,s,c.withMask,c.anyMask,c.noneMask,c.anyHasBits);o==="add"&&l&&d.handler(e),o==="remove"&&!l&&d.handler(e);}}chunkSJDWI3OZ_cjs.O({fireAdd:E,fireRemove:M,fireSet:g});chunkSJDWI3OZ_cjs.C({dispatchDestroyObservers(n,e){let o=n.options.maskWordCount,t=(e&n.options.indexMask)*o,r=new Uint32Array(o);for(let i=0;i<o;i++)r[i]=n.entityMask[t+i]??0;chunkSJDWI3OZ_cjs.g(r,0,o,i=>{let u=Array.from(n.observers);for(let d of u)d.event==="remove"&&d.componentBit===i&&n.observers.includes(d)&&d.handler(e);});let s=Array.from(n.observers);for(let i of s){if(i.event!=="remove"||i.queryId===-1||!n.observers.includes(i))continue;let u=n.queryMasks.get(i.queryId);if(!u)continue;chunkSJDWI3OZ_cjs.h(r,0,o,u.withMask,u.anyMask,u.noneMask,u.anyHasBits)&&i.handler(e);}}});exports.observe=L;exports.onAdd=w;exports.onRemove=x;exports.onSet=C;//# sourceMappingURL=observers.cjs.map
1
+ 'use strict';var chunk2CF2MNMH_cjs=require('./chunk-2CF2MNMH.cjs'),chunk7NNM4PGP_cjs=require('./chunk-7NNM4PGP.cjs');function f(n,e){if(!e)return n;if(e.aborted)return n(),()=>{};let o=()=>{n();};e.addEventListener("abort",o,{once:true});let t=false;return ()=>{t||(t=true,e.removeEventListener("abort",o),n());}}function w(n,e,o,t){return f(b(n,e,"add",o),t?.signal)}function x(n,e,o,t){return f(b(n,e,"remove",o),t?.signal)}function C(n,e,o,t){return f(b(n,e,"set",o),t?.signal)}function L(n,e,o,t,r){let s=chunk7NNM4PGP_cjs.i(n);chunk2CF2MNMH_cjs.e(n,e);let i={event:o,componentBit:-1,queryId:e.id,handler:t};return s.observers.push(i),f(()=>{let d=s.observers.indexOf(i);d>=0&&s.observers.splice(d,1);},r?.signal)}function b(n,e,o,t){let r=chunk7NNM4PGP_cjs.i(n),s=chunk7NNM4PGP_cjs.H(e),i=r.componentBitFor.get(s.id);i===void 0&&(i=chunk7NNM4PGP_cjs.p(r,s));let u={event:o,componentBit:i,queryId:-1,handler:t};return r.observers.push(u),()=>{let d=r.observers.indexOf(u);d>=0&&r.observers.splice(d,1);}}function E(n,e,o){let t=Array.from(n.observers);for(let r of t)r.event==="add"&&r.componentBit===o&&n.observers.includes(r)&&r.handler(e);O(n,e,"add");}function M(n,e,o){let t=Array.from(n.observers);for(let r of t)r.event==="remove"&&r.componentBit===o&&n.observers.includes(r)&&r.handler(e);O(n,e,"remove");}function g(n,e,o,t){let r=Array.from(n.observers);for(let s of r)s.event==="set"&&n.observers.includes(s)&&(s.componentBit===o||s.queryId!==-1&&n.queries[s.queryId]?.all.includes(n.componentInfoByBit[o]?.id??-1))&&s.handler(e,t);}function O(n,e,o,t,r){let s=n.options.maskWordCount,i=(e&n.options.indexMask)*s,u=Array.from(n.observers);for(let d of u){if(d.event!==o||d.queryId===-1||!n.observers.includes(d))continue;let c=n.queryMasks.get(d.queryId);if(!c)continue;let l=chunk7NNM4PGP_cjs.h(n.entityMask,i,s,c.withMask,c.anyMask,c.noneMask,c.anyHasBits);o==="add"&&l&&d.handler(e),o==="remove"&&!l&&d.handler(e);}}chunk7NNM4PGP_cjs.O({fireAdd:E,fireRemove:M,fireSet:g});chunk7NNM4PGP_cjs.C({dispatchDestroyObservers(n,e){let o=n.options.maskWordCount,t=(e&n.options.indexMask)*o,r=new Uint32Array(o);for(let i=0;i<o;i++)r[i]=n.entityMask[t+i]??0;chunk7NNM4PGP_cjs.g(r,0,o,i=>{let u=Array.from(n.observers);for(let d of u)d.event==="remove"&&d.componentBit===i&&n.observers.includes(d)&&d.handler(e);});let s=Array.from(n.observers);for(let i of s){if(i.event!=="remove"||i.queryId===-1||!n.observers.includes(i))continue;let u=n.queryMasks.get(i.queryId);if(!u)continue;chunk7NNM4PGP_cjs.h(r,0,o,u.withMask,u.anyMask,u.noneMask,u.anyHasBits)&&i.handler(e);}}});exports.observe=L;exports.onAdd=w;exports.onRemove=x;exports.onSet=C;//# sourceMappingURL=observers.cjs.map
2
2
  //# sourceMappingURL=observers.cjs.map
package/dist/observers.js CHANGED
@@ -1,2 +1,2 @@
1
- import {e}from'./chunk-SQWZUC2Q.js';import {O as O$1,C as C$1,g as g$1,h,i,H,p}from'./chunk-F7KNZ27O.js';function f(n,e){if(!e)return n;if(e.aborted)return n(),()=>{};let o=()=>{n();};e.addEventListener("abort",o,{once:true});let t=false;return ()=>{t||(t=true,e.removeEventListener("abort",o),n());}}function w(n,e,o,t){return f(b(n,e,"add",o),t?.signal)}function x(n,e,o,t){return f(b(n,e,"remove",o),t?.signal)}function C(n,e,o,t){return f(b(n,e,"set",o),t?.signal)}function L(n,e$1,o,t,r){let s=i(n);e(n,e$1);let i$1={event:o,componentBit:-1,queryId:e$1.id,handler:t};return s.observers.push(i$1),f(()=>{let d=s.observers.indexOf(i$1);d>=0&&s.observers.splice(d,1);},r?.signal)}function b(n,e,o,t){let r=i(n),s=H(e),i$1=r.componentBitFor.get(s.id);i$1===void 0&&(i$1=p(r,s));let u={event:o,componentBit:i$1,queryId:-1,handler:t};return r.observers.push(u),()=>{let d=r.observers.indexOf(u);d>=0&&r.observers.splice(d,1);}}function E(n,e,o){let t=Array.from(n.observers);for(let r of t)r.event==="add"&&r.componentBit===o&&n.observers.includes(r)&&r.handler(e);O(n,e,"add");}function M(n,e,o){let t=Array.from(n.observers);for(let r of t)r.event==="remove"&&r.componentBit===o&&n.observers.includes(r)&&r.handler(e);O(n,e,"remove");}function g(n,e,o,t){let r=Array.from(n.observers);for(let s of r)s.event==="set"&&n.observers.includes(s)&&(s.componentBit===o||s.queryId!==-1&&n.queries[s.queryId]?.all.includes(n.componentInfoByBit[o]?.id??-1))&&s.handler(e,t);}function O(n,e,o,t,r){let s=n.options.maskWordCount,i=(e&n.options.indexMask)*s,u=Array.from(n.observers);for(let d of u){if(d.event!==o||d.queryId===-1||!n.observers.includes(d))continue;let c=n.queryMasks.get(d.queryId);if(!c)continue;let l=h(n.entityMask,i,s,c.withMask,c.anyMask,c.noneMask,c.anyHasBits);o==="add"&&l&&d.handler(e),o==="remove"&&!l&&d.handler(e);}}O$1({fireAdd:E,fireRemove:M,fireSet:g});C$1({dispatchDestroyObservers(n,e){let o=n.options.maskWordCount,t=(e&n.options.indexMask)*o,r=new Uint32Array(o);for(let i=0;i<o;i++)r[i]=n.entityMask[t+i]??0;g$1(r,0,o,i=>{let u=Array.from(n.observers);for(let d of u)d.event==="remove"&&d.componentBit===i&&n.observers.includes(d)&&d.handler(e);});let s=Array.from(n.observers);for(let i of s){if(i.event!=="remove"||i.queryId===-1||!n.observers.includes(i))continue;let u=n.queryMasks.get(i.queryId);if(!u)continue;h(r,0,o,u.withMask,u.anyMask,u.noneMask,u.anyHasBits)&&i.handler(e);}}});export{L as observe,w as onAdd,x as onRemove,C as onSet};//# sourceMappingURL=observers.js.map
1
+ import {e}from'./chunk-ZNLOJVCV.js';import {O as O$1,C as C$1,g as g$1,h,i,H,p}from'./chunk-YAHZHZNR.js';function f(n,e){if(!e)return n;if(e.aborted)return n(),()=>{};let o=()=>{n();};e.addEventListener("abort",o,{once:true});let t=false;return ()=>{t||(t=true,e.removeEventListener("abort",o),n());}}function w(n,e,o,t){return f(b(n,e,"add",o),t?.signal)}function x(n,e,o,t){return f(b(n,e,"remove",o),t?.signal)}function C(n,e,o,t){return f(b(n,e,"set",o),t?.signal)}function L(n,e$1,o,t,r){let s=i(n);e(n,e$1);let i$1={event:o,componentBit:-1,queryId:e$1.id,handler:t};return s.observers.push(i$1),f(()=>{let d=s.observers.indexOf(i$1);d>=0&&s.observers.splice(d,1);},r?.signal)}function b(n,e,o,t){let r=i(n),s=H(e),i$1=r.componentBitFor.get(s.id);i$1===void 0&&(i$1=p(r,s));let u={event:o,componentBit:i$1,queryId:-1,handler:t};return r.observers.push(u),()=>{let d=r.observers.indexOf(u);d>=0&&r.observers.splice(d,1);}}function E(n,e,o){let t=Array.from(n.observers);for(let r of t)r.event==="add"&&r.componentBit===o&&n.observers.includes(r)&&r.handler(e);O(n,e,"add");}function M(n,e,o){let t=Array.from(n.observers);for(let r of t)r.event==="remove"&&r.componentBit===o&&n.observers.includes(r)&&r.handler(e);O(n,e,"remove");}function g(n,e,o,t){let r=Array.from(n.observers);for(let s of r)s.event==="set"&&n.observers.includes(s)&&(s.componentBit===o||s.queryId!==-1&&n.queries[s.queryId]?.all.includes(n.componentInfoByBit[o]?.id??-1))&&s.handler(e,t);}function O(n,e,o,t,r){let s=n.options.maskWordCount,i=(e&n.options.indexMask)*s,u=Array.from(n.observers);for(let d of u){if(d.event!==o||d.queryId===-1||!n.observers.includes(d))continue;let c=n.queryMasks.get(d.queryId);if(!c)continue;let l=h(n.entityMask,i,s,c.withMask,c.anyMask,c.noneMask,c.anyHasBits);o==="add"&&l&&d.handler(e),o==="remove"&&!l&&d.handler(e);}}O$1({fireAdd:E,fireRemove:M,fireSet:g});C$1({dispatchDestroyObservers(n,e){let o=n.options.maskWordCount,t=(e&n.options.indexMask)*o,r=new Uint32Array(o);for(let i=0;i<o;i++)r[i]=n.entityMask[t+i]??0;g$1(r,0,o,i=>{let u=Array.from(n.observers);for(let d of u)d.event==="remove"&&d.componentBit===i&&n.observers.includes(d)&&d.handler(e);});let s=Array.from(n.observers);for(let i of s){if(i.event!=="remove"||i.queryId===-1||!n.observers.includes(i))continue;let u=n.queryMasks.get(i.queryId);if(!u)continue;h(r,0,o,u.withMask,u.anyMask,u.noneMask,u.anyHasBits)&&i.handler(e);}}});export{L as observe,w as onAdd,x as onRemove,C as onSet};//# sourceMappingURL=observers.js.map
2
2
  //# sourceMappingURL=observers.js.map
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkSJDWI3OZ_cjs=require('./chunk-SJDWI3OZ.cjs');var x=1;function p(r){return {__kind:"relation",__id:x++,__exclusive:r?.exclusive??false,__hasData:false}}var _=p({exclusive:true});function v(r,l){let s=r.relationStorage.get(l.__id);return s||(s={rel:l,exclusive:l.__exclusive?new Int32Array(r.capacity).fill(-1):null,outgoing:new Map,data:new Map},r.relationStorage.set(l.__id,s),s)}function R(r,l,s,i,n){let t=chunkSJDWI3OZ_cjs.i(r);if(t.readOnly)throw new Error("aiecsjs: cannot mutate a read-only world");let e=v(t,s),o=l&t.options.indexMask,d=i&t.options.indexMask;if(e.exclusive){if(o>=e.exclusive.length){let c=new Int32Array(Math.max(o+1,e.exclusive.length*2)).fill(-1);c.set(e.exclusive),e.exclusive=c;}let a=e.exclusive[o]??-1;if(a>=0&&a!==d){let c=e.data.get(o);c?.delete(a),c&&c.size===0&&e.data.delete(o);}e.exclusive[o]=d;}else {let a=e.outgoing.get(o);a||(a=[],e.outgoing.set(o,a)),a.includes(d)||a.push(d);}if(n!==void 0){let a=e.data.get(o);a||(a=new Map,e.data.set(o,a)),a.set(d,n);}}function b(r,l,s,i){let n=chunkSJDWI3OZ_cjs.i(r);if(n.readOnly)throw new Error("aiecsjs: cannot mutate a read-only world");let t=n.relationStorage.get(s.__id);if(!t)return;let e=l&n.options.indexMask,o=i&n.options.indexMask;if(t.exclusive)e<t.exclusive.length&&t.exclusive[e]===o&&(t.exclusive[e]=-1);else {let a=t.outgoing.get(e);if(a){let c=a.indexOf(o);c>=0&&a.splice(c,1),a.length===0&&t.outgoing.delete(e);}}let d=t.data.get(e);d&&(d.delete(o),d.size===0&&t.data.delete(e));}function h(r,l,s){let i=chunkSJDWI3OZ_cjs.i(r),n=i.relationStorage.get(s.__id);if(!n)return [];let t=l&i.options.indexMask;if(n.exclusive){if(t<n.exclusive.length){let o=n.exclusive[t]??-1;if(o>=0){let d=i.generations[o]??0;return [chunkSJDWI3OZ_cjs.r(o,d,i.options)]}}return []}let e=n.outgoing.get(t);return e?e.map(o=>{let d=i.generations[o]??0;return chunkSJDWI3OZ_cjs.r(o,d,i.options)}):[]}function w(r,l,s,i){let n=chunkSJDWI3OZ_cjs.i(r),t=n.relationStorage.get(s.__id);if(!t)return;let e=l&n.options.indexMask,o=i&n.options.indexMask;return t.data.get(e)?.get(o)}chunkSJDWI3OZ_cjs.D((r,l)=>{let s=l&r.options.indexMask;for(let i of r.relationStorage.values()){if(i.exclusive){s<i.exclusive.length&&(i.exclusive[s]=-1);for(let n=0;n<i.exclusive.length;n++)i.exclusive[n]===s&&(i.exclusive[n]=-1);}i.outgoing.delete(s);for(let[n,t]of i.outgoing){let e=t.indexOf(s);e>=0&&(t.splice(e,1),t.length===0&&i.outgoing.delete(n));}i.data.delete(s);for(let[n,t]of i.data)t.delete(s),t.size===0&&i.data.delete(n);}});exports.ChildOf=_;exports.addRelation=R;exports.defineRelation=p;exports.getRelationData=w;exports.getRelationTargets=h;exports.removeRelation=b;//# sourceMappingURL=relations.cjs.map
1
+ 'use strict';var chunk7NNM4PGP_cjs=require('./chunk-7NNM4PGP.cjs');var x=1;function p(r){return {__kind:"relation",__id:x++,__exclusive:r?.exclusive??false,__hasData:false}}var _=p({exclusive:true});function v(r,l){let s=r.relationStorage.get(l.__id);return s||(s={rel:l,exclusive:l.__exclusive?new Int32Array(r.capacity).fill(-1):null,outgoing:new Map,data:new Map},r.relationStorage.set(l.__id,s),s)}function R(r,l,s,i,n){let t=chunk7NNM4PGP_cjs.i(r);if(t.readOnly)throw new Error("aiecsjs: cannot mutate a read-only world");let e=v(t,s),o=l&t.options.indexMask,d=i&t.options.indexMask;if(e.exclusive){if(o>=e.exclusive.length){let c=new Int32Array(Math.max(o+1,e.exclusive.length*2)).fill(-1);c.set(e.exclusive),e.exclusive=c;}let a=e.exclusive[o]??-1;if(a>=0&&a!==d){let c=e.data.get(o);c?.delete(a),c&&c.size===0&&e.data.delete(o);}e.exclusive[o]=d;}else {let a=e.outgoing.get(o);a||(a=[],e.outgoing.set(o,a)),a.includes(d)||a.push(d);}if(n!==void 0){let a=e.data.get(o);a||(a=new Map,e.data.set(o,a)),a.set(d,n);}}function b(r,l,s,i){let n=chunk7NNM4PGP_cjs.i(r);if(n.readOnly)throw new Error("aiecsjs: cannot mutate a read-only world");let t=n.relationStorage.get(s.__id);if(!t)return;let e=l&n.options.indexMask,o=i&n.options.indexMask;if(t.exclusive)e<t.exclusive.length&&t.exclusive[e]===o&&(t.exclusive[e]=-1);else {let a=t.outgoing.get(e);if(a){let c=a.indexOf(o);c>=0&&a.splice(c,1),a.length===0&&t.outgoing.delete(e);}}let d=t.data.get(e);d&&(d.delete(o),d.size===0&&t.data.delete(e));}function h(r,l,s){let i=chunk7NNM4PGP_cjs.i(r),n=i.relationStorage.get(s.__id);if(!n)return [];let t=l&i.options.indexMask;if(n.exclusive){if(t<n.exclusive.length){let o=n.exclusive[t]??-1;if(o>=0){let d=i.generations[o]??0;return [chunk7NNM4PGP_cjs.r(o,d,i.options)]}}return []}let e=n.outgoing.get(t);return e?e.map(o=>{let d=i.generations[o]??0;return chunk7NNM4PGP_cjs.r(o,d,i.options)}):[]}function w(r,l,s,i){let n=chunk7NNM4PGP_cjs.i(r),t=n.relationStorage.get(s.__id);if(!t)return;let e=l&n.options.indexMask,o=i&n.options.indexMask;return t.data.get(e)?.get(o)}chunk7NNM4PGP_cjs.D((r,l)=>{let s=l&r.options.indexMask;for(let i of r.relationStorage.values()){if(i.exclusive){s<i.exclusive.length&&(i.exclusive[s]=-1);for(let n=0;n<i.exclusive.length;n++)i.exclusive[n]===s&&(i.exclusive[n]=-1);}i.outgoing.delete(s);for(let[n,t]of i.outgoing){let e=t.indexOf(s);e>=0&&(t.splice(e,1),t.length===0&&i.outgoing.delete(n));}i.data.delete(s);for(let[n,t]of i.data)t.delete(s),t.size===0&&i.data.delete(n);}});exports.ChildOf=_;exports.addRelation=R;exports.defineRelation=p;exports.getRelationData=w;exports.getRelationTargets=h;exports.removeRelation=b;//# sourceMappingURL=relations.cjs.map
2
2
  //# sourceMappingURL=relations.cjs.map
package/dist/relations.js CHANGED
@@ -1,2 +1,2 @@
1
- import {D,i,r}from'./chunk-F7KNZ27O.js';var x=1;function p(r){return {__kind:"relation",__id:x++,__exclusive:r?.exclusive??false,__hasData:false}}var _=p({exclusive:true});function v(r,l){let s=r.relationStorage.get(l.__id);return s||(s={rel:l,exclusive:l.__exclusive?new Int32Array(r.capacity).fill(-1):null,outgoing:new Map,data:new Map},r.relationStorage.set(l.__id,s),s)}function R(r,l,s,i$1,n){let t=i(r);if(t.readOnly)throw new Error("aiecsjs: cannot mutate a read-only world");let e=v(t,s),o=l&t.options.indexMask,d=i$1&t.options.indexMask;if(e.exclusive){if(o>=e.exclusive.length){let c=new Int32Array(Math.max(o+1,e.exclusive.length*2)).fill(-1);c.set(e.exclusive),e.exclusive=c;}let a=e.exclusive[o]??-1;if(a>=0&&a!==d){let c=e.data.get(o);c?.delete(a),c&&c.size===0&&e.data.delete(o);}e.exclusive[o]=d;}else {let a=e.outgoing.get(o);a||(a=[],e.outgoing.set(o,a)),a.includes(d)||a.push(d);}if(n!==void 0){let a=e.data.get(o);a||(a=new Map,e.data.set(o,a)),a.set(d,n);}}function b(r,l,s,i$1){let n=i(r);if(n.readOnly)throw new Error("aiecsjs: cannot mutate a read-only world");let t=n.relationStorage.get(s.__id);if(!t)return;let e=l&n.options.indexMask,o=i$1&n.options.indexMask;if(t.exclusive)e<t.exclusive.length&&t.exclusive[e]===o&&(t.exclusive[e]=-1);else {let a=t.outgoing.get(e);if(a){let c=a.indexOf(o);c>=0&&a.splice(c,1),a.length===0&&t.outgoing.delete(e);}}let d=t.data.get(e);d&&(d.delete(o),d.size===0&&t.data.delete(e));}function h(r$1,l,s){let i$1=i(r$1),n=i$1.relationStorage.get(s.__id);if(!n)return [];let t=l&i$1.options.indexMask;if(n.exclusive){if(t<n.exclusive.length){let o=n.exclusive[t]??-1;if(o>=0){let d=i$1.generations[o]??0;return [r(o,d,i$1.options)]}}return []}let e=n.outgoing.get(t);return e?e.map(o=>{let d=i$1.generations[o]??0;return r(o,d,i$1.options)}):[]}function w(r,l,s,i$1){let n=i(r),t=n.relationStorage.get(s.__id);if(!t)return;let e=l&n.options.indexMask,o=i$1&n.options.indexMask;return t.data.get(e)?.get(o)}D((r,l)=>{let s=l&r.options.indexMask;for(let i of r.relationStorage.values()){if(i.exclusive){s<i.exclusive.length&&(i.exclusive[s]=-1);for(let n=0;n<i.exclusive.length;n++)i.exclusive[n]===s&&(i.exclusive[n]=-1);}i.outgoing.delete(s);for(let[n,t]of i.outgoing){let e=t.indexOf(s);e>=0&&(t.splice(e,1),t.length===0&&i.outgoing.delete(n));}i.data.delete(s);for(let[n,t]of i.data)t.delete(s),t.size===0&&i.data.delete(n);}});export{_ as ChildOf,R as addRelation,p as defineRelation,w as getRelationData,h as getRelationTargets,b as removeRelation};//# sourceMappingURL=relations.js.map
1
+ import {D,i,r}from'./chunk-YAHZHZNR.js';var x=1;function p(r){return {__kind:"relation",__id:x++,__exclusive:r?.exclusive??false,__hasData:false}}var _=p({exclusive:true});function v(r,l){let s=r.relationStorage.get(l.__id);return s||(s={rel:l,exclusive:l.__exclusive?new Int32Array(r.capacity).fill(-1):null,outgoing:new Map,data:new Map},r.relationStorage.set(l.__id,s),s)}function R(r,l,s,i$1,n){let t=i(r);if(t.readOnly)throw new Error("aiecsjs: cannot mutate a read-only world");let e=v(t,s),o=l&t.options.indexMask,d=i$1&t.options.indexMask;if(e.exclusive){if(o>=e.exclusive.length){let c=new Int32Array(Math.max(o+1,e.exclusive.length*2)).fill(-1);c.set(e.exclusive),e.exclusive=c;}let a=e.exclusive[o]??-1;if(a>=0&&a!==d){let c=e.data.get(o);c?.delete(a),c&&c.size===0&&e.data.delete(o);}e.exclusive[o]=d;}else {let a=e.outgoing.get(o);a||(a=[],e.outgoing.set(o,a)),a.includes(d)||a.push(d);}if(n!==void 0){let a=e.data.get(o);a||(a=new Map,e.data.set(o,a)),a.set(d,n);}}function b(r,l,s,i$1){let n=i(r);if(n.readOnly)throw new Error("aiecsjs: cannot mutate a read-only world");let t=n.relationStorage.get(s.__id);if(!t)return;let e=l&n.options.indexMask,o=i$1&n.options.indexMask;if(t.exclusive)e<t.exclusive.length&&t.exclusive[e]===o&&(t.exclusive[e]=-1);else {let a=t.outgoing.get(e);if(a){let c=a.indexOf(o);c>=0&&a.splice(c,1),a.length===0&&t.outgoing.delete(e);}}let d=t.data.get(e);d&&(d.delete(o),d.size===0&&t.data.delete(e));}function h(r$1,l,s){let i$1=i(r$1),n=i$1.relationStorage.get(s.__id);if(!n)return [];let t=l&i$1.options.indexMask;if(n.exclusive){if(t<n.exclusive.length){let o=n.exclusive[t]??-1;if(o>=0){let d=i$1.generations[o]??0;return [r(o,d,i$1.options)]}}return []}let e=n.outgoing.get(t);return e?e.map(o=>{let d=i$1.generations[o]??0;return r(o,d,i$1.options)}):[]}function w(r,l,s,i$1){let n=i(r),t=n.relationStorage.get(s.__id);if(!t)return;let e=l&n.options.indexMask,o=i$1&n.options.indexMask;return t.data.get(e)?.get(o)}D((r,l)=>{let s=l&r.options.indexMask;for(let i of r.relationStorage.values()){if(i.exclusive){s<i.exclusive.length&&(i.exclusive[s]=-1);for(let n=0;n<i.exclusive.length;n++)i.exclusive[n]===s&&(i.exclusive[n]=-1);}i.outgoing.delete(s);for(let[n,t]of i.outgoing){let e=t.indexOf(s);e>=0&&(t.splice(e,1),t.length===0&&i.outgoing.delete(n));}i.data.delete(s);for(let[n,t]of i.data)t.delete(s),t.size===0&&i.data.delete(n);}});export{_ as ChildOf,R as addRelation,p as defineRelation,w as getRelationData,h as getRelationTargets,b as removeRelation};//# sourceMappingURL=relations.js.map
2
2
  //# sourceMappingURL=relations.js.map
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkB777DQR7_cjs=require('./chunk-B777DQR7.cjs');require('./chunk-SJDWI3OZ.cjs');Object.defineProperty(exports,"createDeltaSerializer",{enumerable:true,get:function(){return chunkB777DQR7_cjs.e}});Object.defineProperty(exports,"deserializeWorld",{enumerable:true,get:function(){return chunkB777DQR7_cjs.b}});Object.defineProperty(exports,"fromJSON",{enumerable:true,get:function(){return chunkB777DQR7_cjs.d}});Object.defineProperty(exports,"serializeWorld",{enumerable:true,get:function(){return chunkB777DQR7_cjs.a}});Object.defineProperty(exports,"toJSON",{enumerable:true,get:function(){return chunkB777DQR7_cjs.c}});//# sourceMappingURL=serialize.cjs.map
1
+ 'use strict';var chunkXU3BVVCJ_cjs=require('./chunk-XU3BVVCJ.cjs');require('./chunk-7NNM4PGP.cjs');Object.defineProperty(exports,"createDeltaSerializer",{enumerable:true,get:function(){return chunkXU3BVVCJ_cjs.e}});Object.defineProperty(exports,"deserializeWorld",{enumerable:true,get:function(){return chunkXU3BVVCJ_cjs.b}});Object.defineProperty(exports,"fromJSON",{enumerable:true,get:function(){return chunkXU3BVVCJ_cjs.d}});Object.defineProperty(exports,"serializeWorld",{enumerable:true,get:function(){return chunkXU3BVVCJ_cjs.a}});Object.defineProperty(exports,"toJSON",{enumerable:true,get:function(){return chunkXU3BVVCJ_cjs.c}});//# sourceMappingURL=serialize.cjs.map
2
2
  //# sourceMappingURL=serialize.cjs.map
package/dist/serialize.js CHANGED
@@ -1,2 +1,2 @@
1
- export{e as createDeltaSerializer,b as deserializeWorld,d as fromJSON,a as serializeWorld,c as toJSON}from'./chunk-CTESP3XL.js';import'./chunk-F7KNZ27O.js';//# sourceMappingURL=serialize.js.map
1
+ export{e as createDeltaSerializer,b as deserializeWorld,d as fromJSON,a as serializeWorld,c as toJSON}from'./chunk-AW254W5F.js';import'./chunk-YAHZHZNR.js';//# sourceMappingURL=serialize.js.map
2
2
  //# sourceMappingURL=serialize.js.map
package/dist/worker.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkB777DQR7_cjs=require('./chunk-B777DQR7.cjs'),chunkSJDWI3OZ_cjs=require('./chunk-SJDWI3OZ.cjs');var l=1095320899;function W(r){let e=chunkSJDWI3OZ_cjs.i(r),o=chunkB777DQR7_cjs.a(r);if(typeof SharedArrayBuffer>"u"){let n=new ArrayBuffer(o.byteLength);return new Uint8Array(n).set(o),{buffer:n,meta:p(e)}}let t=new SharedArrayBuffer(o.byteLength);return new Uint8Array(t).set(o),{buffer:t,meta:p(e)}}function b(r){m(r.meta);let e=new Uint8Array(r.buffer);return chunkB777DQR7_cjs.b(e)}function S(r,e){let o=new Uint8Array(r),t=chunkB777DQR7_cjs.b(o);if(e?.readOnly){let n=chunkSJDWI3OZ_cjs.i(t);n.readOnly=true;}return t}function w(r){chunkSJDWI3OZ_cjs.j(r.id)&&chunkSJDWI3OZ_cjs.l(r);}function p(r){let e=[];for(let o of r.componentInfoByBit)o&&e.push({id:o.id,kind:o.kind,schema:o.schema});return {magic:l,formatVersion:1,aiecsjsVersion:chunkSJDWI3OZ_cjs.a,indexBits:r.options.indexBits,generationBits:r.options.generationBits,maxComponents:r.options.maxComponents,maskWordCount:r.options.maskWordCount,capacity:r.capacity,componentSchemas:e}}function m(r){if(r.magic!==l)throw new Error("aiecsjs: invalid snapshot meta (wrong magic)");if(r.formatVersion!==1)throw new Error(`aiecsjs: unsupported snapshot format version ${r.formatVersion}`)}exports.adoptSnapshot=b;exports.attachWorld=S;exports.detachWorld=w;exports.transferableSnapshot=W;//# sourceMappingURL=worker.cjs.map
1
+ 'use strict';var chunkXU3BVVCJ_cjs=require('./chunk-XU3BVVCJ.cjs'),chunk7NNM4PGP_cjs=require('./chunk-7NNM4PGP.cjs');var l=1095320899;function W(r){let e=chunk7NNM4PGP_cjs.i(r),o=chunkXU3BVVCJ_cjs.a(r);if(typeof SharedArrayBuffer>"u"){let n=new ArrayBuffer(o.byteLength);return new Uint8Array(n).set(o),{buffer:n,meta:p(e)}}let t=new SharedArrayBuffer(o.byteLength);return new Uint8Array(t).set(o),{buffer:t,meta:p(e)}}function b(r){m(r.meta);let e=new Uint8Array(r.buffer);return chunkXU3BVVCJ_cjs.b(e)}function S(r,e){let o=new Uint8Array(r),t=chunkXU3BVVCJ_cjs.b(o);if(e?.readOnly){let n=chunk7NNM4PGP_cjs.i(t);n.readOnly=true;}return t}function w(r){chunk7NNM4PGP_cjs.j(r.id)&&chunk7NNM4PGP_cjs.l(r);}function p(r){let e=[];for(let o of r.componentInfoByBit)o&&e.push({id:o.id,kind:o.kind,schema:o.schema});return {magic:l,formatVersion:1,aiecsjsVersion:chunk7NNM4PGP_cjs.a,indexBits:r.options.indexBits,generationBits:r.options.generationBits,maxComponents:r.options.maxComponents,maskWordCount:r.options.maskWordCount,capacity:r.capacity,componentSchemas:e}}function m(r){if(r.magic!==l)throw new Error("aiecsjs: invalid snapshot meta (wrong magic)");if(r.formatVersion!==1)throw new Error(`aiecsjs: unsupported snapshot format version ${r.formatVersion}`)}exports.adoptSnapshot=b;exports.attachWorld=S;exports.detachWorld=w;exports.transferableSnapshot=W;//# sourceMappingURL=worker.cjs.map
2
2
  //# sourceMappingURL=worker.cjs.map
package/dist/worker.js CHANGED
@@ -1,2 +1,2 @@
1
- import {a,b as b$1}from'./chunk-CTESP3XL.js';import {i,j,l as l$1,a as a$1}from'./chunk-F7KNZ27O.js';var l=1095320899;function W(r){let e=i(r),o=a(r);if(typeof SharedArrayBuffer>"u"){let n=new ArrayBuffer(o.byteLength);return new Uint8Array(n).set(o),{buffer:n,meta:p(e)}}let t=new SharedArrayBuffer(o.byteLength);return new Uint8Array(t).set(o),{buffer:t,meta:p(e)}}function b(r){m(r.meta);let e=new Uint8Array(r.buffer);return b$1(e)}function S(r,e){let o=new Uint8Array(r),t=b$1(o);if(e?.readOnly){let n=i(t);n.readOnly=true;}return t}function w(r){j(r.id)&&l$1(r);}function p(r){let e=[];for(let o of r.componentInfoByBit)o&&e.push({id:o.id,kind:o.kind,schema:o.schema});return {magic:l,formatVersion:1,aiecsjsVersion:a$1,indexBits:r.options.indexBits,generationBits:r.options.generationBits,maxComponents:r.options.maxComponents,maskWordCount:r.options.maskWordCount,capacity:r.capacity,componentSchemas:e}}function m(r){if(r.magic!==l)throw new Error("aiecsjs: invalid snapshot meta (wrong magic)");if(r.formatVersion!==1)throw new Error(`aiecsjs: unsupported snapshot format version ${r.formatVersion}`)}export{b as adoptSnapshot,S as attachWorld,w as detachWorld,W as transferableSnapshot};//# sourceMappingURL=worker.js.map
1
+ import {a,b as b$1}from'./chunk-AW254W5F.js';import {i,j,l as l$1,a as a$1}from'./chunk-YAHZHZNR.js';var l=1095320899;function W(r){let e=i(r),o=a(r);if(typeof SharedArrayBuffer>"u"){let n=new ArrayBuffer(o.byteLength);return new Uint8Array(n).set(o),{buffer:n,meta:p(e)}}let t=new SharedArrayBuffer(o.byteLength);return new Uint8Array(t).set(o),{buffer:t,meta:p(e)}}function b(r){m(r.meta);let e=new Uint8Array(r.buffer);return b$1(e)}function S(r,e){let o=new Uint8Array(r),t=b$1(o);if(e?.readOnly){let n=i(t);n.readOnly=true;}return t}function w(r){j(r.id)&&l$1(r);}function p(r){let e=[];for(let o of r.componentInfoByBit)o&&e.push({id:o.id,kind:o.kind,schema:o.schema});return {magic:l,formatVersion:1,aiecsjsVersion:a$1,indexBits:r.options.indexBits,generationBits:r.options.generationBits,maxComponents:r.options.maxComponents,maskWordCount:r.options.maskWordCount,capacity:r.capacity,componentSchemas:e}}function m(r){if(r.magic!==l)throw new Error("aiecsjs: invalid snapshot meta (wrong magic)");if(r.formatVersion!==1)throw new Error(`aiecsjs: unsupported snapshot format version ${r.formatVersion}`)}export{b as adoptSnapshot,S as attachWorld,w as detachWorld,W as transferableSnapshot};//# sourceMappingURL=worker.js.map
2
2
  //# sourceMappingURL=worker.js.map
package/llms-full.txt CHANGED
@@ -935,12 +935,23 @@ See [`CHANGELOG.md`](./CHANGELOG.md).
935
935
 
936
936
  # Changelog
937
937
 
938
- [English](CHANGELOG.md) | [繁體中文](CHANGELOG_ZHTW.md)
939
-
940
938
  All notable changes to `aiecsjs` are recorded in this file.
941
939
 
942
940
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
943
941
 
942
+ ## [0.4.1] - 2026-05-29
943
+
944
+ Consistency patch — packaging and documentation surface aligned to the ai*js family. **No runtime API change; `dist/` is byte-identical to 0.4.0 apart from the bumped `VERSION` string.**
945
+
946
+ ### Changed
947
+
948
+ - **`package.json` packaging metadata aligned to family conventions**: `engines.node` `">=18"` → `">=18.0.0"`; `repository.url` gains the `git+` prefix (`git+https://github.com/yshengliao/aiecsjs.git`). Both are semantically equivalent — registry/tooling hygiene only.
949
+ - **`files[]` trimmed to the family-minimal set plus `api.json`**: the npm tarball now ships `dist`, `README.md`, `README_ZHTW.md`, `LICENSE`, `llms.txt`, `llms-full.txt`, and `api.json`. `LICENSE` is now listed explicitly (it was already published via npm's automatic root-LICENSE inclusion). `STABILITY.md`, `CHANGELOG.md`, and `docs/` are no longer bundled — they remain in the repository and stay reachable from the README/`llms.txt` links on GitHub. `api.json` is **deliberately retained**: it is the machine-readable export manifest (stability + `since` per entry) that this package's "AI-readable docs" contract advertises, so it remains the tarball's stability surface for tooling.
950
+
951
+ ### Removed
952
+
953
+ - **Redundant Traditional-Chinese doc duplicates**: `STABILITY_ZHTW.md` and `CHANGELOG_ZHTW.md` removed. The family keeps `README_ZHTW.md` as the single Traditional-Chinese entry point; per-export stability and the changelog are English-canonical (with `api.json` carrying the machine-readable stability surface). The plain-pipe language-switcher line atop `STABILITY.md` / `CHANGELOG.md` and the now-dangling `_ZHTW` references inside `README_ZHTW.md` were removed accordingly.
954
+
944
955
  ## [0.4.0] - 2026-05-29
945
956
 
946
957
  ### Added
@@ -1232,8 +1243,6 @@ The "documentation honesty + test backstop" release. No new public APIs; this is
1232
1243
 
1233
1244
  # Stability Contract
1234
1245
 
1235
- [English](STABILITY.md) | [繁體中文](STABILITY_ZHTW.md)
1236
-
1237
1246
  This document is the per-export stability promise for `aiecsjs`. It is the contract AI tools and human users can rely on when pinning versions and writing import paths.
1238
1247
 
1239
1248
  ## Policy
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aiecsjs",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "TypeScript-first archetype ECS with TypedArray SoA, SAB-ready snapshot transport, and AI-readable docs.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -49,22 +49,19 @@
49
49
  "dist",
50
50
  "README.md",
51
51
  "README_ZHTW.md",
52
- "STABILITY.md",
53
- "STABILITY_ZHTW.md",
54
- "CHANGELOG.md",
52
+ "LICENSE",
55
53
  "llms.txt",
56
54
  "llms-full.txt",
57
- "api.json",
58
- "docs"
55
+ "api.json"
59
56
  ],
60
57
  "engines": {
61
- "node": ">=18"
58
+ "node": ">=18.0.0"
62
59
  },
63
60
  "license": "MIT",
64
61
  "author": "yshengliao",
65
62
  "repository": {
66
63
  "type": "git",
67
- "url": "https://github.com/yshengliao/aiecsjs.git"
64
+ "url": "git+https://github.com/yshengliao/aiecsjs.git"
68
65
  },
69
66
  "keywords": [
70
67
  "ecs",