mani-game-engine 1.0.0-pre.9 → 1.0.0-pre.90

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/lib/index.js CHANGED
@@ -1,11 +1,36 @@
1
- export * from './gameEngine';
2
- export * from './entity';
3
- export * from './types';
4
- export * from './scope/scopeContext';
5
- export * from './systemContext';
6
- export { EcsInjector, EntityComponent, GetComponent, GetEntity, GetContext, GetSignal, OnSignal } from './ecsInjector';
7
- import { Inject, InjectId, Injector, InjectType, putIfAbsent } from 'mani-injector';
8
- import { Signal } from 'mani-signal';
9
- export { Injector, InjectType, InjectId, Inject, putIfAbsent };
10
- export { Signal };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Signal = exports.putIfAbsent = exports.Inject = exports.InjectId = exports.InjectType = exports.Injector = exports.GetEntitySignal = exports.OnSignal = exports.GetSignal = exports.GetContext = exports.GetEntity = exports.GetDynamicComponent = exports.GetComponent = exports.EntityComponent = exports.EcsInjector = exports.OnEntitySignal = exports.SystemContext = exports.scopeSignalHandlers = exports.OnScopeSignal = exports.ScopeContext = exports.SCOPE_CONTEXT = exports.EngineSignals = exports.Entity = exports.GameEngine = void 0;
4
+ var gameEngine_1 = require("./gameEngine");
5
+ Object.defineProperty(exports, "GameEngine", { enumerable: true, get: function () { return gameEngine_1.GameEngine; } });
6
+ var entity_1 = require("./entity");
7
+ Object.defineProperty(exports, "Entity", { enumerable: true, get: function () { return entity_1.Entity; } });
8
+ var types_1 = require("./types");
9
+ Object.defineProperty(exports, "EngineSignals", { enumerable: true, get: function () { return types_1.EngineSignals; } });
10
+ var scopeContext_1 = require("./scope/scopeContext");
11
+ Object.defineProperty(exports, "SCOPE_CONTEXT", { enumerable: true, get: function () { return scopeContext_1.SCOPE_CONTEXT; } });
12
+ Object.defineProperty(exports, "ScopeContext", { enumerable: true, get: function () { return scopeContext_1.ScopeContext; } });
13
+ Object.defineProperty(exports, "OnScopeSignal", { enumerable: true, get: function () { return scopeContext_1.OnScopeSignal; } });
14
+ Object.defineProperty(exports, "scopeSignalHandlers", { enumerable: true, get: function () { return scopeContext_1.scopeSignalHandlers; } });
15
+ var systemContext_1 = require("./systemContext");
16
+ Object.defineProperty(exports, "SystemContext", { enumerable: true, get: function () { return systemContext_1.SystemContext; } });
17
+ Object.defineProperty(exports, "OnEntitySignal", { enumerable: true, get: function () { return systemContext_1.OnEntitySignal; } });
18
+ var ecsInjector_1 = require("./ecsInjector");
19
+ Object.defineProperty(exports, "EcsInjector", { enumerable: true, get: function () { return ecsInjector_1.EcsInjector; } });
20
+ Object.defineProperty(exports, "EntityComponent", { enumerable: true, get: function () { return ecsInjector_1.EntityComponent; } });
21
+ Object.defineProperty(exports, "GetComponent", { enumerable: true, get: function () { return ecsInjector_1.GetComponent; } });
22
+ Object.defineProperty(exports, "GetDynamicComponent", { enumerable: true, get: function () { return ecsInjector_1.GetDynamicComponent; } });
23
+ Object.defineProperty(exports, "GetEntity", { enumerable: true, get: function () { return ecsInjector_1.GetEntity; } });
24
+ Object.defineProperty(exports, "GetContext", { enumerable: true, get: function () { return ecsInjector_1.GetContext; } });
25
+ Object.defineProperty(exports, "GetSignal", { enumerable: true, get: function () { return ecsInjector_1.GetSignal; } });
26
+ Object.defineProperty(exports, "OnSignal", { enumerable: true, get: function () { return ecsInjector_1.OnSignal; } });
27
+ Object.defineProperty(exports, "GetEntitySignal", { enumerable: true, get: function () { return ecsInjector_1.GetEntitySignal; } });
28
+ const injector_1 = require("./injector");
29
+ Object.defineProperty(exports, "Inject", { enumerable: true, get: function () { return injector_1.Inject; } });
30
+ Object.defineProperty(exports, "InjectId", { enumerable: true, get: function () { return injector_1.InjectId; } });
31
+ Object.defineProperty(exports, "Injector", { enumerable: true, get: function () { return injector_1.Injector; } });
32
+ Object.defineProperty(exports, "InjectType", { enumerable: true, get: function () { return injector_1.InjectType; } });
33
+ Object.defineProperty(exports, "putIfAbsent", { enumerable: true, get: function () { return injector_1.putIfAbsent; } });
34
+ const mani_signal_1 = require("mani-signal");
35
+ Object.defineProperty(exports, "Signal", { enumerable: true, get: function () { return mani_signal_1.Signal; } });
11
36
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAC,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAGrH,OAAO,EAAK,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AACtF,OAAO,EAAC,MAAM,EAAgC,MAAM,aAAa,CAAC;AAGlE,OAAO,EAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAK,CAAC;AAIjE,OAAO,EAAC,MAAM,EAAgC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2CAA2D;AAAnD,wGAAA,UAAU,OAAA;AAClB,mCAAgC;AAAxB,gGAAA,MAAM,OAAA;AACd,iCAYiB;AAPb,sGAAA,aAAa,OAAA;AAQjB,qDAE8B;AADnB,6GAAA,aAAa,OAAA;AAAE,4GAAA,YAAY,OAAA;AAAE,6GAAA,aAAa,OAAA;AAAE,mHAAA,mBAAmB,OAAA;AAE1E,iDAA8D;AAAtD,8GAAA,aAAa,OAAA;AAAE,+GAAA,cAAc,OAAA;AACrC,6CAA4J;AAApJ,0GAAA,WAAW,OAAA;AAAE,8GAAA,eAAe,OAAA;AAAE,2GAAA,YAAY,OAAA;AAAC,kHAAA,mBAAmB,OAAA;AAAE,wGAAA,SAAS,OAAA;AAAE,yGAAA,UAAU,OAAA;AAAE,wGAAA,SAAS,OAAA;AAAE,uGAAA,QAAQ,OAAA;AAAE,8GAAA,eAAe,OAAA;AAInI,yCAAmF;AAI3C,uFAJ5B,iBAAM,OAI4B;AAAhB,yFAJV,mBAAQ,OAIU;AAA9B,yFAJsB,mBAAQ,OAItB;AAAE,2FAJsB,qBAAU,OAItB;AAAoB,4FAJI,sBAAW,OAIJ;AAH3D,6CAAkE;AAO1D,uFAPA,oBAAM,OAOA"}
@@ -0,0 +1,125 @@
1
+ import 'reflect-metadata';
2
+ export type Class<T = any> = {
3
+ name: string;
4
+ new (...args: any[]): T;
5
+ };
6
+ type ProviderFunction = () => unknown;
7
+ export type ResolverFunction = (context?: any) => unknown;
8
+ export type ID = string | symbol;
9
+ export type Dependency = {
10
+ kind: string;
11
+ index: number;
12
+ };
13
+ declare const enum TypeMappingKind {
14
+ CLASS = 0,
15
+ SINGLETON = 1,
16
+ VALUE = 2,
17
+ PROVIDER = 3
18
+ }
19
+ type ClassTypeMapping = {
20
+ kind: TypeMappingKind.CLASS;
21
+ type: Class;
22
+ };
23
+ type SingletonTypeMapping = {
24
+ kind: TypeMappingKind.SINGLETON;
25
+ type: Class;
26
+ injector: Injector;
27
+ };
28
+ type ValueTypeMapping = {
29
+ kind: TypeMappingKind.VALUE;
30
+ value: unknown;
31
+ };
32
+ type ProviderTypeMapping = {
33
+ kind: TypeMappingKind.PROVIDER;
34
+ provider: ProviderFunction;
35
+ };
36
+ type TypeMapping = ClassTypeMapping | SingletonTypeMapping | ValueTypeMapping | ProviderTypeMapping | {
37
+ kind: undefined;
38
+ };
39
+ declare const enum ClassMappingKind {
40
+ INSTANCE = 0,
41
+ VALUE = 1,
42
+ SINGLETON = 2,
43
+ PROVIDER = 3
44
+ }
45
+ type InstanceClassMapping = {
46
+ kind: ClassMappingKind.INSTANCE;
47
+ };
48
+ type ValueClassMapping = {
49
+ kind: ClassMappingKind.VALUE;
50
+ value: unknown;
51
+ };
52
+ type SingletonClassMapping = {
53
+ kind: ClassMappingKind.SINGLETON;
54
+ injector: Injector;
55
+ };
56
+ type ProviderClassMapping = {
57
+ kind: ClassMappingKind.PROVIDER;
58
+ provider: ProviderFunction;
59
+ };
60
+ type ClassMapping = InstanceClassMapping | ValueClassMapping | SingletonClassMapping | ProviderClassMapping;
61
+ type MapContainer = {
62
+ map: Map<ID, ClassMapping>;
63
+ def?: ClassMapping;
64
+ };
65
+ type SingletonContainer = {
66
+ map: Map<ID, Object>;
67
+ def?: Object;
68
+ };
69
+ type ClassResolverContainer = {
70
+ map: Map<ID, ResolverFunction>;
71
+ def?: ResolverFunction;
72
+ };
73
+ export type ResolverContext = {
74
+ [propName: string]: any;
75
+ type: Class;
76
+ kind: string;
77
+ };
78
+ interface ClassMapper<T extends Class> {
79
+ get: () => InstanceType<T>;
80
+ toValue(value: InstanceType<T>): InstanceType<T>;
81
+ toSingleton(): GetCall<InstanceType<T>>;
82
+ toProvider(provider: () => InstanceType<T>): GetCall<InstanceType<T>>;
83
+ }
84
+ type GetCall<T> = {
85
+ get: () => T;
86
+ };
87
+ interface TypeMapper<T> {
88
+ toClass<C extends Class<T>>(classValue: C): GetCall<T>;
89
+ toSingleton<C extends Class<T>>(classValue: C): GetCall<T>;
90
+ toValue(value: T): T;
91
+ toProvider(provider: () => T): GetCall<T>;
92
+ }
93
+ export declare const putIfAbsent: <T extends Map<K, V>, K, V>(map: T, key: K, value: () => V) => V;
94
+ export declare const createDependencyAnnotation: (cb: (type: any, index: number, dependantType: Class) => Dependency) => (dependantType: Class, _propertyKey: any, index: number) => any;
95
+ export declare const Inject: (dependantType: Class, _propertyKey: any, index: number) => any;
96
+ export declare const InjectId: (id: ID) => (dependantType: Class, _propertyKey: any, index: number) => any;
97
+ export declare const InjectType: (id: ID) => (dependantType: Class, _propertyKey: any, index: number) => any;
98
+ type DependencyExtensionResolver = (context: ResolverContext, dependency: Dependency) => ResolverFunction;
99
+ export declare class Injector {
100
+ readonly parent?: Injector | undefined;
101
+ static readonly dependencyMap: Map<Class<any>, Dependency[]>;
102
+ protected readonly typeMappings: Map<ID, TypeMapping>;
103
+ protected readonly classMappings: Map<Class<any>, MapContainer>;
104
+ protected readonly parameterResolverArrays: Map<Class<any>, ResolverFunction[]>;
105
+ protected readonly classResolvers: Map<Class<any>, ClassResolverContainer>;
106
+ protected readonly typeResolvers: Map<ID, ResolverFunction>;
107
+ protected readonly singletons: Map<Class<any>, SingletonContainer>;
108
+ protected readonly typeSingletons: Map<ID, Object>;
109
+ protected readonly dependencyResolverExtensions: Map<string, DependencyExtensionResolver>;
110
+ constructor(parent?: Injector | undefined);
111
+ createChild(): this;
112
+ addExtensionResolver(kind: string, resolver: DependencyExtensionResolver): void;
113
+ map<T extends Class>(type: T, id?: ID): ClassMapper<T>;
114
+ mapType<T>(id: ID): TypeMapper<T>;
115
+ getType<T>(id: ID): T;
116
+ get<T extends Class>(type: T, id?: ID): InstanceType<T>;
117
+ createInstance<T extends Class>(type: T): any;
118
+ protected createResolverArray(resolverContext: ResolverContext): ResolverFunction[];
119
+ protected getClassMapping(type: Class, id: ID): ClassMapping | undefined;
120
+ protected getClassIdResolver(dependencyType: Class, id: ID): ResolverFunction | undefined;
121
+ protected getTypeResolver(id: ID): ResolverFunction | undefined;
122
+ protected getCreateInstanceResolver(type: Class): () => any;
123
+ protected getTypeMapping(id: ID): TypeMapping | undefined;
124
+ }
125
+ export {};
@@ -0,0 +1,305 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Injector = exports.InjectType = exports.InjectId = exports.Inject = exports.createDependencyAnnotation = exports.putIfAbsent = void 0;
4
+ require("reflect-metadata");
5
+ const isInjectDependency = (dep) => dep.kind === 'inject';
6
+ const isTypeDependency = (dep) => dep.kind === 'type';
7
+ const putIfAbsent = (map, key, value) => {
8
+ let v = map.get(key);
9
+ if (!v) {
10
+ v = value();
11
+ map.set(key, v);
12
+ }
13
+ return v;
14
+ };
15
+ exports.putIfAbsent = putIfAbsent;
16
+ const createDependencyAnnotation = (cb) => (dependantType, _propertyKey, index) => {
17
+ const metadata = Reflect.getMetadata('design:paramtypes', dependantType);
18
+ const type = metadata[index];
19
+ if (type === dependantType) {
20
+ throw new Error('Could not inject class in itself.');
21
+ }
22
+ const depList = (0, exports.putIfAbsent)(Injector.dependencyMap, dependantType, () => []);
23
+ depList.push(cb(type, index, dependantType));
24
+ };
25
+ exports.createDependencyAnnotation = createDependencyAnnotation;
26
+ exports.Inject = (0, exports.createDependencyAnnotation)((type, index) => ({ kind: 'inject', index, type, id: '' }));
27
+ const InjectId = (id) => (0, exports.createDependencyAnnotation)((type, index) => ({ kind: 'inject', index, type, id }));
28
+ exports.InjectId = InjectId;
29
+ const InjectType = (id) => (0, exports.createDependencyAnnotation)((_type, index) => ({ kind: 'type', index, id }));
30
+ exports.InjectType = InjectType;
31
+ class Injector {
32
+ constructor(parent) {
33
+ this.parent = parent;
34
+ this.typeMappings = new Map();
35
+ this.classMappings = new Map();
36
+ this.parameterResolverArrays = new Map();
37
+ this.classResolvers = new Map();
38
+ this.typeResolvers = new Map();
39
+ this.singletons = new Map();
40
+ this.typeSingletons = new Map();
41
+ this.dependencyResolverExtensions = parent ? parent.dependencyResolverExtensions : new Map();
42
+ this.map(Injector).toValue(this);
43
+ }
44
+ createChild() {
45
+ return new this.constructor(this);
46
+ }
47
+ addExtensionResolver(kind, resolver) {
48
+ this.dependencyResolverExtensions.set(kind, resolver);
49
+ }
50
+ map(type, id = '') {
51
+ const mapper = new InternalClassMapper(this, type, id);
52
+ const idMappings = (0, exports.putIfAbsent)(this.classMappings, type, () => ({ map: new Map() }));
53
+ if (id === '') {
54
+ idMappings.def = mapper.mapping;
55
+ }
56
+ else {
57
+ idMappings.map.set(id, mapper.mapping);
58
+ }
59
+ return mapper;
60
+ }
61
+ mapType(id) {
62
+ const typeMapper = new InternalTypeMapper(this, id);
63
+ this.typeMappings.set(id, typeMapper.mapping);
64
+ return typeMapper;
65
+ }
66
+ getType(id) {
67
+ const typeResolver = this.getTypeResolver(id);
68
+ if (!typeResolver) {
69
+ throw new Error(`No Mapping for Type with id: '${String(id)}'`);
70
+ }
71
+ return typeResolver();
72
+ }
73
+ get(type, id = '') {
74
+ const resolver = this.getClassIdResolver(type, id);
75
+ if (!resolver) {
76
+ throw new Error(`No Mapping for Type ${type.name}` + String(id === '' ? '' : ` with id: '${String(id)}'`));
77
+ }
78
+ return resolver();
79
+ }
80
+ createInstance(type) {
81
+ return this.getCreateInstanceResolver(type)();
82
+ }
83
+ createResolverArray(resolverContext) {
84
+ const { type } = resolverContext;
85
+ const result = [];
86
+ const dependencies = Injector.dependencyMap.get(resolverContext.type);
87
+ if (!dependencies) {
88
+ return [];
89
+ }
90
+ for (const dependency of dependencies) {
91
+ let resolver;
92
+ if (isInjectDependency(dependency)) {
93
+ if (!dependency.type)
94
+ throw new Error(`Undefined dependency type for ${type.name}. Check for circular dependency.`);
95
+ const classIdResolver = this.getClassIdResolver(dependency.type, dependency.id);
96
+ if (!classIdResolver) {
97
+ throw new Error(`Could not inject ${dependency.type.name} into ${resolverContext.type.name}`);
98
+ }
99
+ resolver = classIdResolver;
100
+ }
101
+ else if (isTypeDependency(dependency)) {
102
+ const typeResolver = this.getTypeResolver(dependency.id);
103
+ if (!typeResolver) {
104
+ throw new Error(`Could not inject type with id '${String(dependency.id)}' into ${resolverContext.type.name}`);
105
+ }
106
+ resolver = typeResolver;
107
+ }
108
+ else {
109
+ const extensionResolver = this.dependencyResolverExtensions.get(dependency.kind);
110
+ if (!extensionResolver) {
111
+ throw new Error(`no dependency resolver for '${dependency.kind}'`);
112
+ }
113
+ resolver = extensionResolver(resolverContext, dependency);
114
+ }
115
+ result[dependency.index] = resolver;
116
+ }
117
+ return result;
118
+ }
119
+ getClassMapping(type, id) {
120
+ const idMapping = this.classMappings.get(type);
121
+ if (!idMapping) {
122
+ if (!this.parent)
123
+ return undefined;
124
+ return this.parent.getClassMapping(type, id);
125
+ }
126
+ const mapping = id === '' ? idMapping.def : idMapping.map.get(id);
127
+ if (!mapping) {
128
+ if (!this.parent)
129
+ return undefined;
130
+ return this.parent.getClassMapping(type, id);
131
+ }
132
+ return mapping;
133
+ }
134
+ getClassIdResolver(dependencyType, id) {
135
+ const getResolver = () => {
136
+ const mapping = this.getClassMapping(dependencyType, id);
137
+ if (!mapping)
138
+ return undefined;
139
+ switch (mapping.kind) {
140
+ case 0:
141
+ return this.getCreateInstanceResolver(dependencyType);
142
+ case 1:
143
+ const instance = mapping.value;
144
+ return () => instance;
145
+ case 2:
146
+ let singleton;
147
+ const singletonContainer = (0, exports.putIfAbsent)(mapping.injector.singletons, dependencyType, () => ({ map: new Map() }));
148
+ if (id === '') {
149
+ if (singletonContainer.def) {
150
+ singleton = singletonContainer.def;
151
+ }
152
+ else {
153
+ singletonContainer.def = mapping.injector.createInstance(dependencyType);
154
+ singleton = singletonContainer.def;
155
+ }
156
+ }
157
+ else {
158
+ singleton = (0, exports.putIfAbsent)(singletonContainer.map, id, () => mapping.injector.createInstance(dependencyType));
159
+ }
160
+ return () => singleton;
161
+ case 3:
162
+ const providerInstance = mapping.provider();
163
+ return () => providerInstance;
164
+ }
165
+ };
166
+ const container = (0, exports.putIfAbsent)(this.classResolvers, dependencyType, () => ({
167
+ def: undefined,
168
+ map: new Map(),
169
+ }));
170
+ if (id === '') {
171
+ if (container.def) {
172
+ return container.def;
173
+ }
174
+ const resolver = getResolver();
175
+ container.def = resolver;
176
+ return resolver;
177
+ }
178
+ else {
179
+ return (0, exports.putIfAbsent)(container.map, id, () => getResolver());
180
+ }
181
+ }
182
+ getTypeResolver(id) {
183
+ return (0, exports.putIfAbsent)(this.typeResolvers, id, () => {
184
+ const mapping = this.getTypeMapping(id);
185
+ if (!mapping)
186
+ return undefined;
187
+ if (mapping.kind === undefined) {
188
+ throw new Error(`No TypeMapping for id ${String(id)}.`);
189
+ }
190
+ if (mapping.kind === 2) {
191
+ const instance = mapping.value;
192
+ return () => instance;
193
+ }
194
+ else if (mapping.kind === 0) {
195
+ return this.getCreateInstanceResolver(mapping.type);
196
+ }
197
+ else if (mapping.kind === 1) {
198
+ const instance = (0, exports.putIfAbsent)(mapping.injector.typeSingletons, id, () => mapping.injector.createInstance(mapping.type));
199
+ return () => instance;
200
+ }
201
+ else {
202
+ const providerInstance = mapping.provider();
203
+ return () => providerInstance;
204
+ }
205
+ });
206
+ }
207
+ getCreateInstanceResolver(type) {
208
+ const resolvers = (0, exports.putIfAbsent)(this.parameterResolverArrays, type, () => this.createResolverArray({
209
+ kind: 'class',
210
+ type: type,
211
+ }));
212
+ if (resolvers.length === 0) {
213
+ return () => {
214
+ const instance = new type();
215
+ return instance;
216
+ };
217
+ }
218
+ const args = new Array(resolvers.length);
219
+ return () => {
220
+ for (let i = 0; i < args.length; i++) {
221
+ args[i] = resolvers[i]();
222
+ }
223
+ const instance = new type(...args);
224
+ return instance;
225
+ };
226
+ }
227
+ getTypeMapping(id) {
228
+ const mapping = this.typeMappings.get(id);
229
+ if (!mapping) {
230
+ if (!this.parent)
231
+ return undefined;
232
+ return this.parent.getTypeMapping(id);
233
+ }
234
+ return mapping;
235
+ }
236
+ }
237
+ exports.Injector = Injector;
238
+ Injector.dependencyMap = new Map();
239
+ class InternalTypeMapper {
240
+ constructor(injector, id) {
241
+ this.injector = injector;
242
+ this.mapping = { kind: undefined };
243
+ this.getCall = { get: () => this.injector.getType(id) };
244
+ }
245
+ toClass(classValue) {
246
+ Object.assign(this.mapping, {
247
+ kind: 0,
248
+ type: classValue,
249
+ });
250
+ return this.getCall;
251
+ }
252
+ toSingleton(classValue) {
253
+ Object.assign(this.mapping, {
254
+ kind: 1,
255
+ type: classValue,
256
+ injector: this.injector,
257
+ });
258
+ return this.getCall;
259
+ }
260
+ toValue(value) {
261
+ Object.assign(this.mapping, {
262
+ kind: 2,
263
+ value: value,
264
+ });
265
+ return value;
266
+ }
267
+ toProvider(provider) {
268
+ Object.assign(this.mapping, {
269
+ kind: 3,
270
+ provider: provider,
271
+ });
272
+ return this.getCall;
273
+ }
274
+ }
275
+ class InternalClassMapper {
276
+ constructor(injector, type, id) {
277
+ this.injector = injector;
278
+ this.mapping = { kind: 0 };
279
+ this.getCall = { get: () => this.injector.get(type, id) };
280
+ this.get = () => this.injector.get(type, id);
281
+ }
282
+ toValue(value) {
283
+ Object.assign(this.mapping, {
284
+ kind: 1,
285
+ value: value,
286
+ });
287
+ return value;
288
+ }
289
+ toSingleton() {
290
+ Object.assign(this.mapping, {
291
+ kind: 2,
292
+ injector: this.injector,
293
+ });
294
+ this.mapping.kind = 2;
295
+ return this.getCall;
296
+ }
297
+ toProvider(provider) {
298
+ Object.assign(this.mapping, {
299
+ kind: 3,
300
+ provider: provider,
301
+ });
302
+ return this.getCall;
303
+ }
304
+ }
305
+ //# sourceMappingURL=injector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injector.js","sourceRoot":"","sources":["../src/injector.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,14 @@
1
1
  import { Class, EcsInjector, Signal, SignalCallback } from '../index';
