@art-ws/di 2.0.24 → 2.0.26
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/es/injector.d.ts +12 -0
- package/dist/es/injector.js +41 -0
- package/package.json +1 -1
package/dist/es/injector.d.ts
CHANGED
@@ -32,3 +32,15 @@ export declare function setRootInjector(injector: Injector | undefined): void;
|
|
32
32
|
export declare function getOnScopeHandler(): OnScopeHandler | undefined;
|
33
33
|
export declare function setOnScopeHandler(handler: OnScopeHandler | undefined): void;
|
34
34
|
export declare function getModuleName(module: DIModuleDef): string;
|
35
|
+
export declare function runScopedTask<T = void>(options: {
|
36
|
+
task: (...args: any[]) => Promise<T | undefined>;
|
37
|
+
deps?: Token[];
|
38
|
+
providers?: Provider[];
|
39
|
+
}): Promise<T | undefined>;
|
40
|
+
export type IDisposable = {
|
41
|
+
dispose: () => void;
|
42
|
+
};
|
43
|
+
export declare function disposeInstances(instances: unknown[]): {
|
44
|
+
instance: unknown;
|
45
|
+
error: Error;
|
46
|
+
}[];
|
package/dist/es/injector.js
CHANGED
@@ -172,3 +172,44 @@ export function getModuleName(module) {
|
|
172
172
|
name = name || "Unknown Module";
|
173
173
|
return name;
|
174
174
|
}
|
175
|
+
export function runScopedTask(options) {
|
176
|
+
let resolveFunc;
|
177
|
+
let rejectFunc;
|
178
|
+
const promise = new Promise((resolve, reject) => {
|
179
|
+
resolveFunc = resolve;
|
180
|
+
rejectFunc = reject;
|
181
|
+
});
|
182
|
+
let result = undefined;
|
183
|
+
getRootInjector().runScope(async () => {
|
184
|
+
const deps = options.deps?.map((d) => inject(d)) || [];
|
185
|
+
try {
|
186
|
+
result = await options.task(...deps);
|
187
|
+
}
|
188
|
+
catch (e) {
|
189
|
+
rejectFunc(e);
|
190
|
+
}
|
191
|
+
}, {
|
192
|
+
providers: options.providers,
|
193
|
+
onEnd: ({ injector }) => {
|
194
|
+
resolveFunc(result);
|
195
|
+
disposeInstances(injector.getInstances());
|
196
|
+
injector.dispose();
|
197
|
+
},
|
198
|
+
});
|
199
|
+
return promise;
|
200
|
+
}
|
201
|
+
export function disposeInstances(instances) {
|
202
|
+
const errors = [];
|
203
|
+
for (const instance of instances) {
|
204
|
+
const d = instance;
|
205
|
+
if (d && typeof d.dispose === "function") {
|
206
|
+
try {
|
207
|
+
d.dispose();
|
208
|
+
}
|
209
|
+
catch (error) {
|
210
|
+
errors.push({ instance, error: error });
|
211
|
+
}
|
212
|
+
}
|
213
|
+
}
|
214
|
+
return errors;
|
215
|
+
}
|