react-obsidian 0.0.41 → 0.0.43
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/graph/CircularDependenciesDetector.d.ts +11 -0
- package/dist/src/graph/CircularDependenciesDetector.d.ts.map +1 -0
- package/dist/src/graph/CircularDependenciesDetector.js +27 -0
- package/dist/src/graph/CircularDependenciesDetector.js.map +1 -0
- package/dist/src/graph/ObjectGraph.d.ts +2 -1
- package/dist/src/graph/ObjectGraph.d.ts.map +1 -1
- package/dist/src/graph/ObjectGraph.js +2 -2
- package/dist/src/graph/ObjectGraph.js.map +1 -1
- package/dist/src/graph/PropertyRetriever.d.ts +2 -1
- package/dist/src/graph/PropertyRetriever.d.ts.map +1 -1
- package/dist/src/graph/PropertyRetriever.js +18 -7
- package/dist/src/graph/PropertyRetriever.js.map +1 -1
- package/dist/src/graph/PropertyRetrieverDelegate.d.ts +2 -1
- package/dist/src/graph/PropertyRetrieverDelegate.d.ts.map +1 -1
- package/dist/src/graph/VisitedNodes.d.ts +10 -0
- package/dist/src/graph/VisitedNodes.d.ts.map +1 -0
- package/dist/src/graph/VisitedNodes.js +32 -0
- package/dist/src/graph/VisitedNodes.js.map +1 -0
- package/dist/test/fixtures/CircularDependencyFromSubgraph.d.ts +5 -0
- package/dist/test/fixtures/CircularDependencyFromSubgraph.d.ts.map +1 -0
- package/dist/test/fixtures/CircularDependencyFromSubgraph.js +30 -0
- package/dist/test/fixtures/CircularDependencyFromSubgraph.js.map +1 -0
- package/dist/test/fixtures/CircularDependencyGraph.d.ts +5 -0
- package/dist/test/fixtures/CircularDependencyGraph.d.ts.map +1 -0
- package/dist/test/fixtures/CircularDependencyGraph.js +29 -0
- package/dist/test/fixtures/CircularDependencyGraph.js.map +1 -0
- package/dist/test/fixtures/CircularDependencyGraph2.d.ts +7 -0
- package/dist/test/fixtures/CircularDependencyGraph2.d.ts.map +1 -0
- package/dist/test/fixtures/CircularDependencyGraph2.js +47 -0
- package/dist/test/fixtures/CircularDependencyGraph2.js.map +1 -0
- package/dist/test/fixtures/GraphWithMultipleDependencies.d.ts +8 -0
- package/dist/test/fixtures/GraphWithMultipleDependencies.d.ts.map +1 -0
- package/dist/test/fixtures/GraphWithMultipleDependencies.js +56 -0
- package/dist/test/fixtures/GraphWithMultipleDependencies.js.map +1 -0
- package/dist/test/fixtures/SubgraphWithCircularDependency.d.ts +6 -0
- package/dist/test/fixtures/SubgraphWithCircularDependency.d.ts.map +1 -0
- package/dist/test/fixtures/SubgraphWithCircularDependency.js +39 -0
- package/dist/test/fixtures/SubgraphWithCircularDependency.js.map +1 -0
- package/documentation/package-lock.json +7 -7
- package/documentation/package.json +1 -1
- package/documentation/src/theme/SearchBar.js +3 -4
- package/package.json +1 -1
- package/src/graph/CircularDependenciesDetector.ts +27 -0
- package/src/graph/ObjectGraph.ts +7 -2
- package/src/graph/PropertyRetriever.ts +32 -7
- package/src/graph/PropertyRetrieverDelegate.ts +7 -1
- package/src/graph/VisitedNodes.ts +30 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare class CircularDependenciesDetector {
|
|
2
|
+
graphName: string;
|
|
3
|
+
private visitedNodes;
|
|
4
|
+
constructor(graphName: string);
|
|
5
|
+
visit(graphName: string, dependencyName: string): boolean;
|
|
6
|
+
hasCircularDependencies(): boolean;
|
|
7
|
+
getDependencies(): string[];
|
|
8
|
+
get firstDependencyName(): string;
|
|
9
|
+
clear(): void;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=CircularDependenciesDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CircularDependenciesDetector.d.ts","sourceRoot":"","sources":["../../../src/graph/CircularDependenciesDetector.ts"],"names":[],"mappings":"AAEA,qBAAa,4BAA4B;IAGpB,SAAS,EAAE,MAAM;IAFpC,OAAO,CAAC,YAAY,CAAsB;gBAEvB,SAAS,EAAE,MAAM;IAE7B,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO;IAIzD,uBAAuB,IAAI,OAAO;IAIlC,eAAe,IAAI,MAAM,EAAE;IAIlC,IAAW,mBAAmB,IAAI,MAAM,CAEvC;IAEM,KAAK;CAGb"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CircularDependenciesDetector = void 0;
|
|
4
|
+
const VisitedNodes_1 = require("./VisitedNodes");
|
|
5
|
+
class CircularDependenciesDetector {
|
|
6
|
+
constructor(graphName) {
|
|
7
|
+
this.graphName = graphName;
|
|
8
|
+
this.visitedNodes = new VisitedNodes_1.VisitedNodes();
|
|
9
|
+
}
|
|
10
|
+
visit(graphName, dependencyName) {
|
|
11
|
+
return this.visitedNodes.visit(graphName, dependencyName);
|
|
12
|
+
}
|
|
13
|
+
hasCircularDependencies() {
|
|
14
|
+
return this.visitedNodes.isCircularPath();
|
|
15
|
+
}
|
|
16
|
+
getDependencies() {
|
|
17
|
+
return this.visitedNodes.getNodes();
|
|
18
|
+
}
|
|
19
|
+
get firstDependencyName() {
|
|
20
|
+
return this.visitedNodes.getNodes()[0];
|
|
21
|
+
}
|
|
22
|
+
clear() {
|
|
23
|
+
this.visitedNodes.clear();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.CircularDependenciesDetector = CircularDependenciesDetector;
|
|
27
|
+
//# sourceMappingURL=CircularDependenciesDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CircularDependenciesDetector.js","sourceRoot":"","sources":["../../../src/graph/CircularDependenciesDetector.ts"],"names":[],"mappings":";;;AAAA,iDAA8C;AAE9C,MAAa,4BAA4B;IAGvC,YAAmB,SAAiB;QAAjB,cAAS,GAAT,SAAS,CAAQ;QAF5B,iBAAY,GAAG,IAAI,2BAAY,EAAE,CAAC;IAEH,CAAC;IAEjC,KAAK,CAAC,SAAiB,EAAE,cAAsB;QACpD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC5D,CAAC;IAEM,uBAAuB;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;IAC5C,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;IACtC,CAAC;IAED,IAAW,mBAAmB;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;CACF;AAxBD,oEAwBC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Graph } from './Graph';
|
|
2
2
|
import { Constructable } from '../types';
|
|
3
|
+
import { CircularDependenciesDetector } from './CircularDependenciesDetector';
|
|
3
4
|
export declare abstract class ObjectGraph<T = unknown> implements Graph {
|
|
4
5
|
protected _props?: T | undefined;
|
|
5
6
|
private propertyRetriever;
|
|
6
7
|
get name(): string;
|
|
7
8
|
constructor(_props?: T | undefined);
|
|
8
|
-
retrieve<Dependency>(property: string, receiver?: unknown): Dependency | undefined;
|
|
9
|
+
retrieve<Dependency>(property: string, receiver?: unknown, detector?: CircularDependenciesDetector): Dependency | undefined;
|
|
9
10
|
onBind(_target: any): void;
|
|
10
11
|
}
|
|
11
12
|
export declare function isGraph(object: Constructable<ObjectGraph> | any): object is Constructable<ObjectGraph>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectGraph.d.ts","sourceRoot":"","sources":["../../../src/graph/ObjectGraph.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"ObjectGraph.d.ts","sourceRoot":"","sources":["../../../src/graph/ObjectGraph.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAE9E,8BAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,KAAK;IAQjD,SAAS,CAAC,MAAM,CAAC;IAP7B,OAAO,CAAC,iBAAiB,CAA+B;IAExD,IACI,IAAI,IAAI,MAAM,CAEjB;gBAEqB,MAAM,CAAC,eAAG;IAIhC,QAAQ,CAAC,UAAU,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,OAAO,EAClB,QAAQ,CAAC,EAAE,4BAA4B,GACtC,UAAU,GAAG,SAAS;IAIzB,MAAM,CAAC,OAAO,EAAE,GAAG;CAGpB;AAID,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,MAAM,IAAI,aAAa,CAAC,WAAW,CAAC,CAEtG"}
|
|
@@ -26,8 +26,8 @@ class ObjectGraph {
|
|
|
26
26
|
this.propertyRetriever = new PropertyRetriever_1.default(this);
|
|
27
27
|
(0, ProviderBinder_1.bindProviders)(this);
|
|
28
28
|
}
|
|
29
|
-
retrieve(property, receiver) {
|
|
30
|
-
return this.propertyRetriever.retrieve(property, receiver);
|
|
29
|
+
retrieve(property, receiver, detector) {
|
|
30
|
+
return this.propertyRetriever.retrieve(property, receiver, detector);
|
|
31
31
|
}
|
|
32
32
|
onBind(_target) {
|
|
33
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectGraph.js","sourceRoot":"","sources":["../../../src/graph/ObjectGraph.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,mCAAkC;AAClC,oEAA4C;AAC5C,qDAAiD;AAEjD,4EAAoD;
|
|
1
|
+
{"version":3,"file":"ObjectGraph.js","sourceRoot":"","sources":["../../../src/graph/ObjectGraph.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,mCAAkC;AAClC,oEAA4C;AAC5C,qDAAiD;AAEjD,4EAAoD;AAIpD,MAAsB,WAAW;IAG/B,IACI,IAAI;QACN,OAAO,IAAA,iBAAQ,EAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,YAAsB,MAAU;QAAV,WAAM,GAAN,MAAM,CAAI;QAPxB,sBAAiB,GAAG,IAAI,2BAAiB,CAAC,IAAI,CAAC,CAAC;QAQtD,IAAA,8BAAa,EAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,QAAQ,CACN,QAAgB,EAChB,QAAkB,EAClB,QAAuC;QAEvC,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAA2B,CAAC;IACjG,CAAC;IAED,MAAM,CAAC,OAAY;IAEnB,CAAC;CACF;AApBC;IAAC,IAAA,iBAAO,GAAE;;;uCAGT;AANH,kCAuBC;AAED,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,mBAAmB,EAAE,aAAa,CAAC,CAAC;AAE7D,SAAgB,OAAO,CAAC,MAAwC;IAC9D,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,KAAK,aAAa,CAAC;AACpE,CAAC;AAFD,0BAEC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Graph } from './Graph';
|
|
2
|
+
import { CircularDependenciesDetector } from './CircularDependenciesDetector';
|
|
2
3
|
export default class PropertyRetriever {
|
|
3
4
|
private graph;
|
|
4
5
|
constructor(graph: Graph);
|
|
5
|
-
retrieve(property: string, receiver?: unknown): unknown | undefined;
|
|
6
|
+
retrieve(property: string, receiver?: unknown, maybeDetector?: CircularDependenciesDetector): unknown | undefined;
|
|
6
7
|
private getFromSubgraphs;
|
|
7
8
|
}
|
|
8
9
|
//# sourceMappingURL=PropertyRetriever.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropertyRetriever.d.ts","sourceRoot":"","sources":["../../../src/graph/PropertyRetriever.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"PropertyRetriever.d.ts","sourceRoot":"","sources":["../../../src/graph/PropertyRetriever.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAE9E,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACxB,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,KAAK;IAEhC,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,OAAO,EAClB,aAAa,CAAC,EAAE,4BAA4B,GAC3C,OAAO,GAAG,SAAS;IAsCtB,OAAO,CAAC,gBAAgB;CAUzB"}
|
|
@@ -5,21 +5,32 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const GraphRegistry_1 = __importDefault(require("./registry/GraphRegistry"));
|
|
7
7
|
const ProvidedPropertiesStore_1 = __importDefault(require("../ProvidedPropertiesStore"));
|
|
8
|
+
const CircularDependenciesDetector_1 = require("./CircularDependenciesDetector");
|
|
8
9
|
class PropertyRetriever {
|
|
9
10
|
constructor(graph) {
|
|
10
11
|
this.graph = graph;
|
|
11
12
|
}
|
|
12
|
-
retrieve(property, receiver) {
|
|
13
|
+
retrieve(property, receiver, maybeDetector) {
|
|
13
14
|
const mangledPropertyKey = ProvidedPropertiesStore_1.default.getMangledProperty(this.graph, property);
|
|
14
|
-
|
|
15
|
+
const circularDependenciesDetector = maybeDetector !== null && maybeDetector !== void 0 ? maybeDetector : new CircularDependenciesDetector_1.CircularDependenciesDetector(this.graph.name);
|
|
16
|
+
if (mangledPropertyKey
|
|
17
|
+
&& mangledPropertyKey in this.graph
|
|
18
|
+
&& circularDependenciesDetector.visit(this.graph.name, property)) {
|
|
15
19
|
const proxiedGraph = new Proxy(this.graph, {
|
|
16
20
|
get(graph, dependencyName) {
|
|
17
|
-
return graph.retrieve(dependencyName);
|
|
21
|
+
return graph.retrieve(dependencyName, receiver, circularDependenciesDetector);
|
|
18
22
|
},
|
|
19
23
|
});
|
|
20
|
-
|
|
24
|
+
const resolved = Reflect.get(this.graph, mangledPropertyKey, receiver)(proxiedGraph);
|
|
25
|
+
circularDependenciesDetector.clear();
|
|
26
|
+
return resolved;
|
|
21
27
|
}
|
|
22
|
-
|
|
28
|
+
if (circularDependenciesDetector.hasCircularDependencies()) {
|
|
29
|
+
throw new Error(`Could not resolve ${circularDependenciesDetector.firstDependencyName}`
|
|
30
|
+
+ ` from ${circularDependenciesDetector.graphName} because of a circular dependency:`
|
|
31
|
+
+ ` ${circularDependenciesDetector.getDependencies().join(' -> ')}`);
|
|
32
|
+
}
|
|
33
|
+
const results = this.getFromSubgraphs(property, circularDependenciesDetector, receiver);
|
|
23
34
|
if (results.length === 1)
|
|
24
35
|
return results[0];
|
|
25
36
|
if (results.length > 1) {
|
|
@@ -28,10 +39,10 @@ class PropertyRetriever {
|
|
|
28
39
|
}
|
|
29
40
|
return undefined;
|
|
30
41
|
}
|
|
31
|
-
getFromSubgraphs(property, receiver) {
|
|
42
|
+
getFromSubgraphs(property, circularDependenciesDetector, receiver) {
|
|
32
43
|
const subgraphs = GraphRegistry_1.default.getSubgraphs(this.graph);
|
|
33
44
|
return subgraphs
|
|
34
|
-
.map((subgraph) => subgraph.retrieve(property, receiver))
|
|
45
|
+
.map((subgraph) => subgraph.retrieve(property, receiver, circularDependenciesDetector))
|
|
35
46
|
.filter((result) => result !== undefined);
|
|
36
47
|
}
|
|
37
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropertyRetriever.js","sourceRoot":"","sources":["../../../src/graph/PropertyRetriever.ts"],"names":[],"mappings":";;;;;AAAA,6EAAqD;AAErD,yFAAiE;
|
|
1
|
+
{"version":3,"file":"PropertyRetriever.js","sourceRoot":"","sources":["../../../src/graph/PropertyRetriever.ts"],"names":[],"mappings":";;;;;AAAA,6EAAqD;AAErD,yFAAiE;AACjE,iFAA8E;AAE9E,MAAqB,iBAAiB;IACpC,YAAoB,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;IAAI,CAAC;IAErC,QAAQ,CACN,QAAgB,EAChB,QAAkB,EAClB,aAA4C;QAE5C,MAAM,kBAAkB,GAAG,iCAAuB,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5F,MAAM,4BAA4B,GAAG,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,IAAI,2DAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAExG,IACE,kBAAkB;eACf,kBAAkB,IAAI,IAAI,CAAC,KAAK;eAChC,4BAA4B,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,EAChE;YACA,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE;gBACzC,GAAG,CAAC,KAAY,EAAE,cAAsB;oBACtC,OAAO,KAAK,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;gBAChF,CAAC;aACF,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,kBAAkB,EAAE,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC;YACrF,4BAA4B,CAAC,KAAK,EAAE,CAAC;YACrC,OAAO,QAAQ,CAAC;SACjB;QAED,IAAI,4BAA4B,CAAC,uBAAuB,EAAE,EAAE;YAC1D,MAAM,IAAI,KAAK,CACb,qBAAqB,4BAA4B,CAAC,mBAAmB,EAAE;kBACpE,SAAS,4BAA4B,CAAC,SAAS,oCAAoC;kBACnF,IAAI,4BAA4B,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CACrE,CAAC;SACH;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,4BAA4B,EAAE,QAAQ,CAAC,CAAC;QACxF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,MAAM,IAAI,KAAK,CACb,2CAA2C,QAAQ,GAAG;kBACpD,sGAAsG,CACzG,CAAC;SACH;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,gBAAgB,CACtB,QAAgB,EAChB,4BAA0D,EAC1D,QAAiB;QAEjB,MAAM,SAAS,GAAG,uBAAa,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzD,OAAO,SAAS;aACb,GAAG,CAAC,CAAC,QAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;aAC7F,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAC9C,CAAC;CACF;AAvDD,oCAuDC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { CircularDependenciesDetector } from './CircularDependenciesDetector';
|
|
1
2
|
interface PropertyRetrieverDelegate {
|
|
2
|
-
retrieve: (property: string, receiver?: unknown) => unknown | undefined;
|
|
3
|
+
retrieve: (property: string, receiver?: unknown, circularDependenciesDetector?: CircularDependenciesDetector) => unknown | undefined;
|
|
3
4
|
}
|
|
4
5
|
export default PropertyRetrieverDelegate;
|
|
5
6
|
//# sourceMappingURL=PropertyRetrieverDelegate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropertyRetrieverDelegate.d.ts","sourceRoot":"","sources":["../../../src/graph/PropertyRetrieverDelegate.ts"],"names":[],"mappings":"AAAA,UAAU,yBAAyB;IACjC,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"PropertyRetrieverDelegate.d.ts","sourceRoot":"","sources":["../../../src/graph/PropertyRetrieverDelegate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAE9E,UAAU,yBAAyB;IACjC,QAAQ,EAAE,CACR,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,OAAO,EAClB,4BAA4B,CAAC,EAAE,4BAA4B,KACxD,OAAO,GAAG,SAAS,CAAC;CAC1B;AAED,eAAe,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare class VisitedNodes {
|
|
2
|
+
private visitedNodes;
|
|
3
|
+
private visitPath;
|
|
4
|
+
visit(graphName: string, dependencyName: string): boolean;
|
|
5
|
+
canVisit(graphName: string, dependencyName: string): boolean;
|
|
6
|
+
isCircularPath(): boolean;
|
|
7
|
+
getNodes(): string[];
|
|
8
|
+
clear(): void;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=VisitedNodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VisitedNodes.d.ts","sourceRoot":"","sources":["../../../src/graph/VisitedNodes.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,SAAS,CAAgB;IAE1B,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO;IASzD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IAIlD,cAAc,IAAI,OAAO;IAIzB,QAAQ,IAAI,MAAM,EAAE;IAIpB,KAAK;CAIb"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VisitedNodes = void 0;
|
|
4
|
+
class VisitedNodes {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.visitedNodes = new Set();
|
|
7
|
+
this.visitPath = [];
|
|
8
|
+
}
|
|
9
|
+
visit(graphName, dependencyName) {
|
|
10
|
+
this.visitPath.push(dependencyName);
|
|
11
|
+
if (this.canVisit(graphName, dependencyName)) {
|
|
12
|
+
this.visitedNodes.add(`${graphName}.${dependencyName}`);
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
canVisit(graphName, dependencyName) {
|
|
18
|
+
return !this.visitedNodes.has(`${graphName}.${dependencyName}`);
|
|
19
|
+
}
|
|
20
|
+
isCircularPath() {
|
|
21
|
+
return this.visitedNodes.size < this.visitPath.length;
|
|
22
|
+
}
|
|
23
|
+
getNodes() {
|
|
24
|
+
return this.visitPath;
|
|
25
|
+
}
|
|
26
|
+
clear() {
|
|
27
|
+
this.visitedNodes.clear();
|
|
28
|
+
this.visitPath.length = 0;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.VisitedNodes = VisitedNodes;
|
|
32
|
+
//# sourceMappingURL=VisitedNodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VisitedNodes.js","sourceRoot":"","sources":["../../../src/graph/VisitedNodes.ts"],"names":[],"mappings":";;;AAAA,MAAa,YAAY;IAAzB;QACU,iBAAY,GAAG,IAAI,GAAG,EAAyB,CAAC;QAChD,cAAS,GAAa,EAAE,CAAC;IA2BnC,CAAC;IAzBQ,KAAK,CAAC,SAAiB,EAAE,cAAsB;QACpD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE;YAC5C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,SAAS,IAAI,cAAc,EAAE,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,QAAQ,CAAC,SAAiB,EAAE,cAAsB;QACvD,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,SAAS,IAAI,cAAc,EAAE,CAAC,CAAC;IAClE,CAAC;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACxD,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5B,CAAC;CACF;AA7BD,oCA6BC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CircularDependencyFromSubgraph.d.ts","sourceRoot":"","sources":["../../../test/fixtures/CircularDependencyFromSubgraph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,WAAW,EAAY,MAAM,WAAW,CAAC;AAGzD,qBACa,8BAA+B,SAAQ,WAAW;IAE7D,IAAI,CAAC,IAAI,EAAE,GAAG;CAGf"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.CircularDependencyFromSubgraph = void 0;
|
|
13
|
+
const src_1 = require("../../src");
|
|
14
|
+
const SubgraphWithCircularDependency_1 = require("./SubgraphWithCircularDependency");
|
|
15
|
+
let CircularDependencyFromSubgraph = class CircularDependencyFromSubgraph extends src_1.ObjectGraph {
|
|
16
|
+
dep1(dep2) {
|
|
17
|
+
return dep2;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
__decorate([
|
|
21
|
+
(0, src_1.Provides)(),
|
|
22
|
+
__metadata("design:type", Function),
|
|
23
|
+
__metadata("design:paramtypes", [Object]),
|
|
24
|
+
__metadata("design:returntype", void 0)
|
|
25
|
+
], CircularDependencyFromSubgraph.prototype, "dep1", null);
|
|
26
|
+
CircularDependencyFromSubgraph = __decorate([
|
|
27
|
+
(0, src_1.Graph)({ subgraphs: [SubgraphWithCircularDependency_1.SubgraphWithCircularDependency] })
|
|
28
|
+
], CircularDependencyFromSubgraph);
|
|
29
|
+
exports.CircularDependencyFromSubgraph = CircularDependencyFromSubgraph;
|
|
30
|
+
//# sourceMappingURL=CircularDependencyFromSubgraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CircularDependencyFromSubgraph.js","sourceRoot":"","sources":["../../../test/fixtures/CircularDependencyFromSubgraph.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAyD;AACzD,qFAAkF;AAG3E,IAAM,8BAA8B,GAApC,MAAM,8BAA+B,SAAQ,iBAAW;IAE7D,IAAI,CAAC,IAAS;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAJC;IAAC,IAAA,cAAQ,GAAE;;;;0DAGV;AAJU,8BAA8B;IAD1C,IAAA,WAAK,EAAC,EAAE,SAAS,EAAE,CAAC,+DAA8B,CAAC,EAAE,CAAC;GAC1C,8BAA8B,CAK1C;AALY,wEAA8B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CircularDependencyGraph.d.ts","sourceRoot":"","sources":["../../../test/fixtures/CircularDependencyGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,WAAW,EAAY,MAAM,WAAW,CAAC;AAEzD,qBACa,uBAAwB,SAAQ,WAAW;IAEtD,OAAO,CAAC,OAAO,EAAE,MAAM;CAGxB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.CircularDependencyGraph = void 0;
|
|
13
|
+
const src_1 = require("../../src");
|
|
14
|
+
let CircularDependencyGraph = class CircularDependencyGraph extends src_1.ObjectGraph {
|
|
15
|
+
aString(aString) {
|
|
16
|
+
return aString;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
__decorate([
|
|
20
|
+
(0, src_1.Provides)(),
|
|
21
|
+
__metadata("design:type", Function),
|
|
22
|
+
__metadata("design:paramtypes", [String]),
|
|
23
|
+
__metadata("design:returntype", void 0)
|
|
24
|
+
], CircularDependencyGraph.prototype, "aString", null);
|
|
25
|
+
CircularDependencyGraph = __decorate([
|
|
26
|
+
(0, src_1.Graph)()
|
|
27
|
+
], CircularDependencyGraph);
|
|
28
|
+
exports.CircularDependencyGraph = CircularDependencyGraph;
|
|
29
|
+
//# sourceMappingURL=CircularDependencyGraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CircularDependencyGraph.js","sourceRoot":"","sources":["../../../test/fixtures/CircularDependencyGraph.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAyD;AAGlD,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,iBAAW;IAEtD,OAAO,CAAC,OAAe;QACrB,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAA;AAJC;IAAC,IAAA,cAAQ,GAAE;;;;sDAGV;AAJU,uBAAuB;IADnC,IAAA,WAAK,GAAE;GACK,uBAAuB,CAKnC;AALY,0DAAuB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CircularDependencyGraph2.d.ts","sourceRoot":"","sources":["../../../test/fixtures/CircularDependencyGraph2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,WAAW,EAAY,MAAM,WAAW,CAAC;AAEzD,qBACa,wBAAyB,SAAQ,WAAW;IAEvD,IAAI,CAAC,IAAI,EAAE,GAAG;IAKd,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG;IAKpB,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG;CAGrB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.CircularDependencyGraph2 = void 0;
|
|
13
|
+
const src_1 = require("../../src");
|
|
14
|
+
let CircularDependencyGraph2 = class CircularDependencyGraph2 extends src_1.ObjectGraph {
|
|
15
|
+
dep1(dep2) {
|
|
16
|
+
return dep2;
|
|
17
|
+
}
|
|
18
|
+
dep2(dep3) {
|
|
19
|
+
return dep3;
|
|
20
|
+
}
|
|
21
|
+
dep3(dep1) {
|
|
22
|
+
return dep1;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
__decorate([
|
|
26
|
+
(0, src_1.Provides)(),
|
|
27
|
+
__metadata("design:type", Function),
|
|
28
|
+
__metadata("design:paramtypes", [Object]),
|
|
29
|
+
__metadata("design:returntype", void 0)
|
|
30
|
+
], CircularDependencyGraph2.prototype, "dep1", null);
|
|
31
|
+
__decorate([
|
|
32
|
+
(0, src_1.Provides)(),
|
|
33
|
+
__metadata("design:type", Function),
|
|
34
|
+
__metadata("design:paramtypes", [Object]),
|
|
35
|
+
__metadata("design:returntype", Object)
|
|
36
|
+
], CircularDependencyGraph2.prototype, "dep2", null);
|
|
37
|
+
__decorate([
|
|
38
|
+
(0, src_1.Provides)(),
|
|
39
|
+
__metadata("design:type", Function),
|
|
40
|
+
__metadata("design:paramtypes", [Object]),
|
|
41
|
+
__metadata("design:returntype", Object)
|
|
42
|
+
], CircularDependencyGraph2.prototype, "dep3", null);
|
|
43
|
+
CircularDependencyGraph2 = __decorate([
|
|
44
|
+
(0, src_1.Graph)()
|
|
45
|
+
], CircularDependencyGraph2);
|
|
46
|
+
exports.CircularDependencyGraph2 = CircularDependencyGraph2;
|
|
47
|
+
//# sourceMappingURL=CircularDependencyGraph2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CircularDependencyGraph2.js","sourceRoot":"","sources":["../../../test/fixtures/CircularDependencyGraph2.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAyD;AAGlD,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,iBAAW;IAEvD,IAAI,CAAC,IAAS;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,IAAI,CAAC,IAAS;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,IAAI,CAAC,IAAS;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAdC;IAAC,IAAA,cAAQ,GAAE;;;;oDAGV;AAED;IAAC,IAAA,cAAQ,GAAE;;;;oDAGV;AAED;IAAC,IAAA,cAAQ,GAAE;;;;oDAGV;AAdU,wBAAwB;IADpC,IAAA,WAAK,GAAE;GACK,wBAAwB,CAepC;AAfY,4DAAwB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ObjectGraph } from '../../src';
|
|
2
|
+
export declare class GraphWithMultipleDependencies extends ObjectGraph {
|
|
3
|
+
theDep(prefix: string, suffix: string): string;
|
|
4
|
+
prefix(noopDep: string): string;
|
|
5
|
+
suffix(noopDep: string): string;
|
|
6
|
+
noopDep(): string;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=GraphWithMultipleDependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphWithMultipleDependencies.d.ts","sourceRoot":"","sources":["../../../test/fixtures/GraphWithMultipleDependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,WAAW,EAAY,MAAM,WAAW,CAAC;AAEzD,qBACa,6BAA8B,SAAQ,WAAW;IAE5D,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAKrC,MAAM,CAAC,OAAO,EAAE,MAAM;IAKtB,MAAM,CAAC,OAAO,EAAE,MAAM;IAKtB,OAAO,IAAI,MAAM;CAGlB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.GraphWithMultipleDependencies = void 0;
|
|
13
|
+
const src_1 = require("../../src");
|
|
14
|
+
let GraphWithMultipleDependencies = class GraphWithMultipleDependencies extends src_1.ObjectGraph {
|
|
15
|
+
theDep(prefix, suffix) {
|
|
16
|
+
return prefix + suffix;
|
|
17
|
+
}
|
|
18
|
+
prefix(noopDep) {
|
|
19
|
+
return `prefix${noopDep}`;
|
|
20
|
+
}
|
|
21
|
+
suffix(noopDep) {
|
|
22
|
+
return `Suffix${noopDep}`;
|
|
23
|
+
}
|
|
24
|
+
noopDep() {
|
|
25
|
+
return '';
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, src_1.Provides)(),
|
|
30
|
+
__metadata("design:type", Function),
|
|
31
|
+
__metadata("design:paramtypes", [String, String]),
|
|
32
|
+
__metadata("design:returntype", void 0)
|
|
33
|
+
], GraphWithMultipleDependencies.prototype, "theDep", null);
|
|
34
|
+
__decorate([
|
|
35
|
+
(0, src_1.Provides)(),
|
|
36
|
+
__metadata("design:type", Function),
|
|
37
|
+
__metadata("design:paramtypes", [String]),
|
|
38
|
+
__metadata("design:returntype", void 0)
|
|
39
|
+
], GraphWithMultipleDependencies.prototype, "prefix", null);
|
|
40
|
+
__decorate([
|
|
41
|
+
(0, src_1.Provides)(),
|
|
42
|
+
__metadata("design:type", Function),
|
|
43
|
+
__metadata("design:paramtypes", [String]),
|
|
44
|
+
__metadata("design:returntype", void 0)
|
|
45
|
+
], GraphWithMultipleDependencies.prototype, "suffix", null);
|
|
46
|
+
__decorate([
|
|
47
|
+
(0, src_1.Provides)(),
|
|
48
|
+
__metadata("design:type", Function),
|
|
49
|
+
__metadata("design:paramtypes", []),
|
|
50
|
+
__metadata("design:returntype", String)
|
|
51
|
+
], GraphWithMultipleDependencies.prototype, "noopDep", null);
|
|
52
|
+
GraphWithMultipleDependencies = __decorate([
|
|
53
|
+
(0, src_1.Graph)()
|
|
54
|
+
], GraphWithMultipleDependencies);
|
|
55
|
+
exports.GraphWithMultipleDependencies = GraphWithMultipleDependencies;
|
|
56
|
+
//# sourceMappingURL=GraphWithMultipleDependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphWithMultipleDependencies.js","sourceRoot":"","sources":["../../../test/fixtures/GraphWithMultipleDependencies.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAyD;AAGlD,IAAM,6BAA6B,GAAnC,MAAM,6BAA8B,SAAQ,iBAAW;IAE5D,MAAM,CAAC,MAAc,EAAE,MAAc;QACnC,OAAO,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAGD,MAAM,CAAC,OAAe;QACpB,OAAO,SAAS,OAAO,EAAE,CAAC;IAC5B,CAAC;IAGD,MAAM,CAAC,OAAe;QACpB,OAAO,SAAS,OAAO,EAAE,CAAC;IAC5B,CAAC;IAGD,OAAO;QACL,OAAO,EAAE,CAAC;IACZ,CAAC;CACF,CAAA;AAnBC;IAAC,IAAA,cAAQ,GAAE;;;;2DAGV;AAED;IAAC,IAAA,cAAQ,GAAE;;;;2DAGV;AAED;IAAC,IAAA,cAAQ,GAAE;;;;2DAGV;AAED;IAAC,IAAA,cAAQ,GAAE;;;;4DAGV;AAnBU,6BAA6B;IADzC,IAAA,WAAK,GAAE;GACK,6BAA6B,CAoBzC;AApBY,sEAA6B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubgraphWithCircularDependency.d.ts","sourceRoot":"","sources":["../../../test/fixtures/SubgraphWithCircularDependency.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EAGZ,MAAM,WAAW,CAAC;AAEnB,qBACa,8BAA+B,SAAQ,WAAW;IAE7D,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG;IAKpB,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG;CAGrB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SubgraphWithCircularDependency = void 0;
|
|
13
|
+
const src_1 = require("../../src");
|
|
14
|
+
let SubgraphWithCircularDependency = class SubgraphWithCircularDependency extends src_1.ObjectGraph {
|
|
15
|
+
dep2(dep3) {
|
|
16
|
+
return dep3;
|
|
17
|
+
}
|
|
18
|
+
dep3(dep2) {
|
|
19
|
+
return dep2;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, src_1.Provides)(),
|
|
24
|
+
__metadata("design:type", Function),
|
|
25
|
+
__metadata("design:paramtypes", [Object]),
|
|
26
|
+
__metadata("design:returntype", Object)
|
|
27
|
+
], SubgraphWithCircularDependency.prototype, "dep2", null);
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, src_1.Provides)(),
|
|
30
|
+
__metadata("design:type", Function),
|
|
31
|
+
__metadata("design:paramtypes", [Object]),
|
|
32
|
+
__metadata("design:returntype", Object)
|
|
33
|
+
], SubgraphWithCircularDependency.prototype, "dep3", null);
|
|
34
|
+
SubgraphWithCircularDependency = __decorate([
|
|
35
|
+
(0, src_1.Singleton)(),
|
|
36
|
+
(0, src_1.Graph)()
|
|
37
|
+
], SubgraphWithCircularDependency);
|
|
38
|
+
exports.SubgraphWithCircularDependency = SubgraphWithCircularDependency;
|
|
39
|
+
//# sourceMappingURL=SubgraphWithCircularDependency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubgraphWithCircularDependency.js","sourceRoot":"","sources":["../../../test/fixtures/SubgraphWithCircularDependency.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAKmB;AAGZ,IAAM,8BAA8B,GAApC,MAAM,8BAA+B,SAAQ,iBAAW;IAE7D,IAAI,CAAC,IAAS;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,IAAI,CAAC,IAAS;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AATC;IAAC,IAAA,cAAQ,GAAE;;;;0DAGV;AAED;IAAC,IAAA,cAAQ,GAAE;;;;0DAGV;AATU,8BAA8B;IAD1C,IAAA,eAAS,GAAE;IAAE,IAAA,WAAK,GAAE;GACR,8BAA8B,CAU1C;AAVY,wEAA8B"}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"@docusaurus/preset-classic": "2.2.0",
|
|
13
13
|
"@mdx-js/react": "^1.6.22",
|
|
14
14
|
"clsx": "^1.2.1",
|
|
15
|
-
"enhancedocs-search": "^0.1.
|
|
15
|
+
"enhancedocs-search": "^0.1.5",
|
|
16
16
|
"prism-react-renderer": "^1.3.5",
|
|
17
17
|
"react": "^17.0.2",
|
|
18
18
|
"react-dom": "^17.0.2"
|
|
@@ -5601,9 +5601,9 @@
|
|
|
5601
5601
|
}
|
|
5602
5602
|
},
|
|
5603
5603
|
"node_modules/enhancedocs-search": {
|
|
5604
|
-
"version": "0.1.
|
|
5605
|
-
"resolved": "https://registry.npmjs.org/enhancedocs-search/-/enhancedocs-search-0.1.
|
|
5606
|
-
"integrity": "sha512-
|
|
5604
|
+
"version": "0.1.5",
|
|
5605
|
+
"resolved": "https://registry.npmjs.org/enhancedocs-search/-/enhancedocs-search-0.1.5.tgz",
|
|
5606
|
+
"integrity": "sha512-ChDJrxRSM07inFVrkMwmPYfBRzY5grJ8LI5cJAjHI3crNTf5hh4oJh4R/pZ9uN+tbmht9EkuLu+zpHu1Rdxfiw==",
|
|
5607
5607
|
"dependencies": {
|
|
5608
5608
|
"react-markdown": "^8.0.6",
|
|
5609
5609
|
"react-modal": "^3.16.1",
|
|
@@ -17539,9 +17539,9 @@
|
|
|
17539
17539
|
}
|
|
17540
17540
|
},
|
|
17541
17541
|
"enhancedocs-search": {
|
|
17542
|
-
"version": "0.1.
|
|
17543
|
-
"resolved": "https://registry.npmjs.org/enhancedocs-search/-/enhancedocs-search-0.1.
|
|
17544
|
-
"integrity": "sha512-
|
|
17542
|
+
"version": "0.1.5",
|
|
17543
|
+
"resolved": "https://registry.npmjs.org/enhancedocs-search/-/enhancedocs-search-0.1.5.tgz",
|
|
17544
|
+
"integrity": "sha512-ChDJrxRSM07inFVrkMwmPYfBRzY5grJ8LI5cJAjHI3crNTf5hh4oJh4R/pZ9uN+tbmht9EkuLu+zpHu1Rdxfiw==",
|
|
17545
17545
|
"requires": {
|
|
17546
17546
|
"react-markdown": "^8.0.6",
|
|
17547
17547
|
"react-modal": "^3.16.1",
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @see https://docusaurus.io/docs/search#using-your-own-search
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
1
|
import React from 'react';
|
|
6
2
|
import EnhancedSearch from 'enhancedocs-search';
|
|
7
3
|
|
|
@@ -16,6 +12,9 @@ export default function SearchBarWrapper(props) {
|
|
|
16
12
|
accessToken: 'pk_b6c6de86cb63d0857b2a96b3f90ec2906be49358981ac67f'
|
|
17
13
|
}
|
|
18
14
|
}}
|
|
15
|
+
theme={{
|
|
16
|
+
primaryColor: '#B94BEE'
|
|
17
|
+
}}
|
|
19
18
|
{...props}
|
|
20
19
|
/>
|
|
21
20
|
);
|
package/package.json
CHANGED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { VisitedNodes } from './VisitedNodes';
|
|
2
|
+
|
|
3
|
+
export class CircularDependenciesDetector {
|
|
4
|
+
private visitedNodes = new VisitedNodes();
|
|
5
|
+
|
|
6
|
+
constructor(public graphName: string) {}
|
|
7
|
+
|
|
8
|
+
public visit(graphName: string, dependencyName: string): boolean {
|
|
9
|
+
return this.visitedNodes.visit(graphName, dependencyName);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
public hasCircularDependencies(): boolean {
|
|
13
|
+
return this.visitedNodes.isCircularPath();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
public getDependencies(): string[] {
|
|
17
|
+
return this.visitedNodes.getNodes();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public get firstDependencyName(): string {
|
|
21
|
+
return this.visitedNodes.getNodes()[0];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public clear() {
|
|
25
|
+
this.visitedNodes.clear();
|
|
26
|
+
}
|
|
27
|
+
}
|
package/src/graph/ObjectGraph.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { bindProviders } from './ProviderBinder';
|
|
|
4
4
|
import { Graph } from './Graph';
|
|
5
5
|
import PropertyRetriever from './PropertyRetriever';
|
|
6
6
|
import { Constructable } from '../types';
|
|
7
|
+
import { CircularDependenciesDetector } from './CircularDependenciesDetector';
|
|
7
8
|
|
|
8
9
|
export abstract class ObjectGraph<T = unknown> implements Graph {
|
|
9
10
|
private propertyRetriever = new PropertyRetriever(this);
|
|
@@ -17,8 +18,12 @@ export abstract class ObjectGraph<T = unknown> implements Graph {
|
|
|
17
18
|
bindProviders(this);
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
retrieve<Dependency>(
|
|
21
|
-
|
|
21
|
+
retrieve<Dependency>(
|
|
22
|
+
property: string,
|
|
23
|
+
receiver?: unknown,
|
|
24
|
+
detector?: CircularDependenciesDetector,
|
|
25
|
+
): Dependency | undefined {
|
|
26
|
+
return this.propertyRetriever.retrieve(property, receiver, detector) as Dependency | undefined;
|
|
22
27
|
}
|
|
23
28
|
|
|
24
29
|
onBind(_target: any) {
|
|
@@ -1,22 +1,43 @@
|
|
|
1
1
|
import graphRegistry from './registry/GraphRegistry';
|
|
2
2
|
import { Graph } from './Graph';
|
|
3
3
|
import providedPropertiesStore from '../ProvidedPropertiesStore';
|
|
4
|
+
import { CircularDependenciesDetector } from './CircularDependenciesDetector';
|
|
4
5
|
|
|
5
6
|
export default class PropertyRetriever {
|
|
6
7
|
constructor(private graph: Graph) { }
|
|
7
8
|
|
|
8
|
-
retrieve(
|
|
9
|
+
retrieve(
|
|
10
|
+
property: string,
|
|
11
|
+
receiver?: unknown,
|
|
12
|
+
maybeDetector?: CircularDependenciesDetector,
|
|
13
|
+
): unknown | undefined {
|
|
9
14
|
const mangledPropertyKey = providedPropertiesStore.getMangledProperty(this.graph, property);
|
|
10
|
-
|
|
15
|
+
const circularDependenciesDetector = maybeDetector ?? new CircularDependenciesDetector(this.graph.name);
|
|
16
|
+
|
|
17
|
+
if (
|
|
18
|
+
mangledPropertyKey
|
|
19
|
+
&& mangledPropertyKey in this.graph
|
|
20
|
+
&& circularDependenciesDetector.visit(this.graph.name, property)
|
|
21
|
+
) {
|
|
11
22
|
const proxiedGraph = new Proxy(this.graph, {
|
|
12
23
|
get(graph: Graph, dependencyName: string) {
|
|
13
|
-
return graph.retrieve(dependencyName);
|
|
24
|
+
return graph.retrieve(dependencyName, receiver, circularDependenciesDetector);
|
|
14
25
|
},
|
|
15
26
|
});
|
|
16
|
-
|
|
27
|
+
const resolved = Reflect.get(this.graph, mangledPropertyKey, receiver)(proxiedGraph);
|
|
28
|
+
circularDependenciesDetector.clear();
|
|
29
|
+
return resolved;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (circularDependenciesDetector.hasCircularDependencies()) {
|
|
33
|
+
throw new Error(
|
|
34
|
+
`Could not resolve ${circularDependenciesDetector.firstDependencyName}`
|
|
35
|
+
+ ` from ${circularDependenciesDetector.graphName} because of a circular dependency:`
|
|
36
|
+
+ ` ${circularDependenciesDetector.getDependencies().join(' -> ')}`,
|
|
37
|
+
);
|
|
17
38
|
}
|
|
18
39
|
|
|
19
|
-
const results = this.getFromSubgraphs(property, receiver);
|
|
40
|
+
const results = this.getFromSubgraphs(property, circularDependenciesDetector, receiver);
|
|
20
41
|
if (results.length === 1) return results[0];
|
|
21
42
|
if (results.length > 1) {
|
|
22
43
|
throw new Error(
|
|
@@ -27,10 +48,14 @@ export default class PropertyRetriever {
|
|
|
27
48
|
return undefined;
|
|
28
49
|
}
|
|
29
50
|
|
|
30
|
-
private getFromSubgraphs(
|
|
51
|
+
private getFromSubgraphs(
|
|
52
|
+
property: string,
|
|
53
|
+
circularDependenciesDetector: CircularDependenciesDetector,
|
|
54
|
+
receiver: unknown,
|
|
55
|
+
): unknown[] {
|
|
31
56
|
const subgraphs = graphRegistry.getSubgraphs(this.graph);
|
|
32
57
|
return subgraphs
|
|
33
|
-
.map((subgraph: Graph) => subgraph.retrieve(property, receiver))
|
|
58
|
+
.map((subgraph: Graph) => subgraph.retrieve(property, receiver, circularDependenciesDetector))
|
|
34
59
|
.filter((result) => result !== undefined);
|
|
35
60
|
}
|
|
36
61
|
}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
+
import { CircularDependenciesDetector } from './CircularDependenciesDetector';
|
|
2
|
+
|
|
1
3
|
interface PropertyRetrieverDelegate {
|
|
2
|
-
retrieve: (
|
|
4
|
+
retrieve: (
|
|
5
|
+
property: string,
|
|
6
|
+
receiver?: unknown,
|
|
7
|
+
circularDependenciesDetector?: CircularDependenciesDetector
|
|
8
|
+
) => unknown | undefined;
|
|
3
9
|
}
|
|
4
10
|
|
|
5
11
|
export default PropertyRetrieverDelegate;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export class VisitedNodes {
|
|
2
|
+
private visitedNodes = new Set<`${string}.${string}`>();
|
|
3
|
+
private visitPath: string[] = [];
|
|
4
|
+
|
|
5
|
+
public visit(graphName: string, dependencyName: string): boolean {
|
|
6
|
+
this.visitPath.push(dependencyName);
|
|
7
|
+
if (this.canVisit(graphName, dependencyName)) {
|
|
8
|
+
this.visitedNodes.add(`${graphName}.${dependencyName}`);
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
public canVisit(graphName: string, dependencyName: string) {
|
|
15
|
+
return !this.visitedNodes.has(`${graphName}.${dependencyName}`);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
public isCircularPath(): boolean {
|
|
19
|
+
return this.visitedNodes.size < this.visitPath.length;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public getNodes(): string[] {
|
|
23
|
+
return this.visitPath;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public clear() {
|
|
27
|
+
this.visitedNodes.clear();
|
|
28
|
+
this.visitPath.length = 0;
|
|
29
|
+
}
|
|
30
|
+
}
|