react-obsidian 0.0.6 → 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.
Files changed (83) hide show
  1. package/.eslintrc.json +3 -2
  2. package/README.md +7 -0
  3. package/dist/src/Obsidian.d.ts +2 -2
  4. package/dist/src/Obsidian.d.ts.map +1 -1
  5. package/dist/src/ProvidedPropertiesStore.d.ts +1 -1
  6. package/dist/src/ProvidedPropertiesStore.d.ts.map +1 -1
  7. package/dist/src/decorators/Graph.d.ts +2 -2
  8. package/dist/src/decorators/Graph.d.ts.map +1 -1
  9. package/dist/src/decorators/Graph.js +2 -1
  10. package/dist/src/decorators/Graph.js.map +1 -1
  11. package/dist/src/decorators/Memoize.d.ts +3 -0
  12. package/dist/src/decorators/Memoize.d.ts.map +1 -0
  13. package/dist/src/decorators/Memoize.js +21 -0
  14. package/dist/src/decorators/Memoize.js.map +1 -0
  15. package/dist/src/decorators/injectClass.d.ts +1 -1
  16. package/dist/src/decorators/injectClass.d.ts.map +1 -1
  17. package/dist/src/decorators/provides/Provides.d.ts +3 -3
  18. package/dist/src/decorators/provides/Provides.d.ts.map +1 -1
  19. package/dist/src/decorators/provides/Provides.js +2 -1
  20. package/dist/src/decorators/provides/Provides.js.map +1 -1
  21. package/dist/src/graph/Graph.d.ts +1 -2
  22. package/dist/src/graph/Graph.d.ts.map +1 -1
  23. package/dist/src/graph/ObjectGraph.d.ts +2 -2
  24. package/dist/src/graph/ObjectGraph.d.ts.map +1 -1
  25. package/dist/src/graph/ObjectGraph.js +19 -2
  26. package/dist/src/graph/ObjectGraph.js.map +1 -1
  27. package/dist/src/graph/PropertyRetriever.d.ts +1 -1
  28. package/dist/src/graph/PropertyRetriever.d.ts.map +1 -1
  29. package/dist/src/graph/registry/DefaultGraphResolver.d.ts +4 -4
  30. package/dist/src/graph/registry/DefaultGraphResolver.d.ts.map +1 -1
  31. package/dist/src/graph/registry/DefaultGraphResolver.js +2 -2
  32. package/dist/src/graph/registry/DefaultGraphResolver.js.map +1 -1
  33. package/dist/src/graph/registry/GraphMiddleware.d.ts +3 -10
  34. package/dist/src/graph/registry/GraphMiddleware.d.ts.map +1 -1
  35. package/dist/src/graph/registry/GraphMiddleware.js +20 -17
  36. package/dist/src/graph/registry/GraphMiddleware.js.map +1 -1
  37. package/dist/src/graph/registry/GraphMiddlewareChain.d.ts +6 -6
  38. package/dist/src/graph/registry/GraphMiddlewareChain.d.ts.map +1 -1
  39. package/dist/src/graph/registry/GraphMiddlewareChain.js.map +1 -1
  40. package/dist/src/graph/registry/GraphRegistry.d.ts +3 -3
  41. package/dist/src/graph/registry/GraphRegistry.d.ts.map +1 -1
  42. package/dist/src/graph/registry/GraphRegistry.js.map +1 -1
  43. package/dist/src/graph/registry/Middleware.d.ts +11 -0
  44. package/dist/src/graph/registry/Middleware.d.ts.map +1 -0
  45. package/dist/src/graph/registry/Middleware.js +25 -0
  46. package/dist/src/graph/registry/Middleware.js.map +1 -0
  47. package/dist/src/index.d.ts +13 -13
  48. package/dist/src/index.d.ts.map +1 -1
  49. package/dist/src/index.js +15 -12
  50. package/dist/src/index.js.map +1 -1
  51. package/dist/src/injectors/components/ComponentInjector.d.ts +1 -1
  52. package/dist/src/injectors/components/ComponentInjector.d.ts.map +1 -1
  53. package/dist/src/injectors/components/PropsInjector.d.ts +1 -1
  54. package/dist/src/injectors/components/PropsInjector.d.ts.map +1 -1
  55. package/dist/src/injectors/components/useGraph.d.ts +1 -1
  56. package/dist/src/injectors/components/useGraph.d.ts.map +1 -1
  57. package/dist/src/injectors/hooks/HookInjector.d.ts +1 -1
  58. package/dist/src/injectors/hooks/HookInjector.d.ts.map +1 -1
  59. package/dist/testkit/index.d.ts +1 -2
  60. package/dist/testkit/index.d.ts.map +1 -1
  61. package/dist/testkit/index.js +1 -2
  62. package/dist/testkit/index.js.map +1 -1
  63. package/package.json +1 -1
  64. package/src/Obsidian.ts +2 -2
  65. package/src/ProvidedPropertiesStore.ts +1 -1
  66. package/src/decorators/Graph.ts +2 -2
  67. package/src/decorators/Memoize.ts +18 -0
  68. package/src/decorators/injectClass.ts +1 -1
  69. package/src/decorators/provides/Provides.ts +2 -3
  70. package/src/graph/Graph.ts +1 -3
  71. package/src/graph/ObjectGraph.ts +7 -3
  72. package/src/graph/PropertyRetriever.ts +1 -1
  73. package/src/graph/registry/DefaultGraphResolver.ts +4 -4
  74. package/src/graph/registry/GraphMiddleware.ts +3 -23
  75. package/src/graph/registry/GraphMiddlewareChain.ts +7 -7
  76. package/src/graph/registry/GraphRegistry.ts +4 -4
  77. package/src/graph/registry/Middleware.ts +23 -0
  78. package/src/index.ts +16 -16
  79. package/src/injectors/components/ComponentInjector.tsx +1 -1
  80. package/src/injectors/components/PropsInjector.ts +1 -1
  81. package/src/injectors/components/useGraph.ts +1 -1
  82. package/src/injectors/hooks/HookInjector.ts +2 -2
  83. package/testkit/index.ts +9 -5
