@wovin/core 0.1.36 → 0.2.2

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 (213) hide show
  1. package/README.md +0 -12
  2. package/dist/applog/applog-helpers.d.ts +12 -12
  3. package/dist/applog/applog-helpers.d.ts.map +1 -1
  4. package/dist/applog/applog-utils.d.ts +40 -6
  5. package/dist/applog/applog-utils.d.ts.map +1 -1
  6. package/dist/applog/datom-types.d.ts +67 -12
  7. package/dist/applog/datom-types.d.ts.map +1 -1
  8. package/dist/applog.d.ts +3 -3
  9. package/dist/applog.d.ts.map +1 -1
  10. package/dist/{applog.min.js → applog.js} +12 -7
  11. package/dist/blockstore.d.ts +1 -1
  12. package/dist/blockstore.d.ts.map +1 -1
  13. package/dist/{blockstore.min.js → blockstore.js} +1 -3
  14. package/dist/{blockstore.min.js.map → blockstore.js.map} +1 -1
  15. package/dist/chunk-22WDFLXO.js +138 -0
  16. package/dist/chunk-22WDFLXO.js.map +1 -0
  17. package/dist/chunk-3SUFNJEZ.js +1026 -0
  18. package/dist/chunk-3SUFNJEZ.js.map +1 -0
  19. package/dist/chunk-6ALNRM3J.js +435 -0
  20. package/dist/chunk-6ALNRM3J.js.map +1 -0
  21. package/dist/chunk-7Z5YDQKK.js +1 -0
  22. package/dist/{chunk-KXMTKPF4.min.js → chunk-BLF5MAWU.js} +8 -8
  23. package/dist/chunk-BLF5MAWU.js.map +1 -0
  24. package/dist/chunk-E46VTKTZ.js +1 -0
  25. package/dist/{chunk-H3VQJP56.min.js → chunk-HUIQ54TT.js} +9 -9
  26. package/dist/chunk-HUIQ54TT.js.map +1 -0
  27. package/dist/{chunk-BRC7LSM6.min.js → chunk-OC6Z6CQW.js} +5 -5
  28. package/dist/chunk-OC6Z6CQW.js.map +1 -0
  29. package/dist/chunk-SHUHRHOT.js +1923 -0
  30. package/dist/chunk-SHUHRHOT.js.map +1 -0
  31. package/dist/{chunk-QPGEBDMJ.min.js → chunk-YDAKBU6Q.js} +1 -1
  32. package/dist/chunk-YDAKBU6Q.js.map +1 -0
  33. package/dist/chunk-ZAADLBSB.js +36 -0
  34. package/dist/chunk-ZAADLBSB.js.map +1 -0
  35. package/dist/index.d.ts +7 -7
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/{index.min.js → index.js} +81 -46
  38. package/dist/ipfs/car.d.ts +11 -11
  39. package/dist/ipfs/car.d.ts.map +1 -1
  40. package/dist/ipfs/ipfs-utils.d.ts +2 -2
  41. package/dist/ipfs/ipfs-utils.d.ts.map +1 -1
  42. package/dist/ipfs.d.ts +3 -3
  43. package/dist/ipfs.d.ts.map +1 -1
  44. package/dist/{ipfs.min.js → ipfs.js} +7 -10
  45. package/dist/ipns.d.ts +1 -1
  46. package/dist/ipns.d.ts.map +1 -1
  47. package/dist/ipns.js +64 -0
  48. package/dist/ipns.js.map +1 -0
  49. package/dist/pubsub/pub-pull.d.ts +3 -3
  50. package/dist/pubsub/pub-pull.d.ts.map +1 -1
  51. package/dist/pubsub/pubsub-types.d.ts +3 -3
  52. package/dist/pubsub/pubsub-types.d.ts.map +1 -1
  53. package/dist/pubsub/snap-push.d.ts +4 -4
  54. package/dist/pubsub/snap-push.d.ts.map +1 -1
  55. package/dist/pubsub/ucan.d.ts +1 -1
  56. package/dist/pubsub/ucan.d.ts.map +1 -1
  57. package/dist/pubsub.d.ts +4 -4
  58. package/dist/pubsub.d.ts.map +1 -1
  59. package/dist/{pubsub.min.js → pubsub.js} +7 -10
  60. package/dist/query/attr-helpers.d.ts +5 -0
  61. package/dist/query/attr-helpers.d.ts.map +1 -0
  62. package/dist/query/basic.d.ts +87 -23
  63. package/dist/query/basic.d.ts.map +1 -1
  64. package/dist/query/divergences.d.ts +5 -5
  65. package/dist/query/divergences.d.ts.map +1 -1
  66. package/dist/query/entity-collection.d.ts +19 -0
  67. package/dist/query/entity-collection.d.ts.map +1 -0
  68. package/dist/query/matchers.d.ts +12 -1
  69. package/dist/query/matchers.d.ts.map +1 -1
  70. package/dist/query/memoized.d.ts +66 -0
  71. package/dist/query/memoized.d.ts.map +1 -0
  72. package/dist/query/situations.d.ts +2 -1
  73. package/dist/query/situations.d.ts.map +1 -1
  74. package/dist/query/subscribable.d.ts +111 -0
  75. package/dist/query/subscribable.d.ts.map +1 -0
  76. package/dist/query/types.d.ts +54 -14
  77. package/dist/query/types.d.ts.map +1 -1
  78. package/dist/query.d.ts +9 -5
  79. package/dist/query.d.ts.map +1 -1
  80. package/dist/{query.min.js → query.js} +55 -34
  81. package/dist/retrieve/index.d.ts +1 -1
  82. package/dist/retrieve/index.d.ts.map +1 -1
  83. package/dist/retrieve/update-thread.d.ts +3 -3
  84. package/dist/retrieve/update-thread.d.ts.map +1 -1
  85. package/dist/retrieve.d.ts +1 -1
  86. package/dist/retrieve.d.ts.map +1 -1
  87. package/dist/retrieve.js +14 -0
  88. package/dist/thread/basic.d.ts +15 -19
  89. package/dist/thread/basic.d.ts.map +1 -1
  90. package/dist/thread/filters.d.ts +8 -10
  91. package/dist/thread/filters.d.ts.map +1 -1
  92. package/dist/thread/indexes.d.ts +57 -0
  93. package/dist/thread/indexes.d.ts.map +1 -0
  94. package/dist/thread/mapped.d.ts +40 -11
  95. package/dist/thread/mapped.d.ts.map +1 -1
  96. package/dist/thread/utils.d.ts +5 -5
  97. package/dist/thread/utils.d.ts.map +1 -1
  98. package/dist/thread/writeable.d.ts +2 -2
  99. package/dist/thread/writeable.d.ts.map +1 -1
  100. package/dist/thread.d.ts +6 -5
  101. package/dist/thread.d.ts.map +1 -1
  102. package/dist/{thread.min.js → thread.js} +9 -6
  103. package/dist/types/typescript-utils.d.ts +6 -5
  104. package/dist/types/typescript-utils.d.ts.map +1 -1
  105. package/dist/types.d.ts +1 -1
  106. package/dist/types.d.ts.map +1 -1
  107. package/dist/{types.min.js → types.js} +3 -4
  108. package/dist/utils/debug-name.d.ts +13 -0
  109. package/dist/utils/debug-name.d.ts.map +1 -0
  110. package/dist/utils.d.ts +1 -1
  111. package/dist/utils.d.ts.map +1 -1
  112. package/dist/utils.js +9 -0
  113. package/package.json +32 -23
  114. package/src/applog/applog-helpers.ts +155 -0
  115. package/src/applog/applog-utils.test.ts +108 -0
  116. package/src/applog/applog-utils.ts +551 -0
  117. package/src/applog/datom-types.ts +167 -0
  118. package/src/applog/object-values.test.ts +106 -0
  119. package/src/applog.ts +3 -0
  120. package/src/blockstore/index.ts +36 -0
  121. package/src/blockstore.ts +1 -0
  122. package/src/index.ts +8 -0
  123. package/src/ipfs/car.ts +291 -0
  124. package/src/ipfs/fetch-snapshot-chain.ts +135 -0
  125. package/src/ipfs/ipfs-utils.ts +132 -0
  126. package/src/ipfs.ts +3 -0
  127. package/src/ipns/ipns-record.ts +115 -0
  128. package/src/ipns.ts +1 -0
  129. package/src/pubsub/UCAN Specs Overview.md +217 -0
  130. package/src/pubsub/connector.ts +9 -0
  131. package/src/pubsub/pub-pull.ts +31 -0
  132. package/src/pubsub/pubsub-types.ts +90 -0
  133. package/src/pubsub/snap-push.ts +278 -0
  134. package/src/pubsub/ucan-example.ts +61 -0
  135. package/src/pubsub/ucan.ts +56 -0
  136. package/src/pubsub.ts +4 -0
  137. package/src/query/attr-helpers.ts +5 -0
  138. package/src/query/basic.ts +1245 -0
  139. package/src/query/divergences.ts +50 -0
  140. package/src/query/entity-collection.ts +132 -0
  141. package/src/query/liveFilterAndMap.test.ts +102 -0
  142. package/src/query/matchers.ts +30 -0
  143. package/src/query/memoized.test.ts +151 -0
  144. package/src/query/memoized.ts +180 -0
  145. package/src/query/query-steps.ts +4 -0
  146. package/src/query/query.test.ts +538 -0
  147. package/src/query/situations.ts +261 -0
  148. package/src/query/subscribable.test.ts +245 -0
  149. package/src/query/subscribable.ts +234 -0
  150. package/src/query/types.ts +155 -0
  151. package/src/query/withoutDeleted.test.ts +204 -0
  152. package/src/query.ts +9 -0
  153. package/src/retrieve/index.ts +1 -0
  154. package/src/retrieve/update-thread.ts +248 -0
  155. package/src/retrieve.ts +1 -0
  156. package/src/test/perf/query.1m.perf.test.ts +94 -0
  157. package/src/test/perf/query.perf.test.ts +389 -0
  158. package/src/test/perf/query.realdata.perf.test.ts +182 -0
  159. package/src/thread/basic.ts +209 -0
  160. package/src/thread/filters.ts +227 -0
  161. package/src/thread/indexes.ts +256 -0
  162. package/src/thread/joinThreads.test.ts +304 -0
  163. package/src/thread/mapped.ts +226 -0
  164. package/src/thread/utils.ts +144 -0
  165. package/src/thread/writeable.ts +163 -0
  166. package/src/thread.ts +6 -0
  167. package/src/types/typescript-utils.ts +64 -0
  168. package/src/types.ts +1 -0
  169. package/src/utils/debug-name.ts +54 -0
  170. package/src/utils.ts +4 -0
  171. package/dist/chunk-2Y2PYHGR.min.js +0 -65
  172. package/dist/chunk-2Y2PYHGR.min.js.map +0 -1
  173. package/dist/chunk-5MMGBK2U.min.js +0 -1
  174. package/dist/chunk-7IDQIMQO.min.js +0 -1
  175. package/dist/chunk-BRC7LSM6.min.js.map +0 -1
  176. package/dist/chunk-COXXILXC.min.js +0 -512
  177. package/dist/chunk-COXXILXC.min.js.map +0 -1
  178. package/dist/chunk-GDX2OO7L.min.js +0 -9080
  179. package/dist/chunk-GDX2OO7L.min.js.map +0 -1
  180. package/dist/chunk-H3VQJP56.min.js.map +0 -1
  181. package/dist/chunk-HYMC7W6S.min.js +0 -1549
  182. package/dist/chunk-HYMC7W6S.min.js.map +0 -1
  183. package/dist/chunk-KEHU7HGZ.min.js +0 -5216
  184. package/dist/chunk-KEHU7HGZ.min.js.map +0 -1
  185. package/dist/chunk-KXMTKPF4.min.js.map +0 -1
  186. package/dist/chunk-PHITDXZT.min.js +0 -36
  187. package/dist/chunk-QO2KMGDN.min.js +0 -3771
  188. package/dist/chunk-QO2KMGDN.min.js.map +0 -1
  189. package/dist/chunk-QPGEBDMJ.min.js.map +0 -1
  190. package/dist/chunk-WXLCBTHX.min.js +0 -1606
  191. package/dist/chunk-WXLCBTHX.min.js.map +0 -1
  192. package/dist/ipns.min.js +0 -6419
  193. package/dist/ipns.min.js.map +0 -1
  194. package/dist/mobx/mobx-utils.d.ts +0 -82
  195. package/dist/mobx/mobx-utils.d.ts.map +0 -1
  196. package/dist/mobx.d.ts +0 -2
  197. package/dist/mobx.d.ts.map +0 -1
  198. package/dist/mobx.min.js +0 -141
  199. package/dist/retrieve.min.js +0 -17
  200. package/dist/types.min.js.map +0 -1
  201. package/dist/utils.min.js +0 -10
  202. package/dist/utils.min.js.map +0 -1
  203. /package/dist/{applog.min.js.map → applog.js.map} +0 -0
  204. /package/dist/{chunk-5MMGBK2U.min.js.map → chunk-7Z5YDQKK.js.map} +0 -0
  205. /package/dist/{chunk-7IDQIMQO.min.js.map → chunk-E46VTKTZ.js.map} +0 -0
  206. /package/dist/{chunk-PHITDXZT.min.js.map → index.js.map} +0 -0
  207. /package/dist/{index.min.js.map → ipfs.js.map} +0 -0
  208. /package/dist/{ipfs.min.js.map → pubsub.js.map} +0 -0
  209. /package/dist/{mobx.min.js.map → query.js.map} +0 -0
  210. /package/dist/{pubsub.min.js.map → retrieve.js.map} +0 -0
  211. /package/dist/{query.min.js.map → thread.js.map} +0 -0
  212. /package/dist/{retrieve.min.js.map → types.js.map} +0 -0
  213. /package/dist/{thread.min.js.map → utils.js.map} +0 -0
