react-obsidian 1.4.0 → 2.1.0

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 (57) hide show
  1. package/.yarnrc +1 -0
  2. package/README.md +5 -2
  3. package/dist/src/graph/ServiceLocatorFactory.js +1 -1
  4. package/dist/src/graph/ServiceLocatorFactory.js.map +1 -1
  5. package/dist/src/graph/registry/GraphRegistry.d.ts +1 -2
  6. package/dist/src/graph/registry/GraphRegistry.d.ts.map +1 -1
  7. package/dist/src/graph/registry/GraphRegistry.js +6 -9
  8. package/dist/src/graph/registry/GraphRegistry.js.map +1 -1
  9. package/dist/src/graph/registry/ObtainLifecycleBoundGraphException.d.ts +7 -0
  10. package/dist/src/graph/registry/ObtainLifecycleBoundGraphException.d.ts.map +1 -0
  11. package/dist/src/graph/registry/ObtainLifecycleBoundGraphException.js +16 -0
  12. package/dist/src/graph/registry/ObtainLifecycleBoundGraphException.js.map +1 -0
  13. package/dist/src/injectors/class/ClassInjector.d.ts.map +1 -1
  14. package/dist/src/injectors/class/ClassInjector.js +8 -1
  15. package/dist/src/injectors/class/ClassInjector.js.map +1 -1
  16. package/dist/src/injectors/components/useGraph.js +3 -3
  17. package/dist/src/injectors/components/useGraph.js.map +1 -1
  18. package/dist/src/observable/Observable.d.ts +1 -1
  19. package/dist/src/observable/Observable.d.ts.map +1 -1
  20. package/dist/src/observable/Observable.js +1 -2
  21. package/dist/src/observable/Observable.js.map +1 -1
  22. package/dist/src/observable/mediator/MediatorObservable.d.ts +3 -2
  23. package/dist/src/observable/mediator/MediatorObservable.d.ts.map +1 -1
  24. package/dist/src/observable/mediator/MediatorObservable.js +21 -0
  25. package/dist/src/observable/mediator/MediatorObservable.js.map +1 -1
  26. package/dist/src/observable/types.d.ts +39 -0
  27. package/dist/src/observable/types.d.ts.map +1 -1
  28. package/dist/src/observable/useObservers.d.ts.map +1 -1
  29. package/dist/src/observable/useObservers.js +6 -3
  30. package/dist/src/observable/useObservers.js.map +1 -1
  31. package/dist/src/utils/isDev.js +1 -0
  32. package/dist/src/utils/isDev.js.map +1 -1
  33. package/dist/src/utils/notNull.d.ts +2 -0
  34. package/dist/src/utils/notNull.d.ts.map +1 -0
  35. package/dist/src/utils/notNull.js +6 -0
  36. package/dist/src/utils/notNull.js.map +1 -0
  37. package/dist/transformers/babel-plugin-obsidian/helpers/index.d.ts.map +1 -1
  38. package/dist/transformers/babel-plugin-obsidian/helpers/index.js +10 -3
  39. package/dist/transformers/babel-plugin-obsidian/helpers/index.js.map +1 -1
  40. package/package.json +1 -2
  41. package/src/graph/ServiceLocatorFactory.ts +1 -1
  42. package/src/graph/registry/GraphRegistry.ts +10 -10
  43. package/src/graph/registry/ObtainLifecycleBoundGraphException.ts +15 -0
  44. package/src/injectors/class/ClassInjector.ts +8 -1
  45. package/src/injectors/components/useGraph.ts +3 -3
  46. package/src/observable/Observable.ts +1 -2
  47. package/src/observable/mediator/MediatorObservable.ts +35 -2
  48. package/src/observable/types.ts +18 -0
  49. package/src/observable/useObservers.ts +9 -4
  50. package/src/utils/isDev.ts +1 -0
  51. package/src/utils/notNull.ts +1 -0
  52. package/transformers/babel-plugin-obsidian/helpers/index.ts +7 -1
  53. package/dist/src/graph/registry/NullProps.d.ts +0 -4
  54. package/dist/src/graph/registry/NullProps.d.ts.map +0 -1
  55. package/dist/src/graph/registry/NullProps.js +0 -25
  56. package/dist/src/graph/registry/NullProps.js.map +0 -1
  57. package/src/graph/registry/NullProps.ts +0 -23
package/.yarnrc ADDED
@@ -0,0 +1 @@
1
+ --registry "https://registry.npmjs.org/"
package/README.md CHANGED
@@ -2,10 +2,13 @@
2
2
 
3
3
  <p align="center">
4
4
  </br><img width="300px" src=".github/logo.svg"></br>
5
+ <a href="https://npmjs.com/package/react-obsidian"><img src="https://img.shields.io/npm/v/react-obsidian.svg" alt="npm package"></a>
6
+ <a href="https://www.npmjs.com/package/react-obsidian"><img src="https://img.shields.io/npm/dm/react-obsidian.svg" alt="NPM downloads"></a>
7
+ <a href="https://github.com/wix-incubator/react-obsidian/actions/workflows/ci.yml"><img src="https://github.com/wix-incubator/react-obsidian/actions/workflows/ci.yml/badge.svg?branch=master" alt="build status"></a>
8
+ <a href="https://discord.gg/MDH2axwaPy"><img src="https://img.shields.io/badge/chat-discord-blue?style=flat&logo=discord" alt="discord chat"></a>
9
+ <h1 align="center">Obsidian</h1>
5
10
  </p>
6
11
 
7
- # React Obsidian
8
-
9
12
  React Obsidian is a dependency injection framework for React and React Native applications. It allows you to inject dependencies into hooks, components, and classes. Separating the construction and consumption of dependencies is crucial to maintaining a readable and testable codebase.
10
13
 
