{"version":3,"file":"analytics-composer.cjs","sources":["../../../node_modules/yaml/browser/dist/nodes/identity.js","../../../node_modules/yaml/browser/dist/visit.js","../../../node_modules/yaml/browser/dist/doc/directives.js","../../../node_modules/yaml/browser/dist/doc/anchors.js","../../../node_modules/yaml/browser/dist/doc/applyReviver.js","../../../node_modules/yaml/browser/dist/nodes/toJS.js","../../../node_modules/yaml/browser/dist/nodes/Node.js","../../../node_modules/yaml/browser/dist/nodes/Alias.js","../../../node_modules/yaml/browser/dist/nodes/Scalar.js","../../../node_modules/yaml/browser/dist/doc/createNode.js","../../../node_modules/yaml/browser/dist/nodes/Collection.js","../../../node_modules/yaml/browser/dist/stringify/stringifyComment.js","../../../node_modules/yaml/browser/dist/stringify/foldFlowLines.js","../../../node_modules/yaml/browser/dist/stringify/stringifyString.js","../../../node_modules/yaml/browser/dist/stringify/stringify.js","../../../node_modules/yaml/browser/dist/stringify/stringifyPair.js","../../../node_modules/yaml/browser/dist/log.js","../../../node_modules/yaml/browser/dist/nodes/addPairToJSMap.js","../../../node_modules/yaml/browser/dist/nodes/Pair.js","../../../node_modules/yaml/browser/dist/stringify/stringifyCollection.js","../../../node_modules/yaml/browser/dist/nodes/YAMLMap.js","../../../node_modules/yaml/browser/dist/schema/common/map.js","../../../node_modules/yaml/browser/dist/nodes/YAMLSeq.js","../../../node_modules/yaml/browser/dist/schema/common/seq.js","../../../node_modules/yaml/browser/dist/schema/common/string.js","../../../node_modules/yaml/browser/dist/schema/common/null.js","../../../node_modules/yaml/browser/dist/schema/core/bool.js","../../../node_modules/yaml/browser/dist/stringify/stringifyNumber.js","../../../node_modules/yaml/browser/dist/schema/core/float.js","../../../node_modules/yaml/browser/dist/schema/core/int.js","../../../node_modules/yaml/browser/dist/schema/core/schema.js","../../../node_modules/yaml/browser/dist/schema/json/schema.js","../../../node_modules/yaml/browser/dist/schema/yaml-1.1/binary.js","../../../node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js","../../../node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js","../../../node_modules/yaml/browser/dist/schema/yaml-1.1/bool.js","../../../node_modules/yaml/browser/dist/schema/yaml-1.1/float.js","../../../node_modules/yaml/browser/dist/schema/yaml-1.1/int.js","../../../node_modules/yaml/browser/dist/schema/yaml-1.1/set.js","../../../node_modules/yaml/browser/dist/schema/yaml-1.1/timestamp.js","../../../node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js","../../../node_modules/yaml/browser/dist/schema/tags.js","../../../node_modules/yaml/browser/dist/schema/Schema.js","../../../node_modules/yaml/browser/dist/stringify/stringifyDocument.js","../../../node_modules/yaml/browser/dist/doc/Document.js","../../../node_modules/yaml/browser/dist/errors.js","../../../node_modules/yaml/browser/dist/compose/resolve-props.js","../../../node_modules/yaml/browser/dist/compose/util-contains-newline.js","../../../node_modules/yaml/browser/dist/compose/util-flow-indent-check.js","../../../node_modules/yaml/browser/dist/compose/util-map-includes.js","../../../node_modules/yaml/browser/dist/compose/resolve-block-map.js","../../../node_modules/yaml/browser/dist/compose/resolve-block-seq.js","../../../node_modules/yaml/browser/dist/compose/resolve-end.js","../../../node_modules/yaml/browser/dist/compose/resolve-flow-collection.js","../../../node_modules/yaml/browser/dist/compose/compose-collection.js","../../../node_modules/yaml/browser/dist/compose/resolve-block-scalar.js","../../../node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js","../../../node_modules/yaml/browser/dist/compose/compose-scalar.js","../../../node_modules/yaml/browser/dist/compose/util-empty-scalar-position.js","../../../node_modules/yaml/browser/dist/compose/compose-node.js","../../../node_modules/yaml/browser/dist/compose/compose-doc.js","../../../node_modules/yaml/browser/dist/compose/composer.js","../../../node_modules/yaml/browser/dist/parse/cst-scalar.js","../../../node_modules/yaml/browser/dist/parse/cst-stringify.js","../../../node_modules/yaml/browser/dist/parse/cst-visit.js","../../../node_modules/yaml/browser/dist/parse/cst.js","../../../node_modules/yaml/browser/dist/parse/lexer.js","../../../node_modules/yaml/browser/dist/parse/line-counter.js","../../../node_modules/yaml/browser/dist/parse/parser.js","../../../node_modules/yaml/browser/dist/public-api.js","../src/analytics-composer/query/query-templates.ts","../src/analytics-composer/query/query-translator.ts","../src/analytics-composer/dashboard/stringify-widgets.ts","../src/analytics-composer/dashboard/to-dashboard-code.ts","../src/analytics-composer/dashboard/dashboard-composer.ts","../src/analytics-composer/execute-query/to-execute-query-code.ts","../src/analytics-composer/execute-query/execute-query-composer.ts"],"sourcesContent":["const ALIAS = Symbol.for('yaml.alias');\nconst DOC = Symbol.for('yaml.document');\nconst MAP = Symbol.for('yaml.map');\nconst PAIR = Symbol.for('yaml.pair');\nconst SCALAR = Symbol.for('yaml.scalar');\nconst SEQ = Symbol.for('yaml.seq');\nconst NODE_TYPE = Symbol.for('yaml.node.type');\nconst isAlias = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === ALIAS;\nconst isDocument = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === DOC;\nconst isMap = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === MAP;\nconst isPair = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === PAIR;\nconst isScalar = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SCALAR;\nconst isSeq = (node) => !!node && typeof node === 'object' && node[NODE_TYPE] === SEQ;\nfunction isCollection(node) {\n    if (node && typeof node === 'object')\n        switch (node[NODE_TYPE]) {\n            case MAP:\n            case SEQ:\n                return true;\n        }\n    return false;\n}\nfunction isNode(node) {\n    if (node && typeof node === 'object')\n        switch (node[NODE_TYPE]) {\n            case ALIAS:\n            case MAP:\n            case SCALAR:\n            case SEQ:\n                return true;\n        }\n    return false;\n}\nconst hasAnchor = (node) => (isScalar(node) || isCollection(node)) && !!node.anchor;\n\nexport { ALIAS, DOC, MAP, NODE_TYPE, PAIR, SCALAR, SEQ, hasAnchor, isAlias, isCollection, isDocument, isMap, isNode, isPair, isScalar, isSeq };\n","import { isDocument, isNode, isPair, isCollection, isMap, isSeq, isScalar, isAlias } from './nodes/identity.js';\n\nconst BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove node');\n/**\n * Apply a visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n *   - `key`: For sequence values and map `Pair`, the node's index in the\n *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n *     `null` for the root node.\n *   - `node`: The current node.\n *   - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this node, continue with next\n *     sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current node, then continue with the next one\n *   - `Node`: Replace the current node, then continue by visiting it\n *   - `number`: While iterating the items of a sequence or map, set the index\n *     of the next step. This is useful especially if the index of the current\n *     node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nfunction visit(node, visitor) {\n    const visitor_ = initVisitor(visitor);\n    if (isDocument(node)) {\n        const cd = visit_(null, node.contents, visitor_, Object.freeze([node]));\n        if (cd === REMOVE)\n            node.contents = null;\n    }\n    else\n        visit_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisit.SKIP = SKIP;\n/** Remove the current node */\nvisit.REMOVE = REMOVE;\nfunction visit_(key, node, visitor, path) {\n    const ctrl = callVisitor(key, node, visitor, path);\n    if (isNode(ctrl) || isPair(ctrl)) {\n        replaceNode(key, path, ctrl);\n        return visit_(key, ctrl, visitor, path);\n    }\n    if (typeof ctrl !== 'symbol') {\n        if (isCollection(node)) {\n            path = Object.freeze(path.concat(node));\n            for (let i = 0; i < node.items.length; ++i) {\n                const ci = visit_(i, node.items[i], visitor, path);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    node.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n        }\n        else if (isPair(node)) {\n            path = Object.freeze(path.concat(node));\n            const ck = visit_('key', node.key, visitor, path);\n            if (ck === BREAK)\n                return BREAK;\n            else if (ck === REMOVE)\n                node.key = null;\n            const cv = visit_('value', node.value, visitor, path);\n            if (cv === BREAK)\n                return BREAK;\n            else if (cv === REMOVE)\n                node.value = null;\n        }\n    }\n    return ctrl;\n}\n/**\n * Apply an async visitor to an AST node or document.\n *\n * Walks through the tree (depth-first) starting from `node`, calling a\n * `visitor` function with three arguments:\n *   - `key`: For sequence values and map `Pair`, the node's index in the\n *     collection. Within a `Pair`, `'key'` or `'value'`, correspondingly.\n *     `null` for the root node.\n *   - `node`: The current node.\n *   - `path`: The ancestry of the current node.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `Promise`: Must resolve to one of the following values\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this node, continue with next\n *     sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current node, then continue with the next one\n *   - `Node`: Replace the current node, then continue by visiting it\n *   - `number`: While iterating the items of a sequence or map, set the index\n *     of the next step. This is useful especially if the index of the current\n *     node has changed.\n *\n * If `visitor` is a single function, it will be called with all values\n * encountered in the tree, including e.g. `null` values. Alternatively,\n * separate visitor functions may be defined for each `Map`, `Pair`, `Seq`,\n * `Alias` and `Scalar` node. To define the same visitor function for more than\n * one node type, use the `Collection` (map and seq), `Value` (map, seq & scalar)\n * and `Node` (alias, map, seq & scalar) targets. Of all these, only the most\n * specific defined one will be used for each node.\n */\nasync function visitAsync(node, visitor) {\n    const visitor_ = initVisitor(visitor);\n    if (isDocument(node)) {\n        const cd = await visitAsync_(null, node.contents, visitor_, Object.freeze([node]));\n        if (cd === REMOVE)\n            node.contents = null;\n    }\n    else\n        await visitAsync_(null, node, visitor_, Object.freeze([]));\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisitAsync.BREAK = BREAK;\n/** Do not visit the children of the current node */\nvisitAsync.SKIP = SKIP;\n/** Remove the current node */\nvisitAsync.REMOVE = REMOVE;\nasync function visitAsync_(key, node, visitor, path) {\n    const ctrl = await callVisitor(key, node, visitor, path);\n    if (isNode(ctrl) || isPair(ctrl)) {\n        replaceNode(key, path, ctrl);\n        return visitAsync_(key, ctrl, visitor, path);\n    }\n    if (typeof ctrl !== 'symbol') {\n        if (isCollection(node)) {\n            path = Object.freeze(path.concat(node));\n            for (let i = 0; i < node.items.length; ++i) {\n                const ci = await visitAsync_(i, node.items[i], visitor, path);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    node.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n        }\n        else if (isPair(node)) {\n            path = Object.freeze(path.concat(node));\n            const ck = await visitAsync_('key', node.key, visitor, path);\n            if (ck === BREAK)\n                return BREAK;\n            else if (ck === REMOVE)\n                node.key = null;\n            const cv = await visitAsync_('value', node.value, visitor, path);\n            if (cv === BREAK)\n                return BREAK;\n            else if (cv === REMOVE)\n                node.value = null;\n        }\n    }\n    return ctrl;\n}\nfunction initVisitor(visitor) {\n    if (typeof visitor === 'object' &&\n        (visitor.Collection || visitor.Node || visitor.Value)) {\n        return Object.assign({\n            Alias: visitor.Node,\n            Map: visitor.Node,\n            Scalar: visitor.Node,\n            Seq: visitor.Node\n        }, visitor.Value && {\n            Map: visitor.Value,\n            Scalar: visitor.Value,\n            Seq: visitor.Value\n        }, visitor.Collection && {\n            Map: visitor.Collection,\n            Seq: visitor.Collection\n        }, visitor);\n    }\n    return visitor;\n}\nfunction callVisitor(key, node, visitor, path) {\n    if (typeof visitor === 'function')\n        return visitor(key, node, path);\n    if (isMap(node))\n        return visitor.Map?.(key, node, path);\n    if (isSeq(node))\n        return visitor.Seq?.(key, node, path);\n    if (isPair(node))\n        return visitor.Pair?.(key, node, path);\n    if (isScalar(node))\n        return visitor.Scalar?.(key, node, path);\n    if (isAlias(node))\n        return visitor.Alias?.(key, node, path);\n    return undefined;\n}\nfunction replaceNode(key, path, node) {\n    const parent = path[path.length - 1];\n    if (isCollection(parent)) {\n        parent.items[key] = node;\n    }\n    else if (isPair(parent)) {\n        if (key === 'key')\n            parent.key = node;\n        else\n            parent.value = node;\n    }\n    else if (isDocument(parent)) {\n        parent.contents = node;\n    }\n    else {\n        const pt = isAlias(parent) ? 'alias' : 'scalar';\n        throw new Error(`Cannot replace node with ${pt} parent`);\n    }\n}\n\nexport { visit, visitAsync };\n","import { isNode } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\nconst escapeChars = {\n    '!': '%21',\n    ',': '%2C',\n    '[': '%5B',\n    ']': '%5D',\n    '{': '%7B',\n    '}': '%7D'\n};\nconst escapeTagName = (tn) => tn.replace(/[!,[\\]{}]/g, ch => escapeChars[ch]);\nclass Directives {\n    constructor(yaml, tags) {\n        /**\n         * The directives-end/doc-start marker `---`. If `null`, a marker may still be\n         * included in the document's stringified representation.\n         */\n        this.docStart = null;\n        /** The doc-end marker `...`.  */\n        this.docEnd = false;\n        this.yaml = Object.assign({}, Directives.defaultYaml, yaml);\n        this.tags = Object.assign({}, Directives.defaultTags, tags);\n    }\n    clone() {\n        const copy = new Directives(this.yaml, this.tags);\n        copy.docStart = this.docStart;\n        return copy;\n    }\n    /**\n     * During parsing, get a Directives instance for the current document and\n     * update the stream state according to the current version's spec.\n     */\n    atDocument() {\n        const res = new Directives(this.yaml, this.tags);\n        switch (this.yaml.version) {\n            case '1.1':\n                this.atNextDocument = true;\n                break;\n            case '1.2':\n                this.atNextDocument = false;\n                this.yaml = {\n                    explicit: Directives.defaultYaml.explicit,\n                    version: '1.2'\n                };\n                this.tags = Object.assign({}, Directives.defaultTags);\n                break;\n        }\n        return res;\n    }\n    /**\n     * @param onError - May be called even if the action was successful\n     * @returns `true` on success\n     */\n    add(line, onError) {\n        if (this.atNextDocument) {\n            this.yaml = { explicit: Directives.defaultYaml.explicit, version: '1.1' };\n            this.tags = Object.assign({}, Directives.defaultTags);\n            this.atNextDocument = false;\n        }\n        const parts = line.trim().split(/[ \\t]+/);\n        const name = parts.shift();\n        switch (name) {\n            case '%TAG': {\n                if (parts.length !== 2) {\n                    onError(0, '%TAG directive should contain exactly two parts');\n                    if (parts.length < 2)\n                        return false;\n                }\n                const [handle, prefix] = parts;\n                this.tags[handle] = prefix;\n                return true;\n            }\n            case '%YAML': {\n                this.yaml.explicit = true;\n                if (parts.length !== 1) {\n                    onError(0, '%YAML directive should contain exactly one part');\n                    return false;\n                }\n                const [version] = parts;\n                if (version === '1.1' || version === '1.2') {\n                    this.yaml.version = version;\n                    return true;\n                }\n                else {\n                    const isValid = /^\\d+\\.\\d+$/.test(version);\n                    onError(6, `Unsupported YAML version ${version}`, isValid);\n                    return false;\n                }\n            }\n            default:\n                onError(0, `Unknown directive ${name}`, true);\n                return false;\n        }\n    }\n    /**\n     * Resolves a tag, matching handles to those defined in %TAG directives.\n     *\n     * @returns Resolved tag, which may also be the non-specific tag `'!'` or a\n     *   `'!local'` tag, or `null` if unresolvable.\n     */\n    tagName(source, onError) {\n        if (source === '!')\n            return '!'; // non-specific tag\n        if (source[0] !== '!') {\n            onError(`Not a valid tag: ${source}`);\n            return null;\n        }\n        if (source[1] === '<') {\n            const verbatim = source.slice(2, -1);\n            if (verbatim === '!' || verbatim === '!!') {\n                onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);\n                return null;\n            }\n            if (source[source.length - 1] !== '>')\n                onError('Verbatim tags must end with a >');\n            return verbatim;\n        }\n        const [, handle, suffix] = source.match(/^(.*!)([^!]*)$/s);\n        if (!suffix)\n            onError(`The ${source} tag has no suffix`);\n        const prefix = this.tags[handle];\n        if (prefix) {\n            try {\n                return prefix + decodeURIComponent(suffix);\n            }\n            catch (error) {\n                onError(String(error));\n                return null;\n            }\n        }\n        if (handle === '!')\n            return source; // local tag\n        onError(`Could not resolve tag: ${source}`);\n        return null;\n    }\n    /**\n     * Given a fully resolved tag, returns its printable string form,\n     * taking into account current tag prefixes and defaults.\n     */\n    tagString(tag) {\n        for (const [handle, prefix] of Object.entries(this.tags)) {\n            if (tag.startsWith(prefix))\n                return handle + escapeTagName(tag.substring(prefix.length));\n        }\n        return tag[0] === '!' ? tag : `!<${tag}>`;\n    }\n    toString(doc) {\n        const lines = this.yaml.explicit\n            ? [`%YAML ${this.yaml.version || '1.2'}`]\n            : [];\n        const tagEntries = Object.entries(this.tags);\n        let tagNames;\n        if (doc && tagEntries.length > 0 && isNode(doc.contents)) {\n            const tags = {};\n            visit(doc.contents, (_key, node) => {\n                if (isNode(node) && node.tag)\n                    tags[node.tag] = true;\n            });\n            tagNames = Object.keys(tags);\n        }\n        else\n            tagNames = [];\n        for (const [handle, prefix] of tagEntries) {\n            if (handle === '!!' && prefix === 'tag:yaml.org,2002:')\n                continue;\n            if (!doc || tagNames.some(tn => tn.startsWith(prefix)))\n                lines.push(`%TAG ${handle} ${prefix}`);\n        }\n        return lines.join('\\n');\n    }\n}\nDirectives.defaultYaml = { explicit: false, version: '1.2' };\nDirectives.defaultTags = { '!!': 'tag:yaml.org,2002:' };\n\nexport { Directives };\n","import { isScalar, isCollection } from '../nodes/identity.js';\nimport { visit } from '../visit.js';\n\n/**\n * Verify that the input string is a valid anchor.\n *\n * Will throw on errors.\n */\nfunction anchorIsValid(anchor) {\n    if (/[\\x00-\\x19\\s,[\\]{}]/.test(anchor)) {\n        const sa = JSON.stringify(anchor);\n        const msg = `Anchor must not contain whitespace or control characters: ${sa}`;\n        throw new Error(msg);\n    }\n    return true;\n}\nfunction anchorNames(root) {\n    const anchors = new Set();\n    visit(root, {\n        Value(_key, node) {\n            if (node.anchor)\n                anchors.add(node.anchor);\n        }\n    });\n    return anchors;\n}\n/** Find a new anchor name with the given `prefix` and a one-indexed suffix. */\nfunction findNewAnchor(prefix, exclude) {\n    for (let i = 1; true; ++i) {\n        const name = `${prefix}${i}`;\n        if (!exclude.has(name))\n            return name;\n    }\n}\nfunction createNodeAnchors(doc, prefix) {\n    const aliasObjects = [];\n    const sourceObjects = new Map();\n    let prevAnchors = null;\n    return {\n        onAnchor: (source) => {\n            aliasObjects.push(source);\n            if (!prevAnchors)\n                prevAnchors = anchorNames(doc);\n            const anchor = findNewAnchor(prefix, prevAnchors);\n            prevAnchors.add(anchor);\n            return anchor;\n        },\n        /**\n         * With circular references, the source node is only resolved after all\n         * of its child nodes are. This is why anchors are set only after all of\n         * the nodes have been created.\n         */\n        setAnchors: () => {\n            for (const source of aliasObjects) {\n                const ref = sourceObjects.get(source);\n                if (typeof ref === 'object' &&\n                    ref.anchor &&\n                    (isScalar(ref.node) || isCollection(ref.node))) {\n                    ref.node.anchor = ref.anchor;\n                }\n                else {\n                    const error = new Error('Failed to resolve repeated object (this should not happen)');\n                    error.source = source;\n                    throw error;\n                }\n            }\n        },\n        sourceObjects\n    };\n}\n\nexport { anchorIsValid, anchorNames, createNodeAnchors, findNewAnchor };\n","/**\n * Applies the JSON.parse reviver algorithm as defined in the ECMA-262 spec,\n * in section 24.5.1.1 \"Runtime Semantics: InternalizeJSONProperty\" of the\n * 2021 edition: https://tc39.es/ecma262/#sec-json.parse\n *\n * Includes extensions for handling Map and Set objects.\n */\nfunction applyReviver(reviver, obj, key, val) {\n    if (val && typeof val === 'object') {\n        if (Array.isArray(val)) {\n            for (let i = 0, len = val.length; i < len; ++i) {\n                const v0 = val[i];\n                const v1 = applyReviver(reviver, val, String(i), v0);\n                if (v1 === undefined)\n                    delete val[i];\n                else if (v1 !== v0)\n                    val[i] = v1;\n            }\n        }\n        else if (val instanceof Map) {\n            for (const k of Array.from(val.keys())) {\n                const v0 = val.get(k);\n                const v1 = applyReviver(reviver, val, k, v0);\n                if (v1 === undefined)\n                    val.delete(k);\n                else if (v1 !== v0)\n                    val.set(k, v1);\n            }\n        }\n        else if (val instanceof Set) {\n            for (const v0 of Array.from(val)) {\n                const v1 = applyReviver(reviver, val, v0, v0);\n                if (v1 === undefined)\n                    val.delete(v0);\n                else if (v1 !== v0) {\n                    val.delete(v0);\n                    val.add(v1);\n                }\n            }\n        }\n        else {\n            for (const [k, v0] of Object.entries(val)) {\n                const v1 = applyReviver(reviver, val, k, v0);\n                if (v1 === undefined)\n                    delete val[k];\n                else if (v1 !== v0)\n                    val[k] = v1;\n            }\n        }\n    }\n    return reviver.call(obj, key, val);\n}\n\nexport { applyReviver };\n","import { hasAnchor } from './identity.js';\n\n/**\n * Recursively convert any node or its contents to native JavaScript\n *\n * @param value - The input value\n * @param arg - If `value` defines a `toJSON()` method, use this\n *   as its first argument\n * @param ctx - Conversion context, originally set in Document#toJS(). If\n *   `{ keep: true }` is not set, output should be suitable for JSON\n *   stringification.\n */\nfunction toJS(value, arg, ctx) {\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n    if (Array.isArray(value))\n        return value.map((v, i) => toJS(v, String(i), ctx));\n    if (value && typeof value.toJSON === 'function') {\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n        if (!ctx || !hasAnchor(value))\n            return value.toJSON(arg, ctx);\n        const data = { aliasCount: 0, count: 1, res: undefined };\n        ctx.anchors.set(value, data);\n        ctx.onCreate = res => {\n            data.res = res;\n            delete ctx.onCreate;\n        };\n        const res = value.toJSON(arg, ctx);\n        if (ctx.onCreate)\n            ctx.onCreate(res);\n        return res;\n    }\n    if (typeof value === 'bigint' && !ctx?.keep)\n        return Number(value);\n    return value;\n}\n\nexport { toJS };\n","import { applyReviver } from '../doc/applyReviver.js';\nimport { NODE_TYPE, isDocument } from './identity.js';\nimport { toJS } from './toJS.js';\n\nclass NodeBase {\n    constructor(type) {\n        Object.defineProperty(this, NODE_TYPE, { value: type });\n    }\n    /** Create a copy of this node.  */\n    clone() {\n        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /** A plain JavaScript representation of this node. */\n    toJS(doc, { mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n        if (!isDocument(doc))\n            throw new TypeError('A document argument is required');\n        const ctx = {\n            anchors: new Map(),\n            doc,\n            keep: true,\n            mapAsMap: mapAsMap === true,\n            mapKeyWarned: false,\n            maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n        };\n        const res = toJS(this, '', ctx);\n        if (typeof onAnchor === 'function')\n            for (const { count, res } of ctx.anchors.values())\n                onAnchor(res, count);\n        return typeof reviver === 'function'\n            ? applyReviver(reviver, { '': res }, '', res)\n            : res;\n    }\n}\n\nexport { NodeBase };\n","import { anchorIsValid } from '../doc/anchors.js';\nimport { visit } from '../visit.js';\nimport { ALIAS, isAlias, isCollection, isPair } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nclass Alias extends NodeBase {\n    constructor(source) {\n        super(ALIAS);\n        this.source = source;\n        Object.defineProperty(this, 'tag', {\n            set() {\n                throw new Error('Alias nodes cannot have tags');\n            }\n        });\n    }\n    /**\n     * Resolve the value of this alias within `doc`, finding the last\n     * instance of the `source` anchor before this node.\n     */\n    resolve(doc) {\n        let found = undefined;\n        visit(doc, {\n            Node: (_key, node) => {\n                if (node === this)\n                    return visit.BREAK;\n                if (node.anchor === this.source)\n                    found = node;\n            }\n        });\n        return found;\n    }\n    toJSON(_arg, ctx) {\n        if (!ctx)\n            return { source: this.source };\n        const { anchors, doc, maxAliasCount } = ctx;\n        const source = this.resolve(doc);\n        if (!source) {\n            const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n            throw new ReferenceError(msg);\n        }\n        let data = anchors.get(source);\n        if (!data) {\n            // Resolve anchors for Node.prototype.toJS()\n            toJS(source, null, ctx);\n            data = anchors.get(source);\n        }\n        /* istanbul ignore if */\n        if (!data || data.res === undefined) {\n            const msg = 'This should not happen: Alias anchor was not resolved?';\n            throw new ReferenceError(msg);\n        }\n        if (maxAliasCount >= 0) {\n            data.count += 1;\n            if (data.aliasCount === 0)\n                data.aliasCount = getAliasCount(doc, source, anchors);\n            if (data.count * data.aliasCount > maxAliasCount) {\n                const msg = 'Excessive alias count indicates a resource exhaustion attack';\n                throw new ReferenceError(msg);\n            }\n        }\n        return data.res;\n    }\n    toString(ctx, _onComment, _onChompKeep) {\n        const src = `*${this.source}`;\n        if (ctx) {\n            anchorIsValid(this.source);\n            if (ctx.options.verifyAliasOrder && !ctx.anchors.has(this.source)) {\n                const msg = `Unresolved alias (the anchor must be set before the alias): ${this.source}`;\n                throw new Error(msg);\n            }\n            if (ctx.implicitKey)\n                return `${src} `;\n        }\n        return src;\n    }\n}\nfunction getAliasCount(doc, node, anchors) {\n    if (isAlias(node)) {\n        const source = node.resolve(doc);\n        const anchor = anchors && source && anchors.get(source);\n        return anchor ? anchor.count * anchor.aliasCount : 0;\n    }\n    else if (isCollection(node)) {\n        let count = 0;\n        for (const item of node.items) {\n            const c = getAliasCount(doc, item, anchors);\n            if (c > count)\n                count = c;\n        }\n        return count;\n    }\n    else if (isPair(node)) {\n        const kc = getAliasCount(doc, node.key, anchors);\n        const vc = getAliasCount(doc, node.value, anchors);\n        return Math.max(kc, vc);\n    }\n    return 1;\n}\n\nexport { Alias };\n","import { SCALAR } from './identity.js';\nimport { NodeBase } from './Node.js';\nimport { toJS } from './toJS.js';\n\nconst isScalarValue = (value) => !value || (typeof value !== 'function' && typeof value !== 'object');\nclass Scalar extends NodeBase {\n    constructor(value) {\n        super(SCALAR);\n        this.value = value;\n    }\n    toJSON(arg, ctx) {\n        return ctx?.keep ? this.value : toJS(this.value, arg, ctx);\n    }\n    toString() {\n        return String(this.value);\n    }\n}\nScalar.BLOCK_FOLDED = 'BLOCK_FOLDED';\nScalar.BLOCK_LITERAL = 'BLOCK_LITERAL';\nScalar.PLAIN = 'PLAIN';\nScalar.QUOTE_DOUBLE = 'QUOTE_DOUBLE';\nScalar.QUOTE_SINGLE = 'QUOTE_SINGLE';\n\nexport { Scalar, isScalarValue };\n","import { Alias } from '../nodes/Alias.js';\nimport { isNode, isPair, MAP, SEQ, isDocument } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\n\nconst defaultTagPrefix = 'tag:yaml.org,2002:';\nfunction findTagObject(value, tagName, tags) {\n    if (tagName) {\n        const match = tags.filter(t => t.tag === tagName);\n        const tagObj = match.find(t => !t.format) ?? match[0];\n        if (!tagObj)\n            throw new Error(`Tag ${tagName} not found`);\n        return tagObj;\n    }\n    return tags.find(t => t.identify?.(value) && !t.format);\n}\nfunction createNode(value, tagName, ctx) {\n    if (isDocument(value))\n        value = value.contents;\n    if (isNode(value))\n        return value;\n    if (isPair(value)) {\n        const map = ctx.schema[MAP].createNode?.(ctx.schema, null, ctx);\n        map.items.push(value);\n        return map;\n    }\n    if (value instanceof String ||\n        value instanceof Number ||\n        value instanceof Boolean ||\n        (typeof BigInt !== 'undefined' && value instanceof BigInt) // not supported everywhere\n    ) {\n        // https://tc39.es/ecma262/#sec-serializejsonproperty\n        value = value.valueOf();\n    }\n    const { aliasDuplicateObjects, onAnchor, onTagObj, schema, sourceObjects } = ctx;\n    // Detect duplicate references to the same object & use Alias nodes for all\n    // after first. The `ref` wrapper allows for circular references to resolve.\n    let ref = undefined;\n    if (aliasDuplicateObjects && value && typeof value === 'object') {\n        ref = sourceObjects.get(value);\n        if (ref) {\n            if (!ref.anchor)\n                ref.anchor = onAnchor(value);\n            return new Alias(ref.anchor);\n        }\n        else {\n            ref = { anchor: null, node: null };\n            sourceObjects.set(value, ref);\n        }\n    }\n    if (tagName?.startsWith('!!'))\n        tagName = defaultTagPrefix + tagName.slice(2);\n    let tagObj = findTagObject(value, tagName, schema.tags);\n    if (!tagObj) {\n        if (value && typeof value.toJSON === 'function') {\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n            value = value.toJSON();\n        }\n        if (!value || typeof value !== 'object') {\n            const node = new Scalar(value);\n            if (ref)\n                ref.node = node;\n            return node;\n        }\n        tagObj =\n            value instanceof Map\n                ? schema[MAP]\n                : Symbol.iterator in Object(value)\n                    ? schema[SEQ]\n                    : schema[MAP];\n    }\n    if (onTagObj) {\n        onTagObj(tagObj);\n        delete ctx.onTagObj;\n    }\n    const node = tagObj?.createNode\n        ? tagObj.createNode(ctx.schema, value, ctx)\n        : typeof tagObj?.nodeClass?.from === 'function'\n            ? tagObj.nodeClass.from(ctx.schema, value, ctx)\n            : new Scalar(value);\n    if (tagName)\n        node.tag = tagName;\n    else if (!tagObj.default)\n        node.tag = tagObj.tag;\n    if (ref)\n        ref.node = node;\n    return node;\n}\n\nexport { createNode };\n","import { createNode } from '../doc/createNode.js';\nimport { isNode, isPair, isCollection, isScalar } from './identity.js';\nimport { NodeBase } from './Node.js';\n\nfunction collectionFromPath(schema, path, value) {\n    let v = value;\n    for (let i = path.length - 1; i >= 0; --i) {\n        const k = path[i];\n        if (typeof k === 'number' && Number.isInteger(k) && k >= 0) {\n            const a = [];\n            a[k] = v;\n            v = a;\n        }\n        else {\n            v = new Map([[k, v]]);\n        }\n    }\n    return createNode(v, undefined, {\n        aliasDuplicateObjects: false,\n        keepUndefined: false,\n        onAnchor: () => {\n            throw new Error('This should not happen, please report a bug.');\n        },\n        schema,\n        sourceObjects: new Map()\n    });\n}\n// Type guard is intentionally a little wrong so as to be more useful,\n// as it does not cover untypable empty non-string iterables (e.g. []).\nconst isEmptyPath = (path) => path == null ||\n    (typeof path === 'object' && !!path[Symbol.iterator]().next().done);\nclass Collection extends NodeBase {\n    constructor(type, schema) {\n        super(type);\n        Object.defineProperty(this, 'schema', {\n            value: schema,\n            configurable: true,\n            enumerable: false,\n            writable: true\n        });\n    }\n    /**\n     * Create a copy of this collection.\n     *\n     * @param schema - If defined, overwrites the original's schema\n     */\n    clone(schema) {\n        const copy = Object.create(Object.getPrototypeOf(this), Object.getOwnPropertyDescriptors(this));\n        if (schema)\n            copy.schema = schema;\n        copy.items = copy.items.map(it => isNode(it) || isPair(it) ? it.clone(schema) : it);\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /**\n     * Adds a value to the collection. For `!!map` and `!!omap` the value must\n     * be a Pair instance or a `{ key, value }` object, which may not have a key\n     * that already exists in the map.\n     */\n    addIn(path, value) {\n        if (isEmptyPath(path))\n            this.add(value);\n        else {\n            const [key, ...rest] = path;\n            const node = this.get(key, true);\n            if (isCollection(node))\n                node.addIn(rest, value);\n            else if (node === undefined && this.schema)\n                this.set(key, collectionFromPath(this.schema, rest, value));\n            else\n                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n        }\n    }\n    /**\n     * Removes a value from the collection.\n     * @returns `true` if the item was found and removed.\n     */\n    deleteIn(path) {\n        const [key, ...rest] = path;\n        if (rest.length === 0)\n            return this.delete(key);\n        const node = this.get(key, true);\n        if (isCollection(node))\n            return node.deleteIn(rest);\n        else\n            throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n    }\n    /**\n     * Returns item at `key`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    getIn(path, keepScalar) {\n        const [key, ...rest] = path;\n        const node = this.get(key, true);\n        if (rest.length === 0)\n            return !keepScalar && isScalar(node) ? node.value : node;\n        else\n            return isCollection(node) ? node.getIn(rest, keepScalar) : undefined;\n    }\n    hasAllNullValues(allowScalar) {\n        return this.items.every(node => {\n            if (!isPair(node))\n                return false;\n            const n = node.value;\n            return (n == null ||\n                (allowScalar &&\n                    isScalar(n) &&\n                    n.value == null &&\n                    !n.commentBefore &&\n                    !n.comment &&\n                    !n.tag));\n        });\n    }\n    /**\n     * Checks if the collection includes a value with the key `key`.\n     */\n    hasIn(path) {\n        const [key, ...rest] = path;\n        if (rest.length === 0)\n            return this.has(key);\n        const node = this.get(key, true);\n        return isCollection(node) ? node.hasIn(rest) : false;\n    }\n    /**\n     * Sets a value in this collection. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    setIn(path, value) {\n        const [key, ...rest] = path;\n        if (rest.length === 0) {\n            this.set(key, value);\n        }\n        else {\n            const node = this.get(key, true);\n            if (isCollection(node))\n                node.setIn(rest, value);\n            else if (node === undefined && this.schema)\n                this.set(key, collectionFromPath(this.schema, rest, value));\n            else\n                throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`);\n        }\n    }\n}\n\nexport { Collection, collectionFromPath, isEmptyPath };\n","/**\n * Stringifies a comment.\n *\n * Empty comment lines are left empty,\n * lines consisting of a single space are replaced by `#`,\n * and all other lines are prefixed with a `#`.\n */\nconst stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');\nfunction indentComment(comment, indent) {\n    if (/^\\n+$/.test(comment))\n        return comment.substring(1);\n    return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;\n}\nconst lineComment = (str, indent, comment) => str.endsWith('\\n')\n    ? indentComment(comment, indent)\n    : comment.includes('\\n')\n        ? '\\n' + indentComment(comment, indent)\n        : (str.endsWith(' ') ? '' : ' ') + comment;\n\nexport { indentComment, lineComment, stringifyComment };\n","const FOLD_FLOW = 'flow';\nconst FOLD_BLOCK = 'block';\nconst FOLD_QUOTED = 'quoted';\n/**\n * Tries to keep input at up to `lineWidth` characters, splitting only on spaces\n * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are\n * terminated with `\\n` and started with `indent`.\n */\nfunction foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) {\n    if (!lineWidth || lineWidth < 0)\n        return text;\n    if (lineWidth < minContentWidth)\n        minContentWidth = 0;\n    const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length);\n    if (text.length <= endStep)\n        return text;\n    const folds = [];\n    const escapedFolds = {};\n    let end = lineWidth - indent.length;\n    if (typeof indentAtStart === 'number') {\n        if (indentAtStart > lineWidth - Math.max(2, minContentWidth))\n            folds.push(0);\n        else\n            end = lineWidth - indentAtStart;\n    }\n    let split = undefined;\n    let prev = undefined;\n    let overflow = false;\n    let i = -1;\n    let escStart = -1;\n    let escEnd = -1;\n    if (mode === FOLD_BLOCK) {\n        i = consumeMoreIndentedLines(text, i, indent.length);\n        if (i !== -1)\n            end = i + endStep;\n    }\n    for (let ch; (ch = text[(i += 1)]);) {\n        if (mode === FOLD_QUOTED && ch === '\\\\') {\n            escStart = i;\n            switch (text[i + 1]) {\n                case 'x':\n                    i += 3;\n                    break;\n                case 'u':\n                    i += 5;\n                    break;\n                case 'U':\n                    i += 9;\n                    break;\n                default:\n                    i += 1;\n            }\n            escEnd = i;\n        }\n        if (ch === '\\n') {\n            if (mode === FOLD_BLOCK)\n                i = consumeMoreIndentedLines(text, i, indent.length);\n            end = i + indent.length + endStep;\n            split = undefined;\n        }\n        else {\n            if (ch === ' ' &&\n                prev &&\n                prev !== ' ' &&\n                prev !== '\\n' &&\n                prev !== '\\t') {\n                // space surrounded by non-space can be replaced with newline + indent\n                const next = text[i + 1];\n                if (next && next !== ' ' && next !== '\\n' && next !== '\\t')\n                    split = i;\n            }\n            if (i >= end) {\n                if (split) {\n                    folds.push(split);\n                    end = split + endStep;\n                    split = undefined;\n                }\n                else if (mode === FOLD_QUOTED) {\n                    // white-space collected at end may stretch past lineWidth\n                    while (prev === ' ' || prev === '\\t') {\n                        prev = ch;\n                        ch = text[(i += 1)];\n                        overflow = true;\n                    }\n                    // Account for newline escape, but don't break preceding escape\n                    const j = i > escEnd + 1 ? i - 2 : escStart - 1;\n                    // Bail out if lineWidth & minContentWidth are shorter than an escape string\n                    if (escapedFolds[j])\n                        return text;\n                    folds.push(j);\n                    escapedFolds[j] = true;\n                    end = j + endStep;\n                    split = undefined;\n                }\n                else {\n                    overflow = true;\n                }\n            }\n        }\n        prev = ch;\n    }\n    if (overflow && onOverflow)\n        onOverflow();\n    if (folds.length === 0)\n        return text;\n    if (onFold)\n        onFold();\n    let res = text.slice(0, folds[0]);\n    for (let i = 0; i < folds.length; ++i) {\n        const fold = folds[i];\n        const end = folds[i + 1] || text.length;\n        if (fold === 0)\n            res = `\\n${indent}${text.slice(0, end)}`;\n        else {\n            if (mode === FOLD_QUOTED && escapedFolds[fold])\n                res += `${text[fold]}\\\\`;\n            res += `\\n${indent}${text.slice(fold + 1, end)}`;\n        }\n    }\n    return res;\n}\n/**\n * Presumes `i + 1` is at the start of a line\n * @returns index of last newline in more-indented block\n */\nfunction consumeMoreIndentedLines(text, i, indent) {\n    let end = i;\n    let start = i + 1;\n    let ch = text[start];\n    while (ch === ' ' || ch === '\\t') {\n        if (i < start + indent) {\n            ch = text[++i];\n        }\n        else {\n            do {\n                ch = text[++i];\n            } while (ch && ch !== '\\n');\n            end = i;\n            start = i + 1;\n            ch = text[start];\n        }\n    }\n    return end;\n}\n\nexport { FOLD_BLOCK, FOLD_FLOW, FOLD_QUOTED, foldFlowLines };\n","import { Scalar } from '../nodes/Scalar.js';\nimport { foldFlowLines, FOLD_QUOTED, FOLD_FLOW, FOLD_BLOCK } from './foldFlowLines.js';\n\nconst getFoldOptions = (ctx, isBlock) => ({\n    indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart,\n    lineWidth: ctx.options.lineWidth,\n    minContentWidth: ctx.options.minContentWidth\n});\n// Also checks for lines starting with %, as parsing the output as YAML 1.1 will\n// presume that's starting a new document.\nconst containsDocumentMarker = (str) => /^(%|---|\\.\\.\\.)/m.test(str);\nfunction lineLengthOverLimit(str, lineWidth, indentLength) {\n    if (!lineWidth || lineWidth < 0)\n        return false;\n    const limit = lineWidth - indentLength;\n    const strLen = str.length;\n    if (strLen <= limit)\n        return false;\n    for (let i = 0, start = 0; i < strLen; ++i) {\n        if (str[i] === '\\n') {\n            if (i - start > limit)\n                return true;\n            start = i + 1;\n            if (strLen - start <= limit)\n                return false;\n        }\n    }\n    return true;\n}\nfunction doubleQuotedString(value, ctx) {\n    const json = JSON.stringify(value);\n    if (ctx.options.doubleQuotedAsJSON)\n        return json;\n    const { implicitKey } = ctx;\n    const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength;\n    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');\n    let str = '';\n    let start = 0;\n    for (let i = 0, ch = json[i]; ch; ch = json[++i]) {\n        if (ch === ' ' && json[i + 1] === '\\\\' && json[i + 2] === 'n') {\n            // space before newline needs to be escaped to not be folded\n            str += json.slice(start, i) + '\\\\ ';\n            i += 1;\n            start = i;\n            ch = '\\\\';\n        }\n        if (ch === '\\\\')\n            switch (json[i + 1]) {\n                case 'u':\n                    {\n                        str += json.slice(start, i);\n                        const code = json.substr(i + 2, 4);\n                        switch (code) {\n                            case '0000':\n                                str += '\\\\0';\n                                break;\n                            case '0007':\n                                str += '\\\\a';\n                                break;\n                            case '000b':\n                                str += '\\\\v';\n                                break;\n                            case '001b':\n                                str += '\\\\e';\n                                break;\n                            case '0085':\n                                str += '\\\\N';\n                                break;\n                            case '00a0':\n                                str += '\\\\_';\n                                break;\n                            case '2028':\n                                str += '\\\\L';\n                                break;\n                            case '2029':\n                                str += '\\\\P';\n                                break;\n                            default:\n                                if (code.substr(0, 2) === '00')\n                                    str += '\\\\x' + code.substr(2);\n                                else\n                                    str += json.substr(i, 6);\n                        }\n                        i += 5;\n                        start = i + 1;\n                    }\n                    break;\n                case 'n':\n                    if (implicitKey ||\n                        json[i + 2] === '\"' ||\n                        json.length < minMultiLineLength) {\n                        i += 1;\n                    }\n                    else {\n                        // folding will eat first newline\n                        str += json.slice(start, i) + '\\n\\n';\n                        while (json[i + 2] === '\\\\' &&\n                            json[i + 3] === 'n' &&\n                            json[i + 4] !== '\"') {\n                            str += '\\n';\n                            i += 2;\n                        }\n                        str += indent;\n                        // space after newline needs to be escaped to not be folded\n                        if (json[i + 2] === ' ')\n                            str += '\\\\';\n                        i += 1;\n                        start = i + 1;\n                    }\n                    break;\n                default:\n                    i += 1;\n            }\n    }\n    str = start ? str + json.slice(start) : json;\n    return implicitKey\n        ? str\n        : foldFlowLines(str, indent, FOLD_QUOTED, getFoldOptions(ctx, false));\n}\nfunction singleQuotedString(value, ctx) {\n    if (ctx.options.singleQuote === false ||\n        (ctx.implicitKey && value.includes('\\n')) ||\n        /[ \\t]\\n|\\n[ \\t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline\n    )\n        return doubleQuotedString(value, ctx);\n    const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : '');\n    const res = \"'\" + value.replace(/'/g, \"''\").replace(/\\n+/g, `$&\\n${indent}`) + \"'\";\n    return ctx.implicitKey\n        ? res\n        : foldFlowLines(res, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction quotedString(value, ctx) {\n    const { singleQuote } = ctx.options;\n    let qs;\n    if (singleQuote === false)\n        qs = doubleQuotedString;\n    else {\n        const hasDouble = value.includes('\"');\n        const hasSingle = value.includes(\"'\");\n        if (hasDouble && !hasSingle)\n            qs = singleQuotedString;\n        else if (hasSingle && !hasDouble)\n            qs = doubleQuotedString;\n        else\n            qs = singleQuote ? singleQuotedString : doubleQuotedString;\n    }\n    return qs(value, ctx);\n}\n// The negative lookbehind avoids a polynomial search,\n// but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind\nlet blockEndNewlines;\ntry {\n    blockEndNewlines = new RegExp('(^|(?<!\\n))\\n+(?!\\n|$)', 'g');\n}\ncatch {\n    blockEndNewlines = /\\n+(?!\\n|$)/g;\n}\nfunction blockString({ comment, type, value }, ctx, onComment, onChompKeep) {\n    const { blockQuote, commentString, lineWidth } = ctx.options;\n    // 1. Block can't end in whitespace unless the last line is non-empty.\n    // 2. Strings consisting of only whitespace are best rendered explicitly.\n    if (!blockQuote || /\\n[\\t ]+$/.test(value) || /^\\s*$/.test(value)) {\n        return quotedString(value, ctx);\n    }\n    const indent = ctx.indent ||\n        (ctx.forceBlockIndent || containsDocumentMarker(value) ? '  ' : '');\n    const literal = blockQuote === 'literal'\n        ? true\n        : blockQuote === 'folded' || type === Scalar.BLOCK_FOLDED\n            ? false\n            : type === Scalar.BLOCK_LITERAL\n                ? true\n                : !lineLengthOverLimit(value, lineWidth, indent.length);\n    if (!value)\n        return literal ? '|\\n' : '>\\n';\n    // determine chomping from whitespace at value end\n    let chomp;\n    let endStart;\n    for (endStart = value.length; endStart > 0; --endStart) {\n        const ch = value[endStart - 1];\n        if (ch !== '\\n' && ch !== '\\t' && ch !== ' ')\n            break;\n    }\n    let end = value.substring(endStart);\n    const endNlPos = end.indexOf('\\n');\n    if (endNlPos === -1) {\n        chomp = '-'; // strip\n    }\n    else if (value === end || endNlPos !== end.length - 1) {\n        chomp = '+'; // keep\n        if (onChompKeep)\n            onChompKeep();\n    }\n    else {\n        chomp = ''; // clip\n    }\n    if (end) {\n        value = value.slice(0, -end.length);\n        if (end[end.length - 1] === '\\n')\n            end = end.slice(0, -1);\n        end = end.replace(blockEndNewlines, `$&${indent}`);\n    }\n    // determine indent indicator from whitespace at value start\n    let startWithSpace = false;\n    let startEnd;\n    let startNlPos = -1;\n    for (startEnd = 0; startEnd < value.length; ++startEnd) {\n        const ch = value[startEnd];\n        if (ch === ' ')\n            startWithSpace = true;\n        else if (ch === '\\n')\n            startNlPos = startEnd;\n        else\n            break;\n    }\n    let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);\n    if (start) {\n        value = value.substring(start.length);\n        start = start.replace(/\\n+/g, `$&${indent}`);\n    }\n    const indentSize = indent ? '2' : '1'; // root is at -1\n    let header = (literal ? '|' : '>') + (startWithSpace ? indentSize : '') + chomp;\n    if (comment) {\n        header += ' ' + commentString(comment.replace(/ ?[\\r\\n]+/g, ' '));\n        if (onComment)\n            onComment();\n    }\n    if (literal) {\n        value = value.replace(/\\n+/g, `$&${indent}`);\n        return `${header}\\n${indent}${start}${value}${end}`;\n    }\n    value = value\n        .replace(/\\n+/g, '\\n$&')\n        .replace(/(?:^|\\n)([\\t ].*)(?:([\\n\\t ]*)\\n(?![\\n\\t ]))?/g, '$1$2') // more-indented lines aren't folded\n        //                ^ more-ind. ^ empty     ^ capture next empty lines only at end of indent\n        .replace(/\\n+/g, `$&${indent}`);\n    const body = foldFlowLines(`${start}${value}${end}`, indent, FOLD_BLOCK, getFoldOptions(ctx, true));\n    return `${header}\\n${indent}${body}`;\n}\nfunction plainString(item, ctx, onComment, onChompKeep) {\n    const { type, value } = item;\n    const { actualString, implicitKey, indent, indentStep, inFlow } = ctx;\n    if ((implicitKey && value.includes('\\n')) ||\n        (inFlow && /[[\\]{},]/.test(value))) {\n        return quotedString(value, ctx);\n    }\n    if (!value ||\n        /^[\\n\\t ,[\\]{}#&*!|>'\"%@`]|^[?-]$|^[?-][ \\t]|[\\n:][ \\t]|[ \\t]\\n|[\\n\\t ]#|[\\n\\t :]$/.test(value)) {\n        // not allowed:\n        // - empty string, '-' or '?'\n        // - start with an indicator character (except [?:-]) or /[?-] /\n        // - '\\n ', ': ' or ' \\n' anywhere\n        // - '#' not preceded by a non-space char\n        // - end with ' ' or ':'\n        return implicitKey || inFlow || !value.includes('\\n')\n            ? quotedString(value, ctx)\n            : blockString(item, ctx, onComment, onChompKeep);\n    }\n    if (!implicitKey &&\n        !inFlow &&\n        type !== Scalar.PLAIN &&\n        value.includes('\\n')) {\n        // Where allowed & type not set explicitly, prefer block style for multiline strings\n        return blockString(item, ctx, onComment, onChompKeep);\n    }\n    if (containsDocumentMarker(value)) {\n        if (indent === '') {\n            ctx.forceBlockIndent = true;\n            return blockString(item, ctx, onComment, onChompKeep);\n        }\n        else if (implicitKey && indent === indentStep) {\n            return quotedString(value, ctx);\n        }\n    }\n    const str = value.replace(/\\n+/g, `$&\\n${indent}`);\n    // Verify that output will be parsed as a string, as e.g. plain numbers and\n    // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'),\n    // and others in v1.1.\n    if (actualString) {\n        const test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str);\n        const { compat, tags } = ctx.doc.schema;\n        if (tags.some(test) || compat?.some(test))\n            return quotedString(value, ctx);\n    }\n    return implicitKey\n        ? str\n        : foldFlowLines(str, indent, FOLD_FLOW, getFoldOptions(ctx, false));\n}\nfunction stringifyString(item, ctx, onComment, onChompKeep) {\n    const { implicitKey, inFlow } = ctx;\n    const ss = typeof item.value === 'string'\n        ? item\n        : Object.assign({}, item, { value: String(item.value) });\n    let { type } = item;\n    if (type !== Scalar.QUOTE_DOUBLE) {\n        // force double quotes on control characters & unpaired surrogates\n        if (/[\\x00-\\x08\\x0b-\\x1f\\x7f-\\x9f\\u{D800}-\\u{DFFF}]/u.test(ss.value))\n            type = Scalar.QUOTE_DOUBLE;\n    }\n    const _stringify = (_type) => {\n        switch (_type) {\n            case Scalar.BLOCK_FOLDED:\n            case Scalar.BLOCK_LITERAL:\n                return implicitKey || inFlow\n                    ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers\n                    : blockString(ss, ctx, onComment, onChompKeep);\n            case Scalar.QUOTE_DOUBLE:\n                return doubleQuotedString(ss.value, ctx);\n            case Scalar.QUOTE_SINGLE:\n                return singleQuotedString(ss.value, ctx);\n            case Scalar.PLAIN:\n                return plainString(ss, ctx, onComment, onChompKeep);\n            default:\n                return null;\n        }\n    };\n    let res = _stringify(type);\n    if (res === null) {\n        const { defaultKeyType, defaultStringType } = ctx.options;\n        const t = (implicitKey && defaultKeyType) || defaultStringType;\n        res = _stringify(t);\n        if (res === null)\n            throw new Error(`Unsupported default string type ${t}`);\n    }\n    return res;\n}\n\nexport { stringifyString };\n","import { anchorIsValid } from '../doc/anchors.js';\nimport { isPair, isAlias, isNode, isScalar, isCollection } from '../nodes/identity.js';\nimport { stringifyComment } from './stringifyComment.js';\nimport { stringifyString } from './stringifyString.js';\n\nfunction createStringifyContext(doc, options) {\n    const opt = Object.assign({\n        blockQuote: true,\n        commentString: stringifyComment,\n        defaultKeyType: null,\n        defaultStringType: 'PLAIN',\n        directives: null,\n        doubleQuotedAsJSON: false,\n        doubleQuotedMinMultiLineLength: 40,\n        falseStr: 'false',\n        flowCollectionPadding: true,\n        indentSeq: true,\n        lineWidth: 80,\n        minContentWidth: 20,\n        nullStr: 'null',\n        simpleKeys: false,\n        singleQuote: null,\n        trueStr: 'true',\n        verifyAliasOrder: true\n    }, doc.schema.toStringOptions, options);\n    let inFlow;\n    switch (opt.collectionStyle) {\n        case 'block':\n            inFlow = false;\n            break;\n        case 'flow':\n            inFlow = true;\n            break;\n        default:\n            inFlow = null;\n    }\n    return {\n        anchors: new Set(),\n        doc,\n        flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',\n        indent: '',\n        indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : '  ',\n        inFlow,\n        options: opt\n    };\n}\nfunction getTagObject(tags, item) {\n    if (item.tag) {\n        const match = tags.filter(t => t.tag === item.tag);\n        if (match.length > 0)\n            return match.find(t => t.format === item.format) ?? match[0];\n    }\n    let tagObj = undefined;\n    let obj;\n    if (isScalar(item)) {\n        obj = item.value;\n        const match = tags.filter(t => t.identify?.(obj));\n        tagObj =\n            match.find(t => t.format === item.format) ?? match.find(t => !t.format);\n    }\n    else {\n        obj = item;\n        tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);\n    }\n    if (!tagObj) {\n        const name = obj?.constructor?.name ?? typeof obj;\n        throw new Error(`Tag not resolved for ${name} value`);\n    }\n    return tagObj;\n}\n// needs to be called before value stringifier to allow for circular anchor refs\nfunction stringifyProps(node, tagObj, { anchors, doc }) {\n    if (!doc.directives)\n        return '';\n    const props = [];\n    const anchor = (isScalar(node) || isCollection(node)) && node.anchor;\n    if (anchor && anchorIsValid(anchor)) {\n        anchors.add(anchor);\n        props.push(`&${anchor}`);\n    }\n    const tag = node.tag ? node.tag : tagObj.default ? null : tagObj.tag;\n    if (tag)\n        props.push(doc.directives.tagString(tag));\n    return props.join(' ');\n}\nfunction stringify(item, ctx, onComment, onChompKeep) {\n    if (isPair(item))\n        return item.toString(ctx, onComment, onChompKeep);\n    if (isAlias(item)) {\n        if (ctx.doc.directives)\n            return item.toString(ctx);\n        if (ctx.resolvedAliases?.has(item)) {\n            throw new TypeError(`Cannot stringify circular structure without alias nodes`);\n        }\n        else {\n            if (ctx.resolvedAliases)\n                ctx.resolvedAliases.add(item);\n            else\n                ctx.resolvedAliases = new Set([item]);\n            item = item.resolve(ctx.doc);\n        }\n    }\n    let tagObj = undefined;\n    const node = isNode(item)\n        ? item\n        : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });\n    if (!tagObj)\n        tagObj = getTagObject(ctx.doc.schema.tags, node);\n    const props = stringifyProps(node, tagObj, ctx);\n    if (props.length > 0)\n        ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;\n    const str = typeof tagObj.stringify === 'function'\n        ? tagObj.stringify(node, ctx, onComment, onChompKeep)\n        : isScalar(node)\n            ? stringifyString(node, ctx, onComment, onChompKeep)\n            : node.toString(ctx, onComment, onChompKeep);\n    if (!props)\n        return str;\n    return isScalar(node) || str[0] === '{' || str[0] === '['\n        ? `${props} ${str}`\n        : `${props}\\n${ctx.indent}${str}`;\n}\n\nexport { createStringifyContext, stringify };\n","import { isCollection, isNode, isScalar, isSeq } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyPair({ key, value }, ctx, onComment, onChompKeep) {\n    const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;\n    let keyComment = (isNode(key) && key.comment) || null;\n    if (simpleKeys) {\n        if (keyComment) {\n            throw new Error('With simple keys, key nodes cannot have comments');\n        }\n        if (isCollection(key) || (!isNode(key) && typeof key === 'object')) {\n            const msg = 'With simple keys, collection cannot be used as a key value';\n            throw new Error(msg);\n        }\n    }\n    let explicitKey = !simpleKeys &&\n        (!key ||\n            (keyComment && value == null && !ctx.inFlow) ||\n            isCollection(key) ||\n            (isScalar(key)\n                ? key.type === Scalar.BLOCK_FOLDED || key.type === Scalar.BLOCK_LITERAL\n                : typeof key === 'object'));\n    ctx = Object.assign({}, ctx, {\n        allNullValues: false,\n        implicitKey: !explicitKey && (simpleKeys || !allNullValues),\n        indent: indent + indentStep\n    });\n    let keyCommentDone = false;\n    let chompKeep = false;\n    let str = stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));\n    if (!explicitKey && !ctx.inFlow && str.length > 1024) {\n        if (simpleKeys)\n            throw new Error('With simple keys, single line scalar must not span more than 1024 characters');\n        explicitKey = true;\n    }\n    if (ctx.inFlow) {\n        if (allNullValues || value == null) {\n            if (keyCommentDone && onComment)\n                onComment();\n            return str === '' ? '?' : explicitKey ? `? ${str}` : str;\n        }\n    }\n    else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {\n        str = `? ${str}`;\n        if (keyComment && !keyCommentDone) {\n            str += lineComment(str, ctx.indent, commentString(keyComment));\n        }\n        else if (chompKeep && onChompKeep)\n            onChompKeep();\n        return str;\n    }\n    if (keyCommentDone)\n        keyComment = null;\n    if (explicitKey) {\n        if (keyComment)\n            str += lineComment(str, ctx.indent, commentString(keyComment));\n        str = `? ${str}\\n${indent}:`;\n    }\n    else {\n        str = `${str}:`;\n        if (keyComment)\n            str += lineComment(str, ctx.indent, commentString(keyComment));\n    }\n    let vsb, vcb, valueComment;\n    if (isNode(value)) {\n        vsb = !!value.spaceBefore;\n        vcb = value.commentBefore;\n        valueComment = value.comment;\n    }\n    else {\n        vsb = false;\n        vcb = null;\n        valueComment = null;\n        if (value && typeof value === 'object')\n            value = doc.createNode(value);\n    }\n    ctx.implicitKey = false;\n    if (!explicitKey && !keyComment && isScalar(value))\n        ctx.indentAtStart = str.length + 1;\n    chompKeep = false;\n    if (!indentSeq &&\n        indentStep.length >= 2 &&\n        !ctx.inFlow &&\n        !explicitKey &&\n        isSeq(value) &&\n        !value.flow &&\n        !value.tag &&\n        !value.anchor) {\n        // If indentSeq === false, consider '- ' as part of indentation where possible\n        ctx.indent = ctx.indent.substring(2);\n    }\n    let valueCommentDone = false;\n    const valueStr = stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));\n    let ws = ' ';\n    if (keyComment || vsb || vcb) {\n        ws = vsb ? '\\n' : '';\n        if (vcb) {\n            const cs = commentString(vcb);\n            ws += `\\n${indentComment(cs, ctx.indent)}`;\n        }\n        if (valueStr === '' && !ctx.inFlow) {\n            if (ws === '\\n')\n                ws = '\\n\\n';\n        }\n        else {\n            ws += `\\n${ctx.indent}`;\n        }\n    }\n    else if (!explicitKey && isCollection(value)) {\n        const vs0 = valueStr[0];\n        const nl0 = valueStr.indexOf('\\n');\n        const hasNewline = nl0 !== -1;\n        const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;\n        if (hasNewline || !flow) {\n            let hasPropsLine = false;\n            if (hasNewline && (vs0 === '&' || vs0 === '!')) {\n                let sp0 = valueStr.indexOf(' ');\n                if (vs0 === '&' &&\n                    sp0 !== -1 &&\n                    sp0 < nl0 &&\n                    valueStr[sp0 + 1] === '!') {\n                    sp0 = valueStr.indexOf(' ', sp0 + 1);\n                }\n                if (sp0 === -1 || nl0 < sp0)\n                    hasPropsLine = true;\n            }\n            if (!hasPropsLine)\n                ws = `\\n${ctx.indent}`;\n        }\n    }\n    else if (valueStr === '' || valueStr[0] === '\\n') {\n        ws = '';\n    }\n    str += ws + valueStr;\n    if (ctx.inFlow) {\n        if (valueCommentDone && onComment)\n            onComment();\n    }\n    else if (valueComment && !valueCommentDone) {\n        str += lineComment(str, ctx.indent, commentString(valueComment));\n    }\n    else if (chompKeep && onChompKeep) {\n        onChompKeep();\n    }\n    return str;\n}\n\nexport { stringifyPair };\n","function debug(logLevel, ...messages) {\n    if (logLevel === 'debug')\n        console.log(...messages);\n}\nfunction warn(logLevel, warning) {\n    if (logLevel === 'debug' || logLevel === 'warn') {\n        // https://github.com/typescript-eslint/typescript-eslint/issues/7478\n        // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n        if (typeof process !== 'undefined' && process.emitWarning)\n            process.emitWarning(warning);\n        else\n            console.warn(warning);\n    }\n}\n\nexport { debug, warn };\n","import { warn } from '../log.js';\nimport { createStringifyContext } from '../stringify/stringify.js';\nimport { isAlias, isSeq, isScalar, isMap, isNode } from './identity.js';\nimport { Scalar } from './Scalar.js';\nimport { toJS } from './toJS.js';\n\nconst MERGE_KEY = '<<';\nfunction addPairToJSMap(ctx, map, { key, value }) {\n    if (ctx?.doc.schema.merge && isMergeKey(key)) {\n        value = isAlias(value) ? value.resolve(ctx.doc) : value;\n        if (isSeq(value))\n            for (const it of value.items)\n                mergeToJSMap(ctx, map, it);\n        else if (Array.isArray(value))\n            for (const it of value)\n                mergeToJSMap(ctx, map, it);\n        else\n            mergeToJSMap(ctx, map, value);\n    }\n    else {\n        const jsKey = toJS(key, '', ctx);\n        if (map instanceof Map) {\n            map.set(jsKey, toJS(value, jsKey, ctx));\n        }\n        else if (map instanceof Set) {\n            map.add(jsKey);\n        }\n        else {\n            const stringKey = stringifyKey(key, jsKey, ctx);\n            const jsValue = toJS(value, stringKey, ctx);\n            if (stringKey in map)\n                Object.defineProperty(map, stringKey, {\n                    value: jsValue,\n                    writable: true,\n                    enumerable: true,\n                    configurable: true\n                });\n            else\n                map[stringKey] = jsValue;\n        }\n    }\n    return map;\n}\nconst isMergeKey = (key) => key === MERGE_KEY ||\n    (isScalar(key) &&\n        key.value === MERGE_KEY &&\n        (!key.type || key.type === Scalar.PLAIN));\n// If the value associated with a merge key is a single mapping node, each of\n// its key/value pairs is inserted into the current mapping, unless the key\n// already exists in it. If the value associated with the merge key is a\n// sequence, then this sequence is expected to contain mapping nodes and each\n// of these nodes is merged in turn according to its order in the sequence.\n// Keys in mapping nodes earlier in the sequence override keys specified in\n// later mapping nodes. -- http://yaml.org/type/merge.html\nfunction mergeToJSMap(ctx, map, value) {\n    const source = ctx && isAlias(value) ? value.resolve(ctx.doc) : value;\n    if (!isMap(source))\n        throw new Error('Merge sources must be maps or map aliases');\n    const srcMap = source.toJSON(null, ctx, Map);\n    for (const [key, value] of srcMap) {\n        if (map instanceof Map) {\n            if (!map.has(key))\n                map.set(key, value);\n        }\n        else if (map instanceof Set) {\n            map.add(key);\n        }\n        else if (!Object.prototype.hasOwnProperty.call(map, key)) {\n            Object.defineProperty(map, key, {\n                value,\n                writable: true,\n                enumerable: true,\n                configurable: true\n            });\n        }\n    }\n    return map;\n}\nfunction stringifyKey(key, jsKey, ctx) {\n    if (jsKey === null)\n        return '';\n    if (typeof jsKey !== 'object')\n        return String(jsKey);\n    if (isNode(key) && ctx?.doc) {\n        const strCtx = createStringifyContext(ctx.doc, {});\n        strCtx.anchors = new Set();\n        for (const node of ctx.anchors.keys())\n            strCtx.anchors.add(node.anchor);\n        strCtx.inFlow = true;\n        strCtx.inStringifyKey = true;\n        const strKey = key.toString(strCtx);\n        if (!ctx.mapKeyWarned) {\n            let jsonStr = JSON.stringify(strKey);\n            if (jsonStr.length > 40)\n                jsonStr = jsonStr.substring(0, 36) + '...\"';\n            warn(ctx.doc.options.logLevel, `Keys with collection values will be stringified due to JS Object restrictions: ${jsonStr}. Set mapAsMap: true to use object keys.`);\n            ctx.mapKeyWarned = true;\n        }\n        return strKey;\n    }\n    return JSON.stringify(jsKey);\n}\n\nexport { addPairToJSMap };\n","import { createNode } from '../doc/createNode.js';\nimport { stringifyPair } from '../stringify/stringifyPair.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { NODE_TYPE, PAIR, isNode } from './identity.js';\n\nfunction createPair(key, value, ctx) {\n    const k = createNode(key, undefined, ctx);\n    const v = createNode(value, undefined, ctx);\n    return new Pair(k, v);\n}\nclass Pair {\n    constructor(key, value = null) {\n        Object.defineProperty(this, NODE_TYPE, { value: PAIR });\n        this.key = key;\n        this.value = value;\n    }\n    clone(schema) {\n        let { key, value } = this;\n        if (isNode(key))\n            key = key.clone(schema);\n        if (isNode(value))\n            value = value.clone(schema);\n        return new Pair(key, value);\n    }\n    toJSON(_, ctx) {\n        const pair = ctx?.mapAsMap ? new Map() : {};\n        return addPairToJSMap(ctx, pair, this);\n    }\n    toString(ctx, onComment, onChompKeep) {\n        return ctx?.doc\n            ? stringifyPair(this, ctx, onComment, onChompKeep)\n            : JSON.stringify(this);\n    }\n}\n\nexport { Pair, createPair };\n","import { isNode, isPair } from '../nodes/identity.js';\nimport { stringify } from './stringify.js';\nimport { lineComment, indentComment } from './stringifyComment.js';\n\nfunction stringifyCollection(collection, ctx, options) {\n    const flow = ctx.inFlow ?? collection.flow;\n    const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;\n    return stringify(collection, ctx, options);\n}\nfunction stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {\n    const { indent, options: { commentString } } = ctx;\n    const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });\n    let chompKeep = false; // flag for the preceding node's status\n    const lines = [];\n    for (let i = 0; i < items.length; ++i) {\n        const item = items[i];\n        let comment = null;\n        if (isNode(item)) {\n            if (!chompKeep && item.spaceBefore)\n                lines.push('');\n            addCommentBefore(ctx, lines, item.commentBefore, chompKeep);\n            if (item.comment)\n                comment = item.comment;\n        }\n        else if (isPair(item)) {\n            const ik = isNode(item.key) ? item.key : null;\n            if (ik) {\n                if (!chompKeep && ik.spaceBefore)\n                    lines.push('');\n                addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);\n            }\n        }\n        chompKeep = false;\n        let str = stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));\n        if (comment)\n            str += lineComment(str, itemIndent, commentString(comment));\n        if (chompKeep && comment)\n            chompKeep = false;\n        lines.push(blockItemPrefix + str);\n    }\n    let str;\n    if (lines.length === 0) {\n        str = flowChars.start + flowChars.end;\n    }\n    else {\n        str = lines[0];\n        for (let i = 1; i < lines.length; ++i) {\n            const line = lines[i];\n            str += line ? `\\n${indent}${line}` : '\\n';\n        }\n    }\n    if (comment) {\n        str += '\\n' + indentComment(commentString(comment), indent);\n        if (onComment)\n            onComment();\n    }\n    else if (chompKeep && onChompKeep)\n        onChompKeep();\n    return str;\n}\nfunction stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {\n    const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;\n    itemIndent += indentStep;\n    const itemCtx = Object.assign({}, ctx, {\n        indent: itemIndent,\n        inFlow: true,\n        type: null\n    });\n    let reqNewline = false;\n    let linesAtValue = 0;\n    const lines = [];\n    for (let i = 0; i < items.length; ++i) {\n        const item = items[i];\n        let comment = null;\n        if (isNode(item)) {\n            if (item.spaceBefore)\n                lines.push('');\n            addCommentBefore(ctx, lines, item.commentBefore, false);\n            if (item.comment)\n                comment = item.comment;\n        }\n        else if (isPair(item)) {\n            const ik = isNode(item.key) ? item.key : null;\n            if (ik) {\n                if (ik.spaceBefore)\n                    lines.push('');\n                addCommentBefore(ctx, lines, ik.commentBefore, false);\n                if (ik.comment)\n                    reqNewline = true;\n            }\n            const iv = isNode(item.value) ? item.value : null;\n            if (iv) {\n                if (iv.comment)\n                    comment = iv.comment;\n                if (iv.commentBefore)\n                    reqNewline = true;\n            }\n            else if (item.value == null && ik?.comment) {\n                comment = ik.comment;\n            }\n        }\n        if (comment)\n            reqNewline = true;\n        let str = stringify(item, itemCtx, () => (comment = null));\n        if (i < items.length - 1)\n            str += ',';\n        if (comment)\n            str += lineComment(str, itemIndent, commentString(comment));\n        if (!reqNewline && (lines.length > linesAtValue || str.includes('\\n')))\n            reqNewline = true;\n        lines.push(str);\n        linesAtValue = lines.length;\n    }\n    const { start, end } = flowChars;\n    if (lines.length === 0) {\n        return start + end;\n    }\n    else {\n        if (!reqNewline) {\n            const len = lines.reduce((sum, line) => sum + line.length + 2, 2);\n            reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;\n        }\n        if (reqNewline) {\n            let str = start;\n            for (const line of lines)\n                str += line ? `\\n${indentStep}${indent}${line}` : '\\n';\n            return `${str}\\n${indent}${end}`;\n        }\n        else {\n            return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;\n        }\n    }\n}\nfunction addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {\n    if (comment && chompKeep)\n        comment = comment.replace(/^\\n+/, '');\n    if (comment) {\n        const ic = indentComment(commentString(comment), indent);\n        lines.push(ic.trimStart()); // Avoid double indent on first line\n    }\n}\n\nexport { stringifyCollection };\n","import { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { addPairToJSMap } from './addPairToJSMap.js';\nimport { Collection } from './Collection.js';\nimport { isPair, isScalar, MAP } from './identity.js';\nimport { Pair, createPair } from './Pair.js';\nimport { isScalarValue } from './Scalar.js';\n\nfunction findPair(items, key) {\n    const k = isScalar(key) ? key.value : key;\n    for (const it of items) {\n        if (isPair(it)) {\n            if (it.key === key || it.key === k)\n                return it;\n            if (isScalar(it.key) && it.key.value === k)\n                return it;\n        }\n    }\n    return undefined;\n}\nclass YAMLMap extends Collection {\n    static get tagName() {\n        return 'tag:yaml.org,2002:map';\n    }\n    constructor(schema) {\n        super(MAP, schema);\n        this.items = [];\n    }\n    /**\n     * A generic collection parsing method that can be extended\n     * to other node classes that inherit from YAMLMap\n     */\n    static from(schema, obj, ctx) {\n        const { keepUndefined, replacer } = ctx;\n        const map = new this(schema);\n        const add = (key, value) => {\n            if (typeof replacer === 'function')\n                value = replacer.call(obj, key, value);\n            else if (Array.isArray(replacer) && !replacer.includes(key))\n                return;\n            if (value !== undefined || keepUndefined)\n                map.items.push(createPair(key, value, ctx));\n        };\n        if (obj instanceof Map) {\n            for (const [key, value] of obj)\n                add(key, value);\n        }\n        else if (obj && typeof obj === 'object') {\n            for (const key of Object.keys(obj))\n                add(key, obj[key]);\n        }\n        if (typeof schema.sortMapEntries === 'function') {\n            map.items.sort(schema.sortMapEntries);\n        }\n        return map;\n    }\n    /**\n     * Adds a value to the collection.\n     *\n     * @param overwrite - If not set `true`, using a key that is already in the\n     *   collection will throw. Otherwise, overwrites the previous value.\n     */\n    add(pair, overwrite) {\n        let _pair;\n        if (isPair(pair))\n            _pair = pair;\n        else if (!pair || typeof pair !== 'object' || !('key' in pair)) {\n            // In TypeScript, this never happens.\n            _pair = new Pair(pair, pair?.value);\n        }\n        else\n            _pair = new Pair(pair.key, pair.value);\n        const prev = findPair(this.items, _pair.key);\n        const sortEntries = this.schema?.sortMapEntries;\n        if (prev) {\n            if (!overwrite)\n                throw new Error(`Key ${_pair.key} already set`);\n            // For scalars, keep the old node & its comments and anchors\n            if (isScalar(prev.value) && isScalarValue(_pair.value))\n                prev.value.value = _pair.value;\n            else\n                prev.value = _pair.value;\n        }\n        else if (sortEntries) {\n            const i = this.items.findIndex(item => sortEntries(_pair, item) < 0);\n            if (i === -1)\n                this.items.push(_pair);\n            else\n                this.items.splice(i, 0, _pair);\n        }\n        else {\n            this.items.push(_pair);\n        }\n    }\n    delete(key) {\n        const it = findPair(this.items, key);\n        if (!it)\n            return false;\n        const del = this.items.splice(this.items.indexOf(it), 1);\n        return del.length > 0;\n    }\n    get(key, keepScalar) {\n        const it = findPair(this.items, key);\n        const node = it?.value;\n        return (!keepScalar && isScalar(node) ? node.value : node) ?? undefined;\n    }\n    has(key) {\n        return !!findPair(this.items, key);\n    }\n    set(key, value) {\n        this.add(new Pair(key, value), true);\n    }\n    /**\n     * @param ctx - Conversion context, originally set in Document#toJS()\n     * @param {Class} Type - If set, forces the returned collection type\n     * @returns Instance of Type, Map, or Object\n     */\n    toJSON(_, ctx, Type) {\n        const map = Type ? new Type() : ctx?.mapAsMap ? new Map() : {};\n        if (ctx?.onCreate)\n            ctx.onCreate(map);\n        for (const item of this.items)\n            addPairToJSMap(ctx, map, item);\n        return map;\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        for (const item of this.items) {\n            if (!isPair(item))\n                throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`);\n        }\n        if (!ctx.allNullValues && this.hasAllNullValues(false))\n            ctx = Object.assign({}, ctx, { allNullValues: true });\n        return stringifyCollection(this, ctx, {\n            blockItemPrefix: '',\n            flowChars: { start: '{', end: '}' },\n            itemIndent: ctx.indent || '',\n            onChompKeep,\n            onComment\n        });\n    }\n}\n\nexport { YAMLMap, findPair };\n","import { isMap } from '../../nodes/identity.js';\nimport { YAMLMap } from '../../nodes/YAMLMap.js';\n\nconst map = {\n    collection: 'map',\n    default: true,\n    nodeClass: YAMLMap,\n    tag: 'tag:yaml.org,2002:map',\n    resolve(map, onError) {\n        if (!isMap(map))\n            onError('Expected a mapping for this tag');\n        return map;\n    },\n    createNode: (schema, obj, ctx) => YAMLMap.from(schema, obj, ctx)\n};\n\nexport { map };\n","import { createNode } from '../doc/createNode.js';\nimport { stringifyCollection } from '../stringify/stringifyCollection.js';\nimport { Collection } from './Collection.js';\nimport { SEQ, isScalar } from './identity.js';\nimport { isScalarValue } from './Scalar.js';\nimport { toJS } from './toJS.js';\n\nclass YAMLSeq extends Collection {\n    static get tagName() {\n        return 'tag:yaml.org,2002:seq';\n    }\n    constructor(schema) {\n        super(SEQ, schema);\n        this.items = [];\n    }\n    add(value) {\n        this.items.push(value);\n    }\n    /**\n     * Removes a value from the collection.\n     *\n     * `key` must contain a representation of an integer for this to succeed.\n     * It may be wrapped in a `Scalar`.\n     *\n     * @returns `true` if the item was found and removed.\n     */\n    delete(key) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            return false;\n        const del = this.items.splice(idx, 1);\n        return del.length > 0;\n    }\n    get(key, keepScalar) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            return undefined;\n        const it = this.items[idx];\n        return !keepScalar && isScalar(it) ? it.value : it;\n    }\n    /**\n     * Checks if the collection includes a value with the key `key`.\n     *\n     * `key` must contain a representation of an integer for this to succeed.\n     * It may be wrapped in a `Scalar`.\n     */\n    has(key) {\n        const idx = asItemIndex(key);\n        return typeof idx === 'number' && idx < this.items.length;\n    }\n    /**\n     * Sets a value in this collection. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     *\n     * If `key` does not contain a representation of an integer, this will throw.\n     * It may be wrapped in a `Scalar`.\n     */\n    set(key, value) {\n        const idx = asItemIndex(key);\n        if (typeof idx !== 'number')\n            throw new Error(`Expected a valid index, not ${key}.`);\n        const prev = this.items[idx];\n        if (isScalar(prev) && isScalarValue(value))\n            prev.value = value;\n        else\n            this.items[idx] = value;\n    }\n    toJSON(_, ctx) {\n        const seq = [];\n        if (ctx?.onCreate)\n            ctx.onCreate(seq);\n        let i = 0;\n        for (const item of this.items)\n            seq.push(toJS(item, String(i++), ctx));\n        return seq;\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        return stringifyCollection(this, ctx, {\n            blockItemPrefix: '- ',\n            flowChars: { start: '[', end: ']' },\n            itemIndent: (ctx.indent || '') + '  ',\n            onChompKeep,\n            onComment\n        });\n    }\n    static from(schema, obj, ctx) {\n        const { replacer } = ctx;\n        const seq = new this(schema);\n        if (obj && Symbol.iterator in Object(obj)) {\n            let i = 0;\n            for (let it of obj) {\n                if (typeof replacer === 'function') {\n                    const key = obj instanceof Set ? it : String(i++);\n                    it = replacer.call(obj, key, it);\n                }\n                seq.items.push(createNode(it, undefined, ctx));\n            }\n        }\n        return seq;\n    }\n}\nfunction asItemIndex(key) {\n    let idx = isScalar(key) ? key.value : key;\n    if (idx && typeof idx === 'string')\n        idx = Number(idx);\n    return typeof idx === 'number' && Number.isInteger(idx) && idx >= 0\n        ? idx\n        : null;\n}\n\nexport { YAMLSeq };\n","import { isSeq } from '../../nodes/identity.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\n\nconst seq = {\n    collection: 'seq',\n    default: true,\n    nodeClass: YAMLSeq,\n    tag: 'tag:yaml.org,2002:seq',\n    resolve(seq, onError) {\n        if (!isSeq(seq))\n            onError('Expected a sequence for this tag');\n        return seq;\n    },\n    createNode: (schema, obj, ctx) => YAMLSeq.from(schema, obj, ctx)\n};\n\nexport { seq };\n","import { stringifyString } from '../../stringify/stringifyString.js';\n\nconst string = {\n    identify: value => typeof value === 'string',\n    default: true,\n    tag: 'tag:yaml.org,2002:str',\n    resolve: str => str,\n    stringify(item, ctx, onComment, onChompKeep) {\n        ctx = Object.assign({ actualString: true }, ctx);\n        return stringifyString(item, ctx, onComment, onChompKeep);\n    }\n};\n\nexport { string };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nconst nullTag = {\n    identify: value => value == null,\n    createNode: () => new Scalar(null),\n    default: true,\n    tag: 'tag:yaml.org,2002:null',\n    test: /^(?:~|[Nn]ull|NULL)?$/,\n    resolve: () => new Scalar(null),\n    stringify: ({ source }, ctx) => typeof source === 'string' && nullTag.test.test(source)\n        ? source\n        : ctx.options.nullStr\n};\n\nexport { nullTag };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nconst boolTag = {\n    identify: value => typeof value === 'boolean',\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,\n    resolve: str => new Scalar(str[0] === 't' || str[0] === 'T'),\n    stringify({ source, value }, ctx) {\n        if (source && boolTag.test.test(source)) {\n            const sv = source[0] === 't' || source[0] === 'T';\n            if (value === sv)\n                return source;\n        }\n        return value ? ctx.options.trueStr : ctx.options.falseStr;\n    }\n};\n\nexport { boolTag };\n","function stringifyNumber({ format, minFractionDigits, tag, value }) {\n    if (typeof value === 'bigint')\n        return String(value);\n    const num = typeof value === 'number' ? value : Number(value);\n    if (!isFinite(num))\n        return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';\n    let n = JSON.stringify(value);\n    if (!format &&\n        minFractionDigits &&\n        (!tag || tag === 'tag:yaml.org,2002:float') &&\n        /^\\d/.test(n)) {\n        let i = n.indexOf('.');\n        if (i < 0) {\n            i = n.length;\n            n += '.';\n        }\n        let d = minFractionDigits - (n.length - i - 1);\n        while (d-- > 0)\n            n += '0';\n    }\n    return n;\n}\n\nexport { stringifyNumber };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst floatNaN = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n    resolve: str => str.slice(-3).toLowerCase() === 'nan'\n        ? NaN\n        : str[0] === '-'\n            ? Number.NEGATIVE_INFINITY\n            : Number.POSITIVE_INFINITY,\n    stringify: stringifyNumber\n};\nconst floatExp = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'EXP',\n    test: /^[-+]?(?:\\.[0-9]+|[0-9]+(?:\\.[0-9]*)?)[eE][-+]?[0-9]+$/,\n    resolve: str => parseFloat(str),\n    stringify(node) {\n        const num = Number(node.value);\n        return isFinite(num) ? num.toExponential() : stringifyNumber(node);\n    }\n};\nconst float = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^[-+]?(?:\\.[0-9]+|[0-9]+\\.[0-9]*)$/,\n    resolve(str) {\n        const node = new Scalar(parseFloat(str));\n        const dot = str.indexOf('.');\n        if (dot !== -1 && str[str.length - 1] === '0')\n            node.minFractionDigits = str.length - dot - 1;\n        return node;\n    },\n    stringify: stringifyNumber\n};\n\nexport { float, floatExp, floatNaN };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nconst intResolve = (str, offset, radix, { intAsBigInt }) => (intAsBigInt ? BigInt(str) : parseInt(str.substring(offset), radix));\nfunction intStringify(node, radix, prefix) {\n    const { value } = node;\n    if (intIdentify(value) && value >= 0)\n        return prefix + value.toString(radix);\n    return stringifyNumber(node);\n}\nconst intOct = {\n    identify: value => intIdentify(value) && value >= 0,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'OCT',\n    test: /^0o[0-7]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 8, opt),\n    stringify: node => intStringify(node, 8, '0o')\n};\nconst int = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    test: /^[-+]?[0-9]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n    stringify: stringifyNumber\n};\nconst intHex = {\n    identify: value => intIdentify(value) && value >= 0,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'HEX',\n    test: /^0x[0-9a-fA-F]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n    stringify: node => intStringify(node, 16, '0x')\n};\n\nexport { int, intHex, intOct };\n","import { map } from '../common/map.js';\nimport { nullTag } from '../common/null.js';\nimport { seq } from '../common/seq.js';\nimport { string } from '../common/string.js';\nimport { boolTag } from './bool.js';\nimport { floatNaN, floatExp, float } from './float.js';\nimport { intOct, int, intHex } from './int.js';\n\nconst schema = [\n    map,\n    seq,\n    string,\n    nullTag,\n    boolTag,\n    intOct,\n    int,\n    intHex,\n    floatNaN,\n    floatExp,\n    float\n];\n\nexport { schema };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { map } from '../common/map.js';\nimport { seq } from '../common/seq.js';\n\nfunction intIdentify(value) {\n    return typeof value === 'bigint' || Number.isInteger(value);\n}\nconst stringifyJSON = ({ value }) => JSON.stringify(value);\nconst jsonScalars = [\n    {\n        identify: value => typeof value === 'string',\n        default: true,\n        tag: 'tag:yaml.org,2002:str',\n        resolve: str => str,\n        stringify: stringifyJSON\n    },\n    {\n        identify: value => value == null,\n        createNode: () => new Scalar(null),\n        default: true,\n        tag: 'tag:yaml.org,2002:null',\n        test: /^null$/,\n        resolve: () => null,\n        stringify: stringifyJSON\n    },\n    {\n        identify: value => typeof value === 'boolean',\n        default: true,\n        tag: 'tag:yaml.org,2002:bool',\n        test: /^true|false$/,\n        resolve: str => str === 'true',\n        stringify: stringifyJSON\n    },\n    {\n        identify: intIdentify,\n        default: true,\n        tag: 'tag:yaml.org,2002:int',\n        test: /^-?(?:0|[1-9][0-9]*)$/,\n        resolve: (str, _onError, { intAsBigInt }) => intAsBigInt ? BigInt(str) : parseInt(str, 10),\n        stringify: ({ value }) => intIdentify(value) ? value.toString() : JSON.stringify(value)\n    },\n    {\n        identify: value => typeof value === 'number',\n        default: true,\n        tag: 'tag:yaml.org,2002:float',\n        test: /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,\n        resolve: str => parseFloat(str),\n        stringify: stringifyJSON\n    }\n];\nconst jsonError = {\n    default: true,\n    tag: '',\n    test: /^/,\n    resolve(str, onError) {\n        onError(`Unresolved plain scalar ${JSON.stringify(str)}`);\n        return str;\n    }\n};\nconst schema = [map, seq].concat(jsonScalars, jsonError);\n\nexport { schema };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyString } from '../../stringify/stringifyString.js';\n\nconst binary = {\n    identify: value => value instanceof Uint8Array, // Buffer inherits from Uint8Array\n    default: false,\n    tag: 'tag:yaml.org,2002:binary',\n    /**\n     * Returns a Buffer in node and an Uint8Array in browsers\n     *\n     * To use the resulting buffer as an image, you'll want to do something like:\n     *\n     *   const blob = new Blob([buffer], { type: 'image/jpeg' })\n     *   document.querySelector('#photo').src = URL.createObjectURL(blob)\n     */\n    resolve(src, onError) {\n        if (typeof Buffer === 'function') {\n            return Buffer.from(src, 'base64');\n        }\n        else if (typeof atob === 'function') {\n            // On IE 11, atob() can't handle newlines\n            const str = atob(src.replace(/[\\n\\r]/g, ''));\n            const buffer = new Uint8Array(str.length);\n            for (let i = 0; i < str.length; ++i)\n                buffer[i] = str.charCodeAt(i);\n            return buffer;\n        }\n        else {\n            onError('This environment does not support reading binary tags; either Buffer or atob is required');\n            return src;\n        }\n    },\n    stringify({ comment, type, value }, ctx, onComment, onChompKeep) {\n        const buf = value; // checked earlier by binary.identify()\n        let str;\n        if (typeof Buffer === 'function') {\n            str =\n                buf instanceof Buffer\n                    ? buf.toString('base64')\n                    : Buffer.from(buf.buffer).toString('base64');\n        }\n        else if (typeof btoa === 'function') {\n            let s = '';\n            for (let i = 0; i < buf.length; ++i)\n                s += String.fromCharCode(buf[i]);\n            str = btoa(s);\n        }\n        else {\n            throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required');\n        }\n        if (!type)\n            type = Scalar.BLOCK_LITERAL;\n        if (type !== Scalar.QUOTE_DOUBLE) {\n            const lineWidth = Math.max(ctx.options.lineWidth - ctx.indent.length, ctx.options.minContentWidth);\n            const n = Math.ceil(str.length / lineWidth);\n            const lines = new Array(n);\n            for (let i = 0, o = 0; i < n; ++i, o += lineWidth) {\n                lines[i] = str.substr(o, lineWidth);\n            }\n            str = lines.join(type === Scalar.BLOCK_LITERAL ? '\\n' : ' ');\n        }\n        return stringifyString({ comment, type, value: str }, ctx, onComment, onChompKeep);\n    }\n};\n\nexport { binary };\n","import { isSeq, isPair, isMap } from '../../nodes/identity.js';\nimport { Pair, createPair } from '../../nodes/Pair.js';\nimport { Scalar } from '../../nodes/Scalar.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\n\nfunction resolvePairs(seq, onError) {\n    if (isSeq(seq)) {\n        for (let i = 0; i < seq.items.length; ++i) {\n            let item = seq.items[i];\n            if (isPair(item))\n                continue;\n            else if (isMap(item)) {\n                if (item.items.length > 1)\n                    onError('Each pair must have its own sequence indicator');\n                const pair = item.items[0] || new Pair(new Scalar(null));\n                if (item.commentBefore)\n                    pair.key.commentBefore = pair.key.commentBefore\n                        ? `${item.commentBefore}\\n${pair.key.commentBefore}`\n                        : item.commentBefore;\n                if (item.comment) {\n                    const cn = pair.value ?? pair.key;\n                    cn.comment = cn.comment\n                        ? `${item.comment}\\n${cn.comment}`\n                        : item.comment;\n                }\n                item = pair;\n            }\n            seq.items[i] = isPair(item) ? item : new Pair(item);\n        }\n    }\n    else\n        onError('Expected a sequence for this tag');\n    return seq;\n}\nfunction createPairs(schema, iterable, ctx) {\n    const { replacer } = ctx;\n    const pairs = new YAMLSeq(schema);\n    pairs.tag = 'tag:yaml.org,2002:pairs';\n    let i = 0;\n    if (iterable && Symbol.iterator in Object(iterable))\n        for (let it of iterable) {\n            if (typeof replacer === 'function')\n                it = replacer.call(iterable, String(i++), it);\n            let key, value;\n            if (Array.isArray(it)) {\n                if (it.length === 2) {\n                    key = it[0];\n                    value = it[1];\n                }\n                else\n                    throw new TypeError(`Expected [key, value] tuple: ${it}`);\n            }\n            else if (it && it instanceof Object) {\n                const keys = Object.keys(it);\n                if (keys.length === 1) {\n                    key = keys[0];\n                    value = it[key];\n                }\n                else {\n                    throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);\n                }\n            }\n            else {\n                key = it;\n            }\n            pairs.items.push(createPair(key, value, ctx));\n        }\n    return pairs;\n}\nconst pairs = {\n    collection: 'seq',\n    default: false,\n    tag: 'tag:yaml.org,2002:pairs',\n    resolve: resolvePairs,\n    createNode: createPairs\n};\n\nexport { createPairs, pairs, resolvePairs };\n","import { isScalar, isPair } from '../../nodes/identity.js';\nimport { toJS } from '../../nodes/toJS.js';\nimport { YAMLMap } from '../../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../../nodes/YAMLSeq.js';\nimport { resolvePairs, createPairs } from './pairs.js';\n\nclass YAMLOMap extends YAMLSeq {\n    constructor() {\n        super();\n        this.add = YAMLMap.prototype.add.bind(this);\n        this.delete = YAMLMap.prototype.delete.bind(this);\n        this.get = YAMLMap.prototype.get.bind(this);\n        this.has = YAMLMap.prototype.has.bind(this);\n        this.set = YAMLMap.prototype.set.bind(this);\n        this.tag = YAMLOMap.tag;\n    }\n    /**\n     * If `ctx` is given, the return type is actually `Map<unknown, unknown>`,\n     * but TypeScript won't allow widening the signature of a child method.\n     */\n    toJSON(_, ctx) {\n        if (!ctx)\n            return super.toJSON(_);\n        const map = new Map();\n        if (ctx?.onCreate)\n            ctx.onCreate(map);\n        for (const pair of this.items) {\n            let key, value;\n            if (isPair(pair)) {\n                key = toJS(pair.key, '', ctx);\n                value = toJS(pair.value, key, ctx);\n            }\n            else {\n                key = toJS(pair, '', ctx);\n            }\n            if (map.has(key))\n                throw new Error('Ordered maps must not include duplicate keys');\n            map.set(key, value);\n        }\n        return map;\n    }\n    static from(schema, iterable, ctx) {\n        const pairs = createPairs(schema, iterable, ctx);\n        const omap = new this();\n        omap.items = pairs.items;\n        return omap;\n    }\n}\nYAMLOMap.tag = 'tag:yaml.org,2002:omap';\nconst omap = {\n    collection: 'seq',\n    identify: value => value instanceof Map,\n    nodeClass: YAMLOMap,\n    default: false,\n    tag: 'tag:yaml.org,2002:omap',\n    resolve(seq, onError) {\n        const pairs = resolvePairs(seq, onError);\n        const seenKeys = [];\n        for (const { key } of pairs.items) {\n            if (isScalar(key)) {\n                if (seenKeys.includes(key.value)) {\n                    onError(`Ordered maps must not include duplicate keys: ${key.value}`);\n                }\n                else {\n                    seenKeys.push(key.value);\n                }\n            }\n        }\n        return Object.assign(new YAMLOMap(), pairs);\n    },\n    createNode: (schema, iterable, ctx) => YAMLOMap.from(schema, iterable, ctx)\n};\n\nexport { YAMLOMap, omap };\n","import { Scalar } from '../../nodes/Scalar.js';\n\nfunction boolStringify({ value, source }, ctx) {\n    const boolObj = value ? trueTag : falseTag;\n    if (source && boolObj.test.test(source))\n        return source;\n    return value ? ctx.options.trueStr : ctx.options.falseStr;\n}\nconst trueTag = {\n    identify: value => value === true,\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,\n    resolve: () => new Scalar(true),\n    stringify: boolStringify\n};\nconst falseTag = {\n    identify: value => value === false,\n    default: true,\n    tag: 'tag:yaml.org,2002:bool',\n    test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,\n    resolve: () => new Scalar(false),\n    stringify: boolStringify\n};\n\nexport { falseTag, trueTag };\n","import { Scalar } from '../../nodes/Scalar.js';\nimport { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst floatNaN = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^(?:[-+]?\\.(?:inf|Inf|INF)|\\.nan|\\.NaN|\\.NAN)$/,\n    resolve: (str) => str.slice(-3).toLowerCase() === 'nan'\n        ? NaN\n        : str[0] === '-'\n            ? Number.NEGATIVE_INFINITY\n            : Number.POSITIVE_INFINITY,\n    stringify: stringifyNumber\n};\nconst floatExp = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'EXP',\n    test: /^[-+]?(?:[0-9][0-9_]*)?(?:\\.[0-9_]*)?[eE][-+]?[0-9]+$/,\n    resolve: (str) => parseFloat(str.replace(/_/g, '')),\n    stringify(node) {\n        const num = Number(node.value);\n        return isFinite(num) ? num.toExponential() : stringifyNumber(node);\n    }\n};\nconst float = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    test: /^[-+]?(?:[0-9][0-9_]*)?\\.[0-9_]*$/,\n    resolve(str) {\n        const node = new Scalar(parseFloat(str.replace(/_/g, '')));\n        const dot = str.indexOf('.');\n        if (dot !== -1) {\n            const f = str.substring(dot + 1).replace(/_/g, '');\n            if (f[f.length - 1] === '0')\n                node.minFractionDigits = f.length;\n        }\n        return node;\n    },\n    stringify: stringifyNumber\n};\n\nexport { float, floatExp, floatNaN };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\nconst intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);\nfunction intResolve(str, offset, radix, { intAsBigInt }) {\n    const sign = str[0];\n    if (sign === '-' || sign === '+')\n        offset += 1;\n    str = str.substring(offset).replace(/_/g, '');\n    if (intAsBigInt) {\n        switch (radix) {\n            case 2:\n                str = `0b${str}`;\n                break;\n            case 8:\n                str = `0o${str}`;\n                break;\n            case 16:\n                str = `0x${str}`;\n                break;\n        }\n        const n = BigInt(str);\n        return sign === '-' ? BigInt(-1) * n : n;\n    }\n    const n = parseInt(str, radix);\n    return sign === '-' ? -1 * n : n;\n}\nfunction intStringify(node, radix, prefix) {\n    const { value } = node;\n    if (intIdentify(value)) {\n        const str = value.toString(radix);\n        return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;\n    }\n    return stringifyNumber(node);\n}\nconst intBin = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'BIN',\n    test: /^[-+]?0b[0-1_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),\n    stringify: node => intStringify(node, 2, '0b')\n};\nconst intOct = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'OCT',\n    test: /^[-+]?0[0-7_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),\n    stringify: node => intStringify(node, 8, '0')\n};\nconst int = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    test: /^[-+]?[0-9][0-9_]*$/,\n    resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),\n    stringify: stringifyNumber\n};\nconst intHex = {\n    identify: intIdentify,\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'HEX',\n    test: /^[-+]?0x[0-9a-fA-F_]+$/,\n    resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),\n    stringify: node => intStringify(node, 16, '0x')\n};\n\nexport { int, intBin, intHex, intOct };\n","import { isMap, isPair, isScalar } from '../../nodes/identity.js';\nimport { Pair, createPair } from '../../nodes/Pair.js';\nimport { YAMLMap, findPair } from '../../nodes/YAMLMap.js';\n\nclass YAMLSet extends YAMLMap {\n    constructor(schema) {\n        super(schema);\n        this.tag = YAMLSet.tag;\n    }\n    add(key) {\n        let pair;\n        if (isPair(key))\n            pair = key;\n        else if (key &&\n            typeof key === 'object' &&\n            'key' in key &&\n            'value' in key &&\n            key.value === null)\n            pair = new Pair(key.key, null);\n        else\n            pair = new Pair(key, null);\n        const prev = findPair(this.items, pair.key);\n        if (!prev)\n            this.items.push(pair);\n    }\n    /**\n     * If `keepPair` is `true`, returns the Pair matching `key`.\n     * Otherwise, returns the value of that Pair's key.\n     */\n    get(key, keepPair) {\n        const pair = findPair(this.items, key);\n        return !keepPair && isPair(pair)\n            ? isScalar(pair.key)\n                ? pair.key.value\n                : pair.key\n            : pair;\n    }\n    set(key, value) {\n        if (typeof value !== 'boolean')\n            throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);\n        const prev = findPair(this.items, key);\n        if (prev && !value) {\n            this.items.splice(this.items.indexOf(prev), 1);\n        }\n        else if (!prev && value) {\n            this.items.push(new Pair(key));\n        }\n    }\n    toJSON(_, ctx) {\n        return super.toJSON(_, ctx, Set);\n    }\n    toString(ctx, onComment, onChompKeep) {\n        if (!ctx)\n            return JSON.stringify(this);\n        if (this.hasAllNullValues(true))\n            return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);\n        else\n            throw new Error('Set items must all have null values');\n    }\n    static from(schema, iterable, ctx) {\n        const { replacer } = ctx;\n        const set = new this(schema);\n        if (iterable && Symbol.iterator in Object(iterable))\n            for (let value of iterable) {\n                if (typeof replacer === 'function')\n                    value = replacer.call(iterable, value, value);\n                set.items.push(createPair(value, null, ctx));\n            }\n        return set;\n    }\n}\nYAMLSet.tag = 'tag:yaml.org,2002:set';\nconst set = {\n    collection: 'map',\n    identify: value => value instanceof Set,\n    nodeClass: YAMLSet,\n    default: false,\n    tag: 'tag:yaml.org,2002:set',\n    createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),\n    resolve(map, onError) {\n        if (isMap(map)) {\n            if (map.hasAllNullValues(true))\n                return Object.assign(new YAMLSet(), map);\n            else\n                onError('Set items must all have null values');\n        }\n        else\n            onError('Expected a mapping for this tag');\n        return map;\n    }\n};\n\nexport { YAMLSet, set };\n","import { stringifyNumber } from '../../stringify/stringifyNumber.js';\n\n/** Internal types handle bigint as number, because TS can't figure it out. */\nfunction parseSexagesimal(str, asBigInt) {\n    const sign = str[0];\n    const parts = sign === '-' || sign === '+' ? str.substring(1) : str;\n    const num = (n) => asBigInt ? BigInt(n) : Number(n);\n    const res = parts\n        .replace(/_/g, '')\n        .split(':')\n        .reduce((res, p) => res * num(60) + num(p), num(0));\n    return (sign === '-' ? num(-1) * res : res);\n}\n/**\n * hhhh:mm:ss.sss\n *\n * Internal types handle bigint as number, because TS can't figure it out.\n */\nfunction stringifySexagesimal(node) {\n    let { value } = node;\n    let num = (n) => n;\n    if (typeof value === 'bigint')\n        num = n => BigInt(n);\n    else if (isNaN(value) || !isFinite(value))\n        return stringifyNumber(node);\n    let sign = '';\n    if (value < 0) {\n        sign = '-';\n        value *= num(-1);\n    }\n    const _60 = num(60);\n    const parts = [value % _60]; // seconds, including ms\n    if (value < 60) {\n        parts.unshift(0); // at least one : is required\n    }\n    else {\n        value = (value - parts[0]) / _60;\n        parts.unshift(value % _60); // minutes\n        if (value >= 60) {\n            value = (value - parts[0]) / _60;\n            parts.unshift(value); // hours\n        }\n    }\n    return (sign +\n        parts\n            .map(n => String(n).padStart(2, '0'))\n            .join(':')\n            .replace(/000000\\d*$/, '') // % 60 may introduce error\n    );\n}\nconst intTime = {\n    identify: value => typeof value === 'bigint' || Number.isInteger(value),\n    default: true,\n    tag: 'tag:yaml.org,2002:int',\n    format: 'TIME',\n    test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,\n    resolve: (str, _onError, { intAsBigInt }) => parseSexagesimal(str, intAsBigInt),\n    stringify: stringifySexagesimal\n};\nconst floatTime = {\n    identify: value => typeof value === 'number',\n    default: true,\n    tag: 'tag:yaml.org,2002:float',\n    format: 'TIME',\n    test: /^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*$/,\n    resolve: str => parseSexagesimal(str, false),\n    stringify: stringifySexagesimal\n};\nconst timestamp = {\n    identify: value => value instanceof Date,\n    default: true,\n    tag: 'tag:yaml.org,2002:timestamp',\n    // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part\n    // may be omitted altogether, resulting in a date format. In such a case, the time part is\n    // assumed to be 00:00:00Z (start of day, UTC).\n    test: RegExp('^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd\n        '(?:' + // time is optional\n        '(?:t|T|[ \\\\t]+)' + // t | T | whitespace\n        '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)?\n        '(?:[ \\\\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30\n        ')?$'),\n    resolve(str) {\n        const match = str.match(timestamp.test);\n        if (!match)\n            throw new Error('!!timestamp expects a date, starting with yyyy-mm-dd');\n        const [, year, month, day, hour, minute, second] = match.map(Number);\n        const millisec = match[7] ? Number((match[7] + '00').substr(1, 3)) : 0;\n        let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec);\n        const tz = match[8];\n        if (tz && tz !== 'Z') {\n            let d = parseSexagesimal(tz, false);\n            if (Math.abs(d) < 30)\n                d *= 60;\n            date -= 60000 * d;\n        }\n        return new Date(date);\n    },\n    stringify: ({ value }) => value.toISOString().replace(/((T00:00)?:00)?\\.000Z$/, '')\n};\n\nexport { floatTime, intTime, timestamp };\n","import { map } from '../common/map.js';\nimport { nullTag } from '../common/null.js';\nimport { seq } from '../common/seq.js';\nimport { string } from '../common/string.js';\nimport { binary } from './binary.js';\nimport { trueTag, falseTag } from './bool.js';\nimport { floatNaN, floatExp, float } from './float.js';\nimport { intBin, intOct, int, intHex } from './int.js';\nimport { omap } from './omap.js';\nimport { pairs } from './pairs.js';\nimport { set } from './set.js';\nimport { intTime, floatTime, timestamp } from './timestamp.js';\n\nconst schema = [\n    map,\n    seq,\n    string,\n    nullTag,\n    trueTag,\n    falseTag,\n    intBin,\n    intOct,\n    int,\n    intHex,\n    floatNaN,\n    floatExp,\n    float,\n    binary,\n    omap,\n    pairs,\n    set,\n    intTime,\n    floatTime,\n    timestamp\n];\n\nexport { schema };\n","import { map } from './common/map.js';\nimport { nullTag } from './common/null.js';\nimport { seq } from './common/seq.js';\nimport { string } from './common/string.js';\nimport { boolTag } from './core/bool.js';\nimport { float, floatExp, floatNaN } from './core/float.js';\nimport { int, intHex, intOct } from './core/int.js';\nimport { schema } from './core/schema.js';\nimport { schema as schema$1 } from './json/schema.js';\nimport { binary } from './yaml-1.1/binary.js';\nimport { omap } from './yaml-1.1/omap.js';\nimport { pairs } from './yaml-1.1/pairs.js';\nimport { schema as schema$2 } from './yaml-1.1/schema.js';\nimport { set } from './yaml-1.1/set.js';\nimport { timestamp, floatTime, intTime } from './yaml-1.1/timestamp.js';\n\nconst schemas = new Map([\n    ['core', schema],\n    ['failsafe', [map, seq, string]],\n    ['json', schema$1],\n    ['yaml11', schema$2],\n    ['yaml-1.1', schema$2]\n]);\nconst tagsByName = {\n    binary,\n    bool: boolTag,\n    float,\n    floatExp,\n    floatNaN,\n    floatTime,\n    int,\n    intHex,\n    intOct,\n    intTime,\n    map,\n    null: nullTag,\n    omap,\n    pairs,\n    seq,\n    set,\n    timestamp\n};\nconst coreKnownTags = {\n    'tag:yaml.org,2002:binary': binary,\n    'tag:yaml.org,2002:omap': omap,\n    'tag:yaml.org,2002:pairs': pairs,\n    'tag:yaml.org,2002:set': set,\n    'tag:yaml.org,2002:timestamp': timestamp\n};\nfunction getTags(customTags, schemaName) {\n    let tags = schemas.get(schemaName);\n    if (!tags) {\n        if (Array.isArray(customTags))\n            tags = [];\n        else {\n            const keys = Array.from(schemas.keys())\n                .filter(key => key !== 'yaml11')\n                .map(key => JSON.stringify(key))\n                .join(', ');\n            throw new Error(`Unknown schema \"${schemaName}\"; use one of ${keys} or define customTags array`);\n        }\n    }\n    if (Array.isArray(customTags)) {\n        for (const tag of customTags)\n            tags = tags.concat(tag);\n    }\n    else if (typeof customTags === 'function') {\n        tags = customTags(tags.slice());\n    }\n    return tags.map(tag => {\n        if (typeof tag !== 'string')\n            return tag;\n        const tagObj = tagsByName[tag];\n        if (tagObj)\n            return tagObj;\n        const keys = Object.keys(tagsByName)\n            .map(key => JSON.stringify(key))\n            .join(', ');\n        throw new Error(`Unknown custom tag \"${tag}\"; use one of ${keys}`);\n    });\n}\n\nexport { coreKnownTags, getTags };\n","import { MAP, SCALAR, SEQ } from '../nodes/identity.js';\nimport { map } from './common/map.js';\nimport { seq } from './common/seq.js';\nimport { string } from './common/string.js';\nimport { getTags, coreKnownTags } from './tags.js';\n\nconst sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\nclass Schema {\n    constructor({ compat, customTags, merge, resolveKnownTags, schema, sortMapEntries, toStringDefaults }) {\n        this.compat = Array.isArray(compat)\n            ? getTags(compat, 'compat')\n            : compat\n                ? getTags(null, compat)\n                : null;\n        this.merge = !!merge;\n        this.name = (typeof schema === 'string' && schema) || 'core';\n        this.knownTags = resolveKnownTags ? coreKnownTags : {};\n        this.tags = getTags(customTags, this.name);\n        this.toStringOptions = toStringDefaults ?? null;\n        Object.defineProperty(this, MAP, { value: map });\n        Object.defineProperty(this, SCALAR, { value: string });\n        Object.defineProperty(this, SEQ, { value: seq });\n        // Used by createMap()\n        this.sortMapEntries =\n            typeof sortMapEntries === 'function'\n                ? sortMapEntries\n                : sortMapEntries === true\n                    ? sortMapEntriesByKey\n                    : null;\n    }\n    clone() {\n        const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));\n        copy.tags = this.tags.slice();\n        return copy;\n    }\n}\n\nexport { Schema };\n","import { isNode } from '../nodes/identity.js';\nimport { createStringifyContext, stringify } from './stringify.js';\nimport { indentComment, lineComment } from './stringifyComment.js';\n\nfunction stringifyDocument(doc, options) {\n    const lines = [];\n    let hasDirectives = options.directives === true;\n    if (options.directives !== false && doc.directives) {\n        const dir = doc.directives.toString(doc);\n        if (dir) {\n            lines.push(dir);\n            hasDirectives = true;\n        }\n        else if (doc.directives.docStart)\n            hasDirectives = true;\n    }\n    if (hasDirectives)\n        lines.push('---');\n    const ctx = createStringifyContext(doc, options);\n    const { commentString } = ctx.options;\n    if (doc.commentBefore) {\n        if (lines.length !== 1)\n            lines.unshift('');\n        const cs = commentString(doc.commentBefore);\n        lines.unshift(indentComment(cs, ''));\n    }\n    let chompKeep = false;\n    let contentComment = null;\n    if (doc.contents) {\n        if (isNode(doc.contents)) {\n            if (doc.contents.spaceBefore && hasDirectives)\n                lines.push('');\n            if (doc.contents.commentBefore) {\n                const cs = commentString(doc.contents.commentBefore);\n                lines.push(indentComment(cs, ''));\n            }\n            // top-level block scalars need to be indented if followed by a comment\n            ctx.forceBlockIndent = !!doc.comment;\n            contentComment = doc.contents.comment;\n        }\n        const onChompKeep = contentComment ? undefined : () => (chompKeep = true);\n        let body = stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);\n        if (contentComment)\n            body += lineComment(body, '', commentString(contentComment));\n        if ((body[0] === '|' || body[0] === '>') &&\n            lines[lines.length - 1] === '---') {\n            // Top-level block scalars with a preceding doc marker ought to use the\n            // same line for their header.\n            lines[lines.length - 1] = `--- ${body}`;\n        }\n        else\n            lines.push(body);\n    }\n    else {\n        lines.push(stringify(doc.contents, ctx));\n    }\n    if (doc.directives?.docEnd) {\n        if (doc.comment) {\n            const cs = commentString(doc.comment);\n            if (cs.includes('\\n')) {\n                lines.push('...');\n                lines.push(indentComment(cs, ''));\n            }\n            else {\n                lines.push(`... ${cs}`);\n            }\n        }\n        else {\n            lines.push('...');\n        }\n    }\n    else {\n        let dc = doc.comment;\n        if (dc && chompKeep)\n            dc = dc.replace(/^\\n+/, '');\n        if (dc) {\n            if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')\n                lines.push('');\n            lines.push(indentComment(commentString(dc), ''));\n        }\n    }\n    return lines.join('\\n') + '\\n';\n}\n\nexport { stringifyDocument };\n","import { Alias } from '../nodes/Alias.js';\nimport { isEmptyPath, collectionFromPath } from '../nodes/Collection.js';\nimport { NODE_TYPE, DOC, isNode, isCollection, isScalar } from '../nodes/identity.js';\nimport { Pair } from '../nodes/Pair.js';\nimport { toJS } from '../nodes/toJS.js';\nimport { Schema } from '../schema/Schema.js';\nimport { stringifyDocument } from '../stringify/stringifyDocument.js';\nimport { anchorNames, findNewAnchor, createNodeAnchors } from './anchors.js';\nimport { applyReviver } from './applyReviver.js';\nimport { createNode } from './createNode.js';\nimport { Directives } from './directives.js';\n\nclass Document {\n    constructor(value, replacer, options) {\n        /** A comment before this Document */\n        this.commentBefore = null;\n        /** A comment immediately after this Document */\n        this.comment = null;\n        /** Errors encountered during parsing. */\n        this.errors = [];\n        /** Warnings encountered during parsing. */\n        this.warnings = [];\n        Object.defineProperty(this, NODE_TYPE, { value: DOC });\n        let _replacer = null;\n        if (typeof replacer === 'function' || Array.isArray(replacer)) {\n            _replacer = replacer;\n        }\n        else if (options === undefined && replacer) {\n            options = replacer;\n            replacer = undefined;\n        }\n        const opt = Object.assign({\n            intAsBigInt: false,\n            keepSourceTokens: false,\n            logLevel: 'warn',\n            prettyErrors: true,\n            strict: true,\n            uniqueKeys: true,\n            version: '1.2'\n        }, options);\n        this.options = opt;\n        let { version } = opt;\n        if (options?._directives) {\n            this.directives = options._directives.atDocument();\n            if (this.directives.yaml.explicit)\n                version = this.directives.yaml.version;\n        }\n        else\n            this.directives = new Directives({ version });\n        this.setSchema(version, options);\n        // @ts-expect-error We can't really know that this matches Contents.\n        this.contents =\n            value === undefined ? null : this.createNode(value, _replacer, options);\n    }\n    /**\n     * Create a deep copy of this Document and its contents.\n     *\n     * Custom Node values that inherit from `Object` still refer to their original instances.\n     */\n    clone() {\n        const copy = Object.create(Document.prototype, {\n            [NODE_TYPE]: { value: DOC }\n        });\n        copy.commentBefore = this.commentBefore;\n        copy.comment = this.comment;\n        copy.errors = this.errors.slice();\n        copy.warnings = this.warnings.slice();\n        copy.options = Object.assign({}, this.options);\n        if (this.directives)\n            copy.directives = this.directives.clone();\n        copy.schema = this.schema.clone();\n        // @ts-expect-error We can't really know that this matches Contents.\n        copy.contents = isNode(this.contents)\n            ? this.contents.clone(copy.schema)\n            : this.contents;\n        if (this.range)\n            copy.range = this.range.slice();\n        return copy;\n    }\n    /** Adds a value to the document. */\n    add(value) {\n        if (assertCollection(this.contents))\n            this.contents.add(value);\n    }\n    /** Adds a value to the document. */\n    addIn(path, value) {\n        if (assertCollection(this.contents))\n            this.contents.addIn(path, value);\n    }\n    /**\n     * Create a new `Alias` node, ensuring that the target `node` has the required anchor.\n     *\n     * If `node` already has an anchor, `name` is ignored.\n     * Otherwise, the `node.anchor` value will be set to `name`,\n     * or if an anchor with that name is already present in the document,\n     * `name` will be used as a prefix for a new unique anchor.\n     * If `name` is undefined, the generated anchor will use 'a' as a prefix.\n     */\n    createAlias(node, name) {\n        if (!node.anchor) {\n            const prev = anchorNames(this);\n            node.anchor =\n                // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n                !name || prev.has(name) ? findNewAnchor(name || 'a', prev) : name;\n        }\n        return new Alias(node.anchor);\n    }\n    createNode(value, replacer, options) {\n        let _replacer = undefined;\n        if (typeof replacer === 'function') {\n            value = replacer.call({ '': value }, '', value);\n            _replacer = replacer;\n        }\n        else if (Array.isArray(replacer)) {\n            const keyToStr = (v) => typeof v === 'number' || v instanceof String || v instanceof Number;\n            const asStr = replacer.filter(keyToStr).map(String);\n            if (asStr.length > 0)\n                replacer = replacer.concat(asStr);\n            _replacer = replacer;\n        }\n        else if (options === undefined && replacer) {\n            options = replacer;\n            replacer = undefined;\n        }\n        const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options ?? {};\n        const { onAnchor, setAnchors, sourceObjects } = createNodeAnchors(this, \n        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n        anchorPrefix || 'a');\n        const ctx = {\n            aliasDuplicateObjects: aliasDuplicateObjects ?? true,\n            keepUndefined: keepUndefined ?? false,\n            onAnchor,\n            onTagObj,\n            replacer: _replacer,\n            schema: this.schema,\n            sourceObjects\n        };\n        const node = createNode(value, tag, ctx);\n        if (flow && isCollection(node))\n            node.flow = true;\n        setAnchors();\n        return node;\n    }\n    /**\n     * Convert a key and a value into a `Pair` using the current schema,\n     * recursively wrapping all values as `Scalar` or `Collection` nodes.\n     */\n    createPair(key, value, options = {}) {\n        const k = this.createNode(key, null, options);\n        const v = this.createNode(value, null, options);\n        return new Pair(k, v);\n    }\n    /**\n     * Removes a value from the document.\n     * @returns `true` if the item was found and removed.\n     */\n    delete(key) {\n        return assertCollection(this.contents) ? this.contents.delete(key) : false;\n    }\n    /**\n     * Removes a value from the document.\n     * @returns `true` if the item was found and removed.\n     */\n    deleteIn(path) {\n        if (isEmptyPath(path)) {\n            if (this.contents == null)\n                return false;\n            // @ts-expect-error Presumed impossible if Strict extends false\n            this.contents = null;\n            return true;\n        }\n        return assertCollection(this.contents)\n            ? this.contents.deleteIn(path)\n            : false;\n    }\n    /**\n     * Returns item at `key`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    get(key, keepScalar) {\n        return isCollection(this.contents)\n            ? this.contents.get(key, keepScalar)\n            : undefined;\n    }\n    /**\n     * Returns item at `path`, or `undefined` if not found. By default unwraps\n     * scalar values from their surrounding node; to disable set `keepScalar` to\n     * `true` (collections are always returned intact).\n     */\n    getIn(path, keepScalar) {\n        if (isEmptyPath(path))\n            return !keepScalar && isScalar(this.contents)\n                ? this.contents.value\n                : this.contents;\n        return isCollection(this.contents)\n            ? this.contents.getIn(path, keepScalar)\n            : undefined;\n    }\n    /**\n     * Checks if the document includes a value with the key `key`.\n     */\n    has(key) {\n        return isCollection(this.contents) ? this.contents.has(key) : false;\n    }\n    /**\n     * Checks if the document includes a value at `path`.\n     */\n    hasIn(path) {\n        if (isEmptyPath(path))\n            return this.contents !== undefined;\n        return isCollection(this.contents) ? this.contents.hasIn(path) : false;\n    }\n    /**\n     * Sets a value in this document. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    set(key, value) {\n        if (this.contents == null) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = collectionFromPath(this.schema, [key], value);\n        }\n        else if (assertCollection(this.contents)) {\n            this.contents.set(key, value);\n        }\n    }\n    /**\n     * Sets a value in this document. For `!!set`, `value` needs to be a\n     * boolean to add/remove the item from the set.\n     */\n    setIn(path, value) {\n        if (isEmptyPath(path)) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = value;\n        }\n        else if (this.contents == null) {\n            // @ts-expect-error We can't really know that this matches Contents.\n            this.contents = collectionFromPath(this.schema, Array.from(path), value);\n        }\n        else if (assertCollection(this.contents)) {\n            this.contents.setIn(path, value);\n        }\n    }\n    /**\n     * Change the YAML version and schema used by the document.\n     * A `null` version disables support for directives, explicit tags, anchors, and aliases.\n     * It also requires the `schema` option to be given as a `Schema` instance value.\n     *\n     * Overrides all previously set schema options.\n     */\n    setSchema(version, options = {}) {\n        if (typeof version === 'number')\n            version = String(version);\n        let opt;\n        switch (version) {\n            case '1.1':\n                if (this.directives)\n                    this.directives.yaml.version = '1.1';\n                else\n                    this.directives = new Directives({ version: '1.1' });\n                opt = { merge: true, resolveKnownTags: false, schema: 'yaml-1.1' };\n                break;\n            case '1.2':\n            case 'next':\n                if (this.directives)\n                    this.directives.yaml.version = version;\n                else\n                    this.directives = new Directives({ version });\n                opt = { merge: false, resolveKnownTags: true, schema: 'core' };\n                break;\n            case null:\n                if (this.directives)\n                    delete this.directives;\n                opt = null;\n                break;\n            default: {\n                const sv = JSON.stringify(version);\n                throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`);\n            }\n        }\n        // Not using `instanceof Schema` to allow for duck typing\n        if (options.schema instanceof Object)\n            this.schema = options.schema;\n        else if (opt)\n            this.schema = new Schema(Object.assign(opt, options));\n        else\n            throw new Error(`With a null YAML version, the { schema: Schema } option is required`);\n    }\n    // json & jsonArg are only used from toJSON()\n    toJS({ json, jsonArg, mapAsMap, maxAliasCount, onAnchor, reviver } = {}) {\n        const ctx = {\n            anchors: new Map(),\n            doc: this,\n            keep: !json,\n            mapAsMap: mapAsMap === true,\n            mapKeyWarned: false,\n            maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100\n        };\n        const res = toJS(this.contents, jsonArg ?? '', ctx);\n        if (typeof onAnchor === 'function')\n            for (const { count, res } of ctx.anchors.values())\n                onAnchor(res, count);\n        return typeof reviver === 'function'\n            ? applyReviver(reviver, { '': res }, '', res)\n            : res;\n    }\n    /**\n     * A JSON representation of the document `contents`.\n     *\n     * @param jsonArg Used by `JSON.stringify` to indicate the array index or\n     *   property name.\n     */\n    toJSON(jsonArg, onAnchor) {\n        return this.toJS({ json: true, jsonArg, mapAsMap: false, onAnchor });\n    }\n    /** A YAML representation of the document. */\n    toString(options = {}) {\n        if (this.errors.length > 0)\n            throw new Error('Document with errors cannot be stringified');\n        if ('indent' in options &&\n            (!Number.isInteger(options.indent) || Number(options.indent) <= 0)) {\n            const s = JSON.stringify(options.indent);\n            throw new Error(`\"indent\" option must be a positive integer, not ${s}`);\n        }\n        return stringifyDocument(this, options);\n    }\n}\nfunction assertCollection(contents) {\n    if (isCollection(contents))\n        return true;\n    throw new Error('Expected a YAML collection as document contents');\n}\n\nexport { Document };\n","class YAMLError extends Error {\n    constructor(name, pos, code, message) {\n        super();\n        this.name = name;\n        this.code = code;\n        this.message = message;\n        this.pos = pos;\n    }\n}\nclass YAMLParseError extends YAMLError {\n    constructor(pos, code, message) {\n        super('YAMLParseError', pos, code, message);\n    }\n}\nclass YAMLWarning extends YAMLError {\n    constructor(pos, code, message) {\n        super('YAMLWarning', pos, code, message);\n    }\n}\nconst prettifyError = (src, lc) => (error) => {\n    if (error.pos[0] === -1)\n        return;\n    error.linePos = error.pos.map(pos => lc.linePos(pos));\n    const { line, col } = error.linePos[0];\n    error.message += ` at line ${line}, column ${col}`;\n    let ci = col - 1;\n    let lineStr = src\n        .substring(lc.lineStarts[line - 1], lc.lineStarts[line])\n        .replace(/[\\n\\r]+$/, '');\n    // Trim to max 80 chars, keeping col position near the middle\n    if (ci >= 60 && lineStr.length > 80) {\n        const trimStart = Math.min(ci - 39, lineStr.length - 79);\n        lineStr = '…' + lineStr.substring(trimStart);\n        ci -= trimStart - 1;\n    }\n    if (lineStr.length > 80)\n        lineStr = lineStr.substring(0, 79) + '…';\n    // Include previous line in context if pointing at line start\n    if (line > 1 && /^ *$/.test(lineStr.substring(0, ci))) {\n        // Regexp won't match if start is trimmed\n        let prev = src.substring(lc.lineStarts[line - 2], lc.lineStarts[line - 1]);\n        if (prev.length > 80)\n            prev = prev.substring(0, 79) + '…\\n';\n        lineStr = prev + lineStr;\n    }\n    if (/[^ ]/.test(lineStr)) {\n        let count = 1;\n        const end = error.linePos[1];\n        if (end && end.line === line && end.col > col) {\n            count = Math.max(1, Math.min(end.col - col, 80 - ci));\n        }\n        const pointer = ' '.repeat(ci) + '^'.repeat(count);\n        error.message += `:\\n\\n${lineStr}\\n${pointer}\\n`;\n    }\n};\n\nexport { YAMLError, YAMLParseError, YAMLWarning, prettifyError };\n","function resolveProps(tokens, { flow, indicator, next, offset, onError, parentIndent, startOnNewline }) {\n    let spaceBefore = false;\n    let atNewline = startOnNewline;\n    let hasSpace = startOnNewline;\n    let comment = '';\n    let commentSep = '';\n    let hasNewline = false;\n    let reqSpace = false;\n    let tab = null;\n    let anchor = null;\n    let tag = null;\n    let newlineAfterProp = null;\n    let comma = null;\n    let found = null;\n    let start = null;\n    for (const token of tokens) {\n        if (reqSpace) {\n            if (token.type !== 'space' &&\n                token.type !== 'newline' &&\n                token.type !== 'comma')\n                onError(token.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n            reqSpace = false;\n        }\n        if (tab) {\n            if (atNewline && token.type !== 'comment' && token.type !== 'newline') {\n                onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n            }\n            tab = null;\n        }\n        switch (token.type) {\n            case 'space':\n                // At the doc level, tabs at line start may be parsed\n                // as leading white space rather than indentation.\n                // In a flow collection, only the parser handles indent.\n                if (!flow &&\n                    (indicator !== 'doc-start' || next?.type !== 'flow-collection') &&\n                    token.source.includes('\\t')) {\n                    tab = token;\n                }\n                hasSpace = true;\n                break;\n            case 'comment': {\n                if (!hasSpace)\n                    onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n                const cb = token.source.substring(1) || ' ';\n                if (!comment)\n                    comment = cb;\n                else\n                    comment += commentSep + cb;\n                commentSep = '';\n                atNewline = false;\n                break;\n            }\n            case 'newline':\n                if (atNewline) {\n                    if (comment)\n                        comment += token.source;\n                    else\n                        spaceBefore = true;\n                }\n                else\n                    commentSep += token.source;\n                atNewline = true;\n                hasNewline = true;\n                if (anchor || tag)\n                    newlineAfterProp = token;\n                hasSpace = true;\n                break;\n            case 'anchor':\n                if (anchor)\n                    onError(token, 'MULTIPLE_ANCHORS', 'A node can have at most one anchor');\n                if (token.source.endsWith(':'))\n                    onError(token.offset + token.source.length - 1, 'BAD_ALIAS', 'Anchor ending in : is ambiguous', true);\n                anchor = token;\n                if (start === null)\n                    start = token.offset;\n                atNewline = false;\n                hasSpace = false;\n                reqSpace = true;\n                break;\n            case 'tag': {\n                if (tag)\n                    onError(token, 'MULTIPLE_TAGS', 'A node can have at most one tag');\n                tag = token;\n                if (start === null)\n                    start = token.offset;\n                atNewline = false;\n                hasSpace = false;\n                reqSpace = true;\n                break;\n            }\n            case indicator:\n                // Could here handle preceding comments differently\n                if (anchor || tag)\n                    onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);\n                if (found)\n                    onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow ?? 'collection'}`);\n                found = token;\n                atNewline =\n                    indicator === 'seq-item-ind' || indicator === 'explicit-key-ind';\n                hasSpace = false;\n                break;\n            case 'comma':\n                if (flow) {\n                    if (comma)\n                        onError(token, 'UNEXPECTED_TOKEN', `Unexpected , in ${flow}`);\n                    comma = token;\n                    atNewline = false;\n                    hasSpace = false;\n                    break;\n                }\n            // else fallthrough\n            default:\n                onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.type} token`);\n                atNewline = false;\n                hasSpace = false;\n        }\n    }\n    const last = tokens[tokens.length - 1];\n    const end = last ? last.offset + last.source.length : offset;\n    if (reqSpace &&\n        next &&\n        next.type !== 'space' &&\n        next.type !== 'newline' &&\n        next.type !== 'comma' &&\n        (next.type !== 'scalar' || next.source !== '')) {\n        onError(next.offset, 'MISSING_CHAR', 'Tags and anchors must be separated from the next token by white space');\n    }\n    if (tab &&\n        ((atNewline && tab.indent <= parentIndent) ||\n            next?.type === 'block-map' ||\n            next?.type === 'block-seq'))\n        onError(tab, 'TAB_AS_INDENT', 'Tabs are not allowed as indentation');\n    return {\n        comma,\n        found,\n        spaceBefore,\n        comment,\n        hasNewline,\n        anchor,\n        tag,\n        newlineAfterProp,\n        end,\n        start: start ?? end\n    };\n}\n\nexport { resolveProps };\n","function containsNewline(key) {\n    if (!key)\n        return null;\n    switch (key.type) {\n        case 'alias':\n        case 'scalar':\n        case 'double-quoted-scalar':\n        case 'single-quoted-scalar':\n            if (key.source.includes('\\n'))\n                return true;\n            if (key.end)\n                for (const st of key.end)\n                    if (st.type === 'newline')\n                        return true;\n            return false;\n        case 'flow-collection':\n            for (const it of key.items) {\n                for (const st of it.start)\n                    if (st.type === 'newline')\n                        return true;\n                if (it.sep)\n                    for (const st of it.sep)\n                        if (st.type === 'newline')\n                            return true;\n                if (containsNewline(it.key) || containsNewline(it.value))\n                    return true;\n            }\n            return false;\n        default:\n            return true;\n    }\n}\n\nexport { containsNewline };\n","import { containsNewline } from './util-contains-newline.js';\n\nfunction flowIndentCheck(indent, fc, onError) {\n    if (fc?.type === 'flow-collection') {\n        const end = fc.end[0];\n        if (end.indent === indent &&\n            (end.source === ']' || end.source === '}') &&\n            containsNewline(fc)) {\n            const msg = 'Flow end indicator should be more indented than parent';\n            onError(end, 'BAD_INDENT', msg, true);\n        }\n    }\n}\n\nexport { flowIndentCheck };\n","import { isScalar } from '../nodes/identity.js';\n\nfunction mapIncludes(ctx, items, search) {\n    const { uniqueKeys } = ctx.options;\n    if (uniqueKeys === false)\n        return false;\n    const isEqual = typeof uniqueKeys === 'function'\n        ? uniqueKeys\n        : (a, b) => a === b ||\n            (isScalar(a) &&\n                isScalar(b) &&\n                a.value === b.value &&\n                !(a.value === '<<' && ctx.schema.merge));\n    return items.some(pair => isEqual(pair.key, search));\n}\n\nexport { mapIncludes };\n","import { Pair } from '../nodes/Pair.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { resolveProps } from './resolve-props.js';\nimport { containsNewline } from './util-contains-newline.js';\nimport { flowIndentCheck } from './util-flow-indent-check.js';\nimport { mapIncludes } from './util-map-includes.js';\n\nconst startColMsg = 'All mapping items must start at the same column';\nfunction resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError, tag) {\n    const NodeClass = tag?.nodeClass ?? YAMLMap;\n    const map = new NodeClass(ctx.schema);\n    if (ctx.atRoot)\n        ctx.atRoot = false;\n    let offset = bm.offset;\n    let commentEnd = null;\n    for (const collItem of bm.items) {\n        const { start, key, sep, value } = collItem;\n        // key properties\n        const keyProps = resolveProps(start, {\n            indicator: 'explicit-key-ind',\n            next: key ?? sep?.[0],\n            offset,\n            onError,\n            parentIndent: bm.indent,\n            startOnNewline: true\n        });\n        const implicitKey = !keyProps.found;\n        if (implicitKey) {\n            if (key) {\n                if (key.type === 'block-seq')\n                    onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'A block sequence may not be used as an implicit map key');\n                else if ('indent' in key && key.indent !== bm.indent)\n                    onError(offset, 'BAD_INDENT', startColMsg);\n            }\n            if (!keyProps.anchor && !keyProps.tag && !sep) {\n                commentEnd = keyProps.end;\n                if (keyProps.comment) {\n                    if (map.comment)\n                        map.comment += '\\n' + keyProps.comment;\n                    else\n                        map.comment = keyProps.comment;\n                }\n                continue;\n            }\n            if (keyProps.newlineAfterProp || containsNewline(key)) {\n                onError(key ?? start[start.length - 1], 'MULTILINE_IMPLICIT_KEY', 'Implicit keys need to be on a single line');\n            }\n        }\n        else if (keyProps.found?.indent !== bm.indent) {\n            onError(offset, 'BAD_INDENT', startColMsg);\n        }\n        // key value\n        const keyStart = keyProps.end;\n        const keyNode = key\n            ? composeNode(ctx, key, keyProps, onError)\n            : composeEmptyNode(ctx, keyStart, start, null, keyProps, onError);\n        if (ctx.schema.compat)\n            flowIndentCheck(bm.indent, key, onError);\n        if (mapIncludes(ctx, map.items, keyNode))\n            onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n        // value properties\n        const valueProps = resolveProps(sep ?? [], {\n            indicator: 'map-value-ind',\n            next: value,\n            offset: keyNode.range[2],\n            onError,\n            parentIndent: bm.indent,\n            startOnNewline: !key || key.type === 'block-scalar'\n        });\n        offset = valueProps.end;\n        if (valueProps.found) {\n            if (implicitKey) {\n                if (value?.type === 'block-map' && !valueProps.hasNewline)\n                    onError(offset, 'BLOCK_AS_IMPLICIT_KEY', 'Nested mappings are not allowed in compact mappings');\n                if (ctx.options.strict &&\n                    keyProps.start < valueProps.found.offset - 1024)\n                    onError(keyNode.range, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit block mapping key');\n            }\n            // value value\n            const valueNode = value\n                ? composeNode(ctx, value, valueProps, onError)\n                : composeEmptyNode(ctx, offset, sep, null, valueProps, onError);\n            if (ctx.schema.compat)\n                flowIndentCheck(bm.indent, value, onError);\n            offset = valueNode.range[2];\n            const pair = new Pair(keyNode, valueNode);\n            if (ctx.options.keepSourceTokens)\n                pair.srcToken = collItem;\n            map.items.push(pair);\n        }\n        else {\n            // key with no value\n            if (implicitKey)\n                onError(keyNode.range, 'MISSING_CHAR', 'Implicit map keys need to be followed by map values');\n            if (valueProps.comment) {\n                if (keyNode.comment)\n                    keyNode.comment += '\\n' + valueProps.comment;\n                else\n                    keyNode.comment = valueProps.comment;\n            }\n            const pair = new Pair(keyNode);\n            if (ctx.options.keepSourceTokens)\n                pair.srcToken = collItem;\n            map.items.push(pair);\n        }\n    }\n    if (commentEnd && commentEnd < offset)\n        onError(commentEnd, 'IMPOSSIBLE', 'Map comment with trailing content');\n    map.range = [bm.offset, offset, commentEnd ?? offset];\n    return map;\n}\n\nexport { resolveBlockMap };\n","import { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveProps } from './resolve-props.js';\nimport { flowIndentCheck } from './util-flow-indent-check.js';\n\nfunction resolveBlockSeq({ composeNode, composeEmptyNode }, ctx, bs, onError, tag) {\n    const NodeClass = tag?.nodeClass ?? YAMLSeq;\n    const seq = new NodeClass(ctx.schema);\n    if (ctx.atRoot)\n        ctx.atRoot = false;\n    let offset = bs.offset;\n    let commentEnd = null;\n    for (const { start, value } of bs.items) {\n        const props = resolveProps(start, {\n            indicator: 'seq-item-ind',\n            next: value,\n            offset,\n            onError,\n            parentIndent: bs.indent,\n            startOnNewline: true\n        });\n        if (!props.found) {\n            if (props.anchor || props.tag || value) {\n                if (value && value.type === 'block-seq')\n                    onError(props.end, 'BAD_INDENT', 'All sequence items must start at the same column');\n                else\n                    onError(offset, 'MISSING_CHAR', 'Sequence item without - indicator');\n            }\n            else {\n                commentEnd = props.end;\n                if (props.comment)\n                    seq.comment = props.comment;\n                continue;\n            }\n        }\n        const node = value\n            ? composeNode(ctx, value, props, onError)\n            : composeEmptyNode(ctx, props.end, start, null, props, onError);\n        if (ctx.schema.compat)\n            flowIndentCheck(bs.indent, value, onError);\n        offset = node.range[2];\n        seq.items.push(node);\n    }\n    seq.range = [bs.offset, offset, commentEnd ?? offset];\n    return seq;\n}\n\nexport { resolveBlockSeq };\n","function resolveEnd(end, offset, reqSpace, onError) {\n    let comment = '';\n    if (end) {\n        let hasSpace = false;\n        let sep = '';\n        for (const token of end) {\n            const { source, type } = token;\n            switch (type) {\n                case 'space':\n                    hasSpace = true;\n                    break;\n                case 'comment': {\n                    if (reqSpace && !hasSpace)\n                        onError(token, 'MISSING_CHAR', 'Comments must be separated from other tokens by white space characters');\n                    const cb = source.substring(1) || ' ';\n                    if (!comment)\n                        comment = cb;\n                    else\n                        comment += sep + cb;\n                    sep = '';\n                    break;\n                }\n                case 'newline':\n                    if (comment)\n                        sep += source;\n                    hasSpace = true;\n                    break;\n                default:\n                    onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${type} at node end`);\n            }\n            offset += source.length;\n        }\n    }\n    return { comment, offset };\n}\n\nexport { resolveEnd };\n","import { isPair } from '../nodes/identity.js';\nimport { Pair } from '../nodes/Pair.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { resolveProps } from './resolve-props.js';\nimport { containsNewline } from './util-contains-newline.js';\nimport { mapIncludes } from './util-map-includes.js';\n\nconst blockMsg = 'Block collections are not allowed within flow collections';\nconst isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');\nfunction resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError, tag) {\n    const isMap = fc.start.source === '{';\n    const fcName = isMap ? 'flow map' : 'flow sequence';\n    const NodeClass = (tag?.nodeClass ?? (isMap ? YAMLMap : YAMLSeq));\n    const coll = new NodeClass(ctx.schema);\n    coll.flow = true;\n    const atRoot = ctx.atRoot;\n    if (atRoot)\n        ctx.atRoot = false;\n    let offset = fc.offset + fc.start.source.length;\n    for (let i = 0; i < fc.items.length; ++i) {\n        const collItem = fc.items[i];\n        const { start, key, sep, value } = collItem;\n        const props = resolveProps(start, {\n            flow: fcName,\n            indicator: 'explicit-key-ind',\n            next: key ?? sep?.[0],\n            offset,\n            onError,\n            parentIndent: fc.indent,\n            startOnNewline: false\n        });\n        if (!props.found) {\n            if (!props.anchor && !props.tag && !sep && !value) {\n                if (i === 0 && props.comma)\n                    onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n                else if (i < fc.items.length - 1)\n                    onError(props.start, 'UNEXPECTED_TOKEN', `Unexpected empty item in ${fcName}`);\n                if (props.comment) {\n                    if (coll.comment)\n                        coll.comment += '\\n' + props.comment;\n                    else\n                        coll.comment = props.comment;\n                }\n                offset = props.end;\n                continue;\n            }\n            if (!isMap && ctx.options.strict && containsNewline(key))\n                onError(key, // checked by containsNewline()\n                'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n        }\n        if (i === 0) {\n            if (props.comma)\n                onError(props.comma, 'UNEXPECTED_TOKEN', `Unexpected , in ${fcName}`);\n        }\n        else {\n            if (!props.comma)\n                onError(props.start, 'MISSING_CHAR', `Missing , between ${fcName} items`);\n            if (props.comment) {\n                let prevItemComment = '';\n                loop: for (const st of start) {\n                    switch (st.type) {\n                        case 'comma':\n                        case 'space':\n                            break;\n                        case 'comment':\n                            prevItemComment = st.source.substring(1);\n                            break loop;\n                        default:\n                            break loop;\n                    }\n                }\n                if (prevItemComment) {\n                    let prev = coll.items[coll.items.length - 1];\n                    if (isPair(prev))\n                        prev = prev.value ?? prev.key;\n                    if (prev.comment)\n                        prev.comment += '\\n' + prevItemComment;\n                    else\n                        prev.comment = prevItemComment;\n                    props.comment = props.comment.substring(prevItemComment.length + 1);\n                }\n            }\n        }\n        if (!isMap && !sep && !props.found) {\n            // item is a value in a seq\n            // → key & sep are empty, start does not include ? or :\n            const valueNode = value\n                ? composeNode(ctx, value, props, onError)\n                : composeEmptyNode(ctx, props.end, sep, null, props, onError);\n            coll.items.push(valueNode);\n            offset = valueNode.range[2];\n            if (isBlock(value))\n                onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n        }\n        else {\n            // item is a key+value pair\n            // key value\n            const keyStart = props.end;\n            const keyNode = key\n                ? composeNode(ctx, key, props, onError)\n                : composeEmptyNode(ctx, keyStart, start, null, props, onError);\n            if (isBlock(key))\n                onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);\n            // value properties\n            const valueProps = resolveProps(sep ?? [], {\n                flow: fcName,\n                indicator: 'map-value-ind',\n                next: value,\n                offset: keyNode.range[2],\n                onError,\n                parentIndent: fc.indent,\n                startOnNewline: false\n            });\n            if (valueProps.found) {\n                if (!isMap && !props.found && ctx.options.strict) {\n                    if (sep)\n                        for (const st of sep) {\n                            if (st === valueProps.found)\n                                break;\n                            if (st.type === 'newline') {\n                                onError(st, 'MULTILINE_IMPLICIT_KEY', 'Implicit keys of flow sequence pairs need to be on a single line');\n                                break;\n                            }\n                        }\n                    if (props.start < valueProps.found.offset - 1024)\n                        onError(valueProps.found, 'KEY_OVER_1024_CHARS', 'The : indicator must be at most 1024 chars after the start of an implicit flow sequence key');\n                }\n            }\n            else if (value) {\n                if ('source' in value && value.source && value.source[0] === ':')\n                    onError(value, 'MISSING_CHAR', `Missing space after : in ${fcName}`);\n                else\n                    onError(valueProps.start, 'MISSING_CHAR', `Missing , or : between ${fcName} items`);\n            }\n            // value value\n            const valueNode = value\n                ? composeNode(ctx, value, valueProps, onError)\n                : valueProps.found\n                    ? composeEmptyNode(ctx, valueProps.end, sep, null, valueProps, onError)\n                    : null;\n            if (valueNode) {\n                if (isBlock(value))\n                    onError(valueNode.range, 'BLOCK_IN_FLOW', blockMsg);\n            }\n            else if (valueProps.comment) {\n                if (keyNode.comment)\n                    keyNode.comment += '\\n' + valueProps.comment;\n                else\n                    keyNode.comment = valueProps.comment;\n            }\n            const pair = new Pair(keyNode, valueNode);\n            if (ctx.options.keepSourceTokens)\n                pair.srcToken = collItem;\n            if (isMap) {\n                const map = coll;\n                if (mapIncludes(ctx, map.items, keyNode))\n                    onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');\n                map.items.push(pair);\n            }\n            else {\n                const map = new YAMLMap(ctx.schema);\n                map.flow = true;\n                map.items.push(pair);\n                coll.items.push(map);\n            }\n            offset = valueNode ? valueNode.range[2] : valueProps.end;\n        }\n    }\n    const expectedEnd = isMap ? '}' : ']';\n    const [ce, ...ee] = fc.end;\n    let cePos = offset;\n    if (ce && ce.source === expectedEnd)\n        cePos = ce.offset + ce.source.length;\n    else {\n        const name = fcName[0].toUpperCase() + fcName.substring(1);\n        const msg = atRoot\n            ? `${name} must end with a ${expectedEnd}`\n            : `${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;\n        onError(offset, atRoot ? 'MISSING_CHAR' : 'BAD_INDENT', msg);\n        if (ce && ce.source.length !== 1)\n            ee.unshift(ce);\n    }\n    if (ee.length > 0) {\n        const end = resolveEnd(ee, cePos, ctx.options.strict, onError);\n        if (end.comment) {\n            if (coll.comment)\n                coll.comment += '\\n' + end.comment;\n            else\n                coll.comment = end.comment;\n        }\n        coll.range = [fc.offset, cePos, end.offset];\n    }\n    else {\n        coll.range = [fc.offset, cePos, cePos];\n    }\n    return coll;\n}\n\nexport { resolveFlowCollection };\n","import { isNode } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { YAMLMap } from '../nodes/YAMLMap.js';\nimport { YAMLSeq } from '../nodes/YAMLSeq.js';\nimport { resolveBlockMap } from './resolve-block-map.js';\nimport { resolveBlockSeq } from './resolve-block-seq.js';\nimport { resolveFlowCollection } from './resolve-flow-collection.js';\n\nfunction resolveCollection(CN, ctx, token, onError, tagName, tag) {\n    const coll = token.type === 'block-map'\n        ? resolveBlockMap(CN, ctx, token, onError, tag)\n        : token.type === 'block-seq'\n            ? resolveBlockSeq(CN, ctx, token, onError, tag)\n            : resolveFlowCollection(CN, ctx, token, onError, tag);\n    const Coll = coll.constructor;\n    // If we got a tagName matching the class, or the tag name is '!',\n    // then use the tagName from the node class used to create it.\n    if (tagName === '!' || tagName === Coll.tagName) {\n        coll.tag = Coll.tagName;\n        return coll;\n    }\n    if (tagName)\n        coll.tag = tagName;\n    return coll;\n}\nfunction composeCollection(CN, ctx, token, props, onError) {\n    const tagToken = props.tag;\n    const tagName = !tagToken\n        ? null\n        : ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg));\n    if (token.type === 'block-seq') {\n        const { anchor, newlineAfterProp: nl } = props;\n        const lastProp = anchor && tagToken\n            ? anchor.offset > tagToken.offset\n                ? anchor\n                : tagToken\n            : (anchor ?? tagToken);\n        if (lastProp && (!nl || nl.offset < lastProp.offset)) {\n            const message = 'Missing newline after block sequence props';\n            onError(lastProp, 'MISSING_CHAR', message);\n        }\n    }\n    const expType = token.type === 'block-map'\n        ? 'map'\n        : token.type === 'block-seq'\n            ? 'seq'\n            : token.start.source === '{'\n                ? 'map'\n                : 'seq';\n    // shortcut: check if it's a generic YAMLMap or YAMLSeq\n    // before jumping into the custom tag logic.\n    if (!tagToken ||\n        !tagName ||\n        tagName === '!' ||\n        (tagName === YAMLMap.tagName && expType === 'map') ||\n        (tagName === YAMLSeq.tagName && expType === 'seq')) {\n        return resolveCollection(CN, ctx, token, onError, tagName);\n    }\n    let tag = ctx.schema.tags.find(t => t.tag === tagName && t.collection === expType);\n    if (!tag) {\n        const kt = ctx.schema.knownTags[tagName];\n        if (kt && kt.collection === expType) {\n            ctx.schema.tags.push(Object.assign({}, kt, { default: false }));\n            tag = kt;\n        }\n        else {\n            if (kt?.collection) {\n                onError(tagToken, 'BAD_COLLECTION_TYPE', `${kt.tag} used for ${expType} collection, but expects ${kt.collection}`, true);\n            }\n            else {\n                onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, true);\n            }\n            return resolveCollection(CN, ctx, token, onError, tagName);\n        }\n    }\n    const coll = resolveCollection(CN, ctx, token, onError, tagName, tag);\n    const res = tag.resolve?.(coll, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg), ctx.options) ?? coll;\n    const node = isNode(res)\n        ? res\n        : new Scalar(res);\n    node.range = coll.range;\n    node.tag = tagName;\n    if (tag?.format)\n        node.format = tag.format;\n    return node;\n}\n\nexport { composeCollection };\n","import { Scalar } from '../nodes/Scalar.js';\n\nfunction resolveBlockScalar(ctx, scalar, onError) {\n    const start = scalar.offset;\n    const header = parseBlockScalarHeader(scalar, ctx.options.strict, onError);\n    if (!header)\n        return { value: '', type: null, comment: '', range: [start, start, start] };\n    const type = header.mode === '>' ? Scalar.BLOCK_FOLDED : Scalar.BLOCK_LITERAL;\n    const lines = scalar.source ? splitLines(scalar.source) : [];\n    // determine the end of content & start of chomping\n    let chompStart = lines.length;\n    for (let i = lines.length - 1; i >= 0; --i) {\n        const content = lines[i][1];\n        if (content === '' || content === '\\r')\n            chompStart = i;\n        else\n            break;\n    }\n    // shortcut for empty contents\n    if (chompStart === 0) {\n        const value = header.chomp === '+' && lines.length > 0\n            ? '\\n'.repeat(Math.max(1, lines.length - 1))\n            : '';\n        let end = start + header.length;\n        if (scalar.source)\n            end += scalar.source.length;\n        return { value, type, comment: header.comment, range: [start, end, end] };\n    }\n    // find the indentation level to trim from start\n    let trimIndent = scalar.indent + header.indent;\n    let offset = scalar.offset + header.length;\n    let contentStart = 0;\n    for (let i = 0; i < chompStart; ++i) {\n        const [indent, content] = lines[i];\n        if (content === '' || content === '\\r') {\n            if (header.indent === 0 && indent.length > trimIndent)\n                trimIndent = indent.length;\n        }\n        else {\n            if (indent.length < trimIndent) {\n                const message = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator';\n                onError(offset + indent.length, 'MISSING_CHAR', message);\n            }\n            if (header.indent === 0)\n                trimIndent = indent.length;\n            contentStart = i;\n            if (trimIndent === 0 && !ctx.atRoot) {\n                const message = 'Block scalar values in collections must be indented';\n                onError(offset, 'BAD_INDENT', message);\n            }\n            break;\n        }\n        offset += indent.length + content.length + 1;\n    }\n    // include trailing more-indented empty lines in content\n    for (let i = lines.length - 1; i >= chompStart; --i) {\n        if (lines[i][0].length > trimIndent)\n            chompStart = i + 1;\n    }\n    let value = '';\n    let sep = '';\n    let prevMoreIndented = false;\n    // leading whitespace is kept intact\n    for (let i = 0; i < contentStart; ++i)\n        value += lines[i][0].slice(trimIndent) + '\\n';\n    for (let i = contentStart; i < chompStart; ++i) {\n        let [indent, content] = lines[i];\n        offset += indent.length + content.length + 1;\n        const crlf = content[content.length - 1] === '\\r';\n        if (crlf)\n            content = content.slice(0, -1);\n        /* istanbul ignore if already caught in lexer */\n        if (content && indent.length < trimIndent) {\n            const src = header.indent\n                ? 'explicit indentation indicator'\n                : 'first line';\n            const message = `Block scalar lines must not be less indented than their ${src}`;\n            onError(offset - content.length - (crlf ? 2 : 1), 'BAD_INDENT', message);\n            indent = '';\n        }\n        if (type === Scalar.BLOCK_LITERAL) {\n            value += sep + indent.slice(trimIndent) + content;\n            sep = '\\n';\n        }\n        else if (indent.length > trimIndent || content[0] === '\\t') {\n            // more-indented content within a folded block\n            if (sep === ' ')\n                sep = '\\n';\n            else if (!prevMoreIndented && sep === '\\n')\n                sep = '\\n\\n';\n            value += sep + indent.slice(trimIndent) + content;\n            sep = '\\n';\n            prevMoreIndented = true;\n        }\n        else if (content === '') {\n            // empty line\n            if (sep === '\\n')\n                value += '\\n';\n            else\n                sep = '\\n';\n        }\n        else {\n            value += sep + content;\n            sep = ' ';\n            prevMoreIndented = false;\n        }\n    }\n    switch (header.chomp) {\n        case '-':\n            break;\n        case '+':\n            for (let i = chompStart; i < lines.length; ++i)\n                value += '\\n' + lines[i][0].slice(trimIndent);\n            if (value[value.length - 1] !== '\\n')\n                value += '\\n';\n            break;\n        default:\n            value += '\\n';\n    }\n    const end = start + header.length + scalar.source.length;\n    return { value, type, comment: header.comment, range: [start, end, end] };\n}\nfunction parseBlockScalarHeader({ offset, props }, strict, onError) {\n    /* istanbul ignore if should not happen */\n    if (props[0].type !== 'block-scalar-header') {\n        onError(props[0], 'IMPOSSIBLE', 'Block scalar header not found');\n        return null;\n    }\n    const { source } = props[0];\n    const mode = source[0];\n    let indent = 0;\n    let chomp = '';\n    let error = -1;\n    for (let i = 1; i < source.length; ++i) {\n        const ch = source[i];\n        if (!chomp && (ch === '-' || ch === '+'))\n            chomp = ch;\n        else {\n            const n = Number(ch);\n            if (!indent && n)\n                indent = n;\n            else if (error === -1)\n                error = offset + i;\n        }\n    }\n    if (error !== -1)\n        onError(error, 'UNEXPECTED_TOKEN', `Block scalar header includes extra characters: ${source}`);\n    let hasSpace = false;\n    let comment = '';\n    let length = source.length;\n    for (let i = 1; i < props.length; ++i) {\n        const token = props[i];\n        switch (token.type) {\n            case 'space':\n                hasSpace = true;\n            // fallthrough\n            case 'newline':\n                length += token.source.length;\n                break;\n            case 'comment':\n                if (strict && !hasSpace) {\n                    const message = 'Comments must be separated from other tokens by white space characters';\n                    onError(token, 'MISSING_CHAR', message);\n                }\n                length += token.source.length;\n                comment = token.source.substring(1);\n                break;\n            case 'error':\n                onError(token, 'UNEXPECTED_TOKEN', token.message);\n                length += token.source.length;\n                break;\n            /* istanbul ignore next should not happen */\n            default: {\n                const message = `Unexpected token in block scalar header: ${token.type}`;\n                onError(token, 'UNEXPECTED_TOKEN', message);\n                const ts = token.source;\n                if (ts && typeof ts === 'string')\n                    length += ts.length;\n            }\n        }\n    }\n    return { mode, indent, chomp, comment, length };\n}\n/** @returns Array of lines split up as `[indent, content]` */\nfunction splitLines(source) {\n    const split = source.split(/\\n( *)/);\n    const first = split[0];\n    const m = first.match(/^( *)/);\n    const line0 = m?.[1]\n        ? [m[1], first.slice(m[1].length)]\n        : ['', first];\n    const lines = [line0];\n    for (let i = 1; i < split.length; i += 2)\n        lines.push([split[i], split[i + 1]]);\n    return lines;\n}\n\nexport { resolveBlockScalar };\n","import { Scalar } from '../nodes/Scalar.js';\nimport { resolveEnd } from './resolve-end.js';\n\nfunction resolveFlowScalar(scalar, strict, onError) {\n    const { offset, type, source, end } = scalar;\n    let _type;\n    let value;\n    const _onError = (rel, code, msg) => onError(offset + rel, code, msg);\n    switch (type) {\n        case 'scalar':\n            _type = Scalar.PLAIN;\n            value = plainValue(source, _onError);\n            break;\n        case 'single-quoted-scalar':\n            _type = Scalar.QUOTE_SINGLE;\n            value = singleQuotedValue(source, _onError);\n            break;\n        case 'double-quoted-scalar':\n            _type = Scalar.QUOTE_DOUBLE;\n            value = doubleQuotedValue(source, _onError);\n            break;\n        /* istanbul ignore next should not happen */\n        default:\n            onError(scalar, 'UNEXPECTED_TOKEN', `Expected a flow scalar value, but found: ${type}`);\n            return {\n                value: '',\n                type: null,\n                comment: '',\n                range: [offset, offset + source.length, offset + source.length]\n            };\n    }\n    const valueEnd = offset + source.length;\n    const re = resolveEnd(end, valueEnd, strict, onError);\n    return {\n        value,\n        type: _type,\n        comment: re.comment,\n        range: [offset, valueEnd, re.offset]\n    };\n}\nfunction plainValue(source, onError) {\n    let badChar = '';\n    switch (source[0]) {\n        /* istanbul ignore next should not happen */\n        case '\\t':\n            badChar = 'a tab character';\n            break;\n        case ',':\n            badChar = 'flow indicator character ,';\n            break;\n        case '%':\n            badChar = 'directive indicator character %';\n            break;\n        case '|':\n        case '>': {\n            badChar = `block scalar indicator ${source[0]}`;\n            break;\n        }\n        case '@':\n        case '`': {\n            badChar = `reserved character ${source[0]}`;\n            break;\n        }\n    }\n    if (badChar)\n        onError(0, 'BAD_SCALAR_START', `Plain value cannot start with ${badChar}`);\n    return foldLines(source);\n}\nfunction singleQuotedValue(source, onError) {\n    if (source[source.length - 1] !== \"'\" || source.length === 1)\n        onError(source.length, 'MISSING_CHAR', \"Missing closing 'quote\");\n    return foldLines(source.slice(1, -1)).replace(/''/g, \"'\");\n}\nfunction foldLines(source) {\n    /**\n     * The negative lookbehind here and in the `re` RegExp is to\n     * prevent causing a polynomial search time in certain cases.\n     *\n     * The try-catch is for Safari, which doesn't support this yet:\n     * https://caniuse.com/js-regexp-lookbehind\n     */\n    let first, line;\n    try {\n        first = new RegExp('(.*?)(?<![ \\t])[ \\t]*\\r?\\n', 'sy');\n        line = new RegExp('[ \\t]*(.*?)(?:(?<![ \\t])[ \\t]*)?\\r?\\n', 'sy');\n    }\n    catch (_) {\n        first = /(.*?)[ \\t]*\\r?\\n/sy;\n        line = /[ \\t]*(.*?)[ \\t]*\\r?\\n/sy;\n    }\n    let match = first.exec(source);\n    if (!match)\n        return source;\n    let res = match[1];\n    let sep = ' ';\n    let pos = first.lastIndex;\n    line.lastIndex = pos;\n    while ((match = line.exec(source))) {\n        if (match[1] === '') {\n            if (sep === '\\n')\n                res += sep;\n            else\n                sep = '\\n';\n        }\n        else {\n            res += sep + match[1];\n            sep = ' ';\n        }\n        pos = line.lastIndex;\n    }\n    const last = /[ \\t]*(.*)/sy;\n    last.lastIndex = pos;\n    match = last.exec(source);\n    return res + sep + (match?.[1] ?? '');\n}\nfunction doubleQuotedValue(source, onError) {\n    let res = '';\n    for (let i = 1; i < source.length - 1; ++i) {\n        const ch = source[i];\n        if (ch === '\\r' && source[i + 1] === '\\n')\n            continue;\n        if (ch === '\\n') {\n            const { fold, offset } = foldNewline(source, i);\n            res += fold;\n            i = offset;\n        }\n        else if (ch === '\\\\') {\n            let next = source[++i];\n            const cc = escapeCodes[next];\n            if (cc)\n                res += cc;\n            else if (next === '\\n') {\n                // skip escaped newlines, but still trim the following line\n                next = source[i + 1];\n                while (next === ' ' || next === '\\t')\n                    next = source[++i + 1];\n            }\n            else if (next === '\\r' && source[i + 1] === '\\n') {\n                // skip escaped CRLF newlines, but still trim the following line\n                next = source[++i + 1];\n                while (next === ' ' || next === '\\t')\n                    next = source[++i + 1];\n            }\n            else if (next === 'x' || next === 'u' || next === 'U') {\n                const length = { x: 2, u: 4, U: 8 }[next];\n                res += parseCharCode(source, i + 1, length, onError);\n                i += length;\n            }\n            else {\n                const raw = source.substr(i - 1, 2);\n                onError(i - 1, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n                res += raw;\n            }\n        }\n        else if (ch === ' ' || ch === '\\t') {\n            // trim trailing whitespace\n            const wsStart = i;\n            let next = source[i + 1];\n            while (next === ' ' || next === '\\t')\n                next = source[++i + 1];\n            if (next !== '\\n' && !(next === '\\r' && source[i + 2] === '\\n'))\n                res += i > wsStart ? source.slice(wsStart, i + 1) : ch;\n        }\n        else {\n            res += ch;\n        }\n    }\n    if (source[source.length - 1] !== '\"' || source.length === 1)\n        onError(source.length, 'MISSING_CHAR', 'Missing closing \"quote');\n    return res;\n}\n/**\n * Fold a single newline into a space, multiple newlines to N - 1 newlines.\n * Presumes `source[offset] === '\\n'`\n */\nfunction foldNewline(source, offset) {\n    let fold = '';\n    let ch = source[offset + 1];\n    while (ch === ' ' || ch === '\\t' || ch === '\\n' || ch === '\\r') {\n        if (ch === '\\r' && source[offset + 2] !== '\\n')\n            break;\n        if (ch === '\\n')\n            fold += '\\n';\n        offset += 1;\n        ch = source[offset + 1];\n    }\n    if (!fold)\n        fold = ' ';\n    return { fold, offset };\n}\nconst escapeCodes = {\n    '0': '\\0', // null character\n    a: '\\x07', // bell character\n    b: '\\b', // backspace\n    e: '\\x1b', // escape character\n    f: '\\f', // form feed\n    n: '\\n', // line feed\n    r: '\\r', // carriage return\n    t: '\\t', // horizontal tab\n    v: '\\v', // vertical tab\n    N: '\\u0085', // Unicode next line\n    _: '\\u00a0', // Unicode non-breaking space\n    L: '\\u2028', // Unicode line separator\n    P: '\\u2029', // Unicode paragraph separator\n    ' ': ' ',\n    '\"': '\"',\n    '/': '/',\n    '\\\\': '\\\\',\n    '\\t': '\\t'\n};\nfunction parseCharCode(source, offset, length, onError) {\n    const cc = source.substr(offset, length);\n    const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc);\n    const code = ok ? parseInt(cc, 16) : NaN;\n    if (isNaN(code)) {\n        const raw = source.substr(offset - 2, length + 2);\n        onError(offset - 2, 'BAD_DQ_ESCAPE', `Invalid escape sequence ${raw}`);\n        return raw;\n    }\n    return String.fromCodePoint(code);\n}\n\nexport { resolveFlowScalar };\n","import { SCALAR, isScalar } from '../nodes/identity.js';\nimport { Scalar } from '../nodes/Scalar.js';\nimport { resolveBlockScalar } from './resolve-block-scalar.js';\nimport { resolveFlowScalar } from './resolve-flow-scalar.js';\n\nfunction composeScalar(ctx, token, tagToken, onError) {\n    const { value, type, comment, range } = token.type === 'block-scalar'\n        ? resolveBlockScalar(ctx, token, onError)\n        : resolveFlowScalar(token, ctx.options.strict, onError);\n    const tagName = tagToken\n        ? ctx.directives.tagName(tagToken.source, msg => onError(tagToken, 'TAG_RESOLVE_FAILED', msg))\n        : null;\n    const tag = tagToken && tagName\n        ? findScalarTagByName(ctx.schema, value, tagName, tagToken, onError)\n        : token.type === 'scalar'\n            ? findScalarTagByTest(ctx, value, token, onError)\n            : ctx.schema[SCALAR];\n    let scalar;\n    try {\n        const res = tag.resolve(value, msg => onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg), ctx.options);\n        scalar = isScalar(res) ? res : new Scalar(res);\n    }\n    catch (error) {\n        const msg = error instanceof Error ? error.message : String(error);\n        onError(tagToken ?? token, 'TAG_RESOLVE_FAILED', msg);\n        scalar = new Scalar(value);\n    }\n    scalar.range = range;\n    scalar.source = value;\n    if (type)\n        scalar.type = type;\n    if (tagName)\n        scalar.tag = tagName;\n    if (tag.format)\n        scalar.format = tag.format;\n    if (comment)\n        scalar.comment = comment;\n    return scalar;\n}\nfunction findScalarTagByName(schema, value, tagName, tagToken, onError) {\n    if (tagName === '!')\n        return schema[SCALAR]; // non-specific tag\n    const matchWithTest = [];\n    for (const tag of schema.tags) {\n        if (!tag.collection && tag.tag === tagName) {\n            if (tag.default && tag.test)\n                matchWithTest.push(tag);\n            else\n                return tag;\n        }\n    }\n    for (const tag of matchWithTest)\n        if (tag.test?.test(value))\n            return tag;\n    const kt = schema.knownTags[tagName];\n    if (kt && !kt.collection) {\n        // Ensure that the known tag is available for stringifying,\n        // but does not get used by default.\n        schema.tags.push(Object.assign({}, kt, { default: false, test: undefined }));\n        return kt;\n    }\n    onError(tagToken, 'TAG_RESOLVE_FAILED', `Unresolved tag: ${tagName}`, tagName !== 'tag:yaml.org,2002:str');\n    return schema[SCALAR];\n}\nfunction findScalarTagByTest({ directives, schema }, value, token, onError) {\n    const tag = schema.tags.find(tag => tag.default && tag.test?.test(value)) || schema[SCALAR];\n    if (schema.compat) {\n        const compat = schema.compat.find(tag => tag.default && tag.test?.test(value)) ??\n            schema[SCALAR];\n        if (tag.tag !== compat.tag) {\n            const ts = directives.tagString(tag.tag);\n            const cs = directives.tagString(compat.tag);\n            const msg = `Value may be parsed as either ${ts} or ${cs}`;\n            onError(token, 'TAG_RESOLVE_FAILED', msg, true);\n        }\n    }\n    return tag;\n}\n\nexport { composeScalar };\n","function emptyScalarPosition(offset, before, pos) {\n    if (before) {\n        if (pos === null)\n            pos = before.length;\n        for (let i = pos - 1; i >= 0; --i) {\n            let st = before[i];\n            switch (st.type) {\n                case 'space':\n                case 'comment':\n                case 'newline':\n                    offset -= st.source.length;\n                    continue;\n            }\n            // Technically, an empty scalar is immediately after the last non-empty\n            // node, but it's more useful to place it after any whitespace.\n            st = before[++i];\n            while (st?.type === 'space') {\n                offset += st.source.length;\n                st = before[++i];\n            }\n            break;\n        }\n    }\n    return offset;\n}\n\nexport { emptyScalarPosition };\n","import { Alias } from '../nodes/Alias.js';\nimport { composeCollection } from './compose-collection.js';\nimport { composeScalar } from './compose-scalar.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { emptyScalarPosition } from './util-empty-scalar-position.js';\n\nconst CN = { composeNode, composeEmptyNode };\nfunction composeNode(ctx, token, props, onError) {\n    const { spaceBefore, comment, anchor, tag } = props;\n    let node;\n    let isSrcToken = true;\n    switch (token.type) {\n        case 'alias':\n            node = composeAlias(ctx, token, onError);\n            if (anchor || tag)\n                onError(token, 'ALIAS_PROPS', 'An alias node must not specify any properties');\n            break;\n        case 'scalar':\n        case 'single-quoted-scalar':\n        case 'double-quoted-scalar':\n        case 'block-scalar':\n            node = composeScalar(ctx, token, tag, onError);\n            if (anchor)\n                node.anchor = anchor.source.substring(1);\n            break;\n        case 'block-map':\n        case 'block-seq':\n        case 'flow-collection':\n            node = composeCollection(CN, ctx, token, props, onError);\n            if (anchor)\n                node.anchor = anchor.source.substring(1);\n            break;\n        default: {\n            const message = token.type === 'error'\n                ? token.message\n                : `Unsupported token (type: ${token.type})`;\n            onError(token, 'UNEXPECTED_TOKEN', message);\n            node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError);\n            isSrcToken = false;\n        }\n    }\n    if (anchor && node.anchor === '')\n        onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n    if (spaceBefore)\n        node.spaceBefore = true;\n    if (comment) {\n        if (token.type === 'scalar' && token.source === '')\n            node.comment = comment;\n        else\n            node.commentBefore = comment;\n    }\n    // @ts-expect-error Type checking misses meaning of isSrcToken\n    if (ctx.options.keepSourceTokens && isSrcToken)\n        node.srcToken = token;\n    return node;\n}\nfunction composeEmptyNode(ctx, offset, before, pos, { spaceBefore, comment, anchor, tag, end }, onError) {\n    const token = {\n        type: 'scalar',\n        offset: emptyScalarPosition(offset, before, pos),\n        indent: -1,\n        source: ''\n    };\n    const node = composeScalar(ctx, token, tag, onError);\n    if (anchor) {\n        node.anchor = anchor.source.substring(1);\n        if (node.anchor === '')\n            onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string');\n    }\n    if (spaceBefore)\n        node.spaceBefore = true;\n    if (comment) {\n        node.comment = comment;\n        node.range[2] = end;\n    }\n    return node;\n}\nfunction composeAlias({ options }, { offset, source, end }, onError) {\n    const alias = new Alias(source.substring(1));\n    if (alias.source === '')\n        onError(offset, 'BAD_ALIAS', 'Alias cannot be an empty string');\n    if (alias.source.endsWith(':'))\n        onError(offset + source.length - 1, 'BAD_ALIAS', 'Alias ending in : is ambiguous', true);\n    const valueEnd = offset + source.length;\n    const re = resolveEnd(end, valueEnd, options.strict, onError);\n    alias.range = [offset, valueEnd, re.offset];\n    if (re.comment)\n        alias.comment = re.comment;\n    return alias;\n}\n\nexport { composeEmptyNode, composeNode };\n","import { Document } from '../doc/Document.js';\nimport { composeNode, composeEmptyNode } from './compose-node.js';\nimport { resolveEnd } from './resolve-end.js';\nimport { resolveProps } from './resolve-props.js';\n\nfunction composeDoc(options, directives, { offset, start, value, end }, onError) {\n    const opts = Object.assign({ _directives: directives }, options);\n    const doc = new Document(undefined, opts);\n    const ctx = {\n        atRoot: true,\n        directives: doc.directives,\n        options: doc.options,\n        schema: doc.schema\n    };\n    const props = resolveProps(start, {\n        indicator: 'doc-start',\n        next: value ?? end?.[0],\n        offset,\n        onError,\n        parentIndent: 0,\n        startOnNewline: true\n    });\n    if (props.found) {\n        doc.directives.docStart = true;\n        if (value &&\n            (value.type === 'block-map' || value.type === 'block-seq') &&\n            !props.hasNewline)\n            onError(props.end, 'MISSING_CHAR', 'Block collection cannot start on same line with directives-end marker');\n    }\n    // @ts-expect-error If Contents is set, let's trust the user\n    doc.contents = value\n        ? composeNode(ctx, value, props, onError)\n        : composeEmptyNode(ctx, props.end, start, null, props, onError);\n    const contentEnd = doc.contents.range[2];\n    const re = resolveEnd(end, contentEnd, false, onError);\n    if (re.comment)\n        doc.comment = re.comment;\n    doc.range = [offset, contentEnd, re.offset];\n    return doc;\n}\n\nexport { composeDoc };\n","import { Directives } from '../doc/directives.js';\nimport { Document } from '../doc/Document.js';\nimport { YAMLWarning, YAMLParseError } from '../errors.js';\nimport { isCollection, isPair } from '../nodes/identity.js';\nimport { composeDoc } from './compose-doc.js';\nimport { resolveEnd } from './resolve-end.js';\n\nfunction getErrorPos(src) {\n    if (typeof src === 'number')\n        return [src, src + 1];\n    if (Array.isArray(src))\n        return src.length === 2 ? src : [src[0], src[1]];\n    const { offset, source } = src;\n    return [offset, offset + (typeof source === 'string' ? source.length : 1)];\n}\nfunction parsePrelude(prelude) {\n    let comment = '';\n    let atComment = false;\n    let afterEmptyLine = false;\n    for (let i = 0; i < prelude.length; ++i) {\n        const source = prelude[i];\n        switch (source[0]) {\n            case '#':\n                comment +=\n                    (comment === '' ? '' : afterEmptyLine ? '\\n\\n' : '\\n') +\n                        (source.substring(1) || ' ');\n                atComment = true;\n                afterEmptyLine = false;\n                break;\n            case '%':\n                if (prelude[i + 1]?.[0] !== '#')\n                    i += 1;\n                atComment = false;\n                break;\n            default:\n                // This may be wrong after doc-end, but in that case it doesn't matter\n                if (!atComment)\n                    afterEmptyLine = true;\n                atComment = false;\n        }\n    }\n    return { comment, afterEmptyLine };\n}\n/**\n * Compose a stream of CST nodes into a stream of YAML Documents.\n *\n * ```ts\n * import { Composer, Parser } from 'yaml'\n *\n * const src: string = ...\n * const tokens = new Parser().parse(src)\n * const docs = new Composer().compose(tokens)\n * ```\n */\nclass Composer {\n    constructor(options = {}) {\n        this.doc = null;\n        this.atDirectives = false;\n        this.prelude = [];\n        this.errors = [];\n        this.warnings = [];\n        this.onError = (source, code, message, warning) => {\n            const pos = getErrorPos(source);\n            if (warning)\n                this.warnings.push(new YAMLWarning(pos, code, message));\n            else\n                this.errors.push(new YAMLParseError(pos, code, message));\n        };\n        // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n        this.directives = new Directives({ version: options.version || '1.2' });\n        this.options = options;\n    }\n    decorate(doc, afterDoc) {\n        const { comment, afterEmptyLine } = parsePrelude(this.prelude);\n        //console.log({ dc: doc.comment, prelude, comment })\n        if (comment) {\n            const dc = doc.contents;\n            if (afterDoc) {\n                doc.comment = doc.comment ? `${doc.comment}\\n${comment}` : comment;\n            }\n            else if (afterEmptyLine || doc.directives.docStart || !dc) {\n                doc.commentBefore = comment;\n            }\n            else if (isCollection(dc) && !dc.flow && dc.items.length > 0) {\n                let it = dc.items[0];\n                if (isPair(it))\n                    it = it.key;\n                const cb = it.commentBefore;\n                it.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n            }\n            else {\n                const cb = dc.commentBefore;\n                dc.commentBefore = cb ? `${comment}\\n${cb}` : comment;\n            }\n        }\n        if (afterDoc) {\n            Array.prototype.push.apply(doc.errors, this.errors);\n            Array.prototype.push.apply(doc.warnings, this.warnings);\n        }\n        else {\n            doc.errors = this.errors;\n            doc.warnings = this.warnings;\n        }\n        this.prelude = [];\n        this.errors = [];\n        this.warnings = [];\n    }\n    /**\n     * Current stream status information.\n     *\n     * Mostly useful at the end of input for an empty stream.\n     */\n    streamInfo() {\n        return {\n            comment: parsePrelude(this.prelude).comment,\n            directives: this.directives,\n            errors: this.errors,\n            warnings: this.warnings\n        };\n    }\n    /**\n     * Compose tokens into documents.\n     *\n     * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n     * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n     */\n    *compose(tokens, forceDoc = false, endOffset = -1) {\n        for (const token of tokens)\n            yield* this.next(token);\n        yield* this.end(forceDoc, endOffset);\n    }\n    /** Advance the composer by one CST token. */\n    *next(token) {\n        switch (token.type) {\n            case 'directive':\n                this.directives.add(token.source, (offset, message, warning) => {\n                    const pos = getErrorPos(token);\n                    pos[0] += offset;\n                    this.onError(pos, 'BAD_DIRECTIVE', message, warning);\n                });\n                this.prelude.push(token.source);\n                this.atDirectives = true;\n                break;\n            case 'document': {\n                const doc = composeDoc(this.options, this.directives, token, this.onError);\n                if (this.atDirectives && !doc.directives.docStart)\n                    this.onError(token, 'MISSING_CHAR', 'Missing directives-end/doc-start indicator line');\n                this.decorate(doc, false);\n                if (this.doc)\n                    yield this.doc;\n                this.doc = doc;\n                this.atDirectives = false;\n                break;\n            }\n            case 'byte-order-mark':\n            case 'space':\n                break;\n            case 'comment':\n            case 'newline':\n                this.prelude.push(token.source);\n                break;\n            case 'error': {\n                const msg = token.source\n                    ? `${token.message}: ${JSON.stringify(token.source)}`\n                    : token.message;\n                const error = new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg);\n                if (this.atDirectives || !this.doc)\n                    this.errors.push(error);\n                else\n                    this.doc.errors.push(error);\n                break;\n            }\n            case 'doc-end': {\n                if (!this.doc) {\n                    const msg = 'Unexpected doc-end without preceding document';\n                    this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', msg));\n                    break;\n                }\n                this.doc.directives.docEnd = true;\n                const end = resolveEnd(token.end, token.offset + token.source.length, this.doc.options.strict, this.onError);\n                this.decorate(this.doc, true);\n                if (end.comment) {\n                    const dc = this.doc.comment;\n                    this.doc.comment = dc ? `${dc}\\n${end.comment}` : end.comment;\n                }\n                this.doc.range[2] = end.offset;\n                break;\n            }\n            default:\n                this.errors.push(new YAMLParseError(getErrorPos(token), 'UNEXPECTED_TOKEN', `Unsupported token ${token.type}`));\n        }\n    }\n    /**\n     * Call at end of input to yield any remaining document.\n     *\n     * @param forceDoc - If the stream contains no document, still emit a final document including any comments and directives that would be applied to a subsequent document.\n     * @param endOffset - Should be set if `forceDoc` is also set, to set the document range end and to indicate errors correctly.\n     */\n    *end(forceDoc = false, endOffset = -1) {\n        if (this.doc) {\n            this.decorate(this.doc, true);\n            yield this.doc;\n            this.doc = null;\n        }\n        else if (forceDoc) {\n            const opts = Object.assign({ _directives: this.directives }, this.options);\n            const doc = new Document(undefined, opts);\n            if (this.atDirectives)\n                this.onError(endOffset, 'MISSING_CHAR', 'Missing directives-end indicator line');\n            doc.range = [0, endOffset, endOffset];\n            this.decorate(doc, false);\n            yield doc;\n        }\n    }\n}\n\nexport { Composer };\n","import { resolveBlockScalar } from '../compose/resolve-block-scalar.js';\nimport { resolveFlowScalar } from '../compose/resolve-flow-scalar.js';\nimport { YAMLParseError } from '../errors.js';\nimport { stringifyString } from '../stringify/stringifyString.js';\n\nfunction resolveAsScalar(token, strict = true, onError) {\n    if (token) {\n        const _onError = (pos, code, message) => {\n            const offset = typeof pos === 'number' ? pos : Array.isArray(pos) ? pos[0] : pos.offset;\n            if (onError)\n                onError(offset, code, message);\n            else\n                throw new YAMLParseError([offset, offset + 1], code, message);\n        };\n        switch (token.type) {\n            case 'scalar':\n            case 'single-quoted-scalar':\n            case 'double-quoted-scalar':\n                return resolveFlowScalar(token, strict, _onError);\n            case 'block-scalar':\n                return resolveBlockScalar({ options: { strict } }, token, _onError);\n        }\n    }\n    return null;\n}\n/**\n * Create a new scalar token with `value`\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.end Comments and whitespace after the end of the value, or after the block scalar header. If undefined, a newline will be added.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.indent The indent level of the token.\n * @param context.inFlow Is this scalar within a flow collection? This may affect the resolved type of the token's value.\n * @param context.offset The offset position of the token.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction createScalarToken(value, context) {\n    const { implicitKey = false, indent, inFlow = false, offset = -1, type = 'PLAIN' } = context;\n    const source = stringifyString({ type, value }, {\n        implicitKey,\n        indent: indent > 0 ? ' '.repeat(indent) : '',\n        inFlow,\n        options: { blockQuote: true, lineWidth: -1 }\n    });\n    const end = context.end ?? [\n        { type: 'newline', offset: -1, indent, source: '\\n' }\n    ];\n    switch (source[0]) {\n        case '|':\n        case '>': {\n            const he = source.indexOf('\\n');\n            const head = source.substring(0, he);\n            const body = source.substring(he + 1) + '\\n';\n            const props = [\n                { type: 'block-scalar-header', offset, indent, source: head }\n            ];\n            if (!addEndtoBlockProps(props, end))\n                props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n            return { type: 'block-scalar', offset, indent, props, source: body };\n        }\n        case '\"':\n            return { type: 'double-quoted-scalar', offset, indent, source, end };\n        case \"'\":\n            return { type: 'single-quoted-scalar', offset, indent, source, end };\n        default:\n            return { type: 'scalar', offset, indent, source, end };\n    }\n}\n/**\n * Set the value of `token` to the given string `value`, overwriting any previous contents and type that it may have.\n *\n * Best efforts are made to retain any comments previously associated with the `token`,\n * though all contents within a collection's `items` will be overwritten.\n *\n * Values that represent an actual string but may be parsed as a different type should use a `type` other than `'PLAIN'`,\n * as this function does not support any schema operations and won't check for such conflicts.\n *\n * @param token Any token. If it does not include an `indent` value, the value will be stringified as if it were an implicit key.\n * @param value The string representation of the value, which will have its content properly indented.\n * @param context.afterKey In most cases, values after a key should have an additional level of indentation.\n * @param context.implicitKey Being within an implicit key may affect the resolved type of the token's value.\n * @param context.inFlow Being within a flow collection may affect the resolved type of the token's value.\n * @param context.type The preferred type of the scalar token. If undefined, the previous type of the `token` will be used, defaulting to `'PLAIN'`.\n */\nfunction setScalarValue(token, value, context = {}) {\n    let { afterKey = false, implicitKey = false, inFlow = false, type } = context;\n    let indent = 'indent' in token ? token.indent : null;\n    if (afterKey && typeof indent === 'number')\n        indent += 2;\n    if (!type)\n        switch (token.type) {\n            case 'single-quoted-scalar':\n                type = 'QUOTE_SINGLE';\n                break;\n            case 'double-quoted-scalar':\n                type = 'QUOTE_DOUBLE';\n                break;\n            case 'block-scalar': {\n                const header = token.props[0];\n                if (header.type !== 'block-scalar-header')\n                    throw new Error('Invalid block scalar header');\n                type = header.source[0] === '>' ? 'BLOCK_FOLDED' : 'BLOCK_LITERAL';\n                break;\n            }\n            default:\n                type = 'PLAIN';\n        }\n    const source = stringifyString({ type, value }, {\n        implicitKey: implicitKey || indent === null,\n        indent: indent !== null && indent > 0 ? ' '.repeat(indent) : '',\n        inFlow,\n        options: { blockQuote: true, lineWidth: -1 }\n    });\n    switch (source[0]) {\n        case '|':\n        case '>':\n            setBlockScalarValue(token, source);\n            break;\n        case '\"':\n            setFlowScalarValue(token, source, 'double-quoted-scalar');\n            break;\n        case \"'\":\n            setFlowScalarValue(token, source, 'single-quoted-scalar');\n            break;\n        default:\n            setFlowScalarValue(token, source, 'scalar');\n    }\n}\nfunction setBlockScalarValue(token, source) {\n    const he = source.indexOf('\\n');\n    const head = source.substring(0, he);\n    const body = source.substring(he + 1) + '\\n';\n    if (token.type === 'block-scalar') {\n        const header = token.props[0];\n        if (header.type !== 'block-scalar-header')\n            throw new Error('Invalid block scalar header');\n        header.source = head;\n        token.source = body;\n    }\n    else {\n        const { offset } = token;\n        const indent = 'indent' in token ? token.indent : -1;\n        const props = [\n            { type: 'block-scalar-header', offset, indent, source: head }\n        ];\n        if (!addEndtoBlockProps(props, 'end' in token ? token.end : undefined))\n            props.push({ type: 'newline', offset: -1, indent, source: '\\n' });\n        for (const key of Object.keys(token))\n            if (key !== 'type' && key !== 'offset')\n                delete token[key];\n        Object.assign(token, { type: 'block-scalar', indent, props, source: body });\n    }\n}\n/** @returns `true` if last token is a newline */\nfunction addEndtoBlockProps(props, end) {\n    if (end)\n        for (const st of end)\n            switch (st.type) {\n                case 'space':\n                case 'comment':\n                    props.push(st);\n                    break;\n                case 'newline':\n                    props.push(st);\n                    return true;\n            }\n    return false;\n}\nfunction setFlowScalarValue(token, source, type) {\n    switch (token.type) {\n        case 'scalar':\n        case 'double-quoted-scalar':\n        case 'single-quoted-scalar':\n            token.type = type;\n            token.source = source;\n            break;\n        case 'block-scalar': {\n            const end = token.props.slice(1);\n            let oa = source.length;\n            if (token.props[0].type === 'block-scalar-header')\n                oa -= token.props[0].source.length;\n            for (const tok of end)\n                tok.offset += oa;\n            delete token.props;\n            Object.assign(token, { type, source, end });\n            break;\n        }\n        case 'block-map':\n        case 'block-seq': {\n            const offset = token.offset + source.length;\n            const nl = { type: 'newline', offset, indent: token.indent, source: '\\n' };\n            delete token.items;\n            Object.assign(token, { type, source, end: [nl] });\n            break;\n        }\n        default: {\n            const indent = 'indent' in token ? token.indent : -1;\n            const end = 'end' in token && Array.isArray(token.end)\n                ? token.end.filter(st => st.type === 'space' ||\n                    st.type === 'comment' ||\n                    st.type === 'newline')\n                : [];\n            for (const key of Object.keys(token))\n                if (key !== 'type' && key !== 'offset')\n                    delete token[key];\n            Object.assign(token, { type, indent, source, end });\n        }\n    }\n}\n\nexport { createScalarToken, resolveAsScalar, setScalarValue };\n","/**\n * Stringify a CST document, token, or collection item\n *\n * Fair warning: This applies no validation whatsoever, and\n * simply concatenates the sources in their logical order.\n */\nconst stringify = (cst) => 'type' in cst ? stringifyToken(cst) : stringifyItem(cst);\nfunction stringifyToken(token) {\n    switch (token.type) {\n        case 'block-scalar': {\n            let res = '';\n            for (const tok of token.props)\n                res += stringifyToken(tok);\n            return res + token.source;\n        }\n        case 'block-map':\n        case 'block-seq': {\n            let res = '';\n            for (const item of token.items)\n                res += stringifyItem(item);\n            return res;\n        }\n        case 'flow-collection': {\n            let res = token.start.source;\n            for (const item of token.items)\n                res += stringifyItem(item);\n            for (const st of token.end)\n                res += st.source;\n            return res;\n        }\n        case 'document': {\n            let res = stringifyItem(token);\n            if (token.end)\n                for (const st of token.end)\n                    res += st.source;\n            return res;\n        }\n        default: {\n            let res = token.source;\n            if ('end' in token && token.end)\n                for (const st of token.end)\n                    res += st.source;\n            return res;\n        }\n    }\n}\nfunction stringifyItem({ start, key, sep, value }) {\n    let res = '';\n    for (const st of start)\n        res += st.source;\n    if (key)\n        res += stringifyToken(key);\n    if (sep)\n        for (const st of sep)\n            res += st.source;\n    if (value)\n        res += stringifyToken(value);\n    return res;\n}\n\nexport { stringify };\n","const BREAK = Symbol('break visit');\nconst SKIP = Symbol('skip children');\nconst REMOVE = Symbol('remove item');\n/**\n * Apply a visitor to a CST document or item.\n *\n * Walks through the tree (depth-first) starting from the root, calling a\n * `visitor` function with two arguments when entering each item:\n *   - `item`: The current item, which included the following members:\n *     - `start: SourceToken[]` – Source tokens before the key or value,\n *       possibly including its anchor or tag.\n *     - `key?: Token | null` – Set for pair values. May then be `null`, if\n *       the key before the `:` separator is empty.\n *     - `sep?: SourceToken[]` – Source tokens between the key and the value,\n *       which should include the `:` map value indicator if `value` is set.\n *     - `value?: Token` – The value of a sequence item, or of a map pair.\n *   - `path`: The steps from the root to the current node, as an array of\n *     `['key' | 'value', number]` tuples.\n *\n * The return value of the visitor may be used to control the traversal:\n *   - `undefined` (default): Do nothing and continue\n *   - `visit.SKIP`: Do not visit the children of this token, continue with\n *      next sibling\n *   - `visit.BREAK`: Terminate traversal completely\n *   - `visit.REMOVE`: Remove the current item, then continue with the next one\n *   - `number`: Set the index of the next step. This is useful especially if\n *     the index of the current token has changed.\n *   - `function`: Define the next visitor for this item. After the original\n *     visitor is called on item entry, next visitors are called after handling\n *     a non-empty `key` and when exiting the item.\n */\nfunction visit(cst, visitor) {\n    if ('type' in cst && cst.type === 'document')\n        cst = { start: cst.start, value: cst.value };\n    _visit(Object.freeze([]), cst, visitor);\n}\n// Without the `as symbol` casts, TS declares these in the `visit`\n// namespace using `var`, but then complains about that because\n// `unique symbol` must be `const`.\n/** Terminate visit traversal completely */\nvisit.BREAK = BREAK;\n/** Do not visit the children of the current item */\nvisit.SKIP = SKIP;\n/** Remove the current item */\nvisit.REMOVE = REMOVE;\n/** Find the item at `path` from `cst` as the root */\nvisit.itemAtPath = (cst, path) => {\n    let item = cst;\n    for (const [field, index] of path) {\n        const tok = item?.[field];\n        if (tok && 'items' in tok) {\n            item = tok.items[index];\n        }\n        else\n            return undefined;\n    }\n    return item;\n};\n/**\n * Get the immediate parent collection of the item at `path` from `cst` as the root.\n *\n * Throws an error if the collection is not found, which should never happen if the item itself exists.\n */\nvisit.parentCollection = (cst, path) => {\n    const parent = visit.itemAtPath(cst, path.slice(0, -1));\n    const field = path[path.length - 1][0];\n    const coll = parent?.[field];\n    if (coll && 'items' in coll)\n        return coll;\n    throw new Error('Parent collection not found');\n};\nfunction _visit(path, item, visitor) {\n    let ctrl = visitor(item, path);\n    if (typeof ctrl === 'symbol')\n        return ctrl;\n    for (const field of ['key', 'value']) {\n        const token = item[field];\n        if (token && 'items' in token) {\n            for (let i = 0; i < token.items.length; ++i) {\n                const ci = _visit(Object.freeze(path.concat([[field, i]])), token.items[i], visitor);\n                if (typeof ci === 'number')\n                    i = ci - 1;\n                else if (ci === BREAK)\n                    return BREAK;\n                else if (ci === REMOVE) {\n                    token.items.splice(i, 1);\n                    i -= 1;\n                }\n            }\n            if (typeof ctrl === 'function' && field === 'key')\n                ctrl = ctrl(item, path);\n        }\n    }\n    return typeof ctrl === 'function' ? ctrl(item, path) : ctrl;\n}\n\nexport { visit };\n","export { createScalarToken, resolveAsScalar, setScalarValue } from './cst-scalar.js';\nexport { stringify } from './cst-stringify.js';\nexport { visit } from './cst-visit.js';\n\n/** The byte order mark */\nconst BOM = '\\u{FEFF}';\n/** Start of doc-mode */\nconst DOCUMENT = '\\x02'; // C0: Start of Text\n/** Unexpected end of flow-mode */\nconst FLOW_END = '\\x18'; // C0: Cancel\n/** Next token is a scalar value */\nconst SCALAR = '\\x1f'; // C0: Unit Separator\n/** @returns `true` if `token` is a flow or block collection */\nconst isCollection = (token) => !!token && 'items' in token;\n/** @returns `true` if `token` is a flow or block scalar; not an alias */\nconst isScalar = (token) => !!token &&\n    (token.type === 'scalar' ||\n        token.type === 'single-quoted-scalar' ||\n        token.type === 'double-quoted-scalar' ||\n        token.type === 'block-scalar');\n/* istanbul ignore next */\n/** Get a printable representation of a lexer token */\nfunction prettyToken(token) {\n    switch (token) {\n        case BOM:\n            return '<BOM>';\n        case DOCUMENT:\n            return '<DOC>';\n        case FLOW_END:\n            return '<FLOW_END>';\n        case SCALAR:\n            return '<SCALAR>';\n        default:\n            return JSON.stringify(token);\n    }\n}\n/** Identify the type of a lexer token. May return `null` for unknown tokens. */\nfunction tokenType(source) {\n    switch (source) {\n        case BOM:\n            return 'byte-order-mark';\n        case DOCUMENT:\n            return 'doc-mode';\n        case FLOW_END:\n            return 'flow-error-end';\n        case SCALAR:\n            return 'scalar';\n        case '---':\n            return 'doc-start';\n        case '...':\n            return 'doc-end';\n        case '':\n        case '\\n':\n        case '\\r\\n':\n            return 'newline';\n        case '-':\n            return 'seq-item-ind';\n        case '?':\n            return 'explicit-key-ind';\n        case ':':\n            return 'map-value-ind';\n        case '{':\n            return 'flow-map-start';\n        case '}':\n            return 'flow-map-end';\n        case '[':\n            return 'flow-seq-start';\n        case ']':\n            return 'flow-seq-end';\n        case ',':\n            return 'comma';\n    }\n    switch (source[0]) {\n        case ' ':\n        case '\\t':\n            return 'space';\n        case '#':\n            return 'comment';\n        case '%':\n            return 'directive-line';\n        case '*':\n            return 'alias';\n        case '&':\n            return 'anchor';\n        case '!':\n            return 'tag';\n        case \"'\":\n            return 'single-quoted-scalar';\n        case '\"':\n            return 'double-quoted-scalar';\n        case '|':\n        case '>':\n            return 'block-scalar-header';\n    }\n    return null;\n}\n\nexport { BOM, DOCUMENT, FLOW_END, SCALAR, isCollection, isScalar, prettyToken, tokenType };\n","import { BOM, DOCUMENT, FLOW_END, SCALAR } from './cst.js';\n\n/*\nSTART -> stream\n\nstream\n  directive -> line-end -> stream\n  indent + line-end -> stream\n  [else] -> line-start\n\nline-end\n  comment -> line-end\n  newline -> .\n  input-end -> END\n\nline-start\n  doc-start -> doc\n  doc-end -> stream\n  [else] -> indent -> block-start\n\nblock-start\n  seq-item-start -> block-start\n  explicit-key-start -> block-start\n  map-value-start -> block-start\n  [else] -> doc\n\ndoc\n  line-end -> line-start\n  spaces -> doc\n  anchor -> doc\n  tag -> doc\n  flow-start -> flow -> doc\n  flow-end -> error -> doc\n  seq-item-start -> error -> doc\n  explicit-key-start -> error -> doc\n  map-value-start -> doc\n  alias -> doc\n  quote-start -> quoted-scalar -> doc\n  block-scalar-header -> line-end -> block-scalar(min) -> line-start\n  [else] -> plain-scalar(false, min) -> doc\n\nflow\n  line-end -> flow\n  spaces -> flow\n  anchor -> flow\n  tag -> flow\n  flow-start -> flow -> flow\n  flow-end -> .\n  seq-item-start -> error -> flow\n  explicit-key-start -> flow\n  map-value-start -> flow\n  alias -> flow\n  quote-start -> quoted-scalar -> flow\n  comma -> flow\n  [else] -> plain-scalar(true, 0) -> flow\n\nquoted-scalar\n  quote-end -> .\n  [else] -> quoted-scalar\n\nblock-scalar(min)\n  newline + peek(indent < min) -> .\n  [else] -> block-scalar(min)\n\nplain-scalar(is-flow, min)\n  scalar-end(is-flow) -> .\n  peek(newline + (indent < min)) -> .\n  [else] -> plain-scalar(min)\n*/\nfunction isEmpty(ch) {\n    switch (ch) {\n        case undefined:\n        case ' ':\n        case '\\n':\n        case '\\r':\n        case '\\t':\n            return true;\n        default:\n            return false;\n    }\n}\nconst hexDigits = new Set('0123456789ABCDEFabcdef');\nconst tagChars = new Set(\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()\");\nconst flowIndicatorChars = new Set(',[]{}');\nconst invalidAnchorChars = new Set(' ,[]{}\\n\\r\\t');\nconst isNotAnchorChar = (ch) => !ch || invalidAnchorChars.has(ch);\n/**\n * Splits an input string into lexical tokens, i.e. smaller strings that are\n * easily identifiable by `tokens.tokenType()`.\n *\n * Lexing starts always in a \"stream\" context. Incomplete input may be buffered\n * until a complete token can be emitted.\n *\n * In addition to slices of the original input, the following control characters\n * may also be emitted:\n *\n * - `\\x02` (Start of Text): A document starts with the next token\n * - `\\x18` (Cancel): Unexpected end of flow-mode (indicates an error)\n * - `\\x1f` (Unit Separator): Next token is a scalar value\n * - `\\u{FEFF}` (Byte order mark): Emitted separately outside documents\n */\nclass Lexer {\n    constructor() {\n        /**\n         * Flag indicating whether the end of the current buffer marks the end of\n         * all input\n         */\n        this.atEnd = false;\n        /**\n         * Explicit indent set in block scalar header, as an offset from the current\n         * minimum indent, so e.g. set to 1 from a header `|2+`. Set to -1 if not\n         * explicitly set.\n         */\n        this.blockScalarIndent = -1;\n        /**\n         * Block scalars that include a + (keep) chomping indicator in their header\n         * include trailing empty lines, which are otherwise excluded from the\n         * scalar's contents.\n         */\n        this.blockScalarKeep = false;\n        /** Current input */\n        this.buffer = '';\n        /**\n         * Flag noting whether the map value indicator : can immediately follow this\n         * node within a flow context.\n         */\n        this.flowKey = false;\n        /** Count of surrounding flow collection levels. */\n        this.flowLevel = 0;\n        /**\n         * Minimum level of indentation required for next lines to be parsed as a\n         * part of the current scalar value.\n         */\n        this.indentNext = 0;\n        /** Indentation level of the current line. */\n        this.indentValue = 0;\n        /** Position of the next \\n character. */\n        this.lineEndPos = null;\n        /** Stores the state of the lexer if reaching the end of incpomplete input */\n        this.next = null;\n        /** A pointer to `buffer`; the current position of the lexer. */\n        this.pos = 0;\n    }\n    /**\n     * Generate YAML tokens from the `source` string. If `incomplete`,\n     * a part of the last line may be left as a buffer for the next call.\n     *\n     * @returns A generator of lexical tokens\n     */\n    *lex(source, incomplete = false) {\n        if (source) {\n            if (typeof source !== 'string')\n                throw TypeError('source is not a string');\n            this.buffer = this.buffer ? this.buffer + source : source;\n            this.lineEndPos = null;\n        }\n        this.atEnd = !incomplete;\n        let next = this.next ?? 'stream';\n        while (next && (incomplete || this.hasChars(1)))\n            next = yield* this.parseNext(next);\n    }\n    atLineEnd() {\n        let i = this.pos;\n        let ch = this.buffer[i];\n        while (ch === ' ' || ch === '\\t')\n            ch = this.buffer[++i];\n        if (!ch || ch === '#' || ch === '\\n')\n            return true;\n        if (ch === '\\r')\n            return this.buffer[i + 1] === '\\n';\n        return false;\n    }\n    charAt(n) {\n        return this.buffer[this.pos + n];\n    }\n    continueScalar(offset) {\n        let ch = this.buffer[offset];\n        if (this.indentNext > 0) {\n            let indent = 0;\n            while (ch === ' ')\n                ch = this.buffer[++indent + offset];\n            if (ch === '\\r') {\n                const next = this.buffer[indent + offset + 1];\n                if (next === '\\n' || (!next && !this.atEnd))\n                    return offset + indent + 1;\n            }\n            return ch === '\\n' || indent >= this.indentNext || (!ch && !this.atEnd)\n                ? offset + indent\n                : -1;\n        }\n        if (ch === '-' || ch === '.') {\n            const dt = this.buffer.substr(offset, 3);\n            if ((dt === '---' || dt === '...') && isEmpty(this.buffer[offset + 3]))\n                return -1;\n        }\n        return offset;\n    }\n    getLine() {\n        let end = this.lineEndPos;\n        if (typeof end !== 'number' || (end !== -1 && end < this.pos)) {\n            end = this.buffer.indexOf('\\n', this.pos);\n            this.lineEndPos = end;\n        }\n        if (end === -1)\n            return this.atEnd ? this.buffer.substring(this.pos) : null;\n        if (this.buffer[end - 1] === '\\r')\n            end -= 1;\n        return this.buffer.substring(this.pos, end);\n    }\n    hasChars(n) {\n        return this.pos + n <= this.buffer.length;\n    }\n    setNext(state) {\n        this.buffer = this.buffer.substring(this.pos);\n        this.pos = 0;\n        this.lineEndPos = null;\n        this.next = state;\n        return null;\n    }\n    peek(n) {\n        return this.buffer.substr(this.pos, n);\n    }\n    *parseNext(next) {\n        switch (next) {\n            case 'stream':\n                return yield* this.parseStream();\n            case 'line-start':\n                return yield* this.parseLineStart();\n            case 'block-start':\n                return yield* this.parseBlockStart();\n            case 'doc':\n                return yield* this.parseDocument();\n            case 'flow':\n                return yield* this.parseFlowCollection();\n            case 'quoted-scalar':\n                return yield* this.parseQuotedScalar();\n            case 'block-scalar':\n                return yield* this.parseBlockScalar();\n            case 'plain-scalar':\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseStream() {\n        let line = this.getLine();\n        if (line === null)\n            return this.setNext('stream');\n        if (line[0] === BOM) {\n            yield* this.pushCount(1);\n            line = line.substring(1);\n        }\n        if (line[0] === '%') {\n            let dirEnd = line.length;\n            let cs = line.indexOf('#');\n            while (cs !== -1) {\n                const ch = line[cs - 1];\n                if (ch === ' ' || ch === '\\t') {\n                    dirEnd = cs - 1;\n                    break;\n                }\n                else {\n                    cs = line.indexOf('#', cs + 1);\n                }\n            }\n            while (true) {\n                const ch = line[dirEnd - 1];\n                if (ch === ' ' || ch === '\\t')\n                    dirEnd -= 1;\n                else\n                    break;\n            }\n            const n = (yield* this.pushCount(dirEnd)) + (yield* this.pushSpaces(true));\n            yield* this.pushCount(line.length - n); // possible comment\n            this.pushNewline();\n            return 'stream';\n        }\n        if (this.atLineEnd()) {\n            const sp = yield* this.pushSpaces(true);\n            yield* this.pushCount(line.length - sp);\n            yield* this.pushNewline();\n            return 'stream';\n        }\n        yield DOCUMENT;\n        return yield* this.parseLineStart();\n    }\n    *parseLineStart() {\n        const ch = this.charAt(0);\n        if (!ch && !this.atEnd)\n            return this.setNext('line-start');\n        if (ch === '-' || ch === '.') {\n            if (!this.atEnd && !this.hasChars(4))\n                return this.setNext('line-start');\n            const s = this.peek(3);\n            if ((s === '---' || s === '...') && isEmpty(this.charAt(3))) {\n                yield* this.pushCount(3);\n                this.indentValue = 0;\n                this.indentNext = 0;\n                return s === '---' ? 'doc' : 'stream';\n            }\n        }\n        this.indentValue = yield* this.pushSpaces(false);\n        if (this.indentNext > this.indentValue && !isEmpty(this.charAt(1)))\n            this.indentNext = this.indentValue;\n        return yield* this.parseBlockStart();\n    }\n    *parseBlockStart() {\n        const [ch0, ch1] = this.peek(2);\n        if (!ch1 && !this.atEnd)\n            return this.setNext('block-start');\n        if ((ch0 === '-' || ch0 === '?' || ch0 === ':') && isEmpty(ch1)) {\n            const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));\n            this.indentNext = this.indentValue + 1;\n            this.indentValue += n;\n            return yield* this.parseBlockStart();\n        }\n        return 'doc';\n    }\n    *parseDocument() {\n        yield* this.pushSpaces(true);\n        const line = this.getLine();\n        if (line === null)\n            return this.setNext('doc');\n        let n = yield* this.pushIndicators();\n        switch (line[n]) {\n            case '#':\n                yield* this.pushCount(line.length - n);\n            // fallthrough\n            case undefined:\n                yield* this.pushNewline();\n                return yield* this.parseLineStart();\n            case '{':\n            case '[':\n                yield* this.pushCount(1);\n                this.flowKey = false;\n                this.flowLevel = 1;\n                return 'flow';\n            case '}':\n            case ']':\n                // this is an error\n                yield* this.pushCount(1);\n                return 'doc';\n            case '*':\n                yield* this.pushUntil(isNotAnchorChar);\n                return 'doc';\n            case '\"':\n            case \"'\":\n                return yield* this.parseQuotedScalar();\n            case '|':\n            case '>':\n                n += yield* this.parseBlockScalarHeader();\n                n += yield* this.pushSpaces(true);\n                yield* this.pushCount(line.length - n);\n                yield* this.pushNewline();\n                return yield* this.parseBlockScalar();\n            default:\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseFlowCollection() {\n        let nl, sp;\n        let indent = -1;\n        do {\n            nl = yield* this.pushNewline();\n            if (nl > 0) {\n                sp = yield* this.pushSpaces(false);\n                this.indentValue = indent = sp;\n            }\n            else {\n                sp = 0;\n            }\n            sp += yield* this.pushSpaces(true);\n        } while (nl + sp > 0);\n        const line = this.getLine();\n        if (line === null)\n            return this.setNext('flow');\n        if ((indent !== -1 && indent < this.indentNext && line[0] !== '#') ||\n            (indent === 0 &&\n                (line.startsWith('---') || line.startsWith('...')) &&\n                isEmpty(line[3]))) {\n            // Allowing for the terminal ] or } at the same (rather than greater)\n            // indent level as the initial [ or { is technically invalid, but\n            // failing here would be surprising to users.\n            const atFlowEndMarker = indent === this.indentNext - 1 &&\n                this.flowLevel === 1 &&\n                (line[0] === ']' || line[0] === '}');\n            if (!atFlowEndMarker) {\n                // this is an error\n                this.flowLevel = 0;\n                yield FLOW_END;\n                return yield* this.parseLineStart();\n            }\n        }\n        let n = 0;\n        while (line[n] === ',') {\n            n += yield* this.pushCount(1);\n            n += yield* this.pushSpaces(true);\n            this.flowKey = false;\n        }\n        n += yield* this.pushIndicators();\n        switch (line[n]) {\n            case undefined:\n                return 'flow';\n            case '#':\n                yield* this.pushCount(line.length - n);\n                return 'flow';\n            case '{':\n            case '[':\n                yield* this.pushCount(1);\n                this.flowKey = false;\n                this.flowLevel += 1;\n                return 'flow';\n            case '}':\n            case ']':\n                yield* this.pushCount(1);\n                this.flowKey = true;\n                this.flowLevel -= 1;\n                return this.flowLevel ? 'flow' : 'doc';\n            case '*':\n                yield* this.pushUntil(isNotAnchorChar);\n                return 'flow';\n            case '\"':\n            case \"'\":\n                this.flowKey = true;\n                return yield* this.parseQuotedScalar();\n            case ':': {\n                const next = this.charAt(1);\n                if (this.flowKey || isEmpty(next) || next === ',') {\n                    this.flowKey = false;\n                    yield* this.pushCount(1);\n                    yield* this.pushSpaces(true);\n                    return 'flow';\n                }\n            }\n            // fallthrough\n            default:\n                this.flowKey = false;\n                return yield* this.parsePlainScalar();\n        }\n    }\n    *parseQuotedScalar() {\n        const quote = this.charAt(0);\n        let end = this.buffer.indexOf(quote, this.pos + 1);\n        if (quote === \"'\") {\n            while (end !== -1 && this.buffer[end + 1] === \"'\")\n                end = this.buffer.indexOf(\"'\", end + 2);\n        }\n        else {\n            // double-quote\n            while (end !== -1) {\n                let n = 0;\n                while (this.buffer[end - 1 - n] === '\\\\')\n                    n += 1;\n                if (n % 2 === 0)\n                    break;\n                end = this.buffer.indexOf('\"', end + 1);\n            }\n        }\n        // Only looking for newlines within the quotes\n        const qb = this.buffer.substring(0, end);\n        let nl = qb.indexOf('\\n', this.pos);\n        if (nl !== -1) {\n            while (nl !== -1) {\n                const cs = this.continueScalar(nl + 1);\n                if (cs === -1)\n                    break;\n                nl = qb.indexOf('\\n', cs);\n            }\n            if (nl !== -1) {\n                // this is an error caused by an unexpected unindent\n                end = nl - (qb[nl - 1] === '\\r' ? 2 : 1);\n            }\n        }\n        if (end === -1) {\n            if (!this.atEnd)\n                return this.setNext('quoted-scalar');\n            end = this.buffer.length;\n        }\n        yield* this.pushToIndex(end + 1, false);\n        return this.flowLevel ? 'flow' : 'doc';\n    }\n    *parseBlockScalarHeader() {\n        this.blockScalarIndent = -1;\n        this.blockScalarKeep = false;\n        let i = this.pos;\n        while (true) {\n            const ch = this.buffer[++i];\n            if (ch === '+')\n                this.blockScalarKeep = true;\n            else if (ch > '0' && ch <= '9')\n                this.blockScalarIndent = Number(ch) - 1;\n            else if (ch !== '-')\n                break;\n        }\n        return yield* this.pushUntil(ch => isEmpty(ch) || ch === '#');\n    }\n    *parseBlockScalar() {\n        let nl = this.pos - 1; // may be -1 if this.pos === 0\n        let indent = 0;\n        let ch;\n        loop: for (let i = this.pos; (ch = this.buffer[i]); ++i) {\n            switch (ch) {\n                case ' ':\n                    indent += 1;\n                    break;\n                case '\\n':\n                    nl = i;\n                    indent = 0;\n                    break;\n                case '\\r': {\n                    const next = this.buffer[i + 1];\n                    if (!next && !this.atEnd)\n                        return this.setNext('block-scalar');\n                    if (next === '\\n')\n                        break;\n                } // fallthrough\n                default:\n                    break loop;\n            }\n        }\n        if (!ch && !this.atEnd)\n            return this.setNext('block-scalar');\n        if (indent >= this.indentNext) {\n            if (this.blockScalarIndent === -1)\n                this.indentNext = indent;\n            else {\n                this.indentNext =\n                    this.blockScalarIndent + (this.indentNext === 0 ? 1 : this.indentNext);\n            }\n            do {\n                const cs = this.continueScalar(nl + 1);\n                if (cs === -1)\n                    break;\n                nl = this.buffer.indexOf('\\n', cs);\n            } while (nl !== -1);\n            if (nl === -1) {\n                if (!this.atEnd)\n                    return this.setNext('block-scalar');\n                nl = this.buffer.length;\n            }\n        }\n        // Trailing insufficiently indented tabs are invalid.\n        // To catch that during parsing, we include them in the block scalar value.\n        let i = nl + 1;\n        ch = this.buffer[i];\n        while (ch === ' ')\n            ch = this.buffer[++i];\n        if (ch === '\\t') {\n            while (ch === '\\t' || ch === ' ' || ch === '\\r' || ch === '\\n')\n                ch = this.buffer[++i];\n            nl = i - 1;\n        }\n        else if (!this.blockScalarKeep) {\n            do {\n                let i = nl - 1;\n                let ch = this.buffer[i];\n                if (ch === '\\r')\n                    ch = this.buffer[--i];\n                const lastChar = i; // Drop the line if last char not more indented\n                while (ch === ' ')\n                    ch = this.buffer[--i];\n                if (ch === '\\n' && i >= this.pos && i + 1 + indent > lastChar)\n                    nl = i;\n                else\n                    break;\n            } while (true);\n        }\n        yield SCALAR;\n        yield* this.pushToIndex(nl + 1, true);\n        return yield* this.parseLineStart();\n    }\n    *parsePlainScalar() {\n        const inFlow = this.flowLevel > 0;\n        let end = this.pos - 1;\n        let i = this.pos - 1;\n        let ch;\n        while ((ch = this.buffer[++i])) {\n            if (ch === ':') {\n                const next = this.buffer[i + 1];\n                if (isEmpty(next) || (inFlow && flowIndicatorChars.has(next)))\n                    break;\n                end = i;\n            }\n            else if (isEmpty(ch)) {\n                let next = this.buffer[i + 1];\n                if (ch === '\\r') {\n                    if (next === '\\n') {\n                        i += 1;\n                        ch = '\\n';\n                        next = this.buffer[i + 1];\n                    }\n                    else\n                        end = i;\n                }\n                if (next === '#' || (inFlow && flowIndicatorChars.has(next)))\n                    break;\n                if (ch === '\\n') {\n                    const cs = this.continueScalar(i + 1);\n                    if (cs === -1)\n                        break;\n                    i = Math.max(i, cs - 2); // to advance, but still account for ' #'\n                }\n            }\n            else {\n                if (inFlow && flowIndicatorChars.has(ch))\n                    break;\n                end = i;\n            }\n        }\n        if (!ch && !this.atEnd)\n            return this.setNext('plain-scalar');\n        yield SCALAR;\n        yield* this.pushToIndex(end + 1, true);\n        return inFlow ? 'flow' : 'doc';\n    }\n    *pushCount(n) {\n        if (n > 0) {\n            yield this.buffer.substr(this.pos, n);\n            this.pos += n;\n            return n;\n        }\n        return 0;\n    }\n    *pushToIndex(i, allowEmpty) {\n        const s = this.buffer.slice(this.pos, i);\n        if (s) {\n            yield s;\n            this.pos += s.length;\n            return s.length;\n        }\n        else if (allowEmpty)\n            yield '';\n        return 0;\n    }\n    *pushIndicators() {\n        switch (this.charAt(0)) {\n            case '!':\n                return ((yield* this.pushTag()) +\n                    (yield* this.pushSpaces(true)) +\n                    (yield* this.pushIndicators()));\n            case '&':\n                return ((yield* this.pushUntil(isNotAnchorChar)) +\n                    (yield* this.pushSpaces(true)) +\n                    (yield* this.pushIndicators()));\n            case '-': // this is an error\n            case '?': // this is an error outside flow collections\n            case ':': {\n                const inFlow = this.flowLevel > 0;\n                const ch1 = this.charAt(1);\n                if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {\n                    if (!inFlow)\n                        this.indentNext = this.indentValue + 1;\n                    else if (this.flowKey)\n                        this.flowKey = false;\n                    return ((yield* this.pushCount(1)) +\n                        (yield* this.pushSpaces(true)) +\n                        (yield* this.pushIndicators()));\n                }\n            }\n        }\n        return 0;\n    }\n    *pushTag() {\n        if (this.charAt(1) === '<') {\n            let i = this.pos + 2;\n            let ch = this.buffer[i];\n            while (!isEmpty(ch) && ch !== '>')\n                ch = this.buffer[++i];\n            return yield* this.pushToIndex(ch === '>' ? i + 1 : i, false);\n        }\n        else {\n            let i = this.pos + 1;\n            let ch = this.buffer[i];\n            while (ch) {\n                if (tagChars.has(ch))\n                    ch = this.buffer[++i];\n                else if (ch === '%' &&\n                    hexDigits.has(this.buffer[i + 1]) &&\n                    hexDigits.has(this.buffer[i + 2])) {\n                    ch = this.buffer[(i += 3)];\n                }\n                else\n                    break;\n            }\n            return yield* this.pushToIndex(i, false);\n        }\n    }\n    *pushNewline() {\n        const ch = this.buffer[this.pos];\n        if (ch === '\\n')\n            return yield* this.pushCount(1);\n        else if (ch === '\\r' && this.charAt(1) === '\\n')\n            return yield* this.pushCount(2);\n        else\n            return 0;\n    }\n    *pushSpaces(allowTabs) {\n        let i = this.pos - 1;\n        let ch;\n        do {\n            ch = this.buffer[++i];\n        } while (ch === ' ' || (allowTabs && ch === '\\t'));\n        const n = i - this.pos;\n        if (n > 0) {\n            yield this.buffer.substr(this.pos, n);\n            this.pos = i;\n        }\n        return n;\n    }\n    *pushUntil(test) {\n        let i = this.pos;\n        let ch = this.buffer[i];\n        while (!test(ch))\n            ch = this.buffer[++i];\n        return yield* this.pushToIndex(i, false);\n    }\n}\n\nexport { Lexer };\n","/**\n * Tracks newlines during parsing in order to provide an efficient API for\n * determining the one-indexed `{ line, col }` position for any offset\n * within the input.\n */\nclass LineCounter {\n    constructor() {\n        this.lineStarts = [];\n        /**\n         * Should be called in ascending order. Otherwise, call\n         * `lineCounter.lineStarts.sort()` before calling `linePos()`.\n         */\n        this.addNewLine = (offset) => this.lineStarts.push(offset);\n        /**\n         * Performs a binary search and returns the 1-indexed { line, col }\n         * position of `offset`. If `line === 0`, `addNewLine` has never been\n         * called or `offset` is before the first known newline.\n         */\n        this.linePos = (offset) => {\n            let low = 0;\n            let high = this.lineStarts.length;\n            while (low < high) {\n                const mid = (low + high) >> 1; // Math.floor((low + high) / 2)\n                if (this.lineStarts[mid] < offset)\n                    low = mid + 1;\n                else\n                    high = mid;\n            }\n            if (this.lineStarts[low] === offset)\n                return { line: low + 1, col: 1 };\n            if (low === 0)\n                return { line: 0, col: offset };\n            const start = this.lineStarts[low - 1];\n            return { line: low, col: offset - start + 1 };\n        };\n    }\n}\n\nexport { LineCounter };\n","import { tokenType } from './cst.js';\nimport { Lexer } from './lexer.js';\n\nfunction includesToken(list, type) {\n    for (let i = 0; i < list.length; ++i)\n        if (list[i].type === type)\n            return true;\n    return false;\n}\nfunction findNonEmptyIndex(list) {\n    for (let i = 0; i < list.length; ++i) {\n        switch (list[i].type) {\n            case 'space':\n            case 'comment':\n            case 'newline':\n                break;\n            default:\n                return i;\n        }\n    }\n    return -1;\n}\nfunction isFlowToken(token) {\n    switch (token?.type) {\n        case 'alias':\n        case 'scalar':\n        case 'single-quoted-scalar':\n        case 'double-quoted-scalar':\n        case 'flow-collection':\n            return true;\n        default:\n            return false;\n    }\n}\nfunction getPrevProps(parent) {\n    switch (parent.type) {\n        case 'document':\n            return parent.start;\n        case 'block-map': {\n            const it = parent.items[parent.items.length - 1];\n            return it.sep ?? it.start;\n        }\n        case 'block-seq':\n            return parent.items[parent.items.length - 1].start;\n        /* istanbul ignore next should not happen */\n        default:\n            return [];\n    }\n}\n/** Note: May modify input array */\nfunction getFirstKeyStartProps(prev) {\n    if (prev.length === 0)\n        return [];\n    let i = prev.length;\n    loop: while (--i >= 0) {\n        switch (prev[i].type) {\n            case 'doc-start':\n            case 'explicit-key-ind':\n            case 'map-value-ind':\n            case 'seq-item-ind':\n            case 'newline':\n                break loop;\n        }\n    }\n    while (prev[++i]?.type === 'space') {\n        /* loop */\n    }\n    return prev.splice(i, prev.length);\n}\nfunction fixFlowSeqItems(fc) {\n    if (fc.start.type === 'flow-seq-start') {\n        for (const it of fc.items) {\n            if (it.sep &&\n                !it.value &&\n                !includesToken(it.start, 'explicit-key-ind') &&\n                !includesToken(it.sep, 'map-value-ind')) {\n                if (it.key)\n                    it.value = it.key;\n                delete it.key;\n                if (isFlowToken(it.value)) {\n                    if (it.value.end)\n                        Array.prototype.push.apply(it.value.end, it.sep);\n                    else\n                        it.value.end = it.sep;\n                }\n                else\n                    Array.prototype.push.apply(it.start, it.sep);\n                delete it.sep;\n            }\n        }\n    }\n}\n/**\n * A YAML concrete syntax tree (CST) parser\n *\n * ```ts\n * const src: string = ...\n * for (const token of new Parser().parse(src)) {\n *   // token: Token\n * }\n * ```\n *\n * To use the parser with a user-provided lexer:\n *\n * ```ts\n * function* parse(source: string, lexer: Lexer) {\n *   const parser = new Parser()\n *   for (const lexeme of lexer.lex(source))\n *     yield* parser.next(lexeme)\n *   yield* parser.end()\n * }\n *\n * const src: string = ...\n * const lexer = new Lexer()\n * for (const token of parse(src, lexer)) {\n *   // token: Token\n * }\n * ```\n */\nclass Parser {\n    /**\n     * @param onNewLine - If defined, called separately with the start position of\n     *   each new line (in `parse()`, including the start of input).\n     */\n    constructor(onNewLine) {\n        /** If true, space and sequence indicators count as indentation */\n        this.atNewLine = true;\n        /** If true, next token is a scalar value */\n        this.atScalar = false;\n        /** Current indentation level */\n        this.indent = 0;\n        /** Current offset since the start of parsing */\n        this.offset = 0;\n        /** On the same line with a block map key */\n        this.onKeyLine = false;\n        /** Top indicates the node that's currently being built */\n        this.stack = [];\n        /** The source of the current token, set in parse() */\n        this.source = '';\n        /** The type of the current token, set in parse() */\n        this.type = '';\n        // Must be defined after `next()`\n        this.lexer = new Lexer();\n        this.onNewLine = onNewLine;\n    }\n    /**\n     * Parse `source` as a YAML stream.\n     * If `incomplete`, a part of the last line may be left as a buffer for the next call.\n     *\n     * Errors are not thrown, but yielded as `{ type: 'error', message }` tokens.\n     *\n     * @returns A generator of tokens representing each directive, document, and other structure.\n     */\n    *parse(source, incomplete = false) {\n        if (this.onNewLine && this.offset === 0)\n            this.onNewLine(0);\n        for (const lexeme of this.lexer.lex(source, incomplete))\n            yield* this.next(lexeme);\n        if (!incomplete)\n            yield* this.end();\n    }\n    /**\n     * Advance the parser by the `source` of one lexical token.\n     */\n    *next(source) {\n        this.source = source;\n        if (this.atScalar) {\n            this.atScalar = false;\n            yield* this.step();\n            this.offset += source.length;\n            return;\n        }\n        const type = tokenType(source);\n        if (!type) {\n            const message = `Not a YAML token: ${source}`;\n            yield* this.pop({ type: 'error', offset: this.offset, message, source });\n            this.offset += source.length;\n        }\n        else if (type === 'scalar') {\n            this.atNewLine = false;\n            this.atScalar = true;\n            this.type = 'scalar';\n        }\n        else {\n            this.type = type;\n            yield* this.step();\n            switch (type) {\n                case 'newline':\n                    this.atNewLine = true;\n                    this.indent = 0;\n                    if (this.onNewLine)\n                        this.onNewLine(this.offset + source.length);\n                    break;\n                case 'space':\n                    if (this.atNewLine && source[0] === ' ')\n                        this.indent += source.length;\n                    break;\n                case 'explicit-key-ind':\n                case 'map-value-ind':\n                case 'seq-item-ind':\n                    if (this.atNewLine)\n                        this.indent += source.length;\n                    break;\n                case 'doc-mode':\n                case 'flow-error-end':\n                    return;\n                default:\n                    this.atNewLine = false;\n            }\n            this.offset += source.length;\n        }\n    }\n    /** Call at end of input to push out any remaining constructions */\n    *end() {\n        while (this.stack.length > 0)\n            yield* this.pop();\n    }\n    get sourceToken() {\n        const st = {\n            type: this.type,\n            offset: this.offset,\n            indent: this.indent,\n            source: this.source\n        };\n        return st;\n    }\n    *step() {\n        const top = this.peek(1);\n        if (this.type === 'doc-end' && (!top || top.type !== 'doc-end')) {\n            while (this.stack.length > 0)\n                yield* this.pop();\n            this.stack.push({\n                type: 'doc-end',\n                offset: this.offset,\n                source: this.source\n            });\n            return;\n        }\n        if (!top)\n            return yield* this.stream();\n        switch (top.type) {\n            case 'document':\n                return yield* this.document(top);\n            case 'alias':\n            case 'scalar':\n            case 'single-quoted-scalar':\n            case 'double-quoted-scalar':\n                return yield* this.scalar(top);\n            case 'block-scalar':\n                return yield* this.blockScalar(top);\n            case 'block-map':\n                return yield* this.blockMap(top);\n            case 'block-seq':\n                return yield* this.blockSequence(top);\n            case 'flow-collection':\n                return yield* this.flowCollection(top);\n            case 'doc-end':\n                return yield* this.documentEnd(top);\n        }\n        /* istanbul ignore next should not happen */\n        yield* this.pop();\n    }\n    peek(n) {\n        return this.stack[this.stack.length - n];\n    }\n    *pop(error) {\n        const token = error ?? this.stack.pop();\n        /* istanbul ignore if should not happen */\n        if (!token) {\n            const message = 'Tried to pop an empty stack';\n            yield { type: 'error', offset: this.offset, source: '', message };\n        }\n        else if (this.stack.length === 0) {\n            yield token;\n        }\n        else {\n            const top = this.peek(1);\n            if (token.type === 'block-scalar') {\n                // Block scalars use their parent rather than header indent\n                token.indent = 'indent' in top ? top.indent : 0;\n            }\n            else if (token.type === 'flow-collection' && top.type === 'document') {\n                // Ignore all indent for top-level flow collections\n                token.indent = 0;\n            }\n            if (token.type === 'flow-collection')\n                fixFlowSeqItems(token);\n            switch (top.type) {\n                case 'document':\n                    top.value = token;\n                    break;\n                case 'block-scalar':\n                    top.props.push(token); // error\n                    break;\n                case 'block-map': {\n                    const it = top.items[top.items.length - 1];\n                    if (it.value) {\n                        top.items.push({ start: [], key: token, sep: [] });\n                        this.onKeyLine = true;\n                        return;\n                    }\n                    else if (it.sep) {\n                        it.value = token;\n                    }\n                    else {\n                        Object.assign(it, { key: token, sep: [] });\n                        this.onKeyLine = !it.explicitKey;\n                        return;\n                    }\n                    break;\n                }\n                case 'block-seq': {\n                    const it = top.items[top.items.length - 1];\n                    if (it.value)\n                        top.items.push({ start: [], value: token });\n                    else\n                        it.value = token;\n                    break;\n                }\n                case 'flow-collection': {\n                    const it = top.items[top.items.length - 1];\n                    if (!it || it.value)\n                        top.items.push({ start: [], key: token, sep: [] });\n                    else if (it.sep)\n                        it.value = token;\n                    else\n                        Object.assign(it, { key: token, sep: [] });\n                    return;\n                }\n                /* istanbul ignore next should not happen */\n                default:\n                    yield* this.pop();\n                    yield* this.pop(token);\n            }\n            if ((top.type === 'document' ||\n                top.type === 'block-map' ||\n                top.type === 'block-seq') &&\n                (token.type === 'block-map' || token.type === 'block-seq')) {\n                const last = token.items[token.items.length - 1];\n                if (last &&\n                    !last.sep &&\n                    !last.value &&\n                    last.start.length > 0 &&\n                    findNonEmptyIndex(last.start) === -1 &&\n                    (token.indent === 0 ||\n                        last.start.every(st => st.type !== 'comment' || st.indent < token.indent))) {\n                    if (top.type === 'document')\n                        top.end = last.start;\n                    else\n                        top.items.push({ start: last.start });\n                    token.items.splice(-1, 1);\n                }\n            }\n        }\n    }\n    *stream() {\n        switch (this.type) {\n            case 'directive-line':\n                yield { type: 'directive', offset: this.offset, source: this.source };\n                return;\n            case 'byte-order-mark':\n            case 'space':\n            case 'comment':\n            case 'newline':\n                yield this.sourceToken;\n                return;\n            case 'doc-mode':\n            case 'doc-start': {\n                const doc = {\n                    type: 'document',\n                    offset: this.offset,\n                    start: []\n                };\n                if (this.type === 'doc-start')\n                    doc.start.push(this.sourceToken);\n                this.stack.push(doc);\n                return;\n            }\n        }\n        yield {\n            type: 'error',\n            offset: this.offset,\n            message: `Unexpected ${this.type} token in YAML stream`,\n            source: this.source\n        };\n    }\n    *document(doc) {\n        if (doc.value)\n            return yield* this.lineEnd(doc);\n        switch (this.type) {\n            case 'doc-start': {\n                if (findNonEmptyIndex(doc.start) !== -1) {\n                    yield* this.pop();\n                    yield* this.step();\n                }\n                else\n                    doc.start.push(this.sourceToken);\n                return;\n            }\n            case 'anchor':\n            case 'tag':\n            case 'space':\n            case 'comment':\n            case 'newline':\n                doc.start.push(this.sourceToken);\n                return;\n        }\n        const bv = this.startBlockValue(doc);\n        if (bv)\n            this.stack.push(bv);\n        else {\n            yield {\n                type: 'error',\n                offset: this.offset,\n                message: `Unexpected ${this.type} token in YAML document`,\n                source: this.source\n            };\n        }\n    }\n    *scalar(scalar) {\n        if (this.type === 'map-value-ind') {\n            const prev = getPrevProps(this.peek(2));\n            const start = getFirstKeyStartProps(prev);\n            let sep;\n            if (scalar.end) {\n                sep = scalar.end;\n                sep.push(this.sourceToken);\n                delete scalar.end;\n            }\n            else\n                sep = [this.sourceToken];\n            const map = {\n                type: 'block-map',\n                offset: scalar.offset,\n                indent: scalar.indent,\n                items: [{ start, key: scalar, sep }]\n            };\n            this.onKeyLine = true;\n            this.stack[this.stack.length - 1] = map;\n        }\n        else\n            yield* this.lineEnd(scalar);\n    }\n    *blockScalar(scalar) {\n        switch (this.type) {\n            case 'space':\n            case 'comment':\n            case 'newline':\n                scalar.props.push(this.sourceToken);\n                return;\n            case 'scalar':\n                scalar.source = this.source;\n                // block-scalar source includes trailing newline\n                this.atNewLine = true;\n                this.indent = 0;\n                if (this.onNewLine) {\n                    let nl = this.source.indexOf('\\n') + 1;\n                    while (nl !== 0) {\n                        this.onNewLine(this.offset + nl);\n                        nl = this.source.indexOf('\\n', nl) + 1;\n                    }\n                }\n                yield* this.pop();\n                break;\n            /* istanbul ignore next should not happen */\n            default:\n                yield* this.pop();\n                yield* this.step();\n        }\n    }\n    *blockMap(map) {\n        const it = map.items[map.items.length - 1];\n        // it.sep is true-ish if pair already has key or : separator\n        switch (this.type) {\n            case 'newline':\n                this.onKeyLine = false;\n                if (it.value) {\n                    const end = 'end' in it.value ? it.value.end : undefined;\n                    const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n                    if (last?.type === 'comment')\n                        end?.push(this.sourceToken);\n                    else\n                        map.items.push({ start: [this.sourceToken] });\n                }\n                else if (it.sep) {\n                    it.sep.push(this.sourceToken);\n                }\n                else {\n                    it.start.push(this.sourceToken);\n                }\n                return;\n            case 'space':\n            case 'comment':\n                if (it.value) {\n                    map.items.push({ start: [this.sourceToken] });\n                }\n                else if (it.sep) {\n                    it.sep.push(this.sourceToken);\n                }\n                else {\n                    if (this.atIndentedComment(it.start, map.indent)) {\n                        const prev = map.items[map.items.length - 2];\n                        const end = prev?.value?.end;\n                        if (Array.isArray(end)) {\n                            Array.prototype.push.apply(end, it.start);\n                            end.push(this.sourceToken);\n                            map.items.pop();\n                            return;\n                        }\n                    }\n                    it.start.push(this.sourceToken);\n                }\n                return;\n        }\n        if (this.indent >= map.indent) {\n            const atMapIndent = !this.onKeyLine && this.indent === map.indent;\n            const atNextItem = atMapIndent &&\n                (it.sep || it.explicitKey) &&\n                this.type !== 'seq-item-ind';\n            // For empty nodes, assign newline-separated not indented empty tokens to following node\n            let start = [];\n            if (atNextItem && it.sep && !it.value) {\n                const nl = [];\n                for (let i = 0; i < it.sep.length; ++i) {\n                    const st = it.sep[i];\n                    switch (st.type) {\n                        case 'newline':\n                            nl.push(i);\n                            break;\n                        case 'space':\n                            break;\n                        case 'comment':\n                            if (st.indent > map.indent)\n                                nl.length = 0;\n                            break;\n                        default:\n                            nl.length = 0;\n                    }\n                }\n                if (nl.length >= 2)\n                    start = it.sep.splice(nl[1]);\n            }\n            switch (this.type) {\n                case 'anchor':\n                case 'tag':\n                    if (atNextItem || it.value) {\n                        start.push(this.sourceToken);\n                        map.items.push({ start });\n                        this.onKeyLine = true;\n                    }\n                    else if (it.sep) {\n                        it.sep.push(this.sourceToken);\n                    }\n                    else {\n                        it.start.push(this.sourceToken);\n                    }\n                    return;\n                case 'explicit-key-ind':\n                    if (!it.sep && !it.explicitKey) {\n                        it.start.push(this.sourceToken);\n                        it.explicitKey = true;\n                    }\n                    else if (atNextItem || it.value) {\n                        start.push(this.sourceToken);\n                        map.items.push({ start, explicitKey: true });\n                    }\n                    else {\n                        this.stack.push({\n                            type: 'block-map',\n                            offset: this.offset,\n                            indent: this.indent,\n                            items: [{ start: [this.sourceToken], explicitKey: true }]\n                        });\n                    }\n                    this.onKeyLine = true;\n                    return;\n                case 'map-value-ind':\n                    if (it.explicitKey) {\n                        if (!it.sep) {\n                            if (includesToken(it.start, 'newline')) {\n                                Object.assign(it, { key: null, sep: [this.sourceToken] });\n                            }\n                            else {\n                                const start = getFirstKeyStartProps(it.start);\n                                this.stack.push({\n                                    type: 'block-map',\n                                    offset: this.offset,\n                                    indent: this.indent,\n                                    items: [{ start, key: null, sep: [this.sourceToken] }]\n                                });\n                            }\n                        }\n                        else if (it.value) {\n                            map.items.push({ start: [], key: null, sep: [this.sourceToken] });\n                        }\n                        else if (includesToken(it.sep, 'map-value-ind')) {\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start, key: null, sep: [this.sourceToken] }]\n                            });\n                        }\n                        else if (isFlowToken(it.key) &&\n                            !includesToken(it.sep, 'newline')) {\n                            const start = getFirstKeyStartProps(it.start);\n                            const key = it.key;\n                            const sep = it.sep;\n                            sep.push(this.sourceToken);\n                            // @ts-expect-error type guard is wrong here\n                            delete it.key, delete it.sep;\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start, key, sep }]\n                            });\n                        }\n                        else if (start.length > 0) {\n                            // Not actually at next item\n                            it.sep = it.sep.concat(start, this.sourceToken);\n                        }\n                        else {\n                            it.sep.push(this.sourceToken);\n                        }\n                    }\n                    else {\n                        if (!it.sep) {\n                            Object.assign(it, { key: null, sep: [this.sourceToken] });\n                        }\n                        else if (it.value || atNextItem) {\n                            map.items.push({ start, key: null, sep: [this.sourceToken] });\n                        }\n                        else if (includesToken(it.sep, 'map-value-ind')) {\n                            this.stack.push({\n                                type: 'block-map',\n                                offset: this.offset,\n                                indent: this.indent,\n                                items: [{ start: [], key: null, sep: [this.sourceToken] }]\n                            });\n                        }\n                        else {\n                            it.sep.push(this.sourceToken);\n                        }\n                    }\n                    this.onKeyLine = true;\n                    return;\n                case 'alias':\n                case 'scalar':\n                case 'single-quoted-scalar':\n                case 'double-quoted-scalar': {\n                    const fs = this.flowScalar(this.type);\n                    if (atNextItem || it.value) {\n                        map.items.push({ start, key: fs, sep: [] });\n                        this.onKeyLine = true;\n                    }\n                    else if (it.sep) {\n                        this.stack.push(fs);\n                    }\n                    else {\n                        Object.assign(it, { key: fs, sep: [] });\n                        this.onKeyLine = true;\n                    }\n                    return;\n                }\n                default: {\n                    const bv = this.startBlockValue(map);\n                    if (bv) {\n                        if (atMapIndent && bv.type !== 'block-seq') {\n                            map.items.push({ start });\n                        }\n                        this.stack.push(bv);\n                        return;\n                    }\n                }\n            }\n        }\n        yield* this.pop();\n        yield* this.step();\n    }\n    *blockSequence(seq) {\n        const it = seq.items[seq.items.length - 1];\n        switch (this.type) {\n            case 'newline':\n                if (it.value) {\n                    const end = 'end' in it.value ? it.value.end : undefined;\n                    const last = Array.isArray(end) ? end[end.length - 1] : undefined;\n                    if (last?.type === 'comment')\n                        end?.push(this.sourceToken);\n                    else\n                        seq.items.push({ start: [this.sourceToken] });\n                }\n                else\n                    it.start.push(this.sourceToken);\n                return;\n            case 'space':\n            case 'comment':\n                if (it.value)\n                    seq.items.push({ start: [this.sourceToken] });\n                else {\n                    if (this.atIndentedComment(it.start, seq.indent)) {\n                        const prev = seq.items[seq.items.length - 2];\n                        const end = prev?.value?.end;\n                        if (Array.isArray(end)) {\n                            Array.prototype.push.apply(end, it.start);\n                            end.push(this.sourceToken);\n                            seq.items.pop();\n                            return;\n                        }\n                    }\n                    it.start.push(this.sourceToken);\n                }\n                return;\n            case 'anchor':\n            case 'tag':\n                if (it.value || this.indent <= seq.indent)\n                    break;\n                it.start.push(this.sourceToken);\n                return;\n            case 'seq-item-ind':\n                if (this.indent !== seq.indent)\n                    break;\n                if (it.value || includesToken(it.start, 'seq-item-ind'))\n                    seq.items.push({ start: [this.sourceToken] });\n                else\n                    it.start.push(this.sourceToken);\n                return;\n        }\n        if (this.indent > seq.indent) {\n            const bv = this.startBlockValue(seq);\n            if (bv) {\n                this.stack.push(bv);\n                return;\n            }\n        }\n        yield* this.pop();\n        yield* this.step();\n    }\n    *flowCollection(fc) {\n        const it = fc.items[fc.items.length - 1];\n        if (this.type === 'flow-error-end') {\n            let top;\n            do {\n                yield* this.pop();\n                top = this.peek(1);\n            } while (top && top.type === 'flow-collection');\n        }\n        else if (fc.end.length === 0) {\n            switch (this.type) {\n                case 'comma':\n                case 'explicit-key-ind':\n                    if (!it || it.sep)\n                        fc.items.push({ start: [this.sourceToken] });\n                    else\n                        it.start.push(this.sourceToken);\n                    return;\n                case 'map-value-ind':\n                    if (!it || it.value)\n                        fc.items.push({ start: [], key: null, sep: [this.sourceToken] });\n                    else if (it.sep)\n                        it.sep.push(this.sourceToken);\n                    else\n                        Object.assign(it, { key: null, sep: [this.sourceToken] });\n                    return;\n                case 'space':\n                case 'comment':\n                case 'newline':\n                case 'anchor':\n                case 'tag':\n                    if (!it || it.value)\n                        fc.items.push({ start: [this.sourceToken] });\n                    else if (it.sep)\n                        it.sep.push(this.sourceToken);\n                    else\n                        it.start.push(this.sourceToken);\n                    return;\n                case 'alias':\n                case 'scalar':\n                case 'single-quoted-scalar':\n                case 'double-quoted-scalar': {\n                    const fs = this.flowScalar(this.type);\n                    if (!it || it.value)\n                        fc.items.push({ start: [], key: fs, sep: [] });\n                    else if (it.sep)\n                        this.stack.push(fs);\n                    else\n                        Object.assign(it, { key: fs, sep: [] });\n                    return;\n                }\n                case 'flow-map-end':\n                case 'flow-seq-end':\n                    fc.end.push(this.sourceToken);\n                    return;\n            }\n            const bv = this.startBlockValue(fc);\n            /* istanbul ignore else should not happen */\n            if (bv)\n                this.stack.push(bv);\n            else {\n                yield* this.pop();\n                yield* this.step();\n            }\n        }\n        else {\n            const parent = this.peek(2);\n            if (parent.type === 'block-map' &&\n                ((this.type === 'map-value-ind' && parent.indent === fc.indent) ||\n                    (this.type === 'newline' &&\n                        !parent.items[parent.items.length - 1].sep))) {\n                yield* this.pop();\n                yield* this.step();\n            }\n            else if (this.type === 'map-value-ind' &&\n                parent.type !== 'flow-collection') {\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                fixFlowSeqItems(fc);\n                const sep = fc.end.splice(1, fc.end.length);\n                sep.push(this.sourceToken);\n                const map = {\n                    type: 'block-map',\n                    offset: fc.offset,\n                    indent: fc.indent,\n                    items: [{ start, key: fc, sep }]\n                };\n                this.onKeyLine = true;\n                this.stack[this.stack.length - 1] = map;\n            }\n            else {\n                yield* this.lineEnd(fc);\n            }\n        }\n    }\n    flowScalar(type) {\n        if (this.onNewLine) {\n            let nl = this.source.indexOf('\\n') + 1;\n            while (nl !== 0) {\n                this.onNewLine(this.offset + nl);\n                nl = this.source.indexOf('\\n', nl) + 1;\n            }\n        }\n        return {\n            type,\n            offset: this.offset,\n            indent: this.indent,\n            source: this.source\n        };\n    }\n    startBlockValue(parent) {\n        switch (this.type) {\n            case 'alias':\n            case 'scalar':\n            case 'single-quoted-scalar':\n            case 'double-quoted-scalar':\n                return this.flowScalar(this.type);\n            case 'block-scalar-header':\n                return {\n                    type: 'block-scalar',\n                    offset: this.offset,\n                    indent: this.indent,\n                    props: [this.sourceToken],\n                    source: ''\n                };\n            case 'flow-map-start':\n            case 'flow-seq-start':\n                return {\n                    type: 'flow-collection',\n                    offset: this.offset,\n                    indent: this.indent,\n                    start: this.sourceToken,\n                    items: [],\n                    end: []\n                };\n            case 'seq-item-ind':\n                return {\n                    type: 'block-seq',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start: [this.sourceToken] }]\n                };\n            case 'explicit-key-ind': {\n                this.onKeyLine = true;\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                start.push(this.sourceToken);\n                return {\n                    type: 'block-map',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start, explicitKey: true }]\n                };\n            }\n            case 'map-value-ind': {\n                this.onKeyLine = true;\n                const prev = getPrevProps(parent);\n                const start = getFirstKeyStartProps(prev);\n                return {\n                    type: 'block-map',\n                    offset: this.offset,\n                    indent: this.indent,\n                    items: [{ start, key: null, sep: [this.sourceToken] }]\n                };\n            }\n        }\n        return null;\n    }\n    atIndentedComment(start, indent) {\n        if (this.type !== 'comment')\n            return false;\n        if (this.indent <= indent)\n            return false;\n        return start.every(st => st.type === 'newline' || st.type === 'space');\n    }\n    *documentEnd(docEnd) {\n        if (this.type !== 'doc-mode') {\n            if (docEnd.end)\n                docEnd.end.push(this.sourceToken);\n            else\n                docEnd.end = [this.sourceToken];\n            if (this.type === 'newline')\n                yield* this.pop();\n        }\n    }\n    *lineEnd(token) {\n        switch (this.type) {\n            case 'comma':\n            case 'doc-start':\n            case 'doc-end':\n            case 'flow-seq-end':\n            case 'flow-map-end':\n            case 'map-value-ind':\n                yield* this.pop();\n                yield* this.step();\n                break;\n            case 'newline':\n                this.onKeyLine = false;\n            // fallthrough\n            case 'space':\n            case 'comment':\n            default:\n                // all other values are errors\n                if (token.end)\n                    token.end.push(this.sourceToken);\n                else\n                    token.end = [this.sourceToken];\n                if (this.type === 'newline')\n                    yield* this.pop();\n        }\n    }\n}\n\nexport { Parser };\n","import { Composer } from './compose/composer.js';\nimport { Document } from './doc/Document.js';\nimport { prettifyError, YAMLParseError } from './errors.js';\nimport { warn } from './log.js';\nimport { LineCounter } from './parse/line-counter.js';\nimport { Parser } from './parse/parser.js';\n\nfunction parseOptions(options) {\n    const prettyErrors = options.prettyErrors !== false;\n    const lineCounter = options.lineCounter || (prettyErrors && new LineCounter()) || null;\n    return { lineCounter, prettyErrors };\n}\n/**\n * Parse the input as a stream of YAML documents.\n *\n * Documents should be separated from each other by `...` or `---` marker lines.\n *\n * @returns If an empty `docs` array is returned, it will be of type\n *   EmptyStream and contain additional stream information. In\n *   TypeScript, you should use `'empty' in docs` as a type guard for it.\n */\nfunction parseAllDocuments(source, options = {}) {\n    const { lineCounter, prettyErrors } = parseOptions(options);\n    const parser = new Parser(lineCounter?.addNewLine);\n    const composer = new Composer(options);\n    const docs = Array.from(composer.compose(parser.parse(source)));\n    if (prettyErrors && lineCounter)\n        for (const doc of docs) {\n            doc.errors.forEach(prettifyError(source, lineCounter));\n            doc.warnings.forEach(prettifyError(source, lineCounter));\n        }\n    if (docs.length > 0)\n        return docs;\n    return Object.assign([], { empty: true }, composer.streamInfo());\n}\n/** Parse an input string into a single YAML.Document */\nfunction parseDocument(source, options = {}) {\n    const { lineCounter, prettyErrors } = parseOptions(options);\n    const parser = new Parser(lineCounter?.addNewLine);\n    const composer = new Composer(options);\n    // `doc` is always set by compose.end(true) at the very latest\n    let doc = null;\n    for (const _doc of composer.compose(parser.parse(source), true, source.length)) {\n        if (!doc)\n            doc = _doc;\n        else if (doc.options.logLevel !== 'silent') {\n            doc.errors.push(new YAMLParseError(_doc.range.slice(0, 2), 'MULTIPLE_DOCS', 'Source contains multiple documents; please use YAML.parseAllDocuments()'));\n            break;\n        }\n    }\n    if (prettyErrors && lineCounter) {\n        doc.errors.forEach(prettifyError(source, lineCounter));\n        doc.warnings.forEach(prettifyError(source, lineCounter));\n    }\n    return doc;\n}\nfunction parse(src, reviver, options) {\n    let _reviver = undefined;\n    if (typeof reviver === 'function') {\n        _reviver = reviver;\n    }\n    else if (options === undefined && reviver && typeof reviver === 'object') {\n        options = reviver;\n    }\n    const doc = parseDocument(src, options);\n    if (!doc)\n        return null;\n    doc.warnings.forEach(warning => warn(doc.options.logLevel, warning));\n    if (doc.errors.length > 0) {\n        if (doc.options.logLevel !== 'silent')\n            throw doc.errors[0];\n        else\n            doc.errors = [];\n    }\n    return doc.toJS(Object.assign({ reviver: _reviver }, options));\n}\nfunction stringify(value, replacer, options) {\n    let _replacer = null;\n    if (typeof replacer === 'function' || Array.isArray(replacer)) {\n        _replacer = replacer;\n    }\n    else if (options === undefined && replacer) {\n        options = replacer;\n    }\n    if (typeof options === 'string')\n        options = options.length;\n    if (typeof options === 'number') {\n        const indent = Math.round(options);\n        options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };\n    }\n    if (value === undefined) {\n        const { keepUndefined } = options ?? replacer ?? {};\n        if (!keepUndefined)\n            return undefined;\n    }\n    return new Document(value, _replacer, options).toString(options);\n}\n\nexport { parse, parseAllDocuments, parseDocument, stringify };\n","export const QUERY_TEMPLATE = `# This is your query - you can modify it directly and click Run to see new results.\r\n# Try uncommenting the elements below\r\n# To learn more about the query syntax, visit [Doc URL]\r\n---\r\nmodel: {{dataSourceTitle}}\r\n# metadata:\r\n#   - jaql:\r\n#       dim: \"[DimTable1.SomeTextColumn]\"\r\n#       title: Dimension1\r\n#   - jaql:\r\n#       dim: \"[Table2.SomeDateColumn]\"\r\n#       level: years\r\n#       title: Dimension2\r\n#     format:\r\n#       mask:\r\n#         years: yyyy\r\n#   - jaql:\r\n#       dim: \"[FactTable1.Column1]\"\r\n#       agg: sum\r\n#       title: Measure1\r\n#   - jaql:\r\n#       type: measure\r\n#       formula: (SUM([Column1]) - SUM([Column2])) / SUM([Column1])\r\n#       context:\r\n#         \"[Column1]\":\r\n#           dim: \"[FactTable1.Column1]\"\r\n#         \"[Column2]\":\r\n#           dim: \"[FactTable1.Column2]\"\r\n#       title: Measure2\r\n#   - jaql:\r\n#       dim: \"[FactTable1.Column1]\"\r\n#       filter:\r\n#         fromNotEqual: 1000\r\n#     panel: scope\r\n# chart:\r\n#   chartType: table\r\n#   dataOptions:\r\n#     columns:\r\n#       - name: Dimension1\r\n#       - name: Dimension2\r\n#       - name: Measure1\r\n#       - name: Measure2`;\r\n","import {\r\n  ExpandedQueryModel,\r\n  EMPTY_SIMPLE_QUERY_MODEL,\r\n  SimpleQueryModel,\r\n  SimpleChartRecommendations,\r\n  ChartRecommendations,\r\n} from '../types.js';\r\nimport YAML from 'yaml';\r\nimport {\r\n  AggregationTypes,\r\n  DimensionalBaseMeasure,\r\n  MetadataItem,\r\n  MetadataItemJaql,\r\n  DataSourceField,\r\n} from '@sisense/sdk-data';\r\nimport { capitalizeFirstLetter, sanitizeDimensionId, validateQueryModel } from '../common/utils.js';\r\n// .js is required for lodash import\r\nimport cloneDeep from 'lodash-es/cloneDeep';\r\nimport { QUERY_TEMPLATE } from './query-templates.js';\r\nimport { populatePlaceholders } from '../code/generate-code.js';\r\nimport { deriveChartFamily } from '@/chart/helpers/derive-chart-family.js';\r\nimport { normalizeAnyColumn } from '@/chart-data-options/utils.js';\r\n\r\n/**\r\n * A class that translates ExpandedQueryModel (Raw JAQL+Chart Recommendations)\r\n * to SimpleQueryModel (Simple JAQL+Simple Chart Options) and vice versa.\r\n *\r\n * It also provides methods to stringify query models to YAML strings\r\n * and parse YAML strings to query models.\r\n *\r\n * @deprecated QueryTranslator was designed for Forge, which is now discontinued. To simplify the JQL query from NLQ, use simplifyMetadataItem() instead.\r\n * @internal\r\n */\r\nexport class QueryTranslator {\r\n  private readonly contextTitle: string;\r\n\r\n  private readonly indexedFields: Record<string, DataSourceField> = {};\r\n\r\n  /**\r\n   * Constructor for QueryTranslator.\r\n   *\r\n   * @param contextTitle - The context title\r\n   * @param fields - The data source fields\r\n   */\r\n  constructor(contextTitle: string, fields: DataSourceField[]) {\r\n    this.contextTitle = contextTitle;\r\n    this.indexedFields = this.indexFields(fields);\r\n  }\r\n\r\n  private indexFields(fields: DataSourceField[]): Record<string, DataSourceField> {\r\n    return fields.reduce((acc, field) => {\r\n      const key = field.id;\r\n      acc[key] = field;\r\n      const sanitizedKey = sanitizeDimensionId(key);\r\n      // index also sanitizedKey (e.g., [Commerce.Date])\r\n      // if it is different from key (e.g., [Commerce.Date (Calendar)]),\r\n      if (key !== sanitizedKey) {\r\n        acc[sanitizedKey] = { ...field, id: sanitizedKey };\r\n      }\r\n      return acc;\r\n    }, {} as Record<string, DataSourceField>);\r\n  }\r\n\r\n  /**\r\n   * Concatenates Aggregation Types.\r\n   */\r\n  private concatAggTypes(): string {\r\n    const values = Object.values(AggregationTypes);\r\n    return values.map((value) => DimensionalBaseMeasure.aggregationToJAQL(value)).join('|');\r\n  }\r\n\r\n  /**\r\n   * Simplifies Aggregation Formula defined in MetadataItemJaql returned from chat response.\r\n   *\r\n   * @param aggFormula - The Aggregation Formula to simplify\r\n   * @returns The equivalent measure\r\n   * @privateRemarks\r\n   * See unit tests for examples of aggregation formulas and their equivalent measures.\r\n   */\r\n  simplifyAggFormula(aggFormula: MetadataItemJaql): MetadataItemJaql {\r\n    const { formula, context, filter } = aggFormula;\r\n\r\n    if (!context || !formula) {\r\n      return aggFormula;\r\n    }\r\n\r\n    const keys = Object.keys(context);\r\n    // if context has multiple entries, return the original formula without simplification\r\n    if (keys.length !== 1) {\r\n      return aggFormula;\r\n    }\r\n    const key = keys[0];\r\n    const contextValue = context[key];\r\n    const aggTypes = this.concatAggTypes();\r\n    // eslint-disable-next-line security/detect-non-literal-regexp\r\n    const regex = new RegExp(`^\\\\s*(${aggTypes})\\\\(\\\\[\\\\w+\\\\]\\\\)$`);\r\n\r\n    const match = formula.match(regex);\r\n    if (match && formula.includes(key)) {\r\n      // Extracting the aggregation function from the match\r\n      const agg = match[1];\r\n      return {\r\n        dim: contextValue.dim,\r\n        agg: agg,\r\n        title: aggFormula.title,\r\n        filter: filter ? { ...filter } : undefined,\r\n      };\r\n    }\r\n    return aggFormula;\r\n  }\r\n\r\n  /**\r\n   * Simplifies MetadataItemJaql.\r\n   *\r\n   * @param item - The MetadataItemJaql to simplify\r\n   * @returns The simplified MetadataItemJaql\r\n   */\r\n  simplifyMetadataItemJaql(item: MetadataItemJaql): MetadataItemJaql {\r\n    // if item contains a simple aggregation formula, simplify it\r\n    let simplifiedItem = item;\r\n\r\n    if ('formula' in item) {\r\n      simplifiedItem = this.simplifyAggFormula(item);\r\n    }\r\n\r\n    // remove table and column and datatype from simplifiedItem\r\n    delete simplifiedItem.table;\r\n    delete simplifiedItem.column;\r\n    delete simplifiedItem.datatype;\r\n\r\n    if ('context' in simplifiedItem) {\r\n      const context = { ...simplifiedItem.context };\r\n      Object.keys(context).forEach((key) => {\r\n        context[key] = this.simplifyMetadataItemJaql(context[key]);\r\n      });\r\n      simplifiedItem.context = context;\r\n    }\r\n    return simplifiedItem;\r\n  }\r\n\r\n  /**\r\n   * Simplify filter\r\n   *\r\n   * @param item - the MetadataItem\r\n   * @return the MetadataItem with simplified filter\r\n   */\r\n  simplifyMetadataItemFilter(item: MetadataItem): MetadataItem {\r\n    const simplifiedItem = item;\r\n    if (simplifiedItem.panel !== 'scope') return simplifiedItem;\r\n\r\n    // format can be removed completely\r\n    delete simplifiedItem.format;\r\n\r\n    const { jaql } = simplifiedItem;\r\n    if (jaql.filter?.by) {\r\n      jaql.filter.by = this.simplifyAggFormula(jaql.filter.by);\r\n    }\r\n\r\n    return { ...simplifiedItem, jaql };\r\n  }\r\n\r\n  /**\r\n   * Simplify date and number format\r\n   *\r\n   * @param item - the MetadataItem\r\n   * @return the MetadataItem with simplified format\r\n   */\r\n  simplifyMetadataItemFormat(item: MetadataItem): MetadataItem {\r\n    const {\r\n      jaql: { level },\r\n      format: { mask } = {},\r\n    } = item;\r\n    if (level && mask?.[level]) {\r\n      return { ...item, format: { mask: { [level]: mask[level] } } };\r\n    }\r\n    return item;\r\n  }\r\n\r\n  /**\r\n   * Simplifies MetadataItem.\r\n   *\r\n   * @param item - The MetadataItem to simplify\r\n   * @returns The simplified MetadataItem\r\n   */\r\n  simplifyMetadataItem(item: MetadataItem): MetadataItem {\r\n    let simplifiedItem = item;\r\n    // simplify prop panel\r\n    if (simplifiedItem.panel && ['rows', 'columns', 'measures'].includes(simplifiedItem.panel)) {\r\n      delete simplifiedItem.panel;\r\n    }\r\n\r\n    // simplify filter\r\n    simplifiedItem = this.simplifyMetadataItemFilter(simplifiedItem);\r\n\r\n    // simplify format\r\n    simplifiedItem = this.simplifyMetadataItemFormat(simplifiedItem);\r\n\r\n    const { jaql, measure, by } = simplifiedItem;\r\n    return {\r\n      ...simplifiedItem,\r\n      jaql: this.simplifyMetadataItemJaql(jaql),\r\n      by: by ? this.simplifyMetadataItemJaql(by) : undefined,\r\n      measure: measure ? this.simplifyMetadataItemJaql(measure) : undefined,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Simplifies Chart Recommendations.\r\n   *\r\n   * @param chartRecommendations - The Chart Recommendations to simplify\r\n   * @returns The simplified chart data options\r\n   */\r\n  simplifyChartRecommendations(\r\n    chartRecommendations: ChartRecommendations | {},\r\n  ): SimpleChartRecommendations | {} {\r\n    if (!('axesMapping' in chartRecommendations)) {\r\n      return {};\r\n    }\r\n\r\n    const { chartType, axesMapping, styleOptions } = chartRecommendations;\r\n\r\n    const dataOptions = Object.entries(axesMapping).reduce((acc, [key, items]) => {\r\n      acc[key] = items.map((item) => normalizeAnyColumn(item));\r\n      return acc;\r\n    }, {});\r\n\r\n    // Remove chartFamily from chartRecommendations and rename axesMapping to dataOptions\r\n    return { chartType, dataOptions, styleOptions };\r\n  }\r\n\r\n  /**\r\n   * Returns the query title with the chart type.\r\n   *\r\n   * @param queryTitle - The query title\r\n   * @param chartRecommendations - The chart recommendations\r\n   * @returns The query title with the chart type\r\n   */\r\n  getQueryTitleWithChartType(\r\n    queryTitle: string,\r\n    chartRecommendations: {} | ChartRecommendations,\r\n  ): string {\r\n    let chartTypeKeyword =\r\n      'chartType' in chartRecommendations ? chartRecommendations.chartType : 'table';\r\n    if (chartTypeKeyword !== 'table') {\r\n      chartTypeKeyword += ' chart';\r\n    }\r\n\r\n    return `${chartTypeKeyword} showing ${queryTitle.toLowerCase()}`;\r\n  }\r\n\r\n  /**\r\n   * Takes a ExpandedQueryModel (e.g., from chat response) and translates it to SimpleQueryModel.\r\n   *\r\n   * @param expandedQueryModel - The Expanded Query model to simplify\r\n   * @returns The simplified query model\r\n   */\r\n  translateToSimple(expandedQueryModel: ExpandedQueryModel): SimpleQueryModel {\r\n    try {\r\n      // work with a deep copy of the query model to avoid mutation\r\n      const { jaql, chartRecommendations, queryTitle } = cloneDeep(expandedQueryModel);\r\n\r\n      return {\r\n        model: jaql.datasource.title,\r\n        metadata: jaql.metadata.map((item) => this.simplifyMetadataItem(item)),\r\n        chart: this.simplifyChartRecommendations(chartRecommendations),\r\n        queryTitle: this.getQueryTitleWithChartType(queryTitle, chartRecommendations),\r\n      };\r\n    } catch (e) {\r\n      // TODO implement error handling\r\n      console.error('Error running toSimpleQuery', e);\r\n      return EMPTY_SIMPLE_QUERY_MODEL;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Stringifies a simple query model to YAML string.\r\n   *\r\n   * @param simpleQueryModel - The Simple Query model to convert\r\n   * @returns The YAML string representing the simple query model\r\n   */\r\n  stringifySimple(simpleQueryModel: SimpleQueryModel): string {\r\n    const { queryTitle, ...queryBody } = simpleQueryModel;\r\n    const doc = new YAML.Document(queryBody);\r\n    // set query title as comment before the query\r\n    doc.commentBefore = ` ${capitalizeFirstLetter(queryTitle)}`;\r\n    // set docStart to use '---' as the start of the doc after the query title, instead of a blank line\r\n    if (doc.directives) doc.directives.docStart = true;\r\n    return String(doc);\r\n  }\r\n\r\n  /**\r\n   * Returns the query template.\r\n   */\r\n  getQueryTemplate(): string {\r\n    return populatePlaceholders(QUERY_TEMPLATE, { dataSourceTitle: this.contextTitle });\r\n  }\r\n\r\n  /**\r\n   * Parses a YAML string to Simple Query Model.\r\n   *\r\n   * @param simpleQueryYaml - The YAML string to parse\r\n   * @returns The Simple Query Model\r\n   */\r\n  parseSimple(simpleQueryYaml: string): SimpleQueryModel {\r\n    try {\r\n      const doc = YAML.parseDocument(simpleQueryYaml);\r\n      const { commentBefore } = doc;\r\n      const queryModel = validateQueryModel(doc.toJS());\r\n      queryModel.queryTitle = commentBefore?.trim() || '';\r\n      return queryModel;\r\n    } catch (e) {\r\n      // TODO implement error handling\r\n      console.error('Error parsing the YAML string', e);\r\n    }\r\n\r\n    return EMPTY_SIMPLE_QUERY_MODEL;\r\n  }\r\n\r\n  /**\r\n   * Expands Chart Recommendations.\r\n   *\r\n   * @param chartRecommendations - The Chart Recommendations to expand\r\n   * @returns The expanded chart recommendations\r\n   */\r\n  expandChartRecommendations(\r\n    chartRecommendations: SimpleChartRecommendations | {},\r\n  ): ChartRecommendations | {} {\r\n    if (!chartRecommendations || !('dataOptions' in chartRecommendations)) {\r\n      return {};\r\n    }\r\n\r\n    const { chartType, dataOptions: axesMapping, styleOptions } = chartRecommendations;\r\n    const chartFamily = deriveChartFamily(chartType);\r\n\r\n    // Add back chartFamily\r\n    return { chartFamily, chartType, axesMapping, styleOptions };\r\n  }\r\n\r\n  /**\r\n   * Expands MetadataItemJaql by adding table, column, datatype, and title\r\n   * if they are missing from the item.\r\n   *\r\n   * @param item - The MetadataItemJaql to expand\r\n   * @returns The expanded MetadataItemJaql\r\n   */\r\n  expandMetadataItemJaql(item: MetadataItemJaql): MetadataItemJaql {\r\n    const { dim = '', agg, context } = item;\r\n\r\n    // expand context if exists\r\n    if (context) {\r\n      Object.keys(context).forEach((key) => {\r\n        context[key] = this.expandMetadataItemJaql(context[key]);\r\n      });\r\n      item.context = context;\r\n    }\r\n\r\n    const field = this.indexedFields[dim];\r\n    if (!field) {\r\n      return item;\r\n    }\r\n\r\n    let { filter } = item;\r\n    if (filter?.by) {\r\n      filter = { ...filter, by: this.expandMetadataItemJaql(filter.by) };\r\n      item.filter = filter;\r\n    }\r\n\r\n    return {\r\n      table: field.table,\r\n      column: field.column,\r\n      datatype: field.dimtype,\r\n      title: agg ? agg + ' ' + field.title : field.title,\r\n      ...item,\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Expands MetadataItem\r\n   *\r\n   * @param item - The MetadataItem to expand\r\n   * @returns The expanded MetadataItem\r\n   */\r\n  expandMetadataItem(item: MetadataItem): MetadataItem {\r\n    const { jaql, measure } = item;\r\n\r\n    if (measure) {\r\n      return {\r\n        ...item,\r\n        jaql: this.expandMetadataItemJaql(jaql),\r\n        measure: this.expandMetadataItemJaql(measure),\r\n      };\r\n    }\r\n\r\n    return {\r\n      ...item,\r\n      jaql: this.expandMetadataItemJaql(jaql),\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Translates a Simple Query Model to Expanded Query Model.\r\n   *\r\n   * @param simpleQueryModel - The Simple Query model to convert\r\n   * @returns The Expanded Query Model\r\n   */\r\n  translateToExpanded(simpleQueryModel: SimpleQueryModel): ExpandedQueryModel {\r\n    // work with a deep copy of the query model to avoid mutation\r\n    const { model, metadata, chart, queryTitle } = cloneDeep(simpleQueryModel);\r\n    const jaql = {\r\n      datasource: { title: model },\r\n      metadata: metadata.map((item) => this.expandMetadataItem(item)),\r\n    };\r\n    const chartRecommendations = this.expandChartRecommendations(chart);\r\n    return { jaql, chartRecommendations, queryTitle };\r\n  }\r\n}\r\n","import { WidgetProps } from '@/props.js';\r\nimport { getWidgetCode } from '../widget/to-widget-code.js';\r\nimport { TemplateKeyMapByWidgetType, UiFramework } from '../types.js';\r\nexport const stringifyWidgets = (widgets: WidgetProps[], uiFramework: UiFramework): string => {\r\n  const templateKeyMap: TemplateKeyMapByWidgetType = {\r\n    chart: 'chartWidgetPropsTmpl',\r\n    pivot: 'pivotTableWidgetPropsTmpl',\r\n  };\r\n  return `[${widgets\r\n    .map((widgetProps) => getWidgetCode(widgetProps, uiFramework, templateKeyMap))\r\n    .join(',\\n')}]`;\r\n};\r\n","import {\r\n  ByIdDashboardCodeParams,\r\n  ClientSideDashboardCodeParams,\r\n  DashboardCodeProps,\r\n} from '../types.js';\r\nimport { stringifyDataSource, stringifyExtraImports } from '../code/stringify-props.js';\r\nimport { generateCode } from '../code/generate-code.js';\r\nimport { stringifyFilters } from '../code/stringify-filters.js';\r\nimport { CodeTemplateKey } from '../types.js';\r\nimport { stringifyProps } from '../code/stringify-props.js';\r\nimport { CODE_TEMPLATES_INDENT } from '../common/constants.js';\r\nimport { type Filter } from '@sisense/sdk-data';\r\nimport { checkIfMeasuresExist } from '../common/utils.js';\r\nimport { isChartWidgetProps, isPivotTableWidgetProps } from '@/widget-by-id/utils.js';\r\nimport { stringifyWidgets } from './stringify-widgets.js';\r\n\r\nconst dashboardByIdTemplateKey: CodeTemplateKey = 'dashboardByIdTmpl';\r\nconst dashboardTemplateKey: CodeTemplateKey = 'dashboardTmpl';\r\n\r\nexport const toDashboardCodeById = ({\r\n  dashboardOid,\r\n  uiFramework = 'react',\r\n}: ByIdDashboardCodeParams): string => {\r\n  const codeProps = { dashboardOid };\r\n  const templateKey = dashboardByIdTemplateKey;\r\n  return generateCode(templateKey, codeProps, uiFramework);\r\n};\r\n\r\nexport const toDashboardCodeClientSide = ({\r\n  dashboardProps,\r\n  uiFramework = 'react',\r\n}: ClientSideDashboardCodeParams): string => {\r\n  const templateKey = dashboardTemplateKey;\r\n  const hasMeasures = dashboardProps.widgets.some(\r\n    (widget) =>\r\n      (isChartWidgetProps(widget) || isPivotTableWidgetProps(widget)) &&\r\n      checkIfMeasuresExist(widget),\r\n  );\r\n  const codeProps: DashboardCodeProps = {\r\n    titleString: dashboardProps.title,\r\n    defaultDataSourceString: stringifyDataSource(dashboardProps.defaultDataSource),\r\n    widgetsString: stringifyWidgets(dashboardProps.widgets, uiFramework),\r\n    filtersString: stringifyFilters(dashboardProps.filters),\r\n    componentString: 'Dashboard',\r\n    extraImportsString: stringifyExtraImports(\r\n      dashboardProps.filters ||\r\n        dashboardProps.widgets\r\n          .map((widget) => ('filters' in widget ? widget.filters : []))\r\n          .flat()\r\n          .filter((f): f is Filter => f !== undefined) ||\r\n        [],\r\n      hasMeasures,\r\n    ),\r\n    tabbersOptionsString: stringifyProps(\r\n      dashboardProps.tabbersOptions || {},\r\n      CODE_TEMPLATES_INDENT,\r\n    ),\r\n    layoutOptionsString: stringifyProps(dashboardProps.layoutOptions || {}, CODE_TEMPLATES_INDENT),\r\n    widgetsOptionsString: stringifyProps(\r\n      dashboardProps.widgetsOptions || {},\r\n      CODE_TEMPLATES_INDENT,\r\n      true,\r\n    ),\r\n    styleOptionsString: stringifyProps(dashboardProps.styleOptions || {}, CODE_TEMPLATES_INDENT),\r\n  };\r\n  return generateCode(templateKey, codeProps, uiFramework);\r\n};\r\n","import { DashboardCodeParams, isByIdDashboardCodeParams } from '../types.js';\r\nimport { toDashboardCodeClientSide, toDashboardCodeById } from './to-dashboard-code.js';\r\n\r\n/**\r\n * Converts dashboard props to CSDK code.\r\n *\r\n * @param dashboardProps - Dashboard props\r\n * @returns CSDK code string\r\n */\r\nexport const toDashboardCode = (dashboardCodeParams: DashboardCodeParams): string => {\r\n  if (isByIdDashboardCodeParams(dashboardCodeParams)) {\r\n    return toDashboardCodeById(dashboardCodeParams);\r\n  } else {\r\n    return toDashboardCodeClientSide(dashboardCodeParams);\r\n  }\r\n};\r\n","import { ExecuteQueryParams, ExecutePivotQueryParams } from '@/query-execution';\r\nimport { stringifyDataSource, stringifyExtraImports } from '../code/stringify-props';\r\nimport {\r\n  ExecuteQueryCodeParams,\r\n  ExecutePivotQueryCodeParams,\r\n  CodeTemplateKey,\r\n  UiFramework,\r\n  ExecuteQueryCodeProps,\r\n  ExecutePivotQueryCodeProps,\r\n} from '../types.js';\r\nimport { generateCode } from '../code/generate-code.js';\r\nimport { stringifyFilters } from '../code/stringify-filters.js';\r\nimport { stringifyProps } from '../code/stringify-props.js';\r\nimport { checkIfMeasuresExist } from '../common/utils.js';\r\n\r\nconst executeQueryTemplateKey: CodeTemplateKey = 'executeQueryTmpl';\r\nconst executePivotQueryTemplateKey: CodeTemplateKey = 'executePivotQueryTmpl';\r\n\r\nconst getExecuteQueryCode = (\r\n  queryParams: ExecuteQueryParams,\r\n  uiFramework: UiFramework,\r\n  templateKey: CodeTemplateKey,\r\n): string => {\r\n  const hasMeasures = checkIfMeasuresExist(queryParams);\r\n  const codeProps: ExecuteQueryCodeProps = {\r\n    dataSourceString: stringifyDataSource(queryParams.dataSource),\r\n    dimensionsString: stringifyProps(queryParams.dimensions || []),\r\n    measuresString: stringifyProps(queryParams.measures || []),\r\n    filtersString: stringifyFilters(queryParams.filters),\r\n    highlightsString: stringifyProps(queryParams.highlights || []),\r\n    extraImportsString: stringifyExtraImports(queryParams.filters || [], hasMeasures),\r\n  };\r\n  return generateCode(templateKey, codeProps, uiFramework);\r\n};\r\n\r\nconst getExecutePivotQueryCode = (\r\n  pivotQueryParams: ExecutePivotQueryParams,\r\n  uiFramework: UiFramework,\r\n  templateKey: CodeTemplateKey,\r\n): string => {\r\n  const hasMeasures = checkIfMeasuresExist(pivotQueryParams);\r\n  const pivotQueryProps: ExecutePivotQueryCodeProps = {\r\n    dataSourceString: stringifyDataSource(pivotQueryParams.dataSource),\r\n    rowsString: stringifyProps(pivotQueryParams.rows || []),\r\n    valuesString: stringifyProps(pivotQueryParams.values || []),\r\n    filtersString: stringifyFilters(pivotQueryParams.filters),\r\n    extraImportsString: stringifyExtraImports(pivotQueryParams.filters || [], hasMeasures),\r\n  };\r\n  return generateCode(templateKey, pivotQueryProps, uiFramework);\r\n};\r\n\r\nexport const toExecuteQueryCode = ({\r\n  queryParams,\r\n  uiFramework = 'react',\r\n}: ExecuteQueryCodeParams): string => {\r\n  const templateKey = executeQueryTemplateKey;\r\n  return getExecuteQueryCode(queryParams, uiFramework, templateKey);\r\n};\r\n\r\nexport const toExecutePivotQueryCode = ({\r\n  pivotQueryParams,\r\n  uiFramework = 'react',\r\n}: ExecutePivotQueryCodeParams): string => {\r\n  const templateKey = executePivotQueryTemplateKey;\r\n  return getExecutePivotQueryCode(pivotQueryParams, uiFramework, templateKey);\r\n};\r\n","import { ExecuteQueryCodeParams, ExecutePivotQueryCodeParams } from '../types.js';\r\nimport {\r\n  toExecuteQueryCode as importedToExecuteQueryCode,\r\n  toExecutePivotQueryCode as importedToExecutePivotQueryCode,\r\n} from './to-execute-query-code.js';\r\n\r\n/**\r\n * Converts query params to CSDK code.\r\n *\r\n * @param queryParams - queryParams params\r\n * @returns CSDK code string\r\n */\r\nexport const toExecuteQueryCode = (executeQueryCodeParams: ExecuteQueryCodeParams): string => {\r\n  return importedToExecuteQueryCode(executeQueryCodeParams);\r\n};\r\n\r\n/**\r\n * Converts pivot query params to CSDK code.\r\n *\r\n * @param executePivotQueryCodeParams - pivotQuery params\r\n * @returns CSDK code string\r\n */\r\nexport const toExecutePivotQueryCode = (\r\n  executePivotQueryCodeParams: ExecutePivotQueryCodeParams,\r\n): string => {\r\n  return importedToExecutePivotQueryCode(executePivotQueryCodeParams);\r\n};\r\n"],"names":["ALIAS","DOC","MAP","PAIR","SCALAR","SEQ","NODE_TYPE","isAlias","node","isDocument","isMap","isPair","isScalar","isSeq","isCollection","isNode","hasAnchor","BREAK","SKIP","REMOVE","visit","visitor","visitor_","initVisitor","visit_","key","path","ctrl","callVisitor","replaceNode","i","ci","ck","cv","visitAsync","__async","visitAsync_","_a","_b","_c","_d","_e","parent","pt","escapeChars","escapeTagName","tn","ch","Directives","yaml","tags","copy","res","line","onError","parts","name","handle","prefix","version","isValid","source","verbatim","suffix","error","tag","doc","lines","tagEntries","tagNames","_key","anchorIsValid","anchor","msg","anchorNames","root","anchors","findNewAnchor","exclude","createNodeAnchors","aliasObjects","sourceObjects","prevAnchors","ref","applyReviver","reviver","obj","val","len","v0","v1","k","toJS","value","arg","ctx","v","data","NodeBase","type","mapAsMap","maxAliasCount","onAnchor","count","Alias","found","_arg","getAliasCount","_onComment","_onChompKeep","src","item","c","kc","vc","isScalarValue","Scalar","defaultTagPrefix","findTagObject","tagName","match","t","tagObj","createNode","map","aliasDuplicateObjects","onTagObj","schema","collectionFromPath","a","isEmptyPath","Collection","it","rest","keepScalar","allowScalar","stringifyComment","str","indentComment","comment","indent","lineComment","FOLD_FLOW","FOLD_BLOCK","FOLD_QUOTED","foldFlowLines","text","mode","indentAtStart","lineWidth","minContentWidth","onFold","onOverflow","endStep","folds","escapedFolds","end","split","prev","overflow","escStart","escEnd","consumeMoreIndentedLines","next","j","fold","start","getFoldOptions","isBlock","containsDocumentMarker","lineLengthOverLimit","indentLength","limit","strLen","doubleQuotedString","json","implicitKey","minMultiLineLength","code","singleQuotedString","quotedString","singleQuote","qs","hasDouble","hasSingle","blockEndNewlines","e","blockString","onComment","onChompKeep","blockQuote","commentString","literal","chomp","endStart","endNlPos","startWithSpace","startEnd","startNlPos","header","body","plainString","actualString","indentStep","inFlow","test","compat","stringifyString","ss","_stringify","_type","defaultKeyType","defaultStringType","createStringifyContext","options","opt","getTagObject","stringifyProps","props","stringify","o","stringifyPair","allNullValues","indentSeq","simpleKeys","keyComment","explicitKey","keyCommentDone","chompKeep","vsb","vcb","valueComment","valueCommentDone","valueStr","ws","cs","vs0","nl0","hasNewline","flow","hasPropsLine","sp0","warn","logLevel","warning","MERGE_KEY","addPairToJSMap","isMergeKey","mergeToJSMap","jsKey","stringKey","stringifyKey","jsValue","srcMap","strCtx","strKey","jsonStr","createPair","Pair","_","pair","stringifyCollection","collection","stringifyFlowCollection","stringifyBlockCollection","items","blockItemPrefix","flowChars","itemIndent","itemCtx","addCommentBefore","ik","fcPadding","reqNewline","linesAtValue","iv","sum","ic","findPair","YAMLMap","keepUndefined","replacer","add","overwrite","_pair","sortEntries","Type","YAMLSeq","idx","asItemIndex","seq","string","nullTag","boolTag","sv","stringifyNumber","format","minFractionDigits","num","n","d","floatNaN","floatExp","float","dot","intIdentify","intResolve","offset","radix","intAsBigInt","intStringify","intOct","_onError","int","intHex","stringifyJSON","jsonScalars","jsonError","binary","buffer","buf","s","resolvePairs","cn","createPairs","iterable","pairs","keys","YAMLOMap","omap","seenKeys","boolStringify","trueTag","falseTag","f","sign","intBin","YAMLSet","keepPair","set","parseSexagesimal","asBigInt","p","stringifySexagesimal","_60","intTime","floatTime","timestamp","year","month","day","hour","minute","second","millisec","date","tz","schemas","schema$1","schema$2","tagsByName","coreKnownTags","getTags","customTags","schemaName","sortMapEntriesByKey","b","Schema","merge","resolveKnownTags","sortMapEntries","toStringDefaults","stringifyDocument","hasDirectives","dir","contentComment","dc","Document","_replacer","assertCollection","keyToStr","asStr","anchorPrefix","setAnchors","jsonArg","contents","YAMLError","pos","message","YAMLParseError","YAMLWarning","prettifyError","lc","col","lineStr","trimStart","pointer","resolveProps","tokens","indicator","parentIndent","startOnNewline","spaceBefore","atNewline","hasSpace","commentSep","reqSpace","tab","newlineAfterProp","comma","token","cb","last","containsNewline","st","flowIndentCheck","fc","mapIncludes","search","uniqueKeys","isEqual","startColMsg","resolveBlockMap","composeNode","composeEmptyNode","bm","NodeClass","commentEnd","collItem","sep","keyProps","keyStart","keyNode","valueProps","valueNode","resolveBlockSeq","bs","resolveEnd","blockMsg","resolveFlowCollection","fcName","coll","atRoot","prevItemComment","loop","expectedEnd","ce","ee","cePos","resolveCollection","CN","Coll","composeCollection","tagToken","nl","lastProp","expType","kt","resolveBlockScalar","scalar","parseBlockScalarHeader","splitLines","chompStart","content","trimIndent","contentStart","prevMoreIndented","crlf","strict","length","ts","first","m","resolveFlowScalar","rel","plainValue","singleQuotedValue","doubleQuotedValue","valueEnd","re","badChar","foldLines","foldNewline","cc","escapeCodes","parseCharCode","raw","wsStart","composeScalar","range","findScalarTagByName","findScalarTagByTest","matchWithTest","directives","emptyScalarPosition","before","isSrcToken","composeAlias","alias","composeDoc","opts","contentEnd","getErrorPos","parsePrelude","prelude","atComment","afterEmptyLine","Composer","afterDoc","forceDoc","endOffset","__yieldStar","resolveAsScalar","createScalarToken","context","he","head","addEndtoBlockProps","setScalarValue","afterKey","setBlockScalarValue","setFlowScalarValue","oa","tok","cst","stringifyToken","stringifyItem","_visit","field","index","BOM","DOCUMENT","FLOW_END","prettyToken","tokenType","isEmpty","hexDigits","tagChars","flowIndicatorChars","invalidAnchorChars","isNotAnchorChar","Lexer","incomplete","dt","state","dirEnd","sp","ch0","ch1","quote","qb","lastChar","allowEmpty","allowTabs","LineCounter","low","high","mid","includesToken","list","findNonEmptyIndex","isFlowToken","getPrevProps","getFirstKeyStartProps","fixFlowSeqItems","Parser","onNewLine","lexeme","top","bv","atMapIndent","atNextItem","fs","docEnd","parseOptions","prettyErrors","parseAllDocuments","lineCounter","parser","composer","docs","parseDocument","_doc","parse","_reviver","QUERY_TEMPLATE","QueryTranslator","constructor","contextTitle","fields","indexedFields","indexFields","reduce","acc","id","sanitizedKey","sanitizeDimensionId","__spreadProps","__spreadValues","values","Object","AggregationTypes","DimensionalBaseMeasure","aggregationToJAQL","join","simplifyAggFormula","aggFormula","formula","filter","contextValue","aggTypes","concatAggTypes","regex","RegExp","includes","agg","dim","title","undefined","simplifyMetadataItemJaql","simplifiedItem","table","column","datatype","forEach","simplifyMetadataItemFilter","panel","jaql","by","simplifyMetadataItemFormat","level","mask","simplifyMetadataItem","measure","simplifyChartRecommendations","chartRecommendations","chartType","axesMapping","styleOptions","dataOptions","entries","normalizeAnyColumn","getQueryTitleWithChartType","queryTitle","chartTypeKeyword","toLowerCase","translateToSimple","expandedQueryModel","cloneDeep","model","datasource","metadata","chart","EMPTY_SIMPLE_QUERY_MODEL","stringifySimple","simpleQueryModel","queryBody","YAML","commentBefore","capitalizeFirstLetter","docStart","String","getQueryTemplate","populatePlaceholders","dataSourceTitle","parseSimple","simpleQueryYaml","queryModel","validateQueryModel","trim","expandChartRecommendations","chartFamily","deriveChartFamily","expandMetadataItemJaql","dimtype","expandMetadataItem","translateToExpanded","stringifyWidgets","widgets","uiFramework","templateKeyMap","pivot","widgetProps","getWidgetCode","dashboardByIdTemplateKey","dashboardTemplateKey","toDashboardCodeById","dashboardOid","codeProps","templateKey","generateCode","toDashboardCodeClientSide","dashboardProps","hasMeasures","some","widget","isChartWidgetProps","isPivotTableWidgetProps","checkIfMeasuresExist","titleString","defaultDataSourceString","stringifyDataSource","defaultDataSource","widgetsString","filtersString","stringifyFilters","filters","componentString","extraImportsString","stringifyExtraImports","flat","tabbersOptionsString","tabbersOptions","CODE_TEMPLATES_INDENT","layoutOptionsString","layoutOptions","widgetsOptionsString","widgetsOptions","styleOptionsString","toDashboardCode","dashboardCodeParams","isByIdDashboardCodeParams","executeQueryTemplateKey","executePivotQueryTemplateKey","getExecuteQueryCode","queryParams","dataSourceString","dataSource","dimensionsString","dimensions","measuresString","measures","highlightsString","highlights","getExecutePivotQueryCode","pivotQueryParams","pivotQueryProps","rowsString","rows","valuesString","toExecuteQueryCode","toExecutePivotQueryCode","executeQueryCodeParams","importedToExecuteQueryCode","executePivotQueryCodeParams","importedToExecutePivotQueryCode"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69]}