Skip to content

Commit

Permalink
feat(json-crdt): 馃幐 add abstract ExtNode class
Browse files Browse the repository at this point in the history
  • Loading branch information
streamich committed May 2, 2024
1 parent 5240f08 commit 5a79cec
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 30 deletions.
33 changes: 3 additions & 30 deletions src/json-crdt-extensions/peritext/PeritextNode.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,9 @@
import {printTree} from 'tree-dump/lib/printTree';
import {MNEMONIC} from './constants';
import type {ITimestampStruct} from '../../json-crdt-patch/clock';
import type {ExtensionJsonNode, JsonNode} from '../../json-crdt';
import type {Printable} from 'tree-dump/lib/types';
import {ExtNode} from '../../json-crdt/extensions/ExtNode';;
import type {PeritextDataNode} from './types';

export class PeritextNode implements ExtensionJsonNode, Printable {
public readonly id: ITimestampStruct;

constructor(public readonly data: PeritextDataNode) {
this.id = data.id;
}

// -------------------------------------------------------- ExtensionJsonNode
export class PeritextNode extends ExtNode<PeritextDataNode> {
// ------------------------------------------------------------------ ExtNode

public name(): string {
return MNEMONIC;
Expand All @@ -22,22 +13,4 @@ export class PeritextNode implements ExtensionJsonNode, Printable {
const str = this.data.get(0)!;
return str.view();
}

public children(callback: (node: JsonNode) => void): void {}

public child?(): PeritextDataNode {
return this.data;
}

public container(): JsonNode | undefined {
return this.data.container();
}

public api: undefined | unknown = undefined;

// ---------------------------------------------------------------- Printable

public toString(tab?: string): string {
return this.name() + printTree(tab, [(tab) => this.data.toString(tab)]);
}
}
1 change: 1 addition & 0 deletions src/json-crdt-extensions/peritext/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import type {ExtensionDefinition} from '../../json-crdt';
export const PeritextExt: ExtensionDefinition<PeritextDataNode, PeritextNode, PeritextApi> = {
id: ExtensionId.peritext,
name: MNEMONIC,
// TODO: Simplify to `BUILD_SCHEMA(text)`.
new: (text: string) => ext(ExtensionId.peritext, BUILD_SCHEMA(text)),
Node: PeritextNode,
Api: PeritextApi,
Expand Down
35 changes: 35 additions & 0 deletions src/json-crdt/extensions/ExtNode.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import {printTree} from 'tree-dump/lib/printTree';
import type {ITimestampStruct} from '../../json-crdt-patch/clock';
import type {ExtensionJsonNode, JsonNode} from '..';
import type {Printable} from 'tree-dump/lib/types';

export abstract class ExtNode<N extends JsonNode> implements ExtensionJsonNode, Printable {
public readonly id: ITimestampStruct;

constructor(public readonly data: N) {
this.id = data.id;
}

// -------------------------------------------------------- ExtensionJsonNode

public abstract name(): string;
public abstract view(): unknown;

public children(callback: (node: JsonNode) => void): void {}

public child?(): N {
return this.data;
}

public container(): JsonNode | undefined {
return this.data.container();
}

public api: undefined | unknown = undefined;

// ---------------------------------------------------------------- Printable

public toString(tab?: string): string {
return this.name() + printTree(tab, [(tab) => this.data.toString(tab)]);
}
}

0 comments on commit 5a79cec

Please sign in to comment.