@rolster/invertly 1.1.0 → 1.2.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/dist/cjs/index.js +37 -34
- package/dist/cjs/index.js.map +1 -1
- package/dist/es/index.js +37 -34
- package/dist/es/index.js.map +1 -1
- package/dist/esm/factories/container.factory.js +18 -24
- package/dist/esm/factories/container.factory.js.map +1 -1
- package/dist/esm/factories/index.js +8 -8
- package/dist/esm/stores/context.store.d.ts +4 -1
- package/dist/esm/stores/context.store.js +11 -2
- package/dist/esm/stores/context.store.js.map +1 -1
- package/dist/esm/types/context.type.d.ts +2 -0
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -4,9 +4,18 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
require('reflect-metadata');
|
|
6
6
|
|
|
7
|
-
class Context
|
|
7
|
+
class Context {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.store = new Map();
|
|
10
|
+
}
|
|
11
|
+
set(key, value) {
|
|
12
|
+
this.store.set(key, value);
|
|
13
|
+
}
|
|
8
14
|
request(key) {
|
|
9
|
-
return this.get(key);
|
|
15
|
+
return this.store.get(key);
|
|
16
|
+
}
|
|
17
|
+
has(key) {
|
|
18
|
+
return this.store.has(key);
|
|
10
19
|
}
|
|
11
20
|
}
|
|
12
21
|
|
|
@@ -95,17 +104,17 @@ class Warehouse {
|
|
|
95
104
|
}
|
|
96
105
|
}
|
|
97
106
|
class Dependency {
|
|
98
|
-
constructor(
|
|
107
|
+
constructor(warehouse, context) {
|
|
99
108
|
this.warehouse = warehouse;
|
|
100
109
|
this.context = context;
|
|
101
110
|
this.scope = new ScopeStore();
|
|
102
111
|
}
|
|
103
112
|
build(injectable) {
|
|
104
|
-
const
|
|
105
|
-
if (!
|
|
113
|
+
const options = this.warehouse.injectables.request(injectable);
|
|
114
|
+
if (!options) {
|
|
106
115
|
throw Error(`Class ${injectable.toString()} is not found in the collection`);
|
|
107
116
|
}
|
|
108
|
-
const { scopeable, singleton, token } =
|
|
117
|
+
const { scopeable, singleton, token } = options;
|
|
109
118
|
return this.createInstance({ token, scopeable, singleton });
|
|
110
119
|
}
|
|
111
120
|
createObject(token) {
|
|
@@ -116,8 +125,8 @@ class Dependency {
|
|
|
116
125
|
: this.createTokenArgs(token);
|
|
117
126
|
return new Constructor(...params);
|
|
118
127
|
}
|
|
119
|
-
reflectTokens(
|
|
120
|
-
return Reflect.getMetadata('design:paramtypes',
|
|
128
|
+
reflectTokens(constructable) {
|
|
129
|
+
return Reflect.getMetadata('design:paramtypes', constructable);
|
|
121
130
|
}
|
|
122
131
|
createFromScope({ token, scope }) {
|
|
123
132
|
const instance = scope.request(token);
|
|
@@ -129,32 +138,29 @@ class Dependency {
|
|
|
129
138
|
return object;
|
|
130
139
|
}
|
|
131
140
|
createFromContainer(token) {
|
|
132
|
-
|
|
133
|
-
return this.createFromScope({ token, scope });
|
|
141
|
+
return this.createFromScope({ token, scope: this.warehouse.scope });
|
|
134
142
|
}
|
|
135
|
-
createInstance(
|
|
136
|
-
const { token, scopeable, singleton } =
|
|
137
|
-
const { scope } = this;
|
|
143
|
+
createInstance(options) {
|
|
144
|
+
const { token, scopeable, singleton } = options;
|
|
138
145
|
if (singleton) {
|
|
139
146
|
return this.createFromContainer(token);
|
|
140
147
|
}
|
|
141
148
|
if (scopeable) {
|
|
142
|
-
return this.createFromScope({ token, scope });
|
|
149
|
+
return this.createFromScope({ token, scope: this.scope });
|
|
143
150
|
}
|
|
144
151
|
return this.createObject(token);
|
|
145
152
|
}
|
|
146
153
|
createFromDecorator(inject) {
|
|
147
154
|
const { token, scopeable, singleton } = inject;
|
|
148
155
|
const locator = requestInLocator(token);
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
156
|
+
return this.createInstance({
|
|
157
|
+
token: locator?.useClass ?? token,
|
|
158
|
+
scopeable,
|
|
159
|
+
singleton
|
|
160
|
+
});
|
|
154
161
|
}
|
|
155
162
|
createReflectArgs({ tokens, token }) {
|
|
156
|
-
const
|
|
157
|
-
const injects = warehouse.injects.request(token);
|
|
163
|
+
const injects = this.warehouse.injects.request(token);
|
|
158
164
|
return tokens.map((token, index) => {
|
|
159
165
|
const inject = injects[index];
|
|
160
166
|
if (inject) {
|
|
@@ -166,7 +172,7 @@ class Dependency {
|
|
|
166
172
|
return this.createInstance({ token, scopeable, singleton });
|
|
167
173
|
}
|
|
168
174
|
if (token === Context) {
|
|
169
|
-
return context;
|
|
175
|
+
return this.context;
|
|
170
176
|
}
|
|
171
177
|
return this.createObject(token);
|
|
172
178
|
});
|
|
@@ -190,40 +196,37 @@ class Container {
|
|
|
190
196
|
this.warehouse.injects.push(options);
|
|
191
197
|
}
|
|
192
198
|
createInjectable(options) {
|
|
193
|
-
|
|
194
|
-
const { warehouse } = this;
|
|
195
|
-
const dependency = new Dependency({ warehouse, context });
|
|
196
|
-
return dependency.build(token);
|
|
199
|
+
return new Dependency(this.warehouse, options.context).build(options.token);
|
|
197
200
|
}
|
|
198
201
|
}
|
|
199
202
|
|
|
200
203
|
const invertlyContainer = new Container();
|
|
201
204
|
function createFromInvertly(options, container) {
|
|
202
|
-
return (container
|
|
205
|
+
return (container ?? invertlyContainer).createInjectable(options);
|
|
203
206
|
}
|
|
204
207
|
function invertly(token, container) {
|
|
205
208
|
return createFromInvertly({ token }, container);
|
|
206
209
|
}
|
|
207
210
|
function registerInjectable(options, container) {
|
|
208
|
-
(container
|
|
211
|
+
(container ?? invertlyContainer).registerInjectable(options);
|
|
209
212
|
}
|
|
210
213
|
function registerInject(options, container) {
|
|
211
|
-
(container
|
|
214
|
+
(container ?? invertlyContainer).registerInject(options);
|
|
212
215
|
}
|
|
213
216
|
function registerDependency(token, options) {
|
|
214
217
|
const { container, injects, scopeable, singleton } = options;
|
|
215
218
|
registerInjectable({
|
|
216
219
|
token,
|
|
217
|
-
scopeable: scopeable
|
|
218
|
-
singleton: singleton
|
|
220
|
+
scopeable: scopeable ?? false,
|
|
221
|
+
singleton: singleton ?? false
|
|
219
222
|
}, container);
|
|
220
223
|
injects?.forEach((inject, indexParent) => {
|
|
221
224
|
const { index, scopeable: childrenScopeable, singleton: childrenSingleton, token: childrenToken } = inject;
|
|
222
225
|
registerInject({
|
|
223
|
-
index: index
|
|
226
|
+
index: index ?? indexParent,
|
|
224
227
|
parent: token,
|
|
225
|
-
scopeable: childrenScopeable
|
|
226
|
-
singleton: childrenSingleton
|
|
228
|
+
scopeable: childrenScopeable ?? scopeable ?? false,
|
|
229
|
+
singleton: childrenSingleton ?? singleton ?? false,
|
|
227
230
|
token: childrenToken
|
|
228
231
|
}, container);
|
|
229
232
|
});
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../esm/stores/context.store.js","../esm/stores/inject.store.js","../esm/stores/injectable.store.js","../esm/stores/locator.store.js","../esm/stores/scope.store.js","../esm/factories/container.factory.js","../esm/factories/index.js","../esm/decorators/inject.decorator.js","../esm/decorators/injectable.decorator.js"],"sourcesContent":["export class Context extends Map {\r\n request(key) {\r\n return this.get(key);\r\n }\r\n}\r\n//# sourceMappingURL=context.store.js.map","export class InjectStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n push(options) {\r\n const { parent, index } = options;\r\n const injects = this.request(parent);\r\n injects[index] = options;\r\n }\r\n request(token) {\r\n const current = this.collection.get(token);\r\n if (current) {\r\n return current;\r\n }\r\n const injects = [];\r\n this.collection.set(token, injects);\r\n return injects;\r\n }\r\n}\r\n//# sourceMappingURL=inject.store.js.map","export class InjectableStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n push(options) {\r\n this.collection.set(options.token, options);\r\n }\r\n request(token) {\r\n return this.collection.get(token);\r\n }\r\n}\r\n//# sourceMappingURL=injectable.store.js.map","class LocatorStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n save(dependencies) {\r\n dependencies.forEach((config) => {\r\n this.collection.set(config.token, config);\r\n });\r\n }\r\n push(reference, token) {\r\n if (typeof reference !== 'string' && typeof reference !== 'symbol') {\r\n const { token, useClass } = reference;\r\n this.collection.set(token, { token, useClass });\r\n }\r\n else if (token) {\r\n this.collection.set(reference, { token, useClass: token });\r\n }\r\n }\r\n request(token) {\r\n return this.collection.get(token);\r\n }\r\n}\r\nconst locatorStore = new LocatorStore();\r\nexport function saveInLocator(dependencies) {\r\n locatorStore.save(dependencies);\r\n}\r\nexport function pushInLocator(reference, token) {\r\n locatorStore.push(reference, token);\r\n}\r\nexport function requestInLocator(token) {\r\n return locatorStore.request(token);\r\n}\r\n//# sourceMappingURL=locator.store.js.map","export class ScopeStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n push(token, value) {\r\n this.collection.set(token, value);\r\n }\r\n request(token) {\r\n return this.collection.get(token);\r\n }\r\n}\r\n//# sourceMappingURL=scope.store.js.map","import 'reflect-metadata';\r\nimport { Context, InjectStore, InjectableStore, ScopeStore, requestInLocator } from '../stores';\r\nclass Warehouse {\r\n constructor() {\r\n this.scope = new ScopeStore();\r\n this.injectables = new InjectableStore();\r\n this.injects = new InjectStore();\r\n }\r\n}\r\nclass Dependency {\r\n constructor({ warehouse, context }) {\r\n this.warehouse = warehouse;\r\n this.context = context;\r\n this.scope = new ScopeStore();\r\n }\r\n build(injectable) {\r\n const config = this.warehouse.injectables.request(injectable);\r\n if (!config) {\r\n throw Error(`Class ${injectable.toString()} is not found in the collection`);\r\n }\r\n const { scopeable, singleton, token } = config;\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n createObject(token) {\r\n const Constructor = token;\r\n const tokens = this.reflectTokens(Constructor);\r\n const params = tokens\r\n ? this.createReflectArgs({ token, tokens })\r\n : this.createTokenArgs(token);\r\n return new Constructor(...params);\r\n }\r\n reflectTokens(reference) {\r\n return Reflect.getMetadata('design:paramtypes', reference);\r\n }\r\n createFromScope({ token, scope }) {\r\n const instance = scope.request(token);\r\n if (instance) {\r\n return instance;\r\n }\r\n const object = this.createObject(token);\r\n scope.push(token, object);\r\n return object;\r\n }\r\n createFromContainer(token) {\r\n const { warehouse: { scope } } = this;\r\n return this.createFromScope({ token, scope });\r\n }\r\n createInstance(props) {\r\n const { token, scopeable, singleton } = props;\r\n const { scope } = this;\r\n if (singleton) {\r\n return this.createFromContainer(token);\r\n }\r\n if (scopeable) {\r\n return this.createFromScope({ token, scope });\r\n }\r\n return this.createObject(token);\r\n }\r\n createFromDecorator(inject) {\r\n const { token, scopeable, singleton } = inject;\r\n const locator = requestInLocator(token);\r\n if (locator) {\r\n const { useClass: token } = locator;\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n createReflectArgs({ tokens, token }) {\r\n const { warehouse, context } = this;\r\n const injects = warehouse.injects.request(token);\r\n return tokens.map((token, index) => {\r\n const inject = injects[index];\r\n if (inject) {\r\n return this.createFromDecorator(inject);\r\n }\r\n const locator = requestInLocator(token);\r\n if (locator) {\r\n const { useClass: token, scopeable, singleton } = locator;\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n if (token === Context) {\r\n return context;\r\n }\r\n return this.createObject(token);\r\n });\r\n }\r\n createTokenArgs(token) {\r\n const injects = this.warehouse.injects.request(token);\r\n return injects.reduce((objects, { index, scopeable, singleton, token }) => {\r\n objects[index] = this.createInstance({ token, scopeable, singleton });\r\n return objects;\r\n }, []);\r\n }\r\n}\r\nexport class Container {\r\n constructor() {\r\n this.warehouse = new Warehouse();\r\n }\r\n registerInjectable(options) {\r\n this.warehouse.injectables.push(options);\r\n }\r\n registerInject(options) {\r\n this.warehouse.injects.push(options);\r\n }\r\n createInjectable(options) {\r\n const { token, context } = options;\r\n const { warehouse } = this;\r\n const dependency = new Dependency({ warehouse, context });\r\n return dependency.build(token);\r\n }\r\n}\r\n//# sourceMappingURL=container.factory.js.map","import { Container } from './container.factory';\r\nconst invertlyContainer = new Container();\r\nfunction createFromInvertly(options, container) {\r\n return (container || invertlyContainer).createInjectable(options);\r\n}\r\nexport function invertly(token, container) {\r\n return createFromInvertly({ token }, container);\r\n}\r\nexport function registerInjectable(options, container) {\r\n (container || invertlyContainer).registerInjectable(options);\r\n}\r\nexport function registerInject(options, container) {\r\n (container || invertlyContainer).registerInject(options);\r\n}\r\nexport function registerDependency(token, options) {\r\n const { container, injects, scopeable, singleton } = options;\r\n registerInjectable({\r\n token,\r\n scopeable: scopeable || false,\r\n singleton: singleton || false\r\n }, container);\r\n injects?.forEach((inject, indexParent) => {\r\n const { index, scopeable: childrenScopeable, singleton: childrenSingleton, token: childrenToken } = inject;\r\n registerInject({\r\n index: index || indexParent,\r\n parent: token,\r\n scopeable: childrenScopeable || scopeable || false,\r\n singleton: childrenSingleton || singleton || false,\r\n token: childrenToken\r\n }, container);\r\n });\r\n}\r\nexport { Container } from './container.factory';\r\nexport default createFromInvertly;\r\n//# sourceMappingURL=index.js.map","import { registerInject } from '../factories';\r\nfunction createInject(inject) {\r\n const { scopeable, singleton, token } = inject;\r\n return (parent, _, index) => {\r\n registerInject({ index, parent, scopeable, singleton, token });\r\n };\r\n}\r\nexport function Singleton(token) {\r\n return createInject({ token, scopeable: false, singleton: true });\r\n}\r\nexport function Scope(token) {\r\n return createInject({ token, scopeable: true, singleton: false });\r\n}\r\nexport function Factory(token) {\r\n return createInject({ token, scopeable: false, singleton: false });\r\n}\r\n//# sourceMappingURL=inject.decorator.js.map","import { registerInjectable } from '../factories';\r\nexport function Injectable(options) {\r\n return (token) => {\r\n registerInjectable({\r\n scopeable: !!options?.scopeable,\r\n singleton: !!options?.singleton,\r\n token\r\n });\r\n };\r\n}\r\n//# sourceMappingURL=injectable.decorator.js.map"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../esm/stores/context.store.js","../esm/stores/inject.store.js","../esm/stores/injectable.store.js","../esm/stores/locator.store.js","../esm/stores/scope.store.js","../esm/factories/container.factory.js","../esm/factories/index.js","../esm/decorators/inject.decorator.js","../esm/decorators/injectable.decorator.js"],"sourcesContent":["export class Context {\r\n constructor() {\r\n this.store = new Map();\r\n }\r\n set(key, value) {\r\n this.store.set(key, value);\r\n }\r\n request(key) {\r\n return this.store.get(key);\r\n }\r\n has(key) {\r\n return this.store.has(key);\r\n }\r\n}\r\n//# sourceMappingURL=context.store.js.map","export class InjectStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n push(options) {\r\n const { parent, index } = options;\r\n const injects = this.request(parent);\r\n injects[index] = options;\r\n }\r\n request(token) {\r\n const current = this.collection.get(token);\r\n if (current) {\r\n return current;\r\n }\r\n const injects = [];\r\n this.collection.set(token, injects);\r\n return injects;\r\n }\r\n}\r\n//# sourceMappingURL=inject.store.js.map","export class InjectableStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n push(options) {\r\n this.collection.set(options.token, options);\r\n }\r\n request(token) {\r\n return this.collection.get(token);\r\n }\r\n}\r\n//# sourceMappingURL=injectable.store.js.map","class LocatorStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n save(dependencies) {\r\n dependencies.forEach((config) => {\r\n this.collection.set(config.token, config);\r\n });\r\n }\r\n push(reference, token) {\r\n if (typeof reference !== 'string' && typeof reference !== 'symbol') {\r\n const { token, useClass } = reference;\r\n this.collection.set(token, { token, useClass });\r\n }\r\n else if (token) {\r\n this.collection.set(reference, { token, useClass: token });\r\n }\r\n }\r\n request(token) {\r\n return this.collection.get(token);\r\n }\r\n}\r\nconst locatorStore = new LocatorStore();\r\nexport function saveInLocator(dependencies) {\r\n locatorStore.save(dependencies);\r\n}\r\nexport function pushInLocator(reference, token) {\r\n locatorStore.push(reference, token);\r\n}\r\nexport function requestInLocator(token) {\r\n return locatorStore.request(token);\r\n}\r\n//# sourceMappingURL=locator.store.js.map","export class ScopeStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n push(token, value) {\r\n this.collection.set(token, value);\r\n }\r\n request(token) {\r\n return this.collection.get(token);\r\n }\r\n}\r\n//# sourceMappingURL=scope.store.js.map","import 'reflect-metadata';\r\nimport { Context, InjectStore, InjectableStore, ScopeStore, requestInLocator } from '../stores';\r\nclass Warehouse {\r\n constructor() {\r\n this.scope = new ScopeStore();\r\n this.injectables = new InjectableStore();\r\n this.injects = new InjectStore();\r\n }\r\n}\r\nclass Dependency {\r\n constructor(warehouse, context) {\r\n this.warehouse = warehouse;\r\n this.context = context;\r\n this.scope = new ScopeStore();\r\n }\r\n build(injectable) {\r\n const options = this.warehouse.injectables.request(injectable);\r\n if (!options) {\r\n throw Error(`Class ${injectable.toString()} is not found in the collection`);\r\n }\r\n const { scopeable, singleton, token } = options;\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n createObject(token) {\r\n const Constructor = token;\r\n const tokens = this.reflectTokens(Constructor);\r\n const params = tokens\r\n ? this.createReflectArgs({ token, tokens })\r\n : this.createTokenArgs(token);\r\n return new Constructor(...params);\r\n }\r\n reflectTokens(constructable) {\r\n return Reflect.getMetadata('design:paramtypes', constructable);\r\n }\r\n createFromScope({ token, scope }) {\r\n const instance = scope.request(token);\r\n if (instance) {\r\n return instance;\r\n }\r\n const object = this.createObject(token);\r\n scope.push(token, object);\r\n return object;\r\n }\r\n createFromContainer(token) {\r\n return this.createFromScope({ token, scope: this.warehouse.scope });\r\n }\r\n createInstance(options) {\r\n const { token, scopeable, singleton } = options;\r\n if (singleton) {\r\n return this.createFromContainer(token);\r\n }\r\n if (scopeable) {\r\n return this.createFromScope({ token, scope: this.scope });\r\n }\r\n return this.createObject(token);\r\n }\r\n createFromDecorator(inject) {\r\n const { token, scopeable, singleton } = inject;\r\n const locator = requestInLocator(token);\r\n return this.createInstance({\r\n token: locator?.useClass ?? token,\r\n scopeable,\r\n singleton\r\n });\r\n }\r\n createReflectArgs({ tokens, token }) {\r\n const injects = this.warehouse.injects.request(token);\r\n return tokens.map((token, index) => {\r\n const inject = injects[index];\r\n if (inject) {\r\n return this.createFromDecorator(inject);\r\n }\r\n const locator = requestInLocator(token);\r\n if (locator) {\r\n const { useClass: token, scopeable, singleton } = locator;\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n if (token === Context) {\r\n return this.context;\r\n }\r\n return this.createObject(token);\r\n });\r\n }\r\n createTokenArgs(token) {\r\n const injects = this.warehouse.injects.request(token);\r\n return injects.reduce((objects, { index, scopeable, singleton, token }) => {\r\n objects[index] = this.createInstance({ token, scopeable, singleton });\r\n return objects;\r\n }, []);\r\n }\r\n}\r\nexport class Container {\r\n constructor() {\r\n this.warehouse = new Warehouse();\r\n }\r\n registerInjectable(options) {\r\n this.warehouse.injectables.push(options);\r\n }\r\n registerInject(options) {\r\n this.warehouse.injects.push(options);\r\n }\r\n createInjectable(options) {\r\n return new Dependency(this.warehouse, options.context).build(options.token);\r\n }\r\n}\r\n//# sourceMappingURL=container.factory.js.map","import { Container } from './container.factory';\r\nconst invertlyContainer = new Container();\r\nfunction createFromInvertly(options, container) {\r\n return (container ?? invertlyContainer).createInjectable(options);\r\n}\r\nexport function invertly(token, container) {\r\n return createFromInvertly({ token }, container);\r\n}\r\nexport function registerInjectable(options, container) {\r\n (container ?? invertlyContainer).registerInjectable(options);\r\n}\r\nexport function registerInject(options, container) {\r\n (container ?? invertlyContainer).registerInject(options);\r\n}\r\nexport function registerDependency(token, options) {\r\n const { container, injects, scopeable, singleton } = options;\r\n registerInjectable({\r\n token,\r\n scopeable: scopeable ?? false,\r\n singleton: singleton ?? false\r\n }, container);\r\n injects?.forEach((inject, indexParent) => {\r\n const { index, scopeable: childrenScopeable, singleton: childrenSingleton, token: childrenToken } = inject;\r\n registerInject({\r\n index: index ?? indexParent,\r\n parent: token,\r\n scopeable: childrenScopeable ?? scopeable ?? false,\r\n singleton: childrenSingleton ?? singleton ?? false,\r\n token: childrenToken\r\n }, container);\r\n });\r\n}\r\nexport { Container } from './container.factory';\r\nexport default createFromInvertly;\r\n//# sourceMappingURL=index.js.map","import { registerInject } from '../factories';\r\nfunction createInject(inject) {\r\n const { scopeable, singleton, token } = inject;\r\n return (parent, _, index) => {\r\n registerInject({ index, parent, scopeable, singleton, token });\r\n };\r\n}\r\nexport function Singleton(token) {\r\n return createInject({ token, scopeable: false, singleton: true });\r\n}\r\nexport function Scope(token) {\r\n return createInject({ token, scopeable: true, singleton: false });\r\n}\r\nexport function Factory(token) {\r\n return createInject({ token, scopeable: false, singleton: false });\r\n}\r\n//# sourceMappingURL=inject.decorator.js.map","import { registerInjectable } from '../factories';\r\nexport function Injectable(options) {\r\n return (token) => {\r\n registerInjectable({\r\n scopeable: !!options?.scopeable,\r\n singleton: !!options?.singleton,\r\n token\r\n });\r\n };\r\n}\r\n//# sourceMappingURL=injectable.decorator.js.map"],"names":[],"mappings":"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"}
|
package/dist/es/index.js
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
2
|
|
|
3
|
-
class Context
|
|
3
|
+
class Context {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.store = new Map();
|
|
6
|
+
}
|
|
7
|
+
set(key, value) {
|
|
8
|
+
this.store.set(key, value);
|
|
9
|
+
}
|
|
4
10
|
request(key) {
|
|
5
|
-
return this.get(key);
|
|
11
|
+
return this.store.get(key);
|
|
12
|
+
}
|
|
13
|
+
has(key) {
|
|
14
|
+
return this.store.has(key);
|
|
6
15
|
}
|
|
7
16
|
}
|
|
8
17
|
|
|
@@ -91,17 +100,17 @@ class Warehouse {
|
|
|
91
100
|
}
|
|
92
101
|
}
|
|
93
102
|
class Dependency {
|
|
94
|
-
constructor(
|
|
103
|
+
constructor(warehouse, context) {
|
|
95
104
|
this.warehouse = warehouse;
|
|
96
105
|
this.context = context;
|
|
97
106
|
this.scope = new ScopeStore();
|
|
98
107
|
}
|
|
99
108
|
build(injectable) {
|
|
100
|
-
const
|
|
101
|
-
if (!
|
|
109
|
+
const options = this.warehouse.injectables.request(injectable);
|
|
110
|
+
if (!options) {
|
|
102
111
|
throw Error(`Class ${injectable.toString()} is not found in the collection`);
|
|
103
112
|
}
|
|
104
|
-
const { scopeable, singleton, token } =
|
|
113
|
+
const { scopeable, singleton, token } = options;
|
|
105
114
|
return this.createInstance({ token, scopeable, singleton });
|
|
106
115
|
}
|
|
107
116
|
createObject(token) {
|
|
@@ -112,8 +121,8 @@ class Dependency {
|
|
|
112
121
|
: this.createTokenArgs(token);
|
|
113
122
|
return new Constructor(...params);
|
|
114
123
|
}
|
|
115
|
-
reflectTokens(
|
|
116
|
-
return Reflect.getMetadata('design:paramtypes',
|
|
124
|
+
reflectTokens(constructable) {
|
|
125
|
+
return Reflect.getMetadata('design:paramtypes', constructable);
|
|
117
126
|
}
|
|
118
127
|
createFromScope({ token, scope }) {
|
|
119
128
|
const instance = scope.request(token);
|
|
@@ -125,32 +134,29 @@ class Dependency {
|
|
|
125
134
|
return object;
|
|
126
135
|
}
|
|
127
136
|
createFromContainer(token) {
|
|
128
|
-
|
|
129
|
-
return this.createFromScope({ token, scope });
|
|
137
|
+
return this.createFromScope({ token, scope: this.warehouse.scope });
|
|
130
138
|
}
|
|
131
|
-
createInstance(
|
|
132
|
-
const { token, scopeable, singleton } =
|
|
133
|
-
const { scope } = this;
|
|
139
|
+
createInstance(options) {
|
|
140
|
+
const { token, scopeable, singleton } = options;
|
|
134
141
|
if (singleton) {
|
|
135
142
|
return this.createFromContainer(token);
|
|
136
143
|
}
|
|
137
144
|
if (scopeable) {
|
|
138
|
-
return this.createFromScope({ token, scope });
|
|
145
|
+
return this.createFromScope({ token, scope: this.scope });
|
|
139
146
|
}
|
|
140
147
|
return this.createObject(token);
|
|
141
148
|
}
|
|
142
149
|
createFromDecorator(inject) {
|
|
143
150
|
const { token, scopeable, singleton } = inject;
|
|
144
151
|
const locator = requestInLocator(token);
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
152
|
+
return this.createInstance({
|
|
153
|
+
token: locator?.useClass ?? token,
|
|
154
|
+
scopeable,
|
|
155
|
+
singleton
|
|
156
|
+
});
|
|
150
157
|
}
|
|
151
158
|
createReflectArgs({ tokens, token }) {
|
|
152
|
-
const
|
|
153
|
-
const injects = warehouse.injects.request(token);
|
|
159
|
+
const injects = this.warehouse.injects.request(token);
|
|
154
160
|
return tokens.map((token, index) => {
|
|
155
161
|
const inject = injects[index];
|
|
156
162
|
if (inject) {
|
|
@@ -162,7 +168,7 @@ class Dependency {
|
|
|
162
168
|
return this.createInstance({ token, scopeable, singleton });
|
|
163
169
|
}
|
|
164
170
|
if (token === Context) {
|
|
165
|
-
return context;
|
|
171
|
+
return this.context;
|
|
166
172
|
}
|
|
167
173
|
return this.createObject(token);
|
|
168
174
|
});
|
|
@@ -186,40 +192,37 @@ class Container {
|
|
|
186
192
|
this.warehouse.injects.push(options);
|
|
187
193
|
}
|
|
188
194
|
createInjectable(options) {
|
|
189
|
-
|
|
190
|
-
const { warehouse } = this;
|
|
191
|
-
const dependency = new Dependency({ warehouse, context });
|
|
192
|
-
return dependency.build(token);
|
|
195
|
+
return new Dependency(this.warehouse, options.context).build(options.token);
|
|
193
196
|
}
|
|
194
197
|
}
|
|
195
198
|
|
|
196
199
|
const invertlyContainer = new Container();
|
|
197
200
|
function createFromInvertly(options, container) {
|
|
198
|
-
return (container
|
|
201
|
+
return (container ?? invertlyContainer).createInjectable(options);
|
|
199
202
|
}
|
|
200
203
|
function invertly(token, container) {
|
|
201
204
|
return createFromInvertly({ token }, container);
|
|
202
205
|
}
|
|
203
206
|
function registerInjectable(options, container) {
|
|
204
|
-
(container
|
|
207
|
+
(container ?? invertlyContainer).registerInjectable(options);
|
|
205
208
|
}
|
|
206
209
|
function registerInject(options, container) {
|
|
207
|
-
(container
|
|
210
|
+
(container ?? invertlyContainer).registerInject(options);
|
|
208
211
|
}
|
|
209
212
|
function registerDependency(token, options) {
|
|
210
213
|
const { container, injects, scopeable, singleton } = options;
|
|
211
214
|
registerInjectable({
|
|
212
215
|
token,
|
|
213
|
-
scopeable: scopeable
|
|
214
|
-
singleton: singleton
|
|
216
|
+
scopeable: scopeable ?? false,
|
|
217
|
+
singleton: singleton ?? false
|
|
215
218
|
}, container);
|
|
216
219
|
injects?.forEach((inject, indexParent) => {
|
|
217
220
|
const { index, scopeable: childrenScopeable, singleton: childrenSingleton, token: childrenToken } = inject;
|
|
218
221
|
registerInject({
|
|
219
|
-
index: index
|
|
222
|
+
index: index ?? indexParent,
|
|
220
223
|
parent: token,
|
|
221
|
-
scopeable: childrenScopeable
|
|
222
|
-
singleton: childrenSingleton
|
|
224
|
+
scopeable: childrenScopeable ?? scopeable ?? false,
|
|
225
|
+
singleton: childrenSingleton ?? singleton ?? false,
|
|
223
226
|
token: childrenToken
|
|
224
227
|
}, container);
|
|
225
228
|
});
|
package/dist/es/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../esm/stores/context.store.js","../esm/stores/inject.store.js","../esm/stores/injectable.store.js","../esm/stores/locator.store.js","../esm/stores/scope.store.js","../esm/factories/container.factory.js","../esm/factories/index.js","../esm/decorators/inject.decorator.js","../esm/decorators/injectable.decorator.js"],"sourcesContent":["export class Context extends Map {\r\n request(key) {\r\n return this.get(key);\r\n }\r\n}\r\n//# sourceMappingURL=context.store.js.map","export class InjectStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n push(options) {\r\n const { parent, index } = options;\r\n const injects = this.request(parent);\r\n injects[index] = options;\r\n }\r\n request(token) {\r\n const current = this.collection.get(token);\r\n if (current) {\r\n return current;\r\n }\r\n const injects = [];\r\n this.collection.set(token, injects);\r\n return injects;\r\n }\r\n}\r\n//# sourceMappingURL=inject.store.js.map","export class InjectableStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n push(options) {\r\n this.collection.set(options.token, options);\r\n }\r\n request(token) {\r\n return this.collection.get(token);\r\n }\r\n}\r\n//# sourceMappingURL=injectable.store.js.map","class LocatorStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n save(dependencies) {\r\n dependencies.forEach((config) => {\r\n this.collection.set(config.token, config);\r\n });\r\n }\r\n push(reference, token) {\r\n if (typeof reference !== 'string' && typeof reference !== 'symbol') {\r\n const { token, useClass } = reference;\r\n this.collection.set(token, { token, useClass });\r\n }\r\n else if (token) {\r\n this.collection.set(reference, { token, useClass: token });\r\n }\r\n }\r\n request(token) {\r\n return this.collection.get(token);\r\n }\r\n}\r\nconst locatorStore = new LocatorStore();\r\nexport function saveInLocator(dependencies) {\r\n locatorStore.save(dependencies);\r\n}\r\nexport function pushInLocator(reference, token) {\r\n locatorStore.push(reference, token);\r\n}\r\nexport function requestInLocator(token) {\r\n return locatorStore.request(token);\r\n}\r\n//# sourceMappingURL=locator.store.js.map","export class ScopeStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n push(token, value) {\r\n this.collection.set(token, value);\r\n }\r\n request(token) {\r\n return this.collection.get(token);\r\n }\r\n}\r\n//# sourceMappingURL=scope.store.js.map","import 'reflect-metadata';\r\nimport { Context, InjectStore, InjectableStore, ScopeStore, requestInLocator } from '../stores';\r\nclass Warehouse {\r\n constructor() {\r\n this.scope = new ScopeStore();\r\n this.injectables = new InjectableStore();\r\n this.injects = new InjectStore();\r\n }\r\n}\r\nclass Dependency {\r\n constructor({ warehouse, context }) {\r\n this.warehouse = warehouse;\r\n this.context = context;\r\n this.scope = new ScopeStore();\r\n }\r\n build(injectable) {\r\n const config = this.warehouse.injectables.request(injectable);\r\n if (!config) {\r\n throw Error(`Class ${injectable.toString()} is not found in the collection`);\r\n }\r\n const { scopeable, singleton, token } = config;\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n createObject(token) {\r\n const Constructor = token;\r\n const tokens = this.reflectTokens(Constructor);\r\n const params = tokens\r\n ? this.createReflectArgs({ token, tokens })\r\n : this.createTokenArgs(token);\r\n return new Constructor(...params);\r\n }\r\n reflectTokens(reference) {\r\n return Reflect.getMetadata('design:paramtypes', reference);\r\n }\r\n createFromScope({ token, scope }) {\r\n const instance = scope.request(token);\r\n if (instance) {\r\n return instance;\r\n }\r\n const object = this.createObject(token);\r\n scope.push(token, object);\r\n return object;\r\n }\r\n createFromContainer(token) {\r\n const { warehouse: { scope } } = this;\r\n return this.createFromScope({ token, scope });\r\n }\r\n createInstance(props) {\r\n const { token, scopeable, singleton } = props;\r\n const { scope } = this;\r\n if (singleton) {\r\n return this.createFromContainer(token);\r\n }\r\n if (scopeable) {\r\n return this.createFromScope({ token, scope });\r\n }\r\n return this.createObject(token);\r\n }\r\n createFromDecorator(inject) {\r\n const { token, scopeable, singleton } = inject;\r\n const locator = requestInLocator(token);\r\n if (locator) {\r\n const { useClass: token } = locator;\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n createReflectArgs({ tokens, token }) {\r\n const { warehouse, context } = this;\r\n const injects = warehouse.injects.request(token);\r\n return tokens.map((token, index) => {\r\n const inject = injects[index];\r\n if (inject) {\r\n return this.createFromDecorator(inject);\r\n }\r\n const locator = requestInLocator(token);\r\n if (locator) {\r\n const { useClass: token, scopeable, singleton } = locator;\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n if (token === Context) {\r\n return context;\r\n }\r\n return this.createObject(token);\r\n });\r\n }\r\n createTokenArgs(token) {\r\n const injects = this.warehouse.injects.request(token);\r\n return injects.reduce((objects, { index, scopeable, singleton, token }) => {\r\n objects[index] = this.createInstance({ token, scopeable, singleton });\r\n return objects;\r\n }, []);\r\n }\r\n}\r\nexport class Container {\r\n constructor() {\r\n this.warehouse = new Warehouse();\r\n }\r\n registerInjectable(options) {\r\n this.warehouse.injectables.push(options);\r\n }\r\n registerInject(options) {\r\n this.warehouse.injects.push(options);\r\n }\r\n createInjectable(options) {\r\n const { token, context } = options;\r\n const { warehouse } = this;\r\n const dependency = new Dependency({ warehouse, context });\r\n return dependency.build(token);\r\n }\r\n}\r\n//# sourceMappingURL=container.factory.js.map","import { Container } from './container.factory';\r\nconst invertlyContainer = new Container();\r\nfunction createFromInvertly(options, container) {\r\n return (container || invertlyContainer).createInjectable(options);\r\n}\r\nexport function invertly(token, container) {\r\n return createFromInvertly({ token }, container);\r\n}\r\nexport function registerInjectable(options, container) {\r\n (container || invertlyContainer).registerInjectable(options);\r\n}\r\nexport function registerInject(options, container) {\r\n (container || invertlyContainer).registerInject(options);\r\n}\r\nexport function registerDependency(token, options) {\r\n const { container, injects, scopeable, singleton } = options;\r\n registerInjectable({\r\n token,\r\n scopeable: scopeable || false,\r\n singleton: singleton || false\r\n }, container);\r\n injects?.forEach((inject, indexParent) => {\r\n const { index, scopeable: childrenScopeable, singleton: childrenSingleton, token: childrenToken } = inject;\r\n registerInject({\r\n index: index || indexParent,\r\n parent: token,\r\n scopeable: childrenScopeable || scopeable || false,\r\n singleton: childrenSingleton || singleton || false,\r\n token: childrenToken\r\n }, container);\r\n });\r\n}\r\nexport { Container } from './container.factory';\r\nexport default createFromInvertly;\r\n//# sourceMappingURL=index.js.map","import { registerInject } from '../factories';\r\nfunction createInject(inject) {\r\n const { scopeable, singleton, token } = inject;\r\n return (parent, _, index) => {\r\n registerInject({ index, parent, scopeable, singleton, token });\r\n };\r\n}\r\nexport function Singleton(token) {\r\n return createInject({ token, scopeable: false, singleton: true });\r\n}\r\nexport function Scope(token) {\r\n return createInject({ token, scopeable: true, singleton: false });\r\n}\r\nexport function Factory(token) {\r\n return createInject({ token, scopeable: false, singleton: false });\r\n}\r\n//# sourceMappingURL=inject.decorator.js.map","import { registerInjectable } from '../factories';\r\nexport function Injectable(options) {\r\n return (token) => {\r\n registerInjectable({\r\n scopeable: !!options?.scopeable,\r\n singleton: !!options?.singleton,\r\n token\r\n });\r\n };\r\n}\r\n//# sourceMappingURL=injectable.decorator.js.map"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../esm/stores/context.store.js","../esm/stores/inject.store.js","../esm/stores/injectable.store.js","../esm/stores/locator.store.js","../esm/stores/scope.store.js","../esm/factories/container.factory.js","../esm/factories/index.js","../esm/decorators/inject.decorator.js","../esm/decorators/injectable.decorator.js"],"sourcesContent":["export class Context {\r\n constructor() {\r\n this.store = new Map();\r\n }\r\n set(key, value) {\r\n this.store.set(key, value);\r\n }\r\n request(key) {\r\n return this.store.get(key);\r\n }\r\n has(key) {\r\n return this.store.has(key);\r\n }\r\n}\r\n//# sourceMappingURL=context.store.js.map","export class InjectStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n push(options) {\r\n const { parent, index } = options;\r\n const injects = this.request(parent);\r\n injects[index] = options;\r\n }\r\n request(token) {\r\n const current = this.collection.get(token);\r\n if (current) {\r\n return current;\r\n }\r\n const injects = [];\r\n this.collection.set(token, injects);\r\n return injects;\r\n }\r\n}\r\n//# sourceMappingURL=inject.store.js.map","export class InjectableStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n push(options) {\r\n this.collection.set(options.token, options);\r\n }\r\n request(token) {\r\n return this.collection.get(token);\r\n }\r\n}\r\n//# sourceMappingURL=injectable.store.js.map","class LocatorStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n save(dependencies) {\r\n dependencies.forEach((config) => {\r\n this.collection.set(config.token, config);\r\n });\r\n }\r\n push(reference, token) {\r\n if (typeof reference !== 'string' && typeof reference !== 'symbol') {\r\n const { token, useClass } = reference;\r\n this.collection.set(token, { token, useClass });\r\n }\r\n else if (token) {\r\n this.collection.set(reference, { token, useClass: token });\r\n }\r\n }\r\n request(token) {\r\n return this.collection.get(token);\r\n }\r\n}\r\nconst locatorStore = new LocatorStore();\r\nexport function saveInLocator(dependencies) {\r\n locatorStore.save(dependencies);\r\n}\r\nexport function pushInLocator(reference, token) {\r\n locatorStore.push(reference, token);\r\n}\r\nexport function requestInLocator(token) {\r\n return locatorStore.request(token);\r\n}\r\n//# sourceMappingURL=locator.store.js.map","export class ScopeStore {\r\n constructor() {\r\n this.collection = new Map();\r\n }\r\n push(token, value) {\r\n this.collection.set(token, value);\r\n }\r\n request(token) {\r\n return this.collection.get(token);\r\n }\r\n}\r\n//# sourceMappingURL=scope.store.js.map","import 'reflect-metadata';\r\nimport { Context, InjectStore, InjectableStore, ScopeStore, requestInLocator } from '../stores';\r\nclass Warehouse {\r\n constructor() {\r\n this.scope = new ScopeStore();\r\n this.injectables = new InjectableStore();\r\n this.injects = new InjectStore();\r\n }\r\n}\r\nclass Dependency {\r\n constructor(warehouse, context) {\r\n this.warehouse = warehouse;\r\n this.context = context;\r\n this.scope = new ScopeStore();\r\n }\r\n build(injectable) {\r\n const options = this.warehouse.injectables.request(injectable);\r\n if (!options) {\r\n throw Error(`Class ${injectable.toString()} is not found in the collection`);\r\n }\r\n const { scopeable, singleton, token } = options;\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n createObject(token) {\r\n const Constructor = token;\r\n const tokens = this.reflectTokens(Constructor);\r\n const params = tokens\r\n ? this.createReflectArgs({ token, tokens })\r\n : this.createTokenArgs(token);\r\n return new Constructor(...params);\r\n }\r\n reflectTokens(constructable) {\r\n return Reflect.getMetadata('design:paramtypes', constructable);\r\n }\r\n createFromScope({ token, scope }) {\r\n const instance = scope.request(token);\r\n if (instance) {\r\n return instance;\r\n }\r\n const object = this.createObject(token);\r\n scope.push(token, object);\r\n return object;\r\n }\r\n createFromContainer(token) {\r\n return this.createFromScope({ token, scope: this.warehouse.scope });\r\n }\r\n createInstance(options) {\r\n const { token, scopeable, singleton } = options;\r\n if (singleton) {\r\n return this.createFromContainer(token);\r\n }\r\n if (scopeable) {\r\n return this.createFromScope({ token, scope: this.scope });\r\n }\r\n return this.createObject(token);\r\n }\r\n createFromDecorator(inject) {\r\n const { token, scopeable, singleton } = inject;\r\n const locator = requestInLocator(token);\r\n return this.createInstance({\r\n token: locator?.useClass ?? token,\r\n scopeable,\r\n singleton\r\n });\r\n }\r\n createReflectArgs({ tokens, token }) {\r\n const injects = this.warehouse.injects.request(token);\r\n return tokens.map((token, index) => {\r\n const inject = injects[index];\r\n if (inject) {\r\n return this.createFromDecorator(inject);\r\n }\r\n const locator = requestInLocator(token);\r\n if (locator) {\r\n const { useClass: token, scopeable, singleton } = locator;\r\n return this.createInstance({ token, scopeable, singleton });\r\n }\r\n if (token === Context) {\r\n return this.context;\r\n }\r\n return this.createObject(token);\r\n });\r\n }\r\n createTokenArgs(token) {\r\n const injects = this.warehouse.injects.request(token);\r\n return injects.reduce((objects, { index, scopeable, singleton, token }) => {\r\n objects[index] = this.createInstance({ token, scopeable, singleton });\r\n return objects;\r\n }, []);\r\n }\r\n}\r\nexport class Container {\r\n constructor() {\r\n this.warehouse = new Warehouse();\r\n }\r\n registerInjectable(options) {\r\n this.warehouse.injectables.push(options);\r\n }\r\n registerInject(options) {\r\n this.warehouse.injects.push(options);\r\n }\r\n createInjectable(options) {\r\n return new Dependency(this.warehouse, options.context).build(options.token);\r\n }\r\n}\r\n//# sourceMappingURL=container.factory.js.map","import { Container } from './container.factory';\r\nconst invertlyContainer = new Container();\r\nfunction createFromInvertly(options, container) {\r\n return (container ?? invertlyContainer).createInjectable(options);\r\n}\r\nexport function invertly(token, container) {\r\n return createFromInvertly({ token }, container);\r\n}\r\nexport function registerInjectable(options, container) {\r\n (container ?? invertlyContainer).registerInjectable(options);\r\n}\r\nexport function registerInject(options, container) {\r\n (container ?? invertlyContainer).registerInject(options);\r\n}\r\nexport function registerDependency(token, options) {\r\n const { container, injects, scopeable, singleton } = options;\r\n registerInjectable({\r\n token,\r\n scopeable: scopeable ?? false,\r\n singleton: singleton ?? false\r\n }, container);\r\n injects?.forEach((inject, indexParent) => {\r\n const { index, scopeable: childrenScopeable, singleton: childrenSingleton, token: childrenToken } = inject;\r\n registerInject({\r\n index: index ?? indexParent,\r\n parent: token,\r\n scopeable: childrenScopeable ?? scopeable ?? false,\r\n singleton: childrenSingleton ?? singleton ?? false,\r\n token: childrenToken\r\n }, container);\r\n });\r\n}\r\nexport { Container } from './container.factory';\r\nexport default createFromInvertly;\r\n//# sourceMappingURL=index.js.map","import { registerInject } from '../factories';\r\nfunction createInject(inject) {\r\n const { scopeable, singleton, token } = inject;\r\n return (parent, _, index) => {\r\n registerInject({ index, parent, scopeable, singleton, token });\r\n };\r\n}\r\nexport function Singleton(token) {\r\n return createInject({ token, scopeable: false, singleton: true });\r\n}\r\nexport function Scope(token) {\r\n return createInject({ token, scopeable: true, singleton: false });\r\n}\r\nexport function Factory(token) {\r\n return createInject({ token, scopeable: false, singleton: false });\r\n}\r\n//# sourceMappingURL=inject.decorator.js.map","import { registerInjectable } from '../factories';\r\nexport function Injectable(options) {\r\n return (token) => {\r\n registerInjectable({\r\n scopeable: !!options?.scopeable,\r\n singleton: !!options?.singleton,\r\n token\r\n });\r\n };\r\n}\r\n//# sourceMappingURL=injectable.decorator.js.map"],"names":[],"mappings":"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"}
|
|
@@ -8,17 +8,17 @@ class Warehouse {
|
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
class Dependency {
|
|
11
|
-
constructor(
|
|
11
|
+
constructor(warehouse, context) {
|
|
12
12
|
this.warehouse = warehouse;
|
|
13
13
|
this.context = context;
|
|
14
14
|
this.scope = new ScopeStore();
|
|
15
15
|
}
|
|
16
16
|
build(injectable) {
|
|
17
|
-
const
|
|
18
|
-
if (!
|
|
17
|
+
const options = this.warehouse.injectables.request(injectable);
|
|
18
|
+
if (!options) {
|
|
19
19
|
throw Error(`Class ${injectable.toString()} is not found in the collection`);
|
|
20
20
|
}
|
|
21
|
-
const { scopeable, singleton, token } =
|
|
21
|
+
const { scopeable, singleton, token } = options;
|
|
22
22
|
return this.createInstance({ token, scopeable, singleton });
|
|
23
23
|
}
|
|
24
24
|
createObject(token) {
|
|
@@ -29,8 +29,8 @@ class Dependency {
|
|
|
29
29
|
: this.createTokenArgs(token);
|
|
30
30
|
return new Constructor(...params);
|
|
31
31
|
}
|
|
32
|
-
reflectTokens(
|
|
33
|
-
return Reflect.getMetadata('design:paramtypes',
|
|
32
|
+
reflectTokens(constructable) {
|
|
33
|
+
return Reflect.getMetadata('design:paramtypes', constructable);
|
|
34
34
|
}
|
|
35
35
|
createFromScope({ token, scope }) {
|
|
36
36
|
const instance = scope.request(token);
|
|
@@ -42,32 +42,29 @@ class Dependency {
|
|
|
42
42
|
return object;
|
|
43
43
|
}
|
|
44
44
|
createFromContainer(token) {
|
|
45
|
-
|
|
46
|
-
return this.createFromScope({ token, scope });
|
|
45
|
+
return this.createFromScope({ token, scope: this.warehouse.scope });
|
|
47
46
|
}
|
|
48
|
-
createInstance(
|
|
49
|
-
const { token, scopeable, singleton } =
|
|
50
|
-
const { scope } = this;
|
|
47
|
+
createInstance(options) {
|
|
48
|
+
const { token, scopeable, singleton } = options;
|
|
51
49
|
if (singleton) {
|
|
52
50
|
return this.createFromContainer(token);
|
|
53
51
|
}
|
|
54
52
|
if (scopeable) {
|
|
55
|
-
return this.createFromScope({ token, scope });
|
|
53
|
+
return this.createFromScope({ token, scope: this.scope });
|
|
56
54
|
}
|
|
57
55
|
return this.createObject(token);
|
|
58
56
|
}
|
|
59
57
|
createFromDecorator(inject) {
|
|
60
58
|
const { token, scopeable, singleton } = inject;
|
|
61
59
|
const locator = requestInLocator(token);
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
60
|
+
return this.createInstance({
|
|
61
|
+
token: locator?.useClass ?? token,
|
|
62
|
+
scopeable,
|
|
63
|
+
singleton
|
|
64
|
+
});
|
|
67
65
|
}
|
|
68
66
|
createReflectArgs({ tokens, token }) {
|
|
69
|
-
const
|
|
70
|
-
const injects = warehouse.injects.request(token);
|
|
67
|
+
const injects = this.warehouse.injects.request(token);
|
|
71
68
|
return tokens.map((token, index) => {
|
|
72
69
|
const inject = injects[index];
|
|
73
70
|
if (inject) {
|
|
@@ -79,7 +76,7 @@ class Dependency {
|
|
|
79
76
|
return this.createInstance({ token, scopeable, singleton });
|
|
80
77
|
}
|
|
81
78
|
if (token === Context) {
|
|
82
|
-
return context;
|
|
79
|
+
return this.context;
|
|
83
80
|
}
|
|
84
81
|
return this.createObject(token);
|
|
85
82
|
});
|
|
@@ -103,10 +100,7 @@ export class Container {
|
|
|
103
100
|
this.warehouse.injects.push(options);
|
|
104
101
|
}
|
|
105
102
|
createInjectable(options) {
|
|
106
|
-
|
|
107
|
-
const { warehouse } = this;
|
|
108
|
-
const dependency = new Dependency({ warehouse, context });
|
|
109
|
-
return dependency.build(token);
|
|
103
|
+
return new Dependency(this.warehouse, options.context).build(options.token);
|
|
110
104
|
}
|
|
111
105
|
}
|
|
112
106
|
//# sourceMappingURL=container.factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.factory.js","sourceRoot":"","sources":["../../../src/factories/container.factory.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EACL,OAAO,EACP,WAAW,EACX,eAAe,EACf,UAAU,EACV,gBAAgB,EACjB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"container.factory.js","sourceRoot":"","sources":["../../../src/factories/container.factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
import { Container } from './container.factory';
|
|
2
2
|
const invertlyContainer = new Container();
|
|
3
3
|
function createFromInvertly(options, container) {
|
|
4
|
-
return (container
|
|
4
|
+
return (container ?? invertlyContainer).createInjectable(options);
|
|
5
5
|
}
|
|
6
6
|
export function invertly(token, container) {
|
|
7
7
|
return createFromInvertly({ token }, container);
|
|
8
8
|
}
|
|
9
9
|
export function registerInjectable(options, container) {
|
|
10
|
-
(container
|
|
10
|
+
(container ?? invertlyContainer).registerInjectable(options);
|
|
11
11
|
}
|
|
12
12
|
export function registerInject(options, container) {
|
|
13
|
-
(container
|
|
13
|
+
(container ?? invertlyContainer).registerInject(options);
|
|
14
14
|
}
|
|
15
15
|
export function registerDependency(token, options) {
|
|
16
16
|
const { container, injects, scopeable, singleton } = options;
|
|
17
17
|
registerInjectable({
|
|
18
18
|
token,
|
|
19
|
-
scopeable: scopeable
|
|
20
|
-
singleton: singleton
|
|
19
|
+
scopeable: scopeable ?? false,
|
|
20
|
+
singleton: singleton ?? false
|
|
21
21
|
}, container);
|
|
22
22
|
injects?.forEach((inject, indexParent) => {
|
|
23
23
|
const { index, scopeable: childrenScopeable, singleton: childrenSingleton, token: childrenToken } = inject;
|
|
24
24
|
registerInject({
|
|
25
|
-
index: index
|
|
25
|
+
index: index ?? indexParent,
|
|
26
26
|
parent: token,
|
|
27
|
-
scopeable: childrenScopeable
|
|
28
|
-
singleton: childrenSingleton
|
|
27
|
+
scopeable: childrenScopeable ?? scopeable ?? false,
|
|
28
|
+
singleton: childrenSingleton ?? singleton ?? false,
|
|
29
29
|
token: childrenToken
|
|
30
30
|
}, container);
|
|
31
31
|
});
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { AbstractContext } from '../types';
|
|
2
|
-
export declare class Context<K = string>
|
|
2
|
+
export declare class Context<K = string> implements AbstractContext<K> {
|
|
3
|
+
private store;
|
|
4
|
+
set(key: K, value?: any): void;
|
|
3
5
|
request<T = any>(key: K): Undefined<T>;
|
|
6
|
+
has(key: K): boolean;
|
|
4
7
|
}
|
|
@@ -1,6 +1,15 @@
|
|
|
1
|
-
export class Context
|
|
1
|
+
export class Context {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.store = new Map();
|
|
4
|
+
}
|
|
5
|
+
set(key, value) {
|
|
6
|
+
this.store.set(key, value);
|
|
7
|
+
}
|
|
2
8
|
request(key) {
|
|
3
|
-
return this.get(key);
|
|
9
|
+
return this.store.get(key);
|
|
10
|
+
}
|
|
11
|
+
has(key) {
|
|
12
|
+
return this.store.has(key);
|
|
4
13
|
}
|
|
5
14
|
}
|
|
6
15
|
//# sourceMappingURL=context.store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.store.js","sourceRoot":"","sources":["../../../src/stores/context.store.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"context.store.js","sourceRoot":"","sources":["../../../src/stores/context.store.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,OAAO;IAApB;QACU,UAAK,GAAgB,IAAI,GAAG,EAAE,CAAC;IAazC,CAAC;IAXQ,GAAG,CAAC,GAAM,EAAE,KAAW;QAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEM,OAAO,CAAU,GAAM;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAEM,GAAG,CAAC,GAAM;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rolster/invertly",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Invertly is a package that allows you to implement class mapping to identify and inject their dependencies.",
|
|
5
5
|
"module": "dist/esm/index.js",
|
|
6
6
|
"main": "dist/cjs/index.js",
|