@wovin/core 0.0.0-ciao-mobx-955482e8

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 (180) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +3 -0
  3. package/dist/applog/applog-helpers.d.ts +47 -0
  4. package/dist/applog/applog-helpers.d.ts.map +1 -0
  5. package/dist/applog/applog-utils.d.ts +57 -0
  6. package/dist/applog/applog-utils.d.ts.map +1 -0
  7. package/dist/applog/datom-types.d.ts +128 -0
  8. package/dist/applog/datom-types.d.ts.map +1 -0
  9. package/dist/applog.d.ts +4 -0
  10. package/dist/applog.d.ts.map +1 -0
  11. package/dist/applog.js +101 -0
  12. package/dist/applog.js.map +1 -0
  13. package/dist/blockstore/index.d.ts +21 -0
  14. package/dist/blockstore/index.d.ts.map +1 -0
  15. package/dist/blockstore.d.ts +2 -0
  16. package/dist/blockstore.d.ts.map +1 -0
  17. package/dist/blockstore.js +24 -0
  18. package/dist/blockstore.js.map +1 -0
  19. package/dist/chunk-6MQKRL6W.js +86 -0
  20. package/dist/chunk-6MQKRL6W.js.map +1 -0
  21. package/dist/chunk-7MW34UEO.js +40 -0
  22. package/dist/chunk-7MW34UEO.js.map +1 -0
  23. package/dist/chunk-7Z5YDQKK.js +1 -0
  24. package/dist/chunk-7Z5YDQKK.js.map +1 -0
  25. package/dist/chunk-CY4NLISM.js +144 -0
  26. package/dist/chunk-CY4NLISM.js.map +1 -0
  27. package/dist/chunk-E46VTKTZ.js +1 -0
  28. package/dist/chunk-E46VTKTZ.js.map +1 -0
  29. package/dist/chunk-O43W7UW6.js +434 -0
  30. package/dist/chunk-O43W7UW6.js.map +1 -0
  31. package/dist/chunk-XIQSYEV3.js +1604 -0
  32. package/dist/chunk-XIQSYEV3.js.map +1 -0
  33. package/dist/chunk-XVGW4QC3.js +55 -0
  34. package/dist/chunk-XVGW4QC3.js.map +1 -0
  35. package/dist/chunk-YDAKBU6Q.js +9 -0
  36. package/dist/chunk-YDAKBU6Q.js.map +1 -0
  37. package/dist/chunk-ZAADLBSB.js +36 -0
  38. package/dist/chunk-ZAADLBSB.js.map +1 -0
  39. package/dist/chunk-ZXCJRYD7.js +883 -0
  40. package/dist/chunk-ZXCJRYD7.js.map +1 -0
  41. package/dist/index.d.ts +8 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +354 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/ipfs/car.d.ts +59 -0
  46. package/dist/ipfs/car.d.ts.map +1 -0
  47. package/dist/ipfs/fetch-snapshot-chain.d.ts +32 -0
  48. package/dist/ipfs/fetch-snapshot-chain.d.ts.map +1 -0
  49. package/dist/ipfs/ipfs-utils.d.ts +35 -0
  50. package/dist/ipfs/ipfs-utils.d.ts.map +1 -0
  51. package/dist/ipfs.d.ts +4 -0
  52. package/dist/ipfs.d.ts.map +1 -0
  53. package/dist/ipfs.js +60 -0
  54. package/dist/ipfs.js.map +1 -0
  55. package/dist/ipns/ipns-record.d.ts +34 -0
  56. package/dist/ipns/ipns-record.d.ts.map +1 -0
  57. package/dist/ipns.d.ts +2 -0
  58. package/dist/ipns.d.ts.map +1 -0
  59. package/dist/ipns.js +64 -0
  60. package/dist/ipns.js.map +1 -0
  61. package/dist/pubsub/connector.d.ts +9 -0
  62. package/dist/pubsub/connector.d.ts.map +1 -0
  63. package/dist/pubsub/pub-pull.d.ts +14 -0
  64. package/dist/pubsub/pub-pull.d.ts.map +1 -0
  65. package/dist/pubsub/pubsub-types.d.ts +72 -0
  66. package/dist/pubsub/pubsub-types.d.ts.map +1 -0
  67. package/dist/pubsub/snap-push.d.ts +41 -0
  68. package/dist/pubsub/snap-push.d.ts.map +1 -0
  69. package/dist/pubsub/ucan-example.d.ts +3 -0
  70. package/dist/pubsub/ucan-example.d.ts.map +1 -0
  71. package/dist/pubsub/ucan.d.ts +16 -0
  72. package/dist/pubsub/ucan.d.ts.map +1 -0
  73. package/dist/pubsub.d.ts +5 -0
  74. package/dist/pubsub.d.ts.map +1 -0
  75. package/dist/pubsub.js +31 -0
  76. package/dist/pubsub.js.map +1 -0
  77. package/dist/query/basic.d.ts +105 -0
  78. package/dist/query/basic.d.ts.map +1 -0
  79. package/dist/query/divergences.d.ts +12 -0
  80. package/dist/query/divergences.d.ts.map +1 -0
  81. package/dist/query/matchers.d.ts +4 -0
  82. package/dist/query/matchers.d.ts.map +1 -0
  83. package/dist/query/memoized.d.ts +66 -0
  84. package/dist/query/memoized.d.ts.map +1 -0
  85. package/dist/query/query-steps.d.ts +4 -0
  86. package/dist/query/query-steps.d.ts.map +1 -0
  87. package/dist/query/situations.d.ts +80 -0
  88. package/dist/query/situations.d.ts.map +1 -0
  89. package/dist/query/subscribable.d.ts +102 -0
  90. package/dist/query/subscribable.d.ts.map +1 -0
  91. package/dist/query/types.d.ts +70 -0
  92. package/dist/query/types.d.ts.map +1 -0
  93. package/dist/query.d.ts +8 -0
  94. package/dist/query.d.ts.map +1 -0
  95. package/dist/query.js +108 -0
  96. package/dist/query.js.map +1 -0
  97. package/dist/retrieve/index.d.ts +2 -0
  98. package/dist/retrieve/index.d.ts.map +1 -0
  99. package/dist/retrieve/update-thread.d.ts +64 -0
  100. package/dist/retrieve/update-thread.d.ts.map +1 -0
  101. package/dist/retrieve.d.ts +2 -0
  102. package/dist/retrieve.d.ts.map +1 -0
  103. package/dist/retrieve.js +14 -0
  104. package/dist/retrieve.js.map +1 -0
  105. package/dist/thread/basic.d.ts +60 -0
  106. package/dist/thread/basic.d.ts.map +1 -0
  107. package/dist/thread/filters.d.ts +47 -0
  108. package/dist/thread/filters.d.ts.map +1 -0
  109. package/dist/thread/mapped.d.ts +31 -0
  110. package/dist/thread/mapped.d.ts.map +1 -0
  111. package/dist/thread/utils.d.ts +23 -0
  112. package/dist/thread/utils.d.ts.map +1 -0
  113. package/dist/thread/writeable.d.ts +41 -0
  114. package/dist/thread/writeable.d.ts.map +1 -0
  115. package/dist/thread.d.ts +6 -0
  116. package/dist/thread.d.ts.map +1 -0
  117. package/dist/thread.js +54 -0
  118. package/dist/thread.js.map +1 -0
  119. package/dist/types/typescript-utils.d.ts +34 -0
  120. package/dist/types/typescript-utils.d.ts.map +1 -0
  121. package/dist/types.d.ts +2 -0
  122. package/dist/types.d.ts.map +1 -0
  123. package/dist/types.js +26 -0
  124. package/dist/types.js.map +1 -0
  125. package/dist/utils/debug-name.d.ts +13 -0
  126. package/dist/utils/debug-name.d.ts.map +1 -0
  127. package/dist/utils.d.ts +4 -0
  128. package/dist/utils.d.ts.map +1 -0
  129. package/dist/utils.js +9 -0
  130. package/dist/utils.js.map +1 -0
  131. package/package.json +110 -0
  132. package/src/applog/applog-helpers.ts +150 -0
  133. package/src/applog/applog-utils.ts +398 -0
  134. package/src/applog/datom-types.ts +148 -0
  135. package/src/applog.ts +3 -0
  136. package/src/blockstore/index.ts +36 -0
  137. package/src/blockstore.ts +1 -0
  138. package/src/index.ts +8 -0
  139. package/src/ipfs/car.ts +291 -0
  140. package/src/ipfs/fetch-snapshot-chain.ts +135 -0
  141. package/src/ipfs/ipfs-utils.ts +132 -0
  142. package/src/ipfs.ts +3 -0
  143. package/src/ipns/ipns-record.ts +115 -0
  144. package/src/ipns.ts +1 -0
  145. package/src/pubsub/UCAN Specs Overview.md +217 -0
  146. package/src/pubsub/connector.ts +9 -0
  147. package/src/pubsub/pub-pull.ts +31 -0
  148. package/src/pubsub/pubsub-types.ts +90 -0
  149. package/src/pubsub/snap-push.ts +277 -0
  150. package/src/pubsub/ucan-example.ts +61 -0
  151. package/src/pubsub/ucan.ts +56 -0
  152. package/src/pubsub.ts +4 -0
  153. package/src/query/basic.ts +1061 -0
  154. package/src/query/divergences.ts +50 -0
  155. package/src/query/matchers.ts +8 -0
  156. package/src/query/memoized.test.ts +151 -0
  157. package/src/query/memoized.ts +180 -0
  158. package/src/query/query-steps.ts +4 -0
  159. package/src/query/query.test.ts +536 -0
  160. package/src/query/situations.ts +261 -0
  161. package/src/query/subscribable.test.ts +245 -0
  162. package/src/query/subscribable.ts +225 -0
  163. package/src/query/types.ts +155 -0
  164. package/src/query.ts +7 -0
  165. package/src/retrieve/index.ts +1 -0
  166. package/src/retrieve/update-thread.ts +248 -0
  167. package/src/retrieve.ts +1 -0
  168. package/src/test/perf/query.1m.perf.test.ts +94 -0
  169. package/src/test/perf/query.perf.test.ts +389 -0
  170. package/src/test/perf/query.realdata.perf.test.ts +175 -0
  171. package/src/thread/basic.ts +209 -0
  172. package/src/thread/filters.ts +234 -0
  173. package/src/thread/mapped.ts +166 -0
  174. package/src/thread/utils.ts +146 -0
  175. package/src/thread/writeable.ts +163 -0
  176. package/src/thread.ts +5 -0
  177. package/src/types/typescript-utils.ts +64 -0
  178. package/src/types.ts +1 -0
  179. package/src/utils/debug-name.ts +54 -0
  180. package/src/utils.ts +4 -0
