@awesome-ecs/abstract 0.32.1 → 0.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +119 -125
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.d.cts +2 -2
- package/dist/components/index.d.mts +2 -2
- package/dist/components/index.mjs.map +1 -1
- package/dist/entities/index.cjs +5 -19
- package/dist/entities/index.cjs.map +1 -1
- package/dist/entities/index.d.cts +3 -3
- package/dist/entities/index.d.mts +3 -3
- package/dist/entities/index.mjs +5 -20
- package/dist/entities/index.mjs.map +1 -1
- package/dist/factories/index.cjs.map +1 -1
- package/dist/factories/index.d.cts +2 -2
- package/dist/factories/index.d.mts +2 -2
- package/dist/factories/index.mjs.map +1 -1
- package/dist/{index-CeqaKmWR.d.mts → index-B3DqdxE6.d.mts} +11 -11
- package/dist/{index-vpjRaGIC.d.mts → index-BanhgPCc.d.mts} +103 -262
- package/dist/{index-BD7sDB60.d.mts → index-BivyWazf.d.cts} +257 -407
- package/dist/{index-BOsrKTWm.d.cts → index-CSaKdQe-.d.cts} +103 -262
- package/dist/{index-BJFNTFDd.d.cts → index-DGyDijY7.d.mts} +257 -407
- package/dist/{index-C5nragoq.d.cts → index-DMZSrHoB.d.cts} +141 -100
- package/dist/{index-BlP67nCr.d.mts → index-Dbwzlrgp.d.mts} +141 -100
- package/dist/{index-DMTkNY1e.d.cts → index-aVjnG975.d.cts} +11 -11
- package/dist/pipelines/index.d.cts +2 -2
- package/dist/pipelines/index.d.mts +2 -2
- package/dist/systems/index.cjs +8 -5
- package/dist/systems/index.cjs.map +1 -1
- package/dist/systems/index.d.cts +90 -2
- package/dist/systems/index.d.mts +90 -2
- package/dist/systems/index.mjs +8 -5
- package/dist/systems/index.mjs.map +1 -1
- package/dist/{types-Bbmnq4ni.d.cts → types-BaCGIrym.d.cts} +19 -4
- package/dist/{types-C1ojaDL4.d.mts → types-BaCGIrym.d.mts} +19 -4
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.cts +2 -2
- package/dist/utils/index.d.mts +2 -2
- package/dist/utils/index.mjs.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,125 +1,119 @@
|
|
|
1
|
-
# Awesome ECS - Abstract Package
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
The Abstract package defines all core interfaces and abstractions for the Entity-Component-System (ECS) framework. It provides the foundational contracts that all other packages implement, including:
|
|
6
|
-
|
|
7
|
-
- **Components**: Data-storage contracts
|
|
8
|
-
- **Entities**:
|
|
9
|
-
- **Pipelines**: Middleware-based execution chains
|
|
10
|
-
- **Systems**: Modular logic execution patterns
|
|
11
|
-
- **Utilities**: Serialization, events, and scheduling
|
|
12
|
-
|
|
13
|
-
This package has **zero external dependencies** and serves as the contract layer for the entire ECS framework.
|
|
14
|
-
|
|
15
|
-
## Core Concepts
|
|
16
|
-
|
|
17
|
-
### Components (`src/components/`)
|
|
18
|
-
|
|
19
|
-
Components are **data-only containers**. They should never contain business logic.
|
|
20
|
-
|
|
21
|
-
```typescript
|
|
22
|
-
import { IComponent } from "@awesome-ecs/abstract";
|
|
23
|
-
|
|
24
|
-
export class HealthComponent implements IComponent {
|
|
25
|
-
readonly componentType = ComponentType.health;
|
|
26
|
-
readonly isSerializable = true; // Include in snapshots
|
|
27
|
-
|
|
28
|
-
current: number = 100;
|
|
29
|
-
max: number = 100;
|
|
30
|
-
}
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
**Key interfaces:**
|
|
34
|
-
- `IComponent`: Base component interface with `componentType` and `isSerializable`
|
|
35
|
-
- `IdentityComponent`: Mandatory component tracking entity UID and model
|
|
36
|
-
|
|
37
|
-
### Entities (`src/entities/`)
|
|
38
|
-
|
|
39
|
-
Entities are immutable
|
|
40
|
-
|
|
41
|
-
```typescript
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
- `entity.ts`:
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
- `
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
- `systems-
|
|
96
|
-
- `systems-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
- `
|
|
101
|
-
- `
|
|
102
|
-
- `
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
- Concrete entity implementations (→ @awesome-ecs/core)
|
|
122
|
-
- System module base classes (→ @awesome-ecs/core)
|
|
123
|
-
- Component factories (→ @awesome-ecs/core)
|
|
124
|
-
- Multi-threading (→ @awesome-ecs/workers)
|
|
125
|
-
- AI patterns (→ @awesome-ecs/ai)
|
|
1
|
+
# Awesome ECS - Abstract Package
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The Abstract package defines all core interfaces and abstractions for the Entity-Component-System (ECS) framework. It provides the foundational contracts that all other packages implement, including:
|
|
6
|
+
|
|
7
|
+
- **Components**: Data-storage contracts
|
|
8
|
+
- **Entities**: Materialized view contracts for components and proxy references
|
|
9
|
+
- **Pipelines**: Middleware-based execution chains
|
|
10
|
+
- **Systems**: Modular logic execution patterns
|
|
11
|
+
- **Utilities**: Serialization, events, and scheduling
|
|
12
|
+
|
|
13
|
+
This package has **zero external dependencies** and serves as the contract layer for the entire ECS framework.
|
|
14
|
+
|
|
15
|
+
## Core Concepts
|
|
16
|
+
|
|
17
|
+
### Components (`src/components/`)
|
|
18
|
+
|
|
19
|
+
Components are **data-only containers**. They should never contain business logic.
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import { IComponent } from "@awesome-ecs/abstract";
|
|
23
|
+
|
|
24
|
+
export class HealthComponent implements IComponent {
|
|
25
|
+
readonly componentType = ComponentType.health;
|
|
26
|
+
readonly isSerializable = true; // Include in snapshots
|
|
27
|
+
|
|
28
|
+
current: number = 100;
|
|
29
|
+
max: number = 100;
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Key interfaces:**
|
|
34
|
+
- `IComponent`: Base component interface with `componentType` and `isSerializable`
|
|
35
|
+
- `IdentityComponent`: Mandatory component tracking entity UID and model
|
|
36
|
+
|
|
37
|
+
### Entities (`src/entities/`)
|
|
38
|
+
|
|
39
|
+
Entities are immutable contracts over identity, components, and explicit typed proxy fields.
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
import { EntityProxy, IEntityWith } from '@awesome-ecs/abstract/entities';
|
|
43
|
+
|
|
44
|
+
export interface GridEntity extends IEntityWith<GridModel> {
|
|
45
|
+
readonly coordinates: CoordinatesComponent;
|
|
46
|
+
readonly sceneProxy: EntityProxy<SceneEntity>;
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Key files:**
|
|
51
|
+
- `entity.ts`: Base `IEntity` interface and `EntityTypeUid` types
|
|
52
|
+
- `entity-proxies.ts`: `EntityProxy` for loose-coupling relationships
|
|
53
|
+
- `entity-snapshot.ts`: `IEntitySnapshot` for serialization
|
|
54
|
+
- `entity-runtime-scheduler.ts`: `IEntityUpdate`, the lean `IEntityRuntimeScheduler` runtime contract, and `IEntityRuntimeSchedulerInspector` for tooling/debug surfaces that need mailbox and schedule snapshots
|
|
55
|
+
- `entity-repository.ts`: `IEntityRepository` for entity lookups
|
|
56
|
+
- `entity-events.ts`: `IEntityEvents` for reactive patterns
|
|
57
|
+
|
|
58
|
+
### Pipelines (`src/pipelines/`)
|
|
59
|
+
|
|
60
|
+
Pipelines execute **middleware chains** with two phases:
|
|
61
|
+
|
|
62
|
+
1. **dispatch(context)**: Main execution phase
|
|
63
|
+
2. **cleanup(context)**: Resource cleanup phase
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
export interface IPipeline<TContext extends IPipelineContext> {
|
|
67
|
+
use(middleware: IMiddleware<TContext>): this;
|
|
68
|
+
dispatch(context: Partial<TContext>): void | Promise<void>;
|
|
69
|
+
cleanup(context: Partial<TContext>): void | Promise<void>;
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Key files:**
|
|
74
|
+
- `pipeline.ts`: Core `IPipeline` interface
|
|
75
|
+
- `middleware.ts`: `IMiddleware` contract (action + optional cleanup)
|
|
76
|
+
- `middleware-runner.ts`: Middleware execution engine
|
|
77
|
+
- `pipeline-context.ts`: Context passed to middleware
|
|
78
|
+
- `pipeline-runner.ts`: Pipeline execution orchestration
|
|
79
|
+
|
|
80
|
+
### Systems (`src/systems/`)
|
|
81
|
+
|
|
82
|
+
Systems are **modular logic units** that operate on entities. They implement the middleware pattern.
|
|
83
|
+
|
|
84
|
+
**Pipeline-based systems:**
|
|
85
|
+
- `system-middleware.ts`: `ISystemMiddleware<TEntity>` - middleware for a specific entity type
|
|
86
|
+
- `system-context.ts`: Context passed to system middleware (entity, events, repository, etc.)
|
|
87
|
+
|
|
88
|
+
**Module-based organization:**
|
|
89
|
+
- `systems-module.ts`: `ISystemsModule<TEntity>` - groups related systems targeting an entity type
|
|
90
|
+
- `systems-module-builder.ts`: `ISystemsModuleBuilder<TEntity>` - fluent builder for pipeline registration
|
|
91
|
+
- `systems-module-repository.ts`: Module lifecycle and registration
|
|
92
|
+
|
|
93
|
+
**Runtime execution:**
|
|
94
|
+
- `systems-runtime.ts`: `ISystemsRuntime` - core tick-based execution loop
|
|
95
|
+
- `systems-runtime-context.ts`: Context for runtime execution
|
|
96
|
+
- `systems-runtime-middleware.ts`: Middleware for runtime operations
|
|
97
|
+
|
|
98
|
+
### Utilities (`src/utils/`)
|
|
99
|
+
|
|
100
|
+
- `types.ts`: Common types (`Immutable`, `BooleanProps`, `Readonly`)
|
|
101
|
+
- `json-serializer.ts`: JSON serialization contracts
|
|
102
|
+
- `logger.ts`: Logging interface
|
|
103
|
+
- `performance-timer.ts`: Performance measurement
|
|
104
|
+
|
|
105
|
+
## Key Design Principles
|
|
106
|
+
|
|
107
|
+
1. **Components are data-only** - no behavior, just properties
|
|
108
|
+
2. **Entities are immutable** - modifications through systems only
|
|
109
|
+
3. **Relationships are backed by proxies** - proxy fields expose typed lookup refs; systems resolve proxy handles or full entities explicitly when needed
|
|
110
|
+
4. **Systems are middleware** - pluggable into pipelines
|
|
111
|
+
5. **Pipelines are composable** - middleware chains with dispatch + cleanup
|
|
112
|
+
|
|
113
|
+
## What's NOT in Abstract
|
|
114
|
+
|
|
115
|
+
- Concrete entity implementations (→ @awesome-ecs/core)
|
|
116
|
+
- System module base classes (→ @awesome-ecs/core)
|
|
117
|
+
- Component factories (→ @awesome-ecs/core)
|
|
118
|
+
- Multi-threading (→ @awesome-ecs/workers)
|
|
119
|
+
- AI patterns (→ @awesome-ecs/ai)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../../src/components/identity-component.ts"],"sourcesContent":["import { EntityTypeUid, IEntityModel } from '../entities/entity';\nimport { Immutable } from '../utils/types';\nimport { IComponent } from './component';\n\n/**\n * The `BasicComponentType` enum defines the types of basic components available.\n */\nexport enum BasicComponentType {\n identity = 'identity'\n}\n\n/**\n * The mandatory metadata component for every entity.\n * Contains core information that defines what an entity is and when it was last updated.\n * This component is immutable after creation and uniquely identifies each entity.\n *\n * @template TModel - The entity model type containing initialization data.\n */\nexport interface IdentityComponent<TModel extends IEntityModel> extends IComponent {\n /**\n * The entity type classification.\n * Categorizes entities into logical types, allowing systems to selectively operate on specific entity categories.\n */\n readonly entityType: EntityTypeUid;\n\n /**\n * The initialization model for this entity.\n * Provides the minimal data structure used when the entity was first created.\n * Serves as a reference point for the entity's initial configuration.\n *\n * @type {Immutable<TModel>}\n */\n readonly model: Immutable<TModel>;\n\n /**\n * The timestamp of the entity's last system update.\n * Useful for calculating elapsed time (delta time) between consecutive updates.\n * Helps systems make time-aware decisions.\n *\n * @type {Date | undefined}\n */\n readonly lastUpdated?: Date;\n}\n"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../src/components/identity-component.ts"],"sourcesContent":["import type { EntityTypeUid, IEntityModel } from '../entities/entity';\r\nimport type { IEntityProxy } from '../entities/entity-proxies';\r\nimport { Immutable } from '../utils/types';\r\nimport { IComponent } from './component';\r\n\r\n/**\r\n * The `BasicComponentType` enum defines the types of basic components available.\r\n */\r\nexport enum BasicComponentType {\r\n identity = 'identity'\r\n}\r\n\r\n/**\r\n * The mandatory metadata component for every entity.\r\n * Contains core information that defines what an entity is and when it was last updated.\r\n * This component is immutable after creation and uniquely identifies each entity.\r\n *\r\n * @template TModel - The entity model type containing initialization data.\r\n */\r\nexport interface IdentityComponent<TModel extends IEntityModel> extends IComponent {\r\n /**\r\n * The entity type classification.\r\n * Categorizes entities into logical types, allowing systems to selectively operate on specific entity categories.\r\n */\r\n readonly entityType: EntityTypeUid;\r\n\r\n /**\r\n * The initialization model for this entity.\r\n * Provides the minimal data structure used when the entity was first created.\r\n * Serves as a reference point for the entity's initial configuration.\r\n *\r\n * @type {Immutable<TModel>}\r\n */\r\n readonly model: Immutable<TModel>;\r\n\r\n /**\r\n * The proxy for this entity, derived from `entityType` and `model.uid`.\r\n */\r\n readonly proxy: IEntityProxy;\r\n\r\n /**\r\n * The timestamp of the entity's last system update.\r\n * Useful for calculating elapsed time (delta time) between consecutive updates.\r\n * Helps systems make time-aware decisions.\r\n *\r\n * @type {Date | undefined}\r\n */\r\n readonly lastUpdated?: Date;\r\n}\r\n"],"mappings":";;;;;AAQA,IAAY,qBAAL,yBAAA,oBAAA;CACL,mBAAA,cAAA;;AACF,EAAA,CAAA,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { BasicComponentType, ComponentTypeUid, ConfigCustomControlOptions, ConfigOption, ConfigRecord, IComponent, IComponentWithConfig, IdentityComponent };
|
|
1
|
+
import { C as ConfigCustomControlOptions, S as IComponentWithConfig, T as ConfigRecord, b as ComponentTypeUid, t as IComponentRepository, v as BasicComponentType, w as ConfigOption, x as IComponent, y as IdentityComponent } from "../index-DMZSrHoB.cjs";
|
|
2
|
+
export { BasicComponentType, ComponentTypeUid, ConfigCustomControlOptions, ConfigOption, ConfigRecord, IComponent, IComponentRepository, IComponentWithConfig, IdentityComponent };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { BasicComponentType, ComponentTypeUid, ConfigCustomControlOptions, ConfigOption, ConfigRecord, IComponent, IComponentWithConfig, IdentityComponent };
|
|
1
|
+
import { C as ConfigCustomControlOptions, S as IComponentWithConfig, T as ConfigRecord, b as ComponentTypeUid, t as IComponentRepository, v as BasicComponentType, w as ConfigOption, x as IComponent, y as IdentityComponent } from "../index-Dbwzlrgp.mjs";
|
|
2
|
+
export { BasicComponentType, ComponentTypeUid, ConfigCustomControlOptions, ConfigOption, ConfigRecord, IComponent, IComponentRepository, IComponentWithConfig, IdentityComponent };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/components/identity-component.ts"],"sourcesContent":["import { EntityTypeUid, IEntityModel } from '../entities/entity';\nimport { Immutable } from '../utils/types';\nimport { IComponent } from './component';\n\n/**\n * The `BasicComponentType` enum defines the types of basic components available.\n */\nexport enum BasicComponentType {\n identity = 'identity'\n}\n\n/**\n * The mandatory metadata component for every entity.\n * Contains core information that defines what an entity is and when it was last updated.\n * This component is immutable after creation and uniquely identifies each entity.\n *\n * @template TModel - The entity model type containing initialization data.\n */\nexport interface IdentityComponent<TModel extends IEntityModel> extends IComponent {\n /**\n * The entity type classification.\n * Categorizes entities into logical types, allowing systems to selectively operate on specific entity categories.\n */\n readonly entityType: EntityTypeUid;\n\n /**\n * The initialization model for this entity.\n * Provides the minimal data structure used when the entity was first created.\n * Serves as a reference point for the entity's initial configuration.\n *\n * @type {Immutable<TModel>}\n */\n readonly model: Immutable<TModel>;\n\n /**\n * The timestamp of the entity's last system update.\n * Useful for calculating elapsed time (delta time) between consecutive updates.\n * Helps systems make time-aware decisions.\n *\n * @type {Date | undefined}\n */\n readonly lastUpdated?: Date;\n}\n"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/components/identity-component.ts"],"sourcesContent":["import type { EntityTypeUid, IEntityModel } from '../entities/entity';\r\nimport type { IEntityProxy } from '../entities/entity-proxies';\r\nimport { Immutable } from '../utils/types';\r\nimport { IComponent } from './component';\r\n\r\n/**\r\n * The `BasicComponentType` enum defines the types of basic components available.\r\n */\r\nexport enum BasicComponentType {\r\n identity = 'identity'\r\n}\r\n\r\n/**\r\n * The mandatory metadata component for every entity.\r\n * Contains core information that defines what an entity is and when it was last updated.\r\n * This component is immutable after creation and uniquely identifies each entity.\r\n *\r\n * @template TModel - The entity model type containing initialization data.\r\n */\r\nexport interface IdentityComponent<TModel extends IEntityModel> extends IComponent {\r\n /**\r\n * The entity type classification.\r\n * Categorizes entities into logical types, allowing systems to selectively operate on specific entity categories.\r\n */\r\n readonly entityType: EntityTypeUid;\r\n\r\n /**\r\n * The initialization model for this entity.\r\n * Provides the minimal data structure used when the entity was first created.\r\n * Serves as a reference point for the entity's initial configuration.\r\n *\r\n * @type {Immutable<TModel>}\r\n */\r\n readonly model: Immutable<TModel>;\r\n\r\n /**\r\n * The proxy for this entity, derived from `entityType` and `model.uid`.\r\n */\r\n readonly proxy: IEntityProxy;\r\n\r\n /**\r\n * The timestamp of the entity's last system update.\r\n * Useful for calculating elapsed time (delta time) between consecutive updates.\r\n * Helps systems make time-aware decisions.\r\n *\r\n * @type {Date | undefined}\r\n */\r\n readonly lastUpdated?: Date;\r\n}\r\n"],"mappings":";;;;AAQA,IAAY,qBAAL,yBAAA,oBAAA;CACL,mBAAA,cAAA;;AACF,EAAA,CAAA,CAAA"}
|
package/dist/entities/index.cjs
CHANGED
|
@@ -1,36 +1,22 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
//#region src/entities/
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*/
|
|
2
|
+
//#region src/entities/context-repository.ts
|
|
3
|
+
const SYSTEM_CONTEXT_KEY = Symbol("systemContext");
|
|
4
|
+
//#endregion
|
|
5
|
+
//#region src/entities/entity-scheduler.ts
|
|
7
6
|
let EntityUpdateType = /* @__PURE__ */ function(EntityUpdateType) {
|
|
8
|
-
/**
|
|
9
|
-
* Indicates the entity should be updated with new data.
|
|
10
|
-
*/
|
|
11
7
|
EntityUpdateType["update"] = "update";
|
|
12
|
-
/**
|
|
13
|
-
* Indicates the entity should be removed from the system.
|
|
14
|
-
*/
|
|
15
8
|
EntityUpdateType["remove"] = "remove";
|
|
16
9
|
return EntityUpdateType;
|
|
17
10
|
}({});
|
|
18
|
-
//#endregion
|
|
19
|
-
//#region src/entities/entity-scheduler.ts
|
|
20
|
-
/**
|
|
21
|
-
* Controls which scheduling modes are paused.
|
|
22
|
-
*/
|
|
23
11
|
let SchedulerPauseType = /* @__PURE__ */ function(SchedulerPauseType) {
|
|
24
|
-
/** Pause both interval timers and frame subscriptions. */
|
|
25
12
|
SchedulerPauseType["full"] = "full";
|
|
26
|
-
/** Pause only frame subscriptions. Interval timers continue firing. */
|
|
27
13
|
SchedulerPauseType["perFrame"] = "perFrame";
|
|
28
|
-
/** Pause only interval timers. Frame subscriptions continue. */
|
|
29
14
|
SchedulerPauseType["intervals"] = "intervals";
|
|
30
15
|
return SchedulerPauseType;
|
|
31
16
|
}({});
|
|
32
17
|
//#endregion
|
|
33
18
|
exports.EntityUpdateType = EntityUpdateType;
|
|
19
|
+
exports.SYSTEM_CONTEXT_KEY = SYSTEM_CONTEXT_KEY;
|
|
34
20
|
exports.SchedulerPauseType = SchedulerPauseType;
|
|
35
21
|
|
|
36
22
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../../src/entities/
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../src/entities/context-repository.ts","../../src/entities/entity-scheduler.ts"],"sourcesContent":["import type { IEntityProxy } from './entity-proxies';\r\n\r\nexport const SYSTEM_CONTEXT_KEY = Symbol('systemContext');\r\n\r\nexport interface IContextRepository {\r\n get<TContext>(proxy: IEntityProxy, key: string | symbol): TContext | undefined;\r\n set<TContext>(proxy: IEntityProxy, key: string | symbol, context: TContext): TContext;\r\n delete(proxy: IEntityProxy, key: string | symbol): boolean;\r\n deleteAll(proxy: IEntityProxy): boolean;\r\n}\r\n","import { EntityTypeUid, IEntityModel } from './entity';\r\nimport { IEntityConfigSnapshot } from './entity-config';\r\nimport { IEntityEvent, IEventData } from './entity-events';\r\nimport { IEntityProxy } from './entity-proxies';\r\nimport { IEntitySnapshot } from './entity-snapshot';\r\n\r\nexport enum EntityUpdateType {\r\n update = 'update',\r\n remove = 'remove'\r\n}\r\n\r\nexport interface IEntityUpdate {\r\n readonly type: EntityUpdateType;\r\n readonly entity: IEntityProxy;\r\n readonly model?: IEntityModel;\r\n readonly snapshot?: IEntitySnapshot;\r\n readonly config?: IEntityConfigSnapshot;\r\n}\r\n\r\nexport interface IEntityDispatchGroup {\r\n readonly entityType: EntityTypeUid;\r\n readonly updates: ReadonlyArray<IEntityUpdate>;\r\n readonly dirtyUpdates: number;\r\n readonly scheduledUpdates: number;\r\n readonly removeUpdates: number;\r\n readonly pipelineMask?: number;\r\n}\r\n\r\nexport type EntityRuntimePendingGroupOptions = {\r\n readonly includeFrameSubscriptions?: boolean;\r\n};\r\n\r\nexport type EntitySchedule = {\r\n readonly proxy: IEntityProxy;\r\n readonly intervalMs?: number;\r\n};\r\n\r\nexport type EntityPriorityModel = {\r\n readonly defaultPriority?: number;\r\n readonly entityTypes?: ReadonlyMap<EntityTypeUid, number>;\r\n};\r\n\r\nexport enum SchedulerPauseType {\r\n full = 'full',\r\n perFrame = 'perFrame',\r\n intervals = 'intervals'\r\n}\r\n\r\nexport interface IEntityRuntimeScheduler {\r\n enqueue(update: IEntityUpdate): void;\r\n enqueueEvent(entity: IEntityProxy, event: IEntityEvent<IEventData>): void;\r\n enqueueEvents(entity: IEntityProxy, events: ReadonlyArray<IEntityEvent<IEventData>>): void;\r\n clearDirtyUpdates(): void;\r\n\r\n schedule(proxy: IEntityProxy, intervalMs?: number): void;\r\n removeSchedule(proxy: IEntityProxy): void;\r\n hasSchedule(proxy: IEntityProxy): boolean;\r\n clearSchedules(): void;\r\n\r\n takePendingGroups(\r\n maxItems?: number,\r\n options?: EntityRuntimePendingGroupOptions\r\n ): ReadonlyArray<IEntityDispatchGroup>;\r\n\r\n skipEntityType(entityType: EntityTypeUid): void;\r\n unskipEntityType(entityType: EntityTypeUid): void;\r\n pause(type?: SchedulerPauseType): void;\r\n resume(): void;\r\n}\r\n\r\nexport interface IEntityRuntimeSchedulerInspector extends IEntityRuntimeScheduler {\r\n readonly dirtyCount: number;\r\n readonly frameSubscriptions: ReadonlySet<IEntityProxy>;\r\n readonly isPaused: boolean;\r\n readonly pauseType: SchedulerPauseType | null;\r\n readonly pendingGroupCount: number;\r\n readonly pendingCount: number;\r\n readonly rawDirtyCount: number;\r\n readonly schedules: ReadonlyArray<EntitySchedule>;\r\n readonly skippedEntityTypes: ReadonlySet<EntityTypeUid>;\r\n\r\n inspectDirtyUpdates(): ReadonlyArray<IEntityUpdate>;\r\n}\r\n"],"mappings":";;AAEA,MAAa,qBAAqB,OAAO,eAAe;;;ACIxD,IAAY,mBAAL,yBAAA,kBAAA;CACL,iBAAA,YAAA;CACA,iBAAA,YAAA;;AACF,EAAA,CAAA,CAAA;AAiCA,IAAY,qBAAL,yBAAA,oBAAA;CACL,mBAAA,UAAA;CACA,mBAAA,cAAA;CACA,mBAAA,eAAA;;AACF,EAAA,CAAA,CAAA"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
import { _ as
|
|
3
|
-
export { EntityEventSubscriptionFilter, EntityEventSubscriptionOptions, EntityEventUid, EntityProxy, EntitySchedule, EntityTypeUid, EntityUid, EntityUpdateType, IEntity, IEntityConfigSnapshot,
|
|
1
|
+
import { _ as ModelOf, a as IEntityProxy, c as RequiredProxies, d as EntityUid, f as IEntity, g as IEntityWith, h as IEntitySpec, i as EntityProxyManyLookup, l as TypedEntityProxy, m as IEntityModelRef, n as EntityProxy, o as IEntityProxyRepository, p as IEntityModel, r as EntityProxyLookup, s as ProxyTypesOf, u as EntityTypeUid } from "../index-DMZSrHoB.cjs";
|
|
2
|
+
import { S as SYSTEM_CONTEXT_KEY, _ as IEntityEventsDispatcher, a as IEntityDispatchGroup, b as IEntityConfigSnapshot, c as IEntityUpdate, d as IEntitySnapshotProvider, f as IEntityRepository, g as IEntityEvent, h as EntityEventUid, i as EntityUpdateType, l as SchedulerPauseType, m as EntityEventSubscriptionOptions, n as EntityRuntimePendingGroupOptions, o as IEntityRuntimeScheduler, p as EntityEventSubscriptionFilter, r as EntitySchedule, s as IEntityRuntimeSchedulerInspector, t as EntityPriorityModel, u as IEntitySnapshot, v as IEntityEventsManager, x as IContextRepository, y as IEventData } from "../index-CSaKdQe-.cjs";
|
|
3
|
+
export { EntityEventSubscriptionFilter, EntityEventSubscriptionOptions, EntityEventUid, EntityPriorityModel, EntityProxy, EntityProxyLookup, EntityProxyManyLookup, EntityRuntimePendingGroupOptions, EntitySchedule, EntityTypeUid, EntityUid, EntityUpdateType, IContextRepository, IEntity, IEntityConfigSnapshot, IEntityDispatchGroup, IEntityEvent, IEntityEventsDispatcher, IEntityEventsManager, IEntityModel, IEntityModelRef, IEntityProxy, IEntityProxyRepository, IEntityRepository, IEntityRuntimeScheduler, IEntityRuntimeSchedulerInspector, IEntitySnapshot, IEntitySnapshotProvider, IEntitySpec, IEntityUpdate, IEntityWith, IEventData, ModelOf, ProxyTypesOf, RequiredProxies, SYSTEM_CONTEXT_KEY, SchedulerPauseType, TypedEntityProxy };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
import { _ as
|
|
3
|
-
export { EntityEventSubscriptionFilter, EntityEventSubscriptionOptions, EntityEventUid, EntityProxy, EntitySchedule, EntityTypeUid, EntityUid, EntityUpdateType, IEntity, IEntityConfigSnapshot,
|
|
1
|
+
import { _ as ModelOf, a as IEntityProxy, c as RequiredProxies, d as EntityUid, f as IEntity, g as IEntityWith, h as IEntitySpec, i as EntityProxyManyLookup, l as TypedEntityProxy, m as IEntityModelRef, n as EntityProxy, o as IEntityProxyRepository, p as IEntityModel, r as EntityProxyLookup, s as ProxyTypesOf, u as EntityTypeUid } from "../index-Dbwzlrgp.mjs";
|
|
2
|
+
import { S as SYSTEM_CONTEXT_KEY, _ as IEntityEventsDispatcher, a as IEntityDispatchGroup, b as IEntityConfigSnapshot, c as IEntityUpdate, d as IEntitySnapshotProvider, f as IEntityRepository, g as IEntityEvent, h as EntityEventUid, i as EntityUpdateType, l as SchedulerPauseType, m as EntityEventSubscriptionOptions, n as EntityRuntimePendingGroupOptions, o as IEntityRuntimeScheduler, p as EntityEventSubscriptionFilter, r as EntitySchedule, s as IEntityRuntimeSchedulerInspector, t as EntityPriorityModel, u as IEntitySnapshot, v as IEntityEventsManager, x as IContextRepository, y as IEventData } from "../index-BanhgPCc.mjs";
|
|
3
|
+
export { EntityEventSubscriptionFilter, EntityEventSubscriptionOptions, EntityEventUid, EntityPriorityModel, EntityProxy, EntityProxyLookup, EntityProxyManyLookup, EntityRuntimePendingGroupOptions, EntitySchedule, EntityTypeUid, EntityUid, EntityUpdateType, IContextRepository, IEntity, IEntityConfigSnapshot, IEntityDispatchGroup, IEntityEvent, IEntityEventsDispatcher, IEntityEventsManager, IEntityModel, IEntityModelRef, IEntityProxy, IEntityProxyRepository, IEntityRepository, IEntityRuntimeScheduler, IEntityRuntimeSchedulerInspector, IEntitySnapshot, IEntitySnapshotProvider, IEntitySpec, IEntityUpdate, IEntityWith, IEventData, ModelOf, ProxyTypesOf, RequiredProxies, SYSTEM_CONTEXT_KEY, SchedulerPauseType, TypedEntityProxy };
|
package/dist/entities/index.mjs
CHANGED
|
@@ -1,34 +1,19 @@
|
|
|
1
|
-
//#region src/entities/
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*/
|
|
1
|
+
//#region src/entities/context-repository.ts
|
|
2
|
+
const SYSTEM_CONTEXT_KEY = Symbol("systemContext");
|
|
3
|
+
//#endregion
|
|
4
|
+
//#region src/entities/entity-scheduler.ts
|
|
6
5
|
let EntityUpdateType = /* @__PURE__ */ function(EntityUpdateType) {
|
|
7
|
-
/**
|
|
8
|
-
* Indicates the entity should be updated with new data.
|
|
9
|
-
*/
|
|
10
6
|
EntityUpdateType["update"] = "update";
|
|
11
|
-
/**
|
|
12
|
-
* Indicates the entity should be removed from the system.
|
|
13
|
-
*/
|
|
14
7
|
EntityUpdateType["remove"] = "remove";
|
|
15
8
|
return EntityUpdateType;
|
|
16
9
|
}({});
|
|
17
|
-
//#endregion
|
|
18
|
-
//#region src/entities/entity-scheduler.ts
|
|
19
|
-
/**
|
|
20
|
-
* Controls which scheduling modes are paused.
|
|
21
|
-
*/
|
|
22
10
|
let SchedulerPauseType = /* @__PURE__ */ function(SchedulerPauseType) {
|
|
23
|
-
/** Pause both interval timers and frame subscriptions. */
|
|
24
11
|
SchedulerPauseType["full"] = "full";
|
|
25
|
-
/** Pause only frame subscriptions. Interval timers continue firing. */
|
|
26
12
|
SchedulerPauseType["perFrame"] = "perFrame";
|
|
27
|
-
/** Pause only interval timers. Frame subscriptions continue. */
|
|
28
13
|
SchedulerPauseType["intervals"] = "intervals";
|
|
29
14
|
return SchedulerPauseType;
|
|
30
15
|
}({});
|
|
31
16
|
//#endregion
|
|
32
|
-
export { EntityUpdateType, SchedulerPauseType };
|
|
17
|
+
export { EntityUpdateType, SYSTEM_CONTEXT_KEY, SchedulerPauseType };
|
|
33
18
|
|
|
34
19
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/entities/
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/entities/context-repository.ts","../../src/entities/entity-scheduler.ts"],"sourcesContent":["import type { IEntityProxy } from './entity-proxies';\r\n\r\nexport const SYSTEM_CONTEXT_KEY = Symbol('systemContext');\r\n\r\nexport interface IContextRepository {\r\n get<TContext>(proxy: IEntityProxy, key: string | symbol): TContext | undefined;\r\n set<TContext>(proxy: IEntityProxy, key: string | symbol, context: TContext): TContext;\r\n delete(proxy: IEntityProxy, key: string | symbol): boolean;\r\n deleteAll(proxy: IEntityProxy): boolean;\r\n}\r\n","import { EntityTypeUid, IEntityModel } from './entity';\r\nimport { IEntityConfigSnapshot } from './entity-config';\r\nimport { IEntityEvent, IEventData } from './entity-events';\r\nimport { IEntityProxy } from './entity-proxies';\r\nimport { IEntitySnapshot } from './entity-snapshot';\r\n\r\nexport enum EntityUpdateType {\r\n update = 'update',\r\n remove = 'remove'\r\n}\r\n\r\nexport interface IEntityUpdate {\r\n readonly type: EntityUpdateType;\r\n readonly entity: IEntityProxy;\r\n readonly model?: IEntityModel;\r\n readonly snapshot?: IEntitySnapshot;\r\n readonly config?: IEntityConfigSnapshot;\r\n}\r\n\r\nexport interface IEntityDispatchGroup {\r\n readonly entityType: EntityTypeUid;\r\n readonly updates: ReadonlyArray<IEntityUpdate>;\r\n readonly dirtyUpdates: number;\r\n readonly scheduledUpdates: number;\r\n readonly removeUpdates: number;\r\n readonly pipelineMask?: number;\r\n}\r\n\r\nexport type EntityRuntimePendingGroupOptions = {\r\n readonly includeFrameSubscriptions?: boolean;\r\n};\r\n\r\nexport type EntitySchedule = {\r\n readonly proxy: IEntityProxy;\r\n readonly intervalMs?: number;\r\n};\r\n\r\nexport type EntityPriorityModel = {\r\n readonly defaultPriority?: number;\r\n readonly entityTypes?: ReadonlyMap<EntityTypeUid, number>;\r\n};\r\n\r\nexport enum SchedulerPauseType {\r\n full = 'full',\r\n perFrame = 'perFrame',\r\n intervals = 'intervals'\r\n}\r\n\r\nexport interface IEntityRuntimeScheduler {\r\n enqueue(update: IEntityUpdate): void;\r\n enqueueEvent(entity: IEntityProxy, event: IEntityEvent<IEventData>): void;\r\n enqueueEvents(entity: IEntityProxy, events: ReadonlyArray<IEntityEvent<IEventData>>): void;\r\n clearDirtyUpdates(): void;\r\n\r\n schedule(proxy: IEntityProxy, intervalMs?: number): void;\r\n removeSchedule(proxy: IEntityProxy): void;\r\n hasSchedule(proxy: IEntityProxy): boolean;\r\n clearSchedules(): void;\r\n\r\n takePendingGroups(\r\n maxItems?: number,\r\n options?: EntityRuntimePendingGroupOptions\r\n ): ReadonlyArray<IEntityDispatchGroup>;\r\n\r\n skipEntityType(entityType: EntityTypeUid): void;\r\n unskipEntityType(entityType: EntityTypeUid): void;\r\n pause(type?: SchedulerPauseType): void;\r\n resume(): void;\r\n}\r\n\r\nexport interface IEntityRuntimeSchedulerInspector extends IEntityRuntimeScheduler {\r\n readonly dirtyCount: number;\r\n readonly frameSubscriptions: ReadonlySet<IEntityProxy>;\r\n readonly isPaused: boolean;\r\n readonly pauseType: SchedulerPauseType | null;\r\n readonly pendingGroupCount: number;\r\n readonly pendingCount: number;\r\n readonly rawDirtyCount: number;\r\n readonly schedules: ReadonlyArray<EntitySchedule>;\r\n readonly skippedEntityTypes: ReadonlySet<EntityTypeUid>;\r\n\r\n inspectDirtyUpdates(): ReadonlyArray<IEntityUpdate>;\r\n}\r\n"],"mappings":";AAEA,MAAa,qBAAqB,OAAO,eAAe;;;ACIxD,IAAY,mBAAL,yBAAA,kBAAA;CACL,iBAAA,YAAA;CACA,iBAAA,YAAA;;AACF,EAAA,CAAA,CAAA;AAiCA,IAAY,qBAAL,yBAAA,oBAAA;CACL,mBAAA,UAAA;CACA,mBAAA,cAAA;CACA,mBAAA,eAAA;;AACF,EAAA,CAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../../src/factories/pipeline-factory.ts"],"sourcesContent":["import { IPipelineContext } from '../pipelines';\nimport { IPipeline } from '../pipelines/pipeline';\n\n/**\n * Category identifier for grouping performance metrics.\n * Typed as string to allow extension beyond the built-in {@link PipelineCategory} values.\n */\nexport type PipelineCategoryName = string;\n\n/**\n * Built-in metric categories for classifying pipeline and middleware performance entries.\n *\n * - `module` — System module pipelines (initialize, config, update, render, sync phases).\n * - `runtime` — Runtime orchestration pipeline and its middleware.\n * - `system` — Individual system middleware within a module pipeline.\n */\nexport enum PipelineCategory {\n module = 'module',\n runtime = 'runtime',\n system = 'system'\n}\n\n/**\n * Options for identifying and categorizing performance metrics on pipelines.\n */\nexport type PipelineOptions = {\n /** Display name for the pipeline in performance metrics. */\n pipelineName: string;\n /** Category assigned to pipeline-level metric entries. */\n pipelineCategory: PipelineCategoryName;\n /** Category assigned to per-middleware metric entries within this pipeline. */\n middlewareCategory: PipelineCategoryName;\n};\n\n/**\n * Creates pipeline instances for various contexts.\n * Abstracts pipeline creation to support different implementations.\n * Used by the system to instantiate pipelines without coupling to specific implementations.\n */\nexport interface IPipelineFactory {\n /**\n * Creates a new pipeline for the specified context type.\n * @template TContext - The context type for the pipeline. Must extend IPipelineContext.\n * @param options - Optional performance metric options (name, category) for the pipeline.\n * @returns A new pipeline instance ready for middleware registration.\n */\n createPipeline<TContext extends IPipelineContext>(options?: PipelineOptions): IPipeline<TContext>;\n}\n"],"mappings":";;;;;;;;;AAgBA,IAAY,mBAAL,yBAAA,kBAAA;CACL,iBAAA,YAAA;CACA,iBAAA,aAAA;CACA,iBAAA,YAAA;;AACF,EAAA,CAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../src/factories/pipeline-factory.ts"],"sourcesContent":["import type { IPipelineContext } from '../pipelines';\r\nimport { IPipeline } from '../pipelines/pipeline';\r\n\r\n/**\r\n * Category identifier for grouping performance metrics.\r\n * Typed as string to allow extension beyond the built-in {@link PipelineCategory} values.\r\n */\r\nexport type PipelineCategoryName = string;\r\n\r\n/**\r\n * Built-in metric categories for classifying pipeline and middleware performance entries.\r\n *\r\n * - `module` — System module pipelines (initialize, config, update, render, sync phases).\r\n * - `runtime` — Runtime orchestration pipeline and its middleware.\r\n * - `system` — Individual system middleware within a module pipeline.\r\n */\r\nexport enum PipelineCategory {\r\n module = 'module',\r\n runtime = 'runtime',\r\n system = 'system'\r\n}\r\n\r\n/**\r\n * Options for identifying and categorizing performance metrics on pipelines.\r\n */\r\nexport type PipelineOptions = {\r\n /** Display name for the pipeline in performance metrics. */\r\n pipelineName: string;\r\n /** Category assigned to pipeline-level metric entries. */\r\n pipelineCategory: PipelineCategoryName;\r\n /** Category assigned to per-middleware metric entries within this pipeline. */\r\n middlewareCategory: PipelineCategoryName;\r\n};\r\n\r\n/**\r\n * Creates pipeline instances for various contexts.\r\n * Abstracts pipeline creation to support different implementations.\r\n * Used by the system to instantiate pipelines without coupling to specific implementations.\r\n */\r\nexport interface IPipelineFactory {\r\n /**\r\n * Creates a new pipeline for the specified context type.\r\n * @template TContext - The context type for the pipeline. Must extend IPipelineContext.\r\n * @param options - Optional performance metric options (name, category) for the pipeline.\r\n * @returns A new pipeline instance ready for middleware registration.\r\n */\r\n createPipeline<TContext extends IPipelineContext>(options?: PipelineOptions): IPipeline<TContext>;\r\n}\r\n"],"mappings":";;;;;;;;;AAgBA,IAAY,mBAAL,yBAAA,kBAAA;CACL,iBAAA,YAAA;CACA,iBAAA,aAAA;CACA,iBAAA,YAAA;;AACF,EAAA,CAAA,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { IContextFactory, IPipelineFactory,
|
|
1
|
+
import { c as PipelineCategoryName, l as PipelineOptions, o as IPipelineFactory, s as PipelineCategory, t as ISystemsFactory, u as IContextFactory } from "../index-BivyWazf.cjs";
|
|
2
|
+
export { IContextFactory, IPipelineFactory, ISystemsFactory, PipelineCategory, PipelineCategoryName, PipelineOptions };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { IContextFactory, IPipelineFactory,
|
|
1
|
+
import { c as PipelineCategoryName, l as PipelineOptions, o as IPipelineFactory, s as PipelineCategory, t as ISystemsFactory, u as IContextFactory } from "../index-DGyDijY7.mjs";
|
|
2
|
+
export { IContextFactory, IPipelineFactory, ISystemsFactory, PipelineCategory, PipelineCategoryName, PipelineOptions };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/factories/pipeline-factory.ts"],"sourcesContent":["import { IPipelineContext } from '../pipelines';\nimport { IPipeline } from '../pipelines/pipeline';\n\n/**\n * Category identifier for grouping performance metrics.\n * Typed as string to allow extension beyond the built-in {@link PipelineCategory} values.\n */\nexport type PipelineCategoryName = string;\n\n/**\n * Built-in metric categories for classifying pipeline and middleware performance entries.\n *\n * - `module` — System module pipelines (initialize, config, update, render, sync phases).\n * - `runtime` — Runtime orchestration pipeline and its middleware.\n * - `system` — Individual system middleware within a module pipeline.\n */\nexport enum PipelineCategory {\n module = 'module',\n runtime = 'runtime',\n system = 'system'\n}\n\n/**\n * Options for identifying and categorizing performance metrics on pipelines.\n */\nexport type PipelineOptions = {\n /** Display name for the pipeline in performance metrics. */\n pipelineName: string;\n /** Category assigned to pipeline-level metric entries. */\n pipelineCategory: PipelineCategoryName;\n /** Category assigned to per-middleware metric entries within this pipeline. */\n middlewareCategory: PipelineCategoryName;\n};\n\n/**\n * Creates pipeline instances for various contexts.\n * Abstracts pipeline creation to support different implementations.\n * Used by the system to instantiate pipelines without coupling to specific implementations.\n */\nexport interface IPipelineFactory {\n /**\n * Creates a new pipeline for the specified context type.\n * @template TContext - The context type for the pipeline. Must extend IPipelineContext.\n * @param options - Optional performance metric options (name, category) for the pipeline.\n * @returns A new pipeline instance ready for middleware registration.\n */\n createPipeline<TContext extends IPipelineContext>(options?: PipelineOptions): IPipeline<TContext>;\n}\n"],"mappings":";;;;;;;;AAgBA,IAAY,mBAAL,yBAAA,kBAAA;CACL,iBAAA,YAAA;CACA,iBAAA,aAAA;CACA,iBAAA,YAAA;;AACF,EAAA,CAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/factories/pipeline-factory.ts"],"sourcesContent":["import type { IPipelineContext } from '../pipelines';\r\nimport { IPipeline } from '../pipelines/pipeline';\r\n\r\n/**\r\n * Category identifier for grouping performance metrics.\r\n * Typed as string to allow extension beyond the built-in {@link PipelineCategory} values.\r\n */\r\nexport type PipelineCategoryName = string;\r\n\r\n/**\r\n * Built-in metric categories for classifying pipeline and middleware performance entries.\r\n *\r\n * - `module` — System module pipelines (initialize, config, update, render, sync phases).\r\n * - `runtime` — Runtime orchestration pipeline and its middleware.\r\n * - `system` — Individual system middleware within a module pipeline.\r\n */\r\nexport enum PipelineCategory {\r\n module = 'module',\r\n runtime = 'runtime',\r\n system = 'system'\r\n}\r\n\r\n/**\r\n * Options for identifying and categorizing performance metrics on pipelines.\r\n */\r\nexport type PipelineOptions = {\r\n /** Display name for the pipeline in performance metrics. */\r\n pipelineName: string;\r\n /** Category assigned to pipeline-level metric entries. */\r\n pipelineCategory: PipelineCategoryName;\r\n /** Category assigned to per-middleware metric entries within this pipeline. */\r\n middlewareCategory: PipelineCategoryName;\r\n};\r\n\r\n/**\r\n * Creates pipeline instances for various contexts.\r\n * Abstracts pipeline creation to support different implementations.\r\n * Used by the system to instantiate pipelines without coupling to specific implementations.\r\n */\r\nexport interface IPipelineFactory {\r\n /**\r\n * Creates a new pipeline for the specified context type.\r\n * @template TContext - The context type for the pipeline. Must extend IPipelineContext.\r\n * @param options - Optional performance metric options (name, category) for the pipeline.\r\n * @returns A new pipeline instance ready for middleware registration.\r\n */\r\n createPipeline<TContext extends IPipelineContext>(options?: PipelineOptions): IPipeline<TContext>;\r\n}\r\n"],"mappings":";;;;;;;;AAgBA,IAAY,mBAAL,yBAAA,kBAAA;CACL,iBAAA,YAAA;CACA,iBAAA,aAAA;CACA,iBAAA,YAAA;;AACF,EAAA,CAAA,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as Immutable } from "./types-
|
|
1
|
+
import { r as Immutable } from "./types-BaCGIrym.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/pipelines/pipeline-context.d.ts
|
|
4
4
|
/**
|
|
@@ -7,16 +7,16 @@ import { r as Immutable } from "./types-C1ojaDL4.mjs";
|
|
|
7
7
|
*/
|
|
8
8
|
interface IPipelineContext {
|
|
9
9
|
/**
|
|
10
|
-
* The
|
|
10
|
+
* The dispatch state and control interface for the pipeline.
|
|
11
11
|
* Allows middleware to query and influence pipeline behavior.
|
|
12
12
|
*/
|
|
13
|
-
readonly
|
|
13
|
+
readonly dispatch?: PipelineDispatch;
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
16
|
+
* Dispatch state and control interface for pipeline execution.
|
|
17
17
|
* Allows middleware to query status and influence pipeline flow.
|
|
18
18
|
*/
|
|
19
|
-
type
|
|
19
|
+
type PipelineDispatch = {
|
|
20
20
|
/**
|
|
21
21
|
* Flag to request pipeline halt.
|
|
22
22
|
* Set to true to stop executing remaining middleware (cleanup still runs).
|
|
@@ -25,7 +25,7 @@ type PipelineRuntime = {
|
|
|
25
25
|
/**
|
|
26
26
|
* Optional error state if an exception occurred during execution.
|
|
27
27
|
*/
|
|
28
|
-
error?:
|
|
28
|
+
error?: unknown;
|
|
29
29
|
};
|
|
30
30
|
//#endregion
|
|
31
31
|
//#region src/pipelines/middleware.d.ts
|
|
@@ -198,12 +198,12 @@ interface IPipelineRunner<TContext extends IPipelineContext> {
|
|
|
198
198
|
/**
|
|
199
199
|
* Executes the action phase of all middleware in sequence.
|
|
200
200
|
* Middleware at startIndex and onward are executed in order.
|
|
201
|
-
* Execution may terminate early if middleware requests it via context.
|
|
201
|
+
* Execution may terminate early if middleware requests it via context.dispatch.shouldStop.
|
|
202
202
|
* @param context - The context passed to each middleware action.
|
|
203
203
|
* @param middleware - The ordered middleware array to execute.
|
|
204
204
|
* @param startIndex - Optional starting position in the middleware array (default: 0).
|
|
205
205
|
*/
|
|
206
|
-
dispatch(context: Partial<TContext>, middleware: IMiddleware<TContext>[], startIndex?: number): void | Promise<void>;
|
|
206
|
+
dispatch(context: Partial<TContext>, middleware: readonly IMiddleware<TContext>[], startIndex?: number): void | Promise<void>;
|
|
207
207
|
/**
|
|
208
208
|
* Executes the cleanup phase of all middleware in reverse order.
|
|
209
209
|
* All middleware cleanup functions are called (if defined), regardless of errors.
|
|
@@ -211,8 +211,8 @@ interface IPipelineRunner<TContext extends IPipelineContext> {
|
|
|
211
211
|
* @param context - The context passed to each middleware cleanup.
|
|
212
212
|
* @param middleware - The ordered middleware array for cleanup (reversed during execution).
|
|
213
213
|
*/
|
|
214
|
-
cleanup(context: Partial<TContext>, middleware: IMiddleware<TContext>[]): void | Promise<void>;
|
|
214
|
+
cleanup(context: Partial<TContext>, middleware: readonly IMiddleware<TContext>[]): void | Promise<void>;
|
|
215
215
|
}
|
|
216
216
|
//#endregion
|
|
217
|
-
export { IParentMiddleware as a, IMiddleware as c, IParentContext as i, IPipelineContext as l, INestedContext as n, IPipeline as o, INestedMiddleware as r, IMiddlewareRunner as s, IPipelineRunner as t,
|
|
218
|
-
//# sourceMappingURL=index-
|
|
217
|
+
export { IParentMiddleware as a, IMiddleware as c, IParentContext as i, IPipelineContext as l, INestedContext as n, IPipeline as o, INestedMiddleware as r, IMiddlewareRunner as s, IPipelineRunner as t, PipelineDispatch as u };
|
|
218
|
+
//# sourceMappingURL=index-B3DqdxE6.d.mts.map
|