package/dist/src/index.js CHANGED
@@ -13,25 +13,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
13
13
  return (mod && mod.__esModule) ? mod : { "default": mod };
14
14
  };
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.injectHook = exports.injectComponent = exports.Obsidian = exports.Inject = exports.Injectable = exports.Provides = exports.ObjectGraph = exports.Graph = void 0;
17
- var Graph_1 = __importDefault(require("./decorators/Graph"));
18
- var ObjectGraph_1 = __importDefault(require("./graph/ObjectGraph"));
16
+ exports.injectHook = exports.injectComponent = exports.Obsidian = exports.GraphMiddleware = exports.Inject = exports.Injectable = exports.Provides = exports.ObjectGraph = exports.Graph = void 0;
19
17
  var ComponentInjector_1 = __importDefault(require("./injectors/components/ComponentInjector"));
20
- var Provides_1 = __importDefault(require("./decorators/provides/Provides"));
21
- var injectClass_1 = require("./decorators/injectClass");
22
18
  var Obsidian_1 = __importDefault(require("./Obsidian"));
23
19
  var HookInjector_1 = __importDefault(require("./injectors/hooks/HookInjector"));
24
20
  __exportStar(require("./types"), exports);
25
- exports.Graph = Graph_1.default;
26
- exports.ObjectGraph = ObjectGraph_1.default;
27
- exports.Provides = Provides_1.default;
28
- exports.Injectable = injectClass_1.Injectable;
29
- exports.Inject = injectClass_1.Inject;
21
+ var Graph_1 = require("./decorators/Graph");
22
+ Object.defineProperty(exports, "Graph", { enumerable: true, get: function () { return Graph_1.Graph; } });
23
+ var ObjectGraph_1 = require("./graph/ObjectGraph");
24
+ Object.defineProperty(exports, "ObjectGraph", { enumerable: true, get: function () { return ObjectGraph_1.ObjectGraph; } });
25
+ var Provides_1 = require("./decorators/provides/Provides");
26
+ Object.defineProperty(exports, "Provides", { enumerable: true, get: function () { return Provides_1.Provides; } });
27
+ var injectClass_1 = require("./decorators/injectClass");
28
+ Object.defineProperty(exports, "Injectable", { enumerable: true, get: function () { return injectClass_1.Injectable; } });
29
+ var injectClass_2 = require("./decorators/injectClass");
30
+ Object.defineProperty(exports, "Inject", { enumerable: true, get: function () { return injectClass_2.Inject; } });
31
+ var GraphMiddleware_1 = require("./graph/registry/GraphMiddleware");
32
+ Object.defineProperty(exports, "GraphMiddleware", { enumerable: true, get: function () { return GraphMiddleware_1.GraphMiddleware; } });
30
33
  exports.Obsidian = new Obsidian_1.default();
