@wovin/core 0.3.2 → 0.3.4

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 (46) hide show
  1. package/dist/applog/applog-utils.d.ts +12 -1
  2. package/dist/applog/applog-utils.d.ts.map +1 -1
  3. package/dist/applog.js +5 -1
  4. package/dist/{chunk-N5QPZNKD.js → chunk-523IW54O.js} +3 -3
  5. package/dist/{chunk-4MKPGQIM.js → chunk-7VHIXHNF.js} +97 -62
  6. package/dist/chunk-7VHIXHNF.js.map +1 -0
  7. package/dist/{chunk-H4YVJKB7.js → chunk-ERVSWD63.js} +2 -2
  8. package/dist/{chunk-N7SEGHU4.js → chunk-GQDLPZEZ.js} +33 -24
  9. package/dist/chunk-GQDLPZEZ.js.map +1 -0
  10. package/dist/{chunk-6CSJTSQP.js → chunk-OB7M55WA.js} +3 -3
  11. package/dist/{chunk-H3JNNTVP.js → chunk-PTZJ7LVV.js} +27 -6
  12. package/dist/chunk-PTZJ7LVV.js.map +1 -0
  13. package/dist/{chunk-BIYQEX3N.js → chunk-XEUQDEA4.js} +2 -2
  14. package/dist/index.js +11 -7
  15. package/dist/ipfs.js +4 -4
  16. package/dist/ipns/ipns-record.d.ts.map +1 -1
  17. package/dist/ipns/ipns-watcher.d.ts.map +1 -1
  18. package/dist/ipns.js +6 -8
  19. package/dist/ipns.js.map +1 -1
  20. package/dist/pubsub/snap-push.d.ts.map +1 -1
  21. package/dist/pubsub.js +4 -4
  22. package/dist/query/basic.d.ts.map +1 -1
  23. package/dist/query.js +3 -3
  24. package/dist/retrieve.js +4 -4
  25. package/dist/thread/basic.d.ts.map +1 -1
  26. package/dist/thread/mapped.d.ts.map +1 -1
  27. package/dist/thread/utils.d.ts.map +1 -1
  28. package/dist/thread.js +1 -1
  29. package/dist/viewmodel/index.js +2 -2
  30. package/package.json +1 -1
  31. package/src/applog/applog-utils.ts +33 -1
  32. package/src/ipns/ipns-record.test.ts +72 -0
  33. package/src/ipns/ipns-record.ts +23 -8
  34. package/src/ipns/ipns-watcher.ts +10 -11
  35. package/src/pubsub/snap-push.ts +25 -3
  36. package/src/query/basic.ts +124 -81
  37. package/src/thread/basic.ts +21 -2
  38. package/src/thread/mapped.ts +12 -4
  39. package/src/thread/utils.ts +5 -5
  40. package/dist/chunk-4MKPGQIM.js.map +0 -1
  41. package/dist/chunk-H3JNNTVP.js.map +0 -1
  42. package/dist/chunk-N7SEGHU4.js.map +0 -1
  43. /package/dist/{chunk-N5QPZNKD.js.map → chunk-523IW54O.js.map} +0 -0
  44. /package/dist/{chunk-H4YVJKB7.js.map → chunk-ERVSWD63.js.map} +0 -0
  45. /package/dist/{chunk-6CSJTSQP.js.map → chunk-OB7M55WA.js.map} +0 -0
  46. /package/dist/{chunk-BIYQEX3N.js.map → chunk-XEUQDEA4.js.map} +0 -0