2
- import { ID } from 'mani-injector';
3
- export declare type ScopeSignalOptions = {
2
+ import { ID } from '../injector';
3
+ export type ScopeSignalOptions = {
4
4
  keepAlive?: boolean | Scope[];
5
5
  group?: string;
6
6
  };
7
7
  export declare const scopeSignalHandlers: Map<Object, [string, ID, (ScopeSignalOptions | undefined)?][]>;
8
- export declare const OnScopeSignal: (id: ID, options?: ScopeSignalOptions | undefined) => (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
8
+ export declare const OnScopeSignal: (id: ID, options?: ScopeSignalOptions) => (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
9
+ export declare const SCOPE_CONTEXT: {
10
+ log: boolean;
11
+ };
9
12
  export interface Scope {
10
13
  [propName: string]: any;
11
14
  onEnter?(): void;
@@ -15,28 +18,48 @@ export interface Scope {
15
18
  onActivate?(): void;
16
19
  onDeactivate?(): void;
17
20
  }
18
- export declare type ScopeMapping = (params: {
21
+ export type ScopeMapping = (params: {
19
22
  injector: EcsInjector;
20
23
  registerScopeService: (serviceClass: Class) => void;
21
- }) => void;
24
+ onEnter: Signal<ScopeContext>;
25
+ onExit: Signal<ScopeContext>;
26
+ onSubReturn: Signal<ScopeContext>;
27
+ onSubExit: Signal<ScopeContext>;
28
+ onActivate: Signal<ScopeContext>;
29
+ onDeactivate: Signal<ScopeContext>;
30
+ }) => any | Promise<void>;
22
31
  interface AddScopeSignalOptions extends ScopeSignalOptions {
23
32
  context?: unknown;
24
33
  }
25
- export declare class ScopeContext {
34
+ export type ScopeChangeParams = {
35
+ from: ScopeContext;
36
+ to: ScopeContext;
37
+ };
38
+ export declare class ScopeContext<T extends Class = Class<Scope>> {
26
39
  private parent?;
27
- readonly scope: Scope;
40
+ readonly scope: InstanceType<T>;
28
41
  readonly injector: EcsInjector;
29
42
  private readonly stack;
30
43
  private readonly signalBindings;
31
44
  private serviceBindings;
32
45
  private closed;
33
46
  private muteKeepAliveSignals;
34
- constructor(injector: EcsInjector, scopeClass: Class, mapping?: ScopeMapping, parent?: ScopeContext | undefined);
47
+ readonly onEnter: Signal<ScopeContext<Class<Scope>>>;
48
+ readonly onExit: Signal<ScopeContext<Class<Scope>>>;
49
+ readonly onSubReturn: Signal<ScopeContext<Class<Scope>>>;
50
+ readonly onSubExit: Signal<ScopeContext<Class<Scope>>>;
51
+ readonly onActivate: Signal<ScopeContext<Class<Scope>>>;
52
+ readonly onDeactivate: Signal<ScopeContext<Class<Scope>>>;
53
+ private readonly creationTime;
54
+ readonly onScopeChange: Signal<ScopeChangeParams>;
55
+ get runtime(): number;
56
+ constructor(injector: EcsInjector, scopeClass: T, mapping?: ScopeMapping, parent?: ScopeContext<Class<Scope>> | undefined, resolve?: () => void);
35
57
  get isRoot(): boolean;
58
+ get target(): Scope | undefined;
36
59
  get isActive(): boolean;
37
- get activeContext(): ScopeContext;
38
- enterScope(scopeClass: Class, mapping?: ScopeMapping): ScopeContext | undefined;
39
- exitScope(target?: Scope): void;
60
+ get activeContext(): ScopeContext<Class<Scope>>;
61
+ enterScope(scopeClass: Class, mapping?: ScopeMapping): Promise<ScopeContext<Class<Scope>>>;
62
+ exitScope(target?: Scope): Promise<void>;
40
63
  closeSubScopes(): void;
41
64
  private logStack;
42
65
  getStackClasses(): Scope[];