ecspresso 0.0.0 → 0.0.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.
@@ -0,0 +1,323 @@
1
+ declare module "src/resource-manager" {
2
+ export default class ResourceManager<ResourceTypes extends Record<string, any> = Record<string, any>> {
3
+ private resources;
4
+ /**
5
+ * Add a resource to the manager
6
+ * @param label The resource key
7
+ * @param resource The resource value
8
+ * @returns The added resource
9
+ */
10
+ add<K extends keyof ResourceTypes>(label: K, resource: ResourceTypes[K]): ResourceTypes[K];
11
+ /**
12
+ * Get a resource from the manager
13
+ * @param label The resource key
14
+ * @returns The resource value
15
+ * @throws Error if resource not found
16
+ */
17
+ get<K extends keyof ResourceTypes>(label: K): ResourceTypes[K];
18
+ /**
19
+ * Get a resource from the manager, returning undefined if not found
20
+ * @param label The resource key
21
+ * @returns The resource value or undefined if not found
22
+ */
23
+ getOptional<K extends keyof ResourceTypes>(label: K): ResourceTypes[K] | undefined;
24
+ /**
25
+ * Check if a resource exists
26
+ * @param label The resource key
27
+ * @returns True if the resource exists
28
+ */
29
+ has<K extends keyof ResourceTypes>(label: K): boolean;
30
+ /**
31
+ * Remove a resource
32
+ * @param label The resource key
33
+ * @returns True if the resource was removed
34
+ */
35
+ remove<K extends keyof ResourceTypes>(label: K): boolean;
36
+ /**
37
+ * Get all resource keys
38
+ * @returns Array of resource keys
39
+ */
40
+ getKeys(): Array<keyof ResourceTypes>;
41
+ }
42
+ }
43
+ declare module "src/event-bus" {
44
+ export default class EventBus<EventTypes> {
45
+ private handlers;
46
+ /**
47
+ * Subscribe to an event
48
+ */
49
+ subscribe<E extends keyof EventTypes>(eventType: E, callback: (data: EventTypes[E]) => void): () => void;
50
+ /**
51
+ * Subscribe to an event once
52
+ */
53
+ once<E extends keyof EventTypes>(eventType: E, callback: (data: EventTypes[E]) => void): () => void;
54
+ /**
55
+ * Internal method to add an event handler
56
+ */
57
+ private addHandler;
58
+ publish<E extends keyof EventTypes>(eventType: E, data?: EventTypes[E]): void;
59
+ clear(): void;
60
+ clearEvent<E extends keyof EventTypes>(eventType: E): void;
61
+ }
62
+ }
63
+ declare module "src/types" {
64
+ import type ResourceManager from "src/resource-manager";
65
+ import type EventBus from "src/event-bus";
66
+ import type EntityManager from "src/entity-manager";
67
+ export interface Entity<ComponentTypes> {
68
+ id: number;
69
+ components: Partial<ComponentTypes>;
70
+ }
71
+ export interface EventHandler<T> {
72
+ callback: (data: T) => void;
73
+ once: boolean;
74
+ }
75
+ export interface FilteredEntity<ComponentTypes, WithComponents extends keyof ComponentTypes = never, WithoutComponents extends keyof ComponentTypes = never> {
76
+ id: number;
77
+ components: Omit<Partial<ComponentTypes>, WithoutComponents> & {
78
+ [ComponentName in WithComponents]: ComponentTypes[ComponentName];
79
+ };
80
+ }
81
+ export interface QueryConfig<ComponentTypes, WithComponents extends keyof ComponentTypes, WithoutComponents extends keyof ComponentTypes> {
82
+ with: ReadonlyArray<WithComponents>;
83
+ without?: ReadonlyArray<WithoutComponents>;
84
+ }
85
+ export interface System<ComponentTypes, WithComponents extends keyof ComponentTypes = never, WithoutComponents extends keyof ComponentTypes = never, EventTypes extends Record<string, any> = Record<string, any>, ResourceTypes extends Record<string, any> = Record<string, any>> {
86
+ label: string;
87
+ entityQueries?: {
88
+ [queryName: string]: QueryConfig<ComponentTypes, WithComponents, WithoutComponents>;
89
+ };
90
+ process?(queries: {
91
+ [queryName: string]: Array<FilteredEntity<ComponentTypes, WithComponents, WithoutComponents>>;
92
+ } | Array<FilteredEntity<ComponentTypes, WithComponents, WithoutComponents>>, deltaTime: number, entityManager: EntityManager<ComponentTypes>, resourceManager: ResourceManager<ResourceTypes>, eventBus: EventBus<EventTypes>): void;
93
+ onAttach?(entityManager: EntityManager<ComponentTypes>, resourceManager: ResourceManager<ResourceTypes>, eventBus: EventBus<EventTypes>): void;
94
+ onDetach?(entityManager: EntityManager<ComponentTypes>, resourceManager: ResourceManager<ResourceTypes>, eventBus: EventBus<EventTypes>): void;
95
+ eventHandlers?: {
96
+ [EventName in keyof EventTypes]?: {
97
+ handler(data: EventTypes[EventName], entityManager: EntityManager<ComponentTypes>, resourceManager: ResourceManager<ResourceTypes>, eventBus: EventBus<EventTypes>): void;
98
+ };
99
+ };
100
+ }
101
+ }
102
+ declare module "src/entity-manager" {
103
+ import type { Entity, FilteredEntity } from "src/types";
104
+ export default class EntityManager<ComponentTypes> {
105
+ private nextId;
106
+ private entities;
107
+ private componentIndices;
108
+ createEntity(): Entity<ComponentTypes>;
109
+ addComponent<ComponentName extends keyof ComponentTypes>(entityOrId: number | Entity<ComponentTypes>, componentName: ComponentName, data: ComponentTypes[ComponentName]): this;
110
+ removeComponent<ComponentName extends keyof ComponentTypes>(entityId: number, componentName: ComponentName): void;
111
+ getComponent<ComponentName extends keyof ComponentTypes>(entityId: number, componentName: ComponentName): ComponentTypes[ComponentName] | null;
112
+ getEntitiesWithComponents<WithComponents extends keyof ComponentTypes = never, WithoutComponents extends keyof ComponentTypes = never>(required?: ReadonlyArray<WithComponents>, excluded?: ReadonlyArray<WithoutComponents>): Array<FilteredEntity<ComponentTypes, WithComponents extends never ? never : WithComponents, WithoutComponents extends never ? never : WithoutComponents>>;
113
+ removeEntity(entityId: number): boolean;
114
+ getEntity(entityId: number): Entity<ComponentTypes> | undefined;
115
+ }
116
+ }
117
+ declare module "src/system-builder" {
118
+ import Bundle from "src/bundle";
119
+ import type EntityManager from "src/entity-manager";
120
+ import type EventBus from "src/event-bus";
121
+ import type ResourceManager from "src/resource-manager";
122
+ import type { FilteredEntity, System } from "src/types";
123
+ /**
124
+ * Builder class for creating type-safe ECS Systems with proper query inference
125
+ */
126
+ export class SystemBuilder<ComponentTypes extends Record<string, any> = Record<string, any>, EventTypes extends Record<string, any> = Record<string, any>, ResourceTypes extends Record<string, any> = Record<string, any>, Queries extends Record<string, QueryDefinition<ComponentTypes>> = {}> {
127
+ private _label;
128
+ private _bundle;
129
+ private queries;
130
+ private processFunction?;
131
+ private attachFunction?;
132
+ private detachFunction?;
133
+ private eventHandlers?;
134
+ constructor(_label: string, _bundle?: Bundle<ComponentTypes, EventTypes, ResourceTypes>);
135
+ get label(): string;
136
+ get bundle(): Bundle<ComponentTypes, EventTypes, ResourceTypes>;
137
+ /**
138
+ * Add a query definition to the system
139
+ */
140
+ addQuery<QueryName extends string, WithComponents extends keyof ComponentTypes, WithoutComponents extends keyof ComponentTypes = never>(name: QueryName, definition: {
141
+ with: ReadonlyArray<WithComponents>;
142
+ without?: ReadonlyArray<WithoutComponents>;
143
+ }): SystemBuilder<ComponentTypes, EventTypes, ResourceTypes, Queries & Record<QueryName, QueryDefinition<ComponentTypes, WithComponents, WithoutComponents>>>;
144
+ /**
145
+ * Set the system's process function that runs each update
146
+ */
147
+ setProcess(process: ProcessFunction<ComponentTypes, EventTypes, ResourceTypes, Queries>): SystemBuilder<ComponentTypes, EventTypes, ResourceTypes, Queries>;
148
+ /**
149
+ * Set the onAttach lifecycle hook
150
+ */
151
+ setOnAttach(onAttach: LifecycleFunction<ComponentTypes, EventTypes, ResourceTypes>): SystemBuilder<ComponentTypes, EventTypes, ResourceTypes, Queries>;
152
+ /**
153
+ * Set the onDetach lifecycle hook
154
+ */
155
+ setOnDetach(onDetach: LifecycleFunction<ComponentTypes, EventTypes, ResourceTypes>): SystemBuilder<ComponentTypes, EventTypes, ResourceTypes, Queries>;
156
+ /**
157
+ * Set event handlers for the system
158
+ */
159
+ setEventHandlers(handlers: {
160
+ [EventName in keyof EventTypes]?: {
161
+ handler(data: EventTypes[EventName], entityManager: EntityManager<ComponentTypes>, resourceManager: ResourceManager<ResourceTypes>, eventBus: EventBus<EventTypes>): void;
162
+ };
163
+ }): SystemBuilder<ComponentTypes, EventTypes, ResourceTypes, Queries>;
164
+ /**
165
+ * Build the final system object
166
+ */
167
+ build(): System<ComponentTypes, any, any, EventTypes, ResourceTypes>;
168
+ }
169
+ type QueryDefinition<ComponentTypes, WithComponents extends keyof ComponentTypes = any, WithoutComponents extends keyof ComponentTypes = any> = {
170
+ with: ReadonlyArray<WithComponents>;
171
+ without?: ReadonlyArray<WithoutComponents>;
172
+ };
173
+ type QueryResults<ComponentTypes, Queries extends Record<string, QueryDefinition<ComponentTypes>>> = {
174
+ [QueryName in keyof Queries]: QueryName extends string ? FilteredEntity<ComponentTypes, Queries[QueryName] extends QueryDefinition<ComponentTypes, infer W, any> ? W : never, Queries[QueryName] extends QueryDefinition<ComponentTypes, any, infer WO> ? WO : never>[] : never;
175
+ };
176
+ type ProcessFunction<ComponentTypes, EventTypes extends Record<string, any>, ResourceTypes extends Record<string, any>, Queries extends Record<string, QueryDefinition<ComponentTypes>>> = (queries: QueryResults<ComponentTypes, Queries>, deltaTime: number, entityManager: EntityManager<ComponentTypes>, resourceManager: ResourceManager<ResourceTypes>, eventBus: EventBus<EventTypes>) => void;
177
+ type LifecycleFunction<ComponentTypes, EventTypes extends Record<string, any>, ResourceTypes extends Record<string, any>> = (entityManager: EntityManager<ComponentTypes>, resourceManager: ResourceManager<ResourceTypes>, eventBus: EventBus<EventTypes>) => void;
178
+ }
179
+ declare module "src/bundle" {
180
+ import { SystemBuilder } from "src/system-builder";
181
+ /**
182
+ * Bundle class that encapsulates a set of components, resources, events, and systems
183
+ * that can be merged into a ECSpresso instance
184
+ */
185
+ export default class Bundle<ComponentTypes extends Record<string, any> = Record<string, any>, EventTypes extends Record<string, any> = Record<string, any>, ResourceTypes extends Record<string, any> = Record<string, any>> {
186
+ private _systems;
187
+ private _resources;
188
+ private _id;
189
+ constructor(id?: string);
190
+ /**
191
+ * Get the unique ID of this bundle
192
+ */
193
+ get id(): string;
194
+ /**
195
+ * Set the ID of this bundle
196
+ * @internal Used by combineBundles
197
+ */
198
+ set id(value: string);
199
+ /**
200
+ * Add a system to this bundle
201
+ */
202
+ addSystem(label: string): SystemBuilder<ComponentTypes, EventTypes, ResourceTypes, {}>;
203
+ /**
204
+ * Add a resource to this bundle
205
+ * @param label The resource key
206
+ * @param resource The resource value
207
+ */
208
+ addResource<K extends keyof ResourceTypes>(label: K, resource: ResourceTypes[K]): this;
209
+ /**
210
+ * Get all systems defined in this bundle
211
+ * Returns built System objects instead of SystemBuilders
212
+ */
213
+ getSystems(): import("src").System<ComponentTypes, any, any, EventTypes, ResourceTypes>[];
214
+ /**
215
+ * Get all resources defined in this bundle
216
+ */
217
+ getResources(): Map<keyof ResourceTypes, ResourceTypes[keyof ResourceTypes]>;
218
+ /**
219
+ * Get a specific resource by key
220
+ * @param key The resource key
221
+ * @returns The resource value or undefined if not found
222
+ */
223
+ getResource<K extends keyof ResourceTypes>(key: K): ResourceTypes[K] | undefined;
224
+ /**
225
+ * Get all system builders in this bundle
226
+ */
227
+ getSystemBuilders(): SystemBuilder<ComponentTypes, EventTypes, ResourceTypes, any>[];
228
+ /**
229
+ * Check if this bundle has a specific resource
230
+ * @param key The resource key to check
231
+ * @returns True if the resource exists
232
+ */
233
+ hasResource<K extends keyof ResourceTypes>(key: K): boolean;
234
+ }
235
+ /**
236
+ * Utility type for merging two types
237
+ */
238
+ export type Merge<T1, T2> = T1 & T2;
239
+ export type MergeAll<T extends any[]> = T extends [infer First, ...infer Rest] ? Rest extends [] ? First : Merge<First, MergeAll<Rest>> : {};
240
+ export function mergeBundles<Bundles extends Array<Bundle<any, any, any>>>(id: string, ...bundles: Bundles): Bundle<MergeAll<{
241
+ [K in keyof Bundles]: Bundles[K] extends Bundle<infer C, any, any> ? C : never;
242
+ }>, MergeAll<{
243
+ [K in keyof Bundles]: Bundles[K] extends Bundle<any, infer E, any> ? E : never;
244
+ }>, MergeAll<{
245
+ [K in keyof Bundles]: Bundles[K] extends Bundle<any, any, infer R> ? R : never;
246
+ }>>;
247
+ }
248
+ declare module "src/ecspresso" {
249
+ import EntityManager from "src/entity-manager";
250
+ import EventBus from "src/event-bus";
251
+ import ResourceManager from "src/resource-manager";
252
+ import type Bundle from "src/bundle";
253
+ export default class ECSpresso<ComponentTypes extends Record<string, any> = Record<string, any>, EventTypes extends Record<string, any> = Record<string, any>, ResourceTypes extends Record<string, any> = Record<string, any>> {
254
+ static readonly VERSION: string;
255
+ private _entityManager;
256
+ private _systems;
257
+ private _eventBus;
258
+ private _resourceManager;
259
+ private _installedBundles;
260
+ constructor();
261
+ /**
262
+ * Install one or more bundles into this ECS instance
263
+ */
264
+ install<Bundles extends Array<Bundle<any, any, any>>>(...bundles: Bundles): this;
265
+ /**
266
+ * Remove a system by its label
267
+ */
268
+ removeSystem(label: string): boolean;
269
+ /**
270
+ * Check if a resource exists
271
+ */
272
+ hasResource<K extends keyof ResourceTypes>(key: K): boolean;
273
+ /**
274
+ * Get a resource if it exists, or undefined if not
275
+ */
276
+ getResource<K extends keyof ResourceTypes>(key: K): ResourceTypes[K] | undefined;
277
+ /**
278
+ * Get a resource, throws error if not found
279
+ */
280
+ getResourceOrThrow<K extends keyof ResourceTypes>(key: K): ResourceTypes[K];
281
+ /**
282
+ * Add a resource to the ECS instance
283
+ */
284
+ addResource<K extends keyof ResourceTypes>(key: K, resource: ResourceTypes[K]): this;
285
+ /**
286
+ * Check if an entity has a component
287
+ */
288
+ hasComponent<K extends keyof ComponentTypes>(entityId: number, componentName: K): boolean;
289
+ /**
290
+ * Get all entities with specific components
291
+ */
292
+ getEntitiesWithComponents(withComponents: (keyof ComponentTypes)[], withoutComponents?: (keyof ComponentTypes)[]): import("src").FilteredEntity<ComponentTypes, keyof ComponentTypes extends infer T ? T extends keyof ComponentTypes ? T extends never ? never : T : never : never, keyof ComponentTypes extends infer T_1 ? T_1 extends keyof ComponentTypes ? T_1 extends never ? never : T_1 : never : never>[];
293
+ /**
294
+ * Update all systems
295
+ */
296
+ update(deltaTime: number): void;
297
+ get entityManager(): EntityManager<ComponentTypes>;
298
+ get eventBus(): EventBus<EventTypes>;
299
+ get resourceManager(): ResourceManager<ResourceTypes>;
300
+ /**
301
+ * Get all installed bundle IDs
302
+ */
303
+ get installedBundles(): string[];
304
+ }
305
+ }
306
+ declare module "src/bundle.test" { }
307
+ declare module "src/ecspresso.test" { }
308
+ declare module "src/event-bus.test" { }
309
+ declare module "src/index" {
310
+ import ECSpresso from "src/ecspresso";
311
+ import { SystemBuilder } from "src/system-builder";
312
+ import Bundle, { mergeBundles } from "src/bundle";
313
+ export * from "src/types";
314
+ export { default as EntityManager } from "src/entity-manager";
315
+ export { default as EventBus } from "src/event-bus";
316
+ export { default as ResourceManager } from "src/resource-manager";
317
+ export { SystemBuilder };
318
+ export { Bundle, mergeBundles };
319
+ export default ECSpresso;
320
+ }
321
+ declare module "src/resource-manager.test" { }
322
+ declare module "src/system-builder.test" { }
323
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/resource-manager.ts","../src/event-bus.ts","../src/types.ts","../src/entity-manager.ts","../src/system-builder.ts","../src/bundle.ts","../src/ecspresso.ts","../src/bundle.test.ts","../src/ecspresso.test.ts","../src/event-bus.test.ts","../src/index.ts","../src/resource-manager.test.ts","../src/system-builder.test.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- class M{nextId=1;entities=new Map;componentIndices=new Map;createEntity(){let f=this.nextId++,g={id:f,components:{}};return this.entities.set(f,g),g}addComponent(f,g,E){let J=typeof f==="number"?this.entities.get(f):f;if(!J)throw new Error(`Entity ${f} does not exist`);if(J.components[g]=E,!this.componentIndices.has(g))this.componentIndices.set(g,new Set);return this.componentIndices.get(g)?.add(J.id),this}removeComponent(f,g){let E=this.entities.get(f);if(!E)throw new Error(`Entity ${f} does not exist`);delete E.components[g],this.componentIndices.get(g)?.delete(f)}getComponent(f,g){let E=this.entities.get(f);if(!E)throw new Error(`Entity ${f} does not exist`);return E.components[g]||null}getEntitiesWithComponents(f=[],g=[]){if(f.length===0){if(g.length===0)return Array.from(this.entities.values());return Array.from(this.entities.values()).filter((j)=>{return g.every((F)=>!(F in j.components))})}let E=f.reduce((j,F)=>{let K=this.componentIndices.get(F),U=K?K.size:0,X=this.componentIndices.get(j)?.size??1/0;return U<X?F:j},f[0]);return Array.from(this.componentIndices.get(E)||[]).filter((j)=>{let F=this.entities.get(j);return F&&f.every((K)=>(K in F.components))&&g.every((K)=>!(K in F.components))}).map((j)=>this.entities.get(j))}removeEntity(f){let g=this.entities.get(f);if(!g)return!1;for(let E of Object.keys(g.components))this.componentIndices.get(E)?.delete(f);return this.entities.delete(f)}getEntity(f){return this.entities.get(f)}}class P{handlers=new Map;subscribe(f,g){return this.addHandler(f,g,!1)}once(f,g){return this.addHandler(f,g,!0)}addHandler(f,g,E){if(!this.handlers.has(f))this.handlers.set(f,[]);let J={callback:g,once:E};return this.handlers.get(f).push(J),()=>{let j=this.handlers.get(f);if(j){let F=j.indexOf(J);if(F!==-1)j.splice(F,1)}}}publish(f,g=void 0){let E=this.handlers.get(f);if(!E)return;let J=[...E],j=[];for(let F of J)if(F.callback(g),F.once)j.push(F);if(j.length>0)for(let F of j){let K=E.indexOf(F);if(K!==-1)E.splice(K,1)}}clear(){this.handlers.clear()}clearEvent(f){this.handlers.delete(f)}}class Q{resources=new Map;add(f,g){return this.resources.set(f,g),g}get(f){let g=this.resources.get(f);if(g===void 0)throw new Error(`Resource ${String(f)} not found`);return g}getOptional(f){return this.resources.get(f)}has(f){return this.resources.has(f)}remove(f){return this.resources.delete(f)}getKeys(){return Array.from(this.resources.keys())}}var Y="0.0.0";class V{static VERSION=Y;_entityManager;_systems=[];_eventBus;_resourceManager;_installedBundles=new Set;constructor(){this._entityManager=new M,this._eventBus=new P,this._resourceManager=new Q}install(...f){for(let g of f){if(this._installedBundles.has(g.id)){console.warn(`Bundle ${g.id} is already installed`);continue}let E=g.getSystems();if(!E.length)console.warn(`Bundle ${g.id} has no systems`);for(let j of E){let F=j;if(this._systems.push(F),F.onAttach)F.onAttach(this._entityManager,this._resourceManager,this._eventBus);if(F.eventHandlers)for(let K in F.eventHandlers){let U=F.eventHandlers[K];if(U?.handler){let X=(Z)=>{U.handler(Z,this._entityManager,this._resourceManager,this._eventBus)};this._eventBus.subscribe(K,X)}}}let J=g.getResources();for(let[j,F]of J.entries())this._resourceManager.add(j,F);this._installedBundles.add(g.id)}return this}removeSystem(f){let g=this._systems.findIndex((J)=>J.label===f);if(g===-1)return!1;let E=this._systems[g];if(!E)return!1;return E.onDetach?.(this._entityManager,this._resourceManager,this._eventBus),this._systems.splice(g,1),!0}hasResource(f){return this._resourceManager.has(f)}getResource(f){return this._resourceManager.getOptional(f)}getResourceOrThrow(f){return this._resourceManager.get(f)}addResource(f,g){return this._resourceManager.add(f,g),this}hasComponent(f,g){return this._entityManager.getComponent(f,g)!==null}getEntitiesWithComponents(f,g=[]){return this._entityManager.getEntitiesWithComponents(f,g)}update(f){for(let g of this._systems){if(!g.process)continue;let E={};if(g.entityQueries){for(let J in g.entityQueries){let j=g.entityQueries[J];if(j)E[J]=this._entityManager.getEntitiesWithComponents(j.with,j.without||[])}g.process(E,f,this._entityManager,this._resourceManager,this._eventBus)}else g.process([],f,this._entityManager,this._resourceManager,this._eventBus)}}get entityManager(){return this._entityManager}get eventBus(){return this._eventBus}get resourceManager(){return this._resourceManager}get installedBundles(){return Array.from(this._installedBundles)}}function $(){return`bundle_${Date.now().toString(36)}_${Math.random().toString(36).substring(2,9)}`}class L{_systems=[];_resources=new Map;_id;constructor(f){this._id=f||$()}get id(){return this._id}set id(f){this._id=f}addSystem(f){let g=new W(f,this);return this._systems.push(g),g}addResource(f,g){return this._resources.set(f,g),this}getSystems(){return this._systems.map((f)=>f.build())}getResources(){return new Map(this._resources)}getResource(f){return this._resources.get(f)}getSystemBuilders(){return[...this._systems]}hasResource(f){return this._resources.has(f)}}function D(f,...g){if(g.length===0)return new L(f);let E=new L(f);for(let J of g){for(let j of J.getSystemBuilders())E.addSystem(j);for(let[j,F]of J.getResources().entries())E.addResource(j,F)}return E}class W{_label;_bundle;queries={};processFunction;attachFunction;detachFunction;eventHandlers;constructor(f,g=new L){this._label=f;this._bundle=g}get label(){return this._label}get bundle(){return this._bundle}addQuery(f,g){let E=this;return E.queries={...this.queries,[f]:g},E}setProcess(f){return this.processFunction=f,this}setOnAttach(f){return this.attachFunction=f,this}setOnDetach(f){return this.detachFunction=f,this}setEventHandlers(f){return this.eventHandlers=f,this}build(){let f={label:this._label,entityQueries:this.queries};if(this.processFunction)f.process=this.processFunction;if(this.attachFunction)f.onAttach=this.attachFunction;if(this.detachFunction)f.onDetach=this.detachFunction;if(this.eventHandlers)f.eventHandlers=this.eventHandlers;return f}}var c=V;export{D as mergeBundles,c as default,W as SystemBuilder,Q as ResourceManager,P as EventBus,M as EntityManager,L as Bundle};
1
+ class M{nextId=1;entities=new Map;componentIndices=new Map;createEntity(){let f=this.nextId++,g={id:f,components:{}};return this.entities.set(f,g),g}addComponent(f,g,j){let J=typeof f==="number"?this.entities.get(f):f;if(!J)throw new Error(`Entity ${f} does not exist`);if(J.components[g]=j,!this.componentIndices.has(g))this.componentIndices.set(g,new Set);return this.componentIndices.get(g)?.add(J.id),this}removeComponent(f,g){let j=this.entities.get(f);if(!j)throw new Error(`Entity ${f} does not exist`);delete j.components[g],this.componentIndices.get(g)?.delete(f)}getComponent(f,g){let j=this.entities.get(f);if(!j)throw new Error(`Entity ${f} does not exist`);return j.components[g]||null}getEntitiesWithComponents(f=[],g=[]){if(f.length===0){if(g.length===0)return Array.from(this.entities.values());return Array.from(this.entities.values()).filter((E)=>{return g.every((F)=>!(F in E.components))})}let j=f.reduce((E,F)=>{let K=this.componentIndices.get(F),U=K?K.size:0,X=this.componentIndices.get(E)?.size??1/0;return U<X?F:E},f[0]);return Array.from(this.componentIndices.get(j)||[]).filter((E)=>{let F=this.entities.get(E);return F&&f.every((K)=>(K in F.components))&&g.every((K)=>!(K in F.components))}).map((E)=>this.entities.get(E))}removeEntity(f){let g=this.entities.get(f);if(!g)return!1;for(let j of Object.keys(g.components))this.componentIndices.get(j)?.delete(f);return this.entities.delete(f)}getEntity(f){return this.entities.get(f)}}class P{handlers=new Map;subscribe(f,g){return this.addHandler(f,g,!1)}once(f,g){return this.addHandler(f,g,!0)}addHandler(f,g,j){if(!this.handlers.has(f))this.handlers.set(f,[]);let J={callback:g,once:j};return this.handlers.get(f).push(J),()=>{let E=this.handlers.get(f);if(E){let F=E.indexOf(J);if(F!==-1)E.splice(F,1)}}}publish(f,g=void 0){let j=this.handlers.get(f);if(!j)return;let J=[...j],E=[];for(let F of J)if(F.callback(g),F.once)E.push(F);if(E.length>0)for(let F of E){let K=j.indexOf(F);if(K!==-1)j.splice(K,1)}}clear(){this.handlers.clear()}clearEvent(f){this.handlers.delete(f)}}class Q{resources=new Map;add(f,g){return this.resources.set(f,g),g}get(f){let g=this.resources.get(f);if(g===void 0)throw new Error(`Resource ${String(f)} not found`);return g}getOptional(f){return this.resources.get(f)}has(f){return this.resources.has(f)}remove(f){return this.resources.delete(f)}getKeys(){return Array.from(this.resources.keys())}}var Y="0.0.1";class V{static VERSION=Y;_entityManager;_systems=[];_eventBus;_resourceManager;_installedBundles=new Set;constructor(){this._entityManager=new M,this._eventBus=new P,this._resourceManager=new Q}install(...f){for(let g of f){if(this._installedBundles.has(g.id)){console.warn(`Bundle ${g.id} is already installed`);continue}let j=g.getSystems();if(!j.length)console.warn(`Bundle ${g.id} has no systems`);for(let E of j){let F=E;if(this._systems.push(F),F.onAttach)F.onAttach(this._entityManager,this._resourceManager,this._eventBus);if(F.eventHandlers)for(let K in F.eventHandlers){let U=F.eventHandlers[K];if(U?.handler){let X=(Z)=>{U.handler(Z,this._entityManager,this._resourceManager,this._eventBus)};this._eventBus.subscribe(K,X)}}}let J=g.getResources();for(let[E,F]of J.entries())this._resourceManager.add(E,F);this._installedBundles.add(g.id)}return this}removeSystem(f){let g=this._systems.findIndex((J)=>J.label===f);if(g===-1)return!1;let j=this._systems[g];if(!j)return!1;return j.onDetach?.(this._entityManager,this._resourceManager,this._eventBus),this._systems.splice(g,1),!0}hasResource(f){return this._resourceManager.has(f)}getResource(f){return this._resourceManager.getOptional(f)}getResourceOrThrow(f){return this._resourceManager.get(f)}addResource(f,g){return this._resourceManager.add(f,g),this}hasComponent(f,g){return this._entityManager.getComponent(f,g)!==null}getEntitiesWithComponents(f,g=[]){return this._entityManager.getEntitiesWithComponents(f,g)}update(f){for(let g of this._systems){if(!g.process)continue;let j={};if(g.entityQueries){for(let J in g.entityQueries){let E=g.entityQueries[J];if(E)j[J]=this._entityManager.getEntitiesWithComponents(E.with,E.without||[])}g.process(j,f,this._entityManager,this._resourceManager,this._eventBus)}else g.process([],f,this._entityManager,this._resourceManager,this._eventBus)}}get entityManager(){return this._entityManager}get eventBus(){return this._eventBus}get resourceManager(){return this._resourceManager}get installedBundles(){return Array.from(this._installedBundles)}}function $(){return`bundle_${Date.now().toString(36)}_${Math.random().toString(36).substring(2,9)}`}class L{_systems=[];_resources=new Map;_id;constructor(f){this._id=f||$()}get id(){return this._id}set id(f){this._id=f}addSystem(f){let g=new W(f,this);return this._systems.push(g),g}addResource(f,g){return this._resources.set(f,g),this}getSystems(){return this._systems.map((f)=>f.build())}getResources(){return new Map(this._resources)}getResource(f){return this._resources.get(f)}getSystemBuilders(){return[...this._systems]}hasResource(f){return this._resources.has(f)}}function D(f,...g){if(g.length===0)return new L(f);let j=new L(f);for(let J of g){for(let E of J.getSystemBuilders())j.addSystem(E);for(let[E,F]of J.getResources().entries())j.addResource(E,F)}return j}class W{_label;_bundle;queries={};processFunction;attachFunction;detachFunction;eventHandlers;constructor(f,g=new L){this._label=f;this._bundle=g}get label(){return this._label}get bundle(){return this._bundle}addQuery(f,g){let j=this;return j.queries={...this.queries,[f]:g},j}setProcess(f){return this.processFunction=f,this}setOnAttach(f){return this.attachFunction=f,this}setOnDetach(f){return this.detachFunction=f,this}setEventHandlers(f){return this.eventHandlers=f,this}build(){let f={label:this._label,entityQueries:this.queries};if(this.processFunction)f.process=this.processFunction;if(this.attachFunction)f.onAttach=this.attachFunction;if(this.detachFunction)f.onDetach=this.detachFunction;if(this.eventHandlers)f.eventHandlers=this.eventHandlers;return f}}var i=V;export{D as mergeBundles,i as default,W as SystemBuilder,Q as ResourceManager,P as EventBus,M as EntityManager,L as Bundle};
2
2
 
