react-obsidian 0.0.47 → 1.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 (33) hide show
  1. package/.eslintrc.json +2 -1
  2. package/.vscode/settings.json +1 -0
  3. package/dist/src/Obsidian.d.ts +2 -2
  4. package/dist/src/Obsidian.d.ts.map +1 -1
  5. package/dist/src/Obsidian.js.map +1 -1
  6. package/dist/src/graph/registry/GraphRegistry.d.ts +1 -0
  7. package/dist/src/graph/registry/GraphRegistry.d.ts.map +1 -1
  8. package/dist/src/graph/registry/GraphRegistry.js +8 -1
  9. package/dist/src/graph/registry/GraphRegistry.js.map +1 -1
  10. package/dist/src/graph/registry/NullProps.d.ts +4 -0
  11. package/dist/src/graph/registry/NullProps.d.ts.map +1 -0
  12. package/dist/src/graph/registry/NullProps.js +25 -0
  13. package/dist/src/graph/registry/NullProps.js.map +1 -0
  14. package/dist/src/observable/useObserver.d.ts +4 -2
  15. package/dist/src/observable/useObserver.d.ts.map +1 -1
  16. package/dist/src/observable/useObserver.js +6 -1
  17. package/dist/src/observable/useObserver.js.map +1 -1
  18. package/dist/src/utils/isDev.d.ts +2 -0
  19. package/dist/src/utils/isDev.d.ts.map +1 -0
  20. package/dist/src/utils/isDev.js +17 -0
  21. package/dist/src/utils/isDev.js.map +1 -0
  22. package/dist/test/fixtures/LifecycleBoundGraph.d.ts +3 -2
  23. package/dist/test/fixtures/LifecycleBoundGraph.d.ts.map +1 -1
  24. package/dist/test/fixtures/LifecycleBoundGraph.js +9 -0
  25. package/dist/test/fixtures/LifecycleBoundGraph.js.map +1 -1
  26. package/documentation/docs/documentation/usage/Reactivity.mdx +20 -0
  27. package/documentation/yarn.lock +8167 -0
  28. package/package.json +1 -1
  29. package/src/Obsidian.ts +3 -3
  30. package/src/graph/registry/GraphRegistry.ts +9 -1
  31. package/src/graph/registry/NullProps.ts +23 -0
  32. package/src/observable/useObserver.ts +18 -3
  33. package/src/utils/isDev.ts +12 -0
package/.eslintrc.json CHANGED
@@ -89,7 +89,8 @@
89
89
  "unused-imports/no-unused-vars": [
90
90
  "error",
91
91
  { "vars": "all", "varsIgnorePattern": "^_", "args": "after-used", "argsIgnorePattern": "^_" }
92
- ]
92
+ ],
93
+ "@typescript-eslint/ban-ts-comment": "off"
93
94
  },
