@signalium/query 0.0.2 → 1.0.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 (113) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/cjs/EntityMap.js +2 -2
  3. package/dist/cjs/EntityMap.js.map +1 -1
  4. package/dist/cjs/NetworkManager.js +105 -0
  5. package/dist/cjs/NetworkManager.js.map +1 -0
  6. package/dist/cjs/QueryClient.js +390 -76
  7. package/dist/cjs/QueryClient.js.map +1 -1
  8. package/dist/cjs/QueryStore.js +295 -3
  9. package/dist/cjs/QueryStore.js.map +1 -1
  10. package/dist/cjs/index.js +16 -1
  11. package/dist/cjs/index.js.map +1 -1
  12. package/dist/cjs/package.json +3 -0
  13. package/dist/cjs/parseEntities.js +3 -0
  14. package/dist/cjs/parseEntities.js.map +1 -1
  15. package/dist/cjs/proxy.js +19 -0
  16. package/dist/cjs/proxy.js.map +1 -1
  17. package/dist/cjs/query.js +40 -2
  18. package/dist/cjs/query.js.map +1 -1
  19. package/dist/cjs/stores/async.js +6 -0
  20. package/dist/cjs/stores/async.js.map +1 -0
  21. package/dist/cjs/stores/sync.js +7 -0
  22. package/dist/cjs/stores/sync.js.map +1 -0
  23. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  24. package/dist/cjs/type-utils.js +3 -0
  25. package/dist/cjs/type-utils.js.map +1 -0
  26. package/dist/cjs/types.js +19 -1
  27. package/dist/cjs/types.js.map +1 -1
  28. package/dist/esm/EntityMap.js +3 -3
  29. package/dist/esm/EntityMap.js.map +1 -1
  30. package/dist/esm/NetworkManager.d.ts +48 -0
  31. package/dist/esm/NetworkManager.d.ts.map +1 -0
  32. package/dist/esm/NetworkManager.js +101 -0
  33. package/dist/esm/NetworkManager.js.map +1 -0
  34. package/dist/esm/QueryClient.d.ts +81 -25
  35. package/dist/esm/QueryClient.d.ts.map +1 -1
  36. package/dist/esm/QueryClient.js +390 -76
  37. package/dist/esm/QueryClient.js.map +1 -1
  38. package/dist/esm/QueryStore.d.ts +64 -2
  39. package/dist/esm/QueryStore.d.ts.map +1 -1
  40. package/dist/esm/QueryStore.js +293 -2
  41. package/dist/esm/QueryStore.js.map +1 -1
  42. package/dist/esm/index.d.ts +5 -3
  43. package/dist/esm/index.d.ts.map +1 -1
  44. package/dist/esm/index.js +3 -1
  45. package/dist/esm/index.js.map +1 -1
  46. package/dist/esm/parseEntities.d.ts.map +1 -1
  47. package/dist/esm/parseEntities.js +3 -0
  48. package/dist/esm/parseEntities.js.map +1 -1
  49. package/dist/esm/proxy.d.ts +6 -0
  50. package/dist/esm/proxy.d.ts.map +1 -1
  51. package/dist/esm/proxy.js +18 -0
  52. package/dist/esm/proxy.js.map +1 -1
  53. package/dist/esm/query.d.ts +30 -29
  54. package/dist/esm/query.d.ts.map +1 -1
  55. package/dist/esm/query.js +39 -3
  56. package/dist/esm/query.js.map +1 -1
  57. package/dist/esm/stores/async.d.ts +2 -0
  58. package/dist/esm/stores/async.d.ts.map +1 -0
  59. package/dist/esm/stores/async.js +2 -0
  60. package/dist/esm/stores/async.js.map +1 -0
  61. package/dist/esm/stores/sync.d.ts +2 -0
  62. package/dist/esm/stores/sync.d.ts.map +1 -0
  63. package/dist/esm/stores/sync.js +2 -0
  64. package/dist/esm/stores/sync.js.map +1 -0
  65. package/dist/esm/type-utils.d.ts +12 -0
  66. package/dist/esm/type-utils.d.ts.map +1 -0
  67. package/dist/esm/type-utils.js +2 -0
  68. package/dist/esm/type-utils.js.map +1 -0
  69. package/dist/esm/types.d.ts +62 -5
  70. package/dist/esm/types.d.ts.map +1 -1
  71. package/dist/esm/types.js +18 -0
  72. package/dist/esm/types.js.map +1 -1
  73. package/index.d.ts +1 -0
  74. package/package.json +25 -7
  75. package/stores/async.d.ts +1 -0
  76. package/stores/async.js +15 -0
  77. package/stores/sync.d.ts +1 -0
  78. package/stores/sync.js +15 -0
  79. package/.turbo/turbo-build.log +0 -12
  80. package/ENTITY_STORE_DESIGN.md +0 -386
  81. package/dist/tsconfig.esm.tsbuildinfo +0 -1
  82. package/src/EntityMap.ts +0 -63
  83. package/src/QueryClient.ts +0 -482
  84. package/src/QueryStore.ts +0 -322
  85. package/src/__tests__/caching-persistence.test.ts +0 -983
  86. package/src/__tests__/entity-system.test.ts +0 -556
  87. package/src/__tests__/gc-time.test.ts +0 -327
  88. package/src/__tests__/mock-fetch.test.ts +0 -186
  89. package/src/__tests__/parse-entities.test.ts +0 -425
  90. package/src/__tests__/path-interpolation.test.ts +0 -225
  91. package/src/__tests__/reactivity.test.ts +0 -424
  92. package/src/__tests__/refetch-interval.test.ts +0 -262
  93. package/src/__tests__/rest-query-api.test.ts +0 -568
  94. package/src/__tests__/stale-time.test.ts +0 -357
  95. package/src/__tests__/type-to-string.test.ts +0 -129
  96. package/src/__tests__/utils.ts +0 -258
  97. package/src/__tests__/validation-edge-cases.test.ts +0 -821
  98. package/src/errors.ts +0 -124
  99. package/src/index.ts +0 -7
  100. package/src/parseEntities.ts +0 -213
  101. package/src/pathInterpolator.ts +0 -74
  102. package/src/proxy.ts +0 -257
  103. package/src/query.ts +0 -164
  104. package/src/react/__tests__/basic.test.tsx +0 -926
  105. package/src/react/__tests__/component.test.tsx +0 -984
  106. package/src/react/__tests__/utils.tsx +0 -71
  107. package/src/typeDefs.ts +0 -351
  108. package/src/types.ts +0 -132
  109. package/src/utils.ts +0 -66
  110. package/tsconfig.cjs.json +0 -14
  111. package/tsconfig.esm.json +0 -13
  112. package/tsconfig.json +0 -20
  113. package/vitest.config.ts +0 -65
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=type-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-utils.js","sourceRoot":"","sources":["../../src/type-utils.ts"],"names":[],"mappings":""}
package/dist/cjs/types.js CHANGED
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RECORD_KEY = exports.ARRAY_KEY = exports.RefetchInterval = void 0;
3
+ exports.RECORD_KEY = exports.ARRAY_KEY = exports.NetworkMode = exports.RefetchInterval = void 0;
4
+ // ================================
5
+ // Type Definitions
6
+ // ================================
4
7
  var RefetchInterval;
