@legendapp/state 2.0.0-beta.7 → 2.0.0-beta.9

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 (56) hide show
  1. package/config/enableDirectAccess.js +6 -3
  2. package/config/enableDirectAccess.js.map +1 -1
  3. package/config/enableDirectAccess.mjs +7 -4
  4. package/config/enableDirectAccess.mjs.map +1 -1
  5. package/config/enableReactDirectRender.d.ts +2 -0
  6. package/config/enableReactDirectRender.js +78 -0
  7. package/config/enableReactDirectRender.js.map +1 -0
  8. package/config/enableReactDirectRender.mjs +75 -0
  9. package/config/enableReactDirectRender.mjs.map +1 -0
  10. package/config/enableReactTracking.d.ts +15 -0
  11. package/config/enableReactTracking.js +47 -0
  12. package/config/enableReactTracking.js.map +1 -0
  13. package/config/enableReactTracking.mjs +45 -0
  14. package/config/enableReactTracking.mjs.map +1 -0
  15. package/history.js +1 -1
  16. package/history.js.map +1 -1
  17. package/history.mjs +1 -1
  18. package/history.mjs.map +1 -1
  19. package/index.d.ts +1 -0
  20. package/index.js +61 -28
  21. package/index.js.map +1 -1
  22. package/index.mjs +60 -29
  23. package/index.mjs.map +1 -1
  24. package/package.json +11 -1
  25. package/persist-plugins/firebase.js +8 -8
  26. package/persist-plugins/firebase.js.map +1 -1
  27. package/persist-plugins/firebase.mjs +8 -8
  28. package/persist-plugins/firebase.mjs.map +1 -1
  29. package/persist-plugins/query.d.ts +1 -3
  30. package/persist-plugins/query.js +7 -17
  31. package/persist-plugins/query.js.map +1 -1
  32. package/persist-plugins/query.mjs +7 -17
  33. package/persist-plugins/query.mjs.map +1 -1
  34. package/persist.js +14 -13
  35. package/persist.js.map +1 -1
  36. package/persist.mjs +15 -14
  37. package/persist.mjs.map +1 -1
  38. package/react-hooks/usePersistedObservable.d.ts +2 -2
  39. package/react.js +57 -22
  40. package/react.js.map +1 -1
  41. package/react.mjs +58 -23
  42. package/react.mjs.map +1 -1
  43. package/src/ObservableObject.d.ts +3 -3
  44. package/src/config/enableReactDirectRender.d.ts +2 -0
  45. package/src/config/enableReactTracking.d.ts +15 -0
  46. package/src/createObservable.d.ts +2 -0
  47. package/src/globals.d.ts +2 -0
  48. package/src/helpers.d.ts +3 -3
  49. package/src/observable.d.ts +3 -3
  50. package/src/observableInterfaces.d.ts +27 -18
  51. package/src/persist/observablePersistRemoteFunctionsAdapter.d.ts +1 -1
  52. package/src/persist/persistObservable.d.ts +3 -3
  53. package/src/persist-plugins/query.d.ts +1 -3
  54. package/src/react/For.d.ts +7 -5
  55. package/src/react/useMount.d.ts +1 -2
  56. package/src/react-hooks/usePersistedObservable.d.ts +2 -2
@@ -3,15 +3,18 @@
3
3
  var state = require('@legendapp/state');
4
4
 