@@ -1,4 +1,15 @@
1
- import type { Applog, ApplogValue, DatalogQueryPattern, DatalogQueryResultEntry, ResultContext, SearchContext, ValueOrMatcher } from './datom-types.ts';
1
+ import type { Applog, ApplogOfSomeSort, ApplogValue, DatalogQueryPattern, DatalogQueryResultEntry, ResultContext, SearchContext, ValueOrMatcher } from './datom-types.ts';
2
+ /**
3
+ * One-line, bounded summary of a single applog — enough to trace it in logs
4
+ * (`en/at=vl@ts#cid`) without dumping the full object (and, for arrays, the whole thread).
5
+ * Handles encrypted applogs and falsy entries so it's safe on error paths.
6
+ */
7
+ export declare const applogSummary: (log: ApplogOfSomeSort | null | undefined) => string;
8
+ /**
9
+ * Bounded summary of an applog array: `[count] first, few, summaries …+N`.
10
+ * Keeps enough identity to debug (which logs, how many) while preventing log explosion.
11
+ */
12
+ export declare const applogsSummary: (logs: readonly (ApplogOfSomeSort | null | undefined)[] | null | undefined, sample?: number) => string;
2
13
  export declare const isoDateStrCompare: (strA: string, strB: string, dir?: "asc" | "desc") => number;
3
14
  export declare const objEqualByKeys: (keys: string[], objA: object, objB: object) => boolean;
4
15
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"applog-utils.d.ts","sourceRoot":"","sources":["../../src/applog/applog-utils.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACX,MAAM,EAEN,WAAW,EACX,mBAAmB,EACnB,uBAAuB,EACvB,aAAa,EACb,aAAa,EACb,cAAc,EACd,MAAM,kBAAkB,CAAA;AAIzB,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,EAAE,MAAK,KAAK,GAAG,MAAc,WAGpD,CAAA;AACrC,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,EAAE,MAAM,MAAM,EAAE,MAAM,MAAM,YAExE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAAI,GAAG,WAAW,EAAE,GAAG,WAAW,KAAG,OAAwB,CAAA;AAEjF,+EAA+E;AAC/E,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,IAAI,WAAW,KAAG,QAS1C,CAAA;AAED,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,EAAE,MAAK,KAAK,GAAG,MAAc,WAIzF,CAAA;AACD,eAAO,MAAM,oBAAoB,yCAAwC,CAAA;AAEzE;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAQ9D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,KAAK,GAAG,MAAc,YAUjF;AAsED,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,EAAE,cAAc,MAAM,YAA0D,CAAA;AACtH,eAAO,MAAM,mBAAmB,GAAI,aAAa,MAAM,EAAE,aAAyD,CAAA;AAClH,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,YAAwB,CAAA;AAElF,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,SAAS,CAAA;AA4D7D;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,aAAa,MAAM,EAAE,EAAE,OAAO,0BAA0B,aAQ9F,CAAA;AAcD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,GAAG,EAAE,cAAS,WAAgC,CAAA;AAElF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,2BAA2B,GAAI,WAAW,GAAG,EAAE,cAAS,WAAqC,CAAA;AAE1G,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,MAAM,CAE9C;AACD,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,MAAM,UAE1D;AAID,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,WAAW,CAGxD;AAaD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,aAAa;;;;;;;;IAmB9F;AAcD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CA+B7H;AACD,wBAAgB,SAAS,CAAC,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,aAAa,CAqBhI;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,aAAa,CAOhH;AAED,wBAAgB,SAAS,CAAC,MAAM,SAAS,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAUjI;AASD,eAAO,MAAM,QAAQ;iBACC,MAAM,EAAE;iBAIR,MAAM,EAAE;mBAIN,MAAM,EAAE;sBAIL,MAAM,EAAE;iBArBH,MAAM,EAAE;kBAKN,MAAM,EAAE;qBAAR,MAAM,EAAE;oBA0BjB,MAAM,EAAE;mBAQT,MAAM,EAAE;sBAqBL,MAAM,EAAE;+BAOC,MAAM,EAAE;mCAIJ,MAAM,EAAE;qBAOtB,MAAM,EAAE;CAOjC,CAAA;AAKD,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,EAAE,OAAO,MAAM,YAAuD,CAAA;AAUhH,eAAO,MAAM,UAAU,GACtB,KAAK,MAAM,EACX,YAAS,EACT,WAAW,MAAM,WAqBjB,CAAA;AACD,wBAAgB,yBAAyB,CAAC,IAAI,KAAA,EAAE,IAAI,KAAA,WAenD;AACD,wBAAgB,UAAU,IAAI,MAAM,CAGnC"}
1
+ {"version":3,"file":"applog-utils.d.ts","sourceRoot":"","sources":["../../src/applog/applog-utils.ts"],"names":[],"mappings":"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"}
package/dist/applog.js CHANGED
@@ -11,6 +11,8 @@ import {
11
11
  Nullable,
12
12
  URL,
13
13
  actualize,
14
+ applogSummary,
15
+ applogsSummary,
14
16
  areApplogsEqual,
15
17
  arrStats,
16
18
  arraysContainSameElements,
@@ -52,7 +54,7 @@ import {
52
54
  withAg,
53
55
  withPvFrom,
54
56
  withTs
55
- } from "./chunk-4MKPGQIM.js";
57
+ } from "./chunk-7VHIXHNF.js";
56
58
  import "./chunk-ZAADLBSB.js";
