react-obsidian 0.0.40 → 0.0.42
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/clearGraphs.js +2 -2
- package/dist/clearGraphs.js.map +1 -1
- package/dist/src/GraphProperties.js +9 -10
- package/dist/src/GraphProperties.js.map +1 -1
- package/dist/src/Obsidian.js +15 -18
- package/dist/src/Obsidian.js.map +1 -1
- package/dist/src/ProvidedPropertiesStore.js +13 -14
- package/dist/src/ProvidedPropertiesStore.js.map +1 -1
- package/dist/src/ReferenceCounter.js +9 -10
- package/dist/src/ReferenceCounter.js.map +1 -1
- package/dist/src/decorators/Graph.js +3 -4
- package/dist/src/decorators/Graph.js.map +1 -1
- package/dist/src/decorators/LifecycleBound.js +1 -1
- package/dist/src/decorators/LifecycleBound.js.map +1 -1
- package/dist/src/decorators/Memoize.js +3 -3
- package/dist/src/decorators/Memoize.js.map +1 -1
- package/dist/src/decorators/Singleton.js +1 -1
- package/dist/src/decorators/Singleton.js.map +1 -1
- package/dist/src/decorators/inject/Inject.js +4 -4
- package/dist/src/decorators/inject/Inject.js.map +1 -1
- package/dist/src/decorators/inject/Injectable.js +2 -2
- package/dist/src/decorators/inject/Injectable.js.map +1 -1
- package/dist/src/decorators/inject/LateInject.js +3 -3
- package/dist/src/decorators/inject/LateInject.js.map +1 -1
- package/dist/src/decorators/provides/MemoizeDescriptor.js +5 -9
- package/dist/src/decorators/provides/MemoizeDescriptor.js.map +1 -1
- package/dist/src/decorators/provides/Provides.js +3 -4
- package/dist/src/decorators/provides/Provides.js.map +1 -1
- package/dist/src/graph/CircularDependenciesDetector.d.ts +10 -0
- package/dist/src/graph/CircularDependenciesDetector.d.ts.map +1 -0
- package/dist/src/graph/CircularDependenciesDetector.js +24 -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 +20 -25
- 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 +28 -20
- 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/ProviderBinder.js +3 -3
- package/dist/src/graph/ProviderBinder.js.map +1 -1
- package/dist/src/graph/ServiceLocatorFactory.js +9 -12
- package/dist/src/graph/ServiceLocatorFactory.js.map +1 -1
- package/dist/src/graph/VisitedNodes.d.ts +9 -0
- package/dist/src/graph/VisitedNodes.d.ts.map +1 -0
- package/dist/src/graph/VisitedNodes.js +28 -0
- package/dist/src/graph/VisitedNodes.js.map +1 -0
- package/dist/src/graph/registry/DefaultGraphResolver.js +5 -25
- package/dist/src/graph/registry/DefaultGraphResolver.js.map +1 -1
- package/dist/src/graph/registry/GraphMiddleware.js +3 -23
- package/dist/src/graph/registry/GraphMiddleware.js.map +1 -1
- package/dist/src/graph/registry/GraphMiddlewareChain.js +12 -14
- package/dist/src/graph/registry/GraphMiddlewareChain.js.map +1 -1
- package/dist/src/graph/registry/GraphRegistry.js +38 -41
- package/dist/src/graph/registry/GraphRegistry.js.map +1 -1
- package/dist/src/graph/registry/Middleware.js +11 -19
- package/dist/src/graph/registry/Middleware.js.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/injectors/class/ClassInjector.js +25 -40
- package/dist/src/injectors/class/ClassInjector.js.map +1 -1
- package/dist/src/injectors/class/ConstructorArgs.js +11 -12
- package/dist/src/injectors/class/ConstructorArgs.js.map +1 -1
- package/dist/src/injectors/class/InjectionMetadata.js +21 -22
- package/dist/src/injectors/class/InjectionMetadata.js.map +1 -1
- package/dist/src/injectors/class/LateInjector.js +12 -15
- package/dist/src/injectors/class/LateInjector.js.map +1 -1
- package/dist/src/injectors/components/ComponentInjector.js +18 -21
- package/dist/src/injectors/components/ComponentInjector.js.map +1 -1
- package/dist/src/injectors/components/InjectComponent.js +3 -3
- package/dist/src/injectors/components/InjectComponent.js.map +1 -1
- package/dist/src/injectors/components/PropsInjector.js +7 -9
- package/dist/src/injectors/components/PropsInjector.js.map +1 -1
- package/dist/src/injectors/components/useGraph.js +10 -10
- package/dist/src/injectors/components/useGraph.js.map +1 -1
- package/dist/src/injectors/hooks/HookInjector.js +12 -16
- package/dist/src/injectors/hooks/HookInjector.js.map +1 -1
- package/dist/src/injectors/hooks/InjectHook.js +2 -2
- package/dist/src/injectors/hooks/InjectHook.js.map +1 -1
- package/dist/src/observable/MediatorObservable.js +23 -34
- package/dist/src/observable/MediatorObservable.js.map +1 -1
- package/dist/src/observable/Observable.js +16 -22
- package/dist/src/observable/Observable.js.map +1 -1
- package/dist/src/observable/useObserver.js +4 -4
- package/dist/src/observable/useObserver.js.map +1 -1
- package/dist/src/utils/React.js +1 -1
- package/dist/src/utils/React.js.map +1 -1
- 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/GraphWithOnBind.js +16 -36
- package/dist/test/fixtures/GraphWithOnBind.js.map +1 -1
- package/dist/test/fixtures/InjectedComponent.js +4 -7
- package/dist/test/fixtures/InjectedComponent.js.map +1 -1
- package/dist/test/fixtures/LifecycleBoundGraph.js +23 -42
- package/dist/test/fixtures/LifecycleBoundGraph.js.map +1 -1
- package/dist/test/fixtures/MainGraph.js +25 -45
- package/dist/test/fixtures/MainGraph.js.map +1 -1
- package/dist/test/fixtures/SingletonGraph.js +21 -39
- package/dist/test/fixtures/SingletonGraph.js.map +1 -1
- package/dist/test/fixtures/StringProvider.js +4 -6
- package/dist/test/fixtures/StringProvider.js.map +1 -1
- package/dist/test/fixtures/Subgraph.js +41 -61
- package/dist/test/fixtures/Subgraph.js.map +1 -1
- 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/dist/test/fixtures/ThrowingMainGraph.js +15 -35
- package/dist/test/fixtures/ThrowingMainGraph.js.map +1 -1
- package/dist/test/fixtures/UniqueNumberGraph.js +27 -45
- package/dist/test/fixtures/UniqueNumberGraph.js.map +1 -1
- package/dist/testkit/index.js +12 -35
- package/dist/testkit/index.js.map +1 -1
- package/dist/transformers/babel-plugin-obsidian/helpers/index.js +11 -11
- package/dist/transformers/babel-plugin-obsidian/helpers/index.js.map +1 -1
- package/dist/transformers/babel-plugin-obsidian/index.js +8 -12
- package/dist/transformers/babel-plugin-obsidian/index.js.map +1 -1
- package/dist/transformers/babel-plugin-obsidian/unmagler/index.js +2 -2
- package/dist/transformers/babel-plugin-obsidian/unmagler/index.js.map +1 -1
- package/dist/transformers/babel-plugin-obsidian/unmagler/method.js +3 -3
- package/dist/transformers/babel-plugin-obsidian/unmagler/method.js.map +1 -1
- package/dist/transformers/babel-plugin-obsidian/unmagler/property.js +2 -2
- package/dist/transformers/babel-plugin-obsidian/unmagler/property.js.map +1 -1
- package/documentation/package-lock.json +1819 -88
- package/documentation/package.json +1 -0
- package/documentation/src/theme/SearchBar.js +21 -0
- package/package.json +2 -2
- package/src/graph/CircularDependenciesDetector.ts +23 -0
- package/src/graph/ObjectGraph.ts +7 -2
- package/src/graph/PropertyRetriever.ts +29 -6
- package/src/graph/PropertyRetrieverDelegate.ts +7 -1
- package/src/graph/VisitedNodes.ts +25 -0
- package/tsconfig.base.json +1 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import EnhancedSearch from 'enhancedocs-search';
|
|
3
|
+
|
|
4
|
+
import 'enhancedocs-search/dist/style.css';
|
|
5
|
+
|
|
6
|
+
export default function SearchBarWrapper(props) {
|
|
7
|
+
return (
|
|
8
|
+
<EnhancedSearch
|
|
9
|
+
config={{
|
|
10
|
+
enhancedSearch: {
|
|
11
|
+
projectId: '642ef48a9b7dab8fff36a55b',
|
|
12
|
+
accessToken: 'pk_b6c6de86cb63d0857b2a96b3f90ec2906be49358981ac67f'
|
|
13
|
+
}
|
|
14
|
+
}}
|
|
15
|
+
theme={{
|
|
16
|
+
primaryColor: '#B94BEE'
|
|
17
|
+
}}
|
|
18
|
+
{...props}
|
|
19
|
+
/>
|
|
20
|
+
);
|
|
21
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-obsidian",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.42",
|
|
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",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"pretest": "tsc",
|
|
9
9
|
"test": "npx jest"
|
|
10
10
|
},
|
|
11
|
-
"main": "src/index.
|
|
11
|
+
"main": "dist/src/index.js",
|
|
12
12
|
"directories": {
|
|
13
13
|
"test": "test"
|
|
14
14
|
},
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
}
|
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,41 @@
|
|
|
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
|
return Reflect.get(this.graph, mangledPropertyKey, receiver)(proxiedGraph);
|
|
17
28
|
}
|
|
18
29
|
|
|
19
|
-
|
|
30
|
+
if (circularDependenciesDetector.hasCircularDependencies()) {
|
|
31
|
+
throw new Error(
|
|
32
|
+
`Could not resolve ${circularDependenciesDetector.firstDependencyName}`
|
|
33
|
+
+ ` from ${circularDependenciesDetector.graphName} because of a circular dependency:`
|
|
34
|
+
+ ` ${circularDependenciesDetector.getDependencies().join(' -> ')}`,
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const results = this.getFromSubgraphs(property, circularDependenciesDetector, receiver);
|
|
20
39
|
if (results.length === 1) return results[0];
|
|
21
40
|
if (results.length > 1) {
|
|
22
41
|
throw new Error(
|
|
@@ -27,10 +46,14 @@ export default class PropertyRetriever {
|
|
|
27
46
|
return undefined;
|
|
28
47
|
}
|
|
29
48
|
|
|
30
|
-
private getFromSubgraphs(
|
|
49
|
+
private getFromSubgraphs(
|
|
50
|
+
property: string,
|
|
51
|
+
circularDependenciesDetector: CircularDependenciesDetector,
|
|
52
|
+
receiver: unknown,
|
|
53
|
+
): unknown[] {
|
|
31
54
|
const subgraphs = graphRegistry.getSubgraphs(this.graph);
|
|
32
55
|
return subgraphs
|
|
33
|
-
.map((subgraph: Graph) => subgraph.retrieve(property, receiver))
|
|
56
|
+
.map((subgraph: Graph) => subgraph.retrieve(property, receiver, circularDependenciesDetector))
|
|
34
57
|
.filter((result) => result !== undefined);
|
|
35
58
|
}
|
|
36
59
|
}
|
|
@@ -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,25 @@
|
|
|
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
|
+
getNodes(): string[] {
|
|
23
|
+
return this.visitPath;
|
|
24
|
+
}
|
|
25
|
+
}
|