31
34
  var componentInjector = new ComponentInjector_1.default();
32
- var injectComponent = function (__Target, __Graph) { return componentInjector.inject(__Target, __Graph); };
35
+ var injectComponent = function (Target, Graph) { return componentInjector.inject(Target, Graph); };
33
36
  exports.injectComponent = injectComponent;
34
37
  var hookInjector = new HookInjector_1.default();
35
- var injectHook = function (hook, __Graph) { return hookInjector.inject(hook, __Graph); };
38
+ var injectHook = function (hook, Graph) { return hookInjector.inject(hook, Graph); };
36
39
  exports.injectHook = injectHook;
37
40
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,6DAAwC;AACxC,oEAA+C;AAC/C,+FAAyE;AACzE,4EAAuD;AACvD,wDAAwF;AACxF,wDAAmC;AACnC,gFAA0D;AAG1D,0CAAwB;AAEX,QAAA,KAAK,GAAG,eAAM,CAAC;AACf,QAAA,WAAW,GAAG,qBAAY,CAAC;AAC3B,QAAA,QAAQ,GAAG,kBAAS,CAAC;AACrB,QAAA,UAAU,GAAG,wBAAW,CAAC;AACzB,QAAA,MAAM,GAAG,oBAAO,CAAC;AACjB,QAAA,QAAQ,GAAG,IAAI,kBAAS,EAAE,CAAC;AAExC,IAAM,iBAAiB,GAAG,IAAI,2BAAiB,EAAE,CAAC;AAC3C,IAAM,eAAe,GAAG,UAC7B,QAAoC,EACpC,OAAoC,IACjC,OAAA,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,EAA3C,CAA2C,CAAC;AAHpC,QAAA,eAAe,mBAGqB;AAEjD,IAAM,YAAY,GAAG,IAAI,sBAAY,EAAE,CAAC;AACjC,IAAM,UAAU,GAAG,UACxB,IAA4B,EAC5B,OAAoC,IACjC,OAAA,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,EAAlC,CAAkC,CAAC;AAH3B,QAAA,UAAU,cAGiB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEA,+FAAyE;AACzE,wDAAmC;AACnC,gFAA0D;AAG1D,0CAAwB;AAExB,4CAA2C;AAAlC,8FAAA,KAAK,OAAA;AACd,mDAAkD;AAAzC,0GAAA,WAAW,OAAA;AAEpB,2DAA0D;AAAjD,oGAAA,QAAQ,OAAA;AACjB,wDAAsD;AAA7C,yGAAA,UAAU,OAAA;AACnB,wDAAkD;AAAzC,qGAAA,MAAM,OAAA;AACf,oEAAmE;AAA1D,kHAAA,eAAe,OAAA;AAEX,QAAA,QAAQ,GAAG,IAAI,kBAAS,EAAE,CAAC;AAExC,IAAM,iBAAiB,GAAG,IAAI,2BAAiB,EAAE,CAAC;AAC3C,IAAM,eAAe,GAAG,UAC7B,MAAkC,EAClC,KAAkC,IAC/B,OAAA,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAvC,CAAuC,CAAC;AAHhC,QAAA,eAAe,mBAGiB;AAE7C,IAAM,YAAY,GAAG,IAAI,sBAAY,EAAE,CAAC;AACjC,IAAM,UAAU,GAAG,UACxB,IAA4B,EAC5B,KAAkC,IAC/B,OAAA,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,EAAhC,CAAgC,CAAC;AAHzB,QAAA,UAAU,cAGe"}
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import 'reflect-metadata';
3
- import ObjectGraph from '../../graph/ObjectGraph';
3
+ import { ObjectGraph } from '../../graph/ObjectGraph';
4
4
  import { Constructable } from '../../types';
