loro-crdt 1.5.5 → 1.5.6

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.5.6
4
+
5
+ ### Patch Changes
6
+
7
+ - 60876bb: Feat: redact
8
+
3
9
  ## 1.5.5
4
10
 
5
11
  ### Patch Changes
package/base64/index.js CHANGED
@@ -383,6 +383,44 @@ function decodeImportBlobMeta(blob, check_checksum) {
383
383
  }
384
384
  }
385
385
 
386
+ /**
387
+ * Redacts sensitive content in JSON updates within the specified version range.
388
+ *
389
+ * This function allows you to share document history while removing potentially sensitive content.
390
+ * It preserves the document structure and collaboration capabilities while replacing content with
391
+ * placeholders according to these redaction rules:
392
+ *
393
+ * - Preserves delete and move operations
394
+ * - Replaces text insertion content with the Unicode replacement character
395
+ * - Substitutes list and map insert values with null
396
+ * - Maintains structure of child containers
397
+ * - Replaces text mark values with null
398
+ * - Preserves map keys and text annotation keys
399
+ *
400
+ * @param {Object|string} jsonUpdates - The JSON updates to redact (object or JSON string)
401
+ * @param {Object} versionRange - Version range defining what content to redact,
402
+ * format: { peerId: [startCounter, endCounter], ... }
403
+ * @returns {Object} The redacted JSON updates
404
+ * @param {string | JsonSchema} json_updates
405
+ * @param {any} version_range
406
+ * @returns {JsonSchema}
407
+ */
408
+ function redactJsonUpdates(json_updates, version_range) {
409
+ try {
410
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
411
+ wasm.redactJsonUpdates(retptr, addHeapObject(json_updates), addHeapObject(version_range));
412
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
413
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
414
+ var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
415
+ if (r2) {
416
+ throw takeObject(r1);
417
+ }
418
+ return takeObject(r0);
419
+ } finally {
420
+ wasm.__wbindgen_add_to_stack_pointer(16);
421
+ }
422
+ }
423
+
386
424
  function __wbg_adapter_60(arg0, arg1, arg2) {
387
425
  wasm.__wbindgen_export_5(arg0, arg1, addHeapObject(arg2));
388
426
  }
@@ -7046,6 +7084,7 @@ var imports = /*#__PURE__*/Object.freeze({
7046
7084
  decodeFrontiers: decodeFrontiers,
7047
7085
  decodeImportBlobMeta: decodeImportBlobMeta,
7048
7086
  encodeFrontiers: encodeFrontiers,
7087
+ redactJsonUpdates: redactJsonUpdates,
7049
7088
  run: run,
7050
7089
  setDebug: setDebug
7051
7090
  });
