123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- import { Type, YAMLSyntaxError } from './util'
- export default function parseCST(str: string): ParsedCST
- export interface ParsedCST extends Array<CST.Document> {
- setOrigRanges(): boolean
- }
- export namespace CST {
- interface Range {
- start: number
- end: number
- origStart?: number
- origEnd?: number
- isEmpty(): boolean
- }
- interface ParseContext {
- /** Node starts at beginning of line */
- atLineStart: boolean
- /** true if currently in a collection context */
- inCollection: boolean
- /** true if currently in a flow context */
- inFlow: boolean
- /** Current level of indentation */
- indent: number
- /** Start of the current line */
- lineStart: number
- /** The parent of the node */
- parent: Node
- /** Source of the YAML document */
- src: string
- }
- interface Node {
- context: ParseContext | null
- /** if not null, indicates a parser failure */
- error: YAMLSyntaxError | null
- /** span of context.src parsed into this node */
- range: Range | null
- valueRange: Range | null
- /** anchors, tags and comments */
- props: Range[]
- /** specific node type */
- type: Type
- /** if non-null, overrides source value */
- value: string | null
- readonly anchor: string | null
- readonly comment: string | null
- readonly hasComment: boolean
- readonly hasProps: boolean
- readonly jsonLike: boolean
- readonly rangeAsLinePos: null | {
- start: { line: number; col: number }
- end?: { line: number; col: number }
- }
- readonly rawValue: string | null
- readonly tag:
- | null
- | { verbatim: string }
- | { handle: string; suffix: string }
- readonly valueRangeContainsNewline: boolean
- }
- interface Alias extends Node {
- type: Type.ALIAS
- /** contain the anchor without the * prefix */
- readonly rawValue: string
- }
- type Scalar = BlockValue | PlainValue | QuoteValue
- interface BlockValue extends Node {
- type: Type.BLOCK_FOLDED | Type.BLOCK_LITERAL
- chomping: 'CLIP' | 'KEEP' | 'STRIP'
- blockIndent: number | null
- header: Range
- readonly strValue: string | null
- }
- interface BlockFolded extends BlockValue {
- type: Type.BLOCK_FOLDED
- }
- interface BlockLiteral extends BlockValue {
- type: Type.BLOCK_LITERAL
- }
- interface PlainValue extends Node {
- type: Type.PLAIN
- readonly strValue: string | null
- }
- interface QuoteValue extends Node {
- type: Type.QUOTE_DOUBLE | Type.QUOTE_SINGLE
- readonly strValue:
- | null
- | string
- | { str: string; errors: YAMLSyntaxError[] }
- }
- interface QuoteDouble extends QuoteValue {
- type: Type.QUOTE_DOUBLE
- }
- interface QuoteSingle extends QuoteValue {
- type: Type.QUOTE_SINGLE
- }
- interface Comment extends Node {
- type: Type.COMMENT
- readonly anchor: null
- readonly comment: string
- readonly rawValue: null
- readonly tag: null
- }
- interface BlankLine extends Node {
- type: Type.BLANK_LINE
- }
- interface MapItem extends Node {
- type: Type.MAP_KEY | Type.MAP_VALUE
- node: ContentNode | null
- }
- interface MapKey extends MapItem {
- type: Type.MAP_KEY
- }
- interface MapValue extends MapItem {
- type: Type.MAP_VALUE
- }
- interface Map extends Node {
- type: Type.MAP
- /** implicit keys are not wrapped */
- items: Array<BlankLine | Comment | Alias | Scalar | MapItem>
- }
- interface SeqItem extends Node {
- type: Type.SEQ_ITEM
- node: ContentNode | null
- }
- interface Seq extends Node {
- type: Type.SEQ
- items: Array<BlankLine | Comment | SeqItem>
- }
- interface FlowChar {
- char: '{' | '}' | '[' | ']' | ',' | '?' | ':'
- offset: number
- origOffset?: number
- }
- interface FlowCollection extends Node {
- type: Type.FLOW_MAP | Type.FLOW_SEQ
- items: Array<
- FlowChar | BlankLine | Comment | Alias | Scalar | FlowCollection
- >
- }
- interface FlowMap extends FlowCollection {
- type: Type.FLOW_MAP
- }
- interface FlowSeq extends FlowCollection {
- type: Type.FLOW_SEQ
- }
- type ContentNode = Alias | Scalar | Map | Seq | FlowCollection
- interface Directive extends Node {
- type: Type.DIRECTIVE
- name: string
- readonly anchor: null
- readonly parameters: string[]
- readonly tag: null
- }
- interface Document extends Node {
- type: Type.DOCUMENT
- directives: Array<BlankLine | Comment | Directive>
- contents: Array<BlankLine | Comment | ContentNode>
- readonly anchor: null
- readonly comment: null
- readonly tag: null
- }
- }
|