@@ -3,7 +3,7 @@ import {
3
3
  integratePub,
4
4
  isShare,
5
5
  isSubscription
6
- } from "./chunk-BRC7LSM6.min.js";
6
+ } from "./chunk-OC6Z6CQW.js";
7
7
  import {
8
8
  chunkApplogs,
9
9
  encodeSnapshotApplogsAsCar,
@@ -11,14 +11,11 @@ import {
11
11
  isSnapBlockChunks,
12
12
  prepareSnapshotForPush,
13
13
  unchunkApplogsBlock
14
- } from "./chunk-WXLCBTHX.min.js";
15
- import "./chunk-QPGEBDMJ.min.js";
16
- import "./chunk-COXXILXC.min.js";
17
- import "./chunk-GDX2OO7L.min.js";
18
- import "./chunk-HYMC7W6S.min.js";
19
- import "./chunk-QO2KMGDN.min.js";
20
- import "./chunk-KEHU7HGZ.min.js";
21
- import "./chunk-PHITDXZT.min.js";
14
+ } from "./chunk-6ALNRM3J.js";
15
+ import "./chunk-YDAKBU6Q.js";
16
+ import "./chunk-3SUFNJEZ.js";
17
+ import "./chunk-SHUHRHOT.js";
18
+ import "./chunk-ZAADLBSB.js";
22
19
  export {
23
20
  agentToShortHash,
24
21
  chunkApplogs,
@@ -31,4 +28,4 @@ export {
31
28
  prepareSnapshotForPush,
32
29
  unchunkApplogsBlock
33
30
  };
34
- //# sourceMappingURL=pubsub.min.js.map
31
+ //# sourceMappingURL=pubsub.js.map
@@ -0,0 +1,5 @@
1
+ /** Strip everything up to and including the first `/` */
2
+ export type StripFirstPrefix<S extends string> = S extends `${string}/${infer Rest}` ? Rest : S;
3
+ /** Strip a specific prefix `P/` from attribute string */
4
+ export type StripExplicitPrefix<S extends string, P extends string> = S extends `${P}/${infer Rest}` ? Rest : S;
5
+ //# sourceMappingURL=attr-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attr-helpers.d.ts","sourceRoot":"","sources":["../../src/query/attr-helpers.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,MAAM,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC,CAAA;AAE/F,yDAAyD;AACzD,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,MAAM,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC,CAAA"}
@@ -1,8 +1,9 @@
1
- import { AgentHash, Applog, ApplogValue, DatalogQueryPattern, EntityID, SearchContext } from '../applog/datom-types';
2
- import { Thread } from '../thread/basic';
3
- import { ThreadOnlyCurrent } from '../thread/filters';
4
- import { MappedThread } from '../thread/mapped';
5
- import { QueryResult } from './types';
1
+ import { Applog, ApplogValue, DatalogQueryPattern, EntityID, SearchContext } from '../applog/datom-types.ts';
2
+ import { Thread } from '../thread/basic.ts';
3
+ import { ThreadOnlyCurrent } from '../thread/filters.ts';
4
+ import { MappedThread } from '../thread/mapped.ts';
5
+ import { SubscribableArrayImpl, SubscribableImpl } from './subscribable.ts';
6
+ import { LiveQueryResult, QueryNode, QueryResult } from './types.ts';
6
7
  /**
7
8
  * Keep only the latest logs for each en&at (= last write wins)
8
9
  */
@@ -11,33 +12,87 @@ export declare const lastWriteWins: (thread: Thread, { inverseToOnlyReturnFirstL
11
12
  tolerateAlreadyFiltered?: boolean;
12
13
  }) => ThreadOnlyCurrent;
13
14
  /**
14
- * Remove all applogs for entities that have an applog: { at: `isDeleted`, val: true }
15
- * ! WARNING: If not based on lastWriteWins, it will not respect un-deletions yet (isDeleted: false)
15
+ * Remove all applogs for entities that have an applog `{ at: 'isDeleted' | 'relation/isDeleted' | 'block/isDeleted', vl: true }`.
16
+ *
17
+ * Emits synthetic `removed` events for the entity's pre-existing applogs when an
18
+ * entity becomes deleted (and synthetic `added` events for un-deletion).
19
+ *
20
+ * Un-deletion: canonical input is appending `{ at: 'isDeleted', vl: false }`. Requires
21
+ * `lastWriteWins` upstream — without it, the `vl: true` log isn't superseded so we
22
+ * can't observe a transition. Soft-warned at runtime.
16
23
  */
17
24
  export declare const withoutDeleted: (thread: Thread) => MappedThread;
25
+ /**
26
+ * One-off query — returns a plain snapshot. No subscriptions, no stale-data risk.
27
+ */
18
28
  export declare const query: (threadOrLogs: Thread | Applog[], patternOrPatterns: DatalogQueryPattern | DatalogQueryPattern[], startVariables?: SearchContext, opts?: {
19
29
  debug?: boolean;
20
30
  }) => QueryResult;
21
- export declare const queryStep: (thread: Thread, nodeSet: QueryResult | null, pattern: DatalogQueryPattern, opts?: {
31
+ /**
32
+ * One-off query step — pure filtering via makeFilter, no subscriptions.
33
+ */
34
+ export declare function queryStepOnce(thread: Thread, prevNodes: readonly QueryNode[] | null, pattern: DatalogQueryPattern, opts?: {
22
35
  debug?: boolean;
23
- }) => QueryResult;
36
+ }): QueryResult;
37
+ /**
38
+ * Live query — eagerly activated, always up-to-date.
39
+ * Returns LiveQueryResult with subscribe + dispose.
40
+ */
41
+ export declare const liveQuery: (threadOrLogs: Thread | Applog[], patternOrPatterns: DatalogQueryPattern | DatalogQueryPattern[], startVariables?: SearchContext, opts?: {
42
+ debug?: boolean;
43
+ }) => LiveQueryResult;
44
+ export declare const liveQueryStep: (thread: Thread, nodeSet: LiveQueryResult | null, pattern: DatalogQueryPattern, opts?: {
45
+ debug?: boolean;
46
+ }) => LiveQueryResult;
24
47
  export declare const queryNot: (thread: Thread, startNodes: QueryResult, patternOrPatterns: DatalogQueryPattern | DatalogQueryPattern[], opts?: {
25
48
  debug?: boolean;
26
49
  }) => QueryResult;
27
- export declare const filterAndMap: <R>(thread: Thread, pattern: DatalogQueryPattern, mapper: (keyof Applog) | (Partial<{ [key in keyof Applog]: string; }>) | ((applog: Applog) => R)) => import("..").ReadonlyObservableArray<any>;
28
- export declare const queryAndMap: <R>(threadOrLogs: Thread | Applog[], patternOrPatterns: Parameters<typeof query>[1], mapDef: string | (Partial<{ [key in keyof SearchContext]: string; }>) | ((record: SearchContext) => R), variables?: SearchContext) => import("..").ReadonlyObservableArray<any>;
29
- export declare const queryEntity: (thread: Thread, name: string, entityID: EntityID, attributes: readonly string[]) => import("mobx").IComputedValue<{
30
- [k: string]: ApplogValue;
31
- }>;
32
- export declare const agentsOfThread: (thread: Thread) => import("mobx").ObservableMap<string, number>;
33
- export declare const entityOverlap: (threadA: Thread, threadB: Thread) => import("mobx").IComputedValue<string[]>;
50
+ /** Live variant: queryNot with incremental updates.
51
+ * - Thread additions: O(new_applogs × included_nodes) only checks new applogs
52
+ * - Thread removals/resets: full recompute (rare for append-mostly logs)
53
+ * - Upstream node additions: O(new_nodes × applogs)
54
+ * - Upstream node removals: removed from output
55
+ */
56
+ export declare const liveQueryNot: (thread: Thread, upstream: LiveQueryResult, patternOrPatterns: DatalogQueryPattern | DatalogQueryPattern[], opts?: {
57
+ debug?: boolean;
58
+ }) => LiveQueryResult;
59
+ /** One-off: filter thread by pattern, map to values. Returns plain array. */
60
+ export declare const filterAndMap: <R>(thread: Thread, pattern: DatalogQueryPattern, mapper: (keyof Applog) | (Partial<{ [key in keyof Applog]: string; }>) | ((applog: Applog) => R)) => R[];
61
+ /** Live variant: returns SubscribableArray that updates when thread changes. */
62
+ export declare const liveFilterAndMap: <R>(thread: Thread, pattern: DatalogQueryPattern, mapper: (keyof Applog) | (Partial<{ [key in keyof Applog]: string; }>) | ((applog: Applog) => R)) => SubscribableArrayImpl<R>;
63
+ /** One-off: query and map results. Returns plain array. */
64
+ export declare const queryAndMap: <R>(threadOrLogs: Thread | Applog[], patternOrPatterns: Parameters<typeof query>[1], mapDef: string | (Partial<{ [key in keyof SearchContext]: string; }>) | ((record: SearchContext) => R), variables?: SearchContext) => any[];
65
+ /** Live variant: query and map results, returns SubscribableArray that updates reactively. */
66
+ export declare const liveQueryAndMap: <R>(thread: Thread, patternOrPatterns: Parameters<typeof liveQuery>[1], mapDef: string | (Partial<{ [key in keyof SearchContext]: string; }>) | ((record: SearchContext) => R)) => SubscribableArrayImpl<R>;
67
+ /** One-off: query entity attributes. Returns Record or null. Requires current-state thread (LWW). */
68
+ export declare const queryEntity: (thread: Thread, name: string, entityID: EntityID, attributes: readonly string[]) => {
69
+ [k: string]: import("../applog.ts").JsonValue;
70
+ };
71
+ /** Live variant: returns Subscribable that updates when entity attributes change. Requires current-state thread (LWW). */
72
+ export declare const liveQueryEntity: (thread: Thread, name: string, entityID: EntityID, attributes: readonly string[]) => SubscribableImpl<Record<string, import("../applog.ts").JsonValue>>;
73
+ /** Live single-attribute query. Requires current-state thread (LWW). Returns Subscribable<T | null>. */
74
+ export declare const liveEntityAt: <T extends ApplogValue>(thread: Thread, entityID: EntityID, at: string) => SubscribableImpl<T>;
75
+ export declare const agentsOfThread: (thread: Thread) => Map<string, number>;
76
+ export declare const entityOverlap: (threadA: Thread, threadB: Thread) => string[];
34
77
  export declare const entityOverlapMap: (threadA: Thread, threadB: Thread, threadAName?: string, threadBName?: string) => void;
35
- export declare const entityOverlapCount: (threadA: Thread, threadB: Thread) => import("mobx").IComputedValue<number>;
36
- export declare const querySingle: (threadOrLogs: Thread | Applog[], patternOrPatterns: Parameters<typeof query>[1], variables?: SearchContext) => import("mobx").IComputedValue<Applog>;
37
- export declare const querySingleAndMap: <MAP extends (keyof Applog | (Partial<{ [key in keyof Applog]: string; }>))>(threadOrLogs: Thread | Applog[], patternOrPatterns: Parameters<typeof query>[1], mapDef: MAP, variables?: SearchContext) => import("mobx").IComputedValue<ApplogValue | { [key in keyof MAP]: ApplogValue; }>;
38
- export declare const mapThreadWith: <R>(thread: Thread, mapDef: (keyof Applog) | (Partial<{ [key in keyof Applog]: string; }>) | ((applog: Applog) => R)) => R[] | (AgentHash | import("..").CidString | ApplogValue)[] | Partial<{
39
- [x: string]: ApplogValue;
40
- }>[];
78
+ export declare const entityOverlapCount: (threadA: Thread, threadB: Thread) => number;
79
+ /** Live variant: entity overlap count as Subscribable<number>. */
80
+ export declare const liveEntityOverlapCount: (threadA: Thread, threadB: Thread) => SubscribableImpl<number>;
81
+ export declare const querySingle: (threadOrLogs: Thread | Applog[], patternOrPatterns: Parameters<typeof query>[1], variables?: SearchContext) => Applog;
82
+ export declare const querySingleAndMap: <MAP extends (keyof Applog | (Partial<{ [key in keyof Applog]: string; }>))>(threadOrLogs: Thread | Applog[], patternOrPatterns: Parameters<typeof query>[1], mapDef: MAP, variables?: SearchContext) => any;
83
+ /** Live variant: querySingle returning Subscribable<Applog | null>. */
84
+ export declare const liveQuerySingle: (thread: Thread, patternOrPatterns: Parameters<typeof liveQuery>[1]) => SubscribableImpl<Applog>;
85
+ /** Live variant: querySingleAndMap returning Subscribable<T | undefined>. */
86
+ export declare const liveQuerySingleAndMap: <MAP extends (keyof Applog | (Partial<{ [key in keyof Applog]: string; }>))>(thread: Thread, patternOrPatterns: Parameters<typeof liveQuery>[1], mapDef: MAP) => SubscribableImpl<any>;
87
+ /** Create a single-applog mapper function from a mapDef */
88
+ export declare function makeApplogMapper<R>(mapDef: (keyof Applog) | (Partial<{
89
+ [key in keyof Applog]: string;
90
+ }>) | ((applog: Applog) => R)): (applog: Applog) => R;
91
+ /** Map an array of applogs using a mapDef */
92
+ export declare function mapApplogsWith<R>(applogs: readonly Applog[], mapDef: (keyof Applog) | (Partial<{
93
+ [key in keyof Applog]: string;
94
+ }>) | ((applog: Applog) => R)): R[];
95
+ export declare const mapThreadWith: <R>(thread: Thread, mapDef: (keyof Applog) | (Partial<{ [key in keyof Applog]: string; }>) | ((applog: Applog) => R)) => R[];
41
96
  export declare const mapQueryResultWith: <R>(queryResult: QueryResult, mapDef: string | (Partial<{ [key in keyof SearchContext]: string; }>) | ((record: SearchContext) => R)) => any[];
42
97
  /**
43
98
  * Map Applog to custom named record, e.g.:
@@ -46,10 +101,19 @@ export declare const mapQueryResultWith: <R>(queryResult: QueryResult, mapDef: s
46
101
  */
47
102
  export declare function createObjMapper<FROM extends string, TO extends string>(applogFieldMap: Partial<{
48
103
  [key in FROM]: TO;
49
- }>): (applog: { [key_1 in FROM]: any; }) => Partial<{ [key in TO]: ApplogValue; }>;
104
+ }>): (applog: { [key_1 in FROM]: any; }) => Partial<{ [key in TO]: import("../applog.ts").JsonValue; }>;
50
105
  export declare function startsWith(str: string): (value: any) => any;
