@rolster/invertly 1.0.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/LICENSE +21 -0
- package/dist/cjs/index.js +256 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/es/index.js +240 -0
- package/dist/es/index.js.map +1 -0
- package/dist/esm/decorators/index.d.ts +2 -0
- package/dist/esm/decorators/index.js +3 -0
- package/dist/esm/decorators/index.js.map +1 -0
- package/dist/esm/decorators/inject.decorator.d.ts +4 -0
- package/dist/esm/decorators/inject.decorator.js +18 -0
- package/dist/esm/decorators/inject.decorator.js.map +1 -0
- package/dist/esm/decorators/injectable.decorator.d.ts +6 -0
- package/dist/esm/decorators/injectable.decorator.js +13 -0
- package/dist/esm/decorators/injectable.decorator.js.map +1 -0
- package/dist/esm/factories/container.factory.d.ts +9 -0
- package/dist/esm/factories/container.factory.js +112 -0
- package/dist/esm/factories/container.factory.js.map +1 -0
- package/dist/esm/factories/index.d.ts +24 -0
- package/dist/esm/factories/index.js +17 -0
- package/dist/esm/factories/index.js.map +1 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/stores/context.store.d.ts +4 -0
- package/dist/esm/stores/context.store.js +6 -0
- package/dist/esm/stores/context.store.js.map +1 -0
- package/dist/esm/stores/index.d.ts +5 -0
- package/dist/esm/stores/index.js +6 -0
- package/dist/esm/stores/index.js.map +1 -0
- package/dist/esm/stores/inject.store.d.ts +6 -0
- package/dist/esm/stores/inject.store.js +20 -0
- package/dist/esm/stores/inject.store.js.map +1 -0
- package/dist/esm/stores/injectable.store.d.ts +8 -0
- package/dist/esm/stores/injectable.store.js +12 -0
- package/dist/esm/stores/injectable.store.js.map +1 -0
- package/dist/esm/stores/locator.store.d.ts +7 -0
- package/dist/esm/stores/locator.store.js +33 -0
- package/dist/esm/stores/locator.store.js.map +1 -0
- package/dist/esm/stores/scope.store.d.ts +7 -0
- package/dist/esm/stores/scope.store.js +12 -0
- package/dist/esm/stores/scope.store.js.map +1 -0
- package/dist/esm/types/constructable.type.d.ts +1 -0
- package/dist/esm/types/constructable.type.js +2 -0
- package/dist/esm/types/constructable.type.js.map +1 -0
- package/dist/esm/types/context.type.d.ts +3 -0
- package/dist/esm/types/context.type.js +2 -0
- package/dist/esm/types/context.type.js.map +1 -0
- package/dist/esm/types/index.d.ts +5 -0
- package/dist/esm/types/index.js +6 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/inject.type.d.ts +9 -0
- package/dist/esm/types/inject.type.js +2 -0
- package/dist/esm/types/inject.type.js.map +1 -0
- package/dist/esm/types/injectable.type.d.ts +12 -0
- package/dist/esm/types/injectable.type.js +2 -0
- package/dist/esm/types/injectable.type.js.map +1 -0
- package/dist/esm/types/locator.type.d.ts +8 -0
- package/dist/esm/types/locator.type.js +2 -0
- package/dist/esm/types/locator.type.js.map +1 -0
- package/package.json +51 -0
- package/readme.md +27 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { InjectConfig, InjectableConfig, InjectionConfig } from '../types';
|
|
3
|
+
export declare class Container {
|
|
4
|
+
private readonly container;
|
|
5
|
+
constructor();
|
|
6
|
+
registerInjectable(config: InjectableConfig): void;
|
|
7
|
+
registerInject(config: InjectConfig): void;
|
|
8
|
+
createInjectable<T = unknown>(config: InjectionConfig<T>): T;
|
|
9
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { Context, InjectStore, InjectableStore, ScopeStore, fetchInLocator } from '../stores';
|
|
3
|
+
class Warehouse {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.scope = new ScopeStore();
|
|
6
|
+
this.injectables = new InjectableStore();
|
|
7
|
+
this.injects = new InjectStore();
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
class Dependency {
|
|
11
|
+
constructor({ container, context }) {
|
|
12
|
+
this.container = container;
|
|
13
|
+
this.context = context;
|
|
14
|
+
this.scope = new ScopeStore();
|
|
15
|
+
}
|
|
16
|
+
build(injectable) {
|
|
17
|
+
const config = this.container.injectables.fetch(injectable);
|
|
18
|
+
if (!config) {
|
|
19
|
+
throw Error(`Class ${injectable.toString()} is not found in the collection`);
|
|
20
|
+
}
|
|
21
|
+
const { scopeable, singleton, token } = config;
|
|
22
|
+
return this.createInstance({ token, scopeable, singleton });
|
|
23
|
+
}
|
|
24
|
+
createObject(token) {
|
|
25
|
+
const Constructor = token;
|
|
26
|
+
const tokens = this.reflectTokens(Constructor);
|
|
27
|
+
const params = tokens
|
|
28
|
+
? this.createReflectArgs({ token, tokens })
|
|
29
|
+
: this.createTokenArgs(token);
|
|
30
|
+
return new Constructor(...params);
|
|
31
|
+
}
|
|
32
|
+
reflectTokens(reference) {
|
|
33
|
+
return Reflect.getMetadata('design:paramtypes', reference);
|
|
34
|
+
}
|
|
35
|
+
createFromScope({ token, scope }) {
|
|
36
|
+
const instance = scope.fetch(token);
|
|
37
|
+
if (instance) {
|
|
38
|
+
return instance;
|
|
39
|
+
}
|
|
40
|
+
const object = this.createObject(token);
|
|
41
|
+
scope.push(token, object);
|
|
42
|
+
return object;
|
|
43
|
+
}
|
|
44
|
+
createFromContainer(token) {
|
|
45
|
+
const { container: { scope } } = this;
|
|
46
|
+
return this.createFromScope({ token, scope });
|
|
47
|
+
}
|
|
48
|
+
createInstance(props) {
|
|
49
|
+
const { token, scopeable, singleton } = props;
|
|
50
|
+
const { scope } = this;
|
|
51
|
+
if (singleton) {
|
|
52
|
+
return this.createFromContainer(token);
|
|
53
|
+
}
|
|
54
|
+
if (scopeable) {
|
|
55
|
+
return this.createFromScope({ token, scope });
|
|
56
|
+
}
|
|
57
|
+
return this.createObject(token);
|
|
58
|
+
}
|
|
59
|
+
createFromDecorator(inject) {
|
|
60
|
+
const { token, scopeable, singleton } = inject;
|
|
61
|
+
const locator = fetchInLocator(token);
|
|
62
|
+
if (locator) {
|
|
63
|
+
const { useClass: token } = locator;
|
|
64
|
+
return this.createInstance({ token, scopeable, singleton });
|
|
65
|
+
}
|
|
66
|
+
return this.createInstance({ token, scopeable, singleton });
|
|
67
|
+
}
|
|
68
|
+
createReflectArgs({ tokens, token }) {
|
|
69
|
+
const { container, context } = this;
|
|
70
|
+
const injects = container.injects.fetch(token);
|
|
71
|
+
return tokens.map((token, index) => {
|
|
72
|
+
const inject = injects[index];
|
|
73
|
+
if (inject) {
|
|
74
|
+
return this.createFromDecorator(inject);
|
|
75
|
+
}
|
|
76
|
+
const locator = fetchInLocator(token);
|
|
77
|
+
if (locator) {
|
|
78
|
+
const { useClass: token, scopeable, singleton } = locator;
|
|
79
|
+
return this.createInstance({ token, scopeable, singleton });
|
|
80
|
+
}
|
|
81
|
+
if (token === Context) {
|
|
82
|
+
return context;
|
|
83
|
+
}
|
|
84
|
+
return this.createObject(token);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
createTokenArgs(token) {
|
|
88
|
+
const injects = this.container.injects.fetch(token);
|
|
89
|
+
return injects.reduce((objects, { token }, index) => {
|
|
90
|
+
objects[index] = this.createObject(token);
|
|
91
|
+
return objects;
|
|
92
|
+
}, []);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export class Container {
|
|
96
|
+
constructor() {
|
|
97
|
+
this.container = new Warehouse();
|
|
98
|
+
}
|
|
99
|
+
registerInjectable(config) {
|
|
100
|
+
this.container.injectables.push(config);
|
|
101
|
+
}
|
|
102
|
+
registerInject(config) {
|
|
103
|
+
this.container.injects.push(config);
|
|
104
|
+
}
|
|
105
|
+
createInjectable(config) {
|
|
106
|
+
const { token, context } = config;
|
|
107
|
+
const { container } = this;
|
|
108
|
+
const dependency = new Dependency({ container, context });
|
|
109
|
+
return dependency.build(token);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=container.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container.factory.js","sourceRoot":"","sources":["../../../src/factories/container.factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Container } from './container.factory';
|
|
2
|
+
import { InjectConfig, InjectableConfig, InjectableToken, InjectionConfig } from '../types';
|
|
3
|
+
interface Injection<T> {
|
|
4
|
+
config: InjectionConfig<T>;
|
|
5
|
+
container?: Container;
|
|
6
|
+
}
|
|
7
|
+
interface Token<T> {
|
|
8
|
+
token: InjectableToken<T>;
|
|
9
|
+
container?: Container;
|
|
10
|
+
}
|
|
11
|
+
interface Injectable {
|
|
12
|
+
config: InjectableConfig;
|
|
13
|
+
container?: Container;
|
|
14
|
+
}
|
|
15
|
+
interface Inject {
|
|
16
|
+
config: InjectConfig;
|
|
17
|
+
container?: Container;
|
|
18
|
+
}
|
|
19
|
+
declare const createFromInvertly: <T = unknown>({ config, container }: Injection<T>) => T;
|
|
20
|
+
export declare const invertly: <T = unknown>({ token, container }: Token<T>) => T;
|
|
21
|
+
export declare const registerInjectable: ({ config, container }: Injectable) => void;
|
|
22
|
+
export declare const registerInject: ({ config, container }: Inject) => void;
|
|
23
|
+
export { Container } from './container.factory';
|
|
24
|
+
export default createFromInvertly;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Container } from './container.factory';
|
|
2
|
+
const rootContainer = new Container();
|
|
3
|
+
const createFromInvertly = ({ config, container }) => {
|
|
4
|
+
return (container || rootContainer).createInjectable(config);
|
|
5
|
+
};
|
|
6
|
+
export const invertly = ({ token, container }) => {
|
|
7
|
+
return createFromInvertly({ config: { token }, container });
|
|
8
|
+
};
|
|
9
|
+
export const registerInjectable = ({ config, container }) => {
|
|
10
|
+
(container || rootContainer).registerInjectable(config);
|
|
11
|
+
};
|
|
12
|
+
export const registerInject = ({ config, container }) => {
|
|
13
|
+
(container || rootContainer).registerInject(config);
|
|
14
|
+
};
|
|
15
|
+
export { Container } from './container.factory';
|
|
16
|
+
export default createFromInvertly;
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/factories/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AA4BhD,MAAM,aAAa,GAAG,IAAI,SAAS,EAAE,CAAC;AAEtC,MAAM,kBAAkB,GAAG,CAAc,EACvC,MAAM,EACN,SAAS,EACI,EAAK,EAAE;IACpB,OAAO,CAAC,SAAS,IAAI,aAAa,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAc,EAAE,KAAK,EAAE,SAAS,EAAY,EAAK,EAAE;IACzE,OAAO,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAc,EAAQ,EAAE;IAC5E,CAAC,SAAS,IAAI,aAAa,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAU,EAAQ,EAAE;IACpE,CAAC,SAAS,IAAI,aAAa,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import createFromInvertly from './factories';
|
|
2
|
+
export { Factory, Injectable, Scope, Singleton } from './decorators';
|
|
3
|
+
export { Container, invertly, registerInject, registerInjectable } from './factories';
|
|
4
|
+
export { Context, fetchInLocator, pushInLocator, saveInLocator } from './stores';
|
|
5
|
+
export { InjectableToken, InjectToken, LocatorConfig } from './types';
|
|
6
|
+
export default createFromInvertly;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import createFromInvertly from './factories';
|
|
2
|
+
export { Factory, Injectable, Scope, Singleton } from './decorators';
|
|
3
|
+
export { Container, invertly, registerInject, registerInjectable } from './factories';
|
|
4
|
+
export { Context, fetchInLocator, pushInLocator, saveInLocator } from './stores';
|
|
5
|
+
export default createFromInvertly;
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EACL,SAAS,EACT,QAAQ,EACR,cAAc,EACd,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,OAAO,EACP,cAAc,EACd,aAAa,EACb,aAAa,EACd,MAAM,UAAU,CAAC;AAGlB,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.store.js","sourceRoot":"","sources":["../../../src/stores/context.store.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,OAAQ,SAAQ,GAAoB;IACxC,KAAK,CAAc,GAAW;QACnC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stores/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export class InjectStore {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.collection = new Map();
|
|
4
|
+
}
|
|
5
|
+
push(config) {
|
|
6
|
+
const { parent, index } = config;
|
|
7
|
+
const injects = this.fetch(parent);
|
|
8
|
+
injects[index] = config;
|
|
9
|
+
}
|
|
10
|
+
fetch(token) {
|
|
11
|
+
const current = this.collection.get(token);
|
|
12
|
+
if (current) {
|
|
13
|
+
return current;
|
|
14
|
+
}
|
|
15
|
+
const injects = [];
|
|
16
|
+
this.collection.set(token, injects);
|
|
17
|
+
return injects;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=inject.store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject.store.js","sourceRoot":"","sources":["../../../src/stores/inject.store.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAW;IAAxB;QACU,eAAU,GAAyC,IAAI,GAAG,EAAE,CAAC;IAuBvE,CAAC;IArBQ,IAAI,CAAC,MAAoB;QAC9B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;QAEjC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEnC,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,KAAsB;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE3C,IAAI,OAAO,EAAE;YACX,OAAO,OAAO,CAAC;SAChB;QAED,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEpC,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { InjectableConfig, InjectableToken } from '../types';
|
|
2
|
+
type Config<T> = Undefined<InjectableConfig<T>>;
|
|
3
|
+
export declare class InjectableStore {
|
|
4
|
+
private collection;
|
|
5
|
+
push(config: InjectableConfig): void;
|
|
6
|
+
fetch<T = unknown>(token: InjectableToken<T>): Config<T>;
|
|
7
|
+
}
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export class InjectableStore {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.collection = new Map();
|
|
4
|
+
}
|
|
5
|
+
push(config) {
|
|
6
|
+
this.collection.set(config.token, config);
|
|
7
|
+
}
|
|
8
|
+
fetch(token) {
|
|
9
|
+
return this.collection.get(token);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=injectable.store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectable.store.js","sourceRoot":"","sources":["../../../src/stores/injectable.store.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,eAAe;IAA5B;QACU,eAAU,GAA2C,IAAI,GAAG,EAAE,CAAC;IASzE,CAAC;IAPQ,IAAI,CAAC,MAAwB;QAClC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAEM,KAAK,CAAc,KAAyB;QACjD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { InjectableToken, InjectToken, LocatorConfig } from '../types';
|
|
2
|
+
type Reference = string | symbol | LocatorConfig;
|
|
3
|
+
type Config<T> = Undefined<LocatorConfig<T>>;
|
|
4
|
+
export declare function saveInLocator(dependencies: LocatorConfig[]): void;
|
|
5
|
+
export declare function pushInLocator(reference: Reference, token?: InjectableToken): void;
|
|
6
|
+
export declare function fetchInLocator<T = unknown>(token: InjectToken<T>): Config<T>;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
class LocatorStore {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.collection = new Map();
|
|
4
|
+
}
|
|
5
|
+
save(dependencies) {
|
|
6
|
+
dependencies.forEach((config) => {
|
|
7
|
+
this.collection.set(config.token, config);
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
push(reference, token) {
|
|
11
|
+
if (typeof reference !== 'string' && typeof reference !== 'symbol') {
|
|
12
|
+
const { token, useClass } = reference;
|
|
13
|
+
this.collection.set(token, { token, useClass });
|
|
14
|
+
}
|
|
15
|
+
else if (token) {
|
|
16
|
+
this.collection.set(reference, { token, useClass: token });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
fetch(token) {
|
|
20
|
+
return this.collection.get(token);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const locatorStore = new LocatorStore();
|
|
24
|
+
export function saveInLocator(dependencies) {
|
|
25
|
+
locatorStore.save(dependencies);
|
|
26
|
+
}
|
|
27
|
+
export function pushInLocator(reference, token) {
|
|
28
|
+
locatorStore.push(reference, token);
|
|
29
|
+
}
|
|
30
|
+
export function fetchInLocator(token) {
|
|
31
|
+
return locatorStore.fetch(token);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=locator.store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locator.store.js","sourceRoot":"","sources":["../../../src/stores/locator.store.ts"],"names":[],"mappings":"AAKA,MAAM,YAAY;IAGhB;QACE,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;IAC9B,CAAC;IAEM,IAAI,CAAC,YAA6B;QACvC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,IAAI,CAAC,SAAoB,EAAE,KAAuB;QACvD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;YAClE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;YAEtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;SACjD;aAAM,IAAI,KAAK,EAAE;YAChB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;SAC5D;IACH,CAAC;IAEM,KAAK,CAAc,KAAqB;QAC7C,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;CACF;AAED,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AAExC,MAAM,UAAU,aAAa,CAAC,YAA6B;IACzD,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,SAAoB,EACpB,KAAuB;IAEvB,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,cAAc,CAAc,KAAqB;IAC/D,OAAO,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope.store.js","sourceRoot":"","sources":["../../../src/stores/scope.store.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IAGrB;QACE,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;IAC9B,CAAC;IAEM,IAAI,CAAC,KAAsB,EAAE,KAAc;QAChD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAEM,KAAK,CAAc,KAAsB;QAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAM,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type Constructable<T = any> = new (...args: any[]) => T;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constructable.type.js","sourceRoot":"","sources":["../../../src/types/constructable.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.type.js","sourceRoot":"","sources":["../../../src/types/context.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { InjectableToken } from './injectable.type';
|
|
2
|
+
export type InjectToken<T = unknown> = InjectableToken<T> | string | symbol;
|
|
3
|
+
export type InjectConfig<T = unknown> = {
|
|
4
|
+
index: number;
|
|
5
|
+
parent: InjectableToken;
|
|
6
|
+
scopeable: boolean;
|
|
7
|
+
singleton: boolean;
|
|
8
|
+
token: InjectToken<T>;
|
|
9
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject.type.js","sourceRoot":"","sources":["../../../src/types/inject.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Constructable } from './constructable.type';
|
|
2
|
+
import { AbstractContext } from './context.type';
|
|
3
|
+
export type InjectableToken<T = unknown> = Object | Function | CallableFunction | Constructable<T>;
|
|
4
|
+
export interface InjectableConfig<T = unknown> {
|
|
5
|
+
scopeable: boolean;
|
|
6
|
+
singleton: boolean;
|
|
7
|
+
token: InjectableToken<T>;
|
|
8
|
+
}
|
|
9
|
+
export interface InjectionConfig<T> {
|
|
10
|
+
token: InjectableToken<T>;
|
|
11
|
+
context?: AbstractContext;
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectable.type.js","sourceRoot":"","sources":["../../../src/types/injectable.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locator.type.js","sourceRoot":"","sources":["../../../src/types/locator.type.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rolster/invertly",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Invertly is a package that allows you to implement class mapping to identify and inject their dependencies.",
|
|
5
|
+
"module": "dist/esm/index.js",
|
|
6
|
+
"main": "dist/cjs/index.js",
|
|
7
|
+
"unpkg": "dist/es/index.js",
|
|
8
|
+
"types": "dist/esm/index.d.ts",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"author": "Rolster Technology <rolster.developments@gmail.com>",
|
|
11
|
+
"contributors": [
|
|
12
|
+
{
|
|
13
|
+
"name": "Daniel Andrés Castillo Pedroza",
|
|
14
|
+
"email": "ing.dacastillop@gmail.com"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"files": [
|
|
18
|
+
"dist/",
|
|
19
|
+
"types/"
|
|
20
|
+
],
|
|
21
|
+
"scripts": {
|
|
22
|
+
"prettier": "prettier . --write",
|
|
23
|
+
"clean": "rimraf ./dist",
|
|
24
|
+
"build": "npm run clean && tsc -p tsconfig.json && rollup -c rollup.config.js",
|
|
25
|
+
"test": "jest --coverage",
|
|
26
|
+
"test:watch": "jest --coverage --watch",
|
|
27
|
+
"prepublishOnly": "npm run build"
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"reflect-metadata": "^0.1.13"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@rollup/plugin-commonjs": "^25.0.4",
|
|
34
|
+
"@rollup/plugin-node-resolve": "^15.2.1",
|
|
35
|
+
"@rollup/plugin-typescript": "^11.1.3",
|
|
36
|
+
"@rolster/types": "^1.0.0",
|
|
37
|
+
"@types/jest": "^29.5.1",
|
|
38
|
+
"jest": "^29.5.0",
|
|
39
|
+
"prettier": "^3.0.3",
|
|
40
|
+
"rimraf": "^3.0.2",
|
|
41
|
+
"rollup": "^2.32.0",
|
|
42
|
+
"ts-jest": "^29.1.0",
|
|
43
|
+
"tslib": "^2.4.0",
|
|
44
|
+
"typescript": "^4.9.3"
|
|
45
|
+
},
|
|
46
|
+
"repository": {
|
|
47
|
+
"type": "git",
|
|
48
|
+
"url": "https://github.com/rolster-developments/typescript-invertly.git"
|
|
49
|
+
},
|
|
50
|
+
"keywords": ["rolster", "typescript", "invertly", "ioc"]
|
|
51
|
+
}
|
package/readme.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Rolster Typescript Invertly
|
|
2
|
+
|
|
3
|
+
Invertly is a package that allows you to implement class mapping to identify and inject their dependencies.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
npm i @rolster/typescript-invertly
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Configuration
|
|
12
|
+
|
|
13
|
+
You must install the `@rolster/typescript-types` to define package data types, which are configured by adding them to the `files` property of the `tsconfig.json` file.
|
|
14
|
+
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
"compilerOptions": {
|
|
18
|
+
"emitDecoratorMetadata": true,
|
|
19
|
+
"experimentalDecorators": true
|
|
20
|
+
},
|
|
21
|
+
"files": ["node_modules/@rolster/typescript-types/index.d.ts"]
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Contributing
|
|
26
|
+
|
|
27
|
+
- Daniel Andrés Castillo Pedroza :rocket:
|