Skip to content

Commit

Permalink
Remove redundant types from tree (#666)
Browse files Browse the repository at this point in the history
Co-authored-by: Youngteac Hong <susukang98@gmail.com>
  • Loading branch information
JOOHOJANG and hackerwins authored Oct 25, 2023
1 parent cd0e102 commit 356fd7a
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 39 deletions.
30 changes: 21 additions & 9 deletions src/document/crdt/tree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import {
IndexTree,
TreePos,
IndexTreeNode,
TreeNodeType,
traverseAll,
TagContained,
} from '@yorkie-js-sdk/src/util/index_tree';
Expand All @@ -34,16 +33,29 @@ import { ActorID } from './../time/actor_id';
import { LLRBTree } from '@yorkie-js-sdk/src/util/llrb_tree';
import { Comparator } from '@yorkie-js-sdk/src/util/comparator';
import { parseObjectValues } from '@yorkie-js-sdk/src/util/object';
import type {
DefaultTextType,
TreeNodeType,
} from '@yorkie-js-sdk/src/util/index_tree';
import { Indexable } from '@yorkie-js-sdk/src/document/document';

export type TreeNode = TextNode | ElementNode;

/**
* `TreeNode` represents the JSON representation of a node in the tree.
* It is used to serialize and deserialize the tree.
* `ElementNode` represents an element node. It has an attributes and children.
*/
export type TreeNode = {
export type ElementNode<A extends Indexable = Indexable> = {
type: TreeNodeType;
children?: Array<TreeNode>;
value?: string;
attributes?: { [key: string]: any };
attributes?: A;
children: Array<TreeNode>;
};

/**
* `TextNode` represents a text node. It has a string value.
*/
export type TextNode = {
type: typeof DefaultTextType;
value: string;
};

/**
Expand Down Expand Up @@ -461,7 +473,7 @@ function toTreeNode(node: CRDTTreeNode): TreeNode {
return {
type: currentNode.type,
value: currentNode.value,
};
} as TextNode;
}

return {
Expand Down Expand Up @@ -498,7 +510,7 @@ function toTestTreeNode(node: CRDTTreeNode): TreeNodeForTest {
value: currentNode.value,
size: currentNode.size,
isRemoved: currentNode.isRemoved,
};
} as TreeNodeForTest;
}

return {
Expand Down
43 changes: 20 additions & 23 deletions src/document/json/tree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,51 +14,48 @@
* limitations under the License.
*/

import { Indexable } from '@yorkie-js-sdk/src/document/document';
import { TimeTicket } from '@yorkie-js-sdk/src/document/time/ticket';
import { ChangeContext } from '@yorkie-js-sdk/src/document/change/context';
import {
CRDTTree,
CRDTTreeNodeID,
CRDTTreeNode,
TreePosStructRange,
TreeChange,
CRDTTreePos,
} from '@yorkie-js-sdk/src/document/crdt/tree';

import {
IndexTree,
DefaultRootType,
DefaultTextType,
TreeNodeType,
} from '@yorkie-js-sdk/src/util/index_tree';
import { TreeEditOperation } from '@yorkie-js-sdk/src/document/operation/tree_edit_operation';
import { isEmpty, stringifyObjectValues } from '@yorkie-js-sdk/src/util/object';
import { RHT } from '../crdt/rht';
import { TreeStyleOperation } from '../operation/tree_style_operation';
import { logger } from '@yorkie-js-sdk/src/util/logger';

export type TreeNode = TextNode | ElementNode;
export type TreeChangeWithPath = Omit<TreeChange, 'from' | 'to'> & {
from: Array<number>;
to: Array<number>;
};

/**
* `ElementNode` is a node that has children.
*/
export type ElementNode<A extends Indexable = Indexable> = {
type: TreeNodeType;
attributes?: A;
children: Array<TreeNode>;
};
import type {
ElementNode,
TextNode,
TreeNode,
TreeChange,
TreeChangeType,
TreePosStructRange,
CRDTTreeNodeIDStruct,
} from '@yorkie-js-sdk/src/document/crdt/tree';

/**
* `TextNode` is a node that has a value.
* NOTE(hackerwins): In normal case, we should define the following types in
* json package, because they are directly used by the user. However, we define
* them in crdt package to avoid circular dependency between json and crdt.
*/
export type TextNode = {
type: typeof DefaultTextType;
value: string;
export {
TreeNode,
ElementNode,
TextNode,
TreeChange,
TreeChangeType,
TreePosStructRange,
CRDTTreeNodeIDStruct,
};

/**
Expand Down
11 changes: 4 additions & 7 deletions src/yorkie.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,6 @@ export type {
StyleOpInfo,
} from '@yorkie-js-sdk/src/document/operation/operation';

export {
TreeChange,
TreeChangeType,
CRDTTreeNodeIDStruct,
TreePosStructRange as TreeRangeStruct,
} from '@yorkie-js-sdk/src/document/crdt/tree';

export {
Primitive,
PrimitiveValue,
Expand All @@ -104,6 +97,10 @@ export {
TreeNode,
ElementNode,
TextNode,
TreeChange,
TreeChangeType,
CRDTTreeNodeIDStruct,
TreePosStructRange,
} from '@yorkie-js-sdk/src/document/json/tree';
export { Change } from '@yorkie-js-sdk/src/document/change/change';
export { converter } from '@yorkie-js-sdk/src/api/converter';
Expand Down

0 comments on commit 356fd7a

Please sign in to comment.