react-obsidian 0.0.3 → 0.0.8
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/.eslintrc.json +4 -2
- package/README.md +37 -3
- package/dist/src/Obsidian.d.ts +3 -3
- package/dist/src/Obsidian.d.ts.map +1 -1
- package/dist/src/Obsidian.js.map +1 -1
- package/dist/src/ProvidedPropertiesStore.d.ts +1 -1
- package/dist/src/ProvidedPropertiesStore.d.ts.map +1 -1
- package/dist/src/ScopedValuesRegistry.d.ts +1 -1
- package/dist/src/ScopedValuesRegistry.d.ts.map +1 -1
- package/dist/src/decorators/Graph.d.ts +3 -3
- package/dist/src/decorators/Graph.d.ts.map +1 -1
- package/dist/src/decorators/Graph.js +2 -1
- package/dist/src/decorators/Graph.js.map +1 -1
- package/dist/src/decorators/Memoize.d.ts +3 -0
- package/dist/src/decorators/Memoize.d.ts.map +1 -0
- package/dist/src/decorators/Memoize.js +21 -0
- package/dist/src/decorators/Memoize.js.map +1 -0
- package/dist/src/decorators/injectClass.d.ts +2 -2
- package/dist/src/decorators/injectClass.d.ts.map +1 -1
- package/dist/src/decorators/provides/PropertyDescriptorToSingleton.d.ts +2 -0
- package/dist/src/decorators/provides/PropertyDescriptorToSingleton.d.ts.map +1 -0
- package/dist/src/decorators/provides/PropertyDescriptorToSingleton.js +20 -0
- package/dist/src/decorators/provides/PropertyDescriptorToSingleton.js.map +1 -0
- package/dist/src/decorators/provides/Provides.d.ts +9 -0
- package/dist/src/decorators/provides/Provides.d.ts.map +1 -0
- package/dist/src/{Provides.js → decorators/provides/Provides.js} +5 -3
- package/dist/src/decorators/provides/Provides.js.map +1 -0
- package/dist/src/graph/Graph.d.ts +1 -2
- package/dist/src/graph/Graph.d.ts.map +1 -1
- package/dist/src/graph/ObjectGraph.d.ts +3 -3
- package/dist/src/graph/ObjectGraph.d.ts.map +1 -1
- package/dist/src/graph/ObjectGraph.js +19 -2
- package/dist/src/graph/ObjectGraph.js.map +1 -1
- package/dist/src/graph/PropertyRetriever.d.ts +1 -1
- package/dist/src/graph/PropertyRetriever.d.ts.map +1 -1
- package/dist/src/graph/registry/DefaultGraphResolver.d.ts +5 -5
- package/dist/src/graph/registry/DefaultGraphResolver.d.ts.map +1 -1
- package/dist/src/graph/registry/DefaultGraphResolver.js +2 -2
- package/dist/src/graph/registry/DefaultGraphResolver.js.map +1 -1
- package/dist/src/graph/registry/GraphMiddleware.d.ts +3 -10
- package/dist/src/graph/registry/GraphMiddleware.d.ts.map +1 -1
- package/dist/src/graph/registry/GraphMiddleware.js +20 -17
- package/dist/src/graph/registry/GraphMiddleware.js.map +1 -1
- package/dist/src/graph/registry/GraphMiddlewareChain.d.ts +7 -7
- package/dist/src/graph/registry/GraphMiddlewareChain.d.ts.map +1 -1
- package/dist/src/graph/registry/GraphMiddlewareChain.js.map +1 -1
- package/dist/src/graph/registry/GraphRegistry.d.ts +4 -4
- package/dist/src/graph/registry/GraphRegistry.d.ts.map +1 -1
- package/dist/src/graph/registry/GraphRegistry.js.map +1 -1
- package/dist/src/graph/registry/Middleware.d.ts +11 -0
- package/dist/src/graph/registry/Middleware.d.ts.map +1 -0
- package/dist/src/graph/registry/Middleware.js +25 -0
- package/dist/src/graph/registry/Middleware.js.map +1 -0
- package/dist/src/index.d.ts +15 -14
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +26 -12
- package/dist/src/index.js.map +1 -1
- package/dist/src/injectors/components/ComponentInjector.d.ts +2 -2
- package/dist/src/injectors/components/ComponentInjector.d.ts.map +1 -1
- package/dist/src/injectors/components/ComponentInjector.js.map +1 -1
- package/dist/src/injectors/components/PropsInjector.d.ts +1 -1
- package/dist/src/injectors/components/PropsInjector.d.ts.map +1 -1
- package/dist/src/injectors/components/useGraph.d.ts +2 -2
- package/dist/src/injectors/components/useGraph.d.ts.map +1 -1
- package/dist/src/injectors/components/useGraph.js.map +1 -1
- package/dist/src/injectors/hooks/HookInjector.d.ts +2 -2
- package/dist/src/injectors/hooks/HookInjector.d.ts.map +1 -1
- package/dist/src/injectors/hooks/HookInjector.js.map +1 -1
- package/dist/src/types/index.d.ts +12 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +3 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/testkit/index.d.ts +1 -2
- package/dist/testkit/index.d.ts.map +1 -1
- package/dist/testkit/index.js +1 -2
- package/dist/testkit/index.js.map +1 -1
- package/dist/transformers/babel-plugin-obsidian-provide/index.d.ts.map +1 -1
- package/dist/transformers/babel-plugin-obsidian-provide/index.js +2 -0
- package/dist/transformers/babel-plugin-obsidian-provide/index.js.map +1 -1
- package/example/tsconfig.json +0 -3
- package/package.json +1 -1
- package/src/Obsidian.ts +6 -3
- package/src/ProvidedPropertiesStore.ts +1 -1
- package/src/ScopedValuesRegistry.ts +1 -1
- package/src/decorators/Graph.ts +3 -3
- package/src/decorators/Memoize.ts +18 -0
- package/src/decorators/injectClass.ts +2 -2
- package/src/decorators/provides/PropertyDescriptorToSingleton.ts +11 -0
- package/src/decorators/provides/Provides.ts +16 -0
- package/src/graph/Graph.ts +1 -3
- package/src/graph/ObjectGraph.ts +8 -4
- package/src/graph/PropertyRetriever.ts +1 -1
- package/src/graph/registry/DefaultGraphResolver.ts +5 -5
- package/src/graph/registry/GraphMiddleware.ts +3 -23
- package/src/graph/registry/GraphMiddlewareChain.ts +8 -8
- package/src/graph/registry/GraphRegistry.ts +5 -5
- package/src/graph/registry/Middleware.ts +23 -0
- package/src/index.ts +19 -17
- package/src/injectors/components/ComponentInjector.tsx +2 -2
- package/src/injectors/components/PropsInjector.ts +1 -1
- package/src/injectors/components/useGraph.ts +2 -2
- package/src/injectors/hooks/HookInjector.ts +4 -3
- package/src/types/index.ts +13 -0
- package/testkit/index.ts +9 -6
- package/transformers/babel-plugin-obsidian-provide/index.ts +1 -0
- package/tsconfig.base.json +1 -4
- package/.nvmrc +0 -1
- package/dist/src/Provides.d.ts +0 -9
- package/dist/src/Provides.d.ts.map +0 -1
- package/dist/src/Provides.js.map +0 -1
- package/src/@types/obsidian.d.ts +0 -19
- package/src/Provides.ts +0 -16
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Constructable } from '../../types';
|
|
2
|
+
|
|
3
|
+
export abstract class Middleware<T> {
|
|
4
|
+
private next!: Middleware<T>;
|
|
5
|
+
|
|
6
|
+
public setNext(next: Middleware<T>) {
|
|
7
|
+
this.next = next;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
public get resolveChain(): ResolveChain<T> {
|
|
11
|
+
return {
|
|
12
|
+
proceed: <Props>(Graph: Constructable<T>, props?: Props): T => {
|
|
13
|
+
return this.next.resolve(this.next.resolveChain, Graph, props);
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
abstract resolve<Props>(resolveChain: ResolveChain<T>, Graph: Constructable<T>, props?: Props): T;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface ResolveChain<T> {
|
|
22
|
+
proceed<Props>(Graph: Constructable<T>, props?: Props): T;
|
|
23
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,28 +1,30 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import _Graph from './decorators/Graph';
|
|
4
|
-
import _ObjectGraph from './graph/ObjectGraph';
|
|
2
|
+
import { ObjectGraph as _ObjectGraph } from './graph/ObjectGraph';
|
|
5
3
|
import ComponentInjector from './injectors/components/ComponentInjector';
|
|
6
|
-
import
|
|
7
|
-
import { Inject as _Inject, Injectable as _Injectable } from './decorators/injectClass';
|
|
8
|
-
import _obsidian from './Obsidian';
|
|
4
|
+
import _Obsidian from './Obsidian';
|
|
9
5
|
import HookInjector from './injectors/hooks/HookInjector';
|
|
6
|
+
import { Constructable } from './types';
|
|
10
7
|
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
export
|
|
14
|
-
export
|
|
15
|
-
export
|
|
16
|
-
export
|
|
8
|
+
export * from './types';
|
|
9
|
+
|
|
10
|
+
export { Graph } from './decorators/Graph';
|
|
11
|
+
export { ObjectGraph } from './graph/ObjectGraph';
|
|
12
|
+
export { Graph as IGraph } from './graph/Graph';
|
|
13
|
+
export { Provides } from './decorators/provides/Provides';
|
|
14
|
+
export { Injectable } from './decorators/injectClass';
|
|
15
|
+
export { Inject } from './decorators/injectClass';
|
|
16
|
+
export { GraphMiddleware } from './graph/registry/GraphMiddleware';
|
|
17
|
+
export { ResolveChain } from './graph/registry/Middleware';
|
|
18
|
+
export const Obsidian = new _Obsidian();
|
|
17
19
|
|
|
18
20
|
const componentInjector = new ComponentInjector();
|
|
19
21
|
export const injectComponent = <P> (
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
) => componentInjector.inject(
|
|
22
|
+
Target: React.FunctionComponent<P>,
|
|
23
|
+
Graph: Constructable<_ObjectGraph>,
|
|
24
|
+
) => componentInjector.inject(Target, Graph);
|
|
23
25
|
|
|
24
26
|
const hookInjector = new HookInjector();
|
|
25
27
|
export const injectHook = <Args, Result> (
|
|
26
28
|
hook: (args: Args) => Result,
|
|
27
|
-
|
|
28
|
-
) => hookInjector.inject(hook,
|
|
29
|
+
Graph: Constructable<_ObjectGraph>,
|
|
30
|
+
) => hookInjector.inject(hook, Graph);
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import React, { useState } from 'react';
|
|
2
|
-
import { Constructable } from '@Obsidian';
|
|
3
2
|
import hoistNonReactStatics from 'hoist-non-react-statics';
|
|
4
3
|
import 'reflect-metadata';
|
|
5
|
-
import ObjectGraph from '../../graph/ObjectGraph';
|
|
4
|
+
import { ObjectGraph } from '../../graph/ObjectGraph';
|
|
6
5
|
import PropsInjector from './PropsInjector';
|
|
7
6
|
import useGraph from './useGraph';
|
|
7
|
+
import { Constructable } from '../../types';
|
|
8
8
|
|
|
9
9
|
export default class ComponentInjector {
|
|
10
10
|
inject<P>(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Constructable } from '@Obsidian';
|
|
2
1
|
import { useEffect, useState } from 'react';
|
|
3
|
-
import
|
|
2
|
+
import { Constructable } from '../../types';
|
|
3
|
+
import { ObjectGraph } from '../../graph/ObjectGraph';
|
|
4
4
|
import graphRegistry from '../../graph/registry/GraphRegistry';
|
|
5
5
|
import referenceCounter from '../../ReferenceCounter';
|
|
6
6
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { ObjectGraph } from '../../graph/ObjectGraph';
|
|
2
|
+
import { Graph } from '../../graph/Graph';
|
|
3
3
|
import useGraph from '../components/useGraph';
|
|
4
|
+
import { Constructable } from '../../types';
|
|
4
5
|
|
|
5
6
|
export default class HookInjector {
|
|
6
7
|
inject<Args, Result>(
|
|
@@ -15,7 +16,7 @@ export default class HookInjector {
|
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
class Injector implements ProxyHandler<any> {
|
|
18
|
-
constructor(private graph:
|
|
19
|
+
constructor(private graph: Graph) {}
|
|
19
20
|
|
|
20
21
|
get(obj: any, property: string, receiver: any): any {
|
|
21
22
|
return property in obj ? obj[property] : this.graph.retrieve(property, receiver);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type Constructable<T> = {
|
|
2
|
+
new(...args: any): T;
|
|
3
|
+
};
|
|
4
|
+
|
|
5
|
+
export type Scope = string | number | symbol;
|
|
6
|
+
|
|
7
|
+
export type Constructor = { new(...args: any[]): any };
|
|
8
|
+
|
|
9
|
+
export type ServiceLocator<Clazz> = {
|
|
10
|
+
[Key in keyof Clazz]: Function
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export type GraphInternals = 'retrieve' | 'name' | 'scope';
|
package/testkit/index.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import {
|
|
2
|
+
ObjectGraph,
|
|
3
|
+
Constructable,
|
|
4
|
+
GraphMiddleware,
|
|
5
|
+
Obsidian,
|
|
6
|
+
ResolveChain,
|
|
7
|
+
} from '../src';
|
|
5
8
|
|
|
6
9
|
beforeEach(() => {
|
|
7
10
|
Obsidian.clearGraphMiddlewares();
|
|
@@ -10,10 +13,10 @@ beforeEach(() => {
|
|
|
10
13
|
class Index {
|
|
11
14
|
mockGraphs(graphNameToGraph: Record<string, Constructable<ObjectGraph>>) {
|
|
12
15
|
const graphMiddleware = new class extends GraphMiddleware {
|
|
13
|
-
resolve<
|
|
16
|
+
resolve<Props>(resolveChain: ResolveChain<ObjectGraph>, Graph: Constructable<ObjectGraph>, props?: Props) {
|
|
14
17
|
if (graphNameToGraph[Graph.name]) {
|
|
15
18
|
const TheGraph = graphNameToGraph[Graph.name];
|
|
16
|
-
return new TheGraph(props)
|
|
19
|
+
return new TheGraph(props);
|
|
17
20
|
}
|
|
18
21
|
return resolveChain.proceed(Graph, props);
|
|
19
22
|
}
|
|
@@ -30,6 +30,7 @@ const internalVisitor = {
|
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
function convertProviderParamsToDestructuringAssignment(node: ClassMethod) {
|
|
33
|
+
if (node.params.length === 0) return;
|
|
33
34
|
const destructuredParams = paramsToDestructuringAssignment(node.params);
|
|
34
35
|
node.params.length = 0;
|
|
35
36
|
node.params.push(destructuredParams);
|
package/tsconfig.base.json
CHANGED
package/.nvmrc
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
12
|
package/dist/src/Provides.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Scope } from '@Obsidian';
|
|
2
|
-
import Graph from './graph/Graph';
|
|
3
|
-
interface ProvidesParams {
|
|
4
|
-
scope?: Scope;
|
|
5
|
-
name: string;
|
|
6
|
-
}
|
|
7
|
-
declare function Provides({ name }?: Partial<ProvidesParams>): (graph: Graph, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
8
|
-
export default Provides;
|
|
9
|
-
//# sourceMappingURL=Provides.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Provides.d.ts","sourceRoot":"","sources":["../../src/Provides.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,eAAe,CAAC;AAGlC,UAAU,cAAc;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iBAAS,QAAQ,CAAC,EAAE,IAAI,EAAE,GAAE,OAAO,CAAC,cAAc,CAAM,WACvB,KAAK,eAAe,MAAM,cAAc,kBAAkB,wBAI1F;AACD,eAAe,QAAQ,CAAC"}
|
package/dist/src/Provides.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Provides.js","sourceRoot":"","sources":["../../src/Provides.ts"],"names":[],"mappings":";;;;;AAEA,sFAAgE;AAOhE,SAAS,QAAQ,CAAC,EAAsC;QAAtC,qBAAoC,EAAE,KAAA,EAApC,IAAI,UAAA;IACtB,OAAO,SAAS,OAAO,CAAC,KAAY,EAAE,WAAmB,EAAE,UAA8B;QACvF,iCAAuB,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,IAAK,CAAC,CAAC;QACvD,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AACD,kBAAe,QAAQ,CAAC"}
|
package/src/@types/obsidian.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import ObjectGraph from '../graph/ObjectGraph';
|
|
2
|
-
|
|
3
|
-
type Constructable<T> = {
|
|
4
|
-
new(...args: any): T;
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
type GraphClass<T extends ObjectGraph<P>, P> = {
|
|
8
|
-
new(props?: P): T;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
type Scope = string | number | symbol;
|
|
12
|
-
|
|
13
|
-
type Constructor = { new(...args: any[]): any };
|
|
14
|
-
|
|
15
|
-
type GraphType = { new(...args: any[]): ObjectGraph };
|
|
16
|
-
|
|
17
|
-
type ServiceLocator<Clazz> = {
|
|
18
|
-
[Key in keyof Clazz]: Function
|
|
19
|
-
};
|
package/src/Provides.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Scope } from '@Obsidian';
|
|
2
|
-
import Graph from './graph/Graph';
|
|
3
|
-
import providedPropertiesStore from './ProvidedPropertiesStore';
|
|
4
|
-
|
|
5
|
-
interface ProvidesParams {
|
|
6
|
-
scope?: Scope;
|
|
7
|
-
name: string;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
function Provides({ name }: Partial<ProvidesParams> = {}) {
|
|
11
|
-
return function provide(graph: Graph, propertyKey: string, descriptor: PropertyDescriptor) {
|
|
12
|
-
providedPropertiesStore.set(graph, propertyKey, name!);
|
|
13
|
-
return descriptor;
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
export default Provides;
|