diff --git a/src/types/node.ts b/src/types/node.ts index 618034a..e55f88b 100644 --- a/src/types/node.ts +++ b/src/types/node.ts @@ -2,17 +2,20 @@ import { NodeTypes } from "../constants"; import { SimpleNode, CompositeNode, - PartNode, - TemplateNode, + PartNodeBase, + TemplateNodeBase, } from "./simple-node"; import { BaseNode } from "./base-node"; -export { PartNode, TemplateNode }; - export interface DocumentNode extends BaseNode { type: NodeTypes.Document; children: Array< - TextNode | TagNode | ScriptTagNode | StyleTagNode | CommentNode + | TextNode + | TagNode + | ScriptTagNode + | StyleTagNode + | CommentNode + | DoctypeNode >; } @@ -128,6 +131,16 @@ export type DoctypeAttributeWrapperStartNode = export type DoctypeAttributeWrapperEndNode = SimpleNode; +export type OpenTemplateNode = SimpleNode; + +export type CloseTemplateNode = SimpleNode; + +export type TemplateNode = TemplateNodeBase< + Exclude +>; + +export type PartNode = PartNodeBase>; + export type AnyNode = | DocumentNode | TextNode @@ -160,4 +173,8 @@ export type AnyNode = | DoctypeAttributeNode | DoctypeAttributeValueNode | DoctypeAttributeWrapperStartNode - | DoctypeAttributeWrapperEndNode; + | DoctypeAttributeWrapperEndNode + | PartNode + | TemplateNode + | OpenTemplateNode + | CloseTemplateNode; diff --git a/src/types/simple-node.ts b/src/types/simple-node.ts index 3eb98ae..9a7fd8b 100644 --- a/src/types/simple-node.ts +++ b/src/types/simple-node.ts @@ -6,20 +6,25 @@ export interface SimpleNode extends BaseNode { value: string; } -export interface PartNode extends BaseNode { +export interface PartNodeBase> + extends BaseNode { type: NodeTypes.Part; partOf: T; value: string; } -export interface TemplateNode extends BaseNode { +export interface TemplateNodeBase< + T extends Exclude +> extends BaseNode { type: NodeTypes.Template; partOf: T; open?: SimpleNode; close?: SimpleNode; } -export interface CompositeNode extends BaseNode { - parts: (PartNode | TemplateNode)[]; +export interface CompositeNode< + T extends Exclude +> extends BaseNode { + parts: (PartNodeBase | TemplateNodeBase)[]; value: string; }