57
59
  export {
58
60
  AppLogNoCidTB,
@@ -66,6 +68,8 @@ export {
66
68
  Nullable,
67
69
  URL,
68
70
  actualize,
71
+ applogSummary,
72
+ applogsSummary,
69
73
  areApplogsEqual,
70
74
  arrStats,
71
75
  arraysContainSameElements,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveKeyMapper
3
- } from "./chunk-N7SEGHU4.js";
3
+ } from "./chunk-GQDLPZEZ.js";
4
4
  import {
5
5
  SubscribableImpl,
6
6
  ThreadInMemory,
@@ -11,7 +11,7 @@ import {
11
11
  makeFilter,
12
12
  memoizedFn,
13
13
  rollingFilter
14
- } from "./chunk-4MKPGQIM.js";
14
+ } from "./chunk-7VHIXHNF.js";
15
15
 
16
16
  // src/query/divergences.ts
17
17
  import { Logger } from "besonders-logger";
@@ -285,4 +285,4 @@ export {
285
285
  serializeEpochSnapshot,
286
286
  purgeHistory
287
287
  };
288
- //# sourceMappingURL=chunk-N5QPZNKD.js.map
288
+ //# sourceMappingURL=chunk-523IW54O.js.map
@@ -11,7 +11,76 @@ import { isBefore } from "date-fns";
11
11
  import { partial, pick } from "lodash-es";
12
12
  import { isEqual } from "lodash-es";
13
13
  import stringify from "safe-stable-stringify";
14
+
15
+ // src/applog/datom-types.ts
16
+ import { FormatRegistry, Type } from "@sinclair/typebox";
17
+ import { TypeCompiler } from "@sinclair/typebox/compiler";
18
+ var Nullable = (schema) => Type.Union([schema, Type.Null()]);
19
+ var EntityID_LENGTH = 7;
20
+ var isCID = /^(k51qz|baguq)[0-9a-z]{56,57}$/;
21
+ var isShortHash = /^[0-9A-Fa-f]{7,8}$/g;
22
+ FormatRegistry.Set("EntityID", (value) => !!value.match(isShortHash) || !!value.match(isCID));
23
+ var EntityID = Type.String();
24
+ var isEncryptedApplog = (l) => l?.enc instanceof Uint8Array;
25
+ FormatRegistry.Set("CID", (value) => !!value.match(isCID));
26
+ var CIDTB = Type.String({ pattern: isCID.source });
27
+ var isURL = /^http([s]?):\/\/.*\..*/;
28
+ FormatRegistry.Set("URL", (value) => !!value.match(isURL));
29
+ var URL = Type.String({ pattern: isURL.source });
30
+ var JsonValueTB = Type.Recursive(
31
+ (This) => Type.Union([
32
+ Type.String(),
33
+ Type.Number(),
34
+ Type.Boolean(),
35
+ Type.Null(),
36
+ Type.Array(This),
37
+ Type.Record(Type.String(), This)
38
+ ])
39
+ );
40
+ var AppLogNoCidTB = Type.Object({
41
+ en: EntityID,
42
+ // EntityID
43
+ at: Type.String(),
44
+ // Attribute
45
+ vl: JsonValueTB,
46
+ // ApplogValue (JSON-serializable: primitives, arrays, objects)
47
+ ts: Type.String(),
48
+ // Timestamp
49
+ ag: Type.String(),
50
+ // AgentHash
51
+ pv: Nullable(CIDTB)
52
+ // CidString
53
+ });
54
+ var AppLogNoCidTBC = TypeCompiler.Compile(AppLogNoCidTB);
55
+ var getApplogNoCidTypeErrors = (obj) => Array.from(AppLogNoCidTBC.Errors(obj));
56
+ var isValidApplogNoCid = AppLogNoCidTBC.Check.bind(AppLogNoCidTBC);
57
+ var AppLogTB = Type.Composite([
58
+ Type.Object({
59
+ cid: CIDTB
60
+ }),
61
+ AppLogNoCidTB
62
+ ]);
63
+ var AppLogTBC = TypeCompiler.Compile(AppLogTB);
64
+ var getApplogTypeErrors = (obj) => Array.from(AppLogTBC.Errors(obj));
65
+ var isValidApplog = AppLogTBC.Check.bind(AppLogTBC);
66
+
67
+ // src/applog/applog-utils.ts
14
68
  var { WARN, LOG, DEBUG, VERBOSE, ERROR } = Logger.setup(Logger.INFO);
