@wovin/core 0.1.9 → 0.1.13

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.
@@ -8,7 +8,13 @@ export declare function sortApplogsByTs(appLogArray: Applog[], dir?: 'asc' | 'de
8
8
  export declare const isTsBefore: (log: Applog, logToCompare: Applog) => boolean;
9
9
  export declare const uniqueEnFromAppLogs: (appLogArray: Applog[]) => string[];
10
10
  export declare const areApplogsEqual: (logA: Applog, logB: Applog) => boolean;
11
- export declare const removeDuplicateAppLogs: (appLogArray: Applog[]) => Applog[];
11
+ export type RemoveDuplicateAppLogsMode = 'safety' | 'cleanup';
12
+ /**
13
+ * Deduplicate applogs by CID.
14
+ * - safety: fast duplicate check; returns original array if no duplicates found.
15
+ * - cleanup: optimized for merged arrays with likely duplicates.
16
+ */
17
+ export declare const removeDuplicateAppLogs: (appLogArray: Applog[], mode?: RemoveDuplicateAppLogsMode) => Applog[];
12
18
  export declare const getHashID: (stringifiable: any, lngth?: number) => string;
13
19
  export declare function isVariable(x: any): x is string;
14
20
  export declare function variableNameWithoutQuestionmark(str: string): string;
@@ -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,eAAe,CAAA;AAItB,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,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,EAAE,MAAK,KAAK,GAAG,MAAc,WAA6C,CAAA;AACvI,eAAO,MAAM,oBAAoB,yCAAwC,CAAA;AAEzE,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,KAAK,GAAG,MAAc,YAEjF;AACD,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,YAAoC,CAAA;AAE9F,eAAO,MAAM,sBAAsB,GAAI,aAAa,MAAM,EAAE,aAmB3D,CAAA;AAWD,eAAO,MAAM,SAAS,GAAI,eAAe,GAAG,EAAE,cAAS,KAAwD,MAAM,CAAA;AAErH,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,CA6B7H;AACD,wBAAgB,SAAS,CAAC,WAAW,EAAE,cAAc,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,aAAa,CAiBhI;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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"}
@@ -46,7 +46,7 @@ import {
46
46
  variableNameWithoutQuestionmark,
47
47
  withPvFrom,
48
48
  withTs
49
- } from "./chunk-QUZMTKEG.min.js";
49
+ } from "./chunk-CMYPWG2N.min.js";
50
50
  import "./chunk-KEHU7HGZ.min.js";
51
51
  import "./chunk-HYMC7W6S.min.js";
52
52
  import "./chunk-PHITDXZT.min.js";
@@ -2,7 +2,7 @@ import {
2
2
  cyrb53hash,
3
3
  ensureTsPvAndFinalizeApplog,
4
4
  g
5
- } from "./chunk-QUZMTKEG.min.js";
5
+ } from "./chunk-CMYPWG2N.min.js";
6
6
 
7
7
  // src/pubsub/pub-pull.ts
8
8
  var { WARN, LOG, DEBUG, VERBOSE, ERROR } = g.setup(g.INFO);
@@ -37,4 +37,4 @@ export {
37
37
  isSubscription,
38
38
  agentToShortHash
39
39
  };