@@ -7054,7 +7093,7 @@ var imports = /*#__PURE__*/Object.freeze({
7054
7093
  // Without this patch, Cloudflare Worker would raise issue like: "Uncaught TypeError: wasm2.__wbindgen_start is not a function"
7055
7094
 
7056
7095
 
7057
- import loro_wasm_bg_js from './loro_wasm_bg-40e94009.js';
7096
+ import loro_wasm_bg_js from './loro_wasm_bg-f48ca64a.js';
7058
7097
  const instance = new WebAssembly.Instance(loro_wasm_bg_js(), {
7059
7098
  "./loro_wasm_bg.js": imports,
7060
7099
  });
@@ -7359,4 +7398,4 @@ function idStrToId(idStr) {
7359
7398
  };
7360
7399
  }
7361
7400
 
7362
- export { Awareness, AwarenessWasm, ChangeModifier, Cursor, EphemeralStore, EphemeralStoreWasm, LORO_VERSION, Loro, LoroCounter, LoroDoc, LoroList, LoroMap, LoroMovableList, LoroText, LoroTree, LoroTreeNode, UndoManager, VersionVector, __wbg_String_8f0eb39a4a4c2f66, __wbg_apply_9bb7fe8fff013a3f, __wbg_buffer_ef9774282e5dab94, __wbg_call_0ad083564791763a, __wbg_call_a34b6b4765f27be0, __wbg_call_d00953b926be4879, __wbg_call_efe5a4db7065d1a2, __wbg_changemodifier_new, __wbg_crypto_ed58b8e10a292839, __wbg_cursor_new, __wbg_done_f4c254830a095eaf, __wbg_entries_4dce6361e3ba6fbc, __wbg_entries_83beb641792ccb9c, __wbg_error_7534b8e9a36f1ab4, __wbg_error_9912f7d6d7835a4b, __wbg_from_3aa0fcaa8eef0104, __wbg_getRandomValues_bcb4912f16000dc4, __wbg_get_0c3cc364764a0b98, __wbg_get_b996a12be035ef4f, __wbg_getindex_a471648b3037c750, __wbg_getwithrefkey_1dc361bd10053bfe, __wbg_globalThis_6b4d52a0b6aaeaea, __wbg_global_49324ce12193de77, __wbg_instanceof_ArrayBuffer_ff40e55b5978e215, __wbg_instanceof_Map_0f3f3653f757ced1, __wbg_instanceof_Object_9108547bac1f91b1, __wbg_instanceof_Uint8Array_db97368f94b1373f, __wbg_isArray_8738f1062fa88586, __wbg_isSafeInteger_a1b3e0811faecf2f, __wbg_iterator_c0c688f37fa815e6, __wbg_length_12246a78d2f65d3a, __wbg_length_c24da17096edfe57, __wbg_log_0cc1b7768397bcfe, __wbg_log_0fd6c49475c7bece, __wbg_log_cb9e190acc5753fb, __wbg_lorocounter_new, __wbg_lorolist_new, __wbg_loromap_new, __wbg_loromovablelist_new, __wbg_lorotext_new, __wbg_lorotree_new, __wbg_lorotreenode_new, __wbg_mark_7438147ce31e9d4b, __wbg_measure_fb7825c11612c823, __wbg_msCrypto_0a36e2ec3a343d26, __wbg_new_518e2184725aa711, __wbg_new_59845962d1127937, __wbg_new_67abf4a77618ee3e, __wbg_new_8a6f238a6ece86ea, __wbg_new_e2d07398d7689006, __wbg_newnoargs_a136448eeb7d48ac, __wbg_newwithbyteoffsetandlength_84908302a4c137cf, __wbg_newwithlength_4c216eaaf23f2f9a, __wbg_newwithlength_88b49de1eb24d63e, __wbg_next_928df8c15fc0c9b0, __wbg_next_9dc0926f351c7090, __wbg_node_02999533c4ea02e3, __wbg_now_3e8577e703add0ba, __wbg_ownKeys_b16312a839a4152c, __wbg_process_5c1d670bc53614b8, __wbg_push_e7d7247e69dad3ee, __wbg_randomFillSync_ab2cfe79ebbf2740, __wbg_require_79b1e9274cde3c87, __wbg_resolve_267ff08e7e1d2ce4, __wbg_self_cca3ca60d61220f4, __wbg_set_1b50d2de855a9d50, __wbg_set_393f510a6b7e9da5, __wbg_set_3f1d0b984ed272ed, __wbg_set_5deee49b10b2b780, __wbg_set_93ba9407b5476ec6, __wbg_set_wasm, __wbg_setindex_e0b7b31bfc87ba3f, __wbg_stack_0ed75d68575b0f3c, __wbg_subarray_2dc34705c0dc7cdb, __wbg_then_84907e7a6730461e, __wbg_value_51f8a88d4a1805fb, __wbg_versions_c71aa1626a93e0a1, __wbg_versionvector_new, __wbg_window_2aba046d3fc4ad7c, __wbindgen_as_number, __wbindgen_bigint_from_i64, __wbindgen_bigint_from_u64, __wbindgen_bigint_get_as_i64, __wbindgen_boolean_get, __wbindgen_cb_drop, __wbindgen_closure_wrapper483, __wbindgen_closure_wrapper485, __wbindgen_debug_string, __wbindgen_error_new, __wbindgen_in, __wbindgen_is_array, __wbindgen_is_bigint, __wbindgen_is_falsy, __wbindgen_is_function, __wbindgen_is_null, __wbindgen_is_object, __wbindgen_is_string, __wbindgen_is_undefined, __wbindgen_jsval_eq, __wbindgen_jsval_loose_eq, __wbindgen_memory, __wbindgen_number_get, __wbindgen_number_new, __wbindgen_object_clone_ref, __wbindgen_object_drop_ref, __wbindgen_rethrow, __wbindgen_string_get, __wbindgen_string_new, __wbindgen_throw, __wbindgen_typeof, decodeFrontiers, decodeImportBlobMeta, encodeFrontiers, getType, idStrToId, isContainer, isContainerId, newContainerID, newRootContainerID, run, setDebug };
7401
+ export { Awareness, AwarenessWasm, ChangeModifier, Cursor, EphemeralStore, EphemeralStoreWasm, LORO_VERSION, Loro, LoroCounter, LoroDoc, LoroList, LoroMap, LoroMovableList, LoroText, LoroTree, LoroTreeNode, UndoManager, VersionVector, __wbg_String_8f0eb39a4a4c2f66, __wbg_apply_9bb7fe8fff013a3f, __wbg_buffer_ef9774282e5dab94, __wbg_call_0ad083564791763a, __wbg_call_a34b6b4765f27be0, __wbg_call_d00953b926be4879, __wbg_call_efe5a4db7065d1a2, __wbg_changemodifier_new, __wbg_crypto_ed58b8e10a292839, __wbg_cursor_new, __wbg_done_f4c254830a095eaf, __wbg_entries_4dce6361e3ba6fbc, __wbg_entries_83beb641792ccb9c, __wbg_error_7534b8e9a36f1ab4, __wbg_error_9912f7d6d7835a4b, __wbg_from_3aa0fcaa8eef0104, __wbg_getRandomValues_bcb4912f16000dc4, __wbg_get_0c3cc364764a0b98, __wbg_get_b996a12be035ef4f, __wbg_getindex_a471648b3037c750, __wbg_getwithrefkey_1dc361bd10053bfe, __wbg_globalThis_6b4d52a0b6aaeaea, __wbg_global_49324ce12193de77, __wbg_instanceof_ArrayBuffer_ff40e55b5978e215, __wbg_instanceof_Map_0f3f3653f757ced1, __wbg_instanceof_Object_9108547bac1f91b1, __wbg_instanceof_Uint8Array_db97368f94b1373f, __wbg_isArray_8738f1062fa88586, __wbg_isSafeInteger_a1b3e0811faecf2f, __wbg_iterator_c0c688f37fa815e6, __wbg_length_12246a78d2f65d3a, __wbg_length_c24da17096edfe57, __wbg_log_0cc1b7768397bcfe, __wbg_log_0fd6c49475c7bece, __wbg_log_cb9e190acc5753fb, __wbg_lorocounter_new, __wbg_lorolist_new, __wbg_loromap_new, __wbg_loromovablelist_new, __wbg_lorotext_new, __wbg_lorotree_new, __wbg_lorotreenode_new, __wbg_mark_7438147ce31e9d4b, __wbg_measure_fb7825c11612c823, __wbg_msCrypto_0a36e2ec3a343d26, __wbg_new_518e2184725aa711, __wbg_new_59845962d1127937, __wbg_new_67abf4a77618ee3e, __wbg_new_8a6f238a6ece86ea, __wbg_new_e2d07398d7689006, __wbg_newnoargs_a136448eeb7d48ac, __wbg_newwithbyteoffsetandlength_84908302a4c137cf, __wbg_newwithlength_4c216eaaf23f2f9a, __wbg_newwithlength_88b49de1eb24d63e, __wbg_next_928df8c15fc0c9b0, __wbg_next_9dc0926f351c7090, __wbg_node_02999533c4ea02e3, __wbg_now_3e8577e703add0ba, __wbg_ownKeys_b16312a839a4152c, __wbg_process_5c1d670bc53614b8, __wbg_push_e7d7247e69dad3ee, __wbg_randomFillSync_ab2cfe79ebbf2740, __wbg_require_79b1e9274cde3c87, __wbg_resolve_267ff08e7e1d2ce4, __wbg_self_cca3ca60d61220f4, __wbg_set_1b50d2de855a9d50, __wbg_set_393f510a6b7e9da5, __wbg_set_3f1d0b984ed272ed, __wbg_set_5deee49b10b2b780, __wbg_set_93ba9407b5476ec6, __wbg_set_wasm, __wbg_setindex_e0b7b31bfc87ba3f, __wbg_stack_0ed75d68575b0f3c, __wbg_subarray_2dc34705c0dc7cdb, __wbg_then_84907e7a6730461e, __wbg_value_51f8a88d4a1805fb, __wbg_versions_c71aa1626a93e0a1, __wbg_versionvector_new, __wbg_window_2aba046d3fc4ad7c, __wbindgen_as_number, __wbindgen_bigint_from_i64, __wbindgen_bigint_from_u64, __wbindgen_bigint_get_as_i64, __wbindgen_boolean_get, __wbindgen_cb_drop, __wbindgen_closure_wrapper483, __wbindgen_closure_wrapper485, __wbindgen_debug_string, __wbindgen_error_new, __wbindgen_in, __wbindgen_is_array, __wbindgen_is_bigint, __wbindgen_is_falsy, __wbindgen_is_function, __wbindgen_is_null, __wbindgen_is_object, __wbindgen_is_string, __wbindgen_is_undefined, __wbindgen_jsval_eq, __wbindgen_jsval_loose_eq, __wbindgen_memory, __wbindgen_number_get, __wbindgen_number_new, __wbindgen_object_clone_ref, __wbindgen_object_drop_ref, __wbindgen_rethrow, __wbindgen_string_get, __wbindgen_string_new, __wbindgen_throw, __wbindgen_typeof, decodeFrontiers, decodeImportBlobMeta, encodeFrontiers, getType, idStrToId, isContainer, isContainerId, newContainerID, newRootContainerID, redactJsonUpdates, run, setDebug };
@@ -24,6 +24,26 @@ export function setDebug(): void;
24
24
  * - changeNum
25
25
  */
26
26
  export function decodeImportBlobMeta(blob: Uint8Array, check_checksum: boolean): ImportBlobMetadata;
27
+ /**
28
+ * Redacts sensitive content in JSON updates within the specified version range.
29
+ *
30
+ * This function allows you to share document history while removing potentially sensitive content.
31
+ * It preserves the document structure and collaboration capabilities while replacing content with
32
+ * placeholders according to these redaction rules:
33
+ *
34
+ * - Preserves delete and move operations
35
+ * - Replaces text insertion content with the Unicode replacement character
36
+ * - Substitutes list and map insert values with null
37
+ * - Maintains structure of child containers
38
+ * - Replaces text mark values with null
39
+ * - Preserves map keys and text annotation keys
40
+ *
41
+ * @param {Object|string} jsonUpdates - The JSON updates to redact (object or JSON string)
42
+ * @param {Object} versionRange - Version range defining what content to redact,
43
+ * format: { peerId: [startCounter, endCounter], ... }
44
+ * @returns {Object} The redacted JSON updates
45
+ */
46
+ export function redactJsonUpdates(json_updates: string | JsonSchema, version_range: any): JsonSchema;
27
47
 
28
48
  /**
29
49
  * Container types supported by loro.
@@ -194,11 +214,11 @@ interface LoroDoc {
194
214
  * doc.commit();
195
215
  * expect(doc.getChangeAt({ peer: "0", counter: 0 }).message).toBe("test");
196
216
  * ```
197
- *
217
+ *
198
218
  * ### Advanced Example: Creating a Merkle DAG
199
- *
219
+ *
200
220
  * By combining `doc.subscribePreCommit` with `doc.exportJsonInIdSpan`, you can implement advanced features like representing Loro's editing history as a Merkle DAG:
201
- *
221
+ *
202
222
  * ```ts
203
223
  * const doc = new LoroDoc();
204
224
  * doc.setPeerId(0);
@@ -218,7 +238,7 @@ interface LoroDoc {
218
238
  * const sha256Hash = hash.digest('hex');
219
239
  * e.modifier.setMessage(sha256Hash);
220
240
  * });
221
- *
241
+ *
222
242
  * doc.getList("list").insert(0, 100);
223
243
  * doc.commit();
224
244
  * // Change 0
@@ -236,8 +256,8 @@ interface LoroDoc {
236
256
  * // }
237
257
  * // ]
238
258
  * // }
239
- *
240
- *
259
+ *
260
+ *
241
261
  * doc.getList("list").insert(0, 200);
242
262
  * doc.commit();
243
263
  * // Change 1
@@ -257,13 +277,13 @@ interface LoroDoc {
257
277
  * // }
258
278
  * // ]
259
279
  * // }
260
- *
280
+ *
261
281
  * expect(doc.getChangeAt({ peer: "0", counter: 0 }).message).toBe("2af99cf93869173984bcf6b1ce5412610b0413d027a5511a8f720a02a4432853");
262
282
  * expect(doc.getChangeAt({ peer: "0", counter: 1 }).message).toBe("aedbb442c554ecf59090e0e8339df1d8febf647f25cc37c67be0c6e27071d37f");
263
283
  * ```
264
- *
284
+ *
265
285
  * @param f - A callback function that receives a pre commit event.
266
- *
286
+ *
267
287
  **/
268
288
  subscribePreCommit(f: (e: { changeMeta: Change, origin: string, modifier: ChangeModifier }) => void): () => void
269
289
 
@@ -587,9 +607,6 @@ interface LoroMovableList {
587
607
  }
588
608
 
589
609
  export type Side = -1 | 0 | 1;
590
-
591
-
592
-
593
610
  export type JsonOpID = `${number}@${PeerID}`;
594
611
  export type JsonContainerID = `🦜:${ContainerID}` ;
595
612
  export type JsonValue =
@@ -931,7 +948,7 @@ interface LoroDoc<T extends Record<string, Container> = Record<string, Container
931
948
  * import { LoroDoc } from "loro-crdt";
932
949
  *
933
950
  * const doc = new LoroDoc();
934
- * const list = doc.getList("list");
951
+ * const list = doc.getMovableList("list");
935
952
  * ```
936
953
  */
937
954
  getMovableList<Key extends keyof T | ContainerID>(name: Key): T[Key] extends LoroMovableList ? T[Key] : LoroMovableList;
@@ -967,9 +984,9 @@ interface LoroDoc<T extends Record<string, Container> = Record<string, Container
967
984
  * It ensures deterministic output, making it ideal for hash calculations and integrity checks.
968
985
  *
969
986
  * This method can also export pending changes from the uncommitted transaction that have not yet been applied to the OpLog.
970
- *
987
+ *
971
988
  * This method will NOT trigger a new commit implicitly.
972
- *
989
+ *
973
990
  * @param idSpan - The id span to export.
974
991
  * @returns The changes in the given id span.
975
992
  */