94
95
  "settings": {
95
96
  "import/resolver": {
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "cSpell.words": [
3
+ "Middlewares",
3
4
  "unmagler"
4
5
  ]
5
6
  }
@@ -1,8 +1,8 @@
1
1
  import { ObjectGraph } from './graph/ObjectGraph';
2
- import { Constructable, GraphInternals, ServiceLocator } from './types';
2
+ import { GraphInternals, ServiceLocator } from './types';
3
3
  import { GraphMiddleware } from './graph/registry/GraphMiddleware';
4
4
  export default class Obsidian {
5
- obtain<T extends ObjectGraph<P>, P = any>(Graph: Constructable<T>, props?: P): ServiceLocator<Omit<T, GraphInternals>>;
5
+ obtain<T extends ObjectGraph<P>, P>(Graph: new (...args: P[]) => T, props?: P): ServiceLocator<Omit<T, GraphInternals>>;
6
6
  inject<T extends object>(target: T, graph?: ObjectGraph): object;
7
7
  addGraphMiddleware(middleware: GraphMiddleware): void;
8
8
  clearGraphMiddlewares(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"Obsidian.d.ts","sourceRoot":"","sources":["../../src/Obsidian.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAInE,MAAM,CAAC,OAAO,OAAO,QAAQ;IAC3B,MAAM,CAAC,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EACtC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,KAAK,CAAC,EAAE,CAAC,GACR,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IAI1C,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,WAAW;IAIvD,kBAAkB,CAAC,UAAU,EAAE,eAAe;IAI9C,qBAAqB;IAIrB,WAAW;CAIZ"}
1
+ {"version":3,"file":"Obsidian.d.ts","sourceRoot":"","sources":["../../src/Obsidian.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAInE,MAAM,CAAC,OAAO,OAAO,QAAQ;IAC3B,MAAM,CAAC,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAChC,KAAK,EAAE,KAAI,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,EAC7B,KAAK,CAAC,EAAE,CAAC,GACR,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IAI1C,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,WAAW;IAIvD,kBAAkB,CAAC,UAAU,EAAE,eAAe;IAI9C,qBAAqB;IAIrB,WAAW;CAIZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"Obsidian.js","sourceRoot":"","sources":["../../src/Obsidian.ts"],"names":[],"mappings":";;;;;AAAA,mFAA2D;AAI3D,kFAA0D;AAC1D,0FAAkE;AAElE,MAAqB,QAAQ;IAC3B,MAAM,CACJ,KAAuB,EACvB,KAAS;QAET,OAAO,+BAAqB,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,CAAmB,MAAS,EAAE,KAAmB;QACrD,OAAO,sBAAY,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,kBAAkB,CAAC,UAA2B;QAC5C,uBAAa,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,qBAAqB;QACnB,uBAAa,CAAC,qBAAqB,EAAE,CAAC;IACxC,CAAC;IAED,WAAW;QACT,uBAAa,CAAC,qBAAqB,EAAE,CAAC;QACtC,uBAAa,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;CACF;AAxBD,2BAwBC"}
1
+ {"version":3,"file":"Obsidian.js","sourceRoot":"","sources":["../../src/Obsidian.ts"],"names":[],"mappings":";;;;;AAAA,mFAA2D;AAI3D,kFAA0D;AAC1D,0FAAkE;AAElE,MAAqB,QAAQ;IAC3B,MAAM,CACJ,KAA6B,EAC7B,KAAS;QAET,OAAO,+BAAqB,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,CAAmB,MAAS,EAAE,KAAmB;QACrD,OAAO,sBAAY,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,kBAAkB,CAAC,UAA2B;QAC5C,uBAAa,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,qBAAqB;QACnB,uBAAa,CAAC,qBAAqB,EAAE,CAAC;IACxC,CAAC;IAED,WAAW;QACT,uBAAa,CAAC,qBAAqB,EAAE,CAAC;QACtC,uBAAa,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;CACF;AAxBD,2BAwBC"}
@@ -12,6 +12,7 @@ export declare class GraphRegistry {
12
12
  getSubgraphs(graph: Graph): Graph[];
13
13
  getGraphInstance(name: string): Graph;
14
14
  resolve<T extends Graph>(Graph: Constructable<T>, props?: any): T;
15
+ private ensurePropsIfLifecycleBoundGraph;
15
16
  private has;
16
17
  private getFirst;
17
18
  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;AAG1C,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,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,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"}
@@ -5,6 +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
9
  class GraphRegistry {
9
10
  constructor() {
10
11
  this.constructorToInstance = new Map();
@@ -34,10 +35,16 @@ class GraphRegistry {
34
35
  if ((this.isSingleton(Graph) || this.isBoundToReactLifecycle(Graph)) && this.has(Graph)) {
35
36
  return this.getFirst(Graph);
36
37
  }
37
- const graph = this.graphMiddlewares.resolve(Graph, props);
38
+ const graph = this.graphMiddlewares.resolve(Graph, this.ensurePropsIfLifecycleBoundGraph(Graph, props));
38
39
  this.set(Graph, graph);
39
40
  return graph;
40
41
  }
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
+ }
41
48
  has(Graph) {
42
49
  var _a, _b;
43
50
  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":"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"}
1
+ {"version":3,"file":"GraphRegistry.js","sourceRoot":"","sources":["../../../../src/graph/registry/GraphRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,25 @@
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
@@ -0,0 +1 @@
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,3 +1,5 @@
1
- import { Observable } from './types';
2
- export declare function useObserver<T>(observable: Observable<T>): [T, (next: T) => void];
1
+ import { Observable } from './Observable';
2
+ type ObservableOrGenerator<T> = Observable<T> | (() => Observable<T>);
3
+ export declare function useObserver<T>(observableOrGenerator: ObservableOrGenerator<T>): [T, (next: T) => void];
4
+ export {};
3
5
  //# sourceMappingURL=useObserver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useObserver.d.ts","sourceRoot":"","sources":["../../../src/observable/useObserver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,CAWhF"}
1
+ {"version":3,"file":"useObserver.d.ts","sourceRoot":"","sources":["../../../src/observable/useObserver.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,KAAK,qBAAqB,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtE,wBAAgB,WAAW,CAAC,CAAC,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,CAetG"}
@@ -3,7 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useObserver = void 0;
4
4
  /* eslint-disable no-param-reassign */
5
5
  const react_1 = require("react");
6
- function useObserver(observable) {
6
+ const Observable_1 = require("./Observable");
7
+ function useObserver(observableOrGenerator) {
8
+ const observable = (0, react_1.useMemo)(() => getOrGenerateObservable(observableOrGenerator), []);
7
9
  const [value, setValue] = (0, react_1.useState)(observable.value);
8
10
  const onNext = (0, react_1.useCallback)((next) => {
9
11
  observable.value = next;
@@ -14,4 +16,7 @@ function useObserver(observable) {
14
16
  return [value, onNext];
15
17
  }
16
18
  exports.useObserver = useObserver;
19
+ function getOrGenerateObservable(observableOrGenerator) {
20
+ return observableOrGenerator instanceof Observable_1.Observable ? observableOrGenerator : observableOrGenerator();
21
+ }
17
22
  //# sourceMappingURL=useObserver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useObserver.js","sourceRoot":"","sources":["../../../src/observable/useObserver.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,iCAAyD;AAGzD,SAAgB,WAAW,CAAI,UAAyB;IACtD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,CAAC,IAAO,EAAE,EAAE;QACrC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;IAC1B,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACzB,CAAC;AAXD,kCAWC"}
1
+ {"version":3,"file":"useObserver.js","sourceRoot":"","sources":["../../../src/observable/useObserver.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,iCAKe;AACf,6CAA0C;AAI1C,SAAgB,WAAW,CAAI,qBAA+C;IAC5E,MAAM,UAAU,GAAG,IAAA,eAAO,EACxB,GAAG,EAAE,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,EACpD,EAAE,CACH,CAAC;IACF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAA,gBAAQ,EAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,CAAC,IAAO,EAAE,EAAE;QACrC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;IAC1B,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACzB,CAAC;AAfD,kCAeC;AAED,SAAS,uBAAuB,CAAC,qBAAiD;IAChF,OAAO,qBAAqB,YAAY,uBAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC;AACvG,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function isDev(): boolean;
2
+ //# sourceMappingURL=isDev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isDev.d.ts","sourceRoot":"","sources":["../../../src/utils/isDev.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,IAAI,OAAO,CAE/B"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isDev = void 0;
4
+ function isDev() {
5
+ return isNodeDev() || isReactNativeDev();
6
+ }
7
+ exports.isDev = isDev;
8
+ function isNodeDev() {
9
+ var _a;
10
+ return ['test', 'development'].includes((_a = process.env['NODE_ENV']) !== null && _a !== void 0 ? _a : '');
11
+ }
12
+ function isReactNativeDev() {
13
+ var _a;
14
+ // @ts-ignore
15
+ return (_a = __DEV__) !== null && _a !== void 0 ? _a : false;
16
+ }
17
+ //# sourceMappingURL=isDev.js.map
@@ -0,0 +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"}
@@ -2,10 +2,11 @@ import { ObjectGraph } from '../../src';
2
2
  export type Props = Record<string, any> & {
3
3
  stringFromProps: string;
4
4
  };
5
- export declare class LifecycleBoundGraph<P = {}> extends ObjectGraph<P & Props> {
5
+ export declare class LifecycleBoundGraph extends ObjectGraph<Props> {
6
6
  static timesCreated: number;
7
7
  private props;
8
- constructor(props: P & Props);
8
+ constructor(props: Props);
9
9
  computedFromProps(): string;
10
+ doesNotRequireProps(): string;
10
11
  }
11
12
  //# sourceMappingURL=LifecycleBoundGraph.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LifecycleBoundGraph.d.ts","sourceRoot":"","sources":["../../../test/fixtures/LifecycleBoundGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,WAAW,EAAY,MAAM,WAAW,CAAC;AAGzD,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE,qBACa,mBAAmB,CAAC,CAAC,GAAG,EAAE,CAAE,SAAQ,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC;IACrE,MAAM,CAAC,YAAY,SAAK;IACxB,OAAO,CAAC,KAAK,CAAY;gBAEb,KAAK,EAAE,CAAC,GAAG,KAAK;IAO5B,iBAAiB,IAAI,MAAM;CAK5B"}
1
+ {"version":3,"file":"LifecycleBoundGraph.d.ts","sourceRoot":"","sources":["../../../test/fixtures/LifecycleBoundGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,WAAW,EAAY,MAAM,WAAW,CAAC;AAGzD,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE,qBACa,mBAAoB,SAAQ,WAAW,CAAC,KAAK,CAAC;IACzD,MAAM,CAAC,YAAY,SAAK;IACxB,OAAO,CAAC,KAAK,CAAQ;gBAET,KAAK,EAAE,KAAK;IAOxB,iBAAiB,IAAI,MAAM;IAO3B,mBAAmB,IAAI,MAAM;CAG9B"}
@@ -24,6 +24,9 @@ let LifecycleBoundGraph = LifecycleBoundGraph_1 = class LifecycleBoundGraph exte
24
24
  ? `A string passed via props: ${this.props.stringFromProps}`
25
25
  : 'stringFromProps does not exist';
26
26
  }
27
+ doesNotRequireProps() {
28
+ return 'A string that does not require props';
29
+ }
27
30
  };
28
31
  LifecycleBoundGraph.timesCreated = 0;
29
32
  __decorate([
@@ -32,6 +35,12 @@ __decorate([
32
35
  __metadata("design:paramtypes", []),
33
36
  __metadata("design:returntype", String)
34
37
  ], LifecycleBoundGraph.prototype, "computedFromProps", null);
38
+ __decorate([
39
+ (0, src_1.Provides)(),
40
+ __metadata("design:type", Function),
41
+ __metadata("design:paramtypes", []),
42
+ __metadata("design:returntype", String)
43
+ ], LifecycleBoundGraph.prototype, "doesNotRequireProps", null);
35
44
  LifecycleBoundGraph = LifecycleBoundGraph_1 = __decorate([
36
45
  (0, LifecycleBound_1.LifecycleBound)(),
37
46
  (0, src_1.Graph)(),
@@ -1 +1 @@
1
- {"version":3,"file":"LifecycleBoundGraph.js","sourceRoot":"","sources":["../../../test/fixtures/LifecycleBoundGraph.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mCAAyD;AACzD,wEAAqE;AAK9D,IAAM,mBAAmB,2BAAzB,MAAM,mBAA4B,SAAQ,iBAAsB;IAIrE,YAAY,KAAgB;QAC1B,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,qBAAmB,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;IAGD,iBAAiB;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe;YAC/B,CAAC,CAAC,8BAA8B,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;YAC5D,CAAC,CAAC,gCAAgC,CAAC;IACvC,CAAC;;AAdM,gCAAY,GAAG,CAAC,CAAC;AASxB;IAAC,IAAA,cAAQ,GAAE;;;;4DAKV;AAfU,mBAAmB;IAD/B,IAAA,+BAAc,GAAE;IAAE,IAAA,WAAK,GAAE;;GACb,mBAAmB,CAgB/B;AAhBY,kDAAmB"}
1
+ {"version":3,"file":"LifecycleBoundGraph.js","sourceRoot":"","sources":["../../../test/fixtures/LifecycleBoundGraph.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,mCAAyD;AACzD,wEAAqE;AAK9D,IAAM,mBAAmB,2BAAzB,MAAM,mBAAoB,SAAQ,iBAAkB;IAIzD,YAAY,KAAY;QACtB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,qBAAmB,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;IAGD,iBAAiB;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe;YAC/B,CAAC,CAAC,8BAA8B,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;YAC5D,CAAC,CAAC,gCAAgC,CAAC;IACvC,CAAC;IAGD,mBAAmB;QACjB,OAAO,sCAAsC,CAAC;IAChD,CAAC;;AAnBM,gCAAY,GAAG,CAAC,CAAC;AASxB;IAAC,IAAA,cAAQ,GAAE;;;;4DAKV;AAED;IAAC,IAAA,cAAQ,GAAE;;;;8DAGV;AApBU,mBAAmB;IAD/B,IAAA,+BAAc,GAAE;IAAE,IAAA,WAAK,GAAE;;GACb,mBAAmB,CAqB/B;AArBY,kDAAmB"}
@@ -74,6 +74,26 @@ const useLogin = () => {
74
74
  }
75
75
  ```
76
76
 
77
+ ### Avoid recreating the initial observable
78
+ When using the `useObserver` hook, it is important to avoid recreating the initial observable.
79
+
80
+ ```ts title="Avoid instantiating observables in hooks"
81
+ const useLogin = () => {
82
+ const [isLoggedIn] = useObserver(new Observable(false));
83
+ }
84
+ ```
85
+
86
+ Even if the value of the observable is the same, this can cause unexpected behavior since it's instantiated on every render.
87
+
88
+ To solve this, you can pass a generator function to the useObserver hook instead:
89
+ ```ts
90
+ const useLogin = () => {
91
+ const [isLoggedIn] = useObserver(() => new Observable(false));
92
+ }
93
+ ```
94
+
95
+ If you pass a function to the useObserver hook, it will only be called on the first render. This ensures that the observable is only instantiated once.
96
+
77
97
  ### Merge multiple observable sources
78
98
  `MediatorObservable` is a special type of observable that allows you to merge multiple observable sources into a single observable. This is useful for creating side effect from one or more observables.
79
99