40
- //# sourceMappingURL=chunk-WKMJF43O.min.js.map
40
+ //# sourceMappingURL=chunk-5LVRXH2F.min.js.map
@@ -16,7 +16,7 @@ import {
16
16
  rollingMapper,
17
17
  sortApplogsByTs,
18
18
  wrapper_default
19
- } from "./chunk-QUZMTKEG.min.js";
19
+ } from "./chunk-CMYPWG2N.min.js";
20
20
  import {
21
21
  action,
22
22
  autorun,
@@ -507,4 +507,4 @@ export {
507
507
  withTimeout,
508
508
  throwOnTimeout
509
509
  };
510
- //# sourceMappingURL=chunk-CT54AE2F.min.js.map
510
+ //# sourceMappingURL=chunk-5T5HSBRE.min.js.map
@@ -10199,8 +10199,12 @@ function sortApplogsByTs(appLogArray, dir = "asc") {
10199
10199
  var isTsBefore = (log, logToCompare) => isBefore(new Date(log.ts), new Date(logToCompare.ts));
10200
10200
  var uniqueEnFromAppLogs = (appLogArray) => [...new Set(appLogArray.map((eachLog) => eachLog.en))];
10201
10201
  var areApplogsEqual = (logA, logB) => comparer.structural(logA, logB);
10202
- var removeDuplicateAppLogs = (appLogArray) => {
10202
+ var warnMissingRemoveDuplicateMode = () => {
10203
+ WARN4(`[removeDuplicateAppLogs] mode not set; pass 'safety' or 'cleanup' for optimal behavior`);
10204
+ };
10205
+ var removeDuplicateAppLogsCleanup = (appLogArray) => {
10203
10206
  const logMap = /* @__PURE__ */ new Map();
10207
+ const verboseEnabled = VERBOSE4.isEnabled;
10204
10208
  for (const eachLog of appLogArray) {
10205
10209
  if (!eachLog) {
10206
10210
  ERROR4(`falsy entry in applogs`, appLogArray);
@@ -10211,14 +10215,52 @@ var removeDuplicateAppLogs = (appLogArray) => {
10211
10215
  throw new Error(`applog with missing CID`);
10212
10216
  }
10213
10217
  const key = eachLog.cid;
10214
- if (logMap.has(key)) {
10215
- VERBOSE4(`Skipping duplicate applog:`, [logMap.get(key), eachLog]);
10218
+ const existing = logMap.get(key);
10219
+ if (existing) {
10220
+ if (verboseEnabled) VERBOSE4(`Skipping duplicate applog:`, [existing, eachLog]);
10216
10221
  } else {
10217
10222
  logMap.set(key, eachLog);
10218
10223
  }
10219
10224
  }
10220
10225
  return Array.from(logMap.values());
10221
10226
  };
10227
+ var removeDuplicateAppLogsSafety = (appLogArray) => {
10228
+ const seen = /* @__PURE__ */ new Set();
10229
+ const verboseEnabled = VERBOSE4.isEnabled;
10230
+ const existingByCid = verboseEnabled ? /* @__PURE__ */ new Map() : null;
10231
+ let result = null;
10232
+ let index = 0;
10233
+ for (const eachLog of appLogArray) {
10234
+ if (!eachLog) {
10235
+ ERROR4(`falsy entry in applogs`, appLogArray);
10236
+ throw new Error(`falsy entry in applogs`);
10237
+ }
10238
+ if (!eachLog.cid) {
10239
+ ERROR4(`applog with missing CID`, eachLog);
10240
+ throw new Error(`applog with missing CID`);
10241
+ }
10242
+ const key = eachLog.cid;
10243
+ if (seen.has(key)) {
10244
+ if (!result) {
10245
+ result = appLogArray.slice(0, index);
10246
+ }
10247
+ if (verboseEnabled) VERBOSE4(`Skipping duplicate applog:`, [existingByCid?.get(key), eachLog]);
10248
+ } else {
10249
+ seen.add(key);
10250
+ if (existingByCid) existingByCid.set(key, eachLog);
10251
+ if (result) result.push(eachLog);
10252
+ }
10253
+ index++;
10254
+ }
10255
+ return result ?? appLogArray;
10256
+ };
10257
+ var removeDuplicateAppLogs = (appLogArray, mode) => {
10258
+ if (!mode) {
10259
+ warnMissingRemoveDuplicateMode();
10260
+ return removeDuplicateAppLogsCleanup(appLogArray);
10261
+ }
10262
+ return mode === "safety" ? removeDuplicateAppLogsSafety(appLogArray) : removeDuplicateAppLogsCleanup(appLogArray);
10263
+ };
10222
10264
  var getHashID = (stringifiable, lngth = 8) => cyrb53hash(wrapper_default(stringifiable), 31, lngth);
10223
10265
  function isVariable(x2) {
10224
10266
  return typeof x2 === "string" && x2.startsWith("?");
@@ -10502,7 +10544,7 @@ function joinThreads(threads) {
10502
10544
  throw new Error(`falsy applogs of thread`);
10503
10545
  }
10504
10546
  return logs;
10505
- }))
10547
+ }), "cleanup")
10506
10548
  );
10507
10549
  };
10508
10550
  let initialMergeResult = untracked(() => fullJoin());
@@ -10898,7 +10940,7 @@ var WriteableThread = class extends Thread {
10898
10940
  * - Invalid applogs (missing required fields)
10899
10941
  * - Applogs already in thread (programming error)
10900
10942
  *
10901
- * For external imports where duplicates are expected, use removeDuplicateAppLogs()
10943
+ * For external imports where duplicates are expected, use removeDuplicateAppLogs(..., 'cleanup')
10902
10944
  * before calling this method.
10903
10945
  *
10904
10946
  * @param appLogsToInsert Must be deduplicated and validated. Needs to be mutable because it will be sorted
@@ -10908,7 +10950,7 @@ var WriteableThread = class extends Thread {
10908
10950
  insertRaw(appLogsToInsert) {
10909
10951
  DEBUG8(`[WriteableThread.insertRaw] ENTER - ${appLogsToInsert.length} applogs for thread "${this.name}"`);
10910
10952
  DEBUG8(`[WriteableThread.insertRaw] About to deduplicate`);
10911
- const deduplicated = removeDuplicateAppLogs(appLogsToInsert);
10953
+ const deduplicated = removeDuplicateAppLogs(appLogsToInsert, "safety");
10912
10954
  if (deduplicated.length !== appLogsToInsert.length) {
10913
10955
  throw ERROR8(`[insertRaw] duplicate applogs passed: ${appLogsToInsert.length - deduplicated.length}`, {
10914
10956
  appLogsToInsert,
@@ -11211,4 +11253,4 @@ lodash-es/lodash.js:
11211
11253
  @noble/hashes/utils.js:
11212
11254
  (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
11213
11255
  */
11214
- //# sourceMappingURL=chunk-QUZMTKEG.min.js.map
11256
+ //# sourceMappingURL=chunk-CMYPWG2N.min.js.map