You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
372 lines
10 KiB
372 lines
10 KiB
import { CST } from './parse-cst' |
|
import { |
|
AST, |
|
Alias, |
|
Collection, |
|
Merge, |
|
Node, |
|
Scalar, |
|
Schema, |
|
YAMLMap, |
|
YAMLSeq |
|
} from './types' |
|
import { Type, YAMLError, YAMLWarning } from './util' |
|
|
|
export { AST, CST } |
|
export { default as parseCST } from './parse-cst' |
|
|
|
/** |
|
* `yaml` defines document-specific options in three places: as an argument of |
|
* parse, create and stringify calls, in the values of `YAML.defaultOptions`, |
|
* and in the version-dependent `YAML.Document.defaults` object. Values set in |
|
* `YAML.defaultOptions` override version-dependent defaults, and argument |
|
* options override both. |
|
*/ |
|
export const defaultOptions: Options |
|
|
|
export interface Options extends Schema.Options { |
|
/** |
|
* Default prefix for anchors. |
|
* |
|
* Default: `'a'`, resulting in anchors `a1`, `a2`, etc. |
|
*/ |
|
anchorPrefix?: string |
|
/** |
|
* The number of spaces to use when indenting code. |
|
* |
|
* Default: `2` |
|
*/ |
|
indent?: number |
|
/** |
|
* Whether block sequences should be indented. |
|
* |
|
* Default: `true` |
|
*/ |
|
indentSeq?: boolean |
|
/** |
|
* Allow non-JSON JavaScript objects to remain in the `toJSON` output. |
|
* Relevant with the YAML 1.1 `!!timestamp` and `!!binary` tags as well as BigInts. |
|
* |
|
* Default: `true` |
|
*/ |
|
keepBlobsInJSON?: boolean |
|
/** |
|
* Include references in the AST to each node's corresponding CST node. |
|
* |
|
* Default: `false` |
|
*/ |
|
keepCstNodes?: boolean |
|
/** |
|
* Store the original node type when parsing documents. |
|
* |
|
* Default: `true` |
|
*/ |
|
keepNodeTypes?: boolean |
|
/** |
|
* When outputting JS, use Map rather than Object to represent mappings. |
|
* |
|
* Default: `false` |
|
*/ |
|
mapAsMap?: boolean |
|
/** |
|
* Prevent exponential entity expansion attacks by limiting data aliasing count; |
|
* set to `-1` to disable checks; `0` disallows all alias nodes. |
|
* |
|
* Default: `100` |
|
*/ |
|
maxAliasCount?: number |
|
/** |
|
* Include line position & node type directly in errors; drop their verbose source and context. |
|
* |
|
* Default: `false` |
|
*/ |
|
prettyErrors?: boolean |
|
/** |
|
* When stringifying, require keys to be scalars and to use implicit rather than explicit notation. |
|
* |
|
* Default: `false` |
|
*/ |
|
simpleKeys?: boolean |
|
/** |
|
* The YAML version used by documents without a `%YAML` directive. |
|
* |
|
* Default: `"1.2"` |
|
*/ |
|
version?: '1.0' | '1.1' | '1.2' |
|
} |
|
|
|
/** |
|
* Some customization options are availabe to control the parsing and |
|
* stringification of scalars. Note that these values are used by all documents. |
|
*/ |
|
export const scalarOptions: { |
|
binary: scalarOptions.Binary |
|
bool: scalarOptions.Bool |
|
int: scalarOptions.Int |
|
null: scalarOptions.Null |
|
str: scalarOptions.Str |
|
} |
|
export namespace scalarOptions { |
|
interface Binary { |
|
/** |
|
* The type of string literal used to stringify `!!binary` values. |
|
* |
|
* Default: `'BLOCK_LITERAL'` |
|
*/ |
|
defaultType: Scalar.Type |
|
/** |
|
* Maximum line width for `!!binary`. |
|
* |
|
* Default: `76` |
|
*/ |
|
lineWidth: number |
|
} |
|
|
|
interface Bool { |
|
/** |
|
* String representation for `true`. With the core schema, use `'true' | 'True' | 'TRUE'`. |
|
* |
|
* Default: `'true'` |
|
*/ |
|
trueStr: string |
|
/** |
|
* String representation for `false`. With the core schema, use `'false' | 'False' | 'FALSE'`. |
|
* |
|
* Default: `'false'` |
|
*/ |
|
falseStr: string |
|
} |
|
|
|
interface Int { |
|
/** |
|
* Whether integers should be parsed into BigInt values. |
|
* |
|
* Default: `false` |
|
*/ |
|
asBigInt: boolean |
|
} |
|
|
|
interface Null { |
|
/** |
|
* String representation for `null`. With the core schema, use `'null' | 'Null' | 'NULL' | '~' | ''`. |
|
* |
|
* Default: `'null'` |
|
*/ |
|
nullStr: string |
|
} |
|
|
|
interface Str { |
|
/** |
|
* The default type of string literal used to stringify values |
|
* |
|
* Default: `'PLAIN'` |
|
*/ |
|
defaultType: Scalar.Type |
|
doubleQuoted: { |
|
/** |
|
* Whether to restrict double-quoted strings to use JSON-compatible syntax. |
|
* |
|
* Default: `false` |
|
*/ |
|
jsonEncoding: boolean |
|
/** |
|
* Minimum length to use multiple lines to represent the value. |
|
* |
|
* Default: `40` |
|
*/ |
|
minMultiLineLength: number |
|
} |
|
fold: { |
|
/** |
|
* Maximum line width (set to `0` to disable folding). |
|
* |
|
* Default: `80` |
|
*/ |
|
lineWidth: number |
|
/** |
|
* Minimum width for highly-indented content. |
|
* |
|
* Default: `20` |
|
*/ |
|
minContentWidth: number |
|
} |
|
} |
|
} |
|
|
|
export class Document extends Collection { |
|
cstNode?: CST.Document |
|
constructor(options?: Options) |
|
tag: never |
|
directivesEndMarker?: boolean |
|
type: Type.DOCUMENT |
|
/** |
|
* Anchors associated with the document's nodes; |
|
* also provides alias & merge node creators. |
|
*/ |
|
anchors: Document.Anchors |
|
/** The document contents. */ |
|
contents: any |
|
/** Errors encountered during parsing. */ |
|
errors: YAMLError[] |
|
/** |
|
* The schema used with the document. Use `setSchema()` to change or |
|
* initialise. |
|
*/ |
|
schema?: Schema |
|
/** |
|
* Array of prefixes; each will have a string `handle` that |
|
* starts and ends with `!` and a string `prefix` that the handle will be replaced by. |
|
*/ |
|
tagPrefixes: Document.TagPrefix[] |
|
/** |
|
* The parsed version of the source document; |
|
* if true-ish, stringified output will include a `%YAML` directive. |
|
*/ |
|
version?: string |
|
/** Warnings encountered during parsing. */ |
|
warnings: YAMLWarning[] |
|
/** |
|
* List the tags used in the document that are not in the default |
|
* `tag:yaml.org,2002:` namespace. |
|
*/ |
|
listNonDefaultTags(): string[] |
|
/** Parse a CST into this document */ |
|
parse(cst: CST.Document): this |
|
/** |
|
* When a document is created with `new YAML.Document()`, the schema object is |
|
* not set as it may be influenced by parsed directives; call this with no |
|
* arguments to set it manually, or with arguments to change the schema used |
|
* by the document. |
|
**/ |
|
setSchema( |
|
id?: Options['version'] | Schema.Name, |
|
customTags?: (Schema.TagId | Schema.Tag)[] |
|
): void |
|
/** Set `handle` as a shorthand string for the `prefix` tag namespace. */ |
|
setTagPrefix(handle: string, prefix: string): void |
|
/** |
|
* A plain JavaScript representation of the document `contents`. |
|
* |
|
* @param arg Used by `JSON.stringify` to indicate the array index or property |
|
* name. If its value is a `string` and the document `contents` has a scalar |
|
* value, the `keepBlobsInJSON` option has no effect. |
|
* @param onAnchor If defined, called with the resolved `value` and reference |
|
* `count` for each anchor in the document. |
|
* */ |
|
toJSON(arg?: string, onAnchor?: (value: any, count: number) => void): any |
|
/** A YAML representation of the document. */ |
|
toString(): string |
|
} |
|
|
|
export namespace Document { |
|
interface Parsed extends Document { |
|
contents: Scalar | YAMLMap | YAMLSeq | null |
|
/** The schema used with the document. */ |
|
schema: Schema |
|
} |
|
|
|
interface Anchors { |
|
/** |
|
* Create a new `Alias` node, adding the required anchor for `node`. |
|
* If `name` is empty, a new anchor name will be generated. |
|
*/ |
|
createAlias(node: Node, name?: string): Alias |
|
/** |
|
* Create a new `Merge` node with the given source nodes. |
|
* Non-`Alias` sources will be automatically wrapped. |
|
*/ |
|
createMergePair(...nodes: Node[]): Merge |
|
/** The anchor name associated with `node`, if set. */ |
|
getName(node: Node): undefined | string |
|
/** List of all defined anchor names. */ |
|
getNames(): string[] |
|
/** The node associated with the anchor `name`, if set. */ |
|
getNode(name: string): undefined | Node |
|
/** |
|
* Find an available anchor name with the given `prefix` and a |
|
* numerical suffix. |
|
*/ |
|
newName(prefix: string): string |
|
/** |
|
* Associate an anchor with `node`. If `name` is empty, a new name will be generated. |
|
* To remove an anchor, use `setAnchor(null, name)`. |
|
*/ |
|
setAnchor(node: Node | null, name?: string): void | string |
|
} |
|
|
|
interface TagPrefix { |
|
handle: string |
|
prefix: string |
|
} |
|
} |
|
|
|
/** |
|
* Recursively turns objects into collections. Generic objects as well as `Map` |
|
* and its descendants become mappings, while arrays and other iterable objects |
|
* result in sequences. |
|
* |
|
* The primary purpose of this function is to enable attaching comments or other |
|
* metadata to a value, or to otherwise exert more fine-grained control over the |
|
* stringified output. To that end, you'll need to assign its return value to |
|
* the `contents` of a Document (or somewhere within said contents), as the |
|
* document's schema is required for YAML string output. |
|
* |
|
* @param wrapScalars If undefined or `true`, also wraps plain values in |
|
* `Scalar` objects; if `false` and `value` is not an object, it will be |
|
* returned directly. |
|
* @param tag Use to specify the collection type, e.g. `"!!omap"`. Note that |
|
* this requires the corresponding tag to be available based on the default |
|
* options. To use a specific document's schema, use `doc.schema.createNode`. |
|
*/ |
|
export function createNode( |
|
value: any, |
|
wrapScalars?: true, |
|
tag?: string |
|
): YAMLMap | YAMLSeq | Scalar |
|
|
|
/** |
|
* YAML.createNode recursively turns objects into Map and arrays to Seq collections. |
|
* Its primary use is to enable attaching comments or other metadata to a value, |
|
* or to otherwise exert more fine-grained control over the stringified output. |
|
* |
|
* Doesn't wrap plain values in Scalar objects. |
|
*/ |
|
export function createNode( |
|
value: any, |
|
wrapScalars: false, |
|
tag?: string |
|
): YAMLMap | YAMLSeq | string | number | boolean | null |
|
|
|
/** |
|
* Parse an input string into a single YAML.Document. |
|
*/ |
|
export function parseDocument(str: string, options?: Options): Document.Parsed |
|
|
|
/** |
|
* Parse the input as a stream of YAML documents. |
|
* |
|
* Documents should be separated from each other by `...` or `---` marker lines. |
|
*/ |
|
export function parseAllDocuments( |
|
str: string, |
|
options?: Options |
|
): Document.Parsed[] |
|
|
|
/** |
|
* Parse an input string into JavaScript. |
|
* |
|
* Only supports input consisting of a single YAML document; for multi-document |
|
* support you should use `YAML.parseAllDocuments`. May throw on error, and may |
|
* log warnings using `console.warn`. |
|
* |
|
* @param str A string with YAML formatting. |
|
* @returns The value will match the type of the root value of the parsed YAML |
|
* document, so Maps become objects, Sequences arrays, and scalars result in |
|
* nulls, booleans, numbers and strings. |
|
*/ |
|
export function parse(str: string, options?: Options): any |
|
|
|
/** |
|
* @returns Will always include \n as the last character, as is expected of YAML documents. |
|
*/ |
|
export function stringify(value: any, options?: Options): string
|
|
|