51
106
  export declare function prefixAttrs(prefix: string, attrs: readonly string[]): string[];
52
107
  export declare function prefixAt(prefix: string, attr: string): string;
108
+ /** Inverse of prefixAt — strips everything up to and including the first `/` */
109
+ export declare function stripAtPrefix(attr: string): string;
110
+ /** Create a key mapper from an explicit attribute→key record */
111
+ export declare function mapAttributes<A extends string>(mapping: Record<A, string>): (attr: A) => string;
112
+ /** Resolve key mapping options to a concrete mapper function */
113
+ export declare function resolveKeyMapper(opts?: {
114
+ stripAtPrefix?: true | string;
115
+ mapKeys?: (attr: string) => string;
116
+ }): (attr: string) => string;
53
117
  export declare function threadFromMaybeArray(threadOrLogs: Thread | Applog[], name?: string): Thread;
54
118
  export declare function withTimeout<R>(timeoutMilliseconds: number, func: () => R): R;
55
119
  export declare function throwOnTimeout(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../src/query/basic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../src/query/basic.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
- import { Applog } from '../applog/datom-types';
2
- import { Thread } from '../thread/basic';
3
- import { ThreadInMemory } from '../thread/writeable';
1
+ import { Applog } from '../applog/datom-types.ts';
2
+ import { Thread } from '../thread/basic.ts';
3
+ import { ThreadInMemory } from '../thread/writeable.ts';
4
4
  export interface DivergenceLeaf {
5
5
  log: Applog;
6
6
  thread: Thread;
7
7
  }
8
- export declare const queryDivergencesByPrev: (sourceThread: Thread) => import("..").ReadonlyObservableArray<{
8
+ export declare const queryDivergencesByPrev: (sourceThread: Thread) => {
9
9
  log: Applog;
10
10
  thread: ThreadInMemory;
11
- }>;
11
+ }[];
12
12
  //# sourceMappingURL=divergences.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"divergences.d.ts","sourceRoot":"","sources":["../../src/query/divergences.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAa,MAAM,uBAAuB,CAAA;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAIpD,MAAM,WAAW,cAAc;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,sBAAsB,iBACpB,MAAM;;;EAqCc,CAAA"}
1
+ {"version":3,"file":"divergences.d.ts","sourceRoot":"","sources":["../../src/query/divergences.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAa,MAAM,0BAA0B,CAAA;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAKvD,MAAM,WAAW,cAAc;IAC9B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,sBAAsB,iBACpB,MAAM;;;GAiCnB,CAAA"}
@@ -0,0 +1,19 @@
1
+ import { ApplogValue, DatalogQueryPattern, EntityID } from '../applog/datom-types.ts';
2
+ import { Thread } from '../thread/basic.ts';
3
+ import type { Subscribable } from './subscribable.ts';
4
+ import type { StripExplicitPrefix, StripFirstPrefix } from './attr-helpers.ts';
5
+ export declare function liveEntityCollection<A extends string>(thread: Thread, discoveryPattern: DatalogQueryPattern, liveAttributes: readonly A[]): Subscribable<ReadonlyMap<EntityID, Record<A, ApplogValue | null>>>;
6
+ export declare function liveEntityCollection<A extends string>(thread: Thread, discoveryPattern: DatalogQueryPattern, liveAttributes: readonly A[], opts: {
7
+ stripAtPrefix: true;
8
+ }): Subscribable<ReadonlyMap<EntityID, Record<StripFirstPrefix<A>, ApplogValue | null>>>;
9
+ export declare function liveEntityCollection<A extends string, P extends string>(thread: Thread, discoveryPattern: DatalogQueryPattern, liveAttributes: readonly A[], opts: {
10
+ stripAtPrefix: P;
11
+ }): Subscribable<ReadonlyMap<EntityID, Record<StripExplicitPrefix<A, P>, ApplogValue | null>>>;
12
+ export declare function liveEntityCollection<A extends string>(thread: Thread, discoveryPattern: DatalogQueryPattern, liveAttributes: readonly A[], opts: {
13
+ mapKeys: (attr: A) => string;
14
+ }): Subscribable<ReadonlyMap<EntityID, Record<string, ApplogValue | null>>>;
15
+ export declare function liveEntityCollection<A extends string>(thread: Thread, discoveryPattern: DatalogQueryPattern, liveAttributes: readonly A[], opts: {
16
+ stripAtPrefix?: true | string;
17
+ mapKeys?: (attr: A) => string;
18
+ }): Subscribable<ReadonlyMap<EntityID, Record<string, ApplogValue | null>>>;
19
+ //# sourceMappingURL=entity-collection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-collection.d.ts","sourceRoot":"","sources":["../../src/query/entity-collection.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,WAAW,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAC7F,OAAO,EAAe,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAMxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAI9E,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EACpD,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,GACjF,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AACrE,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EACpD,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,EACnF,IAAI,EAAE;IAAE,aAAa,EAAE,IAAI,CAAA;CAAE,GAC3B,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AACvF,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EACtE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,EACnF,IAAI,EAAE;IAAE,aAAa,EAAE,CAAC,CAAA;CAAE,GACxB,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAC7F,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EACpD,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,EACnF,IAAI,EAAE;IAAE,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAA;CAAE,GACpC,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAC1E,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,MAAM,EACpD,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,EACnF,IAAI,EAAE;IAAE,aAAa,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAA;CAAE,GACpE,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA"}
@@ -1,4 +1,15 @@
1
- import { DatomPart } from '../applog/datom-types';
1
+ import { ApplogValue, DatomPart } from '../applog/datom-types.ts';
2
2
  export declare function includes(str: string): (vl: DatomPart) => boolean;
3
3
  export declare function includedIn(arr: string[]): (vl: DatomPart) => boolean;
4
+ /**
5
+ * Set-membership matcher: matches when the field equals any of `vals`. Use this instead of a
6
+ * bare array in a query pattern — bare arrays are rejected by the matcher (a bare array is
7
+ * ambiguous now that `vl` can hold a literal array value).
8
+ *
9
+ * Returns a `Set`, which the matcher engine checks via `.has` (O(1)). Members must be
10
+ * primitives: `Set.has` is referential, so object/array members would silently never match —
11
+ * we throw rather than fail silently. For object membership, use a predicate matcher, e.g.
12
+ * `(v) => members.some(m => isEqual(v, m))`.
13
+ */
14
+ export declare function anyOf<T extends ApplogValue>(...vals: T[]): ReadonlySet<T>;
4
15
  //# sourceMappingURL=matchers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"matchers.d.ts","sourceRoot":"","sources":["../../src/query/matchers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEjD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,IAC3B,IAAI,SAAS,aACrB;AACD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAC/B,IAAI,SAAS,aACrB"}
1
+ {"version":3,"file":"matchers.d.ts","sourceRoot":"","sources":["../../src/query/matchers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEjE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,IAC3B,IAAI,SAAS,aACrB;AACD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAC/B,IAAI,SAAS,aACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAUzE"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * memoizedFn — Simple argument memoization without MobX.
3
+ *
4
+ * Replaces computedFnDeepCompare for query functions.
5
+ * With lazy subscribe (SubscribableArray), there's no urgency to clean up
6
+ * cached entries — unsubscribed entries are just plain arrays in memory.
7
+ *
8
+ * refCountedMemoizedFn — Ref-counted memoization for reactive results.
9
+ * Returns a wrapper that increments a ref count on each call and decrements
10
+ * on dispose(). When refCount hits 0, the entry is cleaned up (with optional
11
+ * grace period).
12
+ */
13
+ interface MemoizedFnOptions {
14
+ argsEqual?: (a: any[], b: any[]) => boolean;
15
+ argsDebugName?: (...args: any[]) => string;
16
+ /** Max cache entries. Oldest evicted when exceeded. Default: unlimited. */
17
+ maxSize?: number;
18
+ }
19
+ export declare function memoizedFn<T extends (...args: any[]) => any>(name: string, fn: T, opts?: MemoizedFnOptions): T;
20
+ /** A result wrapper returned by refCountedMemoizedFn. Call release() when done. */
21
+ export interface RefCounted<T> {
22
+ readonly value: T;
23
+ /** Decrement ref count. When it reaches 0, the cache entry is cleaned up. */
24
+ release(): void;
25
+ }
26
+ interface RefCountedOptions<T extends (...args: any[]) => any> {
27
+ argsEqual?: (a: any[], b: any[]) => boolean;
28
+ argsDebugName?: (...args: any[]) => string;
29
+ /**
30
+ * Called when the last reference is released and the entry is evicted.
31
+ * Use to tear down subscriptions, dispose SubscribableArrays, etc.
32
+ */
33
+ onCleanup?: (result: ReturnType<T>, ...args: Parameters<T>) => void;
34
+ /**
35
+ * Grace period in ms before actually cleaning up after refCount hits 0.
36
+ * If someone re-acquires within this window, the entry is reused.
37
+ * Default: 0 (immediate cleanup).
38
+ */
39
+ gracePeriodMs?: number;
40
+ }
41
+ /**
42
+ * Creates a memoized function whose results are ref-counted.
43
+ *
44
+ * Currently unused — doesn't fit liveQuery's recursive multi-step structure
45
+ * (API break, cache loss on pattern change without grace period).
46
+ * See todo/2026-04-17_ciao-mobx/memoized-cache-cleanup.md for full analysis.
47
+ *
48
+ * Each call returns `RefCounted<ReturnType<fn>>`. Multiple calls with the same
49
+ * args return the same cached result with an incremented ref count.
50
+ * When all holders call `release()`, the cache entry is cleaned up
51
+ * (subject to optional grace period).
52
+ *
53
+ * Usage:
54
+ * ```
55
+ * const getFiltered = refCountedMemoizedFn('rollingFilter', (thread, pattern) => {
56
+ * // ... expensive setup, returns MappedThread
57
+ * }, { onCleanup: (result) => result.dispose() })
58
+ *
59
+ * const ref = getFiltered(myThread, myPattern)
60
+ * // use ref.value (the MappedThread)
61
+ * ref.release() // decrement; when last holder releases, onCleanup fires
62
+ * ```
63
+ */
64
+ export declare function refCountedMemoizedFn<T extends (...args: any[]) => any>(name: string, fn: T, opts?: RefCountedOptions<T>): (...args: Parameters<T>) => RefCounted<ReturnType<T>>;
65
+ export {};
66
+ //# sourceMappingURL=memoized.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoized.d.ts","sourceRoot":"","sources":["../../src/query/memoized.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAyBH,UAAU,iBAAiB;IAC1B,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAA;IAC3C,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAA;IAC1C,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC3D,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,EACL,IAAI,CAAC,EAAE,iBAAiB,GACtB,CAAC,CAkBH;AAMD,mFAAmF;AACnF,MAAM,WAAW,UAAU,CAAC,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,6EAA6E;IAC7E,OAAO,IAAI,IAAI,CAAA;CACf;AAED,UAAU,iBAAiB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG;IAC5D,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAA;IAC3C,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAA;IAC1C;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IACnE;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACtB;AASD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACrE,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,EACL,IAAI,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GACzB,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAmDvD"}
@@ -1,4 +1,5 @@
1
- import { Applog, query } from '@wovin/core';
1
+ import { Applog } from '../applog/datom-types.ts';
2
+ import { query } from './basic.ts';
2
3
  /**
3
4
  * Situations are meant to flag and possibly autocorrect or autosuggest solutions
4
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"situations.d.ts","sourceRoot":"","sources":["../../src/query/situations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAa,MAAM,aAAa,CAAA;AAKtD;;;;;;;;;GASG;AACH,UAAU,SAAS;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,OAAO,cAAc,CAAC,MAAM,OAAO,cAAc,CAAC,CAAA;IACxD,KAAK,EAAE,OAAO,KAAK,CAAA;IACnB,iBAAiB,EAAE,UAAU,EAAE,CAAA;IAC/B,QAAQ,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAC7B,CAAA;CACD;AAED,UAAU,yBAAyB;IAClC,MAAM,EAAE,GAAG,CAAA;IACX,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,UAAU,CAAC,EAAE,UAAU,CAAA;CACvB;AAED,UAAU,UAAU;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,eAAe,EAAE,eAAe,CAAA;CAChC;AAED,UAAU,eAAe;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,gBAAgB,EAAE,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,UAAU,eAAe;IACxB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,UAAU,gBAAgB;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,QAAA,MAAM,cAAc;;;;;;CAMV,CAAA;AACV,UAAU,UAAU;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,MAAM,EAAE,CAAA;CACzB;AA2ED;;GAEG;AACH,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,SAAS,EAAE,EACvB,OAAO,GAAE;IACR,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;CACpB,GACJ,yBAAyB,CAqC3B;AAkBD;;GAEG;AACH,wBAAgB,eAAe,CAC9B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GACf,UAAU,CAmCZ"}
1
+ {"version":3,"file":"situations.d.ts","sourceRoot":"","sources":["../../src/query/situations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAMlC;;;;;;;;;GASG;AACH,UAAU,SAAS;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,OAAO,cAAc,CAAC,MAAM,OAAO,cAAc,CAAC,CAAA;IACxD,KAAK,EAAE,OAAO,KAAK,CAAA;IACnB,iBAAiB,EAAE,UAAU,EAAE,CAAA;IAC/B,QAAQ,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAC7B,CAAA;CACD;AAED,UAAU,yBAAyB;IAClC,MAAM,EAAE,GAAG,CAAA;IACX,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,UAAU,CAAC,EAAE,UAAU,CAAA;CACvB;AAED,UAAU,UAAU;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,eAAe,EAAE,CAAA;IAC7B,eAAe,EAAE,eAAe,CAAA;CAChC;AAED,UAAU,eAAe;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,gBAAgB,EAAE,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,UAAU,eAAe;IACxB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,UAAU,gBAAgB;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,QAAA,MAAM,cAAc;;;;;;CAMV,CAAA;AACV,UAAU,UAAU;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,MAAM,EAAE,CAAA;CACzB;AA2ED;;GAEG;AACH,wBAAgB,yBAAyB,CACxC,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,SAAS,EAAE,EACvB,OAAO,GAAE;IACR,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,eAAe,CAAC,EAAE,OAAO,CAAA;CACpB,GACJ,yBAAyB,CAqC3B;AAkBD;;GAEG;AACH,wBAAgB,eAAe,CAC9B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GACf,UAAU,CAmCZ"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Push-based subscribable primitives for the query system.
3
+ *
4
+ * Two primitives:
5
+ * - Subscribable<T> — any value + "changed" notifications
6
+ * - SubscribableArray<T> — array + incremental delta events (added/removed)
7
+ *
8
+ * Key property: **lazy subscribe** — upstream subscriptions only activate
9
+ * when the first subscriber attaches, and deactivate when the last leaves.
10
+ * This means one-off reads (.value / .items) have zero subscription overhead.
11
+ */
12
+ export type Unsubscribe = () => void;
13
+ export interface Subscribable<T> {
14
+ /** Current value — plain read, no side effects */
15
+ readonly value: T;
16
+ /**
17
+ * Subscribe to change notifications.
18
+ * - First call activates upstream subscriptions (lazy).
19
+ * - Callback does NOT fire immediately — read .value for current state.
20
+ * - Callback fires whenever .value changes.
21
+ * - Last unsubscribe deactivates upstream.
22
+ */
23
+ subscribe(cb: () => void, type?: 'derived' | 'reaction'): Unsubscribe;
24
+ /** Tear down all internal subscriptions */
25
+ dispose(): void;
26
+ }
27
+ /**
28
+ * Implementation of Subscribable<T> with lazy upstream activation.
29
+ */
30
+ export declare class SubscribableImpl<T> implements Subscribable<T> {
31
+ private _value;
32
+ private _derivedSubscribers;
33
+ private _subscribers;
34
+ private _upstreamActive;
35
+ private _activateUpstream;
36
+ private _deactivateUpstream;
37
+ private _equals;
38
+ constructor(initialValue: T, activateUpstream?: () => Unsubscribe, opts?: {
39
+ equals?: false | ((a: T, b: T) => boolean);
40
+ });
41
+ get value(): T;
42
+ subscribe(cb: () => void, type?: 'derived' | 'reaction'): Unsubscribe;
43
+ /** Update value and notify subscribers (skips if equals check passes) */
44
+ _set(value: T): void;
45
+ private _notify;
46
+ dispose(): void;
47
+ }
48
+ /** Delta events — mirrors ThreadEvent shape */
49
+ export type ArrayEvent<T> = {
50
+ init: readonly T[];
51
+ } | {
52
+ added: readonly T[];
53
+ removed: readonly T[] | null;
54
+ };
55
+ /** Type guard for init events. Same logic as thread's isInitEvent. */
56
+ export declare function isArrayInitEvent<T>(event: ArrayEvent<T>): event is {
57
+ init: readonly T[];
58
+ };
59
+ export interface SubscribableArray<T> {
60
+ /**
61
+ * Current snapshot — plain readonly array.
62
+ *
63
+ * NOTE: only stays current while at least one subscriber is active
64
+ * (upstream is lazily activated on first `.subscribe()`). With no
65
+ * subscribers this returns the initial snapshot from construction
66
+ * and does NOT reflect later mutations. Tests/consumers that want
67
+ * to observe updates must hold a subscription (`subscribe(() => {})`
68
+ * is enough).
69
+ */
70
+ readonly items: readonly T[];
71
+ /** Length shortcut */
72
+ readonly length: number;
73
+ /**
74
+ * Subscribe to delta events.
75
+ * - First call activates upstream subscriptions (lazy).
76
+ * - No init event on subscribe — read .items for current state.
77
+ * - Receives `{ init }` only on genuine resets (triggerRemap).
78
+ * - Last unsubscribe deactivates upstream.
79
+ */
80
+ subscribe(cb: (event: ArrayEvent<T>) => void, type?: 'derived' | 'reaction'): Unsubscribe;
81
+ /** Tear down all internal subscriptions */
82
+ dispose(): void;
83
+ }
84
+ /**
85
+ * Implementation of SubscribableArray with lazy upstream activation.
86
+ *
87
+ * Constructor takes initial items (computed synchronously at query time)
88
+ * and an optional activation function that sets up upstream subscriptions.
89
+ * The activation function is only called on first `.subscribe()`.
90
+ */
91
+ export declare class SubscribableArrayImpl<T> implements SubscribableArray<T> {
92
+ private _items;
93
+ private _derivedSubscribers;
94
+ private _subscribers;
95
+ private _upstreamActive;
96
+ private _activateUpstream;
97
+ private _deactivateUpstream;
98
+ constructor(initialItems: T[], activateUpstream?: () => Unsubscribe);
99
+ get items(): readonly T[];
100
+ get length(): number;
101
+ subscribe(cb: (event: ArrayEvent<T>) => void, type?: 'derived' | 'reaction'): Unsubscribe;
102
+ /** Push items and notify subscribers */
103
+ _push(...items: T[]): void;
104
+ /** Remove items and notify subscribers */
105
+ _remove(items: readonly T[]): void;
106
+ /** Full reset — replace all items */
107
+ _reset(items: T[]): void;
108
+ private _notify;
109
+ dispose(): void;
110
+ }
111
+ //# sourceMappingURL=subscribable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscribable.d.ts","sourceRoot":"","sources":["../../src/query/subscribable.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { SearchContext } from '../applog/datom-types';
2
- import type { Thread } from '../thread/basic';
3
- import { ReadonlyObservableArray } from '../types/typescript-utils';
1
+ import { SearchContext } from '../applog/datom-types.ts';
2
+ import type { Thread } from '../thread/basic.ts';
3
+ import { ArrayEvent, SubscribableArray, Unsubscribe } from './subscribable.ts';
4
4
  export declare class QueryNode {
5
5
  readonly logsOfThisNode: Thread;
6
6
  readonly variables: SearchContext;
@@ -10,21 +10,61 @@ export declare class QueryNode {
10
10
  get threadOfTrail(): Thread;
11
11
  get trailLogs(): any;
12
12
  }
13
+ /** Shared interface for query results (one-off and live) */
14
+ export interface IQueryResult {
15
+ readonly nodes: readonly QueryNode[];
16
+ readonly size: number;
17
+ readonly isEmpty: boolean;
18
+ readonly records: readonly SearchContext[];
19
+ readonly leafNodeLogs: readonly import('../applog/datom-types').Applog[];
20
+ readonly leafNodeThread: Thread;
21
+ readonly threadOfAllTrails: Thread;
22
+ readonly thread: Thread;
23
+ readonly allApplogs: readonly import('../applog/datom-types').Applog[];
24
+ }
25
+ /**
26
+ * One-off query result — plain frozen snapshot.
27
+ * No subscribe method. No stale-data risk.
28
+ */
29
+ export declare class QueryResult implements IQueryResult {
30
+ readonly nodes: readonly QueryNode[];
31
+ constructor(nodes: readonly QueryNode[]);
32
+ get size(): number;
33
+ get isEmpty(): boolean;
34
+ get untrackedSize(): number;
35
+ get records(): readonly SearchContext[];
36
+ get leafNodeThread(): import("../thread.ts").MappedThread;
37
+ get leafNodeLogSet(): (readonly import("../applog.ts").Applog[])[];
38
+ get leafNodeLogs(): import("../applog.ts").Applog[];
39
+ get threadOfAllTrails(): import("../thread.ts").MappedThread;
40
+ get thread(): import("../thread.ts").MappedThread;
41
+ get allApplogs(): readonly import("../applog.ts").Applog[];
42
+ }
13
43
  /**
14
- * The result of a query (-step)
44
+ * Live query result eagerly activated, always up-to-date.
45
+ *
46
+ * `.nodes` returns the current live view.
47
+ * `.subscribe()` receives future delta events (consistent with current state).
48
+ * Must call `.dispose()` when done to tear down upstream subscriptions.
15
49
  */
16
- export declare class QueryResult {
17
- nodes: ReadonlyObservableArray<QueryNode>;
18
- constructor(nodes: ReadonlyObservableArray<QueryNode>);
50
+ export declare class LiveQueryResult implements IQueryResult {
51
+ private _source;
52
+ constructor(_source: SubscribableArray<QueryNode>, activate?: boolean);
53
+ private _activationUnsub;
54
+ /** Subscribe to node change events. Callback fires on future changes only. */
55
+ subscribe(cb: (event: ArrayEvent<QueryNode>) => void, type?: 'derived' | 'reaction'): Unsubscribe;
56
+ /** Current nodes — live view, always up-to-date while not disposed */
57
+ get nodes(): readonly QueryNode[];
19
58
  get size(): number;
20
59
  get isEmpty(): boolean;
21
60
  get untrackedSize(): number;
22
- get records(): ReadonlyObservableArray<SearchContext>;
23
- get leafNodeThread(): import("..").MappedThread;
24
- get leafNodeLogSet(): ReadonlyObservableArray<readonly import("..").Applog[]>;
25
- get leafNodeLogs(): ReadonlyObservableArray<import("..").Applog>;
26
- get threadOfAllTrails(): import("..").MappedThread;
27
- get thread(): import("..").MappedThread;
28
- get allApplogs(): readonly import("..").Applog[];
61
+ get records(): readonly SearchContext[];
62
+ get leafNodeThread(): import("../thread.ts").MappedThread;
63
+ get leafNodeLogSet(): (readonly import("../applog.ts").Applog[])[];
64
+ get leafNodeLogs(): import("../applog.ts").Applog[];
65
+ get threadOfAllTrails(): import("../thread.ts").MappedThread;
66
+ get thread(): import("../thread.ts").MappedThread;
67
+ get allApplogs(): readonly import("../applog.ts").Applog[];
68
+ dispose(): void;
29
69
  }
30
70
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/query/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAEnE,qBAAa,SAAS;IAEpB,QAAQ,CAAC,cAAc,EAAE,MAAM;IAC/B,QAAQ,CAAC,SAAS,EAAE,aAAa;IACjC,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI;gBAF1B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,aAAa,EACxB,QAAQ,GAAE,SAAS,GAAG,IAAW;IAM3C,IAAI,MAAM,kBAET;IAED,IAAI,aAAa,WAMhB;IACD,IAAI,SAAS,QAEZ;CACD;AACD;;GAEG;AACH,qBAAa,WAAW;IAEf,KAAK,EAAE,uBAAuB,CAAC,SAAS,CAAC;gBAAzC,KAAK,EAAE,uBAAuB,CAAC,SAAS,CAAC;IASjD,IAAI,IAAI,WAEP;IACD,IAAI,OAAO,YAEV;IACD,IAAI,aAAa,WAEhB;IAED,IAAI,OAAO,2CAEV;IACD,IAAI,cAAc,8BAIjB;IACD,IAAI,cAAc,4DAEjB;IACD,IAAI,YAAY,iDAIf;IAID,IAAI,iBAAiB,8BAEpB;IACD,IAAI,MAAM,8BAET;IACD,IAAI,UAAU,mCAEb;CACD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/query/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAyB,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAErG,qBAAa,SAAS;IAEpB,QAAQ,CAAC,cAAc,EAAE,MAAM;IAC/B,QAAQ,CAAC,SAAS,EAAE,aAAa;IACjC,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI;gBAF1B,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,aAAa,EACxB,QAAQ,GAAE,SAAS,GAAG,IAAW;IAE3C,IAAI,MAAM,kBAET;IAED,IAAI,aAAa,WAMhB;IACD,IAAI,SAAS,QAEZ;CACD;AAED,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAA;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAA;IAC1C,QAAQ,CAAC,YAAY,EAAE,SAAS,OAAO,uBAAuB,EAAE,MAAM,EAAE,CAAA;IACxE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,UAAU,EAAE,SAAS,OAAO,uBAAuB,EAAE,MAAM,EAAE,CAAA;CACtE;AAED;;;GAGG;AACH,qBAAa,WAAY,YAAW,YAAY;IAE9C,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE;gBAA3B,KAAK,EAAE,SAAS,SAAS,EAAE;IAGrC,IAAI,IAAI,WAEP;IACD,IAAI,OAAO,YAEV;IACD,IAAI,aAAa,WAEhB;IAED,IAAI,OAAO,IAAI,SAAS,aAAa,EAAE,CAEtC;IACD,IAAI,cAAc,wCAIjB;IACD,IAAI,cAAc,iDAEjB;IACD,IAAI,YAAY,oCAEf;IACD,IAAI,iBAAiB,wCAEpB;IACD,IAAI,MAAM,wCAET;IACD,IAAI,UAAU,6CAEb;CACD;AAED;;;;;;GAMG;AACH,qBAAa,eAAgB,YAAW,YAAY;IAElD,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,EAC7C,QAAQ,UAAO;IAShB,OAAO,CAAC,gBAAgB,CAA2B;IAEnD,8EAA8E;IAC9E,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW;IAIjG,sEAAsE;IACtE,IAAI,KAAK,IAAI,SAAS,SAAS,EAAE,CAEhC;IAED,IAAI,IAAI,WAEP;IACD,IAAI,OAAO,YAEV;IACD,IAAI,aAAa,WAEhB;IAED,IAAI,OAAO,IAAI,SAAS,aAAa,EAAE,CAEtC;IACD,IAAI,cAAc,wCAIjB;IACD,IAAI,cAAc,iDAEjB;IACD,IAAI,YAAY,oCAEf;IACD,IAAI,iBAAiB,wCAEpB;IACD,IAAI,MAAM,wCAET;IACD,IAAI,UAAU,6CAEb;IAED,OAAO;CAKP"}
package/dist/query.d.ts CHANGED
@@ -1,6 +1,10 @@
1
- export * from './mobx/mobx-utils';
2
- export * from './query/basic';
3
- export * from './query/divergences';
4
- export * from './query/matchers';
5
- export * from './query/types';
1
+ export * from './utils/debug-name.ts';
2
+ export * from './query/basic.ts';
3
+ export * from './query/divergences.ts';
4
+ export * from './query/matchers.ts';
5
+ export * from './query/memoized.ts';
6
+ export * from './query/subscribable.ts';
7
+ export * from './query/types.ts';
8
+ export * from './query/attr-helpers.ts';
9
+ export * from './query/entity-collection.ts';
6
10
  //# sourceMappingURL=query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,eAAe,CAAA"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA;AACvC,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,8BAA8B,CAAA"}