mirror of
				https://scm.univ-tours.fr/22107988t/rappaurio-sae501_502.git
				synced 2025-11-04 13:15:21 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			299 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			299 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { Transform } from 'stream'
 | 
						|
 | 
						|
declare function tokenize(
 | 
						|
  html: string,
 | 
						|
  existingState?: Tokenizer.State,
 | 
						|
  options?: Tokenizer.Options
 | 
						|
): Tokenizer.Result
 | 
						|
 | 
						|
declare function constructTree(
 | 
						|
  tokens: Tokenizer.AnyToken[],
 | 
						|
  existingState?: TreeConstructor.State
 | 
						|
): TreeConstructor.Result
 | 
						|
 | 
						|
declare class StreamTokenizer extends Transform {}
 | 
						|
 | 
						|
declare class StreamTreeConstructor extends Transform {}
 | 
						|
 | 
						|
export namespace Tokenizer {
 | 
						|
  namespace ContextTypes {
 | 
						|
    type Data = 'tokenizer-context:data'
 | 
						|
    type OpenTagStart = 'tokenizer-context:open-tag-start'
 | 
						|
    type CloseTag = 'tokenizer-context:close-tag'
 | 
						|
    type Attributes = 'tokenizer-context:attributes'
 | 
						|
    type OpenTagEnd = 'tokenizer-context:open-tag-end'
 | 
						|
    type AttributeKey = 'tokenizer-context:attribute-key'
 | 
						|
    type AttributeValue = 'tokenizer-context:attribute-value'
 | 
						|
    type AttributeValueBare = 'tokenizer-context:attribute-value-bare'
 | 
						|
    type AttributeValueWrapped = 'tokenizer-context:attribute-value-wrapped'
 | 
						|
    type ScriptContent = 'tokenizer-context:script-content'
 | 
						|
    type StyleContent = 'tokenizer-context:style-content'
 | 
						|
    type DoctypeStart = 'tokenizer-context:doctype-start'
 | 
						|
    type DoctypeEnd = 'tokenizer-context:doctype-end'
 | 
						|
    type DoctypeAttributes = 'tokenizer-context:doctype-attributes'
 | 
						|
    type DoctypeAttributeWrapped = 'tokenizer-context:doctype-attribute-wrapped'
 | 
						|
    type DoctypeAttributeBare = 'tokenizer-context:doctype-attribute-bare'
 | 
						|
    type CommentStart = 'tokenizer-context:comment-start'
 | 
						|
    type CommentContent = 'tokenizer-context:comment-content'
 | 
						|
    type CommentEnd = 'tokenizer-context:comment-end'
 | 
						|
 | 
						|
    type AnyContextType =
 | 
						|
      | Data
 | 
						|
      | OpenTagStart
 | 
						|
      | CloseTag
 | 
						|
      | Attributes
 | 
						|
      | OpenTagEnd
 | 
						|
      | AttributeKey
 | 
						|
      | AttributeValue
 | 
						|
      | AttributeValueBare
 | 
						|
      | AttributeValueWrapped
 | 
						|
      | ScriptContent
 | 
						|
      | StyleContent
 | 
						|
      | DoctypeStart
 | 
						|
      | DoctypeEnd
 | 
						|
      | DoctypeAttributes
 | 
						|
      | DoctypeAttributeWrapped
 | 
						|
      | DoctypeAttributeBare
 | 
						|
      | CommentStart
 | 
						|
      | CommentContent
 | 
						|
      | CommentEnd
 | 
						|
  }
 | 
						|
 | 
						|
  namespace TokenTypes {
 | 
						|
    type Text = 'token:text'
 | 
						|
    type OpenTagStart = 'token:open-tag-start'
 | 
						|
    type AttributeKey = 'token:attribute-key'
 | 
						|
    type AttributeAssigment = 'token:attribute-assignment'
 | 
						|
    type AttributeValueWrapperStart = 'token:attribute-value-wrapper-start'
 | 
						|
    type AttributeValue = 'token:attribute-value'
 | 
						|
    type AttributeValueWrapperEnd = 'token:attribute-value-wrapper-end'
 | 
						|
    type OpenTagEnd = 'token:open-tag-end'
 | 
						|
    type CloseTag = 'token:close-tag'
 | 
						|
    type OpenTagStartScript = 'token:open-tag-start-script'
 | 
						|
    type ScriptTagContent = 'token:script-tag-content'
 | 
						|
    type OpenTagEndScript = 'token:open-tag-end-script'
 | 
						|
    type CloseTagScript = 'token:close-tag-script'
 | 
						|
    type OpenTagStartStyle = 'token:open-tag-start-style'
 | 
						|
    type StyleTagContent = 'token:style-tag-content'
 | 
						|
    type OpenTagEndStyle = 'token:open-tag-end-style'
 | 
						|
    type CloseTagStyle = 'token:close-tag-style'
 | 
						|
    type DoctypeStart = 'token:doctype-start'
 | 
						|
    type DoctypeEnd = 'token:doctype-end'
 | 
						|
    type DoctypeAttributeWrapperStart = 'token:doctype-attribute-wrapper-start'
 | 
						|
    type DoctypeAttribute = 'token:doctype-attribute'
 | 
						|
    type DoctypeAttributeWrapperEnd = 'token:doctype-attribute-wrapper-end'
 | 
						|
    type CommentStart = 'token:comment-start'
 | 
						|
    type CommentContent = 'token:comment-content'
 | 
						|
    type CommentEnd = 'token:comment-end'
 | 
						|
 | 
						|
    type AnyTokenType =
 | 
						|
      | Text
 | 
						|
      | OpenTagStart
 | 
						|
      | AttributeKey
 | 
						|
      | AttributeAssigment
 | 
						|
      | AttributeValueWrapperStart
 | 
						|
      | AttributeValue
 | 
						|
      | AttributeValueWrapperEnd
 | 
						|
      | OpenTagEnd
 | 
						|
      | CloseTag
 | 
						|
      | OpenTagStartScript
 | 
						|
      | ScriptTagContent
 | 
						|
      | OpenTagEndScript
 | 
						|
      | CloseTagScript
 | 
						|
      | OpenTagStartStyle
 | 
						|
      | StyleTagContent
 | 
						|
      | OpenTagEndStyle
 | 
						|
      | CloseTagStyle
 | 
						|
      | DoctypeStart
 | 
						|
      | DoctypeEnd
 | 
						|
      | DoctypeAttributeWrapperStart
 | 
						|
      | DoctypeAttribute
 | 
						|
      | DoctypeAttributeWrapperEnd
 | 
						|
      | CommentStart
 | 
						|
      | CommentContent
 | 
						|
      | CommentEnd
 | 
						|
  }
 | 
						|
 | 
						|
  interface Options {
 | 
						|
    isFinalChunk: boolean
 | 
						|
  }
 | 
						|
 | 
						|
  interface State {
 | 
						|
    currentContext: string
 | 
						|
    contextParams: ContextParams
 | 
						|
    decisionBuffer: string
 | 
						|
    accumulatedContent: string
 | 
						|
    caretPosition: number
 | 
						|
  }
 | 
						|
 | 
						|
  interface Result {
 | 
						|
    state: State
 | 
						|
    tokens: AnyToken[]
 | 
						|
  }
 | 
						|
 | 
						|
  type AnyToken = Token<TokenTypes.AnyTokenType>
 | 
						|
 | 
						|
  interface Token<T extends TokenTypes.AnyTokenType> {
 | 
						|
    type: T
 | 
						|
    content: string
 | 
						|
    startPosition: number
 | 
						|
    endPosition: number
 | 
						|
  }
 | 
						|
 | 
						|
  type ContextParams = {
 | 
						|
    [C in ContextTypes.AnyContextType]?: {
 | 
						|
      wrapper?: '"' | '\'',
 | 
						|
      tagName?: string
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
export namespace TreeConstructor {
 | 
						|
  namespace NodeTypes {
 | 
						|
    type Document = 'document'
 | 
						|
    type Doctype = 'doctype'
 | 
						|
    type Tag = 'tag'
 | 
						|
    type Text = 'text'
 | 
						|
    type Comment = 'comment'
 | 
						|
    type Script = 'script'
 | 
						|
    type Style = 'style'
 | 
						|
 | 
						|
    type AnyNodeType =
 | 
						|
      | Document
 | 
						|
      | Doctype
 | 
						|
      | Tag
 | 
						|
      | Text
 | 
						|
      | Comment
 | 
						|
      | Script
 | 
						|
      | Style
 | 
						|
  }
 | 
						|
 | 
						|
  namespace ContextTypes {
 | 
						|
    type TagContent = 'tree-constructor-context:tag-content'
 | 
						|
    type Tag = 'tree-constructor-context:tag'
 | 
						|
    type TagName = 'tree-constructor-context:tag-name'
 | 
						|
    type Attributes = 'tree-constructor-context:attributes'
 | 
						|
    type Attribute = 'tree-constructor-context:attribute'
 | 
						|
    type AttributeValue = 'tree-constructor-context:attribute-value'
 | 
						|
    type Comment = 'tree-constructor-context:comment'
 | 
						|
    type Doctype = 'tree-constructor-context:doctype'
 | 
						|
    type DoctypeAttributes = 'tree-constructor-context:doctype-attributes'
 | 
						|
    type DoctypeAttribute = 'tree-constructor-context:doctype-attribute'
 | 
						|
    type ScriptTag = 'tree-constructor-context:script-tag'
 | 
						|
    type StyleTag = 'tree-constructor-context:style-tag'
 | 
						|
 | 
						|
    type AnyContextType =
 | 
						|
      | TagContent
 | 
						|
      | Tag
 | 
						|
      | TagName
 | 
						|
      | Attributes
 | 
						|
      | Attribute
 | 
						|
      | AttributeValue
 | 
						|
      | Comment
 | 
						|
      | Doctype
 | 
						|
      | DoctypeAttributes
 | 
						|
      | DoctypeAttribute
 | 
						|
      | ScriptTag
 | 
						|
      | StyleTag
 | 
						|
  }
 | 
						|
 | 
						|
  namespace NodeContents {
 | 
						|
    interface Document {
 | 
						|
      children: AnyNode[]
 | 
						|
    }
 | 
						|
 | 
						|
    interface Doctype {
 | 
						|
      start: Tokenizer.Token<Tokenizer.TokenTypes.DoctypeStart>
 | 
						|
      attributes?: DoctypeAttribute[]
 | 
						|
      end: Tokenizer.Token<Tokenizer.TokenTypes.DoctypeEnd>
 | 
						|
    }
 | 
						|
 | 
						|
    interface Text {
 | 
						|
      value: Tokenizer.Token<Tokenizer.TokenTypes.Text>
 | 
						|
    }
 | 
						|
 | 
						|
    interface Tag {
 | 
						|
      name: string
 | 
						|
      selfClosing: boolean
 | 
						|
      openStart: Tokenizer.Token<Tokenizer.TokenTypes.OpenTagStart>
 | 
						|
      attributes?: TagAttribute[]
 | 
						|
      openEnd: Tokenizer.Token<Tokenizer.TokenTypes.OpenTagEnd>
 | 
						|
      children?: AnyNode[]
 | 
						|
      close?: Tokenizer.Token<Tokenizer.TokenTypes.CloseTag>
 | 
						|
    }
 | 
						|
 | 
						|
    interface Comment {
 | 
						|
      start: Tokenizer.Token<Tokenizer.TokenTypes.CommentStart>
 | 
						|
      value: Tokenizer.Token<Tokenizer.TokenTypes.CommentContent>
 | 
						|
      end: Tokenizer.Token<Tokenizer.TokenTypes.CommentEnd>
 | 
						|
    }
 | 
						|
 | 
						|
    interface Script {
 | 
						|
      openStart: Tokenizer.Token<Tokenizer.TokenTypes.OpenTagStartScript>
 | 
						|
      attributes?: TagAttribute[]
 | 
						|
      openEnd: Tokenizer.Token<Tokenizer.TokenTypes.OpenTagEndScript>
 | 
						|
      value: Tokenizer.Token<Tokenizer.TokenTypes.ScriptTagContent>
 | 
						|
      close: Tokenizer.Token<Tokenizer.TokenTypes.CloseTagScript>
 | 
						|
    }
 | 
						|
 | 
						|
    interface Style {
 | 
						|
      openStart: Tokenizer.Token<Tokenizer.TokenTypes.OpenTagStartStyle>,
 | 
						|
      attributes?: TagAttribute[],
 | 
						|
      openEnd: Tokenizer.Token<Tokenizer.TokenTypes.OpenTagEndStyle>,
 | 
						|
      value: Tokenizer.Token<Tokenizer.TokenTypes.StyleTagContent>,
 | 
						|
      close: Tokenizer.Token<Tokenizer.TokenTypes.CloseTagStyle>
 | 
						|
    }
 | 
						|
 | 
						|
    type AnyNodeContent =
 | 
						|
      | Document
 | 
						|
      | Doctype
 | 
						|
      | Text
 | 
						|
      | Tag
 | 
						|
      | Comment
 | 
						|
      | Script
 | 
						|
      | Style
 | 
						|
  }
 | 
						|
 | 
						|
  interface State {
 | 
						|
    caretPosition: number
 | 
						|
    currentContext: ContextTypes.AnyContextType
 | 
						|
    currentNode: NodeTypes.AnyNodeType
 | 
						|
    rootNode: NodeTypes.Document
 | 
						|
  }
 | 
						|
 | 
						|
  interface Result {
 | 
						|
    state: State
 | 
						|
    ast: AST
 | 
						|
  }
 | 
						|
 | 
						|
  type AST = DocumentNode
 | 
						|
 | 
						|
  interface Node<T extends NodeTypes.AnyNodeType, C extends NodeContents.AnyNodeContent> {
 | 
						|
    nodeType: T
 | 
						|
    content: C
 | 
						|
  }
 | 
						|
 | 
						|
  type AnyNode = Node<NodeTypes.AnyNodeType, NodeContents.AnyNodeContent>
 | 
						|
 | 
						|
  type DocumentNode = Node<NodeTypes.Document, NodeContents.Document>
 | 
						|
  type DoctypeNode = Node<NodeTypes.Doctype, NodeContents.Doctype>
 | 
						|
  type TextNode = Node<NodeTypes.Text, NodeContents.Text>
 | 
						|
  type TagNode = Node<NodeTypes.Tag, NodeContents.Tag>
 | 
						|
  type CommentNode = Node<NodeTypes.Comment, NodeContents.Comment>
 | 
						|
  type ScriptNode = Node<NodeTypes.Script, NodeContents.Script>
 | 
						|
  type StyleNode = Node<NodeTypes.Style, NodeContents.Style>
 | 
						|
 | 
						|
  interface DoctypeAttribute {
 | 
						|
    startWrapper?: Tokenizer.Token<Tokenizer.TokenTypes.DoctypeAttributeWrapperStart>,
 | 
						|
    value: Tokenizer.Token<Tokenizer.TokenTypes.DoctypeAttribute>,
 | 
						|
    endWrapper?: Tokenizer.Token<Tokenizer.TokenTypes.DoctypeAttributeWrapperEnd>
 | 
						|
  }
 | 
						|
 | 
						|
  interface TagAttribute {
 | 
						|
    key?: Tokenizer.Token<Tokenizer.TokenTypes.AttributeKey>,
 | 
						|
    startWrapper?: Tokenizer.Token<Tokenizer.TokenTypes.AttributeValueWrapperStart>,
 | 
						|
    value?: Tokenizer.Token<Tokenizer.TokenTypes.AttributeValue>,
 | 
						|
    endWrapper?: Tokenizer.Token<Tokenizer.TokenTypes.AttributeValueWrapperEnd>
 | 
						|
  }
 | 
						|
}
 |