json-patch-to-crdt 0.5.0 → 1.0.0

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.
@@ -118,13 +118,36 @@ interface LegacySerializedState {
118
118
  /** JSON-serializable form of a full CRDT state (document + clock). */
119
119
  type SerializedState = SerializedStateV1 | LegacySerializedState;
120
120
  /** Typed reasons for rejecting malformed serialized CRDT payloads. */
121
- type DeserializeErrorReason = "INVALID_SERIALIZED_SHAPE" | "INVALID_SERIALIZED_INVARIANT";
121
+ type DeserializeErrorReason = "INVALID_SERIALIZED_SHAPE" | "INVALID_SERIALIZED_INVARIANT" | "OPERATION_CANCELLED";
122
+ type ResourceBudgetKind = "patchOperations" | "objectEntries" | "sequenceElements" | "visitedNodes" | "serializedElements" | "arrayDiffCells";
123
+ interface ResourceBudget {
124
+ patchOperations?: number;
125
+ objectEntries?: number;
126
+ sequenceElements?: number;
127
+ visitedNodes?: number;
128
+ serializedElements?: number;
129
+ arrayDiffCells?: number;
130
+ }
131
+ interface ResourceBudgetExceededFailure {
132
+ code: 409;
133
+ reason: "RESOURCE_BUDGET_EXCEEDED";
134
+ message: string;
135
+ budget: ResourceBudgetKind;
136
+ limit: number;
137
+ actual: number;
138
+ path?: string;
139
+ opIndex?: number;
140
+ }
122
141
  /** Structured failure payload used by non-throwing deserialize helpers. */
123
142
  type DeserializeFailure = {
124
143
  code: 409;
125
144
  reason: DeserializeErrorReason;
126
145
  path: string;
127
146
  message: string;
147
+ } | ResourceBudgetExceededFailure | {
148
+ code: 409;
149
+ reason: "OPERATION_CANCELLED";
150
+ message: string;
128
151
  } | {
129
152
  code: 409;
130
153
  reason: "MAX_DEPTH_EXCEEDED";
@@ -231,6 +254,7 @@ type ApplyPatchAsActorOptions = {
231
254
  semantics?: PatchSemantics;
232
255
  strictParents?: boolean;
233
256
  jsonValidation?: JsonValidationMode;
257
+ signal?: AbortSignalLike;
234
258
  };
235
259
  /** Non-throwing result for internals-only `tryApplyPatchAsActor`. */
236
260
  type TryApplyPatchAsActorResult = ({
@@ -240,7 +264,12 @@ type TryApplyPatchAsActorResult = ({
240
264
  error: ApplyError;
241
265
  };
242
266
  /** Typed failure reason used across patch/merge helpers. */
243
- type PatchErrorReason = "INVALID_PATCH" | "INVALID_POINTER" | "MISSING_PARENT" | "MISSING_TARGET" | "INVALID_TARGET" | "OUT_OF_BOUNDS" | "TEST_FAILED" | "INVALID_MOVE" | "DOT_GENERATION_EXHAUSTED" | "MAX_DEPTH_EXCEEDED" | "LINEAGE_MISMATCH";
267
+ type PatchErrorReason = "INVALID_PATCH" | "INVALID_POINTER" | "MISSING_PARENT" | "MISSING_TARGET" | "INVALID_TARGET" | "OUT_OF_BOUNDS" | "TEST_FAILED" | "INVALID_MOVE" | "DOT_GENERATION_EXHAUSTED" | "MAX_DEPTH_EXCEEDED" | "RESOURCE_BUDGET_EXCEEDED" | "LINEAGE_MISMATCH" | "OPERATION_CANCELLED";
268
+ /** Minimal structural signal accepted by cancellable APIs. Compatible with AbortSignal. */
269
+ interface AbortSignalLike {
270
+ readonly aborted: boolean;
271
+ readonly reason?: unknown;
272
+ }
244
273
  /** Structured conflict payload used by non-throwing APIs. */
245
274
  type ApplyError = {
246
275
  ok: false; /** HTTP-friendly status code for conflict-style failures. */
@@ -248,7 +277,10 @@ type ApplyError = {
248
277
  reason: PatchErrorReason; /** Human-readable description of the failure. */
249
278
  message: string; /** Optional pointer/path context when available. */
250
279
  path?: string; /** Optional patch operation index when available. */
251
- opIndex?: number;
280
+ opIndex?: number; /** Resource-budget context when `reason` is `RESOURCE_BUDGET_EXCEEDED`. */
281
+ budget?: ResourceBudgetKind;
282
+ limit?: number;
283
+ actual?: number;
252
284
  };
253
285
  /** Result of applying a patch: success or structured conflict details. */
254
286
  type ApplyResult = {
@@ -270,11 +302,26 @@ type TryDeserializeStateResult = {
270
302
  ok: false;
271
303
  error: DeserializeFailure;
272
304
  };
305
+ /** Non-throwing validation-only result for serialized docs. */
306
+ type ValidateSerializedDocResult = {
307
+ ok: true;
308
+ } | {
309
+ ok: false;
310
+ error: DeserializeFailure;
311
+ };
312
+ /** Non-throwing validation-only result for serialized states. */
313
+ type ValidateSerializedStateResult = {
314
+ ok: true;
315
+ } | {
316
+ ok: false;
317
+ error: DeserializeFailure;
318
+ };
273
319
  /** How JSON Patch operations are interpreted during application. */
274
320
  type PatchSemantics = "base" | "sequential";
275
321
  /** Options for compile/validation helpers. */
276
322
  type CompilePatchOptions = {
277
323
  semantics?: PatchSemantics;
324
+ resourceBudget?: ResourceBudget;
278
325
  };
279
326
  /**
280
327
  * Options for immutable patch application (`applyPatch` / `tryApplyPatch`).
@@ -286,10 +333,13 @@ type ApplyPatchOptions = {
286
333
  base?: CrdtState;
287
334
  testAgainst?: "head" | "base";
288
335
  semantics?: PatchSemantics;
336
+ resourceBudget?: ResourceBudget;
289
337
  /**
290
338
  * Reject array inserts when the base parent path is missing.
291
- * Defaults to `false` to preserve legacy behavior that can auto-create
292
- * missing arrays for index `0` / append intents.
339
+ * Defaults to `true` for RFC 6902-compatible parent semantics.
340
+ * Use `withStrictRfc6902Parents(...)` for RFC 6902-compatible missing-parent
341
+ * behavior. Explicitly setting `false` preserves the legacy behavior that can
342
+ * auto-create missing arrays for index `0` / append intents.
293
343
  */
294
344
  strictParents?: boolean;
295
345
  /**
@@ -297,6 +347,7 @@ type ApplyPatchOptions = {
297
347
  * Defaults to `"none"` for backward compatibility.
298
348
  */
299
349
  jsonValidation?: JsonValidationMode;
350
+ signal?: AbortSignalLike;
300
351
  };
301
352
  /** Options for in-place patch application (`applyPatchInPlace` / `tryApplyPatchInPlace`). */
302
353
  type ApplyPatchInPlaceOptions = ApplyPatchOptions & {
@@ -353,6 +404,8 @@ type MergeStateOptions = {
353
404
  * Ignored when `unrelatedArrays` is also provided.
354
405
  */
355
406
  requireSharedOrigin?: boolean;
407
+ resourceBudget?: ResourceBudget;
408
+ signal?: AbortSignalLike;
356
409
  };
357
410
  /** Options for `mergeDoc`. */
358
411
  type MergeDocOptions = {
@@ -368,7 +421,13 @@ type MergeDocOptions = {
368
421
  * Ignored when `unrelatedArrays` is also provided.
369
422
  */
370
423
  requireSharedOrigin?: boolean;
424
+ resourceBudget?: ResourceBudget;
425
+ signal?: AbortSignalLike;
371
426
  };
427
+ interface DeserializeOptions {
428
+ resourceBudget?: ResourceBudget;
429
+ signal?: AbortSignalLike;
430
+ }
372
431
  /** Non-throwing result for `mergeDoc`. */
373
432
  type TryMergeDocResult = {
374
433
  ok: true;
@@ -423,6 +482,7 @@ type JsonPatchToCrdtOptions = {
423
482
  bumpCounterAbove?: (ctr: number) => void;
424
483
  semantics?: PatchSemantics;
425
484
  strictParents?: boolean;
485
+ resourceBudget?: ResourceBudget;
426
486
  };
427
487
  /** Options for `crdtToJsonPatch` and `diffJsonPatch`. */
428
488
  type DiffOptions = {
@@ -430,8 +490,8 @@ type DiffOptions = {
430
490
  * Array diff mode.
431
491
  * - `"lcs"` (default): index-level edits using LCS.
432
492
  * - `"lcs-linear"`: index-level edits using a lower-memory LCS variant.
433
- * This reduces memory use but still has `O(n * m)` time complexity and no
434
- * automatic fallback for very large unmatched windows.
493
+ * This reduces memory use but still has `O(n * m)` time complexity. Large
494
+ * unmatched windows fall back to atomic replacement by default.
435
495
  * - `"atomic"`: one-op root/field replacement for changed arrays.
436
496
  */
437
497
  arrayStrategy?: "atomic" | "lcs" | "lcs-linear";
@@ -444,16 +504,16 @@ type DiffOptions = {
444
504
  */
445
505
  lcsMaxCells?: number;
446
506
  /**
447
- * Optional guardrail for `arrayStrategy: "lcs-linear"`.
507
+ * Guardrail for `arrayStrategy: "lcs-linear"`.
448
508
  * Uses the trimmed unmatched window size
449
509
  * (`(unmatchedBase.length + 1) * (unmatchedNext.length + 1)`) as a proxy for
450
510
  * worst-case work. When the cap is exceeded, the diff falls back to an atomic
451
511
  * array replacement instead of running the linear-space traversal.
452
512
  *
453
- * Unlike `lcsMaxCells`, this is opt-in and defaults to no fallback so
454
- * existing `lcs-linear` callers keep their current behavior.
513
+ * Defaults to `250_000`.
455
514
  *
456
- * Set to `Number.POSITIVE_INFINITY` to always allow `lcs-linear`.
515
+ * Set to `Number.POSITIVE_INFINITY` to always allow `lcs-linear` and preserve
516
+ * the previous unbounded behavior.
457
517
  */
458
518
  lcsLinearMaxCells?: number;
459
519
  /**
@@ -471,6 +531,8 @@ type DiffOptions = {
471
531
  * Defaults to `"none"` for backward compatibility.
472
532
  */
473
533
  jsonValidation?: JsonValidationMode;
534
+ resourceBudget?: ResourceBudget;
535
+ signal?: AbortSignalLike;
474
536
  };
475
537
  /**
476
538
  * Internal sentinel key used in `IntentOp` to represent root-level operations.
@@ -478,11 +540,34 @@ type DiffOptions = {
478
540
  */
479
541
  declare const ROOT_KEY = "@@crdt/root";
480
542
  //#endregion
543
+ //#region src/safe.d.ts
544
+ interface SafeCreateStateOptions extends Omit<CreateStateOptions, "jsonValidation"> {}
545
+ interface SafeApplyPatchOptions extends Omit<ApplyPatchOptions, "jsonValidation"> {}
546
+ interface SafeDiffOptions extends Omit<DiffOptions, "jsonValidation"> {}
547
+ interface NormalizedCreateStateOptions extends Omit<CreateStateOptions, "jsonValidation"> {}
548
+ interface NormalizedApplyPatchOptions extends Omit<ApplyPatchOptions, "jsonValidation"> {}
549
+ interface NormalizedDiffOptions extends Omit<DiffOptions, "jsonValidation"> {}
550
+ /** Create a state with strict runtime JSON validation enabled by default. */
551
+ declare function createSafeState(initial: JsonValue, options: SafeCreateStateOptions): CrdtState;
552
+ /** Apply a patch with strict runtime JSON validation enabled by default. */
553
+ declare function applySafePatch(state: CrdtState, patch: JsonPatchOp[], options?: SafeApplyPatchOptions): CrdtState;
554
+ /** Diff JSON values with strict runtime JSON validation enabled by default. */
555
+ declare function diffSafeJsonPatch(base: JsonValue, next: JsonValue, options?: SafeDiffOptions): JsonPatchOp[];
556
+ /** Create a state with normalizing runtime JSON validation enabled by default. */
557
+ declare function createNormalizedState(initial: JsonValue, options: NormalizedCreateStateOptions): CrdtState;
558
+ /** Apply a patch with normalizing runtime JSON validation enabled by default. */
559
+ declare function applyNormalizedPatch(state: CrdtState, patch: JsonPatchOp[], options?: NormalizedApplyPatchOptions): CrdtState;
560
+ /** Diff JSON values with normalizing runtime JSON validation enabled by default. */
561
+ declare function diffNormalizedJsonPatch(base: JsonValue, next: JsonValue, options?: NormalizedDiffOptions): JsonPatchOp[];
562
+ //#endregion
481
563
  //#region src/state.d.ts
482
564
  /** Error thrown when a JSON Patch cannot be applied. Includes structured conflict metadata. */
483
565
  declare class PatchError extends Error {
484
566
  readonly code: 409;
485
567
  readonly reason: PatchErrorReason;
568
+ readonly budget?: ResourceBudgetKind;
569
+ readonly limit?: number;
570
+ readonly actual?: number;
486
571
  readonly path?: string;
487
572
  readonly opIndex?: number;
488
573
  constructor(error: ApplyError);
@@ -574,6 +659,24 @@ declare function nextDotForActor(vv: VersionVector, actor: ActorId): Dot;
574
659
  /** Record an observed dot in a version vector. */
575
660
  declare function observeDot(vv: VersionVector, dot: Dot): void;
576
661
  //#endregion
662
+ //#region src/budget.d.ts
663
+ declare class ResourceBudgetError extends Error {
664
+ readonly reason: "RESOURCE_BUDGET_EXCEEDED";
665
+ readonly code: 409;
666
+ readonly budget: ResourceBudgetKind;
667
+ readonly limit: number;
668
+ readonly actual: number;
669
+ readonly path?: string;
670
+ readonly opIndex?: number;
671
+ constructor(budget: ResourceBudgetKind, limit: number, actual: number, path?: string, opIndex?: number);
672
+ }
673
+ //#endregion
674
+ //#region src/cancellation.d.ts
675
+ declare class OperationCancelledError extends Error {
676
+ readonly reasonValue?: unknown;
677
+ constructor(reason?: unknown);
678
+ }
679
+ //#endregion
577
680
  //#region src/patch.d.ts
578
681
  /** Structured compile error used to map patch validation failures to typed reasons. */
579
682
  declare class PatchCompileError extends Error {
@@ -609,7 +712,7 @@ declare function compileJsonPatchToIntent(baseJson: JsonValue, patch: JsonPatchO
609
712
  * By default arrays use a deterministic LCS strategy.
610
713
  * Pass `{ arrayStrategy: "atomic" }` for single-op array replacement.
611
714
  * Pass `{ arrayStrategy: "lcs-linear" }` for a lower-memory LCS variant.
612
- * Use `lcsLinearMaxCells` to optionally cap worst-case `lcs-linear` work and
715
+ * Use `lcsLinearMaxCells` to cap worst-case `lcs-linear` work and
613
716
  * fall back to an atomic array replacement for very large unmatched windows.
614
717
  * Pass `{ emitMoves: true }` or `{ emitCopies: true }` to opt into RFC 6902
615
718
  * move/copy emission when a deterministic rewrite is available.
@@ -624,6 +727,34 @@ declare function stableJsonValueKey(value: JsonValue, structuralKeyCache?: WeakM
624
727
  /** Deep equality check for JSON values (null-safe, handles arrays and objects). */
625
728
  declare function jsonEquals(a: JsonValue, b: JsonValue): boolean;
626
729
  //#endregion
730
+ //#region src/options.d.ts
731
+ /** Options that reject legacy missing-parent array auto-creation. */
732
+ declare const strictRfc6902PatchOptions: {
733
+ readonly strictParents: true;
734
+ };
735
+ /**
736
+ * Build `applyPatch` options for strict RFC 6902 parent semantics.
737
+ *
738
+ * Use this when patches come from an RFC 6902 boundary and missing array
739
+ * parents should fail instead of being materialized.
740
+ */
741
+ declare function withStrictRfc6902Parents(): typeof strictRfc6902PatchOptions;
742
+ declare function withStrictRfc6902Parents<T extends ApplyPatchOptions>(options: T): T & typeof strictRfc6902PatchOptions;
743
+ /**
744
+ * Build `applyPatch` options for the legacy missing-parent array behavior.
745
+ *
746
+ * @deprecated Missing-parent array auto-creation is not RFC 6902 compatible.
747
+ * Prefer `withStrictRfc6902Parents(...)` unless you are preserving legacy data
748
+ * flows that intentionally materialize missing arrays for `/path/0` or
749
+ * `/path/-` inserts.
750
+ */
751
+ declare function withLegacyMissingArrayParents(): {
752
+ strictParents: false;
753
+ };
754
+ declare function withLegacyMissingArrayParents<T extends ApplyPatchOptions>(options: T): T & {
755
+ strictParents: false;
756
+ };
757
+ //#endregion
627
758
  //#region src/serialize.d.ts
628
759
  declare class DeserializeError extends Error {
629
760
  readonly code: 409;
@@ -634,9 +765,11 @@ declare class DeserializeError extends Error {
634
765
  /** Serialize a CRDT document to a JSON-safe representation (Maps become plain objects). */
635
766
  declare function serializeDoc(doc: Doc): SerializedDoc;
636
767
  /** Reconstruct a CRDT document from its serialized form. */
637
- declare function deserializeDoc(data: SerializedDoc): Doc;
768
+ declare function deserializeDoc(data: SerializedDoc, options?: DeserializeOptions): Doc;
638
769
  /** Non-throwing `deserializeDoc` variant with typed validation details. */
639
- declare function tryDeserializeDoc(data: SerializedDoc): TryDeserializeDocResult;
770
+ declare function tryDeserializeDoc(data: SerializedDoc, options?: DeserializeOptions): TryDeserializeDocResult;
771
+ /** Validate a serialized CRDT document without throwing or returning runtime state. */
772
+ declare function validateSerializedDoc(data: SerializedDoc, options?: DeserializeOptions): ValidateSerializedDocResult;
640
773
  /** Serialize a full CRDT state (document + clock) to a JSON-safe representation. */
641
774
  declare function serializeState(state: CrdtState): SerializedState;
642
775
  /**
@@ -645,15 +778,20 @@ declare function serializeState(state: CrdtState): SerializedState;
645
778
  * May throw `TraversalDepthError` when the payload exceeds the maximum
646
779
  * supported nesting depth.
647
780
  */
648
- declare function deserializeState(data: SerializedState): CrdtState;
781
+ declare function deserializeState(data: SerializedState, options?: DeserializeOptions): CrdtState;
649
782
  /** Non-throwing `deserializeState` variant with typed validation details. */
650
- declare function tryDeserializeState(data: SerializedState): TryDeserializeStateResult;
783
+ declare function tryDeserializeState(data: SerializedState, options?: DeserializeOptions): TryDeserializeStateResult;
784
+ /** Validate a serialized CRDT state without throwing or returning runtime state. */
785
+ declare function validateSerializedState(data: SerializedState, options?: DeserializeOptions): ValidateSerializedStateResult;
651
786
  //#endregion
652
787
  //#region src/merge.d.ts
653
788
  /** Error thrown by throwing merge helpers (`mergeDoc` / `mergeState`). */
654
789
  declare class MergeError extends Error {
655
790
  readonly code: 409;
656
791
  readonly reason: PatchErrorReason;
792
+ readonly budget?: ResourceBudgetKind;
793
+ readonly limit?: number;
794
+ readonly actual?: number;
657
795
  readonly path?: string;
658
796
  constructor(error: ApplyError);
659
797
  }
@@ -742,4 +880,4 @@ declare class TraversalDepthError extends Error {
742
880
  constructor(depth: number, maxDepth?: number);
743
881
  }
744
882
  //#endregion
745
- export { Clock as $, cloneClock as A, SerializedClock as At, forkState as B, TryDeserializeDocResult as Bt, diffJsonPatch as C, ObjEntry as Ct, stableJsonValueKey as D, ROOT_KEY as Dt, parseJsonPointer as E, PatchSemantics as Et, PatchError as F, TombstoneCompactionOptions as Ft, validateJsonPatch as G, ValidatePatchResult as Gt, tryApplyPatch as H, TryMergeDocResult as Ht, applyPatch as I, TombstoneCompactionStats as It, ApplyPatchAsActorOptions as J, ActorId as K, VersionVector as Kt, applyPatchAsActor as L, TryApplyPatchAsActorResult as Lt, nextDotForActor as M, SerializedNode as Mt, observeDot as N, SerializedRgaElem as Nt, stringifyJsonPointer as O, RgaElem as Ot, JsonValueValidationError as P, SerializedState as Pt, ApplyResult as Q, applyPatchInPlace as R, TryApplyPatchInPlaceResult as Rt, compileJsonPatchToIntent as S, Node as St, jsonEquals as T, PatchErrorReason as Tt, tryApplyPatchAsActor as U, TryMergeStateResult as Ut, toJson as V, TryDeserializeStateResult as Vt, tryApplyPatchInPlace as W, UnrelatedArraysStrategy as Wt, ApplyPatchInPlaceOptions as X, ApplyPatchAsActorResult as Y, ApplyPatchOptions as Z, serializeDoc as _, JsonValidationMode as _t, intersectVersionVectors as a, DeserializeErrorReason as at, tryDeserializeState as b, MergeDocOptions as bt, versionVectorCovers as c, Doc as ct, mergeState as d, ForkStateOptions as dt, CompactDocTombstonesResult as et, tryMergeDoc as f, IntentOp as ft, deserializeState as g, JsonPrimitive as gt, deserializeDoc as h, JsonPatchToCrdtOptions as ht, compactStateTombstones as i, CreateStateOptions as it, createClock as j, SerializedDoc as jt, ClockValidationError as k, RgaSeq as kt, MergeError as l, Dot as lt, DeserializeError as m, JsonPatchOp as mt, TraversalDepthError as n, CompilePatchOptions as nt, mergeVersionVectors as o, DeserializeFailure as ot, tryMergeState as p, JsonPatch as pt, ApplyError as q, compactDocTombstones as r, CrdtState as rt, observedVersionVector as s, DiffOptions as st, MAX_TRAVERSAL_DEPTH as t, CompactStateTombstonesResult as tt, mergeDoc as u, ElemId as ut, serializeState as v, JsonValue as vt, getAtJson as w, ObjNode as wt, PatchCompileError as x, MergeStateOptions as xt, tryDeserializeDoc as y, LwwReg as yt, createState as z, TryApplyPatchResult as zt };
883
+ export { NormalizedApplyPatchOptions as $, RgaSeq as $t, jsonEquals as A, Dot as At, observeDot as B, LwwReg as Bt, strictRfc6902PatchOptions as C, CrdtState as Ct, compileJsonPatchToIntent as D, DeserializeOptions as Dt, PatchCompileError as E, DeserializeFailure as Et, ResourceBudgetError as F, JsonPatchOp as Ft, applyPatchInPlace as G, ObjNode as Gt, PatchError as H, MergeStateOptions as Ht, ClockValidationError as I, JsonPatchToCrdtOptions as It, toJson as J, ROOT_KEY as Jt, createState as K, PatchErrorReason as Kt, cloneClock as L, JsonPrimitive as Lt, stableJsonValueKey as M, ForkStateOptions as Mt, stringifyJsonPointer as N, IntentOp as Nt, diffJsonPatch as O, DiffOptions as Ot, OperationCancelledError as P, JsonPatch as Pt, validateJsonPatch as Q, RgaElem as Qt, createClock as R, JsonValidationMode as Rt, validateSerializedState as S, CompilePatchOptions as St, withStrictRfc6902Parents as T, DeserializeErrorReason as Tt, applyPatch as U, Node as Ut, JsonValueValidationError as V, MergeDocOptions as Vt, applyPatchAsActor as W, ObjEntry as Wt, tryApplyPatchAsActor as X, ResourceBudgetExceededFailure as Xt, tryApplyPatch as Y, ResourceBudget as Yt, tryApplyPatchInPlace as Z, ResourceBudgetKind as Zt, serializeDoc as _, ValidateSerializedStateResult as _n, ApplyPatchOptions as _t, intersectVersionVectors as a, TombstoneCompactionOptions as an, applyNormalizedPatch as at, tryDeserializeState as b, CompactDocTombstonesResult as bt, versionVectorCovers as c, TryApplyPatchInPlaceResult as cn, createSafeState as ct, mergeState as d, TryDeserializeStateResult as dn, AbortSignalLike as dt, SerializedClock as en, NormalizedCreateStateOptions as et, tryMergeDoc as f, TryMergeDocResult as fn, ActorId as ft, deserializeState as g, ValidateSerializedDocResult as gn, ApplyPatchInPlaceOptions as gt, deserializeDoc as h, ValidatePatchResult as hn, ApplyPatchAsActorResult as ht, compactStateTombstones as i, SerializedState as in, SafeDiffOptions as it, parseJsonPointer as j, ElemId as jt, getAtJson as k, Doc as kt, MergeError as l, TryApplyPatchResult as ln, diffNormalizedJsonPatch as lt, DeserializeError as m, UnrelatedArraysStrategy as mn, ApplyPatchAsActorOptions as mt, TraversalDepthError as n, SerializedNode as nn, SafeApplyPatchOptions as nt, mergeVersionVectors as o, TombstoneCompactionStats as on, applySafePatch as ot, tryMergeState as p, TryMergeStateResult as pn, ApplyError as pt, forkState as q, PatchSemantics as qt, compactDocTombstones as r, SerializedRgaElem as rn, SafeCreateStateOptions as rt, observedVersionVector as s, TryApplyPatchAsActorResult as sn, createNormalizedState as st, MAX_TRAVERSAL_DEPTH as t, SerializedDoc as tn, NormalizedDiffOptions as tt, mergeDoc as u, TryDeserializeDocResult as un, diffSafeJsonPatch as ut, serializeState as v, VersionVector as vn, ApplyResult as vt, withLegacyMissingArrayParents as w, CreateStateOptions as wt, validateSerializedDoc as x, CompactStateTombstonesResult as xt, tryDeserializeDoc as y, Clock as yt, nextDotForActor as z, JsonValue as zt };