@@ -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"}
@@ -0,0 +1,4 @@
1
+ export declare const q: {
2
+ not: () => void;
3
+ };
4
+ //# sourceMappingURL=query-steps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-steps.d.ts","sourceRoot":"","sources":["../../src/query/query-steps.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,CAAC;;CAGb,CAAA"}
@@ -0,0 +1,80 @@
1
+ import { Applog } from '../applog/datom-types.ts';
2
+ import { query } from './basic.ts';
3
+ /**
4
+ * Situations are meant to flag and possibly autocorrect or autosuggest solutions
5
+ *
6
+ * Types of Situations:
7
+ * Divergences = leaf nodes that are based on different previous versions/contexts
8
+ * Conflicts/Disagreement = different agents setting the same attribute (based on same previous)
9
+ * Overwrite = one agent's action implicitly overrides another's without explicit confirmation
10
+ * Conscious Disagreement = agents explicitly acknowledge and accept conflicting changes
11
+ * Suggestions = recommendations for improvements or alternatives
12
+ */
13
+ interface Situation {
14
+ name: string;
15
+ desc: string;
16
+ intensity: number;
17
+ type: typeof SituationTypes[keyof typeof SituationTypes];
18
+ query: typeof query;
19
+ resolutionOptions: Resolution[];
20
+ metadata?: {
21
+ agentId?: string;
22
+ timestamp?: number;
23
+ context?: Record<string, any>;
24
+ };
25
+ }
26
+ interface QueryResultWithSituations {
27
+ result: any;
28
+ situations: Situation[];
29
+ threadView?: ThreadView;
30
+ }
31
+ interface ThreadView {
32
+ id: string;
33
+ situations: SituatedMessage[];
34
+ resolutionState: ResolutionState;
35
+ }
36
+ interface SituatedMessage {
37
+ id: string;
38
+ situation: Situation;
39
+ message: string;
40
+ resolutions: ResolutionAction[];
41
+ timestamp: number;
42
+ agentId?: string;
43
+ }
44
+ interface ResolutionState {
45
+ pending: string[];
46
+ resolved: string[];
47
+ ignored: string[];
48
+ }
49
+ interface ResolutionAction {
50
+ name: string;
51
+ applied: boolean;
52
+ appliedAt?: number;
53
+ appliedBy?: string;
54
+ }
55
+ declare const SituationTypes: {
56
+ readonly divergence: "divergence";
57
+ readonly disagreement: "disagreement";
58
+ readonly overwrite: "overwrite";
59
+ readonly consciousDisagreement: "consciousDisagreement";
60
+ readonly suggestion: "suggestion";
61
+ };
62
+ interface Resolution {
63
+ name: string;
64
+ desc: string;
65
+ assertion: () => Applog[];
66
+ }
67
+ /**
68
+ * Creates a thread view for situations detected in query results
69
+ */
70
+ export declare function createThreadForSituations(result: any, situations: Situation[], options?: {
71
+ threadId?: string;
72
+ groupByType?: boolean;
73
+ sortByIntensity?: boolean;
74
+ }): QueryResultWithSituations;
75
+ /**
76
+ * Applies a resolution action to a situation in a thread
77
+ */
78
+ export declare function applyResolution(threadView: ThreadView, messageId: string, resolutionName: string, appliedBy: string): ThreadView;
79
+ export {};
80
+ //# sourceMappingURL=situations.d.ts.map
@@ -0,0 +1 @@
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,102 @@
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
+ /** Current snapshot — plain readonly array */
61
+ readonly items: readonly T[];
62
+ /** Length shortcut */
63
+ readonly length: number;
64
+ /**
65
+ * Subscribe to delta events.
66
+ * - First call activates upstream subscriptions (lazy).
67
+ * - No init event on subscribe — read .items for current state.
68
+ * - Receives `{ init }` only on genuine resets (triggerRemap).
69
+ * - Last unsubscribe deactivates upstream.
70
+ */
71
+ subscribe(cb: (event: ArrayEvent<T>) => void, type?: 'derived' | 'reaction'): Unsubscribe;
72
+ /** Tear down all internal subscriptions */
73
+ dispose(): void;
74
+ }
75
+ /**
76
+ * Implementation of SubscribableArray with lazy upstream activation.
77
+ *
78
+ * Constructor takes initial items (computed synchronously at query time)
79
+ * and an optional activation function that sets up upstream subscriptions.
80
+ * The activation function is only called on first `.subscribe()`.
81
+ */
82
+ export declare class SubscribableArrayImpl<T> implements SubscribableArray<T> {
83
+ private _items;
84
+ private _derivedSubscribers;
85
+ private _subscribers;
86
+ private _upstreamActive;
87
+ private _activateUpstream;
88
+ private _deactivateUpstream;
89
+ constructor(initialItems: T[], activateUpstream?: () => Unsubscribe);
90
+ get items(): readonly T[];
91
+ get length(): number;
92
+ subscribe(cb: (event: ArrayEvent<T>) => void, type?: 'derived' | 'reaction'): Unsubscribe;
93
+ /** Push items and notify subscribers */
94
+ _push(...items: T[]): void;
95
+ /** Remove items and notify subscribers */
96
+ _remove(items: readonly T[]): void;
97
+ /** Full reset — replace all items */
98
+ _reset(items: T[]): void;
99
+ private _notify;
100
+ dispose(): void;
101
+ }
102
+ //# 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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"}
@@ -0,0 +1,70 @@
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
+ export declare class QueryNode {
5
+ readonly logsOfThisNode: Thread;
6
+ readonly variables: SearchContext;
7
+ readonly prevNode: QueryNode | null;
8
+ constructor(logsOfThisNode: Thread, variables: SearchContext, prevNode?: QueryNode | null);
9
+ get record(): SearchContext;
10
+ get threadOfTrail(): Thread;
11
+ get trailLogs(): any;
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
+ }
43
+ /**
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.
49
+ */
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[];
58
+ get size(): number;
59
+ get isEmpty(): boolean;
60
+ get untrackedSize(): number;
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;
69
+ }
70
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,8 @@
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
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
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"}
package/dist/query.js ADDED
@@ -0,0 +1,108 @@
1
+ import {
2
+ includedIn,
3
+ includes,
4
+ queryDivergencesByPrev
5
+ } from "./chunk-XVGW4QC3.js";
6
+ import {
7
+ LiveQueryResult,
8
+ QueryNode,
9
+ QueryResult,
10
+ agentsOfThread,
11
+ createObjMapper,
12
+ entityOverlap,
13
+ entityOverlapCount,
14
+ entityOverlapMap,
15
+ filterAndMap,
16
+ lastWriteWins,
17
+ liveEntityAt,
18
+ liveEntityOverlapCount,
19
+ liveFilterAndMap,
20
+ liveQuery,
21
+ liveQueryAndMap,
22
+ liveQueryEntity,
23
+ liveQueryNot,
24
+ liveQuerySingle,
25
+ liveQuerySingleAndMap,
26
+ liveQueryStep,
27
+ makeApplogMapper,
28
+ mapApplogsWith,
29
+ mapQueryResultWith,
30
+ mapThreadWith,
31
+ prefixAt,
32
+ prefixAttrs,
33
+ query,
34
+ queryAndMap,
35
+ queryEntity,
36
+ queryNot,
37
+ querySingle,
38
+ querySingleAndMap,
39
+ queryStepOnce,
40
+ startsWith,
41
+ threadFromMaybeArray,
42
+ throwOnTimeout,
43
+ withTimeout,
44
+ withoutDeleted
45
+ } from "./chunk-ZXCJRYD7.js";
46
+ import {
47
+ SubscribableArrayImpl,
48
+ SubscribableImpl,
49
+ createDebugName,
50
+ createDebugNameObj,
51
+ isArrayInitEvent,
52
+ memoizedFn,
53
+ prettifyThreadName,
54
+ refCountedMemoizedFn
55
+ } from "./chunk-XIQSYEV3.js";
56
+ import "./chunk-ZAADLBSB.js";
57
+ export {
58
+ LiveQueryResult,
59
+ QueryNode,
60
+ QueryResult,
61
+ SubscribableArrayImpl,
62
+ SubscribableImpl,
63
+ agentsOfThread,
64
+ createDebugName,
65
+ createDebugNameObj,
66
+ createObjMapper,
67
+ entityOverlap,
68
+ entityOverlapCount,
69
+ entityOverlapMap,
70
+ filterAndMap,
71
+ includedIn,
72
+ includes,
73
+ isArrayInitEvent,
74
+ lastWriteWins,
75
+ liveEntityAt,
76
+ liveEntityOverlapCount,
77
+ liveFilterAndMap,
78
+ liveQuery,
79
+ liveQueryAndMap,
80
+ liveQueryEntity,
81
+ liveQueryNot,
82
+ liveQuerySingle,
83
+ liveQuerySingleAndMap,
84
+ liveQueryStep,
85
+ makeApplogMapper,
86
+ mapApplogsWith,
87
+ mapQueryResultWith,
88
+ mapThreadWith,
89
+ memoizedFn,
90
+ prefixAt,
91
+ prefixAttrs,
92
+ prettifyThreadName,
93
+ query,
94
+ queryAndMap,
95
+ queryDivergencesByPrev,
96
+ queryEntity,
97
+ queryNot,
98
+ querySingle,
99
+ querySingleAndMap,
100
+ queryStepOnce,
101
+ refCountedMemoizedFn,
102
+ startsWith,
103
+ threadFromMaybeArray,
104
+ throwOnTimeout,
105
+ withTimeout,
106
+ withoutDeleted
107
+ };
108
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,2 @@
1
+ export * from './update-thread.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/retrieve/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1,64 @@
1
+ import { CID } from 'multiformats/cid';
2
+ import type { Applog } from '../applog/datom-types.ts';
3
+ import type { WriteableThread } from '../thread/writeable.ts';
4
+ import type { BlockStore } from '../blockstore/index.ts';
5
+ /**
6
+ * Block retrieval abstraction - fetch or get blocks.
7
+ * Implemented by gateway retriever or local blockstore.
8
+ */
9
+ export interface BlockRetriever {
10
+ /** Get single block by CID */
11
+ get(cid: CID): Promise<Uint8Array>;
12
+ /** Get all blocks in DAG rooted at CID (for applogs/info sub-DAGs) */
13
+ getDag(cid: CID): AsyncIterable<{
14
+ cid: CID;
15
+ bytes: Uint8Array;
16
+ }>;
17
+ }
18
+ /**
19
+ * Wrap a BlockRetriever so fetched blocks flow through a BlockStore.
20
+ * - get: delegates to store.get() (which handles local-first / remote fallback)
21
+ * - getDag: streams from source, puts each block into store
22
+ */
23
+ export declare function withBlockCache(source: BlockRetriever, store: BlockStore): BlockRetriever;
24
+ /**
25
+ * Options for updateThreadFromSnapshot
26
+ */
27
+ export interface UpdateOptions {
28
+ /** CID of last included snapshot - exclude this and older snapshots */
29
+ excludeSnapshotCID?: CID;
30
+ /** Stop when we reach this counter (walking backwards) */
31
+ stopAtCounter?: number;
32
+ /** Maximum number of snapshots to traverse (default: 100) */
33
+ maxDepth?: number;
34
+ }
35
+ /**
36
+ * Result from updateThreadFromSnapshot
37
+ */
38
+ export interface UpdateResult {
39
+ /** Root CID that was fetched */
40
+ cid: CID;
41
+ /** All applogs decoded from the chain */
42
+ applogs: Applog[];
43
+ /** Count of applogs actually inserted (not duplicates) */
44
+ insertedCount: number;
45
+ /** Number of snapshots traversed */
46
+ snapshotCount: number;
47
+ /** Counter range encountered (min/max) */
48
+ counterRange?: {
49
+ minCounter: number;
50
+ maxCounter: number;
51
+ };
52
+ }
53
+ /**
54
+ * Fetch snapshot chain from CID using a BlockRetriever, decode applogs, insert into thread.
55
+ * Stops before excludeSnapshotCID if provided (incremental update).
56
+ *
57
+ * @param thread - WriteableThread to insert applogs into
58
+ * @param cid - Root CID of the snapshot to start from
59
+ * @param retriever - BlockRetriever for fetching blocks
60
+ * @param options - Optional configuration
61
+ * @returns UpdateResult with applogs and counts
62
+ */
63
+ export declare function updateThreadFromSnapshot(thread: WriteableThread, cid: CID, retriever: BlockRetriever, options?: UpdateOptions): Promise<UpdateResult>;
64
+ //# sourceMappingURL=update-thread.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-thread.d.ts","sourceRoot":"","sources":["../../src/retrieve/update-thread.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAKtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAIxD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC9B,8BAA8B;IAC9B,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAClC,sEAAsE;IACtE,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,aAAa,CAAC;QAAE,GAAG,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,CAAC,CAAA;CAChE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC7B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,UAAU,GACf,cAAc,CAUhB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,uEAAuE;IACvE,kBAAkB,CAAC,EAAE,GAAG,CAAA;IACxB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,gCAAgC;IAChC,GAAG,EAAE,GAAG,CAAA;IACR,yCAAyC;IACzC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAA;IACrB,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAA;IACrB,0CAA0C;IAC1C,YAAY,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;CACzD;AA4BD;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAC7C,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,cAAc,EACzB,OAAO,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CAqIvB"}
@@ -0,0 +1,2 @@
1
+ export * from './retrieve/update-thread.ts';
2
+ //# sourceMappingURL=retrieve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieve.d.ts","sourceRoot":"","sources":["../src/retrieve.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA"}
@@ -0,0 +1,14 @@
1
+ import {
2
+ updateThreadFromSnapshot,
3
+ withBlockCache
4
+ } from "./chunk-CY4NLISM.js";
5
+ import "./chunk-O43W7UW6.js";
6
+ import "./chunk-YDAKBU6Q.js";
7
+ import "./chunk-ZXCJRYD7.js";
8
+ import "./chunk-XIQSYEV3.js";
9
+ import "./chunk-ZAADLBSB.js";
10
+ export {
11
+ updateThreadFromSnapshot,
12
+ withBlockCache
13
+ };
14
+ //# sourceMappingURL=retrieve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,60 @@
1
+ import { CID } from 'multiformats';
2
+ import { type Applog, ApplogForInsert, CidString } from '../applog/datom-types.ts';
3
+ import type { SubscribableArray, ArrayEvent } from '../query/subscribable.ts';
4
+ import { isArrayInitEvent } from '../query/subscribable.ts';
5
+ import { ArrayOrSingle } from '../types/typescript-utils.ts';
6
+ export type ThreadEvent = ArrayEvent<Applog>;
7
+ /** @deprecated Use isArrayInitEvent from @wovin/core/query */
8
+ export declare const isInitEvent: typeof isArrayInitEvent;
9
+ export type ApplogsOrThread = Thread | readonly Applog[];
10
+ export declare abstract class Thread implements SubscribableArray<Applog> {
11
+ readonly name: string;
12
+ protected _applogs: Applog[];
13
+ readonly filters: readonly string[];
14
+ readonly parents: Thread[] | readonly Thread[] | null;
15
+ protected _derivedSubscribers: ((event: ThreadEvent) => void)[];
16
+ protected _subscribers: ((event: ThreadEvent) => void)[];
17
+ /** Monotonic counter incremented on every mutation. Used by memoizedFn to invalidate caches. */
18
+ _version: number;
19
+ constructor(name: string, /* = null */ parents: ArrayOrSingle<Thread> | readonly Thread[] | null, filters: readonly string[], _applogs?: Applog[]);
20
+ get readOnly(): any;
21
+ insert(appLogsToInsert: ArrayOrSingle<ApplogForInsert>): any;
22
+ insertRaw(appLogsToInsert: readonly Applog[]): any;
23
+ subscribe(callback: (event: ThreadEvent) => void, type?: 'derived' | 'reaction'): () => void;
24
+ protected notifySubscribers(event: ThreadEvent): void;
25
+ get items(): readonly Applog[];
26
+ dispose(): void;
27
+ get applogs(): readonly Applog[];
28
+ get applogsCids(): readonly CidString[];
29
+ get applogsCidSet(): ReadonlySet<CidString>;
30
+ map<R>(fn: (applog: Applog) => R): R[];
31
+ get findLast(): {
32
+ <S extends Applog>(predicate: (value: Applog, index: number, array: readonly Applog[]) => value is S, thisArg?: any): S;
33
+ (predicate: (value: Applog, index: number, array: readonly Applog[]) => unknown, thisArg?: any): Applog;
34
+ };
35
+ get findFirst(): {
36
+ <S extends Applog>(predicate: (value: Applog, index: number, obj: readonly Applog[]) => value is S, thisArg?: any): S;
37
+ (predicate: (value: Applog, index: number, obj: readonly Applog[]) => unknown, thisArg?: any): Applog;
38
+ };
39
+ get firstLog(): Applog;
40
+ get latestLog(): Applog;
41
+ hasApplog(applog: Applog, byRef: boolean): boolean;
42
+ hasApplogCid(cid: CID | CidString): boolean;
43
+ get applogsByCid(): Map<CidString, Applog>;
44
+ getApplog(cid: CID | CidString): Applog;
45
+ hasApplogWithDiffTs(applog: ApplogForInsert): Applog;
46
+ get isEmpty(): boolean;
47
+ get size(): number;
48
+ get length(): number;
49
+ get untrackedSize(): number;
50
+ get nameAndSizeUntracked(): string;
51
+ get prettyName(): string;
52
+ get hasParents(): boolean;
53
+ }
54
+ export declare const getLogsFromThread: (logsOrThread: ApplogsOrThread) => readonly Applog[];
55
+ export declare class StaticThread extends Thread {
56
+ static fromArray(applogs: Applog[], name?: string): StaticThread;
57
+ constructor(name: string, /* = null */ parents: ArrayOrSingle<Thread> | readonly Thread[] | null, filters: readonly string[], _applogs: Applog[]);
58
+ get readOnly(): boolean;
59
+ }
60
+ //# sourceMappingURL=basic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../src/thread/basic.ts"],"names":[],"mappings":"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"}