@navios/di 0.3.0 → 0.4.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/README.md +67 -6
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +2659 -0
- package/coverage/coverage-final.json +46 -0
- package/coverage/docs/examples/basic-usage.mts.html +376 -0
- package/coverage/docs/examples/factory-pattern.mts.html +1039 -0
- package/coverage/docs/examples/index.html +176 -0
- package/coverage/docs/examples/injection-tokens.mts.html +760 -0
- package/coverage/docs/examples/request-scope-example.mts.html +847 -0
- package/coverage/docs/examples/service-lifecycle.mts.html +1162 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +236 -0
- package/coverage/lib/_tsup-dts-rollup.d.mts.html +2806 -0
- package/coverage/lib/index.d.mts.html +310 -0
- package/coverage/lib/index.html +131 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +196 -0
- package/coverage/src/container.mts.html +586 -0
- package/coverage/src/decorators/factory.decorator.mts.html +322 -0
- package/coverage/src/decorators/index.html +146 -0
- package/coverage/src/decorators/index.mts.html +91 -0
- package/coverage/src/decorators/injectable.decorator.mts.html +394 -0
- package/coverage/src/enums/index.html +146 -0
- package/coverage/src/enums/index.mts.html +91 -0
- package/coverage/src/enums/injectable-scope.enum.mts.html +127 -0
- package/coverage/src/enums/injectable-type.enum.mts.html +97 -0
- package/coverage/src/errors/errors.enum.mts.html +109 -0
- package/coverage/src/errors/factory-not-found.mts.html +109 -0
- package/coverage/src/errors/factory-token-not-resolved.mts.html +115 -0
- package/coverage/src/errors/index.html +221 -0
- package/coverage/src/errors/index.mts.html +106 -0
- package/coverage/src/errors/instance-destroying.mts.html +109 -0
- package/coverage/src/errors/instance-expired.mts.html +109 -0
- package/coverage/src/errors/instance-not-found.mts.html +109 -0
- package/coverage/src/errors/unknown-error.mts.html +130 -0
- package/coverage/src/event-emitter.mts.html +400 -0
- package/coverage/src/factory-context.mts.html +109 -0
- package/coverage/src/index.html +296 -0
- package/coverage/src/index.mts.html +139 -0
- package/coverage/src/injection-token.mts.html +571 -0
- package/coverage/src/injector.mts.html +133 -0
- package/coverage/src/interfaces/factory.interface.mts.html +121 -0
- package/coverage/src/interfaces/index.html +161 -0
- package/coverage/src/interfaces/index.mts.html +94 -0
- package/coverage/src/interfaces/on-service-destroy.interface.mts.html +94 -0
- package/coverage/src/interfaces/on-service-init.interface.mts.html +94 -0
- package/coverage/src/registry.mts.html +247 -0
- package/coverage/src/request-context-holder.mts.html +607 -0
- package/coverage/src/service-instantiator.mts.html +559 -0
- package/coverage/src/service-locator-event-bus.mts.html +289 -0
- package/coverage/src/service-locator-instance-holder.mts.html +307 -0
- package/coverage/src/service-locator-manager.mts.html +604 -0
- package/coverage/src/service-locator.mts.html +2911 -0
- package/coverage/src/symbols/index.html +131 -0
- package/coverage/src/symbols/index.mts.html +88 -0
- package/coverage/src/symbols/injectable-token.mts.html +88 -0
- package/coverage/src/utils/defer.mts.html +304 -0
- package/coverage/src/utils/get-injectable-token.mts.html +142 -0
- package/coverage/src/utils/get-injectors.mts.html +691 -0
- package/coverage/src/utils/index.html +176 -0
- package/coverage/src/utils/index.mts.html +97 -0
- package/coverage/src/utils/types.mts.html +241 -0
- package/docs/README.md +5 -2
- package/docs/api-reference.md +38 -0
- package/docs/container.md +75 -0
- package/docs/getting-started.md +4 -3
- package/docs/injectable.md +4 -3
- package/docs/migration.md +177 -0
- package/docs/request-contexts.md +364 -0
- package/lib/_tsup-dts-rollup.d.mts +180 -35
- package/lib/_tsup-dts-rollup.d.ts +180 -35
- package/lib/index.d.mts +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +485 -279
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +485 -280
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/defer.spec.mts +166 -0
- package/src/__tests__/errors.spec.mts +61 -0
- package/src/__tests__/event-emitter.spec.mts +163 -0
- package/src/__tests__/get-injectors.spec.mts +70 -0
- package/src/__tests__/registry.spec.mts +335 -0
- package/src/__tests__/request-scope.spec.mts +167 -4
- package/src/__tests__/service-instantiator.spec.mts +408 -0
- package/src/__tests__/service-locator-event-bus.spec.mts +242 -0
- package/src/__tests__/service-locator-manager.spec.mts +370 -0
- package/src/__tests__/unified-api.spec.mts +130 -0
- package/src/base-instance-holder-manager.mts +175 -0
- package/src/index.mts +1 -0
- package/src/request-context-holder.mts +85 -27
- package/src/service-locator-manager.mts +12 -70
- package/src/service-locator.mts +421 -226
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for src/utils</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../index.html">All files</a> src/utils</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">93.93% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>155/165</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">95.12% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>39/41</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">94.11% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>16/17</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">93.93% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>155/165</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
|
+
<div class="pad1">
|
|
66
|
+
<table class="coverage-summary">
|
|
67
|
+
<thead>
|
|
68
|
+
<tr>
|
|
69
|
+
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
|
|
70
|
+
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
|
|
71
|
+
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
|
|
72
|
+
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
73
|
+
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
|
|
74
|
+
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
75
|
+
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
|
|
76
|
+
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
77
|
+
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
|
|
78
|
+
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
79
|
+
</tr>
|
|
80
|
+
</thead>
|
|
81
|
+
<tbody><tr>
|
|
82
|
+
<td class="file high" data-value="defer.mts"><a href="defer.mts.html">defer.mts</a></td>
|
|
83
|
+
<td data-value="100" class="pic high">
|
|
84
|
+
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
|
|
85
|
+
</td>
|
|
86
|
+
<td data-value="100" class="pct high">100%</td>
|
|
87
|
+
<td data-value="39" class="abs high">39/39</td>
|
|
88
|
+
<td data-value="100" class="pct high">100%</td>
|
|
89
|
+
<td data-value="16" class="abs high">16/16</td>
|
|
90
|
+
<td data-value="100" class="pct high">100%</td>
|
|
91
|
+
<td data-value="8" class="abs high">8/8</td>
|
|
92
|
+
<td data-value="100" class="pct high">100%</td>
|
|
93
|
+
<td data-value="39" class="abs high">39/39</td>
|
|
94
|
+
</tr>
|
|
95
|
+
|
|
96
|
+
<tr>
|
|
97
|
+
<td class="file high" data-value="get-injectable-token.mts"><a href="get-injectable-token.mts.html">get-injectable-token.mts</a></td>
|
|
98
|
+
<td data-value="100" class="pic high">
|
|
99
|
+
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
|
|
100
|
+
</td>
|
|
101
|
+
<td data-value="100" class="pct high">100%</td>
|
|
102
|
+
<td data-value="12" class="abs high">12/12</td>
|
|
103
|
+
<td data-value="100" class="pct high">100%</td>
|
|
104
|
+
<td data-value="3" class="abs high">3/3</td>
|
|
105
|
+
<td data-value="100" class="pct high">100%</td>
|
|
106
|
+
<td data-value="1" class="abs high">1/1</td>
|
|
107
|
+
<td data-value="100" class="pct high">100%</td>
|
|
108
|
+
<td data-value="12" class="abs high">12/12</td>
|
|
109
|
+
</tr>
|
|
110
|
+
|
|
111
|
+
<tr>
|
|
112
|
+
<td class="file high" data-value="get-injectors.mts"><a href="get-injectors.mts.html">get-injectors.mts</a></td>
|
|
113
|
+
<td data-value="90.9" class="pic high">
|
|
114
|
+
<div class="chart"><div class="cover-fill" style="width: 90%"></div><div class="cover-empty" style="width: 10%"></div></div>
|
|
115
|
+
</td>
|
|
116
|
+
<td data-value="90.9" class="pct high">90.9%</td>
|
|
117
|
+
<td data-value="110" class="abs high">100/110</td>
|
|
118
|
+
<td data-value="90.9" class="pct high">90.9%</td>
|
|
119
|
+
<td data-value="22" class="abs high">20/22</td>
|
|
120
|
+
<td data-value="87.5" class="pct high">87.5%</td>
|
|
121
|
+
<td data-value="8" class="abs high">7/8</td>
|
|
122
|
+
<td data-value="90.9" class="pct high">90.9%</td>
|
|
123
|
+
<td data-value="110" class="abs high">100/110</td>
|
|
124
|
+
</tr>
|
|
125
|
+
|
|
126
|
+
<tr>
|
|
127
|
+
<td class="file high" data-value="index.mts"><a href="index.mts.html">index.mts</a></td>
|
|
128
|
+
<td data-value="100" class="pic high">
|
|
129
|
+
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
|
|
130
|
+
</td>
|
|
131
|
+
<td data-value="100" class="pct high">100%</td>
|
|
132
|
+
<td data-value="4" class="abs high">4/4</td>
|
|
133
|
+
<td data-value="100" class="pct high">100%</td>
|
|
134
|
+
<td data-value="0" class="abs high">0/0</td>
|
|
135
|
+
<td data-value="100" class="pct high">100%</td>
|
|
136
|
+
<td data-value="0" class="abs high">0/0</td>
|
|
137
|
+
<td data-value="100" class="pct high">100%</td>
|
|
138
|
+
<td data-value="4" class="abs high">4/4</td>
|
|
139
|
+
</tr>
|
|
140
|
+
|
|
141
|
+
<tr>
|
|
142
|
+
<td class="file empty" data-value="types.mts"><a href="types.mts.html">types.mts</a></td>
|
|
143
|
+
<td data-value="0" class="pic empty">
|
|
144
|
+
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
145
|
+
</td>
|
|
146
|
+
<td data-value="0" class="pct empty">0%</td>
|
|
147
|
+
<td data-value="0" class="abs empty">0/0</td>
|
|
148
|
+
<td data-value="0" class="pct empty">0%</td>
|
|
149
|
+
<td data-value="0" class="abs empty">0/0</td>
|
|
150
|
+
<td data-value="0" class="pct empty">0%</td>
|
|
151
|
+
<td data-value="0" class="abs empty">0/0</td>
|
|
152
|
+
<td data-value="0" class="pct empty">0%</td>
|
|
153
|
+
<td data-value="0" class="abs empty">0/0</td>
|
|
154
|
+
</tr>
|
|
155
|
+
|
|
156
|
+
</tbody>
|
|
157
|
+
</table>
|
|
158
|
+
</div>
|
|
159
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
160
|
+
</div><!-- /wrapper -->
|
|
161
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
162
|
+
Code coverage generated by
|
|
163
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
164
|
+
at 2025-09-19T12:38:51.382Z
|
|
165
|
+
</div>
|
|
166
|
+
<script src="../../prettify.js"></script>
|
|
167
|
+
<script>
|
|
168
|
+
window.onload = function () {
|
|
169
|
+
prettyPrint();
|
|
170
|
+
};
|
|
171
|
+
</script>
|
|
172
|
+
<script src="../../sorter.js"></script>
|
|
173
|
+
<script src="../../block-navigation.js"></script>
|
|
174
|
+
</body>
|
|
175
|
+
</html>
|
|
176
|
+
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for src/utils/index.mts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../index.html">All files</a> / <a href="index.html">src/utils</a> index.mts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">100% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>4/4</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">100% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>0/0</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>0/0</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">100% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>4/4</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
71
|
+
<span class="cline-any cline-yes">1x</span>
|
|
72
|
+
<span class="cline-any cline-yes">1x</span>
|
|
73
|
+
<span class="cline-any cline-yes">1x</span>
|
|
74
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">export * from './get-injectors.mjs'
|
|
75
|
+
export * from './get-injectable-token.mjs'
|
|
76
|
+
export * from './defer.mjs'
|
|
77
|
+
export * from './types.mjs'
|
|
78
|
+
</pre></td></tr></table></pre>
|
|
79
|
+
|
|
80
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
81
|
+
</div><!-- /wrapper -->
|
|
82
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
83
|
+
Code coverage generated by
|
|
84
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
85
|
+
at 2025-09-19T12:38:51.382Z
|
|
86
|
+
</div>
|
|
87
|
+
<script src="../../prettify.js"></script>
|
|
88
|
+
<script>
|
|
89
|
+
window.onload = function () {
|
|
90
|
+
prettyPrint();
|
|
91
|
+
};
|
|
92
|
+
</script>
|
|
93
|
+
<script src="../../sorter.js"></script>
|
|
94
|
+
<script src="../../block-navigation.js"></script>
|
|
95
|
+
</body>
|
|
96
|
+
</html>
|
|
97
|
+
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for src/utils/types.mts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../index.html">All files</a> / <a href="index.html">src/utils</a> types.mts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">0% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>0/0</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">0% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>0/0</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">0% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>0/0</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">0% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>0/0</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line low'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
+
<a name='L53'></a><a href='#L53'>53</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
119
|
+
<span class="cline-any cline-neutral"> </span>
|
|
120
|
+
<span class="cline-any cline-neutral"> </span>
|
|
121
|
+
<span class="cline-any cline-neutral"> </span>
|
|
122
|
+
<span class="cline-any cline-neutral"> </span>
|
|
123
|
+
<span class="cline-any cline-neutral"> </span>
|
|
124
|
+
<span class="cline-any cline-neutral"> </span>
|
|
125
|
+
<span class="cline-any cline-neutral"> </span>
|
|
126
|
+
<span class="cline-any cline-neutral"> </span>
|
|
127
|
+
<span class="cline-any cline-neutral"> </span>
|
|
128
|
+
<span class="cline-any cline-neutral"> </span>
|
|
129
|
+
<span class="cline-any cline-neutral"> </span>
|
|
130
|
+
<span class="cline-any cline-neutral"> </span>
|
|
131
|
+
<span class="cline-any cline-neutral"> </span>
|
|
132
|
+
<span class="cline-any cline-neutral"> </span>
|
|
133
|
+
<span class="cline-any cline-neutral"> </span>
|
|
134
|
+
<span class="cline-any cline-neutral"> </span>
|
|
135
|
+
<span class="cline-any cline-neutral"> </span>
|
|
136
|
+
<span class="cline-any cline-neutral"> </span>
|
|
137
|
+
<span class="cline-any cline-neutral"> </span>
|
|
138
|
+
<span class="cline-any cline-neutral"> </span>
|
|
139
|
+
<span class="cline-any cline-neutral"> </span>
|
|
140
|
+
<span class="cline-any cline-neutral"> </span>
|
|
141
|
+
<span class="cline-any cline-neutral"> </span>
|
|
142
|
+
<span class="cline-any cline-neutral"> </span>
|
|
143
|
+
<span class="cline-any cline-neutral"> </span>
|
|
144
|
+
<span class="cline-any cline-neutral"> </span>
|
|
145
|
+
<span class="cline-any cline-neutral"> </span>
|
|
146
|
+
<span class="cline-any cline-neutral"> </span>
|
|
147
|
+
<span class="cline-any cline-neutral"> </span>
|
|
148
|
+
<span class="cline-any cline-neutral"> </span>
|
|
149
|
+
<span class="cline-any cline-neutral"> </span>
|
|
150
|
+
<span class="cline-any cline-neutral"> </span>
|
|
151
|
+
<span class="cline-any cline-neutral"> </span>
|
|
152
|
+
<span class="cline-any cline-neutral"> </span>
|
|
153
|
+
<span class="cline-any cline-neutral"> </span>
|
|
154
|
+
<span class="cline-any cline-neutral"> </span>
|
|
155
|
+
<span class="cline-any cline-neutral"> </span>
|
|
156
|
+
<span class="cline-any cline-neutral"> </span>
|
|
157
|
+
<span class="cline-any cline-neutral"> </span>
|
|
158
|
+
<span class="cline-any cline-neutral"> </span>
|
|
159
|
+
<span class="cline-any cline-neutral"> </span>
|
|
160
|
+
<span class="cline-any cline-neutral"> </span>
|
|
161
|
+
<span class="cline-any cline-neutral"> </span>
|
|
162
|
+
<span class="cline-any cline-neutral"> </span>
|
|
163
|
+
<span class="cline-any cline-neutral"> </span>
|
|
164
|
+
<span class="cline-any cline-neutral"> </span>
|
|
165
|
+
<span class="cline-any cline-neutral"> </span>
|
|
166
|
+
<span class="cline-any cline-neutral"> </span>
|
|
167
|
+
<span class="cline-any cline-neutral"> </span>
|
|
168
|
+
<span class="cline-any cline-neutral"> </span>
|
|
169
|
+
<span class="cline-any cline-neutral"> </span>
|
|
170
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import type {
|
|
171
|
+
BoundInjectionToken,
|
|
172
|
+
ClassType,
|
|
173
|
+
FactoryInjectionToken,
|
|
174
|
+
InjectionToken,
|
|
175
|
+
} from '../injection-token.mjs'
|
|
176
|
+
|
|
177
|
+
// Utility types for string manipulation and union handling
|
|
178
|
+
export type Join<TElements, TSeparator extends string> =
|
|
179
|
+
TElements extends Readonly<[infer First, ...infer Rest]>
|
|
180
|
+
? Rest extends ReadonlyArray<string>
|
|
181
|
+
? First extends string
|
|
182
|
+
? `${First}${Rest extends [] ? '' : TSeparator}${Join<Rest, TSeparator>}`
|
|
183
|
+
: never
|
|
184
|
+
: never
|
|
185
|
+
: ''
|
|
186
|
+
|
|
187
|
+
// credits goes to https://stackoverflow.com/a/50375286
|
|
188
|
+
export type UnionToIntersection<U> = (
|
|
189
|
+
U extends any ? (k: U) => void : never
|
|
190
|
+
) extends (k: infer I) => void
|
|
191
|
+
? I
|
|
192
|
+
: never
|
|
193
|
+
|
|
194
|
+
// Converts union to overloaded function
|
|
195
|
+
export type UnionToOvlds<U> = UnionToIntersection<
|
|
196
|
+
U extends any ? (f: U) => void : never
|
|
197
|
+
>
|
|
198
|
+
|
|
199
|
+
export type PopUnion<U> =
|
|
200
|
+
UnionToOvlds<U> extends (a: infer A) => void ? A : never
|
|
201
|
+
|
|
202
|
+
export type IsUnion<T> = [T] extends [UnionToIntersection<T>] ? false : true
|
|
203
|
+
|
|
204
|
+
export type UnionToArray<T, A extends unknown[] = []> =
|
|
205
|
+
IsUnion<T> extends true
|
|
206
|
+
? UnionToArray<Exclude<T, PopUnion<T>>, [PopUnion<T>, ...A]>
|
|
207
|
+
: [T, ...A]
|
|
208
|
+
|
|
209
|
+
// InjectState interface for managing injection state
|
|
210
|
+
export interface InjectState {
|
|
211
|
+
currentIndex: number
|
|
212
|
+
isFrozen: boolean
|
|
213
|
+
requests: {
|
|
214
|
+
token:
|
|
215
|
+
| InjectionToken<any>
|
|
216
|
+
| BoundInjectionToken<any, any>
|
|
217
|
+
| FactoryInjectionToken<any, any>
|
|
218
|
+
| ClassType
|
|
219
|
+
promise: Promise<any>
|
|
220
|
+
}[]
|
|
221
|
+
}
|
|
222
|
+
</pre></td></tr></table></pre>
|
|
223
|
+
|
|
224
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
225
|
+
</div><!-- /wrapper -->
|
|
226
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
227
|
+
Code coverage generated by
|
|
228
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
229
|
+
at 2025-09-19T12:38:51.382Z
|
|
230
|
+
</div>
|
|
231
|
+
<script src="../../prettify.js"></script>
|
|
232
|
+
<script>
|
|
233
|
+
window.onload = function () {
|
|
234
|
+
prettyPrint();
|
|
235
|
+
};
|
|
236
|
+
</script>
|
|
237
|
+
<script src="../../sorter.js"></script>
|
|
238
|
+
<script src="../../block-navigation.js"></script>
|
|
239
|
+
</body>
|
|
240
|
+
</html>
|
|
241
|
+
|
package/docs/README.md
CHANGED
|
@@ -9,6 +9,7 @@ Welcome to the comprehensive documentation for Navios DI, a powerful dependency
|
|
|
9
9
|
- [Injectable Decorator](./injectable.md) - Service registration and configuration
|
|
10
10
|
- [Factory Decorator](./factory.md) - Factory pattern implementation
|
|
11
11
|
- [Injection Tokens](./injection-tokens.md) - Token-based dependency resolution
|
|
12
|
+
- [Request Contexts](./request-contexts.md) - Request-scoped services and cleanup
|
|
12
13
|
- [Service Lifecycle](./lifecycle.md) - Initialization and cleanup hooks
|
|
13
14
|
- [Scopes](./scopes.md) - Singleton and transient service scopes
|
|
14
15
|
- [Advanced Patterns](./advanced-patterns.md) - Complex usage scenarios
|
|
@@ -23,6 +24,7 @@ Welcome to the comprehensive documentation for Navios DI, a powerful dependency
|
|
|
23
24
|
- **[Injectable](./injectable.md)** - Decorator for marking classes as injectable services
|
|
24
25
|
- **[Factory](./factory.md)** - Decorator for creating factory classes
|
|
25
26
|
- **[Injection Tokens](./injection-tokens.md)** - Flexible token-based dependency resolution
|
|
27
|
+
- **[Request Contexts](./request-contexts.md)** - Request-scoped services with automatic cleanup
|
|
26
28
|
|
|
27
29
|
### Key Features
|
|
28
30
|
|
|
@@ -31,11 +33,12 @@ Welcome to the comprehensive documentation for Navios DI, a powerful dependency
|
|
|
31
33
|
- **Multiple Scopes** - Singleton and transient service lifetimes
|
|
32
34
|
- **Async/Sync Injection** - Both synchronous and asynchronous dependency resolution
|
|
33
35
|
- **Factory Pattern** - Complex object creation with factory classes
|
|
36
|
+
- **Request Contexts** - Request-scoped services with priority resolution and automatic cleanup
|
|
34
37
|
|
|
35
38
|
### Getting Started
|
|
36
39
|
|
|
37
40
|
```typescript
|
|
38
|
-
import {
|
|
41
|
+
import { asyncInject, Container, Injectable } from '@navios/di'
|
|
39
42
|
|
|
40
43
|
@Injectable()
|
|
41
44
|
class DatabaseService {
|
|
@@ -46,7 +49,7 @@ class DatabaseService {
|
|
|
46
49
|
|
|
47
50
|
@Injectable()
|
|
48
51
|
class UserService {
|
|
49
|
-
private readonly db =
|
|
52
|
+
private readonly db = asyncInject(DatabaseService)
|
|
50
53
|
|
|
51
54
|
async getUsers() {
|
|
52
55
|
const connection = await this.db.connect()
|
package/docs/api-reference.md
CHANGED
|
@@ -52,6 +52,7 @@ class Container {
|
|
|
52
52
|
|
|
53
53
|
- `beginRequest(requestId: string, metadata?: Record<string, any>, priority?: number)` - Begin a new request context
|
|
54
54
|
- `endRequest(requestId: string)` - End a request context and clean up instances
|
|
55
|
+
- `getCurrentRequestContext()` - Get the current request context
|
|
55
56
|
- `setCurrentRequestContext(requestId: string)` - Switch to a different request context
|
|
56
57
|
|
|
57
58
|
### InjectionToken
|
|
@@ -316,6 +317,43 @@ interface FactorableWithArgs<T, S> {
|
|
|
316
317
|
}
|
|
317
318
|
```
|
|
318
319
|
|
|
320
|
+
### RequestContextHolder
|
|
321
|
+
|
|
322
|
+
Interface for managing request-scoped instances.
|
|
323
|
+
|
|
324
|
+
```typescript
|
|
325
|
+
interface RequestContextHolder {
|
|
326
|
+
readonly requestId: string
|
|
327
|
+
readonly holders: Map<string, ServiceLocatorInstanceHolder>
|
|
328
|
+
readonly priority: number
|
|
329
|
+
readonly metadata: Map<string, any>
|
|
330
|
+
readonly createdAt: number
|
|
331
|
+
|
|
332
|
+
addInstance(
|
|
333
|
+
instanceName: string,
|
|
334
|
+
instance: any,
|
|
335
|
+
holder: ServiceLocatorInstanceHolder,
|
|
336
|
+
): void
|
|
337
|
+
addInstance(token: InjectionToken<any, undefined>, instance: any): void
|
|
338
|
+
get(instanceName: string): ServiceLocatorInstanceHolder | undefined
|
|
339
|
+
has(instanceName: string): boolean
|
|
340
|
+
clear(): void
|
|
341
|
+
getMetadata(key: string): any | undefined
|
|
342
|
+
setMetadata(key: string, value: any): void
|
|
343
|
+
|
|
344
|
+
// Inherited from BaseInstanceHolderManager
|
|
345
|
+
filter(
|
|
346
|
+
predicate: (
|
|
347
|
+
value: ServiceLocatorInstanceHolder<any>,
|
|
348
|
+
key: string,
|
|
349
|
+
) => boolean,
|
|
350
|
+
): Map<string, ServiceLocatorInstanceHolder>
|
|
351
|
+
delete(name: string): boolean
|
|
352
|
+
size(): number
|
|
353
|
+
isEmpty(): boolean
|
|
354
|
+
}
|
|
355
|
+
```
|
|
356
|
+
|
|
319
357
|
### FactoryContext
|
|
320
358
|
|
|
321
359
|
Context provided to factory methods.
|