@matter/general 0.15.5 → 0.15.6
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/cjs/environment/Environment.d.ts.map +1 -1
- package/dist/cjs/environment/Environment.js +28 -11
- package/dist/cjs/environment/Environment.js.map +1 -1
- package/dist/esm/environment/Environment.d.ts.map +1 -1
- package/dist/esm/environment/Environment.js +28 -11
- package/dist/esm/environment/Environment.js.map +1 -1
- package/package.json +2 -2
- package/src/environment/Environment.ts +39 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Environment.d.ts","sourceRoot":"","sources":["../../../src/environment/Environment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"Environment.d.ts","sourceRoot":"","sources":["../../../src/environment/Environment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,4BAA4B,CAAC;AAGpC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD;;;;;;;;;;;;GAYG;AACH,qBAAa,WAAW;;gBAQR,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW;IAK9C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,OAAO;IAUxD;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;IA4BlE;;OAEG;IACH,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS;IAMnF;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG;IAqBjE;;OAEG;IACH,KAAK,CAAC,CAAC,SAAS,MAAM,EAClB,IAAI,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GACzC,CAAC,SAAS;QAAE,KAAK,EAAE,MAAM,YAAY,CAAC,IAAI,CAAC,CAAA;KAAE,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI;IAU5E;;OAEG;IACG,IAAI,CAAC,CAAC,SAAS,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAM1E;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IAYvE;;OAEG;IACH,IAAI,IAAI,WAEP;IAED,IAAI,IAAI,IAAI,WAAW,CAEtB;IAED;;;;OAIG;IACH,IAAI,KAAK,6CAhJyC,GAAG,EAAE,KAAK,EAAE,uBAkJ7D;IAED;;;;OAIG;IACH,IAAI,OAAO,6CAxJyC,GAAG,EAAE,KAAK,EAAE,uBA0J/D;IAED;;;;OAIG;IACH,SAAS,CAAC,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GASlC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;IAGnD;;;;OAIG;IACH,MAAM,KAAK,OAAO,IAOM,WAAW,CALlC;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,CAAC,GAAG,EAAE,WAAW,EAYlC;IAED;;OAEG;IACH,IAAI,IAAI,oBAEP;IAED;;OAEG;IACH,IAAI,OAAO,mBAEV;IAED;;OAEG;IACH,QAAQ;IAUR,SAAS,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAGjD"}
|
|
@@ -21,6 +21,7 @@ __export(Environment_exports, {
|
|
|
21
21
|
Environment: () => Environment
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(Environment_exports);
|
|
24
|
+
var import_MatterError = require("#MatterError.js");
|
|
24
25
|
var import_DiagnosticSource = require("../log/DiagnosticSource.js");
|
|
25
26
|
var import_Logger = require("../log/Logger.js");
|
|
26
27
|
var import_disposable = require("../polyfills/disposable.js");
|
|
@@ -51,18 +52,31 @@ class Environment {
|
|
|
51
52
|
* Determine if an environmental service is available.
|
|
52
53
|
*/
|
|
53
54
|
has(type) {
|
|
54
|
-
|
|
55
|
+
const mine = this.#services?.get(type);
|
|
56
|
+
if (mine === null) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
return mine !== void 0 || (this.#parent?.has(type) ?? false);
|
|
55
60
|
}
|
|
56
61
|
/**
|
|
57
62
|
* Access an environmental service.
|
|
58
63
|
*/
|
|
59
64
|
get(type) {
|
|
60
|
-
|
|
61
|
-
if (
|
|
62
|
-
return
|
|
65
|
+
const mine = this.#services?.get(type);
|
|
66
|
+
if (mine !== void 0 && mine !== null) {
|
|
67
|
+
return mine;
|
|
68
|
+
}
|
|
69
|
+
if (mine === void 0) {
|
|
70
|
+
const instance = this.#parent?.maybeGet(type);
|
|
71
|
+
if (instance !== void 0 && instance !== null) {
|
|
72
|
+
return instance;
|
|
73
|
+
}
|
|
63
74
|
}
|
|
64
75
|
if (type[import_Environmental.Environmental.create]) {
|
|
65
|
-
|
|
76
|
+
const instance = type[import_Environmental.Environmental.create](this);
|
|
77
|
+
if (!(instance instanceof type)) {
|
|
78
|
+
throw new import_MatterError.InternalError(`Service creation did not produce instance of ${type.name}`);
|
|
79
|
+
}
|
|
66
80
|
return instance;
|
|
67
81
|
}
|
|
68
82
|
throw new import_Lifecycle.UnsupportedDependencyError(`Required dependency ${type.name}`, "is not available");
|
|
@@ -82,15 +96,18 @@ class Environment {
|
|
|
82
96
|
* @param instance optional instance expected, if existing instance does not match it is not deleted
|
|
83
97
|
*/
|
|
84
98
|
delete(type, instance) {
|
|
85
|
-
|
|
99
|
+
const localInstance = this.#services?.get(type);
|
|
100
|
+
this.#services?.set(type, null);
|
|
101
|
+
if (localInstance === void 0 || localInstance === null) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (instance !== void 0 && localInstance !== instance) {
|
|
86
105
|
return;
|
|
87
106
|
}
|
|
88
|
-
this.#
|
|
89
|
-
this.#parent?.delete(type);
|
|
90
|
-
this.#deleted.emit(type, instance);
|
|
107
|
+
this.#deleted.emit(type, localInstance);
|
|
91
108
|
const serviceEvents = this.#serviceEvents.get(type);
|
|
92
109
|
if (serviceEvents) {
|
|
93
|
-
serviceEvents.deleted.emit(
|
|
110
|
+
serviceEvents.deleted.emit(localInstance);
|
|
94
111
|
}
|
|
95
112
|
}
|
|
96
113
|
/**
|
|
@@ -98,8 +115,8 @@ class Environment {
|
|
|
98
115
|
*/
|
|
99
116
|
close(type) {
|
|
100
117
|
const instance = this.maybeGet(type);
|
|
118
|
+
this.delete(type, instance);
|
|
101
119
|
if (instance !== void 0) {
|
|
102
|
-
this.delete(type, instance);
|
|
103
120
|
return instance.close?.();
|
|
104
121
|
}
|
|
105
122
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/environment/Environment.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Environment.d.ts","sourceRoot":"","sources":["../../../src/environment/Environment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"Environment.d.ts","sourceRoot":"","sources":["../../../src/environment/Environment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,OAAO,4BAA4B,CAAC;AAGpC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD;;;;;;;;;;;;GAYG;AACH,qBAAa,WAAW;;gBAQR,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW;IAK9C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,OAAO;IAUxD;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;IA4BlE;;OAEG;IACH,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS;IAMnF;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,QAAQ,CAAC,EAAE,GAAG;IAqBjE;;OAEG;IACH,KAAK,CAAC,CAAC,SAAS,MAAM,EAClB,IAAI,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GACzC,CAAC,SAAS;QAAE,KAAK,EAAE,MAAM,YAAY,CAAC,IAAI,CAAC,CAAA;KAAE,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI;IAU5E;;OAEG;IACG,IAAI,CAAC,CAAC,SAAS,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAM1E;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IAYvE;;OAEG;IACH,IAAI,IAAI,WAEP;IAED,IAAI,IAAI,IAAI,WAAW,CAEtB;IAED;;;;OAIG;IACH,IAAI,KAAK,6CAhJyC,GAAG,EAAE,KAAK,EAAE,uBAkJ7D;IAED;;;;OAIG;IACH,IAAI,OAAO,6CAxJyC,GAAG,EAAE,KAAK,EAAE,uBA0J/D;IAED;;;;OAIG;IACH,SAAS,CAAC,CAAC,SAAS,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,GASlC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;IAGnD;;;;OAIG;IACH,MAAM,KAAK,OAAO,IAOM,WAAW,CALlC;IAED;;OAEG;IACH,MAAM,KAAK,OAAO,CAAC,GAAG,EAAE,WAAW,EAYlC;IAED;;OAEG;IACH,IAAI,IAAI,oBAEP;IAED;;OAEG;IACH,IAAI,OAAO,mBAEV;IAED;;OAEG;IACH,QAAQ;IAUR,SAAS,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAGjD"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import { InternalError } from "#MatterError.js";
|
|
6
7
|
import { DiagnosticSource } from "../log/DiagnosticSource.js";
|
|
7
8
|
import { Logger } from "../log/Logger.js";
|
|
8
9
|
import "../polyfills/disposable.js";
|
|
@@ -28,18 +29,31 @@ class Environment {
|
|
|
28
29
|
* Determine if an environmental service is available.
|
|
29
30
|
*/
|
|
30
31
|
has(type) {
|
|
31
|
-
|
|
32
|
+
const mine = this.#services?.get(type);
|
|
33
|
+
if (mine === null) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
return mine !== void 0 || (this.#parent?.has(type) ?? false);
|
|
32
37
|
}
|
|
33
38
|
/**
|
|
34
39
|
* Access an environmental service.
|
|
35
40
|
*/
|
|
36
41
|
get(type) {
|
|
37
|
-
|
|
38
|
-
if (
|
|
39
|
-
return
|
|
42
|
+
const mine = this.#services?.get(type);
|
|
43
|
+
if (mine !== void 0 && mine !== null) {
|
|
44
|
+
return mine;
|
|
45
|
+
}
|
|
46
|
+
if (mine === void 0) {
|
|
47
|
+
const instance = this.#parent?.maybeGet(type);
|
|
48
|
+
if (instance !== void 0 && instance !== null) {
|
|
49
|
+
return instance;
|
|
50
|
+
}
|
|
40
51
|
}
|
|
41
52
|
if (type[Environmental.create]) {
|
|
42
|
-
|
|
53
|
+
const instance = type[Environmental.create](this);
|
|
54
|
+
if (!(instance instanceof type)) {
|
|
55
|
+
throw new InternalError(`Service creation did not produce instance of ${type.name}`);
|
|
56
|
+
}
|
|
43
57
|
return instance;
|
|
44
58
|
}
|
|
45
59
|
throw new UnsupportedDependencyError(`Required dependency ${type.name}`, "is not available");
|
|
@@ -59,15 +73,18 @@ class Environment {
|
|
|
59
73
|
* @param instance optional instance expected, if existing instance does not match it is not deleted
|
|
60
74
|
*/
|
|
61
75
|
delete(type, instance) {
|
|
62
|
-
|
|
76
|
+
const localInstance = this.#services?.get(type);
|
|
77
|
+
this.#services?.set(type, null);
|
|
78
|
+
if (localInstance === void 0 || localInstance === null) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (instance !== void 0 && localInstance !== instance) {
|
|
63
82
|
return;
|
|
64
83
|
}
|
|
65
|
-
this.#
|
|
66
|
-
this.#parent?.delete(type);
|
|
67
|
-
this.#deleted.emit(type, instance);
|
|
84
|
+
this.#deleted.emit(type, localInstance);
|
|
68
85
|
const serviceEvents = this.#serviceEvents.get(type);
|
|
69
86
|
if (serviceEvents) {
|
|
70
|
-
serviceEvents.deleted.emit(
|
|
87
|
+
serviceEvents.deleted.emit(localInstance);
|
|
71
88
|
}
|
|
72
89
|
}
|
|
73
90
|
/**
|
|
@@ -75,8 +92,8 @@ class Environment {
|
|
|
75
92
|
*/
|
|
76
93
|
close(type) {
|
|
77
94
|
const instance = this.maybeGet(type);
|
|
95
|
+
this.delete(type, instance);
|
|
78
96
|
if (instance !== void 0) {
|
|
79
|
-
this.delete(type, instance);
|
|
80
97
|
return instance.close?.();
|
|
81
98
|
}
|
|
82
99
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/environment/Environment.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/general",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.6",
|
|
4
4
|
"description": "Non-Matter support for Matter.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"@noble/curves": "^1.9.5"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@matter/testing": "0.15.
|
|
39
|
+
"@matter/testing": "0.15.6"
|
|
40
40
|
},
|
|
41
41
|
"files": [
|
|
42
42
|
"dist/**/*",
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { InternalError } from "#MatterError.js";
|
|
7
8
|
import { MaybePromise } from "#util/Promises.js";
|
|
8
9
|
import { DiagnosticSource } from "../log/DiagnosticSource.js";
|
|
9
10
|
import { Logger } from "../log/Logger.js";
|
|
@@ -31,7 +32,7 @@ const logger = Logger.get("Environment");
|
|
|
31
32
|
* TODO - could remove global singletons by moving here
|
|
32
33
|
*/
|
|
33
34
|
export class Environment {
|
|
34
|
-
#services?: Map<abstract new (...args: any[]) => any, Environmental.Service>;
|
|
35
|
+
#services?: Map<abstract new (...args: any[]) => any, Environmental.Service | null>;
|
|
35
36
|
#name: string;
|
|
36
37
|
#parent?: Environment;
|
|
37
38
|
#added = Observable<[type: abstract new (...args: any[]) => {}, instance: {}]>();
|
|
@@ -47,22 +48,41 @@ export class Environment {
|
|
|
47
48
|
* Determine if an environmental service is available.
|
|
48
49
|
*/
|
|
49
50
|
has(type: abstract new (...args: any[]) => any): boolean {
|
|
50
|
-
|
|
51
|
+
const mine = this.#services?.get(type);
|
|
52
|
+
|
|
53
|
+
if (mine === null) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return mine !== undefined || (this.#parent?.has(type) ?? false);
|
|
51
58
|
}
|
|
52
59
|
|
|
53
60
|
/**
|
|
54
61
|
* Access an environmental service.
|
|
55
62
|
*/
|
|
56
63
|
get<T extends object>(type: abstract new (...args: any[]) => T): T {
|
|
57
|
-
|
|
64
|
+
const mine = this.#services?.get(type);
|
|
58
65
|
|
|
59
|
-
if (
|
|
60
|
-
return
|
|
66
|
+
if (mine !== undefined && mine !== null) {
|
|
67
|
+
return mine as T;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// When null then we do not have it and also do not want to inherit from parent
|
|
71
|
+
if (mine === undefined) {
|
|
72
|
+
const instance = this.#parent?.maybeGet(type);
|
|
73
|
+
if (instance !== undefined && instance !== null) {
|
|
74
|
+
// Parent has it, use it
|
|
75
|
+
return instance;
|
|
76
|
+
}
|
|
61
77
|
}
|
|
62
78
|
|
|
79
|
+
// ... otherwise try to create it. The create method must install it in the environment if needed
|
|
63
80
|
if ((type as Environmental.Factory<T>)[Environmental.create]) {
|
|
64
|
-
|
|
65
|
-
|
|
81
|
+
const instance = (type as any)[Environmental.create](this) as T;
|
|
82
|
+
if (!(instance instanceof type)) {
|
|
83
|
+
throw new InternalError(`Service creation did not produce instance of ${type.name}`);
|
|
84
|
+
}
|
|
85
|
+
return instance;
|
|
66
86
|
}
|
|
67
87
|
|
|
68
88
|
throw new UnsupportedDependencyError(`Required dependency ${type.name}`, "is not available");
|
|
@@ -84,17 +104,23 @@ export class Environment {
|
|
|
84
104
|
* @param instance optional instance expected, if existing instance does not match it is not deleted
|
|
85
105
|
*/
|
|
86
106
|
delete(type: abstract new (...args: any[]) => any, instance?: any) {
|
|
87
|
-
|
|
107
|
+
const localInstance = this.#services?.get(type);
|
|
108
|
+
|
|
109
|
+
// Remove instance and replace by null to prevent inheritance from parent
|
|
110
|
+
this.#services?.set(type, null);
|
|
111
|
+
|
|
112
|
+
if (localInstance === undefined || localInstance === null) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (instance !== undefined && localInstance !== instance) {
|
|
88
116
|
return;
|
|
89
117
|
}
|
|
90
|
-
this.#services?.delete(type);
|
|
91
|
-
this.#parent?.delete(type);
|
|
92
118
|
|
|
93
|
-
this.#deleted.emit(type,
|
|
119
|
+
this.#deleted.emit(type, localInstance);
|
|
94
120
|
|
|
95
121
|
const serviceEvents = this.#serviceEvents.get(type);
|
|
96
122
|
if (serviceEvents) {
|
|
97
|
-
serviceEvents.deleted.emit(
|
|
123
|
+
serviceEvents.deleted.emit(localInstance);
|
|
98
124
|
}
|
|
99
125
|
}
|
|
100
126
|
|
|
@@ -105,8 +131,8 @@ export class Environment {
|
|
|
105
131
|
type: abstract new (...args: any[]) => T,
|
|
106
132
|
): T extends { close: () => MaybePromise<void> } ? MaybePromise<void> : void {
|
|
107
133
|
const instance = this.maybeGet(type);
|
|
134
|
+
this.delete(type, instance); // delete and block inheritance
|
|
108
135
|
if (instance !== undefined) {
|
|
109
|
-
this.delete(type, instance);
|
|
110
136
|
return (instance as Partial<Destructable>).close?.() as T extends { close: () => MaybePromise<void> }
|
|
111
137
|
? MaybePromise<void>
|
|
112
138
|
: void;
|