Skip to content

Commit

Permalink
feat(json-crdt-extensions): 馃幐 setup ModelWithExt static class
Browse files Browse the repository at this point in the history
  • Loading branch information
streamich committed May 2, 2024
1 parent 5a79cec commit 69e1200
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 0 deletions.
35 changes: 35 additions & 0 deletions src/json-crdt-extensions/ModelWithExt.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import * as clock from '../json-crdt-patch/clock';
import {NodeBuilder} from "../json-crdt-patch";
import {Extensions} from "../json-crdt/extensions/Extensions";
import {Model} from "../json-crdt/model";
import {SchemaToJsonNode} from "../json-crdt/schema/types";
import {CntExt} from './cnt';
import {MvalExt} from "./mval";
import {PeritextExt} from "./peritext";

const extensions = new Extensions();

extensions.register(CntExt);
extensions.register(MvalExt);
extensions.register(PeritextExt);

export class ModelWithExt {
public static readonly create = <S extends NodeBuilder>(
schema?: S,
sidOrClock: clock.ClockVector | number = Model.sid(),
): Model<SchemaToJsonNode<S>> => {
const model = Model.create(schema, sidOrClock);
model.ext = extensions;
return model;
};

public static readonly load = <S extends NodeBuilder>(
data: Uint8Array,
sid?: number,
schema?: S,
): Model<SchemaToJsonNode<S>> => {
const model = Model.load(data, sid, schema);
model.ext = extensions;
return model;
};
}
11 changes: 11 additions & 0 deletions src/json-crdt-extensions/peritext/__tests__/extension.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import {PeritextExt} from "..";
import {ModelWithExt} from "../../ModelWithExt";

test('..', () => {
const model = ModelWithExt.create();
model.api.root({
text: PeritextExt.new('Hello, world\n'),
});

console.log('' + model);
});
1 change: 1 addition & 0 deletions src/json-crdt/model/Model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ export class Model<N extends JsonNode = JsonNode<any>> implements Printable {
* custom data types on top of the JSON CRDT protocol.
*
* @ignore
* @todo Allow this to be `undefined`.
*/
public ext: Extensions = new Extensions();

Expand Down

0 comments on commit 69e1200

Please sign in to comment.