69
+ var applogSummary = (log) => {
70
+ if (!log) return "\u2205";
71
+ const a = log;
72
+ const cid = a.cid ? `#${String(a.cid).slice(-6)}` : "";
73
+ if (isEncryptedApplog(log)) return `enc[${log.enc.length}B]${cid}`;
74
+ const vl = a.vl === void 0 ? "\u2205" : JSON.stringify(a.vl) ?? String(a.vl);
75
+ const vlStr = vl.length > 32 ? `${vl.slice(0, 32)}\u2026` : vl;
76
+ return `${a.en}/${a.at}=${vlStr}${a.ts ? `@${a.ts}` : ""}${cid}`;
77
+ };
78
+ var applogsSummary = (logs, sample = 3) => {
79
+ if (!logs) return "\u2205";
80
+ if (!logs.length) return "[0]";
81
+ const shown = logs.slice(0, sample).map(applogSummary).join(", ");
82
+ return `[${logs.length}] ${shown}${logs.length > sample ? ` \u2026+${logs.length - sample}` : ""}`;
83
+ };
15
84
  var isoDateStrCompare = (strA, strB, dir = "asc") => dir === "asc" ? strA.localeCompare(strB, "en-US") : strB.localeCompare(strA, "en-US");
16
85
  var objEqualByKeys = (keys, objA, objB) => {
17
86
  return isEqual(pick(objA, keys), pick(objB, keys));
@@ -100,7 +169,9 @@ function topoSortByPv(logs, dir) {
100
169
  visited.add(log.cid);
101
170
  result.push(log);
102
171
  const children = childrenByPv.get(log.cid);
103
- if (children) for (let i = children.length - 1; i >= 0; i--) stack.push(children[i]);
172
+ if (children) {
173
+ for (let i = children.length - 1; i >= 0; i--) stack.push(children[i]);
174
+ }
104
175
  }
105
176
  if (result.length < logs.length) {
106
177
  for (const log of logs) if (!visited.has(log.cid)) result.push(log);
@@ -586,7 +657,10 @@ var Thread = class {
586
657
  }
587
658
  notifySubscribers(event) {
588
659
  this._version++;
589
- DEBUG2(`[thread: ${this.name}] notifying`, this._derivedSubscribers.length, "derived +", this._subscribers.length, "subscribers of", { ...event, subs: this._subscribers });
660
+ DEBUG2(`[thread: ${this.name}] notifying`, this._derivedSubscribers.length, "derived +", this._subscribers.length, "subscribers of", {
661
+ ...event,
662
+ subs: this._subscribers
663
+ });
590
664
  const derived = [...this._derivedSubscribers];
591
665
  for (const subscriber of derived) {
592
666
  subscriber(event);
@@ -676,6 +750,17 @@ var Thread = class {
676
750
  get hasParents() {
677
751
  return !!this.parents?.length;
678
752
  }
753
+ // Compact representation for server-side / plain console logging (Node's util.inspect).
754
+ // ⚠ Only consulted by Node — browser devtools ignore this symbol and keep rendering the
755
+ // live, expandable object, so passing `thread` to a logger stays clickable in devtools
756
+ // while no longer splatting every applog + the whole parent chain + subscribers to stdout.
757
+ [/* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom")]() {
758
+ try {
759
+ return `${this.constructor.name}<${this.nameAndSizeUntracked}${this.filters?.length ? ` |${this.filters.join(",")}` : ""}>`;
760
+ } catch {
761
+ return `${this.constructor.name}<${this.name} (size?)>`;
762
+ }
763
+ }
679
764
  };
680
765
  var getLogsFromThread = (logsOrThread) => logsOrThread instanceof Thread ? logsOrThread.applogs : logsOrThread;
681
766
  var StaticThread = class _StaticThread extends Thread {
@@ -703,60 +788,6 @@ import { sha256 } from "@noble/hashes/sha2.js";
703
788
  import { Logger as Logger3 } from "besonders-logger";
704
789
  import { CID, digest as Digest } from "multiformats";
705
790
  import { encode as multiformatsEncode } from "multiformats/block";
706
-
707
- // src/applog/datom-types.ts
708
- import { FormatRegistry, Type } from "@sinclair/typebox";
709
- import { TypeCompiler } from "@sinclair/typebox/compiler";
710
- var Nullable = (schema) => Type.Union([schema, Type.Null()]);
711
- var EntityID_LENGTH = 7;
712
- var isCID = /^(k51qz|baguq)[0-9a-z]{56,57}$/;
713
- var isShortHash = /^[0-9A-Fa-f]{7,8}$/g;
714
- FormatRegistry.Set("EntityID", (value) => !!value.match(isShortHash) || !!value.match(isCID));
715
- var EntityID = Type.String();
716
- var isEncryptedApplog = (l) => l?.enc instanceof Uint8Array;
717
- FormatRegistry.Set("CID", (value) => !!value.match(isCID));
718
- var CIDTB = Type.String({ pattern: isCID.source });
719
- var isURL = /^http([s]?):\/\/.*\..*/;
720
- FormatRegistry.Set("URL", (value) => !!value.match(isURL));
721
- var URL = Type.String({ pattern: isURL.source });
722
- var JsonValueTB = Type.Recursive(
723
- (This) => Type.Union([
724
- Type.String(),
725
- Type.Number(),
726
- Type.Boolean(),
727
- Type.Null(),
728
- Type.Array(This),
729
- Type.Record(Type.String(), This)
730
- ])
731
- );
732
- var AppLogNoCidTB = Type.Object({
733
- en: EntityID,
734
- // EntityID
735
- at: Type.String(),
736
- // Attribute
737
- vl: JsonValueTB,
738
- // ApplogValue (JSON-serializable: primitives, arrays, objects)
739
- ts: Type.String(),
740
- // Timestamp
741
- ag: Type.String(),
742
- // AgentHash
743
- pv: Nullable(CIDTB)
744
- // CidString
745
- });
746
- var AppLogNoCidTBC = TypeCompiler.Compile(AppLogNoCidTB);
747
- var getApplogNoCidTypeErrors = (obj) => Array.from(AppLogNoCidTBC.Errors(obj));
748
- var isValidApplogNoCid = AppLogNoCidTBC.Check.bind(AppLogNoCidTBC);
749
- var AppLogTB = Type.Composite([
750
- Type.Object({
751
- cid: CIDTB
752
- }),
753
- AppLogNoCidTB
754
- ]);
755
- var AppLogTBC = TypeCompiler.Compile(AppLogTB);
756
- var getApplogTypeErrors = (obj) => Array.from(AppLogTBC.Errors(obj));
757
- var isValidApplog = AppLogTBC.Check.bind(AppLogTBC);
758
-
759
- // src/ipfs/ipfs-utils.ts
760
791
  import { base36 } from "multiformats/bases/base36";
761
792
  import { sha256 as sha265Hasher } from "multiformats/hashes/sha2";
762
793
  var { WARN: WARN3, LOG: LOG3, DEBUG: DEBUG3, VERBOSE: VERBOSE3, ERROR: ERROR3 } = Logger3.setup(Logger3.INFO);
@@ -1069,6 +1100,7 @@ function refCountedMemoizedFn(name, fn, opts) {
1069
1100
  import { Logger as Logger5 } from "besonders-logger";
1070
1101
  import { sortedIndexBy } from "lodash-es";
1071
1102
  var { WARN: WARN5, LOG: LOG5, DEBUG: DEBUG5, VERBOSE: VERBOSE5, ERROR: ERROR5 } = Logger5.setup(Logger5.INFO);
1103
+ var threadEventSummary = (e) => isInitEvent(e) ? `init ${applogsSummary(e.init)}` : `added ${applogsSummary(e.added)}${e.removed ? ` removed ${applogsSummary(e.removed)}` : ""}`;
1072
1104
  var MappedThread = class _MappedThread extends Thread {
1073
1105
  // mapped to unsubscribe function
1074
1106
  constructor(name, parents, filters, _derivation, _writeMapper = null, _readOnly) {
@@ -1215,9 +1247,10 @@ var MappedThread = class _MappedThread extends Thread {
1215
1247
  this._applogs.splice(idx, 1);
1216
1248
  } else {
1217
1249
  throw ERROR5(`MappedThread{${this.name}} toRemove: log not found`, toRemove, {
1218
- thread: this,
1219
- event,
1220
- result
1250
+ thread: this.nameAndSizeUntracked,
1251
+ currentLogs: applogsSummary(this._applogs),
1252
+ event: threadEventSummary(event),
1253
+ result: threadEventSummary(result)
1221
1254
  });
1222
1255
  }
1223
1256
  }
@@ -1736,7 +1769,7 @@ function debounceWrites(thread, wait = 700, removeDuplicatesWith = compareApplog
1736
1769
  if (thread.readOnly) throw ERROR9(`[debounceWrites] but readOnly thread`, thread.name);
1737
1770
  let insertQueue = [];
1738
1771
  const debouncedCommit = debounce(() => {
1739
- WARN9(`Debounce tail`, { thread, mappedThread, insertQueue });
1772
+ DEBUG9(`Debounce tail`, { thread: thread.nameAndSizeUntracked, queued: applogsSummary(insertQueue) });
1740
1773
  const toInsert = ensureTsPvAndFinalizeApplogs(
1741
1774
  // ? uniq, sure - but which one is used? (update: seems the first one, so reverse)
1742
1775
  uniqWith(insertQueue.reverse(), removeDuplicatesWith),
@@ -1746,7 +1779,7 @@ function debounceWrites(thread, wait = 700, removeDuplicatesWith = compareApplog
1746
1779
  insertQueue.splice(0, insertQueue.length);
1747
1780
  }, wait);
1748
1781
  const handleInsert = (applogs) => {
1749
- DEBUG9(`Debounce input:`, applogs, { thread, mappedThread, insertQueue });
1782
+ DEBUG9(`Debounce input:`, applogsSummary(applogs), { thread: thread.nameAndSizeUntracked, queued: insertQueue.length });
1750
1783
  insertQueue.push(...applogs);
1751
1784
  debouncedCommit();
1752
1785
  return null;
@@ -1843,6 +1876,8 @@ export {
1843
1876
  ensureValidCIDinstance,
1844
1877
  areCidsEqual,
1845
1878
  containsCid,
1879
+ applogSummary,
1880
+ applogsSummary,
1846
1881
  isoDateStrCompare,
1847
1882
  objEqualByKeys,
1848
1883
  valueEq,
@@ -1919,4 +1954,4 @@ export {
1919
1954
  withPvFrom,
1920
1955
  joinThreads
1921
1956
  };
1922
- //# sourceMappingURL=chunk-4MKPGQIM.js.map
1957
+ //# sourceMappingURL=chunk-7VHIXHNF.js.map