react-obsidian 2.13.0 → 2.15.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/src/decorators/LifecycleBound.d.ts +1 -1
- package/dist/src/decorators/LifecycleBound.d.ts.map +1 -1
- package/dist/src/graph/registry/GraphRegistry.d.ts +8 -0
- package/dist/src/graph/registry/GraphRegistry.d.ts.map +1 -1
- package/dist/src/graph/registry/GraphRegistry.js +66 -0
- package/dist/src/graph/registry/GraphRegistry.js.map +1 -1
- package/package.json +2 -2
- package/src/decorators/LifecycleBound.ts +1 -1
- package/src/graph/registry/GraphRegistry.ts +75 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LifecycleBound.d.ts","sourceRoot":"","sources":["../../../src/decorators/LifecycleBound.ts"],"names":[],"mappings":"AAAA,KAAK,OAAO,GAAG;IACb,KAAK,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"LifecycleBound.d.ts","sourceRoot":"","sources":["../../../src/decorators/LifecycleBound.ts"],"names":[],"mappings":"AAAA,KAAK,OAAO,GAAG;IACb,KAAK,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;CACjD,CAAC;AAEF,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,iBACzB,GAAG,SAKzB"}
|
|
@@ -11,12 +11,17 @@ export declare class GraphRegistry {
|
|
|
11
11
|
private readonly graphMiddlewares;
|
|
12
12
|
private readonly keyToGenerator;
|
|
13
13
|
private readonly keyToGraph;
|
|
14
|
+
private readonly onClearListeners;
|
|
14
15
|
register(constructor: Constructable<Graph>, subgraphs?: Constructable<Graph>[]): void;
|
|
15
16
|
registerGraphGenerator(key: string, generator: () => Constructable<Graph>): void;
|
|
16
17
|
ensureRegistered(keyOrGraph: string | Graph): void;
|
|
18
|
+
isInstantiated(G: Constructable<Graph>): boolean;
|
|
17
19
|
getSubgraphs(graph: Graph): Graph[];
|
|
18
20
|
getGraphInstance(name: string): Graph;
|
|
19
21
|
resolve<T extends Graph>(keyOrGraph: String | Constructable<T>, source?: 'lifecycleOwner' | 'classInjection' | 'serviceLocator', props?: any, injectionToken?: string): T;
|
|
22
|
+
private instantiateCustomScopedSubgraphs;
|
|
23
|
+
private assertInstantiatingCustomScopedSubgraphFromSameScope;
|
|
24
|
+
private getSubgraphsConstructors;
|
|
20
25
|
private getGraphConstructorByKey;
|
|
21
26
|
private has;
|
|
22
27
|
private getFirst;
|
|
@@ -25,8 +30,11 @@ export declare class GraphRegistry {
|
|
|
25
30
|
private isSingleton;
|
|
26
31
|
private isBoundToReactLifecycle;
|
|
27
32
|
private isComponentScopedLifecycleBound;
|
|
33
|
+
private isCustomScopedLifecycleBound;
|
|
28
34
|
clearGraphAfterItWasMockedInTests(graphName: string): void;
|
|
29
35
|
clear(graph: Graph): void;
|
|
36
|
+
private registerOnClearListener;
|
|
37
|
+
private invokeOnClearListeners;
|
|
30
38
|
private clearGraphsRegisteredByKey;
|
|
31
39
|
addGraphMiddleware(middleware: Middleware<Graph>): void;
|
|
32
40
|
clearGraphMiddlewares(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphRegistry.d.ts","sourceRoot":"","sources":["../../../../src/graph/registry/GraphRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"GraphRegistry.d.ts","sourceRoot":"","sources":["../../../../src/graph/registry/GraphRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAO1C,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA+C;IACrF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA0C;IAChF,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA4B;IACrE,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA4B;IACrE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAC3D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA8D;IAC/F,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA8B;IAC/D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgD;IAC/E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA2C;IACtE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqC;IAEtE,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,SAAS,GAAE,aAAa,CAAC,KAAK,CAAC,EAAO;IAIlF,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC,KAAK,CAAC;IAKzE,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK;IAOpC,cAAc,CAAC,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,OAAO;IAIvD,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE;IAMnC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAIrC,OAAO,CAAC,CAAC,SAAS,KAAK,EACrB,UAAU,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,EACrC,MAAM,GAAE,gBAAgB,GAAG,gBAAgB,GAAG,gBAAmC,EACjF,KAAK,GAAE,GAAe,EACtB,cAAc,CAAC,EAAE,MAAM,GACtB,CAAC;IAkBJ,OAAO,CAAC,gCAAgC;IAmBxC,OAAO,CAAC,oDAAoD;IAe5D,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,GAAG;IAaX,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,GAAG;IAYX,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,+BAA+B;IAIvC,OAAO,CAAC,4BAA4B;IAKpC,iCAAiC,CAAC,SAAS,EAAE,MAAM;IAsBnD,KAAK,CAAC,KAAK,EAAE,KAAK;IAgBlB,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,0BAA0B;IAUlC,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC;IAIhD,qBAAqB;IAIrB,QAAQ;CAST;;AAID,wBAA2D"}
|
|
@@ -8,6 +8,7 @@ const GraphMiddlewareChain_1 = __importDefault(require("./GraphMiddlewareChain")
|
|
|
8
8
|
const ObtainLifecycleBoundGraphException_1 = require("./ObtainLifecycleBoundGraphException");
|
|
9
9
|
const getGlobal_1 = require("../../utils/getGlobal");
|
|
10
10
|
const isString_1 = require("../../utils/isString");
|
|
11
|
+
const ReferenceCounter_1 = __importDefault(require("../../ReferenceCounter"));
|
|
11
12
|
class GraphRegistry {
|
|
12
13
|
constructor() {
|
|
13
14
|
this.constructorToInstance = new Map();
|
|
@@ -19,6 +20,7 @@ class GraphRegistry {
|
|
|
19
20
|
this.graphMiddlewares = new GraphMiddlewareChain_1.default();
|
|
20
21
|
this.keyToGenerator = new Map();
|
|
21
22
|
this.keyToGraph = new Map();
|
|
23
|
+
this.onClearListeners = new Map();
|
|
22
24
|
}
|
|
23
25
|
register(constructor, subgraphs = []) {
|
|
24
26
|
this.graphToSubgraphs.set(constructor, new Set(subgraphs));
|
|
@@ -36,6 +38,10 @@ class GraphRegistry {
|
|
|
36
38
|
return;
|
|
37
39
|
this.set(graph.constructor, graph);
|
|
38
40
|
}
|
|
41
|
+
isInstantiated(G) {
|
|
42
|
+
var _a, _b;
|
|
43
|
+
return ((_b = (_a = this.constructorToInstance.get(G)) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : 0) > 0;
|
|
44
|
+
}
|
|
39
45
|
getSubgraphs(graph) {
|
|
40
46
|
var _a;
|
|
41
47
|
const Graph = this.instanceToConstructor.get(graph);
|
|
@@ -59,8 +65,49 @@ class GraphRegistry {
|
|
|
59
65
|
}
|
|
60
66
|
const graph = this.graphMiddlewares.resolve(Graph, props);
|
|
61
67
|
this.set(Graph, graph, injectionToken);
|
|
68
|
+
this.instantiateCustomScopedSubgraphs(graph, props);
|
|
62
69
|
return graph;
|
|
63
70
|
}
|
|
71
|
+
instantiateCustomScopedSubgraphs(graph, props) {
|
|
72
|
+
this.assertInstantiatingCustomScopedSubgraphFromSameScope(graph);
|
|
73
|
+
if (!this.isCustomScopedLifecycleBound(this.instanceToConstructor.get(graph)))
|
|
74
|
+
return;
|
|
75
|
+
const customScope = Reflect.getMetadata('lifecycleScope', this.instanceToConstructor.get(graph));
|
|
76
|
+
const subgraphs = this.getSubgraphsConstructors(graph);
|
|
77
|
+
const sameScopeSubgraphs = subgraphs.filter(subgraph => Reflect.getMetadata('lifecycleScope', subgraph) === customScope);
|
|
78
|
+
const instantiatedSubgraphs = sameScopeSubgraphs.map(subgraph => {
|
|
79
|
+
return this.resolve(subgraph, 'lifecycleOwner', props);
|
|
80
|
+
});
|
|
81
|
+
instantiatedSubgraphs.forEach((subgraph) => ReferenceCounter_1.default.retain(subgraph));
|
|
82
|
+
this.registerOnClearListener(graph, () => {
|
|
83
|
+
instantiatedSubgraphs.forEach((subgraph) => ReferenceCounter_1.default.release(subgraph, () => this.clear(subgraph)));
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
assertInstantiatingCustomScopedSubgraphFromSameScope(graph) {
|
|
87
|
+
const graphScope = Reflect.getMetadata('lifecycleScope', this.instanceToConstructor.get(graph));
|
|
88
|
+
const subgraphs = this.getSubgraphsConstructors(graph);
|
|
89
|
+
subgraphs.forEach(subgraph => {
|
|
90
|
+
const subgraphScope = Reflect.getMetadata('lifecycleScope', subgraph);
|
|
91
|
+
if (!this.isInstantiated(subgraph) &&
|
|
92
|
+
this.isCustomScopedLifecycleBound(subgraph) &&
|
|
93
|
+
graphScope !== subgraphScope) {
|
|
94
|
+
throw new Error(`Cannot instantiate the scoped graph '${subgraph.name}' as a subgraph of '${graph.constructor.name}' because the scopes do not match. ${graphScope} !== ${subgraphScope}`);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
getSubgraphsConstructors(graph) {
|
|
99
|
+
var _a;
|
|
100
|
+
const Graph = typeof graph === 'function' ? graph : this.instanceToConstructor.get(graph);
|
|
101
|
+
const directSubgraphs = Array.from((_a = this.graphToSubgraphs.get(Graph)) !== null && _a !== void 0 ? _a : new Set());
|
|
102
|
+
if (directSubgraphs.length === 0)
|
|
103
|
+
return [];
|
|
104
|
+
return [
|
|
105
|
+
...directSubgraphs,
|
|
106
|
+
...new Set(directSubgraphs
|
|
107
|
+
.map(subgraph => this.getSubgraphsConstructors(subgraph))
|
|
108
|
+
.flat()),
|
|
109
|
+
];
|
|
110
|
+
}
|
|
64
111
|
getGraphConstructorByKey(key) {
|
|
65
112
|
if (this.keyToGraph.has(key))
|
|
66
113
|
return this.keyToGraph.get(key);
|
|
@@ -116,6 +163,10 @@ class GraphRegistry {
|
|
|
116
163
|
isComponentScopedLifecycleBound(Graph) {
|
|
117
164
|
return Reflect.getMetadata('lifecycleScope', Graph) === 'component';
|
|
118
165
|
}
|
|
166
|
+
isCustomScopedLifecycleBound(Graph) {
|
|
167
|
+
const scope = Reflect.getMetadata('lifecycleScope', Graph);
|
|
168
|
+
return typeof scope === 'string' && scope !== 'component' && scope !== 'feature';
|
|
169
|
+
}
|
|
119
170
|
clearGraphAfterItWasMockedInTests(graphName) {
|
|
120
171
|
const graphNames = this.nameToInstance.keys();
|
|
121
172
|
for (const name of graphNames) {
|
|
@@ -134,6 +185,7 @@ class GraphRegistry {
|
|
|
134
185
|
this.injectionTokenToInstance.delete(token);
|
|
135
186
|
this.instanceToInjectionToken.delete(graph);
|
|
136
187
|
}
|
|
188
|
+
this.invokeOnClearListeners(graph);
|
|
137
189
|
}
|
|
138
190
|
}
|
|
139
191
|
}
|
|
@@ -150,6 +202,20 @@ class GraphRegistry {
|
|
|
150
202
|
this.instanceToInjectionToken.delete(graph);
|
|
151
203
|
}
|
|
152
204
|
this.clearGraphsRegisteredByKey(Graph);
|
|
205
|
+
this.invokeOnClearListeners(graph);
|
|
206
|
+
}
|
|
207
|
+
registerOnClearListener(graph, callback) {
|
|
208
|
+
var _a;
|
|
209
|
+
const listeners = (_a = this.onClearListeners.get(graph)) !== null && _a !== void 0 ? _a : new Set();
|
|
210
|
+
listeners.add(callback);
|
|
211
|
+
this.onClearListeners.set(graph, listeners);
|
|
212
|
+
}
|
|
213
|
+
invokeOnClearListeners(graph) {
|
|
214
|
+
const listeners = this.onClearListeners.get(graph);
|
|
215
|
+
if (!listeners)
|
|
216
|
+
return;
|
|
217
|
+
listeners.forEach((listener) => listener());
|
|
218
|
+
this.onClearListeners.delete(graph);
|
|
153
219
|
}
|
|
154
220
|
clearGraphsRegisteredByKey(Graph) {
|
|
155
221
|
[...this.keyToGraph.keys()]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphRegistry.js","sourceRoot":"","sources":["../../../../src/graph/registry/GraphRegistry.ts"],"names":[],"mappings":";;;;;;AAGA,kFAA0D;AAC1D,6FAA0F;AAC1F,qDAAkD;AAClD,mDAAgD;
|
|
1
|
+
{"version":3,"file":"GraphRegistry.js","sourceRoot":"","sources":["../../../../src/graph/registry/GraphRegistry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-obsidian",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.15.0",
|
|
4
4
|
"description": "Dependency injection framework for React and React Native applications",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"prepack": "npm run lint && tsc --project tsconfig.prod.json",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"eslint-plugin-import": "^2.25.2",
|
|
48
48
|
"eslint-plugin-import-newlines": "^1.1.5",
|
|
49
49
|
"eslint-plugin-jest-formatting": "^3.1.0",
|
|
50
|
-
"eslint-plugin-obsidian": "2.
|
|
50
|
+
"eslint-plugin-obsidian": "2.15.0",
|
|
51
51
|
"eslint-plugin-react": "^7.26.1",
|
|
52
52
|
"eslint-plugin-react-hooks": "^4.2.0",
|
|
53
53
|
"eslint-plugin-unused-imports": "3.1.x",
|
|
@@ -5,6 +5,7 @@ import GraphMiddlewareChain from './GraphMiddlewareChain';
|
|
|
5
5
|
import { ObtainLifecycleBoundGraphException } from './ObtainLifecycleBoundGraphException';
|
|
6
6
|
import { getGlobal } from '../../utils/getGlobal';
|
|
7
7
|
import { isString } from '../../utils/isString';
|
|
8
|
+
import referenceCounter from '../../ReferenceCounter';
|
|
8
9
|
|
|
9
10
|
export class GraphRegistry {
|
|
10
11
|
private readonly constructorToInstance = new Map<Constructable<Graph>, Set<Graph>>();
|
|
@@ -16,6 +17,7 @@ export class GraphRegistry {
|
|
|
16
17
|
private readonly graphMiddlewares = new GraphMiddlewareChain();
|
|
17
18
|
private readonly keyToGenerator = new Map<string,() => Constructable<Graph>>();
|
|
18
19
|
private readonly keyToGraph = new Map<string, Constructable<Graph>>();
|
|
20
|
+
private readonly onClearListeners = new Map<Graph, Set<() => void>>();
|
|
19
21
|
|
|
20
22
|
register(constructor: Constructable<Graph>, subgraphs: Constructable<Graph>[] = []) {
|
|
21
23
|
this.graphToSubgraphs.set(constructor, new Set(subgraphs));
|
|
@@ -33,6 +35,10 @@ export class GraphRegistry {
|
|
|
33
35
|
this.set(graph.constructor as any, graph);
|
|
34
36
|
}
|
|
35
37
|
|
|
38
|
+
public isInstantiated(G: Constructable<Graph>): boolean {
|
|
39
|
+
return (this.constructorToInstance.get(G)?.size ?? 0) > 0;
|
|
40
|
+
}
|
|
41
|
+
|
|
36
42
|
getSubgraphs(graph: Graph): Graph[] {
|
|
37
43
|
const Graph = this.instanceToConstructor.get(graph)!;
|
|
38
44
|
const subgraphs = this.graphToSubgraphs.get(Graph) ?? new Set();
|
|
@@ -62,9 +68,58 @@ export class GraphRegistry {
|
|
|
62
68
|
}
|
|
63
69
|
const graph = this.graphMiddlewares.resolve(Graph, props);
|
|
64
70
|
this.set(Graph, graph, injectionToken);
|
|
71
|
+
this.instantiateCustomScopedSubgraphs(graph, props);
|
|
65
72
|
return graph as T;
|
|
66
73
|
}
|
|
67
74
|
|
|
75
|
+
private instantiateCustomScopedSubgraphs(graph: Graph, props: any) {
|
|
76
|
+
this.assertInstantiatingCustomScopedSubgraphFromSameScope(graph);
|
|
77
|
+
if (!this.isCustomScopedLifecycleBound(this.instanceToConstructor.get(graph)!)) return;
|
|
78
|
+
const customScope = Reflect.getMetadata('lifecycleScope', this.instanceToConstructor.get(graph)!);
|
|
79
|
+
const subgraphs = this.getSubgraphsConstructors(graph);
|
|
80
|
+
const sameScopeSubgraphs = subgraphs.filter(
|
|
81
|
+
subgraph => Reflect.getMetadata('lifecycleScope', subgraph) === customScope,
|
|
82
|
+
);
|
|
83
|
+
const instantiatedSubgraphs = sameScopeSubgraphs.map(
|
|
84
|
+
subgraph => {
|
|
85
|
+
return this.resolve(subgraph, 'lifecycleOwner', props);
|
|
86
|
+
},
|
|
87
|
+
);
|
|
88
|
+
instantiatedSubgraphs.forEach((subgraph) => referenceCounter.retain(subgraph));
|
|
89
|
+
this.registerOnClearListener(graph, () => {
|
|
90
|
+
instantiatedSubgraphs.forEach((subgraph) => referenceCounter.release(subgraph, () => this.clear(subgraph)));
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
private assertInstantiatingCustomScopedSubgraphFromSameScope(graph: Graph) {
|
|
95
|
+
const graphScope = Reflect.getMetadata('lifecycleScope', this.instanceToConstructor.get(graph)!);
|
|
96
|
+
const subgraphs = this.getSubgraphsConstructors(graph);
|
|
97
|
+
subgraphs.forEach(subgraph => {
|
|
98
|
+
const subgraphScope = Reflect.getMetadata('lifecycleScope', subgraph);
|
|
99
|
+
if (
|
|
100
|
+
!this.isInstantiated(subgraph) &&
|
|
101
|
+
this.isCustomScopedLifecycleBound(subgraph) &&
|
|
102
|
+
graphScope !== subgraphScope
|
|
103
|
+
) {
|
|
104
|
+
throw new Error(`Cannot instantiate the scoped graph '${subgraph.name}' as a subgraph of '${graph.constructor.name}' because the scopes do not match. ${graphScope} !== ${subgraphScope}`);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
private getSubgraphsConstructors(graph: Graph | Constructable<Graph>): Constructable<Graph>[] {
|
|
110
|
+
const Graph = typeof graph === 'function' ? graph : this.instanceToConstructor.get(graph)!;
|
|
111
|
+
const directSubgraphs = Array.from(this.graphToSubgraphs.get(Graph) ?? new Set<Constructable<Graph>>());
|
|
112
|
+
if (directSubgraphs.length === 0) return [];
|
|
113
|
+
return [
|
|
114
|
+
...directSubgraphs,
|
|
115
|
+
...new Set(
|
|
116
|
+
directSubgraphs
|
|
117
|
+
.map(subgraph => this.getSubgraphsConstructors(subgraph))
|
|
118
|
+
.flat(),
|
|
119
|
+
),
|
|
120
|
+
];
|
|
121
|
+
}
|
|
122
|
+
|
|
68
123
|
private getGraphConstructorByKey<T extends Graph>(key: string): Constructable<T> {
|
|
69
124
|
if (this.keyToGraph.has(key)) return this.keyToGraph.get(key) as Constructable<T>;
|
|
70
125
|
const generator = this.keyToGenerator.get(key);
|
|
@@ -123,6 +178,11 @@ export class GraphRegistry {
|
|
|
123
178
|
return Reflect.getMetadata('lifecycleScope', Graph) === 'component';
|
|
124
179
|
}
|
|
125
180
|
|
|
181
|
+
private isCustomScopedLifecycleBound(Graph: Constructable<Graph>): boolean {
|
|
182
|
+
const scope = Reflect.getMetadata('lifecycleScope', Graph);
|
|
183
|
+
return typeof scope === 'string' && scope !== 'component' && scope !== 'feature';
|
|
184
|
+
}
|
|
185
|
+
|
|
126
186
|
clearGraphAfterItWasMockedInTests(graphName: string) {
|
|
127
187
|
const graphNames = this.nameToInstance.keys();
|
|
128
188
|
for (const name of graphNames) {
|
|
@@ -140,6 +200,7 @@ export class GraphRegistry {
|
|
|
140
200
|
this.injectionTokenToInstance.delete(token);
|
|
141
201
|
this.instanceToInjectionToken.delete(graph);
|
|
142
202
|
}
|
|
203
|
+
this.invokeOnClearListeners(graph);
|
|
143
204
|
}
|
|
144
205
|
}
|
|
145
206
|
}
|
|
@@ -157,6 +218,20 @@ export class GraphRegistry {
|
|
|
157
218
|
}
|
|
158
219
|
|
|
159
220
|
this.clearGraphsRegisteredByKey(Graph);
|
|
221
|
+
this.invokeOnClearListeners(graph);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
private registerOnClearListener(graph: Graph, callback: () => void) {
|
|
225
|
+
const listeners = this.onClearListeners.get(graph) ?? new Set();
|
|
226
|
+
listeners.add(callback);
|
|
227
|
+
this.onClearListeners.set(graph, listeners);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
private invokeOnClearListeners(graph: Graph) {
|
|
231
|
+
const listeners = this.onClearListeners.get(graph);
|
|
232
|
+
if (!listeners) return;
|
|
233
|
+
listeners.forEach((listener) => listener());
|
|
234
|
+
this.onClearListeners.delete(graph);
|
|
160
235
|
}
|
|
161
236
|
|
|
162
237
|
private clearGraphsRegisteredByKey(Graph: Constructable<Graph>) {
|