siringa 0.0.5 → 0.1.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/{index.js → index.cjs} +25 -5
- package/dist/index.cjs.map +6 -0
- package/{index.d.ts → dist/index.d.ts} +10 -10
- package/dist/index.mjs +23 -4
- package/dist/index.mjs.map +2 -2
- package/package.json +26 -27
- package/src/index.ts +11 -10
- package/dist/index.js.map +0 -6
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __defProp = Object.defineProperty;
|
|
2
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
@@ -16,7 +17,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
17
|
};
|
|
17
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
19
|
|
|
19
|
-
//
|
|
20
|
+
// index.ts
|
|
20
21
|
var src_exports = {};
|
|
21
22
|
__export(src_exports, {
|
|
22
23
|
Injector: () => Injector,
|
|
@@ -34,6 +35,7 @@ var Injector = class {
|
|
|
34
35
|
#factories = /* @__PURE__ */ new Map();
|
|
35
36
|
#promises = /* @__PURE__ */ new Map();
|
|
36
37
|
#parent;
|
|
38
|
+
/* INTERNALS ============================================================== */
|
|
37
39
|
async #get(binding, stack) {
|
|
38
40
|
if (stack.includes(binding)) {
|
|
39
41
|
if (this.#parent)
|
|
@@ -56,8 +58,7 @@ var Injector = class {
|
|
|
56
58
|
return Promise.reject(new Error(message));
|
|
57
59
|
}
|
|
58
60
|
async #inject(injectable, stack) {
|
|
59
|
-
|
|
60
|
-
const promises = (_a = injectable.$inject) == null ? void 0 : _a.map((binding) => {
|
|
61
|
+
const promises = injectable.$inject?.map((binding) => {
|
|
61
62
|
switch (typeof binding) {
|
|
62
63
|
case "string":
|
|
63
64
|
case "function":
|
|
@@ -67,15 +68,17 @@ var Injector = class {
|
|
|
67
68
|
}
|
|
68
69
|
});
|
|
69
70
|
const injections = promises ? (await Promise.all(promises)).map((i) => {
|
|
70
|
-
return
|
|
71
|
+
return i && typeof i === "object" && i[promisedBinding] ? this.#get(i[promisedBinding], stack) : i;
|
|
71
72
|
}) : [];
|
|
72
73
|
return new injectable(...injections);
|
|
73
74
|
}
|
|
75
|
+
// Overloaded implementation
|
|
74
76
|
bind(binding, maybeInjectable) {
|
|
75
77
|
const injectable = maybeInjectable ? maybeInjectable : binding;
|
|
76
78
|
this.#factories.set(binding, async (stack) => this.#inject(injectable, stack));
|
|
77
79
|
return this;
|
|
78
80
|
}
|
|
81
|
+
// Overloaded implementation
|
|
79
82
|
create(binding, factory) {
|
|
80
83
|
this.#factories.set(binding, async (stack) => factory({
|
|
81
84
|
get: (component) => this.#get(component, stack),
|
|
@@ -84,16 +87,31 @@ var Injector = class {
|
|
|
84
87
|
}));
|
|
85
88
|
return this;
|
|
86
89
|
}
|
|
90
|
+
// Overloaded implementation
|
|
87
91
|
use(binding, instance) {
|
|
88
92
|
this.#promises.set(binding, Promise.resolve(instance));
|
|
89
93
|
return this;
|
|
90
94
|
}
|
|
95
|
+
// Overloaded implementation
|
|
91
96
|
async get(binding) {
|
|
92
97
|
return this.#get(binding, []);
|
|
93
98
|
}
|
|
99
|
+
/* INJECTIONS ============================================================= */
|
|
100
|
+
/**
|
|
101
|
+
* Create a new instance of the specified `Injectable`, providing all
|
|
102
|
+
* necessary injections.
|
|
103
|
+
*
|
|
104
|
+
* @param injectable The constructor of the instance to create.
|
|
105
|
+
*/
|
|
94
106
|
inject(injectable) {
|
|
95
107
|
return this.#inject(injectable, []);
|
|
96
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Simple utility method to invoke the factory with the correct `Injections`
|
|
111
|
+
* and return its result.
|
|
112
|
+
*
|
|
113
|
+
* This can be used to alleviate issues when top-level await is not available.
|
|
114
|
+
*/
|
|
97
115
|
make(factory) {
|
|
98
116
|
return factory({
|
|
99
117
|
get: (component) => this.#get(component, []),
|
|
@@ -101,6 +119,8 @@ var Injector = class {
|
|
|
101
119
|
injector: () => this.injector()
|
|
102
120
|
});
|
|
103
121
|
}
|
|
122
|
+
/* CHILD INJECTORS ======================================================== */
|
|
123
|
+
/** Create a sub-`Injector` child of this one. */
|
|
104
124
|
injector() {
|
|
105
125
|
const injector = new Injector();
|
|
106
126
|
injector.#parent = this;
|
|
@@ -112,4 +132,4 @@ var Injector = class {
|
|
|
112
132
|
Injector,
|
|
113
133
|
promise
|
|
114
134
|
});
|
|
115
|
-
//# sourceMappingURL=index.
|
|
135
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["message", "promise"]
|
|
6
|
+
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/** A generic constructor */
|
|
2
|
-
|
|
2
|
+
type Constructor<T = any> = abstract new (...args: any) => T;
|
|
3
3
|
/** The _type_ for a binding, either a `Constructor` or a `string`. */
|
|
4
|
-
|
|
4
|
+
type Binding = Constructor | string;
|
|
5
5
|
/** The _type_ of a binding in the context of an `Injector`. */
|
|
6
|
-
|
|
6
|
+
type InjectorBinding<Components extends Constructor, Provisions extends Record<string, any>> = Components | (keyof Provisions & string) | PromisedBinding<Components | (keyof Provisions & string)>;
|
|
7
7
|
/** A tuple of `InjectorBinding`s (what's needed by `$inject`). */
|
|
8
|
-
|
|
8
|
+
type InjectTuple<Components extends Constructor, Provisions extends Record<string, any>> = readonly [InjectorBinding<Components, Provisions>, ...(InjectorBinding<Components, Provisions>)[]];
|
|
9
9
|
/**
|
|
10
10
|
* Check that an `Injector`'s static `$inject` member matches the `Injector`'s
|
|
11
11
|
* own components and provisions
|
|
12
12
|
*/
|
|
13
|
-
|
|
13
|
+
type CheckInject<Inject, // the tuple from "$inject"
|
|
14
14
|
Components extends Constructor, // the `Injector`'s components
|
|
15
15
|
Provisions extends Record<string, any>> = Inject extends readonly [] ? readonly [] : Inject extends readonly [infer I1] ? I1 extends PromisedBinding<infer I2> ? I2 extends keyof Provisions ? readonly [PromisedBinding<I2>] : I2 extends Extract<Components, I2> ? readonly [PromisedBinding<I2>] : readonly [PromisedBinding<never>] : I1 extends keyof Provisions ? readonly [I1] : I1 extends Extract<Components, I1> ? readonly [I1] : readonly [never] : Inject extends readonly [infer I1, ...infer I2] ? readonly [
|
|
16
16
|
...CheckInject<[I1], Components, Provisions>,
|
|
@@ -20,7 +20,7 @@ Provisions extends Record<string, any>> = Inject extends readonly [] ? readonly
|
|
|
20
20
|
* Map the contents of the static `$inject` member to their types, resolving
|
|
21
21
|
* named provisions.
|
|
22
22
|
*/
|
|
23
|
-
|
|
23
|
+
type MapInject<Inject, // the tuple from "$inject"
|
|
24
24
|
Provisions extends Record<string, any>> = Inject extends readonly [] ? readonly [] : Inject extends readonly [infer I1] ? I1 extends PromisedBinding<infer I2> ? I2 extends keyof Provisions ? readonly [Promise<Provisions[I2]>] : I2 extends Constructor ? readonly [Promise<InstanceType<I2>>] : readonly [never] : I1 extends keyof Provisions ? readonly [Provisions[I1]] : I1 extends Constructor ? readonly [InstanceType<I1>] : readonly [never] : Inject extends readonly [infer I1, ...infer I2] ? readonly [
|
|
25
25
|
...MapInject<[I1], Provisions>,
|
|
26
26
|
...MapInject<I2, Provisions>
|
|
@@ -28,7 +28,7 @@ Provisions extends Record<string, any>> = Inject extends readonly [] ? readonly
|
|
|
28
28
|
/**
|
|
29
29
|
* Check that an `Injectable` is valid for a given `Injector`.
|
|
30
30
|
*/
|
|
31
|
-
|
|
31
|
+
type CheckInjectable<I extends Injectable<Components, Provisions>, // the `Injectable` to check
|
|
32
32
|
Components extends Constructor, // the `Injector`'s components
|
|
33
33
|
Provisions extends Record<string, any>> = I extends {
|
|
34
34
|
$inject: infer Inject;
|
|
@@ -41,11 +41,11 @@ Provisions extends Record<string, any>> = I extends {
|
|
|
41
41
|
/**
|
|
42
42
|
* Return the unrolled type of a `Promise`
|
|
43
43
|
*/
|
|
44
|
-
|
|
44
|
+
type UnrollPromise<T> = T extends Promise<infer T> ? UnrollPromise<T> : T;
|
|
45
45
|
/**
|
|
46
46
|
* Override the type for an `Injector`'s existing provision, or add a new one
|
|
47
47
|
*/
|
|
48
|
-
|
|
48
|
+
type ExtendProvisions<Provisions extends Record<string, any>, // the `Injector`'s provisions
|
|
49
49
|
P extends string, // the new (string) key of the provision
|
|
50
50
|
T> = {
|
|
51
51
|
[key in P | keyof Provisions]: key extends P ? UnrollPromise<T> : Provisions[key];
|
|
@@ -84,7 +84,7 @@ export interface Injections<Components extends Constructor = never, Provisions e
|
|
|
84
84
|
injector(): Injector<Components, Provisions>;
|
|
85
85
|
}
|
|
86
86
|
/** A `Factory` is a _function_ creating instances of a given type. */
|
|
87
|
-
export
|
|
87
|
+
export type Factory<Components extends Constructor = Constructor, Provisions extends Record<string, any> = Record<string, any>, T = any> = (injections: Injections<Components, Provisions>) => T | Promise<T>;
|
|
88
88
|
/**
|
|
89
89
|
* The `Injector` class acts as a registry of components and provisions,
|
|
90
90
|
* creating instances and injecting dependencies.
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//
|
|
1
|
+
// index.ts
|
|
2
2
|
function bindingName(binding) {
|
|
3
3
|
return typeof binding === "function" ? `[class ${binding.name}]` : `"${binding}"`;
|
|
4
4
|
}
|
|
@@ -10,6 +10,7 @@ var Injector = class {
|
|
|
10
10
|
#factories = /* @__PURE__ */ new Map();
|
|
11
11
|
#promises = /* @__PURE__ */ new Map();
|
|
12
12
|
#parent;
|
|
13
|
+
/* INTERNALS ============================================================== */
|
|
13
14
|
async #get(binding, stack) {
|
|
14
15
|
if (stack.includes(binding)) {
|
|
15
16
|
if (this.#parent)
|
|
@@ -32,8 +33,7 @@ var Injector = class {
|
|
|
32
33
|
return Promise.reject(new Error(message));
|
|
33
34
|
}
|
|
34
35
|
async #inject(injectable, stack) {
|
|
35
|
-
|
|
36
|
-
const promises = (_a = injectable.$inject) == null ? void 0 : _a.map((binding) => {
|
|
36
|
+
const promises = injectable.$inject?.map((binding) => {
|
|
37
37
|
switch (typeof binding) {
|
|
38
38
|
case "string":
|
|
39
39
|
case "function":
|
|
@@ -43,15 +43,17 @@ var Injector = class {
|
|
|
43
43
|
}
|
|
44
44
|
});
|
|
45
45
|
const injections = promises ? (await Promise.all(promises)).map((i) => {
|
|
46
|
-
return
|
|
46
|
+
return i && typeof i === "object" && i[promisedBinding] ? this.#get(i[promisedBinding], stack) : i;
|
|
47
47
|
}) : [];
|
|
48
48
|
return new injectable(...injections);
|
|
49
49
|
}
|
|
50
|
+
// Overloaded implementation
|
|
50
51
|
bind(binding, maybeInjectable) {
|
|
51
52
|
const injectable = maybeInjectable ? maybeInjectable : binding;
|
|
52
53
|
this.#factories.set(binding, async (stack) => this.#inject(injectable, stack));
|
|
53
54
|
return this;
|
|
54
55
|
}
|
|
56
|
+
// Overloaded implementation
|
|
55
57
|
create(binding, factory) {
|
|
56
58
|
this.#factories.set(binding, async (stack) => factory({
|
|
57
59
|
get: (component) => this.#get(component, stack),
|
|
@@ -60,16 +62,31 @@ var Injector = class {
|
|
|
60
62
|
}));
|
|
61
63
|
return this;
|
|
62
64
|
}
|
|
65
|
+
// Overloaded implementation
|
|
63
66
|
use(binding, instance) {
|
|
64
67
|
this.#promises.set(binding, Promise.resolve(instance));
|
|
65
68
|
return this;
|
|
66
69
|
}
|
|
70
|
+
// Overloaded implementation
|
|
67
71
|
async get(binding) {
|
|
68
72
|
return this.#get(binding, []);
|
|
69
73
|
}
|
|
74
|
+
/* INJECTIONS ============================================================= */
|
|
75
|
+
/**
|
|
76
|
+
* Create a new instance of the specified `Injectable`, providing all
|
|
77
|
+
* necessary injections.
|
|
78
|
+
*
|
|
79
|
+
* @param injectable The constructor of the instance to create.
|
|
80
|
+
*/
|
|
70
81
|
inject(injectable) {
|
|
71
82
|
return this.#inject(injectable, []);
|
|
72
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Simple utility method to invoke the factory with the correct `Injections`
|
|
86
|
+
* and return its result.
|
|
87
|
+
*
|
|
88
|
+
* This can be used to alleviate issues when top-level await is not available.
|
|
89
|
+
*/
|
|
73
90
|
make(factory) {
|
|
74
91
|
return factory({
|
|
75
92
|
get: (component) => this.#get(component, []),
|
|
@@ -77,6 +94,8 @@ var Injector = class {
|
|
|
77
94
|
injector: () => this.injector()
|
|
78
95
|
});
|
|
79
96
|
}
|
|
97
|
+
/* CHILD INJECTORS ======================================================== */
|
|
98
|
+
/** Create a sub-`Injector` child of this one. */
|
|
80
99
|
injector() {
|
|
81
100
|
const injector = new Injector();
|
|
82
101
|
injector.#parent = this;
|
package/dist/index.mjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"mappings": ";AA2JA,
|
|
5
|
-
"names": []
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["message", "promise"]
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,44 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "siringa",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "Simple type-checking injection library for Typescript",
|
|
5
|
-
"main": "./dist/index.
|
|
5
|
+
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
7
8
|
"exports": {
|
|
8
9
|
".": {
|
|
9
|
-
"
|
|
10
|
-
|
|
10
|
+
"require": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"default": "./dist/index.cjs"
|
|
13
|
+
},
|
|
14
|
+
"import": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"default": "./dist/index.mjs"
|
|
17
|
+
}
|
|
11
18
|
}
|
|
12
19
|
},
|
|
13
|
-
"types": "./index.d.ts",
|
|
14
20
|
"scripts": {
|
|
15
|
-
"build": "
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
21
|
+
"build": "plug --force-esm",
|
|
22
|
+
"coverage": "plug coverage",
|
|
23
|
+
"dev": "npx nodemon -e ts -x plug -w src -w test -w test-d",
|
|
24
|
+
"lint": "plug --force-esm lint",
|
|
25
|
+
"test": "plug test",
|
|
26
|
+
"transpile": "plug transpile"
|
|
19
27
|
},
|
|
20
28
|
"author": "Juit Developers <developers@juit.com>",
|
|
21
29
|
"license": "Apache-2.0",
|
|
22
30
|
"devDependencies": {
|
|
23
|
-
"@
|
|
24
|
-
"@
|
|
25
|
-
"
|
|
26
|
-
"@types/node": "~16.11.26",
|
|
27
|
-
"@typescript-eslint/eslint-plugin": "^5.17.0",
|
|
28
|
-
"@typescript-eslint/parser": "^5.17.0",
|
|
29
|
-
"chai": "^4.3.6",
|
|
30
|
-
"chai-as-promised": "^7.1.1",
|
|
31
|
-
"esbuild": "^0.14.28",
|
|
32
|
-
"eslint": "^8.12.0",
|
|
33
|
-
"eslint-config-google": "^0.14.0",
|
|
34
|
-
"mocha": "^9.2.2",
|
|
35
|
-
"nodemon": "^2.0.15",
|
|
36
|
-
"nyc": "^15.1.0",
|
|
37
|
-
"source-map-support": "^0.5.21",
|
|
38
|
-
"tsd": "^0.19.1",
|
|
39
|
-
"typescript": "^4.6.3"
|
|
31
|
+
"@plugjs/build": "^0.2.2",
|
|
32
|
+
"@plugjs/tsd": "^0.2.1",
|
|
33
|
+
"typescript": "^4.9.5"
|
|
40
34
|
},
|
|
41
35
|
"directories": {
|
|
42
36
|
"test": "test"
|
|
43
|
-
}
|
|
37
|
+
},
|
|
38
|
+
"files": [
|
|
39
|
+
"*.md",
|
|
40
|
+
"dist/",
|
|
41
|
+
"src/"
|
|
42
|
+
]
|
|
44
43
|
}
|
package/src/index.ts
CHANGED
|
@@ -267,7 +267,8 @@ export class Injector<
|
|
|
267
267
|
})
|
|
268
268
|
|
|
269
269
|
const injections = promises ? (await Promise.all(promises)).map((i) => {
|
|
270
|
-
return
|
|
270
|
+
return i && (typeof i === 'object') && (i[promisedBinding]) ?
|
|
271
|
+
this.#get(i[promisedBinding], stack) : i
|
|
271
272
|
}) : []
|
|
272
273
|
|
|
273
274
|
// eslint-disable-next-line new-cap
|
|
@@ -295,8 +296,8 @@ export class Injector<
|
|
|
295
296
|
|
|
296
297
|
// Overloaded implementation
|
|
297
298
|
bind(
|
|
298
|
-
|
|
299
|
-
|
|
299
|
+
binding: Binding,
|
|
300
|
+
maybeInjectable?: Injectable<Components, Provisions>,
|
|
300
301
|
): this {
|
|
301
302
|
const injectable = maybeInjectable ? maybeInjectable :
|
|
302
303
|
binding as Injectable<Components, Provisions>
|
|
@@ -321,8 +322,8 @@ export class Injector<
|
|
|
321
322
|
|
|
322
323
|
// Overloaded implementation
|
|
323
324
|
create(
|
|
324
|
-
|
|
325
|
-
|
|
325
|
+
binding: Binding,
|
|
326
|
+
factory: Factory<Components, Provisions>,
|
|
326
327
|
): this {
|
|
327
328
|
this.#factories.set(binding, async (stack) => factory({
|
|
328
329
|
get: (component: any) => this.#get(component, stack),
|
|
@@ -349,8 +350,8 @@ export class Injector<
|
|
|
349
350
|
|
|
350
351
|
// Overloaded implementation
|
|
351
352
|
use(
|
|
352
|
-
|
|
353
|
-
|
|
353
|
+
binding: Binding,
|
|
354
|
+
instance: any,
|
|
354
355
|
): this {
|
|
355
356
|
this.#promises.set(binding, Promise.resolve(instance))
|
|
356
357
|
return this
|
|
@@ -366,7 +367,7 @@ export class Injector<
|
|
|
366
367
|
|
|
367
368
|
// Overloaded implementation
|
|
368
369
|
async get<B extends Binding>(
|
|
369
|
-
|
|
370
|
+
binding: B,
|
|
370
371
|
): Promise<any> {
|
|
371
372
|
return this.#get(binding, [])
|
|
372
373
|
}
|
|
@@ -380,7 +381,7 @@ export class Injector<
|
|
|
380
381
|
* @param injectable The constructor of the instance to create.
|
|
381
382
|
*/
|
|
382
383
|
inject<I extends Injectable<Components, Provisions>>(
|
|
383
|
-
|
|
384
|
+
injectable: I & CheckInjectable<I, Components, Provisions>,
|
|
384
385
|
): Promise<InstanceType<I>> {
|
|
385
386
|
return this.#inject(injectable, [])
|
|
386
387
|
}
|
|
@@ -392,7 +393,7 @@ export class Injector<
|
|
|
392
393
|
* This can be used to alleviate issues when top-level await is not available.
|
|
393
394
|
*/
|
|
394
395
|
make<F extends Factory<Components, Provisions>>(
|
|
395
|
-
|
|
396
|
+
factory: F,
|
|
396
397
|
): ReturnType<F> {
|
|
397
398
|
return factory({
|
|
398
399
|
get: (component: any) => this.#get(component, []),
|
package/dist/index.js.map
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts"],
|
|
4
|
-
"mappings": "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",
|
|
5
|
-
"names": []
|
|
6
|
-
}
|