mani-game-engine 1.0.0-pre.3 → 1.0.0-pre.32

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,121 @@
1
+ import 'reflect-metadata';
2
+ export declare type Class<T = any> = {
3
+ name: string;
4
+ new (...args: any[]): T;
5
+ };
6
+ declare type ProviderFunction = () => unknown;
7
+ export declare type ResolverFunction = (context?: any) => unknown;
8
+ export declare type ID = string | symbol;
9
+ export declare 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
+ declare type ClassTypeMapping = {
20
+ kind: TypeMappingKind.CLASS;
21
+ type: Class;
22
+ };
23
+ declare type SingletonTypeMapping = {
24
+ kind: TypeMappingKind.SINGLETON;
25
+ type: Class;
26
+ injector: Injector;
27
+ };
28
+ declare type ValueTypeMapping = {
29
+ kind: TypeMappingKind.VALUE;
30
+ value: unknown;
31
+ };
32
+ declare type ProviderTypeMapping = {
33
+ kind: TypeMappingKind.PROVIDER;
34
+ provider: ProviderFunction;
35
+ };
36
+ declare 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
+ declare type InstanceClassMapping = {
46
+ kind: ClassMappingKind.INSTANCE;
47
+ };
48
+ declare type ValueClassMapping = {
49
+ kind: ClassMappingKind.VALUE;
50
+ value: unknown;
51
+ };
52
+ declare type SingletonClassMapping = {
53
+ kind: ClassMappingKind.SINGLETON;
54
+ injector: Injector;
55
+ };
56
+ declare type ProviderClassMapping = {
57
+ kind: ClassMappingKind.PROVIDER;
58
+ provider: ProviderFunction;
59
+ };
60
+ declare type ClassMapping = InstanceClassMapping | ValueClassMapping | SingletonClassMapping | ProviderClassMapping;
61
+ declare type MapContainer = {
62
+ map: Map<ID, ClassMapping>;
63
+ def?: ClassMapping;
64
+ };
65
+ declare type SingletonContainer = {
66
+ map: Map<ID, Object>;
67
+ def?: Object;
68
+ };
69
+ declare type ClassResolverContainer = {
70
+ map: Map<ID, ResolverFunction>;
71
+ def?: ResolverFunction;
72
+ };
73
+ export declare type ResolverContext = {
74
+ [propName: string]: any;
75
+ type: Class;
76
+ kind: string;
77
+ };
78
+ interface ClassMapper<T extends Class> {
79
+ toValue(value: InstanceType<T>): void;
80
+ toSingleton(): void;
81
+ toProvider(provider: () => InstanceType<T>): void;
82
+ }
83
+ interface TypeMapper<T> {
84
+ toClass<C extends Class<T>>(classValue: C): void;
85
+ toSingleton<C extends Class<T>>(classValue: C): void;
86
+ toValue(value: T): void;
87
+ toProvider(provider: () => T): void;
88
+ }
89
+ export declare const putIfAbsent: <T extends Map<K, V>, K, V>(map: T, key: K, value: () => V) => V;
90
+ export declare const createDependencyAnnotation: (cb: (type: any, index: number, dependantType: Class) => Dependency) => (dependantType: Class, _propertyKey: string | symbol, index: number) => any;
91
+ export declare const Inject: (dependantType: Class, _propertyKey: string | symbol, index: number) => any;
92
+ export declare const InjectId: (id: ID) => (dependantType: Class, _propertyKey: string | symbol, index: number) => any;
93
+ export declare const InjectType: (id: ID) => (dependantType: Class, _propertyKey: string | symbol, index: number) => any;
94
+ declare type DependencyExtensionResolver = (context: ResolverContext, dependency: Dependency) => ResolverFunction;
95
+ export declare class Injector {
96
+ readonly parent?: Injector | undefined;
97
+ static readonly dependencyMap: Map<Class<any>, Dependency[]>;
98
+ protected readonly typeMappings: Map<ID, TypeMapping>;
99
+ protected readonly classMappings: Map<Class<any>, MapContainer>;
100
+ protected readonly parameterResolverArrays: Map<Class<any>, ResolverFunction[]>;
101
+ protected readonly classResolvers: Map<Class<any>, ClassResolverContainer>;
102
+ protected readonly typeResolvers: Map<ID, ResolverFunction>;
103
+ protected readonly singletons: Map<Class<any>, SingletonContainer>;
104
+ protected readonly typeSingletons: Map<ID, Object>;
105
+ protected readonly dependencyResolverExtensions: Map<string, DependencyExtensionResolver>;
106
+ constructor(parent?: Injector | undefined);
107
+ createChild(): this;
108
+ addExtensionResolver(kind: string, resolver: DependencyExtensionResolver): void;
109
+ map<T extends Class>(type: T, id?: ID): ClassMapper<T>;
110
+ mapType<T>(id: ID): TypeMapper<T>;
111
+ getType<T>(id: ID): T;
112
+ get<T extends Class>(type: T, id?: ID): InstanceType<T>;
113
+ protected createInstance<T extends Class>(type: T): any;
114
+ protected createResolverArray(resolverContext: ResolverContext): ResolverFunction[];
115
+ protected getClassMapping(type: Class, id: ID): ClassMapping | undefined;
116
+ protected getClassIdResolver(dependencyType: Class, id: ID): ResolverFunction | undefined;
117
+ protected getTypeResolver(id: ID): ResolverFunction | undefined;
118
+ protected getCreateInstanceResolver(type: Class): () => any;
119
+ protected getTypeMapping(id: ID): TypeMapping | undefined;
120
+ }
121
+ export {};
@@ -0,0 +1,290 @@
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);
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);
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
+ return mapping.provider;
163
+ }
164
+ };
165
+ const container = (0, exports.putIfAbsent)(this.classResolvers, dependencyType, () => ({
166
+ def: undefined,
167
+ map: new Map(),
168
+ }));
169
+ if (id === '') {
170
+ if (container.def) {
171
+ return container.def;
172
+ }
173
+ const resolver = getResolver();
174
+ container.def = resolver;
175
+ return resolver;
176
+ }
177
+ else {
178
+ return (0, exports.putIfAbsent)(container.map, id, () => getResolver());
179
+ }
180
+ }
181
+ getTypeResolver(id) {
182
+ return (0, exports.putIfAbsent)(this.typeResolvers, id, () => {
183
+ const mapping = this.getTypeMapping(id);
184
+ if (!mapping)
185
+ return undefined;
186
+ if (mapping.kind === undefined) {
187
+ throw new Error(`No TypeMapping for id ${String(id)}.`);
188
+ }
189
+ if (mapping.kind === 2) {
190
+ const instance = mapping.value;
191
+ return () => instance;
192
+ }
193
+ else if (mapping.kind === 0) {
194
+ return this.getCreateInstanceResolver(mapping.type);
195
+ }
196
+ else if (mapping.kind === 1) {
197
+ const instance = (0, exports.putIfAbsent)(mapping.injector.typeSingletons, id, () => mapping.injector.createInstance(mapping.type));
198
+ return () => instance;
199
+ }
200
+ else {
201
+ return mapping.provider;
202
+ }
203
+ });
204
+ }
205
+ getCreateInstanceResolver(type) {
206
+ const resolvers = (0, exports.putIfAbsent)(this.parameterResolverArrays, type, () => this.createResolverArray({
207
+ kind: 'class',
208
+ type: type,
209
+ }));
210
+ if (resolvers.length === 0) {
211
+ return () => new type();
212
+ }
213
+ const args = new Array(resolvers.length);
214
+ return () => {
215
+ for (let i = 0; i < args.length; i++) {
216
+ args[i] = resolvers[i]();
217
+ }
218
+ return new type(...args);
219
+ };
220
+ }
221
+ getTypeMapping(id) {
222
+ const mapping = this.typeMappings.get(id);
223
+ if (!mapping) {
224
+ if (!this.parent)
225
+ return undefined;
226
+ return this.parent.getTypeMapping(id);
227
+ }
228
+ return mapping;
229
+ }
230
+ }
231
+ exports.Injector = Injector;
232
+ Injector.dependencyMap = new Map();
233
+ class InternalTypeMapper {
234
+ constructor(injector) {
235
+ this.injector = injector;
236
+ this.mapping = { kind: undefined };
237
+ }
238
+ toClass(classValue) {
239
+ Object.assign(this.mapping, {
240
+ kind: 0,
241
+ type: classValue,
242
+ });
243
+ }
244
+ toSingleton(classValue) {
245
+ Object.assign(this.mapping, {
246
+ kind: 1,
247
+ type: classValue,
248
+ injector: this.injector,
249
+ });
250
+ }
251
+ toValue(value) {
252
+ Object.assign(this.mapping, {
253
+ kind: 2,
254
+ value: value,
255
+ });
256
+ }
257
+ toProvider(provider) {
258
+ Object.assign(this.mapping, {
259
+ kind: 3,
260
+ provider: provider,
261
+ });
262
+ }
263
+ }
264
+ class InternalClassMapper {
265
+ constructor(injector) {
266
+ this.injector = injector;
267
+ this.mapping = { kind: 0 };
268
+ }
269
+ toValue(value) {
270
+ Object.assign(this.mapping, {
271
+ kind: 1,
272
+ value: value,
273
+ });
274
+ return value;
275
+ }
276
+ toSingleton() {
277
+ Object.assign(this.mapping, {
278
+ kind: 2,
279
+ injector: this.injector,
280
+ });
281
+ this.mapping.kind = 2;
282
+ }
283
+ toProvider(provider) {
284
+ Object.assign(this.mapping, {
285
+ kind: 3,
286
+ provider: provider,
287
+ });
288
+ }
289
+ }
290
+ //# sourceMappingURL=injector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injector.js","sourceRoot":"","sources":["../src/injector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { Class, EcsInjector, Signal, SignalCallback } from '../index';
2
+ import { ID } from '../injector';
3
+ export declare type ScopeSignalOptions = {
4
+ keepAlive?: boolean | Scope[];
5
+ group?: string;
6
+ };
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;
9
+ export declare const SCOPE_CONTEXT: {
10
+ log: boolean;
11
+ };
12
+ export interface Scope {
13
+ [propName: string]: any;
14
+ onEnter?(): void;
15
+ onExit?(): void;
16
+ onSubReturn?(): void;
17
+ onSubExit?(): void;
18
+ onActivate?(): void;
19
+ onDeactivate?(): void;
20
+ }
21
+ export declare type ScopeMapping = (params: {
22
+ injector: EcsInjector;
23
+ registerScopeService: (serviceClass: Class) => void;
24
+ }) => void;
25
+ interface AddScopeSignalOptions extends ScopeSignalOptions {
26
+ context?: unknown;
27
+ }
28
+ export declare class ScopeContext {
29
+ private parent?;
30
+ readonly scope: Scope;
31
+ readonly injector: EcsInjector;
32
+ private readonly stack;
33
+ private readonly signalBindings;
34
+ private serviceBindings;
35
+ private closed;
36
+ private muteKeepAliveSignals;
37
+ constructor(injector: EcsInjector, scopeClass: Class, mapping?: ScopeMapping, parent?: ScopeContext | undefined);
38
+ get isRoot(): boolean;
39
+ get target(): Scope | undefined;
40
+ get isActive(): boolean;
41
+ get activeContext(): ScopeContext;
42
+ enterScope(scopeClass: Class, mapping?: ScopeMapping): ScopeContext | undefined;
43
+ exitScope(target?: Scope): void;
44
+ closeSubScopes(): void;
45
+ private logStack;
46
+ getStackClasses(): Scope[];
47
+ addScopeSignal<T>(signal: Signal<T>, callback: SignalCallback<T>, params?: AddScopeSignalOptions): void;
48
+ disableKeepAliveSignals(): void;
49
+ enableKeepAliveSignals(): void;
50
+ private updateSignalBindings;
51
+ private detachSignalBindings;
52
+ private mapScopeSignals;
53
+ private mapServiceSignals;
54
+ private detachServiceBindings;
55
+ private exitThis;
56
+ }
57
+ export {};