Skip to content

Commit 37b3d14

Browse files
committed
feat(json-crdt): 🎸 change terminal node interface in proxy API
1 parent e9f7a79 commit 37b3d14

File tree

17 files changed

+79
-98
lines changed

17 files changed

+79
-98
lines changed

src/json-crdt-extensions/ModelWithExt.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import {Extensions} from '../json-crdt/extensions/Extensions';
44
import {Model} from '../json-crdt/model';
55
import type {NodeBuilder} from '../json-crdt-patch';
66
import type {SchemaToJsonNode} from '../json-crdt/schema/types';
7-
import type {JsonNode} from '../json-crdt/nodes';
87

98
const extensions = new Extensions();
109

@@ -21,7 +20,7 @@ export class ModelWithExt {
2120
public static readonly create = <S extends NodeBuilder | unknown>(
2221
schema?: S,
2322
sidOrClock: clock.ClockVector | number = Model.sid(),
24-
): Model<S extends NodeBuilder ? SchemaToJsonNode<S> : JsonNode> => {
23+
) => {
2524
const model = Model.create(schema, sidOrClock);
2625
model.ext = extensions;
2726
return model;

src/json-crdt-extensions/mval/__tests__/MvalExt.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ test('view should preserve identity', () => {
88
mv: mval.new(1),
99
}),
1010
);
11-
expect(model.s.mv.toView()).toBe(model.s.mv.toView());
11+
expect(model.s.mv.$.view()).toBe(model.s.mv.$.view());
1212
});
1313

