@decaf-ts/injectable-decorators 1.6.1 → 1.6.2
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.md +21 -157
- package/README.md +272 -5
- package/dist/injectable-decorators.cjs +291 -136
- package/dist/injectable-decorators.esm.cjs +291 -136
- package/lib/Injectables.cjs +76 -18
- package/lib/Injectables.d.ts +75 -17
- package/lib/constants.cjs +8 -7
- package/lib/constants.d.ts +7 -6
- package/lib/decorators.cjs +158 -98
- package/lib/decorators.d.ts +80 -19
- package/lib/esm/Injectables.d.ts +75 -17
- package/lib/esm/Injectables.js +77 -19
- package/lib/esm/constants.d.ts +7 -6
- package/lib/esm/constants.js +8 -7
- package/lib/esm/decorators.d.ts +80 -19
- package/lib/esm/decorators.js +159 -98
- package/lib/esm/index.d.ts +6 -8
- package/lib/esm/index.js +12 -14
- package/lib/esm/registry.d.ts +68 -21
- package/lib/esm/registry.js +39 -2
- package/lib/esm/utils.d.ts +9 -9
- package/lib/esm/utils.js +10 -10
- package/lib/index.cjs +7 -9
- package/lib/index.d.ts +6 -8
- package/lib/registry.cjs +39 -2
- package/lib/registry.d.ts +68 -21
- package/lib/utils.cjs +10 -10
- package/lib/utils.d.ts +9 -9
- package/package.json +3 -3
package/lib/Injectables.cjs
CHANGED
|
@@ -3,59 +3,117 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Injectables = void 0;
|
|
4
4
|
const registry_1 = require("./registry.cjs");
|
|
5
5
|
/**
|
|
6
|
-
* @
|
|
6
|
+
* @description Central registry for managing injectable dependencies.
|
|
7
|
+
* @summary Static class holding the access to the injectables functions. Provides methods for registering,
|
|
8
|
+
* retrieving, and building injectable objects.
|
|
9
|
+
* @template T Type of the injectable object
|
|
7
10
|
*
|
|
8
11
|
* @class Injectables
|
|
9
|
-
*
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // Define an injectable class
|
|
15
|
+
* @injectable()
|
|
16
|
+
* class MyService {
|
|
17
|
+
* doSomething() {
|
|
18
|
+
* return 'Hello World';
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
*
|
|
22
|
+
* // Inject the service into another class
|
|
23
|
+
* class MyComponent {
|
|
24
|
+
* @inject()
|
|
25
|
+
* private service!: MyService;
|
|
26
|
+
*
|
|
27
|
+
* useService() {
|
|
28
|
+
* return this.service.doSomething();
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
*
|
|
32
|
+
* @mermaid
|
|
33
|
+
* sequenceDiagram
|
|
34
|
+
* participant Client
|
|
35
|
+
* participant Injectables
|
|
36
|
+
* participant Registry
|
|
37
|
+
*
|
|
38
|
+
* Client->>Injectables: register(MyService)
|
|
39
|
+
* Injectables->>Registry: register(MyService)
|
|
40
|
+
* Registry-->>Injectables: void
|
|
41
|
+
*
|
|
42
|
+
* Client->>Injectables: get("MyService")
|
|
43
|
+
* Injectables->>Registry: get("MyService")
|
|
44
|
+
* Registry-->>Injectables: MyService instance
|
|
45
|
+
* Injectables-->>Client: MyService instance
|
|
10
46
|
*/
|
|
11
47
|
class Injectables {
|
|
12
48
|
static { this.actingInjectablesRegistry = undefined; }
|
|
13
49
|
constructor() { }
|
|
14
50
|
/**
|
|
15
|
-
* @
|
|
16
|
-
* @
|
|
17
|
-
*
|
|
51
|
+
* @description Fetches an injectable instance by its registered name.
|
|
52
|
+
* @summary Retrieves the named {@link Injectable} from the registry. If the injectable is a singleton,
|
|
53
|
+
* returns the existing instance. Otherwise, creates a new instance.
|
|
54
|
+
* @template T Type of the injectable object to retrieve
|
|
55
|
+
* @param {string} name The registered name of the injectable to retrieve
|
|
56
|
+
* @param {any[]} args Constructor arguments to pass when instantiating the injectable
|
|
57
|
+
* @return {Injectable<T> | undefined} The injectable instance or undefined if not found
|
|
18
58
|
*/
|
|
19
59
|
static get(name, ...args) {
|
|
20
60
|
return Injectables.getRegistry().get(name, ...args);
|
|
21
61
|
}
|
|
22
62
|
/**
|
|
23
|
-
* @
|
|
24
|
-
* @
|
|
25
|
-
* @
|
|
26
|
-
*
|
|
63
|
+
* @description Adds a class or object to the injectable registry.
|
|
64
|
+
* @summary Registers an injectable constructor or instance with the registry, making it available for injection.
|
|
65
|
+
* @template T Type of the injectable object to register
|
|
66
|
+
* @param {Injectable<T>} constructor The class constructor or object instance to register
|
|
67
|
+
* @param {any[]} args Additional arguments for registration (category, singleton flag, etc.)
|
|
68
|
+
* @return {void}
|
|
27
69
|
*/
|
|
28
70
|
static register(constructor, ...args) {
|
|
29
71
|
return Injectables.getRegistry().register(constructor, ...args);
|
|
30
72
|
}
|
|
31
73
|
/**
|
|
32
|
-
* @
|
|
33
|
-
* @
|
|
34
|
-
* @
|
|
35
|
-
* @
|
|
36
|
-
*
|
|
74
|
+
* @description Creates a new instance of an injectable class.
|
|
75
|
+
* @summary Instantiates an injectable class using its constructor and the provided arguments.
|
|
76
|
+
* @template T Type of the object to build
|
|
77
|
+
* @param {Record<string, any>} obj Object containing the name of the injectable to build
|
|
78
|
+
* @param {any[]} args Constructor arguments to pass when instantiating the injectable
|
|
79
|
+
* @return {T} The newly created instance
|
|
37
80
|
*/
|
|
38
81
|
static build(obj, ...args) {
|
|
39
82
|
return Injectables.getRegistry().build(obj, ...args);
|
|
40
83
|
}
|
|
41
84
|
/**
|
|
42
|
-
* @
|
|
43
|
-
* @
|
|
85
|
+
* @description Replaces the current registry implementation.
|
|
86
|
+
* @summary Sets a new {@link InjectablesRegistry} implementation, allowing for custom registry behavior.
|
|
87
|
+
* @param {InjectablesRegistry} operationsRegistry The new implementation of Registry to use
|
|
88
|
+
* @return {void}
|
|
44
89
|
*/
|
|
45
90
|
static setRegistry(operationsRegistry) {
|
|
46
91
|
Injectables.actingInjectablesRegistry = operationsRegistry;
|
|
47
92
|
}
|
|
48
93
|
/**
|
|
49
|
-
* @
|
|
94
|
+
* @description Provides access to the current registry instance.
|
|
95
|
+
* @summary Returns the current {@link InjectablesRegistry} or creates a default one if none exists.
|
|
96
|
+
* @return {InjectablesRegistry} The current registry instance
|
|
50
97
|
*/
|
|
51
98
|
static getRegistry() {
|
|
52
99
|
if (!Injectables.actingInjectablesRegistry)
|
|
53
100
|
Injectables.actingInjectablesRegistry = new registry_1.InjectableRegistryImp();
|
|
54
101
|
return Injectables.actingInjectablesRegistry;
|
|
55
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* @description Clears all registered injectables.
|
|
105
|
+
* @summary Resets the registry to a clean state by creating a new empty registry instance.
|
|
106
|
+
* @return {void}
|
|
107
|
+
*/
|
|
56
108
|
static reset() {
|
|
57
109
|
Injectables.setRegistry(new registry_1.InjectableRegistryImp());
|
|
58
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* @description Removes specific injectables from the registry based on a pattern.
|
|
113
|
+
* @summary Selectively resets the registry by removing only the injectables whose names match the provided pattern.
|
|
114
|
+
* @param {string | RegExp} match A string or regular expression pattern to match against injectable names
|
|
115
|
+
* @return {void}
|
|
116
|
+
*/
|
|
59
117
|
static selectiveReset(match) {
|
|
60
118
|
const regexp = typeof match === "string" ? new RegExp(match) : match;
|
|
61
119
|
Injectables.actingInjectablesRegistry["cache"] = Object.entries(Injectables.actingInjectablesRegistry["cache"]).reduce((accum, [key, val]) => {
|
|
@@ -66,4 +124,4 @@ class Injectables {
|
|
|
66
124
|
}
|
|
67
125
|
}
|
|
68
126
|
exports.Injectables = Injectables;
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5qZWN0YWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvSW5qZWN0YWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBSW9CO0FBRXBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlDRztBQUNILE1BQWEsV0FBVzthQUNQLDhCQUF5QixHQUF5QixTQUFTLENBQUM7SUFFM0UsZ0JBQXVCLENBQUM7SUFFeEI7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsR0FBRyxDQUFJLElBQVksRUFBRSxHQUFHLElBQVc7UUFDeEMsT0FBTyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBSSxXQUEwQixFQUFFLEdBQUcsSUFBVztRQUMzRCxPQUFPLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFJLEdBQXdCLEVBQUUsR0FBRyxJQUFXO1FBQ3RELE9BQU8sV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsV0FBVyxDQUFDLGtCQUF1QztRQUN4RCxXQUFXLENBQUMseUJBQXlCLEdBQUcsa0JBQWtCLENBQUM7SUFDN0QsQ0FBQztJQUNEOzs7O09BSUc7SUFDSyxNQUFNLENBQUMsV0FBVztRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QjtZQUN4QyxXQUFXLENBQUMseUJBQXlCLEdBQUcsSUFBSSxnQ0FBcUIsRUFBRSxDQUFDO1FBQ3RFLE9BQU8sV0FBVyxDQUFDLHlCQUF5QixDQUFDO0lBQy9DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUs7UUFDVixXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksZ0NBQXFCLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBc0I7UUFDMUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3BFLFdBQVcsQ0FBQyx5QkFBaUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUNyRSxXQUFXLENBQUMseUJBQWlDLENBQUMsT0FBTyxDQUFDLENBQ3hELENBQUMsTUFBTSxDQUFDLENBQUMsS0FBMEIsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ2xELElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ3pDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQzs7QUFyRkgsa0NBc0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0YWJsZVJlZ2lzdHJ5SW1wLFxuICBJbmplY3RhYmxlc1JlZ2lzdHJ5LFxufSBmcm9tIFwiLi9yZWdpc3RyeVwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDZW50cmFsIHJlZ2lzdHJ5IGZvciBtYW5hZ2luZyBpbmplY3RhYmxlIGRlcGVuZGVuY2llcy5cbiAqIEBzdW1tYXJ5IFN0YXRpYyBjbGFzcyBob2xkaW5nIHRoZSBhY2Nlc3MgdG8gdGhlIGluamVjdGFibGVzIGZ1bmN0aW9ucy4gUHJvdmlkZXMgbWV0aG9kcyBmb3IgcmVnaXN0ZXJpbmcsXG4gKiByZXRyaWV2aW5nLCBhbmQgYnVpbGRpbmcgaW5qZWN0YWJsZSBvYmplY3RzLlxuICogQHRlbXBsYXRlIFQgVHlwZSBvZiB0aGUgaW5qZWN0YWJsZSBvYmplY3RcbiAqIFxuICogQGNsYXNzIEluamVjdGFibGVzXG4gKiBcbiAqIEBleGFtcGxlXG4gKiAvLyBEZWZpbmUgYW4gaW5qZWN0YWJsZSBjbGFzc1xuICogQGluamVjdGFibGUoKVxuICogY2xhc3MgTXlTZXJ2aWNlIHtcbiAqICAgZG9Tb21ldGhpbmcoKSB7XG4gKiAgICAgcmV0dXJuICdIZWxsbyBXb3JsZCc7XG4gKiAgIH1cbiAqIH1cbiAqIFxuICogLy8gSW5qZWN0IHRoZSBzZXJ2aWNlIGludG8gYW5vdGhlciBjbGFzc1xuICogY2xhc3MgTXlDb21wb25lbnQge1xuICogICBAaW5qZWN0KClcbiAqICAgcHJpdmF0ZSBzZXJ2aWNlITogTXlTZXJ2aWNlO1xuICogICBcbiAqICAgdXNlU2VydmljZSgpIHtcbiAqICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmRvU29tZXRoaW5nKCk7XG4gKiAgIH1cbiAqIH1cbiAqIFxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgSW5qZWN0YWJsZXNcbiAqICAgcGFydGljaXBhbnQgUmVnaXN0cnlcbiAqICAgXG4gKiAgIENsaWVudC0+PkluamVjdGFibGVzOiByZWdpc3RlcihNeVNlcnZpY2UpXG4gKiAgIEluamVjdGFibGVzLT4+UmVnaXN0cnk6IHJlZ2lzdGVyKE15U2VydmljZSlcbiAqICAgUmVnaXN0cnktLT4+SW5qZWN0YWJsZXM6IHZvaWRcbiAqICAgXG4gKiAgIENsaWVudC0+PkluamVjdGFibGVzOiBnZXQoXCJNeVNlcnZpY2VcIilcbiAqICAgSW5qZWN0YWJsZXMtPj5SZWdpc3RyeTogZ2V0KFwiTXlTZXJ2aWNlXCIpXG4gKiAgIFJlZ2lzdHJ5LS0+PkluamVjdGFibGVzOiBNeVNlcnZpY2UgaW5zdGFuY2VcbiAqICAgSW5qZWN0YWJsZXMtLT4+Q2xpZW50OiBNeVNlcnZpY2UgaW5zdGFuY2VcbiAqL1xuZXhwb3J0IGNsYXNzIEluamVjdGFibGVzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgYWN0aW5nSW5qZWN0YWJsZXNSZWdpc3RyeT86IEluamVjdGFibGVzUmVnaXN0cnkgPSB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGZXRjaGVzIGFuIGluamVjdGFibGUgaW5zdGFuY2UgYnkgaXRzIHJlZ2lzdGVyZWQgbmFtZS5cbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBuYW1lZCB7QGxpbmsgSW5qZWN0YWJsZX0gZnJvbSB0aGUgcmVnaXN0cnkuIElmIHRoZSBpbmplY3RhYmxlIGlzIGEgc2luZ2xldG9uLFxuICAgKiByZXR1cm5zIHRoZSBleGlzdGluZyBpbnN0YW5jZS4gT3RoZXJ3aXNlLCBjcmVhdGVzIGEgbmV3IGluc3RhbmNlLlxuICAgKiBAdGVtcGxhdGUgVCBUeXBlIG9mIHRoZSBpbmplY3RhYmxlIG9iamVjdCB0byByZXRyaWV2ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgcmVnaXN0ZXJlZCBuYW1lIG9mIHRoZSBpbmplY3RhYmxlIHRvIHJldHJpZXZlXG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3MgQ29uc3RydWN0b3IgYXJndW1lbnRzIHRvIHBhc3Mgd2hlbiBpbnN0YW50aWF0aW5nIHRoZSBpbmplY3RhYmxlXG4gICAqIEByZXR1cm4ge0luamVjdGFibGU8VD4gfCB1bmRlZmluZWR9IFRoZSBpbmplY3RhYmxlIGluc3RhbmNlIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICovXG4gIHN0YXRpYyBnZXQ8VD4obmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IEluamVjdGFibGU8VD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBJbmplY3RhYmxlcy5nZXRSZWdpc3RyeSgpLmdldChuYW1lLCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQWRkcyBhIGNsYXNzIG9yIG9iamVjdCB0byB0aGUgaW5qZWN0YWJsZSByZWdpc3RyeS5cbiAgICogQHN1bW1hcnkgUmVnaXN0ZXJzIGFuIGluamVjdGFibGUgY29uc3RydWN0b3Igb3IgaW5zdGFuY2Ugd2l0aCB0aGUgcmVnaXN0cnksIG1ha2luZyBpdCBhdmFpbGFibGUgZm9yIGluamVjdGlvbi5cbiAgICogQHRlbXBsYXRlIFQgVHlwZSBvZiB0aGUgaW5qZWN0YWJsZSBvYmplY3QgdG8gcmVnaXN0ZXJcbiAgICogQHBhcmFtIHtJbmplY3RhYmxlPFQ+fSBjb25zdHJ1Y3RvciBUaGUgY2xhc3MgY29uc3RydWN0b3Igb3Igb2JqZWN0IGluc3RhbmNlIHRvIHJlZ2lzdGVyXG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3MgQWRkaXRpb25hbCBhcmd1bWVudHMgZm9yIHJlZ2lzdHJhdGlvbiAoY2F0ZWdvcnksIHNpbmdsZXRvbiBmbGFnLCBldGMuKVxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyPFQ+KGNvbnN0cnVjdG9yOiBJbmplY3RhYmxlPFQ+LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgIHJldHVybiBJbmplY3RhYmxlcy5nZXRSZWdpc3RyeSgpLnJlZ2lzdGVyKGNvbnN0cnVjdG9yLCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBhbiBpbmplY3RhYmxlIGNsYXNzLlxuICAgKiBAc3VtbWFyeSBJbnN0YW50aWF0ZXMgYW4gaW5qZWN0YWJsZSBjbGFzcyB1c2luZyBpdHMgY29uc3RydWN0b3IgYW5kIHRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAqIEB0ZW1wbGF0ZSBUIFR5cGUgb2YgdGhlIG9iamVjdCB0byBidWlsZFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG9iaiBPYmplY3QgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgaW5qZWN0YWJsZSB0byBidWlsZFxuICAgKiBAcGFyYW0ge2FueVtdfSBhcmdzIENvbnN0cnVjdG9yIGFyZ3VtZW50cyB0byBwYXNzIHdoZW4gaW5zdGFudGlhdGluZyB0aGUgaW5qZWN0YWJsZVxuICAgKiBAcmV0dXJuIHtUfSBUaGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZVxuICAgKi9cbiAgc3RhdGljIGJ1aWxkPFQ+KG9iajogUmVjb3JkPHN0cmluZywgYW55PiwgLi4uYXJnczogYW55W10pOiBUIHtcbiAgICByZXR1cm4gSW5qZWN0YWJsZXMuZ2V0UmVnaXN0cnkoKS5idWlsZChvYmosIC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBsYWNlcyB0aGUgY3VycmVudCByZWdpc3RyeSBpbXBsZW1lbnRhdGlvbi5cbiAgICogQHN1bW1hcnkgU2V0cyBhIG5ldyB7QGxpbmsgSW5qZWN0YWJsZXNSZWdpc3RyeX0gaW1wbGVtZW50YXRpb24sIGFsbG93aW5nIGZvciBjdXN0b20gcmVnaXN0cnkgYmVoYXZpb3IuXG4gICAqIEBwYXJhbSB7SW5qZWN0YWJsZXNSZWdpc3RyeX0gb3BlcmF0aW9uc1JlZ2lzdHJ5IFRoZSBuZXcgaW1wbGVtZW50YXRpb24gb2YgUmVnaXN0cnkgdG8gdXNlXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgc2V0UmVnaXN0cnkob3BlcmF0aW9uc1JlZ2lzdHJ5OiBJbmplY3RhYmxlc1JlZ2lzdHJ5KSB7XG4gICAgSW5qZWN0YWJsZXMuYWN0aW5nSW5qZWN0YWJsZXNSZWdpc3RyeSA9IG9wZXJhdGlvbnNSZWdpc3RyeTtcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgY3VycmVudCByZWdpc3RyeSBpbnN0YW5jZS5cbiAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgY3VycmVudCB7QGxpbmsgSW5qZWN0YWJsZXNSZWdpc3RyeX0gb3IgY3JlYXRlcyBhIGRlZmF1bHQgb25lIGlmIG5vbmUgZXhpc3RzLlxuICAgKiBAcmV0dXJuIHtJbmplY3RhYmxlc1JlZ2lzdHJ5fSBUaGUgY3VycmVudCByZWdpc3RyeSBpbnN0YW5jZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0UmVnaXN0cnkoKSB7XG4gICAgaWYgKCFJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5KVxuICAgICAgSW5qZWN0YWJsZXMuYWN0aW5nSW5qZWN0YWJsZXNSZWdpc3RyeSA9IG5ldyBJbmplY3RhYmxlUmVnaXN0cnlJbXAoKTtcbiAgICByZXR1cm4gSW5qZWN0YWJsZXMuYWN0aW5nSW5qZWN0YWJsZXNSZWdpc3RyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2xlYXJzIGFsbCByZWdpc3RlcmVkIGluamVjdGFibGVzLlxuICAgKiBAc3VtbWFyeSBSZXNldHMgdGhlIHJlZ2lzdHJ5IHRvIGEgY2xlYW4gc3RhdGUgYnkgY3JlYXRpbmcgYSBuZXcgZW1wdHkgcmVnaXN0cnkgaW5zdGFuY2UuXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgcmVzZXQoKSB7XG4gICAgSW5qZWN0YWJsZXMuc2V0UmVnaXN0cnkobmV3IEluamVjdGFibGVSZWdpc3RyeUltcCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyBzcGVjaWZpYyBpbmplY3RhYmxlcyBmcm9tIHRoZSByZWdpc3RyeSBiYXNlZCBvbiBhIHBhdHRlcm4uXG4gICAqIEBzdW1tYXJ5IFNlbGVjdGl2ZWx5IHJlc2V0cyB0aGUgcmVnaXN0cnkgYnkgcmVtb3Zpbmcgb25seSB0aGUgaW5qZWN0YWJsZXMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHByb3ZpZGVkIHBhdHRlcm4uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgUmVnRXhwfSBtYXRjaCBBIHN0cmluZyBvciByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiB0byBtYXRjaCBhZ2FpbnN0IGluamVjdGFibGUgbmFtZXNcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBzZWxlY3RpdmVSZXNldChtYXRjaDogc3RyaW5nIHwgUmVnRXhwKSB7XG4gICAgY29uc3QgcmVnZXhwID0gdHlwZW9mIG1hdGNoID09PSBcInN0cmluZ1wiID8gbmV3IFJlZ0V4cChtYXRjaCkgOiBtYXRjaDtcbiAgICAoSW5qZWN0YWJsZXMuYWN0aW5nSW5qZWN0YWJsZXNSZWdpc3RyeSBhcyBhbnkpW1wiY2FjaGVcIl0gPSBPYmplY3QuZW50cmllcyhcbiAgICAgIChJbmplY3RhYmxlcy5hY3RpbmdJbmplY3RhYmxlc1JlZ2lzdHJ5IGFzIGFueSlbXCJjYWNoZVwiXVxuICAgICkucmVkdWNlKChhY2N1bTogUmVjb3JkPHN0cmluZywgYW55PiwgW2tleSwgdmFsXSkgPT4ge1xuICAgICAgaWYgKCFrZXkubWF0Y2gocmVnZXhwKSkgYWNjdW1ba2V5XSA9IHZhbDtcbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LCB7fSk7XG4gIH1cbn1cbiJdfQ==
|
package/lib/Injectables.d.ts
CHANGED
|
@@ -1,43 +1,101 @@
|
|
|
1
1
|
import { Injectable, InjectablesRegistry } from "./registry";
|
|
2
2
|
/**
|
|
3
|
-
* @
|
|
3
|
+
* @description Central registry for managing injectable dependencies.
|
|
4
|
+
* @summary Static class holding the access to the injectables functions. Provides methods for registering,
|
|
5
|
+
* retrieving, and building injectable objects.
|
|
6
|
+
* @template T Type of the injectable object
|
|
4
7
|
*
|
|
5
8
|
* @class Injectables
|
|
6
|
-
*
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* // Define an injectable class
|
|
12
|
+
* @injectable()
|
|
13
|
+
* class MyService {
|
|
14
|
+
* doSomething() {
|
|
15
|
+
* return 'Hello World';
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
*
|
|
19
|
+
* // Inject the service into another class
|
|
20
|
+
* class MyComponent {
|
|
21
|
+
* @inject()
|
|
22
|
+
* private service!: MyService;
|
|
23
|
+
*
|
|
24
|
+
* useService() {
|
|
25
|
+
* return this.service.doSomething();
|
|
26
|
+
* }
|
|
27
|
+
* }
|
|
28
|
+
*
|
|
29
|
+
* @mermaid
|
|
30
|
+
* sequenceDiagram
|
|
31
|
+
* participant Client
|
|
32
|
+
* participant Injectables
|
|
33
|
+
* participant Registry
|
|
34
|
+
*
|
|
35
|
+
* Client->>Injectables: register(MyService)
|
|
36
|
+
* Injectables->>Registry: register(MyService)
|
|
37
|
+
* Registry-->>Injectables: void
|
|
38
|
+
*
|
|
39
|
+
* Client->>Injectables: get("MyService")
|
|
40
|
+
* Injectables->>Registry: get("MyService")
|
|
41
|
+
* Registry-->>Injectables: MyService instance
|
|
42
|
+
* Injectables-->>Client: MyService instance
|
|
7
43
|
*/
|
|
8
44
|
export declare class Injectables {
|
|
9
45
|
private static actingInjectablesRegistry?;
|
|
10
46
|
private constructor();
|
|
11
47
|
/**
|
|
12
|
-
* @
|
|
13
|
-
* @
|
|
14
|
-
*
|
|
48
|
+
* @description Fetches an injectable instance by its registered name.
|
|
49
|
+
* @summary Retrieves the named {@link Injectable} from the registry. If the injectable is a singleton,
|
|
50
|
+
* returns the existing instance. Otherwise, creates a new instance.
|
|
51
|
+
* @template T Type of the injectable object to retrieve
|
|
52
|
+
* @param {string} name The registered name of the injectable to retrieve
|
|
53
|
+
* @param {any[]} args Constructor arguments to pass when instantiating the injectable
|
|
54
|
+
* @return {Injectable<T> | undefined} The injectable instance or undefined if not found
|
|
15
55
|
*/
|
|
16
56
|
static get<T>(name: string, ...args: any[]): Injectable<T> | undefined;
|
|
17
57
|
/**
|
|
18
|
-
* @
|
|
19
|
-
* @
|
|
20
|
-
* @
|
|
21
|
-
*
|
|
58
|
+
* @description Adds a class or object to the injectable registry.
|
|
59
|
+
* @summary Registers an injectable constructor or instance with the registry, making it available for injection.
|
|
60
|
+
* @template T Type of the injectable object to register
|
|
61
|
+
* @param {Injectable<T>} constructor The class constructor or object instance to register
|
|
62
|
+
* @param {any[]} args Additional arguments for registration (category, singleton flag, etc.)
|
|
63
|
+
* @return {void}
|
|
22
64
|
*/
|
|
23
65
|
static register<T>(constructor: Injectable<T>, ...args: any[]): void;
|
|
24
66
|
/**
|
|
25
|
-
* @
|
|
26
|
-
* @
|
|
27
|
-
* @
|
|
28
|
-
* @
|
|
29
|
-
*
|
|
67
|
+
* @description Creates a new instance of an injectable class.
|
|
68
|
+
* @summary Instantiates an injectable class using its constructor and the provided arguments.
|
|
69
|
+
* @template T Type of the object to build
|
|
70
|
+
* @param {Record<string, any>} obj Object containing the name of the injectable to build
|
|
71
|
+
* @param {any[]} args Constructor arguments to pass when instantiating the injectable
|
|
72
|
+
* @return {T} The newly created instance
|
|
30
73
|
*/
|
|
31
74
|
static build<T>(obj: Record<string, any>, ...args: any[]): T;
|
|
32
75
|
/**
|
|
33
|
-
* @
|
|
34
|
-
* @
|
|
76
|
+
* @description Replaces the current registry implementation.
|
|
77
|
+
* @summary Sets a new {@link InjectablesRegistry} implementation, allowing for custom registry behavior.
|
|
78
|
+
* @param {InjectablesRegistry} operationsRegistry The new implementation of Registry to use
|
|
79
|
+
* @return {void}
|
|
35
80
|
*/
|
|
36
81
|
static setRegistry(operationsRegistry: InjectablesRegistry): void;
|
|
37
82
|
/**
|
|
38
|
-
* @
|
|
83
|
+
* @description Provides access to the current registry instance.
|
|
84
|
+
* @summary Returns the current {@link InjectablesRegistry} or creates a default one if none exists.
|
|
85
|
+
* @return {InjectablesRegistry} The current registry instance
|
|
39
86
|
*/
|
|
40
87
|
private static getRegistry;
|
|
88
|
+
/**
|
|
89
|
+
* @description Clears all registered injectables.
|
|
90
|
+
* @summary Resets the registry to a clean state by creating a new empty registry instance.
|
|
91
|
+
* @return {void}
|
|
92
|
+
*/
|
|
41
93
|
static reset(): void;
|
|
94
|
+
/**
|
|
95
|
+
* @description Removes specific injectables from the registry based on a pattern.
|
|
96
|
+
* @summary Selectively resets the registry by removing only the injectables whose names match the provided pattern.
|
|
97
|
+
* @param {string | RegExp} match A string or regular expression pattern to match against injectable names
|
|
98
|
+
* @return {void}
|
|
99
|
+
*/
|
|
42
100
|
static selectiveReset(match: string | RegExp): void;
|
|
43
101
|
}
|
package/lib/constants.cjs
CHANGED
|
@@ -2,18 +2,19 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.InjectablesKeys = void 0;
|
|
4
4
|
/**
|
|
5
|
-
* @
|
|
6
|
-
* @
|
|
5
|
+
* @description Constants used for reflection metadata keys in the dependency injection system.
|
|
6
|
+
* @summary Injectables Reflection keys used to store and retrieve metadata about injectable classes and properties.
|
|
7
7
|
*
|
|
8
|
-
* @property {string} REFLECT Reflection injectables base key
|
|
9
|
-
* @property {string} INJECTABLE Reflection injectable
|
|
10
|
-
* @property {string} INJECT Reflection
|
|
8
|
+
* @property {string} REFLECT Reflection injectables base key prefix for all metadata keys
|
|
9
|
+
* @property {string} INJECTABLE Reflection key suffix for marking a class as injectable
|
|
10
|
+
* @property {string} INJECT Reflection key suffix for marking a property for injection
|
|
11
11
|
*
|
|
12
|
-
* @
|
|
12
|
+
* @const InjectablesKeys
|
|
13
|
+
* @memberOf module:injectable-decorators
|
|
13
14
|
*/
|
|
14
15
|
exports.InjectablesKeys = {
|
|
15
16
|
REFLECT: "inject.db.",
|
|
16
17
|
INJECTABLE: "injectable",
|
|
17
18
|
INJECT: "inject",
|
|
18
19
|
};
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7OztHQVVHO0FBQ1UsUUFBQSxlQUFlLEdBQUc7SUFDN0IsT0FBTyxFQUFFLFlBQVk7SUFDckIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsTUFBTSxFQUFFLFFBQVE7Q0FDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnN0YW50cyB1c2VkIGZvciByZWZsZWN0aW9uIG1ldGFkYXRhIGtleXMgaW4gdGhlIGRlcGVuZGVuY3kgaW5qZWN0aW9uIHN5c3RlbS5cbiAqIEBzdW1tYXJ5IEluamVjdGFibGVzIFJlZmxlY3Rpb24ga2V5cyB1c2VkIHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBtZXRhZGF0YSBhYm91dCBpbmplY3RhYmxlIGNsYXNzZXMgYW5kIHByb3BlcnRpZXMuXG4gKiBcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRUZMRUNUIFJlZmxlY3Rpb24gaW5qZWN0YWJsZXMgYmFzZSBrZXkgcHJlZml4IGZvciBhbGwgbWV0YWRhdGEga2V5c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IElOSkVDVEFCTEUgUmVmbGVjdGlvbiBrZXkgc3VmZml4IGZvciBtYXJraW5nIGEgY2xhc3MgYXMgaW5qZWN0YWJsZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IElOSkVDVCBSZWZsZWN0aW9uIGtleSBzdWZmaXggZm9yIG1hcmtpbmcgYSBwcm9wZXJ0eSBmb3IgaW5qZWN0aW9uXG4gKiBcbiAqIEBjb25zdCBJbmplY3RhYmxlc0tleXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6aW5qZWN0YWJsZS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBjb25zdCBJbmplY3RhYmxlc0tleXMgPSB7XG4gIFJFRkxFQ1Q6IFwiaW5qZWN0LmRiLlwiLFxuICBJTkpFQ1RBQkxFOiBcImluamVjdGFibGVcIixcbiAgSU5KRUNUOiBcImluamVjdFwiLFxufTtcbiJdfQ==
|
package/lib/constants.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @
|
|
3
|
-
* @
|
|
2
|
+
* @description Constants used for reflection metadata keys in the dependency injection system.
|
|
3
|
+
* @summary Injectables Reflection keys used to store and retrieve metadata about injectable classes and properties.
|
|
4
4
|
*
|
|
5
|
-
* @property {string} REFLECT Reflection injectables base key
|
|
6
|
-
* @property {string} INJECTABLE Reflection injectable
|
|
7
|
-
* @property {string} INJECT Reflection
|
|
5
|
+
* @property {string} REFLECT Reflection injectables base key prefix for all metadata keys
|
|
6
|
+
* @property {string} INJECTABLE Reflection key suffix for marking a class as injectable
|
|
7
|
+
* @property {string} INJECT Reflection key suffix for marking a property for injection
|
|
8
8
|
*
|
|
9
|
-
* @
|
|
9
|
+
* @const InjectablesKeys
|
|
10
|
+
* @memberOf module:injectable-decorators
|
|
10
11
|
*/
|
|
11
12
|
export declare const InjectablesKeys: {
|
|
12
13
|
REFLECT: string;
|