5
8
  (function (RefetchInterval) {
6
9
  RefetchInterval[RefetchInterval["Every1Second"] = 1000] = "Every1Second";
@@ -10,6 +13,21 @@ var RefetchInterval;
10
13
  RefetchInterval[RefetchInterval["Every1Minute"] = 60000] = "Every1Minute";
11
14
  RefetchInterval[RefetchInterval["Every5Minutes"] = 300000] = "Every5Minutes";
12
15
  })(RefetchInterval || (exports.RefetchInterval = RefetchInterval = {}));
16
+ var NetworkMode;
17
+ (function (NetworkMode) {
18
+ /**
19
+ * Always fetch regardless of network status
20
+ */
21
+ NetworkMode["Always"] = "always";
22
+ /**
23
+ * Only fetch when online (default)
24
+ */
25
+ NetworkMode["Online"] = "online";
26
+ /**
27
+ * Fetch if cached data exists, even when offline
28
+ */
29
+ NetworkMode["OfflineFirst"] = "offlineFirst";
30
+ })(NetworkMode || (exports.NetworkMode = NetworkMode = {}));
13
31
  exports.ARRAY_KEY = Symbol('array');
14
32
  exports.RECORD_KEY = Symbol('record');
15
33
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AAGA,IAAY,eAOX;AAPD,WAAY,eAAe;IACzB,wEAAmB,CAAA;IACnB,0EAAoB,CAAA;IACpB,6EAAsB,CAAA;IACtB,6EAAsB,CAAA;IACtB,yEAAoB,CAAA;IACpB,4EAAsB,CAAA;AACxB,CAAC,EAPW,eAAe,+BAAf,eAAe,QAO1B;AAyCY,QAAA,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAC5B,QAAA,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AAIA,mCAAmC;AACnC,mBAAmB;AACnB,mCAAmC;AAEnC,IAAY,eAOX;AAPD,WAAY,eAAe;IACzB,wEAAmB,CAAA;IACnB,0EAAoB,CAAA;IACpB,6EAAsB,CAAA;IACtB,6EAAsB,CAAA;IACtB,yEAAoB,CAAA;IACpB,4EAAsB,CAAA;AACxB,CAAC,EAPW,eAAe,+BAAf,eAAe,QAO1B;AAED,IAAY,WAaX;AAbD,WAAY,WAAW;IACrB;;OAEG;IACH,gCAAiB,CAAA;IACjB;;OAEG;IACH,gCAAiB,CAAA;IACjB;;OAEG;IACH,4CAA6B,CAAA;AAC/B,CAAC,EAbW,WAAW,2BAAX,WAAW,QAatB;AAqDY,QAAA,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAC5B,QAAA,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { signal } from 'signalium';
2
- import { createEntityProxy } from './proxy.js';
2
+ import { createEntityProxy, mergeValues } from './proxy.js';
3
3
  export class EntityStore {
4
4
  map = new Map();
5
5
  hasEntity(key) {
@@ -19,7 +19,7 @@ export class EntityStore {
19
19
  setPreloadedEntity(key, obj) {
20
20
  const record = {
21
21
  key,
22
- signal: signal(obj),
22
+ signal: signal(obj, { equals: false }),
23
23
  cache: new Map(),
24
24
  proxy: undefined,
25
25
  };
@@ -33,7 +33,7 @@ export class EntityStore {
33
33
  record.proxy = createEntityProxy(key, record, shape);
34
34
  }
35
35
  else {
36
- record.signal.value = obj;
36
+ record.signal.update(value => mergeValues(value, obj));
37
37
  record.cache.clear();
38
38
  }
39
39
  return record;
@@ -1 +1 @@
1
- {"version":3,"file":"EntityMap.js","sourceRoot":"","sources":["../../src/EntityMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAW/C,MAAM,OAAO,WAAW;IACd,GAAG,GAAG,IAAI,GAAG,EAAgD,CAAC;IAEtE,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,sBAAsB,CAAC,GAAW,EAAE,KAAgB;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,YAAY,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,CAAC,KAAK,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAErD,OAAO,MAAsB,CAAC;IAChC,CAAC;IAED,kBAAkB,CAAC,GAAW,EAAE,GAA4B;QAC1D,MAAM,MAAM,GAA0B;YACpC,GAAG;YACH,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC;YACnB,KAAK,EAAE,IAAI,GAAG,EAAE;YAChB,KAAK,EAAE,SAAS;SACjB,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAE1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,GAA4B,EAAE,KAAgB;QACnE,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE/B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAE3C,MAAM,CAAC,KAAK,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAED,OAAO,MAAsB,CAAC;IAChC,CAAC;CACF"}
1
+ {"version":3,"file":"EntityMap.js","sourceRoot":"","sources":["../../src/EntityMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAW5D,MAAM,OAAO,WAAW;IACd,GAAG,GAAG,IAAI,GAAG,EAAgD,CAAC;IAEtE,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,sBAAsB,CAAC,GAAW,EAAE,KAAgB;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,YAAY,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,CAAC,KAAK,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAErD,OAAO,MAAsB,CAAC;IAChC,CAAC;IAED,kBAAkB,CAAC,GAAW,EAAE,GAA4B;QAC1D,MAAM,MAAM,GAA0B;YACpC,GAAG;YACH,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YACtC,KAAK,EAAE,IAAI,GAAG,EAAE;YAChB,KAAK,EAAE,SAAS;SACjB,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAE1B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,GAA4B,EAAE,KAAgB;QACnE,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE/B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAE3C,MAAM,CAAC,KAAK,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;YACvD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAED,OAAO,MAAsB,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * NetworkManager - Tracks network connectivity status
3
+ *
4
+ * Features:
5
+ * - Signal-based reactivity for online/offline status
6
+ * - Automatic detection using navigator.onLine and events
7
+ * - Manual override capability for testing and custom scenarios
8
+ * - Platform-agnostic (works in browser and React Native)
9
+ */
10
+ import { Signal, Context } from 'signalium';
11
+ export declare class NetworkManager {
12
+ private onlineSignal;
13
+ private manualOverride;
14
+ private eventListenersAttached;
15
+ constructor(initialStatus?: boolean);
16
+ /**
17
+ * Returns true if the network is currently online
18
+ */
19
+ get isOnline(): boolean;
20
+ /**
21
+ * Manually set the network status (useful for testing)
22
+ */
23
+ setNetworkStatus(online: boolean): void;
24
+ /**
25
+ * Clear manual override and return to automatic detection
26
+ */
27
+ clearManualOverride(): void;
28
+ /**
29
+ * Get the reactive signal for online status
30
+ * This allows reactive functions to depend on network status
31
+ */
32
+ getOnlineSignal(): Signal<boolean>;
33
+ /**
34
+ * Detect current online status from the environment
35
+ */
36
+ private detectOnlineStatus;
37
+ /**
38
+ * Check if we can attach event listeners (browser or React Native)
39
+ */
40
+ private canAttachListeners;
41
+ /**
42
+ * Attach event listeners for online/offline events
43
+ */
44
+ private attachEventListeners;
45
+ }
46
+ export declare const defaultNetworkManager: NetworkManager;
47
+ export declare const NetworkManagerContext: Context<NetworkManager>;
48
+ //# sourceMappingURL=NetworkManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkManager.d.ts","sourceRoot":"","sources":["../../src/NetworkManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAU,MAAM,EAAW,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7D,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,sBAAsB,CAAS;gBAE3B,aAAa,CAAC,EAAE,OAAO;IAWnC;;OAEG;IACH,IAAI,QAAQ,IAAI,OAAO,CAOtB;IAED;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAKvC;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAK3B;;;OAGG;IACH,eAAe,IAAI,MAAM,CAAC,OAAO,CAAC;IAIlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;CA0B7B;AAGD,eAAO,MAAM,qBAAqB,gBAAuB,CAAC;AAG1D,eAAO,MAAM,qBAAqB,EAAE,OAAO,CAAC,cAAc,CAAkD,CAAC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * NetworkManager - Tracks network connectivity status
3
+ *
4
+ * Features:
5
+ * - Signal-based reactivity for online/offline status
6
+ * - Automatic detection using navigator.onLine and events
7
+ * - Manual override capability for testing and custom scenarios
8
+ * - Platform-agnostic (works in browser and React Native)
9
+ */
10
+ import { signal, context } from 'signalium';
11
+ export class NetworkManager {
12
+ onlineSignal;
13
+ manualOverride = undefined;
14
+ eventListenersAttached = false;
15
+ constructor(initialStatus) {
16
+ // Initialize with manual status if provided, otherwise detect from environment
17
+ const initialOnlineStatus = initialStatus ?? this.detectOnlineStatus();
18
+ this.onlineSignal = signal(initialOnlineStatus);
19
+ // Automatically attach event listeners if in browser/React Native environment
20
+ if (this.canAttachListeners()) {
21
+ this.attachEventListeners();
22
+ }
23
+ }
24
+ /**
25
+ * Returns true if the network is currently online
26
+ */
27
+ get isOnline() {
28
+ // Manual override takes precedence
29
+ if (this.manualOverride !== undefined) {
30
+ return this.manualOverride;
31
+ }
32
+ return this.onlineSignal.value;
33
+ }
34
+ /**
35
+ * Manually set the network status (useful for testing)
36
+ */
37
+ setNetworkStatus(online) {
38
+ this.manualOverride = online;
39
+ this.onlineSignal.value = online;
40
+ }
41
+ /**
42
+ * Clear manual override and return to automatic detection
43
+ */
44
+ clearManualOverride() {
45
+ this.manualOverride = undefined;
46
+ this.onlineSignal.value = this.detectOnlineStatus();
47
+ }
48
+ /**
49
+ * Get the reactive signal for online status
50
+ * This allows reactive functions to depend on network status
51
+ */
52
+ getOnlineSignal() {
53
+ return this.onlineSignal;
54
+ }
55
+ /**
56
+ * Detect current online status from the environment
57
+ */
58
+ detectOnlineStatus() {
59
+ // Check if we're in a browser or React Native environment
60
+ if (typeof navigator !== 'undefined' && 'onLine' in navigator) {
61
+ return navigator.onLine;
62
+ }
63
+ // Default to online if we can't detect (e.g., Node.js/SSR)
64
+ return true;
65
+ }
66
+ /**
67
+ * Check if we can attach event listeners (browser or React Native)
68
+ */
69
+ canAttachListeners() {
70
+ return typeof window !== 'undefined' && typeof window.addEventListener === 'function';
71
+ }
72
+ /**
73
+ * Attach event listeners for online/offline events
74
+ */
75
+ attachEventListeners() {
76
+ if (this.eventListenersAttached) {
77
+ return;
78
+ }
79
+ const handleOnline = () => {
80
+ if (this.manualOverride === undefined) {
81
+ this.onlineSignal.value = true;
82
+ }
83
+ };
84
+ const handleOffline = () => {
85
+ if (this.manualOverride === undefined) {
86
+ this.onlineSignal.value = false;
87
+ }
88
+ };
89
+ window.addEventListener('online', handleOnline);
90
+ window.addEventListener('offline', handleOffline);
91
+ this.eventListenersAttached = true;
92
+ // Note: In a real production app, you might want to provide a cleanup method
93
+ // to remove these listeners, but for a singleton that lives for the app lifetime,
94
+ // it's not critical
95
+ }
96
+ }
97
+ // Default singleton instance for convenience
98
+ export const defaultNetworkManager = new NetworkManager();
99
+ // Context for dependency injection
100
+ export const NetworkManagerContext = context(defaultNetworkManager);
101
+ //# sourceMappingURL=NetworkManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NetworkManager.js","sourceRoot":"","sources":["../../src/NetworkManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAU,OAAO,EAAW,MAAM,WAAW,CAAC;AAE7D,MAAM,OAAO,cAAc;IACjB,YAAY,CAAkB;IAC9B,cAAc,GAAwB,SAAS,CAAC;IAChD,sBAAsB,GAAG,KAAK,CAAC;IAEvC,YAAY,aAAuB;QACjC,+EAA+E;QAC/E,MAAM,mBAAmB,GAAG,aAAa,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAEhD,8EAA8E;QAC9E,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACV,mCAAmC;QACnC,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,cAAc,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,MAAe;QAC9B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;IACtD,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,0DAA0D;QAC1D,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC9D,OAAO,SAAS,CAAC,MAAM,CAAC;QAC1B,CAAC;QAED,2DAA2D;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,gBAAgB,KAAK,UAAU,CAAC;IACxF,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBACtC,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC;YACjC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,GAAG,EAAE;YACzB,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBACtC,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC;YAClC,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAElD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QAEnC,6EAA6E;QAC7E,kFAAkF;QAClF,oBAAoB;IACtB,CAAC;CACF;AAED,6CAA6C;AAC7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,cAAc,EAAE,CAAC;AAE1D,mCAAmC;AACnC,MAAM,CAAC,MAAM,qBAAqB,GAA4B,OAAO,CAAiB,qBAAqB,CAAC,CAAC"}
@@ -10,10 +10,11 @@
10
10
  * - Signalium-based reactivity for entity updates
11
11
  * - Self-contained validator (no external dependencies except Signalium)
12
12
  */
13
- import { type Context, Signal } from 'signalium';
14
- import { DiscriminatedQueryResult, EntityDef, QueryResult, ObjectFieldTypeDef, RefetchInterval } from './types.js';
13
+ import { type Context } from 'signalium';
14
+ import { QueryResult, EntityDef, BaseQueryResult, ObjectFieldTypeDef, RefetchInterval, NetworkMode, RetryConfig } from './types.js';
15
15
  import { EntityRecord } from './EntityMap.js';
16
16
  import { QueryStore } from './QueryStore.js';
17
+ import { NetworkManager } from './NetworkManager.js';
17
18
  export interface QueryContext {
18
19
  fetch: typeof fetch;
19
20
  evictionMultiplier?: number;
@@ -24,13 +25,46 @@ export interface QueryCacheOptions {
24
25
  gcTime?: number;
25
26
  staleTime?: number;
26
27
  refetchInterval?: RefetchInterval;
28
+ networkMode?: NetworkMode;
29
+ retry?: RetryConfig | number | false;
30
+ refreshStaleOnReconnect?: boolean;
27
31
  }
28
- export interface QueryDefinition<Params, Result> {
32
+ export interface StreamCacheOptions {
33
+ maxCount?: number;
34
+ gcTime?: number;
35
+ }
36
+ export interface QueryPaginationOptions<Result> {
37
+ getNextPageParams?(lastPage: Result, params?: QueryParams | undefined): QueryParams | undefined;
38
+ }
39
+ export type QueryParams = Record<string, string | number | boolean | undefined | null>;
40
+ export declare const enum QueryType {
41
+ Query = "query",
42
+ InfiniteQuery = "infiniteQuery",
43
+ Stream = "stream"
44
+ }
45
+ export interface QueryDefinition<Params extends QueryParams | undefined, Result> {
46
+ type: QueryType.Query;
29
47
  id: string;
30
48
  shape: ObjectFieldTypeDef;
31
- fetchFn: (context: QueryContext, params: Params) => Promise<Result>;
49
+ fetchFn: (context: QueryContext, params: Params, prevResult?: Result) => Promise<Result>;
32
50
  cache?: QueryCacheOptions;
33
51
  }
52
+ export interface InfiniteQueryDefinition<Params extends QueryParams | undefined, Result> {
53
+ type: QueryType.InfiniteQuery;
54
+ id: string;
55
+ shape: ObjectFieldTypeDef;
56
+ fetchFn: (context: QueryContext, params: Params, prevResult?: Result) => Promise<Result>;
57
+ pagination: QueryPaginationOptions<Result>;
58
+ cache?: QueryCacheOptions;
59
+ }
60
+ export interface StreamQueryDefinition<Params extends QueryParams | undefined, Result> {
61
+ type: QueryType.Stream;
62
+ id: string;
63
+ shape: EntityDef;
64
+ subscribeFn: (context: QueryContext, params: Params, onUpdate: (update: Partial<Result>) => void) => () => void;
65
+ cache?: StreamCacheOptions;
66
+ }
67
+ export type AnyQueryDefinition<Params extends QueryParams | undefined, Result> = QueryDefinition<Params, Result> | InfiniteQueryDefinition<Params, Result> | StreamQueryDefinition<Params, Result>;
34
68
  declare class RefetchManager {
35
69
  private multiplier;
36
70
  private intervalId;
@@ -59,17 +93,27 @@ declare class MemoryEvictionManager {
59
93
  * like refetch, while forwarding all the base relay properties.
60
94
  * This class combines the old QueryInstance and QueryResultImpl into a single entity.
61
95
  */
62
- export declare class QueryResultImpl<T> implements QueryResult<T> {
63
- def: QueryDefinition<any, any>;
64
- initialized: boolean;
65
- isRefetchingSignal: Signal<boolean>;
66
- updatedAt: number | undefined;
67
- private queryClient;
96
+ export declare class QueryResultImpl<T> implements BaseQueryResult<T> {
97
+ def: AnyQueryDefinition<any, any>;
68
98
  queryKey: number;
99
+ private queryClient;
100
+ private initialized;
101
+ private isRefetchingSignal;
102
+ private isFetchingMoreSignal;
103
+ private updatedAt;
69
104
  private params;
105
+ private refIds;
106
+ private refetchPromise;
107
+ private fetchMorePromise;
108
+ private attemptCount;
109
+ private unsubscribe?;
70
110
  private relay;
71
- private relayState;
72
- constructor(def: QueryDefinition<any, any>, queryClient: QueryClient, queryKey: number, params: any);
111
+ private _relayState;
112
+ private wasOffline;
113
+ private get relayState();
114
+ private _nextPageParams;
115
+ private get nextPageParams();
116
+ constructor(def: AnyQueryDefinition<any, any>, queryClient: QueryClient, queryKey: number, params: QueryParams | undefined);
73
117
  get value(): T | undefined;
74
118
  get error(): unknown;
75
119
  get isPending(): boolean;
@@ -77,25 +121,35 @@ export declare class QueryResultImpl<T> implements QueryResult<T> {
77
121
  get isResolved(): boolean;
78
122
  get isSettled(): boolean;
79
123
  get isReady(): boolean;
80
- get isRefetching(): boolean;
81
- get isFetching(): boolean;
82
124
  private get _version();
83
125
  private get _signal();
84
126
  private get _flags();
85
127
  then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined): Promise<TResult1 | TResult2>;
86
128
  catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined): Promise<T | TResult>;
87
129
  finally(onfinally?: (() => void) | null | undefined): Promise<T>;
88
- refetch(): Promise<T>;
89
- /**
90
- * Fetches fresh data, updates the cache, and updates updatedAt timestamp
91
- */
92
- runQuery(): Promise<T>;
93
- isStale(): boolean;
130
+ get [Symbol.toStringTag](): string;
94
131
  /**
95
132
  * Initialize the query by loading from cache and fetching if stale
96
133
  */
97
134
  private initialize;
98
- get [Symbol.toStringTag](): string;
135
+ /**
136
+ * Handle stream updates by merging with existing entity.
137
+ * Deep merging is handled automatically by parseEntities/setEntity.
138
+ */
139
+ private setupSubscription;
140
+ /**
141
+ * Fetches fresh data, updates the cache, and updates updatedAt timestamp
142
+ */
143
+ private runQuery;
144
+ refetch(): Promise<T>;
145
+ fetchNextPage(): Promise<T>;
146
+ get isRefetching(): boolean;
147
+ get isFetchingMore(): boolean;
148
+ get isFetching(): boolean;
149
+ get hasNextPage(): boolean;
150
+ get isStale(): boolean;
151
+ get isPaused(): boolean;
152
+ private getRetryConfig;
99
153
  }
100
154
  export declare class QueryClient {
101
155
  private store;
@@ -104,16 +158,18 @@ export declare class QueryClient {
104
158
  queryInstances: Map<number, QueryResultImpl<unknown>>;
105
159
  memoryEvictionManager: MemoryEvictionManager;
106
160
  refetchManager: RefetchManager;
107
- constructor(store: QueryStore, context?: QueryContext);
161
+ networkManager: NetworkManager;
162
+ isServer: boolean;
163
+ constructor(store: QueryStore, context?: QueryContext, networkManager?: NetworkManager);
108
164
  getContext(): QueryContext;
109
- saveQueryData(queryDef: QueryDefinition<any, any>, queryKey: number, data: unknown, entityRefs: Set<number>): void;
165
+ saveQueryData(queryDef: AnyQueryDefinition<QueryParams | undefined, unknown>, queryKey: number, data: unknown, updatedAt: number, entityRefs: Set<number>): void;
110
166
  activateQuery(queryInstance: QueryResultImpl<unknown>): void;
111
- loadCachedQuery(queryDef: QueryDefinition<any, any>, queryKey: number): import("./QueryStore.js").MaybePromise<import("./QueryStore.js").CachedQuery | undefined>;
167
+ loadCachedQuery(queryDef: AnyQueryDefinition<QueryParams | undefined, unknown>, queryKey: number): import("./QueryStore.js").MaybePromise<import("./QueryStore.js").CachedQuery | undefined>;
112
168
  /**
113
169
  * Loads a query from the document store and returns a QueryResult
114
170
  * that triggers fetches and prepopulates with cached data
115
171
  */
116
- getQuery<Params, Result>(queryDef: QueryDefinition<Params, Result>, params: Params): DiscriminatedQueryResult<Result>;
172
+ getQuery<T>(queryDef: AnyQueryDefinition<any, any>, params: QueryParams | undefined): QueryResult<T>;
117
173
  hydrateEntity(key: number, shape: EntityDef): EntityRecord;
118
174
  saveEntity(key: number, obj: Record<string, unknown>, shape: EntityDef, entityRefs?: Set<number>): EntityRecord;
119
175
  destroy(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"QueryClient.d.ts","sourceRoot":"","sources":["../../src/QueryClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueryClient.d.ts","sourceRoot":"","sources":["../../src/QueryClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAiE,KAAK,OAAO,EAAkB,MAAM,WAAW,CAAC;AAExH,OAAO,EACL,WAAW,EACX,SAAS,EACT,eAAe,EACf,kBAAkB,EAElB,eAAe,EACf,WAAW,EACX,WAAW,EACZ,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,YAAY,EAAe,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;IACrC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB,CAAC,MAAM;IAC5C,iBAAiB,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;CACjG;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;AAEvF,0BAAkB,SAAS;IACzB,KAAK,UAAU;IACf,aAAa,kBAAkB;IAC/B,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,eAAe,CAAC,MAAM,SAAS,WAAW,GAAG,SAAS,EAAE,MAAM;IAC7E,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,kBAAkB,CAAC;IAC1B,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACzF,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAuB,CAAC,MAAM,SAAS,WAAW,GAAG,SAAS,EAAE,MAAM;IACrF,IAAI,EAAE,SAAS,CAAC,aAAa,CAAC;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,kBAAkB,CAAC;IAC1B,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACzF,UAAU,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC3C,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB,CAAC,MAAM,SAAS,WAAW,GAAG,SAAS,EAAE,MAAM;IACnF,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAChH,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAED,MAAM,MAAM,kBAAkB,CAAC,MAAM,SAAS,WAAW,GAAG,SAAS,EAAE,MAAM,IACzE,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,GACvC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAS1C,cAAM,cAAc;IAON,OAAO,CAAC,UAAU;IAN9B,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,KAAK,CAAa;IAG1B,OAAO,CAAC,OAAO,CAAgD;gBAE3C,UAAU,GAAE,MAAU;IAM1C,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC;IAqBvC,WAAW,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,CAAC;IAuBvC,OAAO,CAAC,IAAI;IAoBZ,OAAO,IAAI,IAAI;CAGhB;AAKD,cAAM,qBAAqB;IAMvB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,UAAU;IANpB,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,SAAS,CAAqB;gBAG5B,WAAW,EAAE,WAAW,EACxB,UAAU,GAAE,MAAU;IAKhC,gBAAgB,CAAC,QAAQ,EAAE,MAAM;IAMjC,cAAc,CAAC,QAAQ,EAAE,MAAM;IAM/B,OAAO,CAAC,IAAI,CAWV;IAEF,OAAO,IAAI,IAAI;CAGhB;AAED;;;;GAIG;AACH,qBAAa,eAAe,CAAC,CAAC,CAAE,YAAW,eAAe,CAAC,CAAC,CAAC;IAC3D,GAAG,EAAE,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IAEjB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,oBAAoB,CAAkC;IAC9D,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,MAAM,CAAsC;IAEpD,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,gBAAgB,CAAqC;IAC7D,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,WAAW,CAAC,CAAyB;IAE7C,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,WAAW,CAA0C;IAC7D,OAAO,CAAC,UAAU,CAAkB;IAEpC,OAAO,KAAK,UAAU,GAQrB;IAED,OAAO,CAAC,eAAe,CAA6C;IAEpE,OAAO,KAAK,cAAc,GAuCzB;gBAGC,GAAG,EAAE,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,EACjC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,GAAG,SAAS;IA8FjC,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAEzB;IAED,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAID,OAAO,KAAK,QAAQ,GAEnB;IAED,OAAO,KAAK,OAAO,GAElB;IAED,OAAO,KAAK,MAAM,GAEjB;IAGD,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK,EACjC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,EACjF,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GAClF,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAI/B,KAAK,CAAC,OAAO,GAAG,KAAK,EACnB,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GAChF,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC;IAIvB,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IAMD;;OAEG;YACW,UAAU;IA2CxB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;OAEG;YACW,QAAQ;IA0FtB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC;IAwCrB,aAAa,IAAI,OAAO,CAAC,CAAC,CAAC;IAgD3B,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,OAAO,IAAI,OAAO,CAYrB;IAED,IAAI,QAAQ,IAAI,OAAO,CAuBtB;IAED,OAAO,CAAC,cAAc;CAgCvB;AAED,qBAAa,WAAW;IASpB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IATjB,OAAO,CAAC,SAAS,CAAqB;IACtC,cAAc,wCAA+C;IAC7D,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;gBAGR,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,YAAwB,EACzC,cAAc,CAAC,EAAE,cAAc;IAQjC,UAAU,IAAI,YAAY;IAI1B,aAAa,CACX,QAAQ,EAAE,kBAAkB,CAAC,WAAW,GAAG,SAAS,EAAE,OAAO,CAAC,EAC9D,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GACtB,IAAI;IAKP,aAAa,CAAC,aAAa,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,IAAI;IAW5D,eAAe,CAAC,QAAQ,EAAE,kBAAkB,CAAC,WAAW,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM;IAIhG;;;OAGG;IACH,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC;IAgBpG,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,YAAY;IAI1D,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,YAAY;IAQ/G,OAAO,IAAI,IAAI;CAIhB;AAED,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,WAAW,GAAG,SAAS,CAA+C,CAAC"}