lib0 1.0.0-rc.14 → 1.0.0-rc.15

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.
@@ -3,104 +3,67 @@
3
3
  * @typedef {import('../schema.js').Schema<T>} Schema
4
4
  */
5
5
  /**
6
- * @template {delta.AbstractDelta} DeltaA
7
- * @template {delta.AbstractDelta} DeltaB
6
+ * Abstract interface for a delta-based Replicated Data Type.
7
+ *
8
+ * An RDT is an observable that emits a `'delta'` (and, on teardown, a `'destroy'`) event, exposes the
9
+ * {@link Schema schema} of the deltas it produces via `$schema` (so a {@link Binding} can initialize a
10
+ * transformer for it), and accepts foreign deltas via `applyDelta`.
11
+ *
12
+ * @template {delta.DeltaAny} D
13
+ * @typedef {ObservableV2<{ delta: (delta: D) => void, destroy: (rdt: RDT<D>) => void }> & {
14
+ * $schema: Schema<D>,
15
+ * applyDelta: (delta: D) => void,
16
+ * destroy: () => void
17
+ * }} RDT
8
18
  */
9
- export class Binding<DeltaA extends delta.AbstractDelta, DeltaB extends delta.AbstractDelta> {
19
+ /**
20
+ * Connects two RDTs so that changes on either side are transformed and reflected on the other.
21
+ *
22
+ * @template {delta.DeltaAny} DeltaA
23
+ */
24
+ export class Binding<DeltaA extends delta.DeltaAny> {
10
25
  /**
11
26
  * @param {RDT<DeltaA>} a
12
- * @param {RDT<DeltaB>} b
13
- * @param {dt.Template<any,DeltaA,DeltaB>} template
27
+ * @param {RDT<delta.DeltaAny>} b
28
+ * @param {dt.Template} [template] defaults to the {@link dt.id identity} transformer
29
+ */
30
+ constructor(a: RDT<DeltaA>, b: RDT<delta.DeltaAny>, template?: dt.Template);
31
+ /**
32
+ * @type {dt.Transformer<any,any>}
14
33
  */
15
- constructor(a: RDT<DeltaA>, b: RDT<DeltaB>, template: dt.Template<any, DeltaA, DeltaB>);
34
+ t: dt.Transformer<any, any>;
16
35
  /**
17
- * @type {dt.Transformer<any,DeltaA,DeltaB>}
36
+ * @type {RDT<any>}
18
37
  */
19
- t: dt.Transformer<any, DeltaA, DeltaB>;
20
- a: RDT<DeltaA>;
21
- b: RDT<DeltaB>;
38
+ a: RDT<any>;
39
+ /**
40
+ * @type {RDT<any>}
41
+ */
42
+ b: RDT<any>;
22
43
  _mux: mux.mutex;
23
- _achanged: (delta: DeltaA) => void;
24
- _bchanged: (delta: DeltaB) => void;
44
+ _achanged: (delta: any) => void;
45
+ _bchanged: (delta: any) => void;
25
46
  destroy: () => void;
26
47
  }
27
- export function bind<DeltaA extends delta.AbstractDelta, Transformer extends dt.Template<any, DeltaA, any>>(a: RDT<DeltaA>, b: RDT<Transformer extends dt.Template<any, DeltaA, infer DeltaB> ? DeltaB : never>, template: dt.Template<any, DeltaA, any>): Binding<DeltaA, Transformer extends dt.Template<any, DeltaA, infer DeltaB> ? DeltaB : never>;
28
- export function deltaRDT<Delta extends delta.AbstractDelta>($delta: Schema<Delta>): DeltaRDT<Delta>;
29
- export const $domDelta: any;
30
- export function domRDT(dom: Element): DomRDT<delta.RecursiveNode<string, {
31
- [key: string]: string;
32
- }, never, true>>;
48
+ export function bind<DeltaA extends delta.DeltaAny>(a: RDT<DeltaA>, b: RDT<delta.DeltaAny>, template?: dt.Template): Binding<DeltaA>;
33
49
  export type Schema<T> = import("../schema.js").Schema<T>;
34
50
  /**
35
- * Abstract Interface for a delta-based Replicated Data Type.
51
+ * Abstract interface for a delta-based Replicated Data Type.
52
+ *
53
+ * An RDT is an observable that emits a `'delta'` (and, on teardown, a `'destroy'`) event, exposes the
54
+ * {@link Schema schema} of the deltas it produces via `$schema` (so a {@link Binding} can initialize a
55
+ * transformer for it), and accepts foreign deltas via `applyDelta`.
36
56
  */
37
- export type RDT<Delta extends delta.AbstractDelta> = ObservableV2<{
38
- "change": (delta: Delta) => void;
39
- "destroy": (rdt: RDT<Delta>) => void;
57
+ export type RDT<D extends delta.DeltaAny> = ObservableV2<{
58
+ delta: (delta: D) => void;
59
+ destroy: (rdt: RDT<D>) => void;
40
60
  }> & {
41
- update: (delta: Delta) => any;
61
+ $schema: Schema<D>;
62
+ applyDelta: (delta: D) => void;
42
63
  destroy: () => void;
43
64
  };
44
- export type DomDelta = delta.RecursiveNode<string, {
45
- [key: string]: string;
46
- }, never, true>;
47
65
  import * as delta from './delta.js';
66
+ import * as dt from './transformer.js';
48
67
  import * as mux from '../mutex.js';
49
- /**
50
- * @template {delta.AbstractDelta} Delta
51
- * @implements RDT<Delta>
52
- * @extends {ObservableV2<{ change: (delta: Delta) => void, 'destroy': (rdt:DeltaRDT<Delta>)=>void }>}
53
- */
54
- declare class DeltaRDT<Delta extends delta.AbstractDelta> extends ObservableV2<{
55
- change: (delta: Delta) => void;
56
- destroy: (rdt: DeltaRDT<Delta>) => void;
57
- }> implements RDT<Delta> {
58
- /**
59
- * @param {Schema<Delta>} $delta
60
- */
61
- constructor($delta: Schema<Delta>);
62
- $delta: s.Schema<Delta>;
63
- /**
64
- * @type {Delta?}
65
- */
66
- state: Delta | null;
67
- _mux: mux.mutex;
68
- /**
69
- * @param {Delta} delta
70
- */
71
- update: (delta: Delta) => any;
72
- }
73
- /**
74
- * @typedef {delta.RecursiveNode<string, { [key:string]: string }, never, true>} DomDelta
75
- */
76
- /**
77
- * @template {DomDelta} [D=DomDelta]
78
- * @implements RDT<D>
79
- * @extends {ObservableV2<{ change: (delta: D)=>void, destroy: (rdt:DomRDT<D>)=>void }>}>}
80
- */
81
- declare class DomRDT<D extends DomDelta = delta.RecursiveNode<string, {
82
- [key: string]: string;
83
- }, never, true>> extends ObservableV2<{
84
- change: (delta: D) => void;
85
- destroy: (rdt: DomRDT<D>) => void;
86
- }> implements RDT<D> {
87
- /**
88
- * @param {Element} observedNode
89
- */
90
- constructor(observedNode: Element);
91
- observedNode: Element;
92
- _mux: mux.mutex;
93
- observer: MutationObserver;
94
- /**
95
- * @param {MutationRecord[]} mutations
96
- */
97
- _mutationHandler: (mutations: MutationRecord[]) => any;
98
- /**
99
- * @param {D} delta
100
- */
101
- update: (delta: D) => void;
102
- }
103
68
  import { ObservableV2 } from '../observable.js';
104
- import * as s from '../schema.js';
105
- export {};
106
69
  //# sourceMappingURL=binding.d.ts.map
@@ -818,8 +818,7 @@ export function create<Schema extends s.Schema<DeltaAny>>(schema: Schema): Schem
818
818
  * @param {NodeName} nodeName
819
819
  * @param {Attrs} attrs
820
820
  * @param {Children} [children]
821
- * @return {DeltaBuilder<{
822
- * name: NodeName,
821
+ * @return {DeltaBuilder<(NodeName extends string ? { name: NodeName } : {}) & {
823
822
  * attrs: Attrs extends null ? {} : Attrs,
824
823
  * children: Extract<Children,Array<any>> extends Array<infer Ac> ? (unknown extends Ac ? never : Ac) : never,
825
824
  * text: Extract<Children,string> extends never ? false : true
@@ -827,8 +826,9 @@ export function create<Schema extends s.Schema<DeltaAny>>(schema: Schema): Schem
827
826
  */
828
827
  export function create<NodeName extends string | null, Attrs extends {
829
828
  [k: string | number]: any;
830
- } | null, Children extends Array<any> | string = never>(nodeName: NodeName, attrs: Attrs, children?: Children | undefined): DeltaBuilder<{
829
+ } | null, Children extends Array<any> | string = never>(nodeName: NodeName, attrs: Attrs, children?: Children | undefined): DeltaBuilder<(NodeName extends string ? {
831
830
  name: NodeName;
831
+ } : {}) & {
832
832
  attrs: Attrs extends null ? {} : Attrs;
833
833
  children: Extract<Children, Array<any>> extends Array<infer Ac> ? (unknown extends Ac ? never : Ac) : never;
834
834
  text: Extract<Children, string> extends never ? false : true;
@@ -839,14 +839,14 @@ export function create<NodeName extends string | null, Attrs extends {
839
839
  * @overload
840
840
  * @param {NodeName} nodeName
841
841
  * @param {...Array<Children>} children
842
- * @return {DeltaBuilder<{
843
- * name: NodeName,
842
+ * @return {DeltaBuilder<(NodeName extends string ? { name: NodeName } : {}) & {
844
843
  * children: Extract<Children,Array<any>> extends Array<infer Ac> ? (unknown extends Ac ? never : Ac) : never,
845
844
  * text: Extract<Children,string> extends never ? false : true
846
845
  * }>}
847
846
  */
848
- export function from<NodeName extends string | null, Children extends Array<any> | string = never>(nodeName: NodeName, ...children: Array<Children>[]): DeltaBuilder<{
847
+ export function from<NodeName extends string | null, Children extends Array<any> | string = never>(nodeName: NodeName, ...children: Array<Children>[]): DeltaBuilder<(NodeName extends string ? {
849
848
  name: NodeName;
849
+ } : {}) & {
850
850
  children: Extract<Children, Array<any>> extends Array<infer Ac> ? (unknown extends Ac ? never : Ac) : never;
851
851
  text: Extract<Children, string> extends never ? false : true;
852
852
  }>;
@@ -890,8 +890,7 @@ export function from<Attrs extends {
890
890
  * @param {NodeName} nodeName
891
891
  * @param {Attrs} attrs
892
892
  * @param {...Array<Children>} children
893
- * @return {DeltaBuilder<{
894
- * name: NodeName,
893
+ * @return {DeltaBuilder<(NodeName extends string ? { name: NodeName } : {}) & {
895
894
  * attrs: Attrs extends null ? {} : Attrs,
896
895
  * children: Extract<Children,Array<any>> extends Array<infer Ac> ? (unknown extends Ac ? never : Ac) : never,
897
896
  * text: Extract<Children,string> extends never ? false : true
@@ -899,13 +898,14 @@ export function from<Attrs extends {
899
898
  */
900
899
  export function from<NodeName extends string | null, Attrs extends {
901
900
  [k: string | number]: any;
902
- } | null, Children extends Array<any> | string = never>(nodeName: NodeName, attrs: Attrs, ...children: Array<Children>[]): DeltaBuilder<{
901
+ } | null, Children extends Array<any> | string = never>(nodeName: NodeName, attrs: Attrs, ...children: Array<Children>[]): DeltaBuilder<(NodeName extends string ? {
903
902
  name: NodeName;
903
+ } : {}) & {
904
904
  attrs: Attrs extends null ? {} : Attrs;
905
905
  children: Extract<Children, Array<any>> extends Array<infer Ac> ? (unknown extends Ac ? never : Ac) : never;
906
906
  text: Extract<Children, string> extends never ? false : true;
907
907
  }>;
908
- export function diff<Conf_1 extends DeltaConf>(d1: Delta<Conf_1>, d2: NoInfer<Delta<Conf_1>>): Delta<Conf_1>;
908
+ export function diff<Conf_1 extends DeltaConf>(d1: Delta<Conf_1>, d2: NoInfer<Delta<Conf_1>>, options?: DiffOptions): Delta<Conf_1>;
909
909
  export function diffChangesetWithSeparator(changeset: Array<{
910
910
  index: number;
911
911
  remove: Array<any>;
@@ -979,6 +979,13 @@ export type DeltaConf = {
979
979
  recursiveChildren?: boolean | undefined;
980
980
  recursiveAttrs?: boolean | undefined;
981
981
  };
982
+ /**
983
+ * Coerce a computed conf to provably satisfy the `DeltaConf` constraint. Declaration emit re-checks
984
+ * type arguments eagerly, so a deeply-computed conf (mapped/recursive) passed to `Delta<…>` /
985
+ * `Transformer<…>` must be wrapped here: the conditional exposes `DeltaConf` as its upper bound,
986
+ * letting the constraint resolve without forcing TS to expand the (self-referential) body.
987
+ */
988
+ export type AsDeltaConf<T> = T extends infer DC extends DeltaConf ? DC : never;
982
989
  export type DeltaConfGetName<Conf_1 extends DeltaConf> = Conf_1 extends {
983
990
  name: infer Name;
984
991
  } ? (unknown extends Name ? any : (Exclude<Name, undefined>)) : any;
@@ -1034,7 +1041,7 @@ export type ReadDeltaConf<DConfSpec extends ReadableDeltaConf> = [DConfSpec exte
1034
1041
  attrs: infer A;
1035
1042
  } ? s.ReadSchemaUnwrapped<A> : {}, DConfSpec extends {
1036
1043
  children: infer C;
1037
- } ? s.ReadSchemaUnwrapped<C> : never] extends [infer NodeName_1, infer Attrs_1, infer Children_1] ? PrettifyDeltaConf<(import("../ts.js").TypeIsAny<NodeName_1, {}, {
1044
+ } ? s.ReadSchemaUnwrapped<C> : never] extends [infer NodeName_1, infer Attrs_1, infer Children_1] ? AsDeltaConf<PrettifyDeltaConf<(import("../ts.js").TypeIsAny<NodeName_1, {}, {
1038
1045
  name: NodeName_1;
1039
1046
  }> & ([keyof Attrs_1] extends [never] ? {} : {
1040
1047
  attrs: Attrs_1;
@@ -1048,7 +1055,15 @@ export type ReadDeltaConf<DConfSpec extends ReadableDeltaConf> = [DConfSpec exte
1048
1055
  recursiveChildren: true;
1049
1056
  } ? {
1050
1057
  recursiveChildren: true;
1051
- } : {})) extends infer DC extends DeltaConf ? DC : never> : never;
1058
+ } : {}))>> : never;
1059
+ export type DiffOptions = {
1060
+ /**
1061
+ * Predicate deciding when two nodes
1062
+ * are paired into a `modify` (vs. replaced wholesale). Defaults to comparing names
1063
+ * (`(d1, d2) => d1.name === d2.name`). Called as `compare(fromNode, toNode)`.
1064
+ */
1065
+ compare?: ((d1: DeltaAny, d2: DeltaAny) => boolean) | undefined;
1066
+ };
1052
1067
  import * as s from '../schema.js';
1053
1068
  import * as list from '../list.js';
1054
1069
  import * as equalityTrait from '../trait/equality.js';
@@ -1079,6 +1094,15 @@ import * as fingerprintTrait from '../trait/fingerprint.js';
1079
1094
  * @property {boolean} [DeltaConf.recursiveChildren=false]
1080
1095
  * @property {boolean} [DeltaConf.recursiveAttrs=false]
1081
1096
  */
1097
+ /**
1098
+ * Coerce a computed conf to provably satisfy the `DeltaConf` constraint. Declaration emit re-checks
1099
+ * type arguments eagerly, so a deeply-computed conf (mapped/recursive) passed to `Delta<…>` /
1100
+ * `Transformer<…>` must be wrapped here: the conditional exposes `DeltaConf` as its upper bound,
1101
+ * letting the constraint resolve without forcing TS to expand the (self-referential) body.
1102
+ *
1103
+ * @template T
1104
+ * @typedef {T extends infer DC extends DeltaConf ? DC : never} AsDeltaConf
1105
+ */
1082
1106
  /**
1083
1107
  * @template {DeltaConf} Conf
1084
1108
  * @typedef {Conf extends {name:infer Name} ? (unknown extends Name ? any : (Exclude<Name,undefined>)) : any} DeltaConfGetName
@@ -0,0 +1,45 @@
1
+ export function deltaRDT<D extends delta.DeltaAny>($schema: Schema<D>): DeltaRDT<D>;
2
+ export type Schema<T> = import("../../schema.js").Schema<T>;
3
+ export type RDT<D extends delta.DeltaAny> = import("../binding.js").RDT<D>;
4
+ import * as delta from '../delta.js';
5
+ /**
6
+ * @template T
7
+ * @typedef {import('../../schema.js').Schema<T>} Schema
8
+ */
9
+ /**
10
+ * @template {delta.DeltaAny} D
11
+ * @typedef {import('../binding.js').RDT<D>} RDT
12
+ */
13
+ /**
14
+ * An in-memory RDT whose state is the accumulated delta. Calling `applyDelta` merges the incoming delta
15
+ * into `state` (via {@link delta.DeltaBuilder#apply}) and re-emits it as a `'delta'`.
16
+ *
17
+ * @template {delta.DeltaAny} D
18
+ * @implements {RDT<D>}
19
+ * @extends {ObservableV2<{ delta: (delta: D) => void, destroy: (rdt: DeltaRDT<D>) => void }>}
20
+ */
21
+ declare class DeltaRDT<D extends delta.DeltaAny> extends ObservableV2<{
22
+ delta: (delta: D) => void;
23
+ destroy: (rdt: DeltaRDT<D>) => void;
24
+ }> implements RDT<D> {
25
+ /**
26
+ * @param {Schema<D>} $schema schema of the deltas this RDT produces
27
+ */
28
+ constructor($schema: Schema<D>);
29
+ $schema: import("../../schema.js").Schema<D>;
30
+ /**
31
+ * @type {delta.DeltaBuilderAny?}
32
+ */
33
+ state: delta.DeltaBuilderAny | null;
34
+ _mux: mux.mutex;
35
+ /**
36
+ * Merge an incoming delta into the current state and notify observers.
37
+ *
38
+ * @param {D} d
39
+ */
40
+ applyDelta(d: D): void;
41
+ }
42
+ import { ObservableV2 } from '../../observable.js';
43
+ import * as mux from '../../mutex.js';
44
+ export {};
45
+ //# sourceMappingURL=delta.d.ts.map
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Schema describing the deltas produced/consumed by a {@link DomRDT}: a recursive node with a string
3
+ * name, string→string attributes, and text content.
4
+ */
5
+ export const $domDelta: s.Schema<delta.Delta<{
6
+ name: string;
7
+ attrs: {
8
+ [x: string]: string;
9
+ };
10
+ text: true;
11
+ recursiveChildren: true;
12
+ }>>;
13
+ export function domRDT(dom: Element): DomRDT<DomDelta>;
14
+ export type Schema<T> = import("../../schema.js").Schema<T>;
15
+ export type RDT<D extends delta.DeltaAny> = import("../binding.js").RDT<D>;
16
+ export type DomDelta = delta.Delta<{
17
+ name: string;
18
+ attrs: {
19
+ [key: string]: string;
20
+ };
21
+ text: true;
22
+ recursiveChildren: true;
23
+ }>;
24
+ import * as delta from '../delta.js';
25
+ import * as s from '../../schema.js';
26
+ /**
27
+ * An RDT backed by a live DOM subtree. DOM mutations observed via `MutationObserver` are emitted as
28
+ * deltas; incoming deltas are applied back onto the DOM.
29
+ *
30
+ * @template {DomDelta} [D=DomDelta]
31
+ * @implements {RDT<D>}
32
+ * @extends {ObservableV2<{ delta: (delta: D) => void, destroy: (rdt: DomRDT<D>) => void }>}
33
+ */
34
+ declare class DomRDT<D extends DomDelta = DomDelta> extends ObservableV2<{
35
+ delta: (delta: D) => void;
36
+ destroy: (rdt: DomRDT<D>) => void;
37
+ }> implements RDT<D> {
38
+ /**
39
+ * @param {Element} observedNode
40
+ */
41
+ constructor(observedNode: Element);
42
+ /**
43
+ * @type {Schema<D>}
44
+ */
45
+ $schema: Schema<D>;
46
+ observedNode: Element;
47
+ _mux: mux.mutex;
48
+ observer: MutationObserver;
49
+ /**
50
+ * @param {MutationRecord[]} mutations
51
+ */
52
+ _mutationHandler: (mutations: MutationRecord[]) => any;
53
+ /**
54
+ * @param {D} d
55
+ */
56
+ applyDelta(d: D): void;
57
+ }
58
+ import { ObservableV2 } from '../../observable.js';
59
+ import * as mux from '../../mutex.js';
60
+ export {};
61
+ //# sourceMappingURL=dom.d.ts.map
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Stateful transformer that descends one level into a node's child *nodes* and applies a per-child
3
+ * sub-transformer, chosen by `handler`. Attributes and text pass through untouched. Designed to be
4
+ * applied recursively (see {@link children}).
5
+ *
6
+ * The per-child sub-transformer instances are kept in {@link ChildrenTransformer#childTs}, positionally
7
+ * aligned to the parent's child list (children carry no stable id - identity is positional). `children`
8
+ * never changes the child count at its own level, so side A and side B stay aligned position-for-
9
+ * position and the same `childTs` indexes both directions.
10
+ *
11
+ * `childTs` is a sparse positional map kept as a delta: each transformed child is an `insert([t])` op
12
+ * holding its sub-transformer; every other position (text runs, opted-out nodes) is a coalesced
13
+ * `retain(n)` gap. A run of N text characters costs one retain op, not N array slots. It is walked with
14
+ * a forward cursor in step with the change (see {@link ChildrenTransformer#transform}). Transformer
15
+ * instances are carried by reference across rebuilds, so their per-instance state survives.
16
+ *
17
+ * @extends {Transformer<any,any>}
18
+ */
19
+ export class ChildrenTransformer extends Transformer<any, any> {
20
+ /**
21
+ * @param {(d: delta.DeltaAny) => Template | null} handler picks the template for a child node, or
22
+ * `null` to leave that child untransformed. Evaluated once, when the child is inserted.
23
+ */
24
+ constructor(handler: (d: delta.DeltaAny) => Template | null);
25
+ handler: (d: delta.DeltaAny) => Template | null;
26
+ /**
27
+ * Sparse positional map of sub-transformers: `insert([t])` at each transformed child, `retain(n)`
28
+ * over gaps (text and opted-out nodes).
29
+ *
30
+ * @type {delta.DeltaBuilderAny}
31
+ */
32
+ childTs: delta.DeltaBuilderAny;
33
+ /**
34
+ * @param {delta.DeltaBuilderAny} d the change to map
35
+ * @param {boolean} fwd `true` maps side A -> B (applying sub-transformers' `applyA`), `false` maps
36
+ * side B -> A. `children` is 1:1 over children, so the same `childTs` indexes both directions.
37
+ * @return {import('./core.js').TransformResultAny}
38
+ */
39
+ transform(d: delta.DeltaBuilderAny, fwd: boolean): import("./core.js").TransformResultAny;
40
+ }
41
+ /**
42
+ * Template for {@link ChildrenTransformer}.
43
+ *
44
+ * @implements Template
45
+ */
46
+ export class Children implements Template {
47
+ /**
48
+ * @param {(d: delta.DeltaAny) => Template | null} handler
49
+ */
50
+ constructor(handler: (d: delta.DeltaAny) => Template | null);
51
+ handler: (d: delta.DeltaAny) => Template | null;
52
+ get stateless(): boolean;
53
+ /**
54
+ * @template {delta.DeltaConf} IN
55
+ * @param {import('../../schema.js').Schema<delta.Delta<IN>>} _$d
56
+ * @return {Transformer<IN, any>}
57
+ */
58
+ init<IN extends delta.DeltaConf>(_$d: import("../../schema.js").Schema<delta.Delta<IN>>): Transformer<IN, any>;
59
+ }
60
+ export function children(handler: (d: delta.DeltaAny) => Template | null): Children;
61
+ export type Template = import("./core.js").Template;
62
+ import { Transformer } from './core.js';
63
+ import * as delta from '../delta.js';
64
+ //# sourceMappingURL=children.d.ts.map
@@ -0,0 +1,69 @@
1
+ export function $tresult<A extends delta.DeltaConf, B extends delta.DeltaConf>($a: s.Schema<delta.Delta<A>>, $b: s.Schema<delta.Delta<B>>): s.Schema<TransformResult<A, B>>;
2
+ export function createTransformResult<DeltaA extends delta.DeltaBuilderAny = delta.DeltaBuilderAny, DeltaB extends delta.DeltaBuilderAny = delta.DeltaBuilderAny>(a: DeltaA | null, b: DeltaB | null): TransformResult<any, any>;
3
+ /**
4
+ * @template {delta.DeltaConf} A
5
+ * @template {delta.DeltaConf} B
6
+ */
7
+ export class Transformer<A extends delta.DeltaConf, B extends delta.DeltaConf> {
8
+ /**
9
+ * @param {TransformResult<A, B>} tin
10
+ * @return {TransformResult<A,B>}
11
+ */
12
+ apply(tin: TransformResult<A, B>): TransformResult<A, B>;
13
+ /**
14
+ * @param {delta.DeltaBuilder<A>} t
15
+ * @return {TransformResult<A,B>}
16
+ */
17
+ applyA(t: delta.DeltaBuilder<A>): TransformResult<A, B>;
18
+ /**
19
+ * @param {delta.DeltaBuilder<B>} t
20
+ * @return {TransformResult<A,B>}
21
+ */
22
+ applyB(t: delta.DeltaBuilder<B>): TransformResult<A, B>;
23
+ }
24
+ export function transformerWith<A extends delta.DeltaConf, B extends delta.DeltaConf>(_a: s.Schema<delta.Delta<A>> | A, _b: s.Schema<delta.Delta<B>> | A): s.Schema<Transformer<A, B>>;
25
+ export const $transformer: s.Schema<Transformer<delta.DeltaConf, delta.DeltaConf>>;
26
+ export type TransformResultAny = TransformResult<any, any>;
27
+ /**
28
+ * A composable transformer factory. `init` instantiates a stateful {@link Transformer} for a given
29
+ * input schema; `stateless` reports whether the produced transformer carries no per-instance state
30
+ * (so it can be shared / cached).
31
+ */
32
+ export type Template = {
33
+ stateless: boolean;
34
+ init: ($d: s.Schema<delta.DeltaAny>) => Transformer<any, any>;
35
+ };
36
+ import * as delta from '../delta.js';
37
+ import * as s from '../../schema.js';
38
+ /**
39
+ * @template {delta.DeltaConf} [A={}]
40
+ * @template {delta.DeltaConf} [B={}]
41
+ */
42
+ declare class TransformResult<A extends delta.DeltaConf = {}, B extends delta.DeltaConf = {}> {
43
+ /**
44
+ * @param {delta.DeltaBuilder<A>?} a
45
+ * @param {delta.DeltaBuilder<B>?} b
46
+ */
47
+ constructor(a: delta.DeltaBuilder<A> | null, b: delta.DeltaBuilder<B> | null);
48
+ /**
49
+ * @type {delta.DeltaBuilder<A>?}
50
+ */
51
+ a: delta.DeltaBuilder<A> | null;
52
+ /**
53
+ * @type {delta.DeltaBuilder<B>?}
54
+ */
55
+ b: delta.DeltaBuilder<B> | null;
56
+ isEmpty(): boolean;
57
+ clear(): void;
58
+ /**
59
+ * @param {delta.DeltaBuilder<A>?} a
60
+ */
61
+ applyA(a: delta.DeltaBuilder<A> | null): this;
62
+ /**
63
+ * @param {delta.DeltaBuilder<B>?} b
64
+ */
65
+ applyB(b: delta.DeltaBuilder<B> | null): this;
66
+ reverse(): TransformResult<B, A>;
67
+ }
68
+ export {};
69
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1,103 @@
1
+ /**
2
+ * @typedef {import('./core.js').Template} Template
3
+ */
4
+ /**
5
+ * @template {delta.DeltaConf} DConf
6
+ * @template {delta.DeltaConf} IN
7
+ * @typedef {delta.AsDeltaConf<{ [K in keyof DConf & keyof IN]: K extends 'attrs' ? import('../../ts.js').PropsPickShared<DConf[K], IN[K]> : (DConf[K] & IN[K])}>} ApplyExpectType
8
+ */
9
+ /**
10
+ * Drops everything that does not match the configured schema (only attrs are filtered for now).
11
+ *
12
+ * @template {delta.DeltaConf} DConf
13
+ * @implements Template
14
+ */
15
+ export class Filter<DConf extends delta.DeltaConf> implements Template {
16
+ /**
17
+ * @param {import('../../schema.js').Schema<delta.Delta<DConf>>} $d
18
+ */
19
+ constructor($d: import("../../schema.js").Schema<delta.Delta<DConf>>);
20
+ $d: delta.$Delta<delta.DeltaConf>;
21
+ $dshape: {
22
+ $name: s.Schema<any>;
23
+ $attrs: s.Schema<{}>;
24
+ $children: s.Schema<never>;
25
+ hasText: never;
26
+ recursiveChildren: false;
27
+ $formats: s.Schema<{
28
+ [K: string]: any;
29
+ }>;
30
+ };
31
+ get stateless(): boolean;
32
+ /**
33
+ * @template {delta.DeltaConf} IN
34
+ * @param {import('../../schema.js').Schema<delta.Delta<IN>>} _$d
35
+ * @return {Transformer<IN,ApplyExpectType<DConf, IN>>}
36
+ */
37
+ init<IN extends delta.DeltaConf>(_$d: import("../../schema.js").Schema<delta.Delta<IN>>): Transformer<IN, ApplyExpectType<DConf, IN>>;
38
+ }
39
+ /**
40
+ * @template {delta.DeltaConf} IN
41
+ * @template {delta.DeltaConf} OUT
42
+ * @template {delta.DeltaConf} DConf
43
+ * @extends Transformer<IN,OUT>
44
+ */
45
+ export class FilterTransformer<IN extends delta.DeltaConf, OUT extends delta.DeltaConf, DConf extends delta.DeltaConf> extends Transformer<IN, OUT> {
46
+ /**
47
+ * @param {delta.$Delta<DConf>} $d
48
+ */
49
+ constructor($d: delta.$Delta<DConf>);
50
+ $dshape: {
51
+ $name: s.Schema<delta.DeltaConfGetName<DConf>>;
52
+ $attrs: s.Schema<import("../../ts.js").TypeIsAny<DConf, {
53
+ [K: string]: any;
54
+ [K: number]: any;
55
+ }, DConf extends {
56
+ attrs: infer Attrs;
57
+ } ? Attrs extends undefined ? {} : Attrs : {}>>;
58
+ $children: s.Schema<delta.DeltaConfGetChildren<DConf>>;
59
+ hasText: delta.DeltaConfGetText<DConf>;
60
+ recursiveChildren: delta.DeltaConfGetRecursiveChildren<DConf>;
61
+ $formats: s.Schema<{
62
+ [K: string]: any;
63
+ }>;
64
+ };
65
+ filter: delta.DeltaBuilder<{
66
+ children: any;
67
+ }, true>;
68
+ /**
69
+ * @type {delta.DeltaAny}
70
+ */
71
+ dreversed: delta.DeltaAny;
72
+ /**
73
+ * @param {delta.DeltaBuilderAny} deltaA
74
+ */
75
+ applyA(deltaA: delta.DeltaBuilderAny): {
76
+ a: delta.DeltaBuilder<any, false> | null;
77
+ b: delta.DeltaBuilder<any, false> | null;
78
+ isEmpty(): boolean;
79
+ clear(): void;
80
+ applyA(a: delta.DeltaBuilder<any, false> | null): /*elided*/ any;
81
+ applyB(b: delta.DeltaBuilder<any, false> | null): /*elided*/ any;
82
+ reverse(): /*elided*/ any;
83
+ };
84
+ /**
85
+ * @param {delta.DeltaBuilderAny} deltaB
86
+ */
87
+ applyB(deltaB: delta.DeltaBuilderAny): {
88
+ a: delta.DeltaBuilder<any, false> | null;
89
+ b: delta.DeltaBuilder<any, false> | null;
90
+ isEmpty(): boolean;
91
+ clear(): void;
92
+ applyA(a: delta.DeltaBuilder<any, false> | null): /*elided*/ any;
93
+ applyB(b: delta.DeltaBuilder<any, false> | null): /*elided*/ any;
94
+ reverse(): /*elided*/ any;
95
+ };
96
+ }
97
+ export function filter<DConf extends delta.DeltaConf>($d: import("../../schema.js").Schema<delta.Delta<DConf>>): Filter<DConf>;
98
+ export type Template = import("./core.js").Template;
99
+ export type ApplyExpectType<DConf extends delta.DeltaConf, IN extends delta.DeltaConf> = delta.AsDeltaConf<{ [K in keyof DConf & keyof IN]: K extends "attrs" ? import("../../ts.js").PropsPickShared<DConf[K], IN[K]> : (DConf[K] & IN[K]); }>;
100
+ import * as delta from '../delta.js';
101
+ import * as s from '../../schema.js';
102
+ import { Transformer } from './core.js';
103
+ //# sourceMappingURL=filter.d.ts.map
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The identity {@link import('./core.js').Template Template}: it maps every change verbatim in both
3
+ * directions, so both sides stay bit-for-bit equal. A stateless singleton (an attr-rename with no
4
+ * renames).
5
+ *
6
+ * @type {import('./core.js').Template}
7
+ */
8
+ export const id: import("./core.js").Template;
9
+ //# sourceMappingURL=id.d.ts.map