react-obsidian 3.0.0-alpha.6 → 3.0.0-alpha.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/dist/src/Obsidian.d.ts +4 -3
- package/dist/src/Obsidian.d.ts.map +1 -1
- package/dist/src/Obsidian.js +7 -4
- package/dist/src/Obsidian.js.map +1 -1
- package/dist/src/decorators/LifecycleBound.d.ts +1 -1
- package/dist/src/decorators/LifecycleBound.d.ts.map +1 -1
- package/dist/src/decorators/inject/Inject.d.ts.map +1 -1
- package/dist/src/decorators/inject/Inject.js.map +1 -1
- package/dist/src/decorators/inject/Injectable.d.ts +1 -1
- package/dist/src/decorators/inject/Injectable.d.ts.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/graph/ObjectGraph.d.ts +1 -1
- package/dist/src/graph/ObjectGraph.d.ts.map +1 -1
- package/dist/src/graph/ObjectGraph.js +9 -2
- package/dist/src/graph/ObjectGraph.js.map +1 -1
- package/dist/src/graph/ServiceLocatorFactory.d.ts +1 -1
- package/dist/src/graph/ServiceLocatorFactory.d.ts.map +1 -1
- package/dist/src/graph/ServiceLocatorFactory.js +2 -2
- package/dist/src/graph/ServiceLocatorFactory.js.map +1 -1
- package/dist/src/graph/registry/GraphRegistry.d.ts +15 -2
- package/dist/src/graph/registry/GraphRegistry.d.ts.map +1 -1
- package/dist/src/graph/registry/GraphRegistry.js +107 -10
- package/dist/src/graph/registry/GraphRegistry.js.map +1 -1
- package/dist/src/injectors/class/ClassInjector.d.ts +1 -1
- package/dist/src/injectors/class/ClassInjector.d.ts.map +1 -1
- package/dist/src/injectors/class/ClassInjector.js +5 -14
- package/dist/src/injectors/class/ClassInjector.js.map +1 -1
- package/dist/src/injectors/class/LateInjector.d.ts +2 -1
- package/dist/src/injectors/class/LateInjector.d.ts.map +1 -1
- package/dist/src/injectors/class/LateInjector.js +13 -4
- package/dist/src/injectors/class/LateInjector.js.map +1 -1
- package/dist/src/injectors/components/ComponentInjector.d.ts +1 -1
- package/dist/src/injectors/components/ComponentInjector.d.ts.map +1 -1
- package/dist/src/injectors/components/ComponentInjector.js +5 -5
- package/dist/src/injectors/components/ComponentInjector.js.map +1 -1
- package/dist/src/injectors/components/InjectComponent.d.ts +1 -1
- package/dist/src/injectors/components/InjectComponent.d.ts.map +1 -1
- package/dist/src/injectors/components/InjectComponent.js +6 -5
- package/dist/src/injectors/components/InjectComponent.js.map +1 -1
- package/dist/src/injectors/components/useGraph.d.ts +1 -1
- package/dist/src/injectors/components/useGraph.d.ts.map +1 -1
- package/dist/src/injectors/components/useGraph.js +2 -2
- package/dist/src/injectors/components/useGraph.js.map +1 -1
- package/dist/src/injectors/components/useInjectionToken.d.ts +1 -1
- package/dist/src/injectors/components/useInjectionToken.d.ts.map +1 -1
- package/dist/src/injectors/components/useInjectionToken.js +5 -2
- package/dist/src/injectors/components/useInjectionToken.js.map +1 -1
- package/dist/src/injectors/hooks/HookInjector.d.ts +1 -1
- package/dist/src/injectors/hooks/HookInjector.d.ts.map +1 -1
- package/dist/src/injectors/hooks/HookInjector.js +2 -2
- package/dist/src/injectors/hooks/HookInjector.js.map +1 -1
- package/dist/src/injectors/hooks/InjectHook.d.ts +2 -2
- package/dist/src/injectors/hooks/InjectHook.d.ts.map +1 -1
- package/dist/src/injectors/hooks/InjectHook.js +4 -4
- package/dist/src/injectors/hooks/InjectHook.js.map +1 -1
- package/dist/src/utils/isString.d.ts +2 -0
- package/dist/src/utils/isString.d.ts.map +1 -0
- package/dist/src/utils/isString.js +7 -0
- package/dist/src/utils/isString.js.map +1 -0
- package/dist/src/utils/reflect.d.ts +1 -0
- package/dist/src/utils/reflect.d.ts.map +1 -1
- package/dist/src/utils/reflect.js +12 -1
- package/dist/src/utils/reflect.js.map +1 -1
- package/dist/test/fixtures/LifecycleBoundGraph.js +3 -3
- package/dist/test/fixtures/LifecycleBoundGraph.js.map +1 -1
- package/eslint.config.mjs +2 -1
- package/package.json +13 -10
- package/src/Obsidian.ts +10 -6
- package/src/decorators/LifecycleBound.ts +1 -1
- package/src/decorators/inject/Inject.ts +1 -4
- package/src/decorators/inject/Injectable.ts +2 -2
- package/src/graph/ObjectGraph.ts +10 -2
- package/src/graph/ServiceLocatorFactory.ts +2 -2
- package/src/graph/registry/GraphRegistry.ts +119 -10
- package/src/injectors/class/ClassInjector.ts +6 -14
- package/src/injectors/class/LateInjector.ts +10 -3
- package/src/injectors/components/ComponentInjector.tsx +5 -5
- package/src/injectors/components/InjectComponent.ts +6 -5
- package/src/injectors/components/useGraph.ts +2 -2
- package/src/injectors/components/useInjectionToken.ts +5 -2
- package/src/injectors/hooks/HookInjector.ts +2 -2
- package/src/injectors/hooks/InjectHook.ts +4 -4
- package/src/utils/isString.ts +3 -0
- package/src/utils/reflect.ts +14 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComponentInjector.d.ts","sourceRoot":"","sources":["../../../../src/injectors/components/ComponentInjector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAK5C,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,MAAM,CAAC,CAAC,EACN,MAAM,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAClC,
|
|
1
|
+
{"version":3,"file":"ComponentInjector.d.ts","sourceRoot":"","sources":["../../../../src/injectors/components/ComponentInjector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAK5C,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,MAAM,CAAC,CAAC,EACN,MAAM,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAClC,UAAU,EAAE,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,GAC9C,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAMtC,OAAO,CAAC,aAAa;CAoBtB"}
|
|
@@ -11,18 +11,18 @@ const React_1 = require("../../utils/React");
|
|
|
11
11
|
const graphContext_1 = require("./graphContext");
|
|
12
12
|
const useInjectionToken_1 = require("./useInjectionToken");
|
|
13
13
|
class ComponentInjector {
|
|
14
|
-
inject(Target,
|
|
15
|
-
const Wrapped = this.wrapComponent(Target,
|
|
14
|
+
inject(Target, keyOrGraph) {
|
|
15
|
+
const Wrapped = this.wrapComponent(Target, keyOrGraph);
|
|
16
16
|
(0, hoist_non_react_statics_1.default)(Wrapped, Target);
|
|
17
17
|
return Wrapped;
|
|
18
18
|
}
|
|
19
|
-
wrapComponent(InjectionCandidate,
|
|
19
|
+
wrapComponent(InjectionCandidate, keyOrGraph) {
|
|
20
20
|
const isMemoized = (0, React_1.isMemoizedComponent)(InjectionCandidate);
|
|
21
21
|
const Target = isMemoized ? InjectionCandidate.type : InjectionCandidate;
|
|
22
22
|
const compare = isMemoized ? InjectionCandidate.compare : undefined;
|
|
23
23
|
return (0, React_1.genericMemo)((passedProps) => {
|
|
24
|
-
const injectionToken = (0, useInjectionToken_1.useInjectionToken)(
|
|
25
|
-
const graph = (0, useGraph_1.default)(
|
|
24
|
+
const injectionToken = (0, useInjectionToken_1.useInjectionToken)(keyOrGraph);
|
|
25
|
+
const graph = (0, useGraph_1.default)(keyOrGraph, Target, passedProps, injectionToken);
|
|
26
26
|
const proxiedProps = new PropsInjector_1.default(graph).inject(passedProps);
|
|
27
27
|
return (react_1.default.createElement(graphContext_1.GraphContext.Provider, { value: { injectionToken } }, Target(proxiedProps)));
|
|
28
28
|
}, compare);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComponentInjector.js","sourceRoot":"","sources":["../../../../src/injectors/components/ComponentInjector.tsx"],"names":[],"mappings":";;;;;AAAA,kDAAiD;AACjD,sFAA2D;AAE3D,oEAA4C;AAC5C,0DAAkC;AAElC,6CAAqE;AACrE,iDAA8C;AAC9C,2DAAwD;AAExD,MAAqB,iBAAiB;IACpC,MAAM,CACJ,MAAkC,EAClC,
|
|
1
|
+
{"version":3,"file":"ComponentInjector.js","sourceRoot":"","sources":["../../../../src/injectors/components/ComponentInjector.tsx"],"names":[],"mappings":";;;;;AAAA,kDAAiD;AACjD,sFAA2D;AAE3D,oEAA4C;AAC5C,0DAAkC;AAElC,6CAAqE;AACrE,iDAA8C;AAC9C,2DAAwD;AAExD,MAAqB,iBAAiB;IACpC,MAAM,CACJ,MAAkC,EAClC,UAA+C;QAE/C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACvD,IAAA,iCAAoB,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtC,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,aAAa,CACnB,kBAA8C,EAC9C,UAA+C;QAE/C,MAAM,UAAU,GAAG,IAAA,2BAAmB,EAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC;QACzE,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAEpE,OAAO,IAAA,mBAAW,EAAC,CAAC,WAAc,EAAE,EAAE;YACpC,MAAM,cAAc,GAAG,IAAA,qCAAiB,EAAC,UAAU,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,IAAA,kBAAQ,EAAI,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;YAC3E,MAAM,YAAY,GAAG,IAAI,uBAAa,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAElE,OAAO,CACL,8BAAC,2BAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,cAAc,EAAE,IAC7C,MAAM,CAAC,YAA+C,CAAC,CAClC,CACzB,CAAC;QACJ,CAAC,EAAE,OAAO,CAAC,CAAC;IACd,CAAC;CACF;AA9BD,oCA8BC"}
|
|
@@ -4,6 +4,6 @@ import { Constructable } from '../../types';
|
|
|
4
4
|
interface Discriminator {
|
|
5
5
|
obsidianDiscriminator: never;
|
|
6
6
|
}
|
|
7
|
-
export declare const injectComponent: <OwnProps = Discriminator, InjectedProps = Discriminator>(Target: React.FunctionComponent<(OwnProps extends infer P ? OwnProps extends Discriminator ? P : OwnProps : never) & (InjectedProps extends Discriminator ? any : InjectedProps)>,
|
|
7
|
+
export declare const injectComponent: <OwnProps = Discriminator, InjectedProps = Discriminator>(Target: React.FunctionComponent<(OwnProps extends infer P ? OwnProps extends Discriminator ? P : OwnProps : never) & (InjectedProps extends Discriminator ? any : InjectedProps)>, keyOrGraph: string | Constructable<ObjectGraph>) => React.FunctionComponent<InjectedProps extends Discriminator ? OwnProps extends Discriminator ? Partial<OwnProps> : OwnProps : OwnProps extends InjectedProps ? Partial<OwnProps> : OwnProps & Partial<InjectedProps>>;
|
|
8
8
|
export {};
|
|
9
9
|
//# sourceMappingURL=InjectComponent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InjectComponent.d.ts","sourceRoot":"","sources":["../../../../src/injectors/components/InjectComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"InjectComponent.d.ts","sourceRoot":"","sources":["../../../../src/injectors/components/InjectComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,UAAU,aAAa;IACrB,qBAAqB,EAAE,KAAK,CAAC;CAC9B;AAID,eAAO,MAAM,eAAe,GAAI,QAAQ,kBAAkB,aAAa,0BAC7D,KAAK,CAAC,iBAAiB,CAC/B,CAAC,QAAQ,SAAS,MAAM,CAAC,GAAG,QAAQ,SAAS,aAAa,GAAG,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAC,GAClF,CAAC,aAAa,SAAS,aAAa,GAAG,GAAG,GAAG,aAAa,CAAC,CAC1D,cACW,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,KAIQ,KAAK,CAAC,iBAAiB,CAC5E,aAAa,SAAS,aAAa,GACjC,QAAQ,SAAS,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAC7D,QAAQ,SAAS,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAE3F,CAAC"}
|
|
@@ -4,15 +4,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.injectComponent = void 0;
|
|
7
|
+
const isString_1 = require("../../utils/isString");
|
|
7
8
|
const ComponentInjector_1 = __importDefault(require("./ComponentInjector"));
|
|
8
9
|
const componentInjector = new ComponentInjector_1.default();
|
|
9
|
-
const injectComponent = (Target,
|
|
10
|
-
assertGraph(
|
|
11
|
-
return componentInjector.inject(Target,
|
|
10
|
+
const injectComponent = (Target, keyOrGraph) => {
|
|
11
|
+
assertGraph(keyOrGraph, Target);
|
|
12
|
+
return componentInjector.inject(Target, keyOrGraph);
|
|
12
13
|
};
|
|
13
14
|
exports.injectComponent = injectComponent;
|
|
14
|
-
function assertGraph(
|
|
15
|
-
if (!
|
|
15
|
+
function assertGraph(keyOrGraph, Target) {
|
|
16
|
+
if (!(0, isString_1.isString)(keyOrGraph) && !keyOrGraph) {
|
|
16
17
|
throw new Error(`injectComponent was called with an undefined Graph.`
|
|
17
18
|
+ `This is probably not an issue with Obsidian.`
|
|
18
19
|
+ `It's typically caused by circular dependencies.`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InjectComponent.js","sourceRoot":"","sources":["../../../../src/injectors/components/InjectComponent.ts"],"names":[],"mappings":";;;;;;AAGA,4EAAoD;AAMpD,MAAM,iBAAiB,GAAG,IAAI,2BAAiB,EAAE,CAAC;AAE3C,MAAM,eAAe,GAAG,CAC7B,MAGC,EACD,
|
|
1
|
+
{"version":3,"file":"InjectComponent.js","sourceRoot":"","sources":["../../../../src/injectors/components/InjectComponent.ts"],"names":[],"mappings":";;;;;;AAGA,mDAAgD;AAChD,4EAAoD;AAMpD,MAAM,iBAAiB,GAAG,IAAI,2BAAiB,EAAE,CAAC;AAE3C,MAAM,eAAe,GAAG,CAC7B,MAGC,EACD,UAA+C,EAC/C,EAAE;IACF,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAEhC,OAAO,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAIjD,CAAC;AACJ,CAAC,CAAC;AAdW,QAAA,eAAe,mBAc1B;AACF,SAAS,WAAW,CAAC,UAA+C,EAAE,MAAW;IAC/E,IAAI,CAAC,IAAA,mBAAQ,EAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,qDAAqD;cACnD,8CAA8C;cAC9C,iDAAiD;cACjD,gCAAgC,MAAM,CAAC,IAAI,GAAG,CACjD,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Constructable } from '../../types';
|
|
2
2
|
import { ObjectGraph } from '../../graph/ObjectGraph';
|
|
3
|
-
declare const _default: <P>(
|
|
3
|
+
declare const _default: <P>(keyOrGraph: string | Constructable<ObjectGraph>, target: any, props?: Partial<P>, injectionToken?: string) => ObjectGraph<unknown>;
|
|
4
4
|
export default _default;
|
|
5
5
|
//# sourceMappingURL=useGraph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGraph.d.ts","sourceRoot":"","sources":["../../../../src/injectors/components/useGraph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;yBAItC,CAAC,
|
|
1
|
+
{"version":3,"file":"useGraph.d.ts","sourceRoot":"","sources":["../../../../src/injectors/components/useGraph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;yBAItC,CAAC,cACH,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,UACvC,GAAG,UACH,OAAO,CAAC,CAAC,CAAC,mBACD,MAAM;AAJzB,wBAgBE"}
|
|
@@ -6,9 +6,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const react_1 = require("react");
|
|
7
7
|
const GraphRegistry_1 = __importDefault(require("../../graph/registry/GraphRegistry"));
|
|
8
8
|
const ReferenceCounter_1 = __importDefault(require("../../ReferenceCounter"));
|
|
9
|
-
exports.default = (
|
|
9
|
+
exports.default = (keyOrGraph, target, props, injectionToken) => {
|
|
10
10
|
const [graph] = (0, react_1.useState)(() => {
|
|
11
|
-
const resolvedGraph = GraphRegistry_1.default.resolve(
|
|
11
|
+
const resolvedGraph = GraphRegistry_1.default.resolve(keyOrGraph, 'lifecycleOwner', props, injectionToken);
|
|
12
12
|
resolvedGraph.onBind(target);
|
|
13
13
|
return resolvedGraph;
|
|
14
14
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGraph.js","sourceRoot":"","sources":["../../../../src/injectors/components/useGraph.ts"],"names":[],"mappings":";;;;;AAAA,iCAA4C;AAG5C,uFAA+D;AAC/D,8EAAsD;AAEtD,kBAAe,CACb,
|
|
1
|
+
{"version":3,"file":"useGraph.js","sourceRoot":"","sources":["../../../../src/injectors/components/useGraph.ts"],"names":[],"mappings":";;;;;AAAA,iCAA4C;AAG5C,uFAA+D;AAC/D,8EAAsD;AAEtD,kBAAe,CACb,UAA+C,EAC/C,MAAW,EACX,KAAkB,EAClB,cAAuB,EACvB,EAAE;IACF,MAAM,CAAC,KAAK,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE;QAC5B,MAAM,aAAa,GAAG,uBAAa,CAAC,OAAO,CAAC,UAAU,EAAE,gBAAgB,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QACjG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC,CAAC;IACH,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,0BAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,OAAO,GAAG,EAAE,CAAC,0BAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,uBAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACZ,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { Constructable, ObjectGraph } from '../..';
|
|
2
|
-
export declare const useInjectionToken: (
|
|
2
|
+
export declare const useInjectionToken: (keyOrGraph: string | Constructable<ObjectGraph>) => string;
|
|
3
3
|
//# sourceMappingURL=useInjectionToken.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInjectionToken.d.ts","sourceRoot":"","sources":["../../../../src/injectors/components/useInjectionToken.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useInjectionToken.d.ts","sourceRoot":"","sources":["../../../../src/injectors/components/useInjectionToken.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAIxD,eAAO,MAAM,iBAAiB,eAAgB,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,WAMhF,CAAC"}
|
|
@@ -4,9 +4,12 @@ exports.useInjectionToken = void 0;
|
|
|
4
4
|
const react_1 = require("react");
|
|
5
5
|
const graphContext_1 = require("./graphContext");
|
|
6
6
|
const uniqueId_1 = require("../../utils/uniqueId");
|
|
7
|
-
const
|
|
7
|
+
const isString_1 = require("../../utils/isString");
|
|
8
|
+
const useInjectionToken = (keyOrGraph) => {
|
|
8
9
|
const ctx = (0, react_1.useContext)(graphContext_1.GraphContext);
|
|
9
|
-
const [injectionToken] = (0, react_1.useState)(() =>
|
|
10
|
+
const [injectionToken] = (0, react_1.useState)(() => {
|
|
11
|
+
return ctx?.injectionToken ?? (0, uniqueId_1.uniqueId)((0, isString_1.isString)(keyOrGraph) ? keyOrGraph : keyOrGraph.name);
|
|
12
|
+
});
|
|
10
13
|
return injectionToken;
|
|
11
14
|
};
|
|
12
15
|
exports.useInjectionToken = useInjectionToken;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInjectionToken.js","sourceRoot":"","sources":["../../../../src/injectors/components/useInjectionToken.ts"],"names":[],"mappings":";;;AAAA,iCAA6C;AAC7C,iDAA8C;AAE9C,mDAAgD;AAEzC,MAAM,iBAAiB,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"useInjectionToken.js","sourceRoot":"","sources":["../../../../src/injectors/components/useInjectionToken.ts"],"names":[],"mappings":";;;AAAA,iCAA6C;AAC7C,iDAA8C;AAE9C,mDAAgD;AAChD,mDAAgD;AAEzC,MAAM,iBAAiB,GAAG,CAAC,UAA+C,EAAE,EAAE;IACnF,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,2BAAY,CAAC,CAAC;IACrC,MAAM,CAAC,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE;QACrC,OAAO,GAAG,EAAE,cAAc,IAAI,IAAA,mBAAQ,EAAC,IAAA,mBAAQ,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IACH,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC;AANW,QAAA,iBAAiB,qBAM5B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ObjectGraph } from '../../graph/ObjectGraph';
|
|
2
2
|
import { Constructable } from '../../types';
|
|
3
3
|
export default class HookInjector {
|
|
4
|
-
inject<Args, Result>(hook: (args: Args) => Result,
|
|
4
|
+
inject<Args, Result>(hook: (args: Args) => Result, keyOrGraph: string | Constructable<ObjectGraph>): (args?: Partial<Args>) => Result;
|
|
5
5
|
}
|
|
6
6
|
//# sourceMappingURL=HookInjector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HookInjector.d.ts","sourceRoot":"","sources":["../../../../src/injectors/hooks/HookInjector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,MAAM,CAAC,IAAI,EAAE,MAAM,EACjB,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,EAC5B,
|
|
1
|
+
{"version":3,"file":"HookInjector.d.ts","sourceRoot":"","sources":["../../../../src/injectors/hooks/HookInjector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,MAAM,CAAC,IAAI,EAAE,MAAM,EACjB,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,EAC5B,UAAU,EAAE,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,GAC9C,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,MAAM;CAMpC"}
|
|
@@ -5,9 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const useGraph_1 = __importDefault(require("../components/useGraph"));
|
|
7
7
|
class HookInjector {
|
|
8
|
-
inject(hook,
|
|
8
|
+
inject(hook, keyOrGraph) {
|
|
9
9
|
return (args) => {
|
|
10
|
-
const graph = (0, useGraph_1.default)(
|
|
10
|
+
const graph = (0, useGraph_1.default)(keyOrGraph, hook, args);
|
|
11
11
|
return hook(new Proxy(args ?? {}, new Injector(graph)));
|
|
12
12
|
};
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HookInjector.js","sourceRoot":"","sources":["../../../../src/injectors/hooks/HookInjector.ts"],"names":[],"mappings":";;;;;AAEA,sEAA8C;AAG9C,MAAqB,YAAY;IAC/B,MAAM,CACJ,IAA4B,EAC5B,
|
|
1
|
+
{"version":3,"file":"HookInjector.js","sourceRoot":"","sources":["../../../../src/injectors/hooks/HookInjector.ts"],"names":[],"mappings":";;;;;AAEA,sEAA8C;AAG9C,MAAqB,YAAY;IAC/B,MAAM,CACJ,IAA4B,EAC5B,UAA+C;QAE/C,OAAO,CAAC,IAAoB,EAAU,EAAE;YACtC,MAAM,KAAK,GAAG,IAAA,kBAAQ,EAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC;IACJ,CAAC;CACF;AAVD,+BAUC;AAED,MAAM,QAAQ;IACQ;IAApB,YAAoB,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;IAAG,CAAC;IAEpC,GAAG,CAAC,GAAQ,EAAE,QAAgB,EAAE,QAAa;QAC3C,OAAO,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACnF,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ObjectGraph } from '../../graph/ObjectGraph';
|
|
2
2
|
import { Constructable } from '../../types';
|
|
3
|
-
export declare function injectHookWithArguments<Injected, Own, Result = {}>(hook: (args: Injected & Own) => Result,
|
|
4
|
-
export declare function injectHook<Injected, Result = {}>(hook: (args: Injected) => Result,
|
|
3
|
+
export declare function injectHookWithArguments<Injected, Own, Result = {}>(hook: (args: Injected & Own) => Result, keyOrGraph: string | Constructable<ObjectGraph>): (props: Own & Partial<Injected>) => Result;
|
|
4
|
+
export declare function injectHook<Injected, Result = {}>(hook: (args: Injected) => Result, keyOrGraph: string | Constructable<ObjectGraph>): (props?: Partial<Injected>) => Result;
|
|
5
5
|
//# sourceMappingURL=InjectHook.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InjectHook.d.ts","sourceRoot":"","sources":["../../../../src/injectors/hooks/InjectHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAU5C,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,EAChE,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,GAAG,KAAK,MAAM,EACtC,
|
|
1
|
+
{"version":3,"file":"InjectHook.d.ts","sourceRoot":"","sources":["../../../../src/injectors/hooks/InjectHook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAU5C,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,EAChE,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,GAAG,KAAK,MAAM,EACtC,UAAU,EAAE,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,GAC9C,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,MAAM,CAE5C;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,EAAE,EAC9C,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,EAChC,UAAU,EAAE,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC,GAC9C,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,MAAM,CAEvC"}
|
|
@@ -11,10 +11,10 @@ const hookInjector = new HookInjector_1.default();
|
|
|
11
11
|
// As a workaround, we provide two injection functions with an almost identical signature.
|
|
12
12
|
// 1. injectHookWithArguments: Should be used when a hook requires parameters in addition to the injected dependencies.
|
|
13
13
|
// 2. injectHook: Should be used when a hook does not require parameters.
|
|
14
|
-
function injectHookWithArguments(hook,
|
|
15
|
-
return hookInjector.inject(hook,
|
|
14
|
+
function injectHookWithArguments(hook, keyOrGraph) {
|
|
15
|
+
return hookInjector.inject(hook, keyOrGraph);
|
|
16
16
|
}
|
|
17
|
-
function injectHook(hook,
|
|
18
|
-
return hookInjector.inject(hook,
|
|
17
|
+
function injectHook(hook, keyOrGraph) {
|
|
18
|
+
return hookInjector.inject(hook, keyOrGraph);
|
|
19
19
|
}
|
|
20
20
|
//# sourceMappingURL=InjectHook.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InjectHook.js","sourceRoot":"","sources":["../../../../src/injectors/hooks/InjectHook.ts"],"names":[],"mappings":";;;;;AAWA,0DAKC;AAED,gCAKC;AArBD,kEAA0C;AAE1C,MAAM,YAAY,GAAG,IAAI,sBAAY,EAAE,CAAC;AAExC,6HAA6H;AAC7H,0FAA0F;AAC1F,uHAAuH;AACvH,yEAAyE;AAEzE,SAAgB,uBAAuB,CACrC,IAAsC,EACtC,
|
|
1
|
+
{"version":3,"file":"InjectHook.js","sourceRoot":"","sources":["../../../../src/injectors/hooks/InjectHook.ts"],"names":[],"mappings":";;;;;AAWA,0DAKC;AAED,gCAKC;AArBD,kEAA0C;AAE1C,MAAM,YAAY,GAAG,IAAI,sBAAY,EAAE,CAAC;AAExC,6HAA6H;AAC7H,0FAA0F;AAC1F,uHAAuH;AACvH,yEAAyE;AAEzE,SAAgB,uBAAuB,CACrC,IAAsC,EACtC,UAA+C;IAE/C,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAA+C,CAAC;AAC7F,CAAC;AAED,SAAgB,UAAU,CACxB,IAAgC,EAChC,UAA+C;IAE/C,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isString.d.ts","sourceRoot":"","sources":["../../../src/utils/isString.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAEpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isString.js","sourceRoot":"","sources":["../../../src/utils/isString.ts"],"names":[],"mappings":";;AAAA,4BAEC;AAFD,SAAgB,QAAQ,CAAC,KAAU;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACnC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reflect.d.ts","sourceRoot":"","sources":["../../../src/utils/reflect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reflect.d.ts","sourceRoot":"","sources":["../../../src/utils/reflect.ts"],"names":[],"mappings":"AAUA,wBAAgB,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,QASlE;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,OAGnD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,WAGnD"}
|
|
@@ -2,7 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.defineMetadata = defineMetadata;
|
|
4
4
|
exports.getMetadata = getMetadata;
|
|
5
|
-
|
|
5
|
+
exports.hasMetadata = hasMetadata;
|
|
6
|
+
const getGlobal_1 = require("./getGlobal");
|
|
7
|
+
function getStore() {
|
|
8
|
+
const global = (0, getGlobal_1.getGlobal)();
|
|
9
|
+
global.__metadataStore = global.__metadataStore || new WeakMap();
|
|
10
|
+
return global.__metadataStore;
|
|
11
|
+
}
|
|
12
|
+
const metadataStore = getStore();
|
|
6
13
|
function defineMetadata(target, key, value) {
|
|
7
14
|
let metadata = metadataStore.get(target);
|
|
8
15
|
if (!metadata) {
|
|
@@ -15,4 +22,8 @@ function getMetadata(target, key) {
|
|
|
15
22
|
const metadata = metadataStore.get(target);
|
|
16
23
|
return metadata ? metadata[key] : undefined;
|
|
17
24
|
}
|
|
25
|
+
function hasMetadata(target, key) {
|
|
26
|
+
const metadata = metadataStore.get(target);
|
|
27
|
+
return metadata ? metadata[key] !== undefined : false;
|
|
28
|
+
}
|
|
18
29
|
//# sourceMappingURL=reflect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reflect.js","sourceRoot":"","sources":["../../../src/utils/reflect.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"reflect.js","sourceRoot":"","sources":["../../../src/utils/reflect.ts"],"names":[],"mappings":";;AAUA,wCASC;AAED,kCAGC;AAED,kCAGC;AA7BD,2CAAwC;AAExC,SAAS,QAAQ;IACf,MAAM,MAAM,GAAG,IAAA,qBAAS,GAAE,CAAC;IAC3B,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,IAAI,OAAO,EAAE,CAAC;IACjE,OAAO,MAAM,CAAC,eAAe,CAAC;AAChC,CAAC;AAED,MAAM,aAAa,GAAG,QAAQ,EAAE,CAAC;AAEjC,SAAgB,cAAc,CAAC,MAAW,EAAE,GAAW,EAAE,KAAU;IACjE,IAAI,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEzC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,EAAE,CAAC;QACd,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACxB,CAAC;AAED,SAAgB,WAAW,CAAC,MAAW,EAAE,GAAW;IAClD,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC;AAED,SAAgB,WAAW,CAAC,MAAW,EAAE,GAAW;IAClD,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AACxD,CAAC"}
|
|
@@ -15,9 +15,9 @@ class LifecycleBoundGraph extends src_1.ObjectGraph {
|
|
|
15
15
|
}
|
|
16
16
|
@(0, src_1.provides)()
|
|
17
17
|
computedFromProps() {
|
|
18
|
-
return this.props.stringFromProps
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
return this.props.stringFromProps ?
|
|
19
|
+
`A string passed via props: ${this.props.stringFromProps}` :
|
|
20
|
+
'stringFromProps does not exist';
|
|
21
21
|
}
|
|
22
22
|
@(0, src_1.provides)()
|
|
23
23
|
doesNotRequireProps() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LifecycleBoundGraph.js","sourceRoot":"","sources":["../../../test/fixtures/LifecycleBoundGraph.ts"],"names":[],"mappings":";;;AAAA,mCAAyD;AACzD,wEAAqE;AAIrE,CAAC,IAAA,+BAAc,GAAE;AAAC,CAAC,IAAA,WAAK,GAAE;MACb,mBAAoB,SAAQ,iBAAkB;IACzD,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;IAChB,KAAK,CAAQ;IAErB,YAAY,KAAY;QACtB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,mBAAmB,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;IAED,CAAC,IAAA,cAAQ,GAAE;IACX,iBAAiB;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe
|
|
1
|
+
{"version":3,"file":"LifecycleBoundGraph.js","sourceRoot":"","sources":["../../../test/fixtures/LifecycleBoundGraph.ts"],"names":[],"mappings":";;;AAAA,mCAAyD;AACzD,wEAAqE;AAIrE,CAAC,IAAA,+BAAc,GAAE;AAAC,CAAC,IAAA,WAAK,GAAE;MACb,mBAAoB,SAAQ,iBAAkB;IACzD,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;IAChB,KAAK,CAAQ;IAErB,YAAY,KAAY;QACtB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,mBAAmB,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;IAED,CAAC,IAAA,cAAQ,GAAE;IACX,iBAAiB;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACjC,8BAA8B,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;YAC5D,gCAAgC,CAAC;IACrC,CAAC;IAED,CAAC,IAAA,cAAQ,GAAE;IACX,mBAAmB;QACjB,OAAO,sCAAsC,CAAC;IAChD,CAAC;;AArBH,kDAsBC"}
|
package/eslint.config.mjs
CHANGED
|
@@ -48,6 +48,7 @@ export default eslintTs.config(
|
|
|
48
48
|
"@typescript-eslint/no-explicit-any": "off",
|
|
49
49
|
"@typescript-eslint/no-unsafe-member-access": "off",
|
|
50
50
|
"@typescript-eslint/no-empty-object-type": "off",
|
|
51
|
+
"@typescript-eslint/no-require-imports": "off",
|
|
51
52
|
"@typescript-eslint/no-unsafe-assignment": "off",
|
|
52
53
|
"@typescript-eslint/no-unsafe-argument": "off",
|
|
53
54
|
"@typescript-eslint/no-unsafe-return": "off",
|
|
@@ -86,7 +87,7 @@ export default eslintTs.config(
|
|
|
86
87
|
}],
|
|
87
88
|
"@stylistic/max-statements-per-line": ["error", { "max": 2 }],
|
|
88
89
|
"@stylistic/no-extra-semi": "error",
|
|
89
|
-
|
|
90
|
+
"@stylistic/operator-linebreak": ["error", "before", { "overrides": { "?": "after", ":": "after" } }],
|
|
90
91
|
"@stylistic/lines-between-class-members": ["error", "always", {
|
|
91
92
|
exceptAfterSingleLine: true,
|
|
92
93
|
}],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-obsidian",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.8",
|
|
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",
|
|
@@ -21,14 +21,14 @@
|
|
|
21
21
|
"react": "*"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@babel/core": "^7.25.
|
|
25
|
-
"@babel/eslint-parser": "^7.25.
|
|
26
|
-
"@babel/plugin-proposal-decorators": "^7.
|
|
27
|
-
"@babel/plugin-transform-class-properties": "^7.25.
|
|
28
|
-
"@babel/preset-env": "^7.25.
|
|
29
|
-
"@babel/preset-react": "^7.
|
|
30
|
-
"@babel/preset-typescript": "^7.
|
|
31
|
-
"@babel/types": "^7.25.
|
|
24
|
+
"@babel/core": "^7.25.8",
|
|
25
|
+
"@babel/eslint-parser": "^7.25.8",
|
|
26
|
+
"@babel/plugin-proposal-decorators": "^7.25.7",
|
|
27
|
+
"@babel/plugin-transform-class-properties": "^7.25.7",
|
|
28
|
+
"@babel/preset-env": "^7.25.8",
|
|
29
|
+
"@babel/preset-react": "^7.25.7",
|
|
30
|
+
"@babel/preset-typescript": "^7.25.7",
|
|
31
|
+
"@babel/types": "^7.25.8",
|
|
32
32
|
"@eslint/compat": "^1.1.1",
|
|
33
33
|
"@eslint/eslintrc": "^3.1.0",
|
|
34
34
|
"@eslint/js": "^9.9.1",
|
|
@@ -44,8 +44,11 @@
|
|
|
44
44
|
"@typescript-eslint/parser": "^8.4.0",
|
|
45
45
|
"cross-env": "^7.0.3",
|
|
46
46
|
"eslint": "^9.9.1",
|
|
47
|
+
"eslint-plugin-import": "^2.25.2",
|
|
48
|
+
"eslint-plugin-import-newlines": "^1.1.5",
|
|
47
49
|
"eslint-plugin-jest": "^28.8.3",
|
|
48
|
-
"eslint-plugin-
|
|
50
|
+
"eslint-plugin-jest-formatting": "^3.1.0",
|
|
51
|
+
"eslint-plugin-obsidian": "3.0.0-alpha.8",
|
|
49
52
|
"eslint-plugin-react": "^7.35.0",
|
|
50
53
|
"eslint-plugin-react-hooks": "^4.6.2",
|
|
51
54
|
"eslint-plugin-unused-imports": "^4.1.3",
|
package/src/Obsidian.ts
CHANGED
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import graphRegistry from './graph/registry/GraphRegistry';
|
|
2
2
|
import { ObjectGraph } from './graph/ObjectGraph';
|
|
3
|
-
import { GraphInternals, ServiceLocator } from './types';
|
|
3
|
+
import { GraphInternals, ServiceLocator, type Constructable } from './types';
|
|
4
4
|
import { GraphMiddleware } from './graph/registry/GraphMiddleware';
|
|
5
5
|
import lateInjector from './injectors/class/LateInjector';
|
|
6
6
|
import serviceLocatorFactory from './graph/ServiceLocatorFactory';
|
|
7
7
|
|
|
8
8
|
export default class Obsidian {
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
registerGraph(key: string, generator: () => Constructable<ObjectGraph>) {
|
|
10
|
+
graphRegistry.registerGraphGenerator(key, generator);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
obtain<T extends ObjectGraph<P>, P = unknown>(
|
|
14
|
+
keyOrGraph: string | (new(...args: P[]) => T),
|
|
11
15
|
props?: P,
|
|
12
16
|
): ServiceLocator<Omit<T, GraphInternals>> {
|
|
13
|
-
return serviceLocatorFactory.fromGraph(
|
|
17
|
+
return serviceLocatorFactory.fromGraph(keyOrGraph, props);
|
|
14
18
|
}
|
|
15
19
|
|
|
16
|
-
inject<T extends object>(target: T,
|
|
17
|
-
return lateInjector.inject(target,
|
|
20
|
+
inject<T extends object>(target: T, keyOrGraph?: string | ObjectGraph) {
|
|
21
|
+
return lateInjector.inject(target, keyOrGraph);
|
|
18
22
|
}
|
|
19
23
|
|
|
20
24
|
addGraphMiddleware(middleware: GraphMiddleware) {
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import InjectionMetadata from '../../injectors/class/InjectionMetadata';
|
|
2
2
|
|
|
3
3
|
export function inject<This, Return>(name?: string) {
|
|
4
|
-
return (
|
|
5
|
-
_target: undefined,
|
|
6
|
-
context: ClassFieldDecoratorContext<This, Return>,
|
|
7
|
-
) => {
|
|
4
|
+
return (_target: undefined, context: ClassFieldDecoratorContext<This, Return>) => {
|
|
8
5
|
context.addInitializer(function (this: This) {
|
|
9
6
|
const metadata = new InjectionMetadata();
|
|
10
7
|
metadata.savePropertyMetadata((this as object).constructor, name!);
|
|
@@ -3,6 +3,6 @@ import { Graph } from '../../graph/Graph';
|
|
|
3
3
|
import graphRegistry from '../../graph/registry/GraphRegistry';
|
|
4
4
|
import ClassInjector from '../../injectors/class/ClassInjector';
|
|
5
5
|
|
|
6
|
-
export function injectable(
|
|
7
|
-
return new ClassInjector(graphRegistry).inject(
|
|
6
|
+
export function injectable(keyOrGraph: string | Constructable<Graph>): any {
|
|
7
|
+
return new ClassInjector(graphRegistry).inject(keyOrGraph);
|
|
8
8
|
}
|
package/src/graph/ObjectGraph.ts
CHANGED
|
@@ -4,14 +4,22 @@ import { Graph } from './Graph';
|
|
|
4
4
|
import PropertyRetriever from './PropertyRetriever';
|
|
5
5
|
import { Constructable } from '../types';
|
|
6
6
|
import { CircularDependenciesDetector } from './CircularDependenciesDetector';
|
|
7
|
+
import { defineMetadata, getMetadata, hasMetadata } from '../utils/reflect';
|
|
7
8
|
|
|
8
9
|
export abstract class ObjectGraph<T = unknown> implements Graph {
|
|
9
10
|
private propertyRetriever = new PropertyRetriever(this);
|
|
10
|
-
|
|
11
|
+
|
|
12
|
+
get name(): string {
|
|
13
|
+
if (hasMetadata(this.constructor, 'memoizedName')) {
|
|
14
|
+
return getMetadata(this.constructor, 'memoizedName');
|
|
15
|
+
}
|
|
16
|
+
const name = uniqueId(this.constructor.name);
|
|
17
|
+
defineMetadata(this.constructor, 'memoizedName', name);
|
|
18
|
+
return name;
|
|
19
|
+
}
|
|
11
20
|
|
|
12
21
|
constructor(protected _props?: T) {
|
|
13
22
|
bindProviders(this);
|
|
14
|
-
this.name = uniqueId(this.constructor.name);
|
|
15
23
|
}
|
|
16
24
|
|
|
17
25
|
retrieve<Dependency>(
|
|
@@ -3,8 +3,8 @@ import { Constructable, ServiceLocator as ServiceLocatorType } from '../types';
|
|
|
3
3
|
import graphRegistry from './registry/GraphRegistry';
|
|
4
4
|
|
|
5
5
|
export default class ServiceLocatorFactory {
|
|
6
|
-
static fromGraph<T extends ObjectGraph<P>, P = any>(
|
|
7
|
-
const resolved = graphRegistry.resolve(
|
|
6
|
+
static fromGraph<T extends ObjectGraph<P>, P = any>(keyOrGraph: string | Constructable<T>, props?: P) {
|
|
7
|
+
const resolved = graphRegistry.resolve(keyOrGraph, 'serviceLocator', props);
|
|
8
8
|
const wrapped = new Proxy(resolved, {
|
|
9
9
|
get(_target: any, property: string, receiver: any) {
|
|
10
10
|
return () => resolved.retrieve(property, receiver);
|