1414
test('can set new values in single fork', () => {

src/json-crdt-extensions/peritext/__tests__/extension.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const schema = s.obj({
1616

1717
test('view should preserve identity', () => {
1818
const model = ModelWithExt.create(schema);
19-
expect(model.s.nested.obj.text.toView()).toBe(model.s.nested.obj.text.toView());
19+
expect(model.s.nested.obj.text.$.view()).toBe(model.s.nested.obj.text.$.view());
2020
});
2121

2222
describe('non-typed access', () => {
@@ -94,7 +94,7 @@ describe('typed access', () => {
9494

9595
test('can access PeritextApi using parent proxy selector', () => {
9696
const model = ModelWithExt.create(schema);
97-
const api = model.s.nested.obj.text.toApi();
97+
const api = model.s.nested.obj.text.$;
9898
expect(api).toBeInstanceOf(VecApi);
9999
let node = api.node.ext();
100100
expect(node).toBeInstanceOf(PeritextNode);

src/json-crdt-extensions/quill-delta/__tests__/extension.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const schema = s.obj({
1515

1616
test('view should preserve identity', () => {
1717
const model = ModelWithExt.create(schema);
18-
expect(model.s.nested.obj.text.toView()).toBe(model.s.nested.obj.text.toView());
18+
expect(model.s.nested.obj.text.$.view()).toBe(model.s.nested.obj.text.$.view());
1919
});
2020

2121
describe('typed access', () => {
@@ -43,7 +43,7 @@ describe('typed access', () => {
4343

4444
test('can access Quill Delta node using parent proxy selector', () => {
4545
const model = ModelWithExt.create(schema);
46-
const api = model.s.nested.obj.text.toApi();
46+
const api = model.s.nested.obj.text.$;
4747
expect(api).toBeInstanceOf(VecApi);
4848
let node = api.node.ext();
4949
expect(node).toBeInstanceOf(QuillDeltaNode);

src/json-crdt/__demos__/type-safety.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ console.log(model.view().text);
5858
console.log(model.view().flags[0]);
5959
// true
6060

61-
console.log(model.s.toApi() + '');
61+
console.log(model.s.$ + '');
6262
// ObjectApi
6363
// └─ ObjNode 1234.1
6464
// ├─ "num"
@@ -74,7 +74,7 @@ console.log(model.s.toApi() + '');
7474
// └─ [1]: ValNode 1234.13
7575
// └─ ConNode 1234.12 { false }
7676

77-
console.log(model.s.flags.toApi() + '');
77+
console.log(model.s.flags.$ + '');
7878
// ArrApi
7979
// └─ ArrNode 1234.9
8080
// └─ ArrChunk 1234.14!2 len:2
@@ -83,20 +83,20 @@ console.log(model.s.flags.toApi() + '');
8383
// └─ [1]: ValNode 1234.13
8484
// └─ ConNode 1234.12 { false }
8585

86-
console.log(model.s.flags[1].toApi() + '');
86+
console.log(model.s.flags[1].$ + '');
8787
// ValApi
8888
// └─ ValNode 1234.13
8989
// └─ ConNode 1234.12 { false }
9090

91-
console.log(model.s.flags[1].val.toApi() + '');
91+
console.log(model.s.flags[1].val.$ + '');
9292
// ConApi
9393
// └─ ConNode 1234.12 { false }
9494

95-
console.log(model.s.num.toApi() + '');
95+
console.log(model.s.num.$ + '');
9696
// ConApi
9797
// └─ ConNode 1234.2 { 123 }
9898

99-
console.log(model.s.text.toApi() + '');
99+
console.log(model.s.text.$ + '');
100100
// StrApi
101101
// └─ StrNode 1234.3 { "hello" }
102102
// └─ StrChunk 1234.4!5 len:5 { "hello" }

src/json-crdt/log/Log.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export class Log<N extends JsonNode = JsonNode<any>> implements Printable {
4747
public static fromNewModel<N extends JsonNode = JsonNode<any>>(model: Model<N>): Log<N> {
4848
const sid = model.clock.sid;
4949
const log = new Log<N>(
50-
() => Model.create<any>(undefined, sid) as Model<N>,
50+
() => Model.create(undefined, sid) as unknown as Model<N>,
5151
); /** @todo Maybe provide second arg to `new Log(...)` */
5252
const api = model.api;
5353
if (api.builder.patch.ops.length) log.end.applyPatch(api.flush());

src/json-crdt/log/__tests__/Log.spec.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,17 @@ test('can create a new log from a new model with right starting logical clock',
1919
const model = Model.create(schema0);
2020
const sid = model.clock.sid;
2121
const log = Log.fromNewModel(model);
22-
log.end.s.toApi().set({id: s.con('xyz') as any});
22+
log.end.s.$.set({id: s.con('xyz') as any});
2323
log.end.api.flush();
24-
log.end.s.age.toApi().set(35);
24+
log.end.s.age.$.set(35);
2525
log.end.api.flush();
26-
log.end.s.tags.toApi().del(0, 1);
26+
log.end.s.tags.$.del(0, 1);
2727
log.end.api.flush();
28-
log.end.s.name.toApi().del(0, 8);
29-
log.end.s.name.toApi().ins(0, 'Va Da');
28+
log.end.s.name.$.del(0, 8);
29+
log.end.s.name.$.ins(0, 'Va Da');
3030
log.end.api.flush();
31-
log.end.s.tags[0].toApi().del(0, 4);
32-
log.end.s.tags[0].toApi().ins(0, 'happy');
31+
log.end.s.tags[0].$.del(0, 4);
32+
log.end.s.tags[0].$.ins(0, 'happy');
3333
log.end.api.flush();
3434
expect(log.start().clock.sid).toBe(sid);
3535
expect(log.start().clock.time).toBe(1);

src/json-crdt/model/Model.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import {encoder, decoder} from '../codec/structural/binary/shared';
44
import {ModelApi} from './api';
55
import {ORIGIN, SESSION, SYSTEM_SESSION_TIME} from '../../json-crdt-patch/constants';
66
import {randomSessionId} from './util';
7-
import {ConNode, RootNode, ValNode, VecNode, ObjNode, StrNode, BinNode, ArrNode} from '../nodes';
7+
import {RootNode, ValNode, VecNode, ObjNode, StrNode, BinNode, ArrNode} from '../nodes';
8+
import {ConNode} from '../nodes/const/ConNode';
89
import {printTree} from 'tree-dump/lib/printTree';
910
import {Extensions} from '../extensions/Extensions';
1011
import {AvlMap} from 'sonic-forest/lib/avl/AvlMap';
@@ -132,8 +133,8 @@ export class Model<N extends JsonNode = JsonNode<any>> implements Printable {
132133
? new clock.ServerClockVector(SESSION.SERVER, 1)
133134
: new clock.ClockVector(sidOrClock, 1)
134135
: sidOrClock;
135-
type Node = S extends undefined ? JsonNode : S extends NodeBuilder ? SchemaToJsonNode<S> : SchemaToJsonNode<nodes.json<S>>;
136-
const model = new Model<Node>(cl);
136+
type Node = undefined extends S ? JsonNode : S extends NodeBuilder ? SchemaToJsonNode<S> : SchemaToJsonNode<nodes.json<S>>;
137+
const model: Model<Node> = new Model<Node>(cl);
137138
if (schema !== void 0) model.setSchema(schema instanceof NodeBuilder ? schema : s.json(schema), true);
138139
return model;
139140
};

src/json-crdt/model/__tests__/Model.applyLocalPatch.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ describe('.applyLocalPatch()', () => {
77
const doc1 = Model.create(schema);
88
const doc2 = doc1.clone();
99
const time1 = doc1.clock.time;
10-
doc1.s.toApi().set({a: 1});
10+
doc1.s.$.set({a: 1});
1111
const time2 = doc1.clock.time;
12-
doc2.s.toApi().set({b: 2});
12+
doc2.s.$.set({b: 2});
1313
const time3 = doc1.clock.time;
1414
expect(time2 > time1).toBe(true);
1515
expect(time2).toBe(time3);
@@ -28,9 +28,9 @@ describe('.applyLocalPatch()', () => {
2828
const doc1 = Model.create(schema);
2929
const doc2 = doc1.fork();
3030
const time1 = doc1.clock.time;
31-
doc1.s.toApi().set({a: 1});
31+
doc1.s.$.set({a: 1});
3232
const time2 = doc1.clock.time;
33-
doc2.s.toApi().set({b: 2});
33+
doc2.s.$.set({b: 2});
3434
const time3 = doc1.clock.time;
3535
expect(time2 > time1).toBe(true);
3636
expect(time2).toBe(time3);

src/json-crdt/model/__tests__/Model.cloning.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -245,9 +245,9 @@ describe('reset()', () => {
245245
}),
246246
);
247247
const doc2 = doc1.fork();
248-
doc2.s.text.toApi().ins(4, 'o');
249-
const str = doc1.s.text.toApi();
250-
expect(str === doc2.s.text.toApi()).toBe(false);
248+
doc2.s.text.$.ins(4, 'o');
249+
const str = doc1.s.text.$;
250+
expect(str === doc2.s.text.$).toBe(false);
251251
expect(str.view()).toBe('hell');
252252
doc1.reset(doc2);
253253
expect(str.view()).toBe('hello');
@@ -260,7 +260,7 @@ describe('reset()', () => {
260260
}),
261261
);
262262
const doc2 = doc1.fork();
263-
doc2.s.text.toApi().ins(4, 'o');
263+
doc2.s.text.$.ins(4, 'o');
264264
expect(doc1.clock).toBe(doc1.api.builder.clock);
265265
expect(doc2.clock).toBe(doc2.api.builder.clock);
266266
doc1.reset(doc2);

0 commit comments

Comments
 (0)