5
5
  export default class ComponentInjector {
6
6
  inject<P>(Target: React.FunctionComponent<P>, Graph: Constructable<ObjectGraph>): React.FunctionComponent<Partial<P>>;
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentInjector.d.ts","sourceRoot":"","sources":["../../../../src/injectors/components/ComponentInjector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,kBAAkB,CAAC;AAC1B,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAGlD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,MAAM,CAAC,CAAC,EACN,MAAM,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAClC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAChC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAMtC,OAAO,CAAC,aAAa;CAUtB"}
1
+ {"version":3,"file":"ComponentInjector.d.ts","sourceRoot":"","sources":["../../../../src/injectors/components/ComponentInjector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,MAAM,CAAC,CAAC,EACN,MAAM,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAClC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAChC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAMtC,OAAO,CAAC,aAAa;CAUtB"}
@@ -1,4 +1,4 @@
1
- import ObjectGraph from '../../graph/ObjectGraph';
1
+ import { ObjectGraph } from '../../graph/ObjectGraph';
2
2
  export default class PropsInjector<Props> {
3
3
  private graph;
4
4
  constructor(graph: ObjectGraph);
@@ -1 +1 @@
1
- {"version":3,"file":"PropsInjector.d.ts","sourceRoot":"","sources":["../../../../src/injectors/components/PropsInjector.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAElD,MAAM,CAAC,OAAO,OAAO,aAAa,CAAC,KAAK;IAC1B,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,WAAW;IAEtC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;CAQ3C"}
1
+ {"version":3,"file":"PropsInjector.d.ts","sourceRoot":"","sources":["../../../../src/injectors/components/PropsInjector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,CAAC,OAAO,OAAO,aAAa,CAAC,KAAK;IAC1B,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,WAAW;IAEtC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;CAQ3C"}
@@ -1,5 +1,5 @@
1
1
  import { Constructable } from '../../types';
2
- import ObjectGraph from '../../graph/ObjectGraph';
2
+ import { ObjectGraph } from '../../graph/ObjectGraph';
3
3
  declare const _default: <P>(Graph: Constructable<ObjectGraph>, props?: Partial<P> | undefined) => 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,WAAW,MAAM,yBAAyB,CAAC;mCAIxB,cAAc,WAAW,CAAC;AAApD,wBAOE"}
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;mCAI5B,cAAc,WAAW,CAAC;AAApD,wBAOE"}
@@ -1,4 +1,4 @@
1
- import ObjectGraph from '../../graph/ObjectGraph';
1
+ import { ObjectGraph } from '../../graph/ObjectGraph';
2
2
  import { Constructable } from '../../types';
3
3
  export default class HookInjector {
4
4
  inject<Args, Result>(hook: (args: Args) => Result, Graph: Constructable<ObjectGraph>): (args?: Partial<Args>) => Result;
@@ -1 +1 @@
1
- {"version":3,"file":"HookInjector.d.ts","sourceRoot":"","sources":["../../../../src/injectors/hooks/HookInjector.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAGlD,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,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAChC,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,MAAM;CAMpC"}
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,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAChC,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,MAAM;CAMpC"}
@@ -1,5 +1,4 @@
1
- import ObjectGraph from '../src/graph/Graph';
2
- import { Constructable } from '../src';
1
+ import { ObjectGraph, Constructable } from '../src';
3
2
  declare class Index {
4
3
  mockGraphs(graphNameToGraph: Record<string, Constructable<ObjectGraph>>): void;
5
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../testkit/index.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAY,MAAM,QAAQ,CAAC;AAMjD,cAAM,KAAK;IACT,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;CAYxE;;AAED,wBAA2B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../testkit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EAId,MAAM,QAAQ,CAAC;AAMhB,cAAM,KAAK;IACT,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;CAYxE;;AAED,wBAA2B"}
@@ -15,7 +15,6 @@ var __extends = (this && this.__extends) || (function () {
15
15
  };
16
16
  })();
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- var GraphMiddleware_1 = require("../src/graph/registry/GraphMiddleware");
19
18
  var src_1 = require("../src");
20
19
  beforeEach(function () {
21
20
  src_1.Obsidian.clearGraphMiddlewares();
@@ -37,7 +36,7 @@ var Index = /** @class */ (function () {
37
36
  return resolveChain.proceed(Graph, props);
38
37
  };
39
38
  return class_1;
40
- }(GraphMiddleware_1.GraphMiddleware))();
39
+ }(src_1.GraphMiddleware))();
41
40
  src_1.Obsidian.addGraphMiddleware(graphMiddleware);
42
41
  };
43
42
  return Index;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../testkit/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,yEAAsF;AAEtF,8BAAiD;AAEjD,UAAU,CAAC;IACT,cAAQ,CAAC,qBAAqB,EAAE,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH;IAAA;IAaA,CAAC;IAZC,0BAAU,GAAV,UAAW,gBAA4D;QACrE,IAAM,eAAe,GAAG;YAAkB,2BAAe;YAA7B;;YAQ5B,CAAC;YAPC,yBAAO,GAAP,UAAsC,YAA0B,EAAE,KAAuB,EAAE,KAAa;gBACtG,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;oBAChC,IAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC9C,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAiB,CAAC;iBAC5C;gBACD,OAAO,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC5C,CAAC;YACH,cAAC;QAAD,CAAC,AAR2B,CAAc,iCAAe,IAQtD,CAAC;QACJ,cAAQ,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAC/C,CAAC;IACH,YAAC;AAAD,CAAC,AAbD,IAaC;AAED,kBAAe,IAAI,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../testkit/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,8BAMgB;AAEhB,UAAU,CAAC;IACT,cAAQ,CAAC,qBAAqB,EAAE,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH;IAAA;IAaA,CAAC;IAZC,0BAAU,GAAV,UAAW,gBAA4D;QACrE,IAAM,eAAe,GAAG;YAAkB,2BAAe;YAA7B;;YAQ5B,CAAC;YAPC,yBAAO,GAAP,UAAe,YAAuC,EAAE,KAAiC,EAAE,KAAa;gBACtG,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;oBAChC,IAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC9C,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;iBAC5B;gBACD,OAAO,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC5C,CAAC;YACH,cAAC;QAAD,CAAC,AAR2B,CAAc,qBAAe,IAQtD,CAAC;QACJ,cAAQ,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAC/C,CAAC;IACH,YAAC;AAAD,CAAC,AAbD,IAaC;AAED,kBAAe,IAAI,KAAK,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-obsidian",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "description": "Dependency injection framework for React and React Native applications",
5
5
  "main": "src/index.ts",
6
6
  "directories": {
package/src/Obsidian.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import graphRegistry from './graph/registry/GraphRegistry';
2
- import ObjectGraph from './graph/ObjectGraph';
3
- import { GraphMiddleware } from './graph/registry/GraphMiddleware';
2
+ import { ObjectGraph } from './graph/ObjectGraph';
4
3
  import { Constructable, GraphInternals, ServiceLocator } from './types';
4
+ import { GraphMiddleware } from './graph/registry/GraphMiddleware';
5
5
 
6
6
  export default class Obsidian {
7
7
  obtain<T extends ObjectGraph<P>, P = any>(
@@ -1,5 +1,5 @@
1
1
  import GraphProperties from './GraphProperties';
2
- import Graph from './graph/Graph';
2
+ import { Graph } from './graph/Graph';
3
3
 
4
4
  class ProvidedPropertiesStore {
5
5
  private readonly providedPropertiesForGraph: Map<string, GraphProperties> = new Map();
@@ -1,14 +1,14 @@
1
1
  import { Constructable, Scope } from '../types';
2
2
  import 'reflect-metadata';
3
3
  import graphRegistry from '../graph/registry/GraphRegistry';
4
- import ObjectGraph from '../graph/ObjectGraph';
4
+ import { ObjectGraph } from '../graph/ObjectGraph';
5
5
 
6
6
  interface GraphParams {
7
7
  scope: Scope | undefined;
8
8
  subgraphs: Constructable<ObjectGraph>[];
9
9
  }
10
10
 
11
- export default function Graph({
11
+ export function Graph({
12
12
  scope,
13
13
  subgraphs = [],
14
14
  }: Partial<GraphParams> = {}) {
@@ -0,0 +1,18 @@
1
+ /* eslint-disable no-param-reassign */
2
+ import 'reflect-metadata';
3
+
4
+ export default function Memoize() {
5
+ return function provide(_Clazz: any, propertyKey: string, descriptor: PropertyDescriptor) {
6
+ const originalGet = descriptor.get!;
7
+ descriptor.get = function get() {
8
+ const key = `memoized${propertyKey}`;
9
+ if (Reflect.hasMetadata(key, this)) {
10
+ return Reflect.getMetadata(key, this);
11
+ }
12
+ const value = originalGet.call(this);
13
+ Reflect.defineMetadata(key, value, this);
14
+ return value;
15
+ };
16
+ return descriptor;
17
+ };
18
+ }
@@ -1,6 +1,6 @@
1
1
  import { Constructable } from '../types';
2
2
  import graphRegistry from '../graph/registry/GraphRegistry';
3
- import ObjectGraph from '../graph/ObjectGraph';
3
+ import { ObjectGraph } from '../graph/ObjectGraph';
4
4
 
5
5
  const injectionMetadataKey = 'injectionMetadata';
6
6
 
@@ -1,5 +1,5 @@
1
1
  import { Scope } from '../../types';
2
- import Graph from '../../graph/Graph';
2
+ import { Graph } from '../../graph/Graph';
3
3
  import providedPropertiesStore from '../../ProvidedPropertiesStore';
4
4
  import makeSingleton from './PropertyDescriptorToSingleton';
5
5
 
@@ -8,10 +8,9 @@ interface ProvidesParams {
8
8
  name: string;
9
9
  }
10
10
 
11
- function Provides({ name }: Partial<ProvidesParams> = {}) {
11
+ export function Provides({ name }: Partial<ProvidesParams> = {}) {
12
12
  return function provide(graph: Graph, propertyKey: string, descriptor: PropertyDescriptor) {
13
13
  providedPropertiesStore.set(graph, propertyKey, name!);
14
14
  return makeSingleton(descriptor);
15
15
  };
16
16
  }
17
- export default Provides;
@@ -1,7 +1,5 @@
1
1
  import PropertyRetrieverDelegate from './PropertyRetrieverDelegate';
2
2
 
3
- interface Graph extends PropertyRetrieverDelegate {
3
+ export interface Graph extends PropertyRetrieverDelegate {
4
4
  get name(): string;
5
5
  }
6
-
7
- export default Graph;
@@ -1,13 +1,17 @@
1
+ import { uniqueId } from 'lodash';
2
+ import Memoize from '../decorators/Memoize';
1
3
  import { Scope } from '../types';
2
- import Graph from './Graph';
4
+ import { Graph } from './Graph';
3
5
  import PropertyRetriever from './PropertyRetriever';
4
6
 
5
- export default abstract class ObjectGraph<T = unknown> implements Graph {
7
+ export abstract class ObjectGraph<T = unknown> implements Graph {
6
8
  // TODO? rename scope to singleInstance
7
9
  public scope!: Scope;
8
10
  private propertyRetriever = new PropertyRetriever(this);
11
+
12
+ @Memoize()
9
13
  get name(): string {
10
- return this.constructor.name;
14
+ return uniqueId(this.constructor.name);
11
15
  }
12
16
 
13
17
  // eslint-disable-next-line no-useless-constructor, no-unused-vars, no-empty-function
@@ -1,5 +1,5 @@
1
1
  import graphRegistry from './registry/GraphRegistry';
2
- import Graph from './Graph';
2
+ import { Graph } from './Graph';
3
3
  import providedPropertiesStore from '../ProvidedPropertiesStore';
4
4
 
5
5
  export default class PropertyRetriever {
@@ -1,9 +1,9 @@
1
1
  import { Constructable } from '../../types';
2
- import Graph from '../Graph';
3
- import { GraphMiddleware, ResolveChain } from './GraphMiddleware';
2
+ import { Graph } from '../Graph';
3
+ import { Middleware, ResolveChain } from './Middleware';
4
4
 
5
- export default class DefaultGraphMiddleware extends GraphMiddleware {
6
- resolve<T extends Graph, Props>(_resolveChain: ResolveChain, Graph: Constructable<T>, props?: Props): T {
5
+ export default class DefaultGraphMiddleware<T extends Graph> extends Middleware<T> {
6
+ resolve<Props>(_resolveChain: ResolveChain<T>, Graph: Constructable<T>, props?: Props): T {
7
7
  return new Graph(props);
8
8
  }
9
9
  }
@@ -1,24 +1,4 @@
1
- import { Constructable } from '../../types';
2
- import Graph from '../Graph';
1
+ import { ObjectGraph } from '../ObjectGraph';
2
+ import { Middleware } from './Middleware';
3
3
 
4
- export abstract class GraphMiddleware {
5
- private next!: GraphMiddleware;
6
-
7
- public setNext(next: GraphMiddleware) {
8
- this.next = next;
9
- }
10
-
11
- public get resolveChain(): ResolveChain {
12
- return {
13
- proceed: <T extends Graph, Props>(Graph: Constructable<T>, props?: Props): T => {
14
- return this.next.resolve(this.next.resolveChain, Graph, props);
15
- },
16
- };
17
- }
18
-
19
- abstract resolve<T extends Graph, Props>(resolveChain: ResolveChain, Graph: Constructable<T>, props?: Props): T;
20
- }
21
-
22
- export interface ResolveChain {
23
- proceed<T extends Graph, Props>(Graph: Constructable<T>, props?: Props): T;
24
- }
4
+ export abstract class GraphMiddleware extends Middleware<ObjectGraph> { }
@@ -1,20 +1,20 @@
1
1
  import { Constructable } from '../../types';
2
- import Graph from '../Graph';
2
+ import { Graph } from '../Graph';
3
3
  import DefaultGraphMiddleware from './DefaultGraphResolver';
4
- import { GraphMiddleware } from './GraphMiddleware';
4
+ import { Middleware } from './Middleware';
5
5
 
6
- export default class GraphMiddlewareChain {
7
- private middlewares: GraphMiddleware[];
6
+ export default class GraphMiddlewareChain<T extends Graph> {
7
+ private middlewares: Middleware<T>[];
8
8
 
9
- constructor(defaultMiddleware: GraphMiddleware = new DefaultGraphMiddleware()) {
9
+ constructor(defaultMiddleware: Middleware<T> = new DefaultGraphMiddleware()) {
10
10
  this.middlewares = [defaultMiddleware];
11
11
  }
12
12
 
13
- resolve<T extends Graph>(Graph: Constructable<T>, props?: any): T {
13
+ resolve(Graph: Constructable<T>, props?: any): T {
14
14
  return this.middlewares[0].resolve(this.middlewares[0].resolveChain, Graph, props);
15
15
  }
16
16
 
17
- add(middleware: GraphMiddleware) {
17
+ add(middleware: Middleware<T>) {
18
18
  this.middlewares.unshift(middleware);
19
19
  this.updateResolveChain();
20
20
  }
@@ -1,6 +1,6 @@
1
1
  import { Constructable, Scope } from '../../types';
2
- import Graph from '../Graph';
3
- import { GraphMiddleware } from './GraphMiddleware';
2
+ import { Graph } from '../Graph';
3
+ import { Middleware } from './Middleware';
4
4
  import GraphMiddlewareChain from './GraphMiddlewareChain';
5
5
 
6
6
  class GraphRegistry {
@@ -49,7 +49,7 @@ class GraphRegistry {
49
49
  }
50
50
  const graph = this.graphMiddlewares.resolve(Graph, props);
51
51
  this.set(Graph, graph);
52
- return graph;
52
+ return graph as T;
53
53
  }
54
54
 
55
55
  clear(graph: Graph) {
@@ -58,7 +58,7 @@ class GraphRegistry {
58
58
  this.constructorToInstance.delete(Graph);
59
59
  }
60
60
 
61
- addGraphMiddleware(middleware: GraphMiddleware) {
61
+ addGraphMiddleware(middleware: Middleware<Graph>) {
62
62
  this.graphMiddlewares.add(middleware);
63
63
  }
64
64
 
@@ -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,30 +1,30 @@
1
1
  import React from 'react';
2
- import _Graph from './decorators/Graph';
3
- import _ObjectGraph from './graph/ObjectGraph';
2
+ import { ObjectGraph as _ObjectGraph } from './graph/ObjectGraph';
4
3
  import ComponentInjector from './injectors/components/ComponentInjector';
5
- import _Provides from './decorators/provides/Provides';
6
- import { Inject as _Inject, Injectable as _Injectable } from './decorators/injectClass';
7
- import _obsidian from './Obsidian';
4
+ import _Obsidian from './Obsidian';
8
5
  import HookInjector from './injectors/hooks/HookInjector';
9
6
  import { Constructable } from './types';
10
7
 
11
8
  export * from './types';
12
9
 
13
- export const Graph = _Graph;
14
- export const ObjectGraph = _ObjectGraph;
15
- export const Provides = _Provides;
16
- export const Injectable = _Injectable;
17
- export const Inject = _Inject;
18
- export const Obsidian = new _obsidian();
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();
19
19
 
20
20
  const componentInjector = new ComponentInjector();
21
21
  export const injectComponent = <P> (
22
- __Target: React.FunctionComponent<P>,
23
- __Graph: Constructable<_ObjectGraph>,
24
- ) => componentInjector.inject(__Target, __Graph);
22
+ Target: React.FunctionComponent<P>,
23
+ Graph: Constructable<_ObjectGraph>,
24
+ ) => componentInjector.inject(Target, Graph);
25
25
 
26
26
  const hookInjector = new HookInjector();
27
27
  export const injectHook = <Args, Result> (
28
28
  hook: (args: Args) => Result,
29
- __Graph: Constructable<_ObjectGraph>,
30
- ) => hookInjector.inject(hook, __Graph);
29
+ Graph: Constructable<_ObjectGraph>,
30
+ ) => hookInjector.inject(hook, Graph);
@@ -1,7 +1,7 @@
1
1
  import React, { useState } from 'react';
2
2
  import hoistNonReactStatics from 'hoist-non-react-statics';
3
3
  import 'reflect-metadata';
4
- import ObjectGraph from '../../graph/ObjectGraph';
4
+ import { ObjectGraph } from '../../graph/ObjectGraph';
5
5
  import PropsInjector from './PropsInjector';
6
6
  import useGraph from './useGraph';
7
7
  import { Constructable } from '../../types';
@@ -1,4 +1,4 @@
1
- import ObjectGraph from '../../graph/ObjectGraph';
1
+ import { ObjectGraph } from '../../graph/ObjectGraph';
2
2
 
3
3
  export default class PropsInjector<Props> {
4
4
  constructor(private graph: ObjectGraph) {}
@@ -1,6 +1,6 @@
1
1
  import { useEffect, useState } from 'react';
2
2
  import { Constructable } from '../../types';
3
- import ObjectGraph from '../../graph/ObjectGraph';
3
+ import { ObjectGraph } from '../../graph/ObjectGraph';
4
4
  import graphRegistry from '../../graph/registry/GraphRegistry';
5
5
  import referenceCounter from '../../ReferenceCounter';
6
6
 
@@ -1,5 +1,5 @@
1
- import ObjectGraph from '../../graph/ObjectGraph';
2
- import Graph from '../../graph/Graph';
1
+ import { ObjectGraph } from '../../graph/ObjectGraph';
2
+ import { Graph } from '../../graph/Graph';
3
3
  import useGraph from '../components/useGraph';
4
4
  import { Constructable } from '../../types';
5
5
 
package/testkit/index.ts CHANGED
@@ -1,6 +1,10 @@
1
- import { GraphMiddleware, ResolveChain } from '../src/graph/registry/GraphMiddleware';
2
- import ObjectGraph from '../src/graph/Graph';
3
- import { Constructable, Obsidian } from '../src';
1
+ import {
2
+ ObjectGraph,
3
+ Constructable,
4
+ GraphMiddleware,
5
+ Obsidian,
6
+ ResolveChain,
7
+ } from '../src';
4
8
 
5
9
  beforeEach(() => {
6
10
  Obsidian.clearGraphMiddlewares();
@@ -9,10 +13,10 @@ beforeEach(() => {
9
13
  class Index {
10
14
  mockGraphs(graphNameToGraph: Record<string, Constructable<ObjectGraph>>) {
11
15
  const graphMiddleware = new class extends GraphMiddleware {
12
- resolve<T extends ObjectGraph, Props>(resolveChain: ResolveChain, Graph: Constructable<T>, props?: Props) {
16
+ resolve<Props>(resolveChain: ResolveChain<ObjectGraph>, Graph: Constructable<ObjectGraph>, props?: Props) {
13
17
  if (graphNameToGraph[Graph.name]) {
14
18
  const TheGraph = graphNameToGraph[Graph.name];
15
- return new TheGraph(props) as unknown as T;
19
+ return new TheGraph(props);
16
20
  }
17
21
  return resolveChain.proceed(Graph, props);
18
22
  }