11
14
  > 📖 Read more about Dependency Injection and Obsidian in [Breaking complexity with Dependency Injection: Introducing Obsidian](https://guyca.medium.com/breaking-complexity-with-dependency-injection-introducing-obsidian-cd452802f076) on Medium.
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const GraphRegistry_1 = __importDefault(require("./registry/GraphRegistry"));
7
7
  class ServiceLocatorFactory {
8
8
  static fromGraph(Graph, props) {
9
- const resolved = GraphRegistry_1.default.resolve(Graph, props);
9
+ const resolved = GraphRegistry_1.default.resolve(Graph, 'serviceLocator', props);
10
10
  const wrapped = new Proxy(resolved, {
11
11
  get(_target, property, receiver) {
12
12
  return () => resolved.retrieve(property, receiver);
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceLocatorFactory.js","sourceRoot":"","sources":["../../../src/graph/ServiceLocatorFactory.ts"],"names":[],"mappings":";;;;;AAEA,6EAAqD;AAErD,MAAqB,qBAAqB;IACxC,MAAM,CAAC,SAAS,CAAoC,KAAuB,EAAE,KAAS;QACpF,MAAM,QAAQ,GAAG,uBAAa,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClC,GAAG,CAAC,OAAY,EAAE,QAAgB,EAAE,QAAa;gBAC/C,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACrD,CAAC;SACF,CAAC,CAAC;QACH,OAAO,OAA2C,CAAC;IACrD,CAAC;CACF;AAVD,wCAUC"}
1
+ {"version":3,"file":"ServiceLocatorFactory.js","sourceRoot":"","sources":["../../../src/graph/ServiceLocatorFactory.ts"],"names":[],"mappings":";;;;;AAEA,6EAAqD;AAErD,MAAqB,qBAAqB;IACxC,MAAM,CAAC,SAAS,CAAoC,KAAuB,EAAE,KAAS;QACpF,MAAM,QAAQ,GAAG,uBAAa,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClC,GAAG,CAAC,OAAY,EAAE,QAAgB,EAAE,QAAa;gBAC/C,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACrD,CAAC;SACF,CAAC,CAAC;QACH,OAAO,OAA2C,CAAC;IACrD,CAAC;CACF;AAVD,wCAUC"}
@@ -11,8 +11,7 @@ export declare class GraphRegistry {
11
11
  ensureRegistered(graph: Graph): void;
12
12
  getSubgraphs(graph: Graph): Graph[];
13
13
  getGraphInstance(name: string): Graph;
14
- resolve<T extends Graph>(Graph: Constructable<T>, props?: any): T;
15
- private ensurePropsIfLifecycleBoundGraph;
14
+ resolve<T extends Graph>(Graph: Constructable<T>, source?: 'lifecycleOwner' | 'serviceLocator', props?: any): T;
16
15
  private has;
17
16
  private getFirst;
18
17
  private set;
@@ -1 +1 @@
1
- {"version":3,"file":"GraphRegistry.d.ts","sourceRoot":"","sources":["../../../../src/graph/registry/GraphRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA+C;IACrF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA0C;IAChF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAC3D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA8D;IAC/F,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA8B;IAE/D,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,SAAS,GAAE,aAAa,CAAC,KAAK,CAAC,EAAO;IAIlF,gBAAgB,CAAC,KAAK,EAAE,KAAK;IAK7B,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE;IAMnC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAIrC,OAAO,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC;IASjE,OAAO,CAAC,gCAAgC;IAOxC,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,GAAG;IAQX,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,uBAAuB;IAI/B,KAAK,CAAC,KAAK,EAAE,KAAK;IAQlB,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC;IAIhD,qBAAqB;IAIrB,QAAQ;CAKT;;AAED,wBAAmC"}
1
+ {"version":3,"file":"GraphRegistry.d.ts","sourceRoot":"","sources":["../../../../src/graph/registry/GraphRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA+C;IACrF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA0C;IAChF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAC3D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA8D;IAC/F,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA8B;IAE/D,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,SAAS,GAAE,aAAa,CAAC,KAAK,CAAC,EAAO;IAIlF,gBAAgB,CAAC,KAAK,EAAE,KAAK;IAK7B,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE;IAMnC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAIrC,OAAO,CAAC,CAAC,SAAS,KAAK,EACrB,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,MAAM,GAAE,gBAAgB,GAAG,gBAAmC,EAC9D,KAAK,GAAE,GAAe,GACrB,CAAC;IAYJ,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,GAAG;IAQX,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,uBAAuB;IAI/B,KAAK,CAAC,KAAK,EAAE,KAAK;IAQlB,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC;IAIhD,qBAAqB;IAIrB,QAAQ;CAKT;;AAED,wBAAmC"}
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.GraphRegistry = void 0;
7
7
  const GraphMiddlewareChain_1 = __importDefault(require("./GraphMiddlewareChain"));
8
- const NullProps_1 = require("./NullProps");
8
+ const ObtainLifecycleBoundGraphException_1 = require("./ObtainLifecycleBoundGraphException");
9
9
  class GraphRegistry {
10
10
  constructor() {
11
11
  this.constructorToInstance = new Map();
@@ -31,20 +31,17 @@ class GraphRegistry {
31
31
  getGraphInstance(name) {
32
32
  return this.nameToInstance.get(name);
33
33
  }
34
- resolve(Graph, props) {
34
+ resolve(Graph, source = 'lifecycleOwner', props = undefined) {
35
35
  if ((this.isSingleton(Graph) || this.isBoundToReactLifecycle(Graph)) && this.has(Graph)) {
36
36
  return this.getFirst(Graph);
37
37
  }
38
- const graph = this.graphMiddlewares.resolve(Graph, this.ensurePropsIfLifecycleBoundGraph(Graph, props));
38
+ if (this.isBoundToReactLifecycle(Graph) && source === 'serviceLocator') {
39
+ throw new ObtainLifecycleBoundGraphException_1.ObtainLifecycleBoundGraphException(Graph);
40
+ }
41
+ const graph = this.graphMiddlewares.resolve(Graph, props);
39
42
  this.set(Graph, graph);
40
43
  return graph;
41
44
  }
42
- ensurePropsIfLifecycleBoundGraph(Graph, props) {
43
- if (this.isBoundToReactLifecycle(Graph)) {
44
- return props !== null && props !== void 0 ? props : (0, NullProps_1.NullProps)(Graph);
45
- }
46
- return props;
47
- }
48
45
  has(Graph) {
49
46
  var _a, _b;
50
47
  return ((_b = (_a = this.constructorToInstance.get(Graph)) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : 0) > 0;
@@ -1 +1 @@
1
- {"version":3,"file":"GraphRegistry.js","sourceRoot":"","sources":["../../../../src/graph/registry/GraphRegistry.ts"],"names":[],"mappings":";;;;;;AAGA,kFAA0D;AAC1D,2CAA2D;AAE3D,MAAa,aAAa;IAA1B;QACmB,0BAAqB,GAAG,IAAI,GAAG,EAAoC,CAAC;QACpE,0BAAqB,GAAG,IAAI,GAAG,EAA+B,CAAC;QAC/D,mBAAc,GAAG,IAAI,GAAG,EAAiB,CAAC;QAC1C,qBAAgB,GAAG,IAAI,GAAG,EAAmD,CAAC;QAC9E,qBAAgB,GAAG,IAAI,8BAAoB,EAAE,CAAC;IAkFjE,CAAC;IAhFC,QAAQ,CAAC,WAAiC,EAAE,YAAoC,EAAE;QAChF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,gBAAgB,CAAC,KAAY;QAC3B,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO;QAClD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAkB,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,YAAY,CAAC,KAAY;;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;QACrD,MAAM,SAAS,GAAG,MAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAI,IAAI,GAAG,EAAE,CAAC;QAChE,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,gBAAgB,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;IACxC,CAAC;IAED,OAAO,CAAkB,KAAuB,EAAE,KAAW;QAC3D,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACvF,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC7B;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,gCAAgC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACxG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACvB,OAAO,KAAU,CAAC;IACpB,CAAC;IAEO,gCAAgC,CAAkB,KAAuB,EAAE,KAAW;QAC5F,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE;YACvC,OAAO,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,IAAA,qBAAe,EAAC,KAAK,CAAC,CAAC;SACxC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,GAAG,CAAC,KAA2B;;QACrC,OAAO,CAAC,MAAA,MAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,0CAAE,IAAI,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAChE,CAAC;IAEO,QAAQ,CAAkB,KAAuB;QACvD,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;IACtE,CAAC;IAEO,GAAG,CAAC,KAA2B,EAAE,KAAY;;QACnD,MAAM,MAAM,GAAG,MAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAI,IAAI,GAAG,EAAE,CAAC;QAClE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAEO,WAAW,CAAC,KAA2B;;QAC7C,OAAO,MAAA,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,mCAAI,KAAK,CAAC;IAC5D,CAAC;IAEO,uBAAuB,CAAC,KAA2B;;QACzD,OAAO,MAAA,OAAO,CAAC,WAAW,CAAC,kBAAkB,EAAE,KAAK,CAAC,mCAAI,KAAK,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,KAAY;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAAE,OAAO;QAC9C,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,kBAAkB,CAAC,UAA6B;QAC9C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,qBAAqB;QACnB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;CACF;AAvFD,sCAuFC;AAED,kBAAe,IAAI,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"GraphRegistry.js","sourceRoot":"","sources":["../../../../src/graph/registry/GraphRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Constructable } from '../../types';
2
+ import { Graph } from '../Graph';
3
+ export declare class ObtainLifecycleBoundGraphException extends Error {
4
+ constructor(graph: Constructable<Graph>);
5
+ private static createMessage;
6
+ }
7
+ //# sourceMappingURL=ObtainLifecycleBoundGraphException.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObtainLifecycleBoundGraphException.d.ts","sourceRoot":"","sources":["../../../../src/graph/registry/ObtainLifecycleBoundGraphException.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,qBAAa,kCAAmC,SAAQ,KAAK;gBAC/C,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;IAIvC,OAAO,CAAC,MAAM,CAAC,aAAa;CAK7B"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ObtainLifecycleBoundGraphException = void 0;
4
+ const isDev_1 = require("../../utils/isDev");
5
+ class ObtainLifecycleBoundGraphException extends Error {
6
+ constructor(graph) {
7
+ super(ObtainLifecycleBoundGraphException.createMessage(graph));
8
+ }
9
+ static createMessage(graph) {
10
+ const graphName = (0, isDev_1.isDev)() ? ` ${graph.name}` : '';
11
+ return `Tried to obtain a @LifecycleBound graph${graphName}, but it was not created yet. `
12
+ + '@LifecycleBound graphs can only be obtained after they were created by a React component or hook.';
13
+ }
14
+ }
15
+ exports.ObtainLifecycleBoundGraphException = ObtainLifecycleBoundGraphException;
16
+ //# sourceMappingURL=ObtainLifecycleBoundGraphException.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObtainLifecycleBoundGraphException.js","sourceRoot":"","sources":["../../../../src/graph/registry/ObtainLifecycleBoundGraphException.ts"],"names":[],"mappings":";;;AAAA,6CAA0C;AAI1C,MAAa,kCAAmC,SAAQ,KAAK;IAC3D,YAAY,KAA2B;QACrC,KAAK,CAAC,kCAAkC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,KAA2B;QACtD,MAAM,SAAS,GAAG,IAAA,aAAK,GAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO,0CAA0C,SAAS,gCAAgC;cACxF,mGAAmG,CAAC;IACxG,CAAC;CACF;AAVD,gFAUC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ClassInjector.d.ts","sourceRoot":"","sources":["../../../../src/injectors/class/ClassInjector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAGpD,MAAM,CAAC,OAAO,OAAO,aAAa;IAE9B,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,iBAAiB;gBADjB,aAAa,EAAE,aAAa,EAC5B,iBAAiB,GAAE,iBAA2C;IAGxE,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,YAChB,cAAc,GAAG,CAAC;IAKpC,OAAO,CAAC,kBAAkB;CA+B3B"}
1
+ {"version":3,"file":"ClassInjector.d.ts","sourceRoot":"","sources":["../../../../src/injectors/class/ClassInjector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AAIpD,MAAM,CAAC,OAAO,OAAO,aAAa;IAE9B,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,iBAAiB;gBADjB,aAAa,EAAE,aAAa,EAC5B,iBAAiB,GAAE,iBAA2C;IAGxE,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,YAChB,cAAc,GAAG,CAAC;IAKpC,OAAO,CAAC,kBAAkB;CAqC3B"}
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const InjectionMetadata_1 = __importDefault(require("./InjectionMetadata"));
7
7
  const LateInjector_1 = require("./LateInjector");
8
+ const ReferenceCounter_1 = __importDefault(require("../../ReferenceCounter"));
8
9
  class ClassInjector {
9
10
  constructor(graphRegistry, injectionMetadata = new InjectionMetadata_1.default()) {
10
11
  this.graphRegistry = graphRegistry;
@@ -18,12 +19,18 @@ class ClassInjector {
18
19
  createProxyHandler(Graph, graphRegistry, injectionMetadata) {
19
20
  return new class Handler {
20
21
  construct(target, args, newTarget) {
21
- const graph = graphRegistry.resolve(Graph, args.length > 0 ? args[0] : undefined);
22
+ const graph = graphRegistry.resolve(Graph, 'lifecycleOwner', args.length > 0 ? args[0] : undefined);
23
+ ReferenceCounter_1.default.retain(graph);
22
24
  Reflect.defineMetadata(LateInjector_1.GRAPH_INSTANCE_NAME_KEY, graph.name, target);
23
25
  const argsToInject = this.injectConstructorArgs(args, graph, target);
24
26
  graph.onBind(target);
25
27
  const createdObject = Reflect.construct(target, argsToInject, newTarget);
26
28
  this.injectProperties(target, createdObject, graph);
29
+ const originalComponentWillUnmount = createdObject.componentWillUnmount;
30
+ createdObject.componentWillUnmount = () => {
31
+ originalComponentWillUnmount === null || originalComponentWillUnmount === void 0 ? void 0 : originalComponentWillUnmount();
32
+ ReferenceCounter_1.default.release(graph, (g) => graphRegistry.clear(g));
33
+ };
27
34
  return createdObject;
28
35
  }
29
36
  injectConstructorArgs(args, graph, target) {
@@ -1 +1 @@
1
- {"version":3,"file":"ClassInjector.js","sourceRoot":"","sources":["../../../../src/injectors/class/ClassInjector.ts"],"names":[],"mappings":";;;;;AAGA,4EAAoD;AACpD,iDAAyD;AAEzD,MAAqB,aAAa;IAChC,YACU,aAA4B,EAC5B,oBAAuC,IAAI,2BAAiB,EAAE;QAD9D,kBAAa,GAAb,aAAa,CAAe;QAC5B,sBAAiB,GAAjB,iBAAiB,CAA6C;IACrE,CAAC;IAEJ,MAAM,CAAC,KAA2B;QAChC,OAAO,CAAC,MAA0B,EAAE,EAAE;YACpC,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACvG,CAAC,CAAC;IACJ,CAAC;IAEO,kBAAkB,CACxB,KAA2B,EAC3B,aAA4B,EAC5B,iBAAoC;QAEpC,OAAO,IAAI,MAAM,OAAO;YACtB,SAAS,CAAC,MAAW,EAAE,IAAW,EAAE,SAAmB;gBACrD,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAClF,OAAO,CAAC,cAAc,CAAC,sCAAuB,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACpE,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBACrE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACrB,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;gBACzE,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;gBACpD,OAAO,aAAa,CAAC;YACvB,CAAC;YAEO,qBAAqB,CAAC,IAAW,EAAE,KAAY,EAAE,MAAW;gBAClE,MAAM,YAAY,GAAG,iBAAiB,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;gBAC1E,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;oBAAE,OAAO,IAAI,CAAC;gBACzC,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAO,EAAE;oBAClG,OAAO,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChE,CAAC,CAAC,CAAC;YACL,CAAC;YAEO,gBAAgB,CAAC,MAAW,EAAE,aAAkB,EAAE,KAAY;gBACpE,iBAAiB,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC9D,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvD,CAAC,CAAC,CAAC;YACL,CAAC;SACF,EAAE,CAAC;IACN,CAAC;CACF;AA3CD,gCA2CC"}
1
+ {"version":3,"file":"ClassInjector.js","sourceRoot":"","sources":["../../../../src/injectors/class/ClassInjector.ts"],"names":[],"mappings":"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"}
@@ -8,9 +8,9 @@ const GraphRegistry_1 = __importDefault(require("../../graph/registry/GraphRegis
8
8
  const ReferenceCounter_1 = __importDefault(require("../../ReferenceCounter"));
9
9
  exports.default = (Graph, target, props) => {
10
10
  const [graph] = (0, react_1.useState)(() => {
11
- const resolveGraph = GraphRegistry_1.default.resolve(Graph, props);
12
- resolveGraph.onBind(target);
13
- return resolveGraph;
11
+ const resolvedGraph = GraphRegistry_1.default.resolve(Graph, 'lifecycleOwner', props);
12
+ resolvedGraph.onBind(target);
13
+ return resolvedGraph;
14
14
  });
15
15
  (0, react_1.useEffect)(() => {
16
16
  ReferenceCounter_1.default.retain(graph);
@@ -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,CAAI,KAAiC,EAAE,MAAW,EAAE,KAAkB,EAAE,EAAE;IACvF,MAAM,CAAC,KAAK,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE;QAC5B,MAAM,YAAY,GAAG,uBAAa,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACzD,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,YAAY,CAAC;IACtB,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,EAAE,CAAC,uBAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACZ,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
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,CAAI,KAAiC,EAAE,MAAW,EAAE,KAAkB,EAAE,EAAE;IACvF,MAAM,CAAC,KAAK,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE;QAC5B,MAAM,aAAa,GAAG,uBAAa,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;QAC5E,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,EAAE,CAAC,uBAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACZ,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
@@ -6,7 +6,7 @@ export declare class Observable<T> implements IObservable<T> {
6
6
  get value(): T;
7
7
  set value(value: T);
8
8
  first(): Promise<T>;
9
- subscribe(onNext?: OnNext<T>): Unsubscribe;
9
+ subscribe(onNext: OnNext<T>): Unsubscribe;
10
10
  unsubscribe(onNext: OnNext<T>): void;
11
11
  }
12
12
  //# sourceMappingURL=Observable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Observable.d.ts","sourceRoot":"","sources":["../../../src/observable/Observable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGzE,qBAAa,UAAU,CAAC,CAAC,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,YAAY,CAAgB;gBAExB,YAAY,CAAC,EAAE,CAAC;IAI5B,IAAW,KAAK,IAAI,CAAC,CAEpB;IAED,IAAW,KAAK,CAAC,KAAK,EAAE,CAAC,EAGxB;IAEK,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC;IAUlB,SAAS,CAAC,MAAM,GAAE,MAAM,CAAC,CAAC,CAAQ,GAAG,WAAW;IAQhD,WAAW,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC,CAAC;CAMpC"}
1
+ {"version":3,"file":"Observable.d.ts","sourceRoot":"","sources":["../../../src/observable/Observable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEzE,qBAAa,UAAU,CAAC,CAAC,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,YAAY,CAAgB;gBAExB,YAAY,CAAC,EAAE,CAAC;IAI5B,IAAW,KAAK,IAAI,CAAC,CAEpB;IAED,IAAW,KAAK,CAAC,KAAK,EAAE,CAAC,EAGxB;IAEK,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC;IAUlB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW;IAQzC,WAAW,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC,CAAC;CAMpC"}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Observable = void 0;
4
- const NOOP = () => { };
5
4
  class Observable {
6
5
  constructor(initialValue) {
7
6
  this.subscribers = new Set();
@@ -24,7 +23,7 @@ class Observable {
24
23
  });
25
24
  });
26
25
  }
27
- subscribe(onNext = NOOP) {
26
+ subscribe(onNext) {
28
27
  if (this.subscribers.has(onNext)) {
29
28
  throw new Error('Subscriber already subscribed');
30
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Observable.js","sourceRoot":"","sources":["../../../src/observable/Observable.ts"],"names":[],"mappings":";;;AAEA,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AACtB,MAAa,UAAU;IAIrB,YAAY,YAAgB;QAHpB,gBAAW,GAAmB,IAAI,GAAG,EAAE,CAAC;QAI9C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,YAAiB,CAAC;IAChC,CAAC;IAED,IAAW,KAAK,CAAC,KAAQ;QACvB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC3C,WAAW,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,SAAS,CAAC,SAAoB,IAAI;QACvC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SAClD;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAEM,WAAW,CAAC,MAAgB;QACjC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;SAChE;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;CACF;AAzCD,gCAyCC"}
1
+ {"version":3,"file":"Observable.js","sourceRoot":"","sources":["../../../src/observable/Observable.ts"],"names":[],"mappings":";;;AAEA,MAAa,UAAU;IAIrB,YAAY,YAAgB;QAHpB,gBAAW,GAAmB,IAAI,GAAG,EAAE,CAAC;QAI9C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,YAAiB,CAAC;IAChC,CAAC;IAED,IAAW,KAAK,CAAC,KAAQ;QACvB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QAChD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC3C,WAAW,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,SAAS,CAAC,MAAiB;QAChC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SAClD;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAEM,WAAW,CAAC,MAAgB;QACjC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;SAChE;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;CACF;AAzCD,gCAyCC"}
@@ -1,7 +1,8 @@
1
1
  import { Observable } from '../Observable';
2
- import { Mapper, OnNext } from '../types';
2
+ import { Mapper, MultiMapper, Observables, OnNext, Observable as IObservable } from '../types';
3
3
  export declare class MediatorObservable<T> extends Observable<T> {
4
4
  mapSource<Source, Result extends T>(source: Observable<Source>, mapNext: Mapper<Source, Result>): this;
5
- addSource<S>(source: Observable<S>, onNext: OnNext<S>): this;
5
+ addSource<S>(source: IObservable<S>, onNext: OnNext<S>): this;
6
+ mapSources<S1, S2, S3, S4, S5>(sources: Observables<S1, S2, S3, S4, S5>, mapNext: MultiMapper<T, S1, S2, S3, S4, S5>): this;
6
7
  }
7
8
  //# sourceMappingURL=MediatorObservable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MediatorObservable.d.ts","sourceRoot":"","sources":["../../../../src/observable/mediator/MediatorObservable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE1C,qBAAa,kBAAkB,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACtD,SAAS,CAAC,MAAM,EAAE,MAAM,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQ/F,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAOtD"}
1
+ {"version":3,"file":"MediatorObservable.d.ts","sourceRoot":"","sources":["../../../../src/observable/mediator/MediatorObservable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,MAAM,EACN,WAAW,EACX,WAAW,EACX,MAAM,EACN,UAAU,IAAI,WAAW,EAE1B,MAAM,UAAU,CAAC;AAElB,qBAAa,kBAAkB,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACtD,SAAS,CAAC,MAAM,EAAE,MAAM,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQ/F,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAQtD,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAC3B,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EACxC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;CAsB9C"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MediatorObservable = void 0;
4
+ const notNull_1 = require("../../utils/notNull");
4
5
  const Observable_1 = require("../Observable");
5
6
  class MediatorObservable extends Observable_1.Observable {
6
7
  mapSource(source, mapNext) {
@@ -17,6 +18,26 @@ class MediatorObservable extends Observable_1.Observable {
17
18
  }
18
19
  return this;
19
20
  }
21
+ mapSources(sources, mapNext) {
22
+ const values = new Array(sources.length);
23
+ sources
24
+ .filter(notNull_1.notNull)
25
+ .forEach((source, index) => {
26
+ this.addSource(source, (next) => {
27
+ if (values[index] === next)
28
+ return;
29
+ if (values[index] === undefined) {
30
+ values[index] = next;
31
+ }
32
+ else {
33
+ values[index] = next;
34
+ this.value = mapNext(values, this.value);
35
+ }
36
+ });
37
+ });
38
+ this.value = mapNext(values, this.value);
39
+ return this;
40
+ }
20
41
  }
21
42
  exports.MediatorObservable = MediatorObservable;
22
43
  //# sourceMappingURL=MediatorObservable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MediatorObservable.js","sourceRoot":"","sources":["../../../../src/observable/mediator/MediatorObservable.ts"],"names":[],"mappings":";;;AAAA,8CAA2C;AAG3C,MAAa,kBAAsB,SAAQ,uBAAa;IACtD,SAAS,CAA2B,MAA0B,EAAE,OAA+B;QAC7F,IAAI,CAAC,SAAS,CAAS,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAe,CAAW,CAAC;YAC7D,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAI,MAAqB,EAAE,MAAiB;QACnD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;YAC9B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACtB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAhBD,gDAgBC"}
1
+ {"version":3,"file":"MediatorObservable.js","sourceRoot":"","sources":["../../../../src/observable/mediator/MediatorObservable.ts"],"names":[],"mappings":";;;AAAA,iDAA8C;AAC9C,8CAA2C;AAU3C,MAAa,kBAAsB,SAAQ,uBAAa;IACtD,SAAS,CAA2B,MAA0B,EAAE,OAA+B;QAC7F,IAAI,CAAC,SAAS,CAAS,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAe,CAAW,CAAC;YAC7D,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACtB,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAI,MAAsB,EAAE,MAAiB;QACpD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE;YAC9B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACtB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CACR,OAAwC,EACxC,OAA2C;QAE3C,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAA6B,CAAC;QAErE,OAAO;aACJ,MAAM,CAAC,iBAAO,CAAC;aACf,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACzB,IAAI,CAAC,SAAS,CAAC,MAA0B,EAAE,CAAC,IAAI,EAAE,EAAE;gBAClD,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI;oBAAE,OAAO;gBAEnC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;oBAC/B,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;iBACtB;qBAAM;oBACL,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;oBACrB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAM,CAAC;iBAC/C;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAzCD,gDAyCC"}
@@ -8,4 +8,43 @@ export interface Observable<T> {
8
8
  export type ObservedValues<T> = {
9
9
  [K in keyof T]: T[K] extends Observable<infer R> ? R : never;
10
10
  };
11
+ export type MultiMapper<Mine, S1, S2, S3, S4, S5> = ([S1, S2, S3, S4, S5]: Args<S1, S2, S3, S4, S5>, currentValue: Mine) => Mine;
12
+ export type Observables<S1, S2, S3, S4, S5> = [
13
+ Observable<S1>,
14
+ Observable<S2>
15
+ ] | [
16
+ Observable<S1>,
17
+ Observable<S2>,
18
+ Observable<S3>
19
+ ] | [
20
+ Observable<S1>,
21
+ Observable<S2>,
22
+ Observable<S3>,
23
+ Observable<S4>
24
+ ] | [
25
+ Observable<S1>,
26
+ Observable<S2>,
27
+ Observable<S3>,
28
+ Observable<S4>,
29
+ Observable<S5>
30
+ ];
31
+ export type Args<A1, A2, A3, A4, A5> = [
32
+ A1,
33
+ A2
34
+ ] | [
35
+ A1,
36
+ A2,
37
+ A3
38
+ ] | [
39
+ A1,
40
+ A2,
41
+ A3,
42
+ A4
43
+ ] | [
44
+ A1,
45
+ A2,
46
+ A3,
47
+ A4,
48
+ A5
49
+ ];
11
50
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/observable/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,SAAS,CAAC;AACvD,MAAM,MAAM,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,KAAK,IAAI,SAAS,IAAI,GACtF,yGAAyG,GACzG,IAAI,CAAC;AACP,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;CAC3C;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CAAE,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/observable/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,SAAS,CAAC;AAEvD,MAAM,MAAM,MAAM,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,KAAK,IAAI,SAAS,IAAI,GACtF,yGAAyG,GACzG,IAAI,CAAC;AACP,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;CAC3C;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;CAAE,CAAC;AAEjG,MAAM,MAAM,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAClD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAC9C,YAAY,EAAE,IAAI,KACf,IAAI,CAAC;AAEV,MAAM,MAAM,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IACxC;IAAC,UAAU,CAAC,EAAE,CAAC;IAAE,UAAU,CAAC,EAAE,CAAC;CAAC,GAChC;IAAC,UAAU,CAAC,EAAE,CAAC;IAAE,UAAU,CAAC,EAAE,CAAC;IAAE,UAAU,CAAC,EAAE,CAAC;CAAC,GAChD;IAAC,UAAU,CAAC,EAAE,CAAC;IAAE,UAAU,CAAC,EAAE,CAAC;IAAE,UAAU,CAAC,EAAE,CAAC;IAAE,UAAU,CAAC,EAAE,CAAC;CAAC,GAChE;IAAC,UAAU,CAAC,EAAE,CAAC;IAAE,UAAU,CAAC,EAAE,CAAC;IAAE,UAAU,CAAC,EAAE,CAAC;IAAE,UAAU,CAAC,EAAE,CAAC;IAAE,UAAU,CAAC,EAAE,CAAC;CAAC,CAAC;AAEnF,MAAM,MAAM,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IACjC;IAAC,EAAE;IAAE,EAAE;CAAC,GACR;IAAC,EAAE;IAAE,EAAE;IAAE,EAAE;CAAC,GACZ;IAAC,EAAE;IAAE,EAAE;IAAE,EAAE;IAAE,EAAE;CAAC,GAChB;IAAC,EAAE;IAAE,EAAE;IAAE,EAAE;IAAE,EAAE;IAAE,EAAE;CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useObservers.d.ts","sourceRoot":"","sources":["../../../src/observable/useObservers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGzC,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAe7F"}
1
+ {"version":3,"file":"useObservers.d.ts","sourceRoot":"","sources":["../../../src/observable/useObservers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAe,MAAM,SAAS,CAAC;AAGtD,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAoB7F"}
@@ -8,12 +8,15 @@ function useObservers(observables) {
8
8
  const [values, setValues] = (0, react_1.useState)(() => (0, mapObservablesToValues_1.mapObservablesToValues)(observables));
9
9
  (0, react_1.useEffect)(() => {
10
10
  const mediator = new MediatorObservable_1.MediatorObservable();
11
+ const unsubscribers = [];
11
12
  Object.keys(observables).forEach((key) => {
12
- mediator.addSource(observables[key], (value) => {
13
- setValues({ ...values, [key]: value });
13
+ const onNext = (value) => setValues({ ...values, [key]: value });
14
+ mediator.addSource(observables[key], onNext);
15
+ unsubscribers.push(() => {
16
+ observables[key].unsubscribe(onNext);
14
17
  });
15
18
  });
16
- return mediator.subscribe();
19
+ return () => unsubscribers.forEach((unsubscribe) => unsubscribe());
17
20
  }, []);
18
21
  return values;
19
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useObservers.js","sourceRoot":"","sources":["../../../src/observable/useObservers.ts"],"names":[],"mappings":";;;AAAA,iCAA4C;AAC5C,sEAAmE;AAEnE,qEAAkE;AAElE,SAAgB,YAAY,CAAgC,WAAc;IACxE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE,CAAC,IAAA,+CAAsB,EAAC,WAAW,CAAC,CAAC,CAAC;IAEhF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,IAAI,uCAAkB,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,WAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7C,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC7C,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,SAAS,EAAE,CAAC;IAC9B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,MAAM,CAAC;AAChB,CAAC;AAfD,oCAeC"}
1
+ {"version":3,"file":"useObservers.js","sourceRoot":"","sources":["../../../src/observable/useObservers.ts"],"names":[],"mappings":";;;AAAA,iCAA4C;AAC5C,sEAAmE;AAEnE,qEAAkE;AAElE,SAAgB,YAAY,CAAgC,WAAc;IACxE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE,CAAC,IAAA,+CAAsB,EAAC,WAAW,CAAC,CAAC,CAAC;IAEhF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,IAAI,uCAAkB,EAAE,CAAC;QAC1C,MAAM,aAAa,GAAkB,EAAE,CAAC;QAExC,MAAM,CAAC,IAAI,CAAC,WAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC7C,MAAM,MAAM,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACtE,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YAE7C,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE;gBACtB,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IACrE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,MAAM,CAAC;AAChB,CAAC;AApBD,oCAoBC"}
@@ -7,6 +7,7 @@ function isDev() {
7
7
  exports.isDev = isDev;
8
8
  function isNodeDev() {
9
9
  var _a;
10
+ // eslint-disable-next-line @typescript-eslint/dot-notation
10
11
  return ['test', 'development'].includes((_a = process.env['NODE_ENV']) !== null && _a !== void 0 ? _a : '');
11
12
  }
12
13
  function isReactNativeDev() {
@@ -1 +1 @@
1
- {"version":3,"file":"isDev.js","sourceRoot":"","sources":["../../../src/utils/isDev.ts"],"names":[],"mappings":";;;AAAA,SAAgB,KAAK;IACnB,OAAO,SAAS,EAAE,IAAI,gBAAgB,EAAE,CAAC;AAC3C,CAAC;AAFD,sBAEC;AAED,SAAS,SAAS;;IAChB,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,MAAA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,mCAAI,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,gBAAgB;;IACvB,aAAa;IACb,OAAO,MAAA,OAAkB,mCAAI,KAAK,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"isDev.js","sourceRoot":"","sources":["../../../src/utils/isDev.ts"],"names":[],"mappings":";;;AAAA,SAAgB,KAAK;IACnB,OAAO,SAAS,EAAE,IAAI,gBAAgB,EAAE,CAAC;AAC3C,CAAC;AAFD,sBAEC;AAED,SAAS,SAAS;;IAChB,2DAA2D;IAC3D,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,MAAA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,mCAAI,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,gBAAgB;;IACvB,aAAa;IACb,OAAO,MAAA,OAAkB,mCAAI,KAAK,CAAC;AACrC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const notNull: (value: any) => boolean;
2
+ //# sourceMappingURL=notNull.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notNull.d.ts","sourceRoot":"","sources":["../../../src/utils/notNull.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAW,GAAG,YAA0C,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.notNull = void 0;
4
+ const notNull = (value) => value !== null && value !== undefined;
5
+ exports.notNull = notNull;
6
+ //# sourceMappingURL=notNull.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notNull.js","sourceRoot":"","sources":["../../../src/utils/notNull.ts"],"names":[],"mappings":";;;AAAO,MAAM,OAAO,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;AAAhE,QAAA,OAAO,WAAyD"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../transformers/babel-plugin-obsidian/helpers/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,WAAW,EACX,aAAa,EACb,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACpB,MAAM,cAAc,CAAC;AAKtB,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,mBAAmB,GAAG,aAAa,CAAC;AAEhF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAWhE;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,QAOjF;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAKvF;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAGvD;AAED,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,IAAI,EAC/C,aAAa,EAAE,MAAM,GACpB,SAAS,GAAG,SAAS,CAEvB;AAED,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAE1E;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,GAAG,aAAa,CAI3F;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,SAAS,QAOrB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../transformers/babel-plugin-obsidian/helpers/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,WAAW,EACX,aAAa,EACb,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACpB,MAAM,cAAc,CAAC;AAItB,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,mBAAmB,GAAG,aAAa,CAAC;AAEhF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAWhE;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,QAOjF;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,gBAAgB,GAAG,SAAS,CAKvF;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAGvD;AAED,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,IAAI,EAC/C,aAAa,EAAE,MAAM,GACpB,SAAS,GAAG,SAAS,CAEvB;AAED,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAE1E;AAED,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,CAAC,UAAU,GAAG,GAAG,CAAC,EAAE,GAAG,aAAa,CAI3F;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,SAAS,QAOrB"}
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.passParamNameAsInjectArgument = exports.paramsToDestructuringAssignment = exports.getDecoratorName = exports.getDecoratorByName = exports.getMethodName = exports.getDecoratorArgument = exports.addNameToProviderArguments = exports.providerIsNotNamed = void 0;
4
4
  /* eslint-disable no-param-reassign */
5
5
  const core_1 = require("@babel/core");
6
- const lodash_1 = require("lodash");
7
6
  const never = '';
8
7
  function providerIsNotNamed(decorator) {
9
8
  const argument = getDecoratorArgument(decorator);
@@ -39,11 +38,11 @@ function getMethodName(node) {
39
38
  }
40
39
  exports.getMethodName = getMethodName;
41
40
  function getDecoratorByName(decorators, decoratorName) {
42
- return decorators === null || decorators === void 0 ? void 0 : decorators.find((decorator) => (0, lodash_1.get)(decorator, 'expression.callee.name') === decoratorName);
41
+ return decorators === null || decorators === void 0 ? void 0 : decorators.find((decorator) => get(decorator, 'expression.callee.name') === decoratorName);
43
42
  }
44
43
  exports.getDecoratorByName = getDecoratorByName;
45
44
  function getDecoratorName(decorator) {
46
- return (0, lodash_1.get)(decorator, 'expression.callee.name');
45
+ return get(decorator, 'expression.callee.name');
47
46
  }
48
47
  exports.getDecoratorName = getDecoratorName;
49
48
  function paramsToDestructuringAssignment(params) {
@@ -75,4 +74,12 @@ function getNodeName(node) {
75
74
  }
76
75
  return node.name;
77
76
  }
77
+ function get(node, path) {
78
+ if (node === undefined || node === null)
79
+ return undefined;
80
+ const [key, ...rest] = path.split('.');
81
+ if (rest.length === 0)
82
+ return node[key];
83
+ return get(node[key], rest.join('.'));
84
+ }
78
85
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../transformers/babel-plugin-obsidian/helpers/index.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,sCAAyC;AAWzC,mCAA6B;AAE7B,MAAM,KAAK,GAAG,EAAE,CAAC;AAIjB,SAAgB,kBAAkB,CAAC,SAAoB;IACrD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,YAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE;QAClC,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACpC,IAAI,YAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;gBACzB,OAAO,YAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC;aACvD;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,KAAK,SAAS,CAAC;KAClB;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAXD,gDAWC;AAED,SAAgB,0BAA0B,CAAC,IAAiB,EAAE,SAAoB;;IAChF,MAAM,QAAQ,GAAG,MAAA,oBAAoB,CAAC,SAAS,CAAC,mCAAI,YAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC3E,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,YAAC,CAAC,cAAc,CACvC,YAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EACpB,YAAC,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CACrC,CAAC,CAAC;IACF,SAAS,CAAC,UAA6B,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,CAAC;AAClE,CAAC;AAPD,gEAOC;AAED,SAAgB,oBAAoB,CAAC,SAAoB;IACvD,IAAI,YAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;QAC5C,OAAO,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAqB,CAAC;KAChG;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AALD,oDAKC;AAED,SAAgB,aAAa,CAAC,IAAiB;IAC7C,IAAI,YAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACnD,MAAM,IAAI,KAAK,CAAC,mEAAmE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AACtG,CAAC;AAHD,sCAGC;AAED,SAAgB,kBAAkB,CAChC,UAA+C,EAC/C,aAAqB;IAErB,OAAO,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAA,YAAG,EAAC,SAAS,EAAE,wBAAwB,CAAC,KAAK,aAAa,CAAC,CAAC;AACrG,CAAC;AALD,gDAKC;AAED,SAAgB,gBAAgB,CAAC,SAAqB;IACpD,OAAO,IAAA,YAAG,EAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;AAClD,CAAC;AAFD,4CAEC;AAED,SAAgB,+BAA+B,CAAC,MAA4B;IAC1E,OAAO,YAAC,CAAC,aAAa,CAAC,MAAM;SAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;SAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAC,CAAC,cAAc,CAAC,YAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,YAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/E,CAAC;AAJD,0EAIC;AAED,SAAgB,6BAA6B,CAC3C,IAAsB,EACtB,SAAoB;IAEpB,IAAI,YAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;QAC5C,SAAS,CAAC,UAAU,CAAC,SAAS,GAAG;YAC/B,YAAC,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACnC,CAAC;KACH;AACH,CAAC;AATD,sEASC;AAED,SAAS,WAAW,CAAC,IAAsB;IACzC,IAAI,YAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE;QACjC,IAAI,YAAC,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YAClC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC5B;QACD,OAAO,KAAK,CAAC;KACd;IACD,IAAI,YAAC,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;QAC3B,IAAI,YAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;SACtB;QACD,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../transformers/babel-plugin-obsidian/helpers/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-obsidian",
3
- "version": "1.4.0",
3
+ "version": "2.1.0",
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",
@@ -29,7 +29,6 @@
29
29
  "@babel/types": "7.22.x",
30
30
  "@johanblumenberg/ts-mockito": "1.x.x",
31
31
  "@testing-library/react": "14.x.x",
32
- "@testing-library/react-hooks": "^7.0.2",
33
32
  "@types/hoist-non-react-statics": "^3.3.1",
34
33
  "@types/jest": "29.5.x",
35
34
  "@types/lodash": "^4.14.176",
@@ -4,7 +4,7 @@ import graphRegistry from './registry/GraphRegistry';
4
4
 
5
5
  export default class ServiceLocatorFactory {
6
6
  static fromGraph<T extends ObjectGraph<P>, P = any>(Graph: Constructable<T>, props?: P) {
7
- const resolved = graphRegistry.resolve(Graph, props);
7
+ const resolved = graphRegistry.resolve(Graph, '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);
@@ -2,7 +2,7 @@ import { Constructable } from '../../types';
2
2
  import { Graph } from '../Graph';
3
3
  import { Middleware } from './Middleware';
4
4
  import GraphMiddlewareChain from './GraphMiddlewareChain';
5
- import { NullProps as createNullProps } from './NullProps';
5
+ import { ObtainLifecycleBoundGraphException } from './ObtainLifecycleBoundGraphException';
6
6
 
7
7
  export class GraphRegistry {
8
8
  private readonly constructorToInstance = new Map<Constructable<Graph>, Set<Graph>>();
@@ -30,22 +30,22 @@ export class GraphRegistry {
30
30
  return this.nameToInstance.get(name)!;
31
31
  }
32
32
 
33
- resolve<T extends Graph>(Graph: Constructable<T>, props?: any): T {
33
+ resolve<T extends Graph>(
34
+ Graph: Constructable<T>,
35
+ source: 'lifecycleOwner' | 'serviceLocator' = 'lifecycleOwner',
36
+ props: any = undefined,
37
+ ): T {
34
38
  if ((this.isSingleton(Graph) || this.isBoundToReactLifecycle(Graph)) && this.has(Graph)) {
35
39
  return this.getFirst(Graph);
36
40
  }
37
- const graph = this.graphMiddlewares.resolve(Graph, this.ensurePropsIfLifecycleBoundGraph(Graph, props));
41
+ if (this.isBoundToReactLifecycle(Graph) && source === 'serviceLocator') {
42
+ throw new ObtainLifecycleBoundGraphException(Graph);
43
+ }
44
+ const graph = this.graphMiddlewares.resolve(Graph, props);
38
45
  this.set(Graph, graph);
39
46
  return graph as T;
40
47
  }
41
48
 
42
- private ensurePropsIfLifecycleBoundGraph<T extends Graph>(Graph: Constructable<T>, props?: any): any {
43
- if (this.isBoundToReactLifecycle(Graph)) {
44
- return props ?? createNullProps(Graph);
45
- }
46
- return props;
47
- }
48
-
49
49
  private has(Graph: Constructable<Graph>): boolean {
50
50
  return (this.constructorToInstance.get(Graph)?.size ?? 0) > 0;
51
51
  }
@@ -0,0 +1,15 @@
1
+ import { isDev } from '../../utils/isDev';
2
+ import { Constructable } from '../../types';
3
+ import { Graph } from '../Graph';
4
+
5
+ export class ObtainLifecycleBoundGraphException extends Error {
6
+ constructor(graph: Constructable<Graph>) {
7
+ super(ObtainLifecycleBoundGraphException.createMessage(graph));
8
+ }
9
+
10
+ private static createMessage(graph: Constructable<Graph>): string {
11
+ const graphName = isDev() ? ` ${graph.name}` : '';
12
+ return `Tried to obtain a @LifecycleBound graph${graphName}, but it was not created yet. `
13
+ + '@LifecycleBound graphs can only be obtained after they were created by a React component or hook.';
14
+ }
15
+ }
@@ -3,6 +3,7 @@ import { GraphRegistry } from '../../graph/registry/GraphRegistry';
3
3
  import { Graph } from '../../graph/Graph';
4
4
  import InjectionMetadata from './InjectionMetadata';
5
5
  import { GRAPH_INSTANCE_NAME_KEY } from './LateInjector';
6
+ import referenceCounter from '../../ReferenceCounter';
6
7
 
7
8
  export default class ClassInjector {
8
9
  constructor(
@@ -23,12 +24,18 @@ export default class ClassInjector {
23
24
  ): ProxyHandler<any> {
24
25
  return new class Handler implements ProxyHandler<any> {
25
26
  construct(target: any, args: any[], newTarget: Function): any {
26
- const graph = graphRegistry.resolve(Graph, args.length > 0 ? args[0] : undefined);
27
+ const graph = graphRegistry.resolve(Graph, 'lifecycleOwner', args.length > 0 ? args[0] : undefined);
28
+ referenceCounter.retain(graph);
27
29
  Reflect.defineMetadata(GRAPH_INSTANCE_NAME_KEY, graph.name, target);
28
30
  const argsToInject = this.injectConstructorArgs(args, graph, target);
29
31
  graph.onBind(target);
30
32
  const createdObject = Reflect.construct(target, argsToInject, newTarget);
31
33
  this.injectProperties(target, createdObject, graph);
34
+ const originalComponentWillUnmount = createdObject.componentWillUnmount;
35
+ createdObject.componentWillUnmount = () => {
36
+ originalComponentWillUnmount?.();
37
+ referenceCounter.release(graph, (g) => graphRegistry.clear(g));
38
+ };
32
39
  return createdObject;
33
40
  }
34
41
 
@@ -6,9 +6,9 @@ import referenceCounter from '../../ReferenceCounter';
6
6
 
7
7
  export default <P>(Graph: Constructable<ObjectGraph>, target: any, props?: Partial<P>) => {
8
8
  const [graph] = useState(() => {
9
- const resolveGraph = graphRegistry.resolve(Graph, props);
10
- resolveGraph.onBind(target);
11
- return resolveGraph;
9
+ const resolvedGraph = graphRegistry.resolve(Graph, 'lifecycleOwner', props);
10
+ resolvedGraph.onBind(target);
11
+ return resolvedGraph;
12
12
  });
13
13
  useEffect(() => {
14
14
  referenceCounter.retain(graph);
@@ -1,6 +1,5 @@
1
1
  import { Observable as IObservable, OnNext, Unsubscribe } from './types';
2
2
 
3
- const NOOP = () => {};
4
3
  export class Observable<T> implements IObservable<T> {
5
4
  private subscribers: Set<OnNext<T>> = new Set();
6
5
  private currentValue: T | undefined;
@@ -28,7 +27,7 @@ export class Observable<T> implements IObservable<T> {
28
27
  });
29
28
  }
30
29
 
31
- public subscribe(onNext: OnNext<T> = NOOP): Unsubscribe {
30
+ public subscribe(onNext: OnNext<T>): Unsubscribe {
32
31
  if (this.subscribers.has(onNext)) {
33
32
  throw new Error('Subscriber already subscribed');
34
33
  }
@@ -1,5 +1,13 @@
1
+ import { notNull } from '../../utils/notNull';
1
2
  import { Observable } from '../Observable';
2
- import { Mapper, OnNext } from '../types';
3
+ import {
4
+ Mapper,
5
+ MultiMapper,
6
+ Observables,
7
+ OnNext,
8
+ Observable as IObservable,
9
+ Args,
10
+ } from '../types';
3
11
 
4
12
  export class MediatorObservable<T> extends Observable<T> {
5
13
  mapSource<Source, Result extends T>(source: Observable<Source>, mapNext: Mapper<Source, Result>) {
@@ -10,11 +18,36 @@ export class MediatorObservable<T> extends Observable<T> {
10
18
  return this;
11
19
  }
12
20
 
13
- addSource<S>(source: Observable<S>, onNext: OnNext<S>) {
21
+ addSource<S>(source: IObservable<S>, onNext: OnNext<S>) {
14
22
  source.subscribe(onNext);
15
23
  if (source.value !== undefined) {
16
24
  onNext(source.value);
17
25
  }
18
26
  return this;
19
27
  }
28
+
29
+ mapSources<S1, S2, S3, S4, S5>(
30
+ sources: Observables<S1, S2, S3, S4, S5>,
31
+ mapNext: MultiMapper<T, S1, S2, S3, S4, S5>,
32
+ ) {
33
+ const values = new Array(sources.length) as Args<S1, S2, S3, S4, S5>;
34
+
35
+ sources
36
+ .filter(notNull)
37
+ .forEach((source, index) => {
38
+ this.addSource(source as IObservable<any>, (next) => {
39
+ if (values[index] === next) return;
40
+
41
+ if (values[index] === undefined) {
42
+ values[index] = next;
43
+ } else {
44
+ values[index] = next;
45
+ this.value = mapNext(values, this.value) as T;
46
+ }
47
+ });
48
+ });
49
+
50
+ this.value = mapNext(values, this.value);
51
+ return this;
52
+ }
20
53
  }
@@ -1,4 +1,5 @@
1
1
  export type OnNext<T> = (value: T) => void | undefined; // OnNext callbacks should never return a value
2
+
2
3
  export type Mapper<Other, Mine> = (next: Other, currentValue: Mine) => Mine extends void ?
3
4
  'A map function must return a value. Check your map function and ensure it has a valid return statement.' :
4
5
  Mine;
@@ -10,3 +11,20 @@ export interface Observable<T> {
10
11
  }
11
12
 
12
13
  export type ObservedValues<T> = { [K in keyof T]: T[K] extends Observable<infer R> ? R : never };
14
+
15
+ export type MultiMapper<Mine, S1, S2, S3, S4, S5> = (
16
+ [S1, S2, S3, S4, S5]: Args<S1, S2, S3, S4, S5>,
17
+ currentValue: Mine,
18
+ ) => Mine;
19
+
20
+ export type Observables<S1, S2, S3, S4, S5> =
21
+ [Observable<S1>, Observable<S2>] |
22
+ [Observable<S1>, Observable<S2>, Observable<S3>] |
23
+ [Observable<S1>, Observable<S2>, Observable<S3>, Observable<S4>] |
24
+ [Observable<S1>, Observable<S2>, Observable<S3>, Observable<S4>, Observable<S5>];
25
+
26
+ export type Args<A1, A2, A3, A4, A5> =
27
+ [A1, A2] |
28
+ [A1, A2, A3] |
29
+ [A1, A2, A3, A4] |
30
+ [A1, A2, A3, A4, A5];
@@ -1,6 +1,6 @@
1
1
  import { useEffect, useState } from 'react';
2
2
  import { MediatorObservable } from './mediator/MediatorObservable';
3
- import { ObservedValues } from './types';
3
+ import { ObservedValues, Unsubscribe } from './types';
4
4
  import { mapObservablesToValues } from './mapObservablesToValues';
5
5
 
6
6
  export function useObservers<T extends Record<string, any>>(observables: T): ObservedValues<T> {
@@ -8,13 +8,18 @@ export function useObservers<T extends Record<string, any>>(observables: T): Obs
8
8
 
9
9
  useEffect(() => {
10
10
  const mediator = new MediatorObservable();
11
+ const unsubscribers: Unsubscribe[] = [];
12
+
11
13
  Object.keys(observables as {}).forEach((key) => {
12
- mediator.addSource(observables[key], (value) => {
13
- setValues({ ...values, [key]: value });
14
+ const onNext = (value: any) => setValues({ ...values, [key]: value });
15
+ mediator.addSource(observables[key], onNext);
16
+
17
+ unsubscribers.push(() => {
18
+ observables[key].unsubscribe(onNext);
14
19
  });
15
20
  });
16
21
 
17
- return mediator.subscribe();
22
+ return () => unsubscribers.forEach((unsubscribe) => unsubscribe());
18
23
  }, []);
19
24
 
20
25
  return values;
@@ -3,6 +3,7 @@ export function isDev(): boolean {
3
3
  }
4
4
 
5
5
  function isNodeDev(): boolean {
6
+ // eslint-disable-next-line @typescript-eslint/dot-notation
6
7
  return ['test', 'development'].includes(process.env['NODE_ENV'] ?? '');
7
8
  }
8
9
 
@@ -0,0 +1 @@
1
+ export const notNull = (value: any) => value !== null && value !== undefined;
@@ -10,7 +10,6 @@ import {
10
10
  ObjectPattern,
11
11
  TSParameterProperty,
12
12
  } from '@babel/types';
13
- import { get } from 'lodash';
14
13
 
15
14
  const never = '';
16
15
 
@@ -93,3 +92,10 @@ function getNodeName(node: AcceptedNodeType): string {
93
92
  }
94
93
  return node.name;
95
94
  }
95
+
96
+ function get(node: any, path: string): any {
97
+ if (node === undefined || node === null) return undefined;
98
+ const [key, ...rest] = path.split('.');
99
+ if (rest.length === 0) return node[key];
100
+ return get(node[key], rest.join('.'));
101
+ }
@@ -1,4 +0,0 @@
1
- import type { Constructable } from '../../types';
2
- import type { Graph } from '../Graph';
3
- export declare function NullProps(Graph: Constructable<Graph>): {};
4
- //# sourceMappingURL=NullProps.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NullProps.d.ts","sourceRoot":"","sources":["../../../../src/graph/registry/NullProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,MAEpD"}
@@ -1,25 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NullProps = void 0;
4
- const isDev_1 = require("../../utils/isDev");
5
- function NullProps(Graph) {
6
- return new Proxy({}, new NullPropsProxyHandler(Graph));
7
- }
8
- exports.NullProps = NullProps;
9
- class NullPropsProxyHandler {
10
- constructor(graph) {
11
- this.graph = graph;
12
- }
13
- get(target, property, receiver) {
14
- if (property in target)
15
- return Reflect.get(target, property, receiver);
16
- throw new Error(this.createErrorMessage(this.graph, property));
17
- }
18
- createErrorMessage(graph, property) {
19
- const graphName = (0, isDev_1.isDev)() ? graph.name : '';
20
- return `Tried to get prop ${property} in a @LifecycleBound graph ${graphName}, but props were undefined. `
21
- + `If you're using Obsidian.obtain(${graphName}) - then you should pass props to it explicitly: `
22
- + `Obsidian.obtain(${graphName}, { ${property}: 'value' });`;
23
- }
24
- }
25
- //# sourceMappingURL=NullProps.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NullProps.js","sourceRoot":"","sources":["../../../../src/graph/registry/NullProps.ts"],"names":[],"mappings":";;;AACA,6CAA0C;AAG1C,SAAgB,SAAS,CAAC,KAA2B;IACnD,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,IAAI,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;AACzD,CAAC;AAFD,8BAEC;AAED,MAAM,qBAAqB;IACzB,YAAoB,KAA2B;QAA3B,UAAK,GAAL,KAAK,CAAsB;IAAG,CAAC;IAEnD,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAE,QAAa;QACjD,IAAI,QAAQ,IAAI,MAAM;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IACjE,CAAC;IAEO,kBAAkB,CAAC,KAA2B,EAAE,QAAgB;QACtE,MAAM,SAAS,GAAG,IAAA,aAAK,GAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,OAAO,qBAAqB,QAAQ,+BAA+B,SAAS,8BAA8B;cACxG,mCAAmC,SAAS,mDAAmD;cAC/F,mBAAmB,SAAS,OAAO,QAAQ,eAAe,CAAC;IAC/D,CAAC;CACF"}
@@ -1,23 +0,0 @@
1
- import type { Constructable } from '../../types';
2
- import { isDev } from '../../utils/isDev';
3
- import type { Graph } from '../Graph';
4
-
5
- export function NullProps(Graph: Constructable<Graph>) {
6
- return new Proxy({}, new NullPropsProxyHandler(Graph));
7
- }
8
-
9
- class NullPropsProxyHandler implements ProxyHandler<{}> {
10
- constructor(private graph: Constructable<Graph>) {}
11
-
12
- get(target: object, property: string, receiver: any) {
13
- if (property in target) return Reflect.get(target, property, receiver);
14
- throw new Error(this.createErrorMessage(this.graph, property));
15
- }
16
-
17
- private createErrorMessage(graph: Constructable<Graph>, property: string) {
18
- const graphName = isDev() ? graph.name : '';
19
- return `Tried to get prop ${property} in a @LifecycleBound graph ${graphName}, but props were undefined. `
20
- + `If you're using Obsidian.obtain(${graphName}) - then you should pass props to it explicitly: `
21
- + `Obsidian.obtain(${graphName}, { ${property}: 'value' });`;
22
- }
23
- }