5
5
  function enableDirectAccess() {
6
+ const { observableFns, set } = state.internal;
6
7
  state.configureLegendState({
7
8
  observableProperties: {
8
9
  $: {
9
10
  get(node) {
10
- state.updateTracking(node);
11
- return state.internal.peek(node);
11
+ // Get it from the observableFns Map because another config function
12
+ // might have overriden get
13
+ const get = observableFns.get('get');
14
+ return get(node);
12
15
  },
13
16
  set(node, value) {
14
- return state.internal.set(node, value);
17
+ return set(node, value);
15
18
  },
16
19
  },
17
20
  },
@@ -1 +1 @@
1
- {"version":3,"file":"enableDirectAccess.js","sources":["../../../../src/config/enableDirectAccess.ts"],"sourcesContent":[null],"names":["configureLegendState","updateTracking","internal"],"mappings":";;;;SAEgB,kBAAkB,GAAA;AAC9B,IAAAA,0BAAoB,CAAC;AACjB,QAAA,oBAAoB,EAAE;AAClB,YAAA,CAAC,EAAE;AACC,gBAAA,GAAG,CAAC,IAAI,EAAA;oBACJC,oBAAc,CAAC,IAAI,CAAC,CAAC;AACrB,oBAAA,OAAOC,cAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC9B;gBACD,GAAG,CAAC,IAAI,EAAE,KAAK,EAAA;oBACX,OAAOA,cAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;iBACpC;AACJ,aAAA;AACJ,SAAA;AACJ,KAAA,CAAC,CAAC;AACP;;;;"}
1
+ {"version":3,"file":"enableDirectAccess.js","sources":["../../../../src/config/enableDirectAccess.ts"],"sourcesContent":[null],"names":["internal","configureLegendState"],"mappings":";;;;SAEgB,kBAAkB,GAAA;AAC9B,IAAA,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,GAAGA,cAAQ,CAAC;AACxC,IAAAC,0BAAoB,CAAC;AACjB,QAAA,oBAAoB,EAAE;AAClB,YAAA,CAAC,EAAE;AACC,gBAAA,GAAG,CAAC,IAAI,EAAA;;;oBAGJ,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAA6B,CAAC;AACjE,oBAAA,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;gBACD,GAAG,CAAC,IAAI,EAAE,KAAK,EAAA;AACX,oBAAA,OAAO,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;iBAC3B;AACJ,aAAA;AACJ,SAAA;AACJ,KAAA,CAAC,CAAC;AACP;;;;"}
@@ -1,15 +1,18 @@
1
- import { configureLegendState, updateTracking, internal } from '@legendapp/state';
1
+ import { configureLegendState, internal } from '@legendapp/state';
2
2
 
3
3
  function enableDirectAccess() {
4
+ const { observableFns, set } = internal;
4
5
  configureLegendState({
5
6
  observableProperties: {
6
7
  $: {
7
8
  get(node) {
8
- updateTracking(node);
9
- return internal.peek(node);
9
+ // Get it from the observableFns Map because another config function
10
+ // might have overriden get
11
+ const get = observableFns.get('get');
12
+ return get(node);
10
13
  },
11
14
  set(node, value) {
12
- return internal.set(node, value);
15
+ return set(node, value);
13
16
  },
14
17
  },
15
18
  },
@@ -1 +1 @@
1
- {"version":3,"file":"enableDirectAccess.mjs","sources":["../../../../src/config/enableDirectAccess.ts"],"sourcesContent":[null],"names":[],"mappings":";;SAEgB,kBAAkB,GAAA;AAC9B,IAAA,oBAAoB,CAAC;AACjB,QAAA,oBAAoB,EAAE;AAClB,YAAA,CAAC,EAAE;AACC,gBAAA,GAAG,CAAC,IAAI,EAAA;oBACJ,cAAc,CAAC,IAAI,CAAC,CAAC;AACrB,oBAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC9B;gBACD,GAAG,CAAC,IAAI,EAAE,KAAK,EAAA;oBACX,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;iBACpC;AACJ,aAAA;AACJ,SAAA;AACJ,KAAA,CAAC,CAAC;AACP;;;;"}
1
+ {"version":3,"file":"enableDirectAccess.mjs","sources":["../../../../src/config/enableDirectAccess.ts"],"sourcesContent":[null],"names":[],"mappings":";;SAEgB,kBAAkB,GAAA;AAC9B,IAAA,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;AACxC,IAAA,oBAAoB,CAAC;AACjB,QAAA,oBAAoB,EAAE;AAClB,YAAA,CAAC,EAAE;AACC,gBAAA,GAAG,CAAC,IAAI,EAAA;;;oBAGJ,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAA6B,CAAC;AACjE,oBAAA,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;iBACpB;gBACD,GAAG,CAAC,IAAI,EAAE,KAAK,EAAA;AACX,oBAAA,OAAO,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;iBAC3B;AACJ,aAAA;AACJ,SAAA;AACJ,KAAA,CAAC,CAAC;AACP;;;;"}
@@ -0,0 +1,2 @@
1
+ export declare const hasSymbol: false | ((key: string) => symbol);
2
+ export declare function enableReactDirectRender(): void;
@@ -0,0 +1,78 @@
1
+ 'use strict';
2
+
3
+ var state = require('@legendapp/state');
4
+ var react$1 = require('@legendapp/state/react');
5
+ var react = require('react');
6
+
7
+ // V3TODO: Remove this file
8
+ let isEnabled = false;
9
+ function getNodePath(node) {
10
+ const arr = [];
11
+ let n = node;
12
+ while ((n === null || n === void 0 ? void 0 : n.key) !== undefined) {
13
+ arr.splice(0, 0, n.key);
14
+ n = n.parent;
15
+ }
16
+ return arr.join('.');
17
+ }
18
+ // Extracting the forwardRef inspired by https://github.com/mobxjs/mobx/blob/main/packages/mobx-react-lite/src/observer.ts
19
+ const hasSymbol = typeof Symbol === 'function' && Symbol.for;
20
+ function enableReactDirectRender() {
21
+ if (process.env.NODE_ENV === 'development') {
22
+ console.warn('[legend-state] enableReactDirectRender is deprecated and will be removed in version 3.0. Please convert it from {value} to <Memo>{value}</Memo>. See https://legendapp.com/open-source/state/migrating for more details.');
23
+ }
24
+ if (!isEnabled) {
25
+ isEnabled = true;
26
+ // Rendering observables directly inspired by Preact Signals: https://github.com/preactjs/signals/blob/main/packages/react/src/index.ts
27
+ // Add the extra primitive props so that observables can render directly
28
+ // Memoized component to wrap the observable value
29
+ const Text = react.memo(function Text({ data }) {
30
+ if (process.env.NODE_ENV === 'development') {
31
+ if (state.isObservable(data)) {
32
+ console.warn(`[legend-state] enableReactDirectRender is deprecated and will be removed in version 3.0. Please convert rendering of observable with path ${getNodePath(state.getNode(data))} to <Memo>{value}</Memo>. See https://legendapp.com/open-source/state/migrating for more details.`);
33
+ }
34
+ }
35
+ return react$1.useSelector(data);
36
+ });
37
+ const ReactTypeofSymbol = hasSymbol ? Symbol.for('react.element') : react.createElement('a').$$typeof;
38
+ const s = state.extraPrimitiveProps;
39
+ const proto = {};
40
+ // Set up activators to activate this node as being used in React
41
+ state.extraPrimitiveActivators.set('$$typeof', true);
42
+ state.extraPrimitiveActivators.set(Symbol.toPrimitive, true);
43
+ // eslint-disable-next-line no-inner-declarations
44
+ function set(key, value) {
45
+ s.set(key, value);
46
+ proto[key] = { configurable: true, value };
47
+ }
48
+ set('$$typeof', ReactTypeofSymbol);
49
+ set('type', Text);
50
+ set('_store', { validated: true });
51
+ set('key', null);
52
+ set('ref', null);
53
+ set('alternate', null);
54
+ set('_owner', null);
55
+ set('_source', null);
56
+ // Set extra props for the proxyHandler to return on primitives
57
+ s.set(Symbol.toPrimitive, (_, value) => value);
58
+ s.set('props', (obs) => ({ data: obs }));
59
+ // Set extra props for ObservablePrimitive to return on primitives
60
+ proto[Symbol.toPrimitive] = {
61
+ configurable: true,
62
+ get() {
63
+ return this.peek();
64
+ },
65
+ };
66
+ proto.props = {
67
+ configurable: true,
68
+ get() {
69
+ return { data: this };
70
+ },
71
+ };
72
+ Object.defineProperties(state.ObservablePrimitiveClass.prototype, proto);
73
+ }
74
+ }
75
+
76
+ exports.enableReactDirectRender = enableReactDirectRender;
77
+ exports.hasSymbol = hasSymbol;
78
+ //# sourceMappingURL=enableReactDirectRender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableReactDirectRender.js","sources":["../../../../src/config/enableReactDirectRender.ts"],"sourcesContent":[null],"names":["memo","isObservable","getNode","useSelector","createElement","extraPrimitiveProps","extraPrimitiveActivators","ObservablePrimitiveClass"],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import { isObservable, getNode, extraPrimitiveActivators, ObservablePrimitiveClass, extraPrimitiveProps } from '@legendapp/state';
2
+ import { useSelector } from '@legendapp/state/react';
3
+ import { memo, createElement } from 'react';
4
+
5
+ // V3TODO: Remove this file
6
+ let isEnabled = false;
7
+ function getNodePath(node) {
8
+ const arr = [];
9
+ let n = node;
10
+ while ((n === null || n === void 0 ? void 0 : n.key) !== undefined) {
11
+ arr.splice(0, 0, n.key);
12
+ n = n.parent;
13
+ }
14
+ return arr.join('.');
15
+ }
16
+ // Extracting the forwardRef inspired by https://github.com/mobxjs/mobx/blob/main/packages/mobx-react-lite/src/observer.ts
17
+ const hasSymbol = typeof Symbol === 'function' && Symbol.for;
18
+ function enableReactDirectRender() {
19
+ if (process.env.NODE_ENV === 'development') {
20
+ console.warn('[legend-state] enableReactDirectRender is deprecated and will be removed in version 3.0. Please convert it from {value} to <Memo>{value}</Memo>. See https://legendapp.com/open-source/state/migrating for more details.');
21
+ }
22
+ if (!isEnabled) {
23
+ isEnabled = true;
24
+ // Rendering observables directly inspired by Preact Signals: https://github.com/preactjs/signals/blob/main/packages/react/src/index.ts
25
+ // Add the extra primitive props so that observables can render directly
26
+ // Memoized component to wrap the observable value
27
+ const Text = memo(function Text({ data }) {
28
+ if (process.env.NODE_ENV === 'development') {
29
+ if (isObservable(data)) {
30
+ console.warn(`[legend-state] enableReactDirectRender is deprecated and will be removed in version 3.0. Please convert rendering of observable with path ${getNodePath(getNode(data))} to <Memo>{value}</Memo>. See https://legendapp.com/open-source/state/migrating for more details.`);
31
+ }
32
+ }
33
+ return useSelector(data);
34
+ });
35
+ const ReactTypeofSymbol = hasSymbol ? Symbol.for('react.element') : createElement('a').$$typeof;
36
+ const s = extraPrimitiveProps;
37
+ const proto = {};
38
+ // Set up activators to activate this node as being used in React
39
+ extraPrimitiveActivators.set('$$typeof', true);
40
+ extraPrimitiveActivators.set(Symbol.toPrimitive, true);
41
+ // eslint-disable-next-line no-inner-declarations
42
+ function set(key, value) {
43
+ s.set(key, value);
44
+ proto[key] = { configurable: true, value };
45
+ }
46
+ set('$$typeof', ReactTypeofSymbol);
47
+ set('type', Text);
48
+ set('_store', { validated: true });
49
+ set('key', null);
50
+ set('ref', null);
51
+ set('alternate', null);
52
+ set('_owner', null);
53
+ set('_source', null);
54
+ // Set extra props for the proxyHandler to return on primitives
55
+ s.set(Symbol.toPrimitive, (_, value) => value);
56
+ s.set('props', (obs) => ({ data: obs }));
57
+ // Set extra props for ObservablePrimitive to return on primitives
58
+ proto[Symbol.toPrimitive] = {
59
+ configurable: true,
60
+ get() {
61
+ return this.peek();
62
+ },
63
+ };
64
+ proto.props = {
65
+ configurable: true,
66
+ get() {
67
+ return { data: this };
68
+ },
69
+ };
70
+ Object.defineProperties(ObservablePrimitiveClass.prototype, proto);
71
+ }
72
+ }
73
+
74
+ export { enableReactDirectRender, hasSymbol };
75
+ //# sourceMappingURL=enableReactDirectRender.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableReactDirectRender.mjs","sources":["../../../../src/config/enableReactDirectRender.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type TrackingType } from '@legendapp/state';
2
+ interface ReactTrackingOptions {
3
+ auto?: boolean;
4
+ warnUnobserved?: boolean;
5
+ }
6
+ export declare function enableReactTracking({ auto, warnUnobserved }: ReactTrackingOptions): void;
7
+ import type { GetOptions } from '@legendapp/state';
8
+ declare module '@legendapp/state' {
9
+ interface ObservableBaseFns<T> {
10
+ get(options?: TrackingType | (GetOptions & {
11
+ suspense?: boolean;
12
+ })): T;
13
+ }
14
+ }
15
+ export {};
@@ -0,0 +1,47 @@
1
+ 'use strict';
2
+
3
+ var state = require('@legendapp/state');
4
+ var react$1 = require('@legendapp/state/react');
5
+ var react = require('react');
6
+
7
+ const ReactRenderContext = react.createContext(0);
8
+ function needsSelector() {
9
+ // If we're already tracking then we definitely don't need useSelector
10
+ if (!state.tracking.current) {
11
+ try {
12
+ // If there's no dispatcher we're definitely not in React
13
+ // This is an optimization to not need to run useContext. If in a future React version
14
+ // this works differently we can change it or just remove it.
15
+ const dispatcher = react.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher.current;
16
+ if (dispatcher) {
17
+ // If there's a dispatcher then we may be inside of a hook.
18
+ // Attempt a useContext hook, which will throw an error if outside of render.
19
+ react.useContext(ReactRenderContext);
20
+ return true;
21
+ }
22
+ }
23
+ catch (_a) { } // eslint-disable-line no-empty
24
+ }
25
+ return false;
26
+ }
27
+ function enableReactTracking({ auto, warnUnobserved }) {
28
+ const { get } = state.internal;
29
+ state.configureLegendState({
30
+ observableFunctions: {
31
+ get: (node, options) => {
32
+ if (needsSelector()) {
33
+ if (auto) {
34
+ return react$1.useSelector(() => get(node, options), state.isObject(options) ? options : undefined);
35
+ }
36
+ else if (process.env.NODE_ENV === 'development' && warnUnobserved) {
37
+ console.warn('[legend-state] Detected a `get()` call in an unobserved component. You may want to wrap it in observer: https://legendapp.com/open-source/state/react-api/#observer-hoc');
38
+ }
39
+ }
40
+ return get(node, options);
41
+ },
42
+ },
43
+ });
44
+ }
45
+
46
+ exports.enableReactTracking = enableReactTracking;
47
+ //# sourceMappingURL=enableReactTracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableReactTracking.js","sources":["../../../../src/config/enableReactTracking.ts"],"sourcesContent":[null],"names":["createContext","tracking","ReactInternals","useContext","internal","configureLegendState","useSelector","isObject"],"mappings":";;;;;;AAaA,MAAM,kBAAkB,GAAGA,mBAAa,CAAC,CAAC,CAAC,CAAC;AAE5C,SAAS,aAAa,GAAA;;AAElB,IAAA,IAAI,CAACC,cAAQ,CAAC,OAAO,EAAE;QACnB,IAAI;;;;AAIA,YAAA,MAAM,UAAU,GAAGC,wDAAc,CAAC,sBAAsB,CAAC,OAAO,CAAC;AACjE,YAAA,IAAI,UAAU,EAAE;;;gBAGZC,gBAAU,CAAC,kBAAkB,CAAC,CAAC;AAC/B,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;AACJ,SAAA;QAAC,OAAM,EAAA,EAAA,GAAE;AACb,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC;SAOe,mBAAmB,CAAC,EAAE,IAAI,EAAE,cAAc,EAAwB,EAAA;AAC9E,IAAA,MAAM,EAAE,GAAG,EAAE,GAAGC,cAAQ,CAAC;AAEzB,IAAAC,0BAAoB,CAAC;AACjB,QAAA,mBAAmB,EAAE;AACjB,YAAA,GAAG,EAAE,CAAC,IAAe,EAAE,OAA0D,KAAI;gBACjF,IAAI,aAAa,EAAE,EAAE;AACjB,oBAAA,IAAI,IAAI,EAAE;wBACN,OAAOC,mBAAW,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,EAAEC,cAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;AACzF,qBAAA;yBAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,IAAI,cAAc,EAAE;AACjE,wBAAA,OAAO,CAAC,IAAI,CACR,yKAAyK,CAC5K,CAAC;AACL,qBAAA;AACJ,iBAAA;AACD,gBAAA,OAAO,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;aAC7B;AACJ,SAAA;AACJ,KAAA,CAAC,CAAC;AACP;;;;"}
@@ -0,0 +1,45 @@
1
+ import { configureLegendState, isObject, tracking, internal } from '@legendapp/state';
2
+ import { useSelector } from '@legendapp/state/react';
3
+ import { createContext, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, useContext } from 'react';
4
+
5
+ const ReactRenderContext = createContext(0);
6
+ function needsSelector() {
7
+ // If we're already tracking then we definitely don't need useSelector
8
+ if (!tracking.current) {
9
+ try {
10
+ // If there's no dispatcher we're definitely not in React
11
+ // This is an optimization to not need to run useContext. If in a future React version
12
+ // this works differently we can change it or just remove it.
13
+ const dispatcher = __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentDispatcher.current;
14
+ if (dispatcher) {
15
+ // If there's a dispatcher then we may be inside of a hook.
16
+ // Attempt a useContext hook, which will throw an error if outside of render.
17
+ useContext(ReactRenderContext);
18
+ return true;
19
+ }
20
+ }
21
+ catch (_a) { } // eslint-disable-line no-empty
22
+ }
23
+ return false;
24
+ }
25
+ function enableReactTracking({ auto, warnUnobserved }) {
26
+ const { get } = internal;
27
+ configureLegendState({
28
+ observableFunctions: {
29
+ get: (node, options) => {
30
+ if (needsSelector()) {
31
+ if (auto) {
32
+ return useSelector(() => get(node, options), isObject(options) ? options : undefined);
33
+ }
34
+ else if (process.env.NODE_ENV === 'development' && warnUnobserved) {
35
+ console.warn('[legend-state] Detected a `get()` call in an unobserved component. You may want to wrap it in observer: https://legendapp.com/open-source/state/react-api/#observer-hoc');
36
+ }
37
+ }
38
+ return get(node, options);
39
+ },
40
+ },
41
+ });
42
+ }
43
+
44
+ export { enableReactTracking };
45
+ //# sourceMappingURL=enableReactTracking.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enableReactTracking.mjs","sources":["../../../../src/config/enableReactTracking.ts"],"sourcesContent":[null],"names":["ReactInternals"],"mappings":";;;;AAaA,MAAM,kBAAkB,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AAE5C,SAAS,aAAa,GAAA;;AAElB,IAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;QACnB,IAAI;;;;AAIA,YAAA,MAAM,UAAU,GAAGA,kDAAc,CAAC,sBAAsB,CAAC,OAAO,CAAC;AACjE,YAAA,IAAI,UAAU,EAAE;;;gBAGZ,UAAU,CAAC,kBAAkB,CAAC,CAAC;AAC/B,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;AACJ,SAAA;QAAC,OAAM,EAAA,EAAA,GAAE;AACb,KAAA;AACD,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC;SAOe,mBAAmB,CAAC,EAAE,IAAI,EAAE,cAAc,EAAwB,EAAA;AAC9E,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;AAEzB,IAAA,oBAAoB,CAAC;AACjB,QAAA,mBAAmB,EAAE;AACjB,YAAA,GAAG,EAAE,CAAC,IAAe,EAAE,OAA0D,KAAI;gBACjF,IAAI,aAAa,EAAE,EAAE;AACjB,oBAAA,IAAI,IAAI,EAAE;wBACN,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;AACzF,qBAAA;yBAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,IAAI,cAAc,EAAE;AACjE,wBAAA,OAAO,CAAC,IAAI,CACR,yKAAyK,CAC5K,CAAC;AACL,qBAAA;AACJ,iBAAA;AACD,gBAAA,OAAO,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;aAC7B;AACJ,SAAA;AACJ,KAAA,CAAC,CAAC;AACP;;;;"}
package/history.js CHANGED
@@ -12,7 +12,7 @@ function trackHistory(obs, targetObservable) {
12
12
  // Save to history observable by date, with the previous value
13
13
  for (let i = 0; i < changes.length; i++) {
14
14
  const { path, prevAtPath, pathTypes } = changes[i];
15
- const obj = state.constructObjectWithPath(path, prevAtPath, pathTypes);
15
+ const obj = state.constructObjectWithPath(path, pathTypes, prevAtPath);
16
16
  state.mergeIntoObservable(history[time], obj);
17
17
  }
18
18
  }
package/history.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"history.js","sources":["../../src/history/trackHistory.ts"],"sourcesContent":[null],"names":["observable","internal","constructObjectWithPath","mergeIntoObservable"],"mappings":";;;;AAYgB,SAAA,YAAY,CACxB,GAA0B,EAC1B,gBAA6E,EAAA;IAE7E,MAAM,OAAO,GAAG,gBAAgB,KAAhB,IAAA,IAAA,gBAAgB,cAAhB,gBAAgB,GAAIA,gBAAU,EAAyC,CAAC;IAExF,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,KAAI;;;AAGzB,QAAA,IAAI,CAACC,cAAQ,CAAC,WAAW,CAAC,eAAe,IAAI,CAACA,cAAQ,CAAC,WAAW,CAAC,cAAc,EAAE;YAC/E,MAAM,IAAI,GAAsB,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;;AAGtD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,gBAAA,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAEnD,MAAM,GAAG,GAAGC,6BAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBACjEC,yBAAmB,CAAE,OAAe,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AACpD,aAAA;AACJ,SAAA;AACL,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,OAAO,CAAC;AACnB;;;;"}
1
+ {"version":3,"file":"history.js","sources":["../../src/history/trackHistory.ts"],"sourcesContent":[null],"names":["observable","internal","constructObjectWithPath","mergeIntoObservable"],"mappings":";;;;AAYgB,SAAA,YAAY,CACxB,GAA0B,EAC1B,gBAA6E,EAAA;IAE7E,MAAM,OAAO,GAAG,gBAAgB,KAAhB,IAAA,IAAA,gBAAgB,cAAhB,gBAAgB,GAAIA,gBAAU,EAAyC,CAAC;IAExF,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,KAAI;;;AAGzB,QAAA,IAAI,CAACC,cAAQ,CAAC,WAAW,CAAC,eAAe,IAAI,CAACA,cAAQ,CAAC,WAAW,CAAC,cAAc,EAAE;YAC/E,MAAM,IAAI,GAAsB,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;;AAGtD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,gBAAA,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAEnD,MAAM,GAAG,GAAGC,6BAAuB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;gBACjEC,yBAAmB,CAAE,OAAe,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AACpD,aAAA;AACJ,SAAA;AACL,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,OAAO,CAAC;AACnB;;;;"}
package/history.mjs CHANGED
@@ -10,7 +10,7 @@ function trackHistory(obs, targetObservable) {
10
10
  // Save to history observable by date, with the previous value
11
11
  for (let i = 0; i < changes.length; i++) {
12
12
  const { path, prevAtPath, pathTypes } = changes[i];
13
- const obj = constructObjectWithPath(path, prevAtPath, pathTypes);
13
+ const obj = constructObjectWithPath(path, pathTypes, prevAtPath);
14
14
  mergeIntoObservable(history[time], obj);
15
15
  }
16
16
  }
package/history.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"history.mjs","sources":["../../src/history/trackHistory.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAYgB,SAAA,YAAY,CACxB,GAA0B,EAC1B,gBAA6E,EAAA;IAE7E,MAAM,OAAO,GAAG,gBAAgB,KAAhB,IAAA,IAAA,gBAAgB,cAAhB,gBAAgB,GAAI,UAAU,EAAyC,CAAC;IAExF,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,KAAI;;;AAGzB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,cAAc,EAAE;YAC/E,MAAM,IAAI,GAAsB,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;;AAGtD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,gBAAA,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAEnD,MAAM,GAAG,GAAG,uBAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBACjE,mBAAmB,CAAE,OAAe,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AACpD,aAAA;AACJ,SAAA;AACL,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,OAAO,CAAC;AACnB;;;;"}
1
+ {"version":3,"file":"history.mjs","sources":["../../src/history/trackHistory.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAYgB,SAAA,YAAY,CACxB,GAA0B,EAC1B,gBAA6E,EAAA;IAE7E,MAAM,OAAO,GAAG,gBAAgB,KAAhB,IAAA,IAAA,gBAAgB,cAAhB,gBAAgB,GAAI,UAAU,EAAyC,CAAC;IAExF,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,KAAI;;;AAGzB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,cAAc,EAAE;YAC/E,MAAM,IAAI,GAAsB,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;;AAGtD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,gBAAA,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAEnD,MAAM,GAAG,GAAG,uBAAuB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;gBACjE,mBAAmB,CAAE,OAAe,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AACpD,aAAA;AACJ,SAAA;AACL,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,OAAO,CAAC;AACnB;;;;"}
package/index.d.ts CHANGED
@@ -24,6 +24,7 @@ export declare const internal: {
24
24
  isLoadingRemote: boolean;
25
25
  isMerging: boolean;
26
26
  };
27
+ observableFns: Map<string, (node: import("./src/observableInterfaces").NodeValue, ...args: any[]) => any>;
27
28
  optimized: symbol;
28
29
  peek: typeof peek;
29
30
  set: typeof set;
package/index.js CHANGED
@@ -55,6 +55,9 @@ const symbolGetNode = Symbol('getNode');
55
55
  const symbolDelete = /* @__PURE__ */ Symbol('delete');
56
56
  const symbolOpaque = Symbol('opaque');
57
57
  const optimized = Symbol('optimized');
58
+ // TODOV3 Remove these
59
+ const extraPrimitiveActivators = new Map();
60
+ const extraPrimitiveProps = new Map();
58
61
  const globalState = {
59
62
  isLoadingLocal: false,
60
63
  isLoadingRemote: false,
@@ -426,6 +429,25 @@ function endBatch(force) {
426
429
  }
427
430
  }
428
431
 
432
+ function createObservable(value, makePrimitive, createObject, createPrimitive) {
433
+ const valueIsPromise = isPromise(value);
434
+ const root = {
435
+ _: value,
436
+ };
437
+ const node = {
438
+ root,
439
+ lazy: true,
440
+ };
441
+ const prim = makePrimitive || isActualPrimitive(value);
442
+ const obs = prim
443
+ ? new createPrimitive(node)
444
+ : createObject(node);
445
+ if (valueIsPromise) {
446
+ extractPromise(node, value);
447
+ }
448
+ return obs;
449
+ }
450
+
429
451
  function onChange(node, callback, options = {}) {
430
452
  const { initial, immediate, noArgs } = options;
431
453
  const { trackingType } = options;
@@ -746,7 +768,7 @@ function getProxy(node, p) {
746
768
  if (p !== undefined)
747
769
  node = getChildNode(node, p);
748
770
  // Create a proxy if not already cached and return it
749
- return node.proxy || (node.proxy = new Proxy(node, proxyHandler));
771
+ return (node.proxy || (node.proxy = new Proxy(node, proxyHandler)));
750
772
  }
751
773
  const proxyHandler = {
752
774
  get(node, p, receiver) {
@@ -804,6 +826,20 @@ const proxyHandler = {
804
826
  if (property) {
805
827
  return property.get(node);
806
828
  }
829
+ // TODOV3 Remove this
830
+ const isValuePrimitive = isPrimitive(value);
831
+ // If accessing a key that doesn't already exist, and this node has been activated with extra keys
832
+ // then return the values that were set. This is used by enableLegendStateReact for example.
833
+ if (value === undefined || value === null || isValuePrimitive) {
834
+ if (extraPrimitiveProps.size && (node.isActivatedPrimitive || extraPrimitiveActivators.has(p))) {
835
+ node.isActivatedPrimitive = true;
836
+ const vPrim = extraPrimitiveProps.get(p);
837
+ if (vPrim !== undefined) {
838
+ return isFunction(vPrim) ? vPrim(getProxy(node)) : vPrim;
839
+ }
840
+ }
841
+ }
842
+ // /TODOV3 Remove this
807
843
  const vProp = value === null || value === void 0 ? void 0 : value[p];
808
844
  if (isObject(value) && value[symbolOpaque]) {
809
845
  return vProp;
@@ -863,6 +899,9 @@ const proxyHandler = {
863
899
  if (fnOrComputed) {
864
900
  return fnOrComputed;
865
901
  }
902
+ if (p === 'state' && node.state) {
903
+ return node.state;
904
+ }
866
905
  // Return an observable proxy to the property
867
906
  return getProxy(node, p);
868
907
  },
@@ -1101,13 +1140,18 @@ function updateNodesAndNotify(node, newValue, prevValue, childNode, isPrim, isRo
1101
1140
  endBatch();
1102
1141
  }
1103
1142
  function extractPromise(node, value) {
1104
- value.status = 'pending';
1143
+ if (!node.state) {
1144
+ node.state = createObservable({
1145
+ isLoaded: false,
1146
+ }, false, getProxy);
1147
+ }
1105
1148
  value
1106
1149
  .then((value) => {
1107
1150
  set(node, value);
1151
+ node.state.isLoaded.set(true);
1108
1152
  })
1109
1153
  .catch((error) => {
1110
- set(node, { error, status: 'rejected' });
1154
+ node.state.error.set(error);
1111
1155
  });
1112
1156
  }
1113
1157
  function extractFunctionOrComputed(node, obj, k, v) {
@@ -1128,7 +1172,8 @@ function extractFunctionOrComputed(node, obj, k, v) {
1128
1172
  }
1129
1173
  }
1130
1174
  }
1131
- function get(node, track) {
1175
+ function get(node, options) {
1176
+ const track = options ? (isObject(options) ? options.shallow : options) : undefined;
1132
1177
  // Track by default
1133
1178
  updateTracking(node, track);
1134
1179
  return peek(node);
@@ -1216,11 +1261,14 @@ function setAtPath(obj, path, pathTypes, value, fullObj, restore) {
1216
1261
  }
1217
1262
  return obj;
1218
1263
  }
1219
- function setInObservableAtPath(obs, path, value, mode) {
1264
+ function setInObservableAtPath(obs, path, pathTypes, value, mode) {
1220
1265
  let o = obs;
1221
1266
  let v = value;
1222
1267
  for (let i = 0; i < path.length; i++) {
1223
1268
  const p = path[i];
1269
+ if (!o.peek()[p] && pathTypes[i] === 'array') {
1270
+ o[p].set([]);
1271
+ }
1224
1272
  o = o[p];
1225
1273
  v = v[p];
1226
1274
  }
@@ -1285,7 +1333,7 @@ function _mergeIntoObservable(target, source) {
1285
1333
  }
1286
1334
  return target;
1287
1335
  }
1288
- function constructObjectWithPath(path, value, pathTypes) {
1336
+ function constructObjectWithPath(path, pathTypes, value) {
1289
1337
  let out;
1290
1338
  if (path.length > 0) {
1291
1339
  let o = (out = {});
@@ -1300,11 +1348,11 @@ function constructObjectWithPath(path, value, pathTypes) {
1300
1348
  }
1301
1349
  return out;
1302
1350
  }
1303
- function deconstructObjectWithPath(path, value) {
1351
+ function deconstructObjectWithPath(path, pathTypes, value) {
1304
1352
  let o = value;
1305
1353
  for (let i = 0; i < path.length; i++) {
1306
1354
  const p = path[i];
1307
- o = o[p];
1355
+ o = o ? o[p] : pathTypes[i] === 'array' ? [] : {};
1308
1356
  }
1309
1357
  return o;
1310
1358
  }
@@ -1357,29 +1405,11 @@ ObservablePrimitiveClass.prototype.delete = function () {
1357
1405
  return this;
1358
1406
  };
1359
1407
 
1360
- function createObservable(value, makePrimitive) {
1361
- const valueIsPromise = isPromise(value);
1362
- const root = {
1363
- _: value,
1364
- };
1365
- const node = {
1366
- root,
1367
- lazy: true,
1368
- };
1369
- const prim = makePrimitive || isActualPrimitive(value);
1370
- const obs = prim
1371
- ? new ObservablePrimitiveClass(node)
1372
- : getProxy(node);
1373
- if (valueIsPromise) {
1374
- extractPromise(node, value);
1375
- }
1376
- return obs;
1377
- }
1378
1408
  function observable(value) {
1379
- return createObservable(value);
1409
+ return createObservable(value, false, getProxy, ObservablePrimitiveClass);
1380
1410
  }
1381
1411
  function observablePrimitive(value) {
1382
- return createObservable(value, /*makePrimitive*/ true);
1412
+ return createObservable(value, true, getProxy, ObservablePrimitiveClass);
1383
1413
  }
1384
1414
 
1385
1415
  function setupTracking(nodes, update, noArgs, immediate) {
@@ -1715,6 +1745,7 @@ const internal = {
1715
1745
  getNode,
1716
1746
  getProxy,
1717
1747
  globalState,
1748
+ observableFns,
1718
1749
  optimized,
1719
1750
  peek,
1720
1751
  set,
@@ -1736,6 +1767,8 @@ exports.deconstructObjectWithPath = deconstructObjectWithPath;
1736
1767
  exports.endBatch = endBatch;
1737
1768
  exports.endTracking = endTracking;
1738
1769
  exports.event = event;
1770
+ exports.extraPrimitiveActivators = extraPrimitiveActivators;
1771
+ exports.extraPrimitiveProps = extraPrimitiveProps;
1739
1772
  exports.findIDKey = findIDKey;
1740
1773
  exports.getNode = getNode;
1741
1774
  exports.getNodeValue = getNodeValue;