3
- //# debugId=7DD37829380BFEFA64756E2164756E21
3
+ //# debugId=281E4BB1A8D4F83A64756E2164756E21
4
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -11,6 +11,6 @@
11
11
  "import ECSpresso from './ecspresso';\nimport { SystemBuilder } from './system-builder';\nimport Bundle, { mergeBundles } from './bundle';\n\nexport * from './types';\nexport { default as EntityManager } from './entity-manager';\nexport { default as EventBus } from './event-bus';\nexport { default as ResourceManager } from './resource-manager';\nexport { SystemBuilder };\nexport { Bundle, mergeBundles };\nexport default ECSpresso;\n"
12
12
  ],
13
13
  "mappings": "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",
14
- "debugId": "7DD37829380BFEFA64756E2164756E21",
14
+ "debugId": "281E4BB1A8D4F83A64756E2164756E21",
15
15
  "names": []
16
16
  }
package/package.json CHANGED
@@ -1,9 +1,13 @@
1
1
  {
2
2
  "name": "ecspresso",
3
- "version": "0.0.0",
3
+ "version": "0.0.1",
4
4
  "main": "src/index.ts",
5
5
  "module": "src/index.ts",
6
6
  "description": "A minimal Entity-Component-System library for typescript and javascript.",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/david0178418/ecspresso"
10
+ },
7
11
  "keywords": [
8
12
  "game",
9
13
  "gamedev",
@@ -25,8 +29,9 @@
25
29
  ],
26
30
  "scripts": {
27
31
  "build:clean": "rm -rf dist",
32
+ "build:types": "bun tsc -p tsconfig.build.json",
28
33
  "build:ts": "bun build --target=browser --sourcemap=linked --minify --outdir=dist src/index.ts",
29
- "build": "bun build:clean && bun build:ts",
34
+ "build": "bun build:clean && bun build:ts && bun build:types",
30
35
  "prepublishOnly": "bun run build"
31
36
  },
32
37
  "type": "module"