fx/npm/index.js
Anton Medvedev dcb354c5cf
Add yaml (#293)
* Add property access function

* Add yaml

* Add --yaml flag

* Use goccy/go-yaml
2024-03-09 00:23:32 +01:00

713 lines
147 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
'use strict'
void async function main() {
const os = await import('node:os')
const fs = await import('node:fs')
const process = await import('node:process')
let flagHelp = false
let flagRaw = false
let flagSlurp = false
let flagYaml = false
const args = []
for (const arg of process.argv.slice(2)) {
if (arg === '--help' || arg === '-h') flagHelp = true
else if (arg === '--raw' || arg === '-r') flagRaw = true
else if (arg === '--slurp' || arg === '-s') flagSlurp = true
else if (arg === '-rs' || arg === '-sr') flagRaw = flagSlurp = true
else if (arg === '--yaml') flagYaml = true
else args.push(arg)
}
if (flagHelp || (args.length === 0 && process.stdin.isTTY)) {
return printUsage()
}
const theme = themes(process.stdout.isTTY ? (process.env.FX_THEME || '1') : '0')
await importFxrc(process.cwd())
await importFxrc(os.homedir())
let fd = 0 // stdin
if (args.length > 0) {
let filename =
isFile(fs, args[0]) ? args.shift() :
isFile(fs, args.at(-1)) ? args.pop() : false
if (filename) {
fd = fs.openSync(filename, 'r')
if (!flagYaml) flagYaml = /\.ya?ml$/i.test(filename)
}
}
const gen = await read(fd)
const input =
flagRaw
? readLine(gen)
: flagYaml
? parseYaml(gen)
: parseJson(gen)
if (flagSlurp) {
const array = []
for (const json of input) {
array.push(json)
}
await transform(array, args, theme)
} else {
for (const json of input) {
await transform(json, args, theme)
}
}
}()
const skip = Symbol('skip')
async function transform(json, args, theme) {
let i, code, jsCode, output = json
for ([i, code] of args.entries()) try {
jsCode = transpile(code)
const fn = `(function () {
const x = this
return ${jsCode}
})`
output = await run(output, fn)
} catch (err) {
await printErr(err)
}
if (typeof output === 'undefined')
console.error('undefined')
else if (typeof output === 'string')
console.log(output)
else if (output === skip)
return
else
console.log(stringify(output, theme))
async function printErr(err) {
const process = await import('node:process')
let pre = args.slice(0, i).join(' ')
let post = args.slice(i + 1).join(' ')
if (pre.length > 20) pre = '...' + pre.substring(pre.length - 20)
if (post.length > 20) post = post.substring(0, 20) + '...'
console.error(
`\n ${pre} ${code} ${post}\n` +
` ${' '.repeat(pre.length + 1)}${'^'.repeat(code.length)}\n` +
(jsCode !== code ? `\n${jsCode}\n` : ``) +
`\n${err.stack || err}`,
)
process.exit(1)
}
}
function transpile(code) {
if ('.' === code)
return 'x'
if (/^(\.\w*)+\[]/.test(code))
return `(${fold(code.split('[]'))})(x)`
function fold(s) {
if (s.length === 1)
return 'x => x' + s[0]
let obj = s.shift()
obj = obj === '.' ? 'x' : 'x' + obj
return `x => ${obj}.flatMap(${fold(s)})`
}
if (/^\.\[/.test(code))
return `x${code.substring(1)}`
if (/^\./.test(code))
return `x${code}`
// deprecated
if (/^map\(.+?\)$/i.test(code)) {
let s = code.substring(4, code.length - 1)
if (s[0] === '.') s = 'x' + s
return `x.map((x, i) => apply(${s}, x, i))`
}
if (/^@/.test(code)) {
const jsCode = transpile(code.substring(1))
return `x.map((x, i) => apply(${jsCode}, x, i))`
}
return code
}
async function run(json, code) {
const fn = eval(code).call(json)
return apply(fn, json)
function apply(fn, ...args) {
if (typeof fn === 'function') return fn(...args)
return fn
}
function len(x) {
if (Array.isArray(x)) return x.length
if (typeof x === 'string') return x.length
if (typeof x === 'object' && x !== null) return Object.keys(x).length
throw new Error(`Cannot get length of ${typeof x}`)
}
function uniq(x) {
if (Array.isArray(x)) return [...new Set(x)]
throw new Error(`Cannot get unique values of ${typeof x}`)
}
function sort(x) {
if (Array.isArray(x)) return x.sort()
throw new Error(`Cannot sort ${typeof x}`)
}
function map(fn) {
return function (x) {
if (Array.isArray(x)) return x.map((v, i) => fn(v, i))
throw new Error(`Cannot map ${typeof x}`)
}
}
function sortBy(fn) {
return function (x) {
if (Array.isArray(x)) return x.sort((a, b) => {
const fa = fn(a)
const fb = fn(b)
return fa < fb ? -1 : fa > fb ? 1 : 0
})
throw new Error(`Cannot sort ${typeof x}`)
}
}
function groupBy(keyFn) {
return function (x) {
const grouped = {}
for (const item of x) {
const key = typeof keyFn === 'function' ? keyFn(item) : item[keyFn]
if (!grouped.hasOwnProperty(key)) grouped[key] = []
grouped[key].push(item)
}
return grouped
}
}
function chunk(size) {
return function (x) {
const res = []
let i = 0
while (i < x.length) {
res.push(x.slice(i, i += size))
}
return res
}
}
function zip(...x) {
const length = Math.min(...x.map(a => a.length))
const res = []
for (let i = 0; i < length; i++) {
res.push(x.map(a => a[i]))
}
return res
}
function flatten(x) {
if (Array.isArray(x)) return x.flat()
throw new Error(`Cannot flatten ${typeof x}`)
}
function reverse(x) {
if (Array.isArray(x)) return x.reverse()
throw new Error(`Cannot reverse ${typeof x}`)
}
function keys(x) {
if (typeof x === 'object' && x !== null) return Object.keys(x)
throw new Error(`Cannot get keys of ${typeof x}`)
}
function values(x) {
if (typeof x === 'object' && x !== null) return Object.values(x)
throw new Error(`Cannot get values of ${typeof x}`)
}
}
async function read(fd = 0) {
const fs = await import('node:fs')
const {Buffer} = await import('node:buffer')
const {StringDecoder} = await import('node:string_decoder')
const decoder = new StringDecoder('utf8')
return function* () {
while (true) {
const buffer = Buffer.alloc(4_096)
let bytesRead
try {
bytesRead = fs.readSync(fd, buffer, 0, buffer.length, null)
} catch (e) {
if (e.code === 'EAGAIN' || e.code === 'EWOULDBLOCK') {
sleepSync(10)
continue
}
if (e.code === 'EOF') break
throw e
}
if (bytesRead === 0) break
for (const ch of decoder.write(buffer.subarray(0, bytesRead)))
yield ch
}
for (const ch of decoder.end())
yield ch
}()
}
function isFile(fs, path) {
const stat = fs.statSync(path, {throwIfNoEntry: false})
return stat !== undefined && stat.isFile()
}
function sleepSync(ms) {
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms)
}
function* readLine(stdin) {
let buffer = ''
for (const ch of stdin) {
if (ch === '\n') {
yield buffer
buffer = ''
} else {
buffer += ch
}
}
return buffer
}
function* parseYaml(gen) {
let buffer = ''
for (const ch of gen) {
buffer += ch
}
try {
yield YAML.parse(buffer)
} catch (err) {
throw new SyntaxError(err.message)
}
}
function* parseJson(gen) {
let lineNumber = 1, buffer = '', lastChar, done = false
function next() {
({value: lastChar, done} = gen.next())
if (lastChar === '\n') lineNumber++
buffer += (lastChar || '')
if (buffer.length > 100) buffer = buffer.slice(-40)
}
next()
while (!done) {
const value = parseValue()
expectValue(value)
yield value
}
function parseValue() {
skipWhitespace()
const value =
parseString() ??
parseNumber() ??
parseObject() ??
parseArray() ??
parseKeyword('true', true) ??
parseKeyword('false', false) ??
parseKeyword('null', null)
skipWhitespace()
return value
}
function parseString() {
if (lastChar !== '"') return
let str = ''
let escaped = false
while (true) {
next()
if (escaped) {
if (lastChar === 'u') {
let unicode = ''
for (let i = 0; i < 4; i++) {
next()
if (!isHexDigit(lastChar)) {
throw new SyntaxError(errorSnippet(`Invalid Unicode escape sequence '\\u${unicode}${lastChar}'`))
}
unicode += lastChar
}
str += String.fromCharCode(parseInt(unicode, 16))
} else {
const escapedChar = {
'"': '"',
'\\': '\\',
'/': '/',
'b': '\b',
'f': '\f',
'n': '\n',
'r': '\r',
't': '\t',
}[lastChar]
if (!escapedChar) {
throw new SyntaxError(errorSnippet())
}
str += escapedChar
}
escaped = false
} else if (lastChar === '\\') {
escaped = true
} else if (lastChar === '"') {
break
} else if (lastChar < '\x1F') {
throw new SyntaxError(errorSnippet(`Unescaped control character ${JSON.stringify(lastChar)}`))
} else if (lastChar === undefined) {
throw new SyntaxError(errorSnippet())
} else {
str += lastChar
}
}
next()
return str
}
function parseNumber() {
if (!isDigit(lastChar) && lastChar !== '-') return
let numStr = ''
if (lastChar === '-') {
numStr += lastChar
next()
if (!isDigit(lastChar)) {
throw new SyntaxError(errorSnippet())
}
}
if (lastChar === '0') {
numStr += lastChar
next()
} else {
while (isDigit(lastChar)) {
numStr += lastChar
next()
}
}
if (lastChar === '.') {
numStr += lastChar
next()
if (!isDigit(lastChar)) {
throw new SyntaxError(errorSnippet())
}
while (isDigit(lastChar)) {
numStr += lastChar
next()
}
}
if (lastChar === 'e' || lastChar === 'E') {
numStr += lastChar
next()
if (lastChar === '+' || lastChar === '-') {
numStr += lastChar
next()
}
if (!isDigit(lastChar)) {
throw new SyntaxError(errorSnippet())
}
while (isDigit(lastChar)) {
numStr += lastChar
next()
}
}
return isInteger(numStr) ? toSafeNumber(numStr) : parseFloat(numStr)
}
function parseObject() {
if (lastChar !== '{') return
next()
skipWhitespace()
const obj = {}
if (lastChar === '}') {
next()
return obj
}
while (true) {
if (lastChar !== '"') {
throw new SyntaxError(errorSnippet())
}
const key = parseString()
skipWhitespace()
if (lastChar !== ':') {
throw new SyntaxError(errorSnippet())
}
next()
const value = parseValue()
expectValue(value)
obj[key] = value
skipWhitespace()
if (lastChar === '}') {
next()
return obj
} else if (lastChar === ',') {
next()
skipWhitespace()
if (lastChar === '}') {
next()
return obj
}
} else {
throw new SyntaxError(errorSnippet())
}
}
}
function parseArray() {
if (lastChar !== '[') return
next()
skipWhitespace()
const array = []
if (lastChar === ']') {
next()
return array
}
while (true) {
const value = parseValue()
expectValue(value)
array.push(value)
skipWhitespace()
if (lastChar === ']') {
next()
return array
} else if (lastChar === ',') {
next()
skipWhitespace()
if (lastChar === ']') {
next()
return array
}
} else {
throw new SyntaxError(errorSnippet())
}
}
}
function parseKeyword(name, value) {
if (lastChar !== name[0]) return
for (let i = 1; i < name.length; i++) {
next()
if (lastChar !== name[i]) {
throw new SyntaxError(errorSnippet())
}
}
next()
if (isWhitespace(lastChar) || lastChar === ',' || lastChar === '}' || lastChar === ']' || lastChar === undefined) {
return value
}
throw new SyntaxError(errorSnippet())
}
function skipWhitespace() {
while (isWhitespace(lastChar)) {
next()
}
skipComment()
}
function skipComment() {
if (lastChar === '/') {
next()
if (lastChar === '/') {
while (!done && lastChar !== '\n') {
next()
}
skipWhitespace()
} else if (lastChar === '*') {
while (!done) {
next()
if (lastChar === '*') {
next()
if (lastChar === '/') {
next()
break
}
}
}
skipWhitespace()
} else {
throw new SyntaxError(errorSnippet())
}
}
}
function isWhitespace(ch) {
return ch === ' ' || ch === '\n' || ch === '\t' || ch === '\r'
}
function isHexDigit(ch) {
return (ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F')
}
function isDigit(ch) {
return ch >= '0' && ch <= '9'
}
function isInteger(value) {
return /^-?[0-9]+$/.test(value)
}
function toSafeNumber(str) {
const maxSafeInteger = Number.MAX_SAFE_INTEGER
const minSafeInteger = Number.MIN_SAFE_INTEGER
const num = BigInt(str)
return num >= minSafeInteger && num <= maxSafeInteger ? Number(num) : num
}
function expectValue(value) {
if (value === undefined) {
throw new SyntaxError(errorSnippet(`JSON value expected`))
}
}
function errorSnippet(message = `Unexpected character '${lastChar}'`) {
if (!lastChar) {
message = 'Unexpected end of input'
}
const lines = buffer.slice(-40).split('\n')
const lastLine = lines.pop()
const source =
lines.map(line => ` ${line}\n`).join('')
+ ` ${lastLine}${readEOL()}\n`
const p = ` ${'.'.repeat(Math.max(0, lastLine.length - 1))}^\n`
return `${message} on line ${lineNumber}.\n\n${source}${p}`
}
function readEOL() {
let line = ''
for (const ch of gen) {
if (!ch || ch === '\n' || line.length >= 60) break
line += ch
}
return line
}
}
function stringify(value, theme) {
function color(id, str) {
if (theme[id] === '') return str
return `\x1b[${theme[id]}m${str}\x1b[0m`
}
function getIndent(level) {
return ' '.repeat(2 * level)
}
function stringifyValue(value, level = 0) {
if (typeof value === 'string') {
return color(2, JSON.stringify(value))
} else if (typeof value === 'number') {
return color(3, `${value}`)
} else if (typeof value === 'bigint') {
return color(3, `${value}`)
} else if (typeof value === 'boolean') {
return color(4, `${value}`)
} else if (value === null || typeof value === 'undefined') {
return color(5, `null`)
} else if (Array.isArray(value)) {
if (value.length === 0) {
return color(0, `[]`)
}
const items = value
.map((v) => getIndent(level + 1) + stringifyValue(v, level + 1))
.join(color(0, ',') + '\n')
return color(0, '[') + '\n' + items + '\n' + getIndent(level) + color(0, ']')
} else if (typeof value === 'object') {
const keys = Object.keys(value)
if (keys.length === 0) {
return color(0, '{}')
}
const entries = keys
.map((key) =>
getIndent(level + 1) + color(1, `"${key}"`) + color(0, ': ') +
stringifyValue(value[key], level + 1),
)
.join(color(0, ',') + '\n')
return color(0, '{') + '\n' + entries + '\n' + getIndent(level) + color(0, '}')
}
throw new Error(`Unsupported value type: ${typeof value}`)
}
return stringifyValue(value)
}
function themes(id) {
const themes = {
'0': ['', '', '', '', '', ''],
'1': ['', '1;34', '32', '36', '35', '38;5;243'],
'2': ['', '32', '34', '36', '35', '38;5;243'],
'3': ['', '95', '93', '96', '31', '38;5;243'],
'4': ['', '38;5;50', '38;5;39', '38;5;98', '38;5;205', '38;5;243'],
'5': ['', '38;5;230', '38;5;221', '38;5;209', '38;5;209', '38;5;243'],
'6': ['', '38;5;69', '38;5;78', '38;5;221', '38;5;203', '38;5;243'],
'7': ['', '1;38;5;42', '1;38;5;213', '1;38;5;201', '1;38;5;201', '38;5;243'],
'8': ['', '1;38;5;51', '38;5;195', '38;5;123', '38;5;50', '38;5;243'],
'🔵': ['1;38;5;33', '38;5;33', '', '', '', ''],
'🥝': ['38;5;179', '1;38;5;154', '38;5;82', '38;5;226', '38;5;226', '38;5;230'],
}
return themes[id] || themes['1']
}
async function importFxrc(path) {
const {join} = await import('node:path')
const {pathToFileURL} = await import('node:url')
try {
await import(pathToFileURL(join(path, '.fxrc.js')))
} catch (err) {
if (err.code !== 'ERR_MODULE_NOT_FOUND') throw err
}
}
function printUsage() {
const usage = `Usage
fx [flags] [code...]
Flags
-h, --help print help
-r, --raw treat input as a raw string
-s, --slurp read all inputs into an array
--yaml parse input as YAML`
console.log(usage)
}
// yaml v2.4.0
// @formatter:off
void function () {var ALIAS=Symbol.for("yaml.alias");var DOC=Symbol.for("yaml.document");var MAP=Symbol.for("yaml.map");var PAIR=Symbol.for("yaml.pair");var SCALAR=Symbol.for("yaml.scalar");var SEQ=Symbol.for("yaml.seq");var NODE_TYPE=Symbol.for("yaml.node.type");var isAlias=node=>!!node&&typeof node==="object"&&node[NODE_TYPE]===ALIAS;var isDocument=node=>!!node&&typeof node==="object"&&node[NODE_TYPE]===DOC;var isMap=node=>!!node&&typeof node==="object"&&node[NODE_TYPE]===MAP;var isPair=node=>!!node&&typeof node==="object"&&node[NODE_TYPE]===PAIR;var isScalar=node=>!!node&&typeof node==="object"&&node[NODE_TYPE]===SCALAR;var isSeq=node=>!!node&&typeof node==="object"&&node[NODE_TYPE]===SEQ;function isCollection(node){if(node&&typeof node==="object")switch(node[NODE_TYPE]){case MAP:case SEQ:return true}return false}function isNode(node){if(node&&typeof node==="object")switch(node[NODE_TYPE]){case ALIAS:case MAP:case SCALAR:case SEQ:return true}return false}var hasAnchor=node=>(isScalar(node)||isCollection(node))&&!!node.anchor;var BREAK=Symbol("break visit");var SKIP=Symbol("skip children");var REMOVE=Symbol("remove node");function visit(node,visitor){const visitor_=initVisitor(visitor);if(isDocument(node)){const cd=visit_(null,node.contents,visitor_,Object.freeze([node]));if(cd===REMOVE)node.contents=null}else visit_(null,node,visitor_,Object.freeze([]))}visit.BREAK=BREAK;visit.SKIP=SKIP;visit.REMOVE=REMOVE;function visit_(key,node,visitor,path){const ctrl=callVisitor(key,node,visitor,path);if(isNode(ctrl)||isPair(ctrl)){replaceNode(key,path,ctrl);return visit_(key,ctrl,visitor,path)}if(typeof ctrl!=="symbol"){if(isCollection(node)){path=Object.freeze(path.concat(node));for(let i=0;i<node.items.length;++i){const ci=visit_(i,node.items[i],visitor,path);if(typeof ci==="number")i=ci-1;else if(ci===BREAK)return BREAK;else if(ci===REMOVE){node.items.splice(i,1);i-=1}}}else if(isPair(node)){path=Object.freeze(path.concat(node));const ck=visit_("key",node.key,visitor,path);if(ck===BREAK)return BREAK;else if(ck===REMOVE)node.key=null;const cv=visit_("value",node.value,visitor,path);if(cv===BREAK)return BREAK;else if(cv===REMOVE)node.value=null}}return ctrl}async function visitAsync(node,visitor){const visitor_=initVisitor(visitor);if(isDocument(node)){const cd=await visitAsync_(null,node.contents,visitor_,Object.freeze([node]));if(cd===REMOVE)node.contents=null}else await visitAsync_(null,node,visitor_,Object.freeze([]))}visitAsync.BREAK=BREAK;visitAsync.SKIP=SKIP;visitAsync.REMOVE=REMOVE;async function visitAsync_(key,node,visitor,path){const ctrl=await callVisitor(key,node,visitor,path);if(isNode(ctrl)||isPair(ctrl)){replaceNode(key,path,ctrl);return visitAsync_(key,ctrl,visitor,path)}if(typeof ctrl!=="symbol"){if(isCollection(node)){path=Object.freeze(path.concat(node));for(let i=0;i<node.items.length;++i){const ci=await visitAsync_(i,node.items[i],visitor,path);if(typeof ci==="number")i=ci-1;else if(ci===BREAK)return BREAK;else if(ci===REMOVE){node.items.splice(i,1);i-=1}}}else if(isPair(node)){path=Object.freeze(path.concat(node));const ck=await visitAsync_("key",node.key,visitor,path);if(ck===BREAK)return BREAK;else if(ck===REMOVE)node.key=null;const cv=await visitAsync_("value",node.value,visitor,path);if(cv===BREAK)return BREAK;else if(cv===REMOVE)node.value=null}}return ctrl}function initVisitor(visitor){if(typeof visitor==="object"&&(visitor.Collection||visitor.Node||visitor.Value)){return Object.assign({Alias:visitor.Node,Map:visitor.Node,Scalar:visitor.Node,Seq:visitor.Node},visitor.Value&&{Map:visitor.Value,Scalar:visitor.Value,Seq:visitor.Value},visitor.Collection&&{Map:visitor.Collection,Seq:visitor.Collection},visitor)}return visitor}function callVisitor(key,node,visitor,path){if(typeof visitor==="function")return visitor(key,node,path);if(isMap(node))return visitor.Map?.(key,node,path);if(isSeq(node))return visitor.Seq?.(key,node,path);if(isPair(node))return visitor.Pair?.(key,node,path);if(isScalar(node))return visitor.Scalar?.(key,node,path);if(isAlias(node))return visitor.Alias?.(key,node,path);return void 0}function replaceNode(key,path,node){const parent=path[path.length-1];if(isCollection(parent)){parent.items[key]=node}else if(isPair(parent)){if(key==="key")parent.key=node;else parent.value=node}else if(isDocument(parent)){parent.contents=node}else{const pt=isAlias(parent)?"alias":"scalar";throw new Error(`Cannot replace node with ${pt} parent`)}}var escapeChars={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"};var escapeTagName=tn=>tn.replace(/[!,[\]{}]/g,ch=>escapeChars[ch]);var Directives=class _Directives{constructor(yaml,tags){this.docStart=null;this.docEnd=false;this.yaml=Object.assign({},_Directives.defaultYaml,yaml);this.tags=Object.assign({},_Directives.defaultTags,tags)}clone(){const copy=new _Directives(this.yaml,this.tags);copy.docStart=this.docStart;return copy}atDocument(){const res=new _Directives(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=true;break;case"1.2":this.atNextDocument=false;this.yaml={explicit:_Directives.defaultYaml.explicit,version:"1.2"};this.tags=Object.assign({},_Directives.defaultTags);break}return res}add(line,onError){if(this.atNextDocument){this.yaml={explicit:_Directives.defaultYaml.explicit,version:"1.1"};this.tags=Object.assign({},_Directives.defaultTags);this.atNextDocument=false}const parts=line.trim().split(/[ \t]+/);const name=parts.shift();switch(name){case"%TAG":{if(parts.length!==2){onError(0,"%TAG directive should contain exactly two parts");if(parts.length<2)return false}const[handle,prefix]=parts;this.tags[handle]=prefix;return true}case"%YAML":{this.yaml.explicit=true;if(parts.length!==1){onError(0,"%YAML directive should contain exactly one part");return false}const[version]=parts;if(version==="1.1"||version==="1.2"){this.yaml.version=version;return true}else{const isValid=/^\d+\.\d+$/.test(version);onError(6,`Unsupported YAML version ${version}`,isValid);return false}}default:onError(0,`Unknown directive ${name}`,true);return false}}tagName(source,onError){if(source==="!")return"!";if(source[0]!=="!"){onError(`Not a valid tag: ${source}`);return null}if(source[1]==="<"){const verbatim=source.slice(2,-1);if(verbatim==="!"||verbatim==="!!"){onError(`Verbatim tags aren't resolved, so ${source} is invalid.`);return null}if(source[source.length-1]!==">")onError("Verbatim tags must end with a >");return verbatim}const[,handle,suffix]=source.match(/^(.*!)([^!]*)$/s);if(!suffix)onError(`The ${source} tag has no suffix`);const prefix=this.tags[handle];if(prefix){try{return prefix+decodeURIComponent(suffix)}catch(error){onError(String(error));return null}}if(handle==="!")return source;onError(`Could not resolve tag: ${source}`);return null}tagString(tag){for(const[handle,prefix]of Object.entries(this.tags)){if(tag.startsWith(prefix))return handle+escapeTagName(tag.substring(prefix.length))}return tag[0]==="!"?tag:`!<${tag}>`}toString(doc){const lines=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[];const tagEntries=Object.entries(this.tags);let tagNames;if(doc&&tagEntries.length>0&&isNode(doc.contents)){const tags={};visit(doc.contents,(_key,node)=>{if(isNode(node)&&node.tag)tags[node.tag]=true});tagNames=Object.keys(tags)}else tagNames=[];for(const[handle,prefix]of tagEntries){if(handle==="!!"&&prefix==="tag:yaml.org,2002:")continue;if(!doc||tagNames.some(tn=>tn.startsWith(prefix)))lines.push(`%TAG ${handle} ${prefix}`)}return lines.join("\n")}};Directives.defaultYaml={explicit:false,version:"1.2"};Directives.defaultTags={"!!":"tag:yaml.org,2002:"};function anchorIsValid(anchor){if(/[\x00-\x19\s,[\]{}]/.test(anchor)){const sa=JSON.stringify(anchor);const msg=`Anchor must not contain whitespace or control characters: ${sa}`;throw new Error(msg)}return true}function anchorNames(root){const anchors=new Set;visit(root,{Value(_key,node){if(node.anchor)anchors.add(node.anchor)}});return anchors}function findNewAnchor(prefix,exclude){for(let i=1;true;++i){const name=`${prefix}${i}`;if(!exclude.has(name))return name}}function createNodeAnchors(doc,prefix){const aliasObjects=[];const sourceObjects=new Map;let prevAnchors=null;return{onAnchor:source=>{aliasObjects.push(source);if(!prevAnchors)prevAnchors=anchorNames(doc);const anchor=findNewAnchor(prefix,prevAnchors);prevAnchors.add(anchor);return anchor},setAnchors:()=>{for(const source of aliasObjects){const ref=sourceObjects.get(source);if(typeof ref==="object"&&ref.anchor&&(isScalar(ref.node)||isCollection(ref.node))){ref.node.anchor=ref.anchor}else{const error=new Error("Failed to resolve repeated object (this should not happen)");error.source=source;throw error}}},sourceObjects}}function applyReviver(reviver,obj,key,val){if(val&&typeof val==="object"){if(Array.isArray(val)){for(let i=0,len=val.length;i<len;++i){const v0=val[i];const v1=applyReviver(reviver,val,String(i),v0);if(v1===void 0)delete val[i];else if(v1!==v0)val[i]=v1}}else if(val instanceof Map){for(const k of Array.from(val.keys())){const v0=val.get(k);const v1=applyReviver(reviver,val,k,v0);if(v1===void 0)val.delete(k);else if(v1!==v0)val.set(k,v1)}}else if(val instanceof Set){for(const v0 of Array.from(val)){const v1=applyReviver(reviver,val,v0,v0);if(v1===void 0)val.delete(v0);else if(v1!==v0){val.delete(v0);val.add(v1)}}}else{for(const[k,v0]of Object.entries(val)){const v1=applyReviver(reviver,val,k,v0);if(v1===void 0)delete val[k];else if(v1!==v0)val[k]=v1}}}return reviver.call(obj,key,val)}function toJS(value,arg,ctx){if(Array.isArray(value))return value.map((v,i)=>toJS(v,String(i),ctx));if(value&&typeof value.toJSON==="function"){if(!ctx||!hasAnchor(value))return value.toJSON(arg,ctx);const data={aliasCount:0,count:1,res:void 0};ctx.anchors.set(value,data);ctx.onCreate=res2=>{data.res=res2;delete ctx.onCreate};const res=value.toJSON(arg,ctx);if(ctx.onCreate)ctx.onCreate(res);return res}if(typeof value==="bigint"&&!ctx?.keep)return Number(value);return value}var NodeBase=class{constructor(type){Object.defineProperty(this,NODE_TYPE,{value:type})}clone(){const copy=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));if(this.range)copy.range=this.range.slice();return copy}toJS(doc,{mapAsMap,maxAliasCount,onAnchor,reviver}={}){if(!isDocument(doc))throw new TypeError("A document argument is required");const ctx={anchors:new Map,doc,keep:true,mapAsMap:mapAsMap===true,mapKeyWarned:false,maxAliasCount:typeof maxAliasCount==="number"?maxAliasCount:100};const res=toJS(this,"",ctx);if(typeof onAnchor==="function")for(const{count,res:res2}of ctx.anchors.values())onAnchor(res2,count);return typeof reviver==="function"?applyReviver(reviver,{"":res},"",res):res}};var Alias=class extends NodeBase{constructor(source){super(ALIAS);this.source=source;Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(doc){let found=void 0;visit(doc,{Node:(_key,node)=>{if(node===this)return visit.BREAK;if(node.anchor===this.source)found=node}});return found}toJSON(_arg,ctx){if(!ctx)return{source:this.source};const{anchors,doc,maxAliasCount}=ctx;const source=this.resolve(doc);if(!source){const msg=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(msg)}let data=anchors.get(source);if(!data){toJS(source,null,ctx);data=anchors.get(source)}if(!data||data.res===void 0){const msg="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(msg)}if(maxAliasCount>=0){data.count+=1;if(data.aliasCount===0)data.aliasCount=getAliasCount(doc,source,anchors);if(data.count*data.aliasCount>maxAliasCount){const msg="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(msg)}}return data.res}toString(ctx,_onComment,_onChompKeep){const src=`*${this.source}`;if(ctx){anchorIsValid(this.source);if(ctx.options.verifyAliasOrder&&!ctx.anchors.has(this.source)){const msg=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(msg)}if(ctx.implicitKey)return`${src} `}return src}};function getAliasCount(doc,node,anchors){if(isAlias(node)){const source=node.resolve(doc);const anchor=anchors&&source&&anchors.get(source);return anchor?anchor.count*anchor.aliasCount:0}else if(isCollection(node)){let count=0;for(const item of node.items){const c=getAliasCount(doc,item,anchors);if(c>count)count=c}return count}else if(isPair(node)){const kc=getAliasCount(doc,node.key,anchors);const vc=getAliasCount(doc,node.value,anchors);return Math.max(kc,vc)}return 1}var isScalarValue=value=>!value||typeof value!=="function"&&typeof value!=="object";var Scalar=class extends NodeBase{constructor(value){super(SCALAR);this.value=value}toJSON(arg,ctx){return ctx?.keep?this.value:toJS(this.value,arg,ctx)}toString(){return String(this.value)}};Scalar.BLOCK_FOLDED="BLOCK_FOLDED";Scalar.BLOCK_LITERAL="BLOCK_LITERAL";Scalar.PLAIN="PLAIN";Scalar.QUOTE_DOUBLE="QUOTE_DOUBLE";Scalar.QUOTE_SINGLE="QUOTE_SINGLE";var defaultTagPrefix="tag:yaml.org,2002:";function findTagObject(value,tagName,tags){if(tagName){const match=tags.filter(t=>t.tag===tagName);const tagObj=match.find(t=>!t.format)??match[0];if(!tagObj)throw new Error(`Tag ${tagName} not found`);return tagObj}return tags.find(t=>t.identify?.(value)&&!t.format)}function createNode(value,tagName,ctx){if(isDocument(value))value=value.contents;if(isNode(value))return value;if(isPair(value)){const map2=ctx.schema[MAP].createNode?.(ctx.schema,null,ctx);map2.items.push(value);return map2}if(value instanceof String||value instanceof Number||value instanceof Boolean||typeof BigInt!=="undefined"&&value instanceof BigInt){value=value.valueOf()}const{aliasDuplicateObjects,onAnchor,onTagObj,schema:schema4,sourceObjects}=ctx;let ref=void 0;if(aliasDuplicateObjects&&value&&typeof value==="object"){ref=sourceObjects.get(value);if(ref){if(!ref.anchor)ref.anchor=onAnchor(value);return new Alias(ref.anchor)}else{ref={anchor:null,node:null};sourceObjects.set(value,ref)}}if(tagName?.startsWith("!!"))tagName=defaultTagPrefix+tagName.slice(2);let tagObj=findTagObject(value,tagName,schema4.tags);if(!tagObj){if(value&&typeof value.toJSON==="function"){value=value.toJSON()}if(!value||typeof value!=="object"){const node2=new Scalar(value);if(ref)ref.node=node2;return node2}tagObj=value instanceof Map?schema4[MAP]:Symbol.iterator in Object(value)?schema4[SEQ]:schema4[MAP]}if(onTagObj){onTagObj(tagObj);delete ctx.onTagObj}const node=tagObj?.createNode?tagObj.createNode(ctx.schema,value,ctx):typeof tagObj?.nodeClass?.from==="function"?tagObj.nodeClass.from(ctx.schema,value,ctx):new Scalar(value);if(tagName)node.tag=tagName;else if(!tagObj.default)node.tag=tagObj.tag;if(ref)ref.node=node;return node}function collectionFromPath(schema4,path,value){let v=value;for(let i=path.length-1;i>=0;--i){const k=path[i];if(typeof k==="number"&&Number.isInteger(k)&&k>=0){const a=[];a[k]=v;v=a}else{v=new Map([[k,v]])}}return createNode(v,void 0,{aliasDuplicateObjects:false,keepUndefined:false,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:schema4,sourceObjects:new Map})}var isEmptyPath=path=>path==null||typeof path==="object"&&!!path[Symbol.iterator]().next().done;var Collection=class extends NodeBase{constructor(type,schema4){super(type);Object.defineProperty(this,"schema",{value:schema4,configurable:true,enumerable:false,writable:true})}clone(schema4){const copy=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));if(schema4)copy.schema=schema4;copy.items=copy.items.map(it=>isNode(it)||isPair(it)?it.clone(schema4):it);if(this.range)copy.range=this.range.slice();return copy}addIn(path,value){if(isEmptyPath(path))this.add(value);else{const[key,...rest]=path;const node=this.get(key,true);if(isCollection(node))node.addIn(rest,value);else if(node===void 0&&this.schema)this.set(key,collectionFromPath(this.schema,rest,value));else throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`)}}deleteIn(path){const[key,...rest]=path;if(rest.length===0)return this.delete(key);const node=this.get(key,true);if(isCollection(node))return node.deleteIn(rest);else throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`)}getIn(path,keepScalar){const[key,...rest]=path;const node=this.get(key,true);if(rest.length===0)return!keepScalar&&isScalar(node)?node.value:node;else return isCollection(node)?node.getIn(rest,keepScalar):void 0}hasAllNullValues(allowScalar){return this.items.every(node=>{if(!isPair(node))return false;const n=node.value;return n==null||allowScalar&&isScalar(n)&&n.value==null&&!n.commentBefore&&!n.comment&&!n.tag})}hasIn(path){const[key,...rest]=path;if(rest.length===0)return this.has(key);const node=this.get(key,true);return isCollection(node)?node.hasIn(rest):false}setIn(path,value){const[key,...rest]=path;if(rest.length===0){this.set(key,value)}else{const node=this.get(key,true);if(isCollection(node))node.setIn(rest,value);else if(node===void 0&&this.schema)this.set(key,collectionFromPath(this.schema,rest,value));else throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`)}}};Collection.maxFlowStringSingleLineLength=60;var stringifyComment=str=>str.replace(/^(?!$)(?: $)?/gm,"#");function indentComment(comment,indent){if(/^\n+$/.test(comment))return comment.substring(1);return indent?comment.replace(/^(?! *$)/gm,indent):comment}var lineComment=(str,indent,comment)=>str.endsWith("\n")?indentComment(comment,indent):comment.includes("\n")?"\n"+indentComment(comment,indent):(str.endsWith(" ")?"":" ")+comment;var FOLD_FLOW="flow";var FOLD_BLOCK="block";var FOLD_QUOTED="quoted";function foldFlowLines(text,indent,mode="flow",{indentAtStart,lineWidth=80,minContentWidth=20,onFold,onOverflow}={}){if(!lineWidth||lineWidth<0)return text;const endStep=Math.max(1+minContentWidth,1+lineWidth-indent.length);if(text.length<=endStep)return text;const folds=[];const escapedFolds={};let end=lineWidth-indent.length;if(typeof indentAtStart==="number"){if(indentAtStart>lineWidth-Math.max(2,minContentWidth))folds.push(0);else end=lineWidth-indentAtStart}let split=void 0;let prev=void 0;let overflow=false;let i=-1;let escStart=-1;let escEnd=-1;if(mode===FOLD_BLOCK){i=consumeMoreIndentedLines(text,i);if(i!==-1)end=i+endStep}for(let ch;ch=text[i+=1];){if(mode===FOLD_QUOTED&&ch==="\\"){escStart=i;switch(text[i+1]){case"x":i+=3;break;case"u":i+=5;break;case"U":i+=9;break;default:i+=1}escEnd=i}if(ch==="\n"){if(mode===FOLD_BLOCK)i=consumeMoreIndentedLines(text,i);end=i+endStep;split=void 0}else{if(ch===" "&&prev&&prev!==" "&&prev!=="\n"&&prev!==" "){const next=text[i+1];if(next&&next!==" "&&next!=="\n"&&next!==" ")split=i}if(i>=end){if(split){folds.push(split);end=split+endStep;split=void 0}else if(mode===FOLD_QUOTED){while(prev===" "||prev===" "){prev=ch;ch=text[i+=1];overflow=true}const j=i>escEnd+1?i-2:escStart-1;if(escapedFolds[j])return text;folds.push(j);escapedFolds[j]=true;end=j+endStep;split=void 0}else{overflow=true}}}prev=ch}if(overflow&&onOverflow)onOverflow();if(folds.length===0)return text;if(onFold)onFold();let res=text.slice(0,folds[0]);for(let i2=0;i2<folds.length;++i2){const fold=folds[i2];const end2=folds[i2+1]||text.length;if(fold===0)res=`
${indent}${text.slice(0,end2)}`;else{if(mode===FOLD_QUOTED&&escapedFolds[fold])res+=`${text[fold]}\\`;res+=`
${indent}${text.slice(fold+1,end2)}`}}return res}function consumeMoreIndentedLines(text,i){let ch=text[i+1];while(ch===" "||ch===" "){do{ch=text[i+=1]}while(ch&&ch!=="\n");ch=text[i+1]}return i}var getFoldOptions=(ctx,isBlock2)=>({indentAtStart:isBlock2?ctx.indent.length:ctx.indentAtStart,lineWidth:ctx.options.lineWidth,minContentWidth:ctx.options.minContentWidth});var containsDocumentMarker=str=>/^(%|---|\.\.\.)/m.test(str);function lineLengthOverLimit(str,lineWidth,indentLength){if(!lineWidth||lineWidth<0)return false;const limit=lineWidth-indentLength;const strLen=str.length;if(strLen<=limit)return false;for(let i=0,start=0;i<strLen;++i){if(str[i]==="\n"){if(i-start>limit)return true;start=i+1;if(strLen-start<=limit)return false}}return true}function doubleQuotedString(value,ctx){const json=JSON.stringify(value);if(ctx.options.doubleQuotedAsJSON)return json;const{implicitKey}=ctx;const minMultiLineLength=ctx.options.doubleQuotedMinMultiLineLength;const indent=ctx.indent||(containsDocumentMarker(value)?" ":"");let str="";let start=0;for(let i=0,ch=json[i];ch;ch=json[++i]){if(ch===" "&&json[i+1]==="\\"&&json[i+2]==="n"){str+=json.slice(start,i)+"\\ ";i+=1;start=i;ch="\\"}if(ch==="\\")switch(json[i+1]){case"u":{str+=json.slice(start,i);const code=json.substr(i+2,4);switch(code){case"0000":str+="\\0";break;case"0007":str+="\\a";break;case"000b":str+="\\v";break;case"001b":str+="\\e";break;case"0085":str+="\\N";break;case"00a0":str+="\\_";break;case"2028":str+="\\L";break;case"2029":str+="\\P";break;default:if(code.substr(0,2)==="00")str+="\\x"+code.substr(2);else str+=json.substr(i,6)}i+=5;start=i+1}break;case"n":if(implicitKey||json[i+2]==='"'||json.length<minMultiLineLength){i+=1}else{str+=json.slice(start,i)+"\n\n";while(json[i+2]==="\\"&&json[i+3]==="n"&&json[i+4]!=='"'){str+="\n";i+=2}str+=indent;if(json[i+2]===" ")str+="\\";i+=1;start=i+1}break;default:i+=1}}str=start?str+json.slice(start):json;return implicitKey?str:foldFlowLines(str,indent,FOLD_QUOTED,getFoldOptions(ctx,false))}function singleQuotedString(value,ctx){if(ctx.options.singleQuote===false||ctx.implicitKey&&value.includes("\n")||/[ \t]\n|\n[ \t]/.test(value))return doubleQuotedString(value,ctx);const indent=ctx.indent||(containsDocumentMarker(value)?" ":"");const res="'"+value.replace(/'/g,"''").replace(/\n+/g,`$&
${indent}`)+"'";return ctx.implicitKey?res:foldFlowLines(res,indent,FOLD_FLOW,getFoldOptions(ctx,false))}function quotedString(value,ctx){const{singleQuote}=ctx.options;let qs;if(singleQuote===false)qs=doubleQuotedString;else{const hasDouble=value.includes('"');const hasSingle=value.includes("'");if(hasDouble&&!hasSingle)qs=singleQuotedString;else if(hasSingle&&!hasDouble)qs=doubleQuotedString;else qs=singleQuote?singleQuotedString:doubleQuotedString}return qs(value,ctx)}var blockEndNewlines;try{blockEndNewlines=new RegExp("(^|(?<!\n))\n+(?!\n|$)","g")}catch{blockEndNewlines=/\n+(?!\n|$)/g}function blockString({comment,type,value},ctx,onComment,onChompKeep){const{blockQuote,commentString,lineWidth}=ctx.options;if(!blockQuote||/\n[\t ]+$/.test(value)||/^\s*$/.test(value)){return quotedString(value,ctx)}const indent=ctx.indent||(ctx.forceBlockIndent||containsDocumentMarker(value)?" ":"");const literal=blockQuote==="literal"?true:blockQuote==="folded"||type===Scalar.BLOCK_FOLDED?false:type===Scalar.BLOCK_LITERAL?true:!lineLengthOverLimit(value,lineWidth,indent.length);if(!value)return literal?"|\n":">\n";let chomp;let endStart;for(endStart=value.length;endStart>0;--endStart){const ch=value[endStart-1];if(ch!=="\n"&&ch!==" "&&ch!==" ")break}let end=value.substring(endStart);const endNlPos=end.indexOf("\n");if(endNlPos===-1){chomp="-"}else if(value===end||endNlPos!==end.length-1){chomp="+";if(onChompKeep)onChompKeep()}else{chomp=""}if(end){value=value.slice(0,-end.length);if(end[end.length-1]==="\n")end=end.slice(0,-1);end=end.replace(blockEndNewlines,`$&${indent}`)}let startWithSpace=false;let startEnd;let startNlPos=-1;for(startEnd=0;startEnd<value.length;++startEnd){const ch=value[startEnd];if(ch===" ")startWithSpace=true;else if(ch==="\n")startNlPos=startEnd;else break}let start=value.substring(0,startNlPos<startEnd?startNlPos+1:startEnd);if(start){value=value.substring(start.length);start=start.replace(/\n+/g,`$&${indent}`)}const indentSize=indent?"2":"1";let header=(literal?"|":">")+(startWithSpace?indentSize:"")+chomp;if(comment){header+=" "+commentString(comment.replace(/ ?[\r\n]+/g," "));if(onComment)onComment()}if(literal){value=value.replace(/\n+/g,`$&${indent}`);return`${header}
${indent}${start}${value}${end}`}value=value.replace(/\n+/g,"\n$&").replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${indent}`);const body=foldFlowLines(`${start}${value}${end}`,indent,FOLD_BLOCK,getFoldOptions(ctx,true));return`${header}
${indent}${body}`}function plainString(item,ctx,onComment,onChompKeep){const{type,value}=item;const{actualString,implicitKey,indent,indentStep,inFlow}=ctx;if(implicitKey&&value.includes("\n")||inFlow&&/[[\]{},]/.test(value)){return quotedString(value,ctx)}if(!value||/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(value)){return implicitKey||inFlow||!value.includes("\n")?quotedString(value,ctx):blockString(item,ctx,onComment,onChompKeep)}if(!implicitKey&&!inFlow&&type!==Scalar.PLAIN&&value.includes("\n")){return blockString(item,ctx,onComment,onChompKeep)}if(containsDocumentMarker(value)){if(indent===""){ctx.forceBlockIndent=true;return blockString(item,ctx,onComment,onChompKeep)}else if(implicitKey&&indent===indentStep){return quotedString(value,ctx)}}const str=value.replace(/\n+/g,`$&
${indent}`);if(actualString){const test=tag=>tag.default&&tag.tag!=="tag:yaml.org,2002:str"&&tag.test?.test(str);const{compat,tags}=ctx.doc.schema;if(tags.some(test)||compat?.some(test))return quotedString(value,ctx)}return implicitKey?str:foldFlowLines(str,indent,FOLD_FLOW,getFoldOptions(ctx,false))}function stringifyString(item,ctx,onComment,onChompKeep){const{implicitKey,inFlow}=ctx;const ss=typeof item.value==="string"?item:Object.assign({},item,{value:String(item.value)});let{type}=item;if(type!==Scalar.QUOTE_DOUBLE){if(/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(ss.value))type=Scalar.QUOTE_DOUBLE}const _stringify=_type=>{switch(_type){case Scalar.BLOCK_FOLDED:case Scalar.BLOCK_LITERAL:return implicitKey||inFlow?quotedString(ss.value,ctx):blockString(ss,ctx,onComment,onChompKeep);case Scalar.QUOTE_DOUBLE:return doubleQuotedString(ss.value,ctx);case Scalar.QUOTE_SINGLE:return singleQuotedString(ss.value,ctx);case Scalar.PLAIN:return plainString(ss,ctx,onComment,onChompKeep);default:return null}};let res=_stringify(type);if(res===null){const{defaultKeyType,defaultStringType}=ctx.options;const t=implicitKey&&defaultKeyType||defaultStringType;res=_stringify(t);if(res===null)throw new Error(`Unsupported default string type ${t}`)}return res}function createStringifyContext(doc,options){const opt=Object.assign({blockQuote:true,commentString:stringifyComment,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:false,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:true,indentSeq:true,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:false,singleQuote:null,trueStr:"true",verifyAliasOrder:true},doc.schema.toStringOptions,options);let inFlow;switch(opt.collectionStyle){case"block":inFlow=false;break;case"flow":inFlow=true;break;default:inFlow=null}return{anchors:new Set,doc,flowCollectionPadding:opt.flowCollectionPadding?" ":"",indent:"",indentStep:typeof opt.indent==="number"?" ".repeat(opt.indent):" ",inFlow,options:opt}}function getTagObject(tags,item){if(item.tag){const match=tags.filter(t=>t.tag===item.tag);if(match.length>0)return match.find(t=>t.format===item.format)??match[0]}let tagObj=void 0;let obj;if(isScalar(item)){obj=item.value;const match=tags.filter(t=>t.identify?.(obj));tagObj=match.find(t=>t.format===item.format)??match.find(t=>!t.format)}else{obj=item;tagObj=tags.find(t=>t.nodeClass&&obj instanceof t.nodeClass)}if(!tagObj){const name=obj?.constructor?.name??typeof obj;throw new Error(`Tag not resolved for ${name} value`)}return tagObj}function stringifyProps(node,tagObj,{anchors,doc}){if(!doc.directives)return"";const props=[];const anchor=(isScalar(node)||isCollection(node))&&node.anchor;if(anchor&&anchorIsValid(anchor)){anchors.add(anchor);props.push(`&${anchor}`)}const tag=node.tag?node.tag:tagObj.default?null:tagObj.tag;if(tag)props.push(doc.directives.tagString(tag));return props.join(" ")}function stringify(item,ctx,onComment,onChompKeep){if(isPair(item))return item.toString(ctx,onComment,onChompKeep);if(isAlias(item)){if(ctx.doc.directives)return item.toString(ctx);if(ctx.resolvedAliases?.has(item)){throw new TypeError(`Cannot stringify circular structure without alias nodes`)}else{if(ctx.resolvedAliases)ctx.resolvedAliases.add(item);else ctx.resolvedAliases=new Set([item]);item=item.resolve(ctx.doc)}}let tagObj=void 0;const node=isNode(item)?item:ctx.doc.createNode(item,{onTagObj:o=>tagObj=o});if(!tagObj)tagObj=getTagObject(ctx.doc.schema.tags,node);const props=stringifyProps(node,tagObj,ctx);if(props.length>0)ctx.indentAtStart=(ctx.indentAtStart??0)+props.length+1;const str=typeof tagObj.stringify==="function"?tagObj.stringify(node,ctx,onComment,onChompKeep):isScalar(node)?stringifyString(node,ctx,onComment,onChompKeep):node.toString(ctx,onComment,onChompKeep);if(!props)return str;return isScalar(node)||str[0]==="{"||str[0]==="["?`${props} ${str}`:`${props}
${ctx.indent}${str}`}function stringifyPair({key,value},ctx,onComment,onChompKeep){const{allNullValues,doc,indent,indentStep,options:{commentString,indentSeq,simpleKeys}}=ctx;let keyComment=isNode(key)&&key.comment||null;if(simpleKeys){if(keyComment){throw new Error("With simple keys, key nodes cannot have comments")}if(isCollection(key)){const msg="With simple keys, collection cannot be used as a key value";throw new Error(msg)}}let explicitKey=!simpleKeys&&(!key||keyComment&&value==null&&!ctx.inFlow||isCollection(key)||(isScalar(key)?key.type===Scalar.BLOCK_FOLDED||key.type===Scalar.BLOCK_LITERAL:typeof key==="object"));ctx=Object.assign({},ctx,{allNullValues:false,implicitKey:!explicitKey&&(simpleKeys||!allNullValues),indent:indent+indentStep});let keyCommentDone=false;let chompKeep=false;let str=stringify(key,ctx,()=>keyCommentDone=true,()=>chompKeep=true);if(!explicitKey&&!ctx.inFlow&&str.length>1024){if(simpleKeys)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");explicitKey=true}if(ctx.inFlow){if(allNullValues||value==null){if(keyCommentDone&&onComment)onComment();return str===""?"?":explicitKey?`? ${str}`:str}}else if(allNullValues&&!simpleKeys||value==null&&explicitKey){str=`? ${str}`;if(keyComment&&!keyCommentDone){str+=lineComment(str,ctx.indent,commentString(keyComment))}else if(chompKeep&&onChompKeep)onChompKeep();return str}if(keyCommentDone)keyComment=null;if(explicitKey){if(keyComment)str+=lineComment(str,ctx.indent,commentString(keyComment));str=`? ${str}
${indent}:`}else{str=`${str}:`;if(keyComment)str+=lineComment(str,ctx.indent,commentString(keyComment))}let vsb,vcb,valueComment;if(isNode(value)){vsb=!!value.spaceBefore;vcb=value.commentBefore;valueComment=value.comment}else{vsb=false;vcb=null;valueComment=null;if(value&&typeof value==="object")value=doc.createNode(value)}ctx.implicitKey=false;if(!explicitKey&&!keyComment&&isScalar(value))ctx.indentAtStart=str.length+1;chompKeep=false;if(!indentSeq&&indentStep.length>=2&&!ctx.inFlow&&!explicitKey&&isSeq(value)&&!value.flow&&!value.tag&&!value.anchor){ctx.indent=ctx.indent.substring(2)}let valueCommentDone=false;const valueStr=stringify(value,ctx,()=>valueCommentDone=true,()=>chompKeep=true);let ws=" ";if(keyComment||vsb||vcb){ws=vsb?"\n":"";if(vcb){const cs=commentString(vcb);ws+=`
${indentComment(cs,ctx.indent)}`}if(valueStr===""&&!ctx.inFlow){if(ws==="\n")ws="\n\n"}else{ws+=`
${ctx.indent}`}}else if(!explicitKey&&isCollection(value)){const vs0=valueStr[0];const nl0=valueStr.indexOf("\n");const hasNewline=nl0!==-1;const flow=ctx.inFlow??value.flow??value.items.length===0;if(hasNewline||!flow){let hasPropsLine=false;if(hasNewline&&(vs0==="&"||vs0==="!")){let sp0=valueStr.indexOf(" ");if(vs0==="&"&&sp0!==-1&&sp0<nl0&&valueStr[sp0+1]==="!"){sp0=valueStr.indexOf(" ",sp0+1)}if(sp0===-1||nl0<sp0)hasPropsLine=true}if(!hasPropsLine)ws=`
${ctx.indent}`}}else if(valueStr===""||valueStr[0]==="\n"){ws=""}str+=ws+valueStr;if(ctx.inFlow){if(valueCommentDone&&onComment)onComment()}else if(valueComment&&!valueCommentDone){str+=lineComment(str,ctx.indent,commentString(valueComment))}else if(chompKeep&&onChompKeep){onChompKeep()}return str}function warn(logLevel,warning){if(logLevel==="debug"||logLevel==="warn"){if(typeof process!=="undefined"&&process.emitWarning)process.emitWarning(warning);else console.warn(warning)}}var MERGE_KEY="<<";function addPairToJSMap(ctx,map2,{key,value}){if(ctx?.doc.schema.merge&&isMergeKey(key)){value=isAlias(value)?value.resolve(ctx.doc):value;if(isSeq(value))for(const it of value.items)mergeToJSMap(ctx,map2,it);else if(Array.isArray(value))for(const it of value)mergeToJSMap(ctx,map2,it);else mergeToJSMap(ctx,map2,value)}else{const jsKey=toJS(key,"",ctx);if(map2 instanceof Map){map2.set(jsKey,toJS(value,jsKey,ctx))}else if(map2 instanceof Set){map2.add(jsKey)}else{const stringKey=stringifyKey(key,jsKey,ctx);const jsValue=toJS(value,stringKey,ctx);if(stringKey in map2)Object.defineProperty(map2,stringKey,{value:jsValue,writable:true,enumerable:true,configurable:true});else map2[stringKey]=jsValue}}return map2}var isMergeKey=key=>key===MERGE_KEY||isScalar(key)&&key.value===MERGE_KEY&&(!key.type||key.type===Scalar.PLAIN);function mergeToJSMap(ctx,map2,value){const source=ctx&&isAlias(value)?value.resolve(ctx.doc):value;if(!isMap(source))throw new Error("Merge sources must be maps or map aliases");const srcMap=source.toJSON(null,ctx,Map);for(const[key,value2]of srcMap){if(map2 instanceof Map){if(!map2.has(key))map2.set(key,value2)}else if(map2 instanceof Set){map2.add(key)}else if(!Object.prototype.hasOwnProperty.call(map2,key)){Object.defineProperty(map2,key,{value:value2,writable:true,enumerable:true,configurable:true})}}return map2}function stringifyKey(key,jsKey,ctx){if(jsKey===null)return"";if(typeof jsKey!=="object")return String(jsKey);if(isNode(key)&&ctx?.doc){const strCtx=createStringifyContext(ctx.doc,{});strCtx.anchors=new Set;for(const node of ctx.anchors.keys())strCtx.anchors.add(node.anchor);strCtx.inFlow=true;strCtx.inStringifyKey=true;const strKey=key.toString(strCtx);if(!ctx.mapKeyWarned){let jsonStr=JSON.stringify(strKey);if(jsonStr.length>40)jsonStr=jsonStr.substring(0,36)+'..."';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.`);ctx.mapKeyWarned=true}return strKey}return JSON.stringify(jsKey)}function createPair(key,value,ctx){const k=createNode(key,void 0,ctx);const v=createNode(value,void 0,ctx);return new Pair(k,v)}var Pair=class _Pair{constructor(key,value=null){Object.defineProperty(this,NODE_TYPE,{value:PAIR});this.key=key;this.value=value}clone(schema4){let{key,value}=this;if(isNode(key))key=key.clone(schema4);if(isNode(value))value=value.clone(schema4);return new _Pair(key,value)}toJSON(_,ctx){const pair=ctx?.mapAsMap?new Map:{};return addPairToJSMap(ctx,pair,this)}toString(ctx,onComment,onChompKeep){return ctx?.doc?stringifyPair(this,ctx,onComment,onChompKeep):JSON.stringify(this)}};function stringifyCollection(collection,ctx,options){const flow=ctx.inFlow??collection.flow;const stringify4=flow?stringifyFlowCollection:stringifyBlockCollection;return stringify4(collection,ctx,options)}function stringifyBlockCollection({comment,items},ctx,{blockItemPrefix,flowChars,itemIndent,onChompKeep,onComment}){const{indent,options:{commentString}}=ctx;const itemCtx=Object.assign({},ctx,{indent:itemIndent,type:null});let chompKeep=false;const lines=[];for(let i=0;i<items.length;++i){const item=items[i];let comment2=null;if(isNode(item)){if(!chompKeep&&item.spaceBefore)lines.push("");addCommentBefore(ctx,lines,item.commentBefore,chompKeep);if(item.comment)comment2=item.comment}else if(isPair(item)){const ik=isNode(item.key)?item.key:null;if(ik){if(!chompKeep&&ik.spaceBefore)lines.push("");addCommentBefore(ctx,lines,ik.commentBefore,chompKeep)}}chompKeep=false;let str2=stringify(item,itemCtx,()=>comment2=null,()=>chompKeep=true);if(comment2)str2+=lineComment(str2,itemIndent,commentString(comment2));if(chompKeep&&comment2)chompKeep=false;lines.push(blockItemPrefix+str2)}let str;if(lines.length===0){str=flowChars.start+flowChars.end}else{str=lines[0];for(let i=1;i<lines.length;++i){const line=lines[i];str+=line?`
${indent}${line}`:"\n"}}if(comment){str+="\n"+indentComment(commentString(comment),indent);if(onComment)onComment()}else if(chompKeep&&onChompKeep)onChompKeep();return str}function stringifyFlowCollection({comment,items},ctx,{flowChars,itemIndent,onComment}){const{indent,indentStep,flowCollectionPadding:fcPadding,options:{commentString}}=ctx;itemIndent+=indentStep;const itemCtx=Object.assign({},ctx,{indent:itemIndent,inFlow:true,type:null});let reqNewline=false;let linesAtValue=0;const lines=[];for(let i=0;i<items.length;++i){const item=items[i];let comment2=null;if(isNode(item)){if(item.spaceBefore)lines.push("");addCommentBefore(ctx,lines,item.commentBefore,false);if(item.comment)comment2=item.comment}else if(isPair(item)){const ik=isNode(item.key)?item.key:null;if(ik){if(ik.spaceBefore)lines.push("");addCommentBefore(ctx,lines,ik.commentBefore,false);if(ik.comment)reqNewline=true}const iv=isNode(item.value)?item.value:null;if(iv){if(iv.comment)comment2=iv.comment;if(iv.commentBefore)reqNewline=true}else if(item.value==null&&ik?.comment){comment2=ik.comment}}if(comment2)reqNewline=true;let str2=stringify(item,itemCtx,()=>comment2=null);if(i<items.length-1)str2+=",";if(comment2)str2+=lineComment(str2,itemIndent,commentString(comment2));if(!reqNewline&&(lines.length>linesAtValue||str2.includes("\n")))reqNewline=true;lines.push(str2);linesAtValue=lines.length}let str;const{start,end}=flowChars;if(lines.length===0){str=start+end}else{if(!reqNewline){const len=lines.reduce((sum,line)=>sum+line.length+2,2);reqNewline=ctx.options.lineWidth>0&&len>ctx.options.lineWidth}if(reqNewline){str=start;for(const line of lines)str+=line?`
${indentStep}${indent}${line}`:"\n";str+=`
${indent}${end}`}else{str=`${start}${fcPadding}${lines.join(" ")}${fcPadding}${end}`}}if(comment){str+=lineComment(str,indent,commentString(comment));if(onComment)onComment()}return str}function addCommentBefore({indent,options:{commentString}},lines,comment,chompKeep){if(comment&&chompKeep)comment=comment.replace(/^\n+/,"");if(comment){const ic=indentComment(commentString(comment),indent);lines.push(ic.trimStart())}}function findPair(items,key){const k=isScalar(key)?key.value:key;for(const it of items){if(isPair(it)){if(it.key===key||it.key===k)return it;if(isScalar(it.key)&&it.key.value===k)return it}}return void 0}var YAMLMap=class extends Collection{static get tagName(){return"tag:yaml.org,2002:map"}constructor(schema4){super(MAP,schema4);this.items=[]}static from(schema4,obj,ctx){const{keepUndefined,replacer}=ctx;const map2=new this(schema4);const add=(key,value)=>{if(typeof replacer==="function")value=replacer.call(obj,key,value);else if(Array.isArray(replacer)&&!replacer.includes(key))return;if(value!==void 0||keepUndefined)map2.items.push(createPair(key,value,ctx))};if(obj instanceof Map){for(const[key,value]of obj)add(key,value)}else if(obj&&typeof obj==="object"){for(const key of Object.keys(obj))add(key,obj[key])}if(typeof schema4.sortMapEntries==="function"){map2.items.sort(schema4.sortMapEntries)}return map2}add(pair,overwrite){let _pair;if(isPair(pair))_pair=pair;else if(!pair||typeof pair!=="object"||!("key"in pair)){_pair=new Pair(pair,pair?.value)}else _pair=new Pair(pair.key,pair.value);const prev=findPair(this.items,_pair.key);const sortEntries=this.schema?.sortMapEntries;if(prev){if(!overwrite)throw new Error(`Key ${_pair.key} already set`);if(isScalar(prev.value)&&isScalarValue(_pair.value))prev.value.value=_pair.value;else prev.value=_pair.value}else if(sortEntries){const i=this.items.findIndex(item=>sortEntries(_pair,item)<0);if(i===-1)this.items.push(_pair);else this.items.splice(i,0,_pair)}else{this.items.push(_pair)}}delete(key){const it=findPair(this.items,key);if(!it)return false;const del=this.items.splice(this.items.indexOf(it),1);return del.length>0}get(key,keepScalar){const it=findPair(this.items,key);const node=it?.value;return(!keepScalar&&isScalar(node)?node.value:node)??void 0}has(key){return!!findPair(this.items,key)}set(key,value){this.add(new Pair(key,value),true)}toJSON(_,ctx,Type){const map2=Type?new Type:ctx?.mapAsMap?new Map:{};if(ctx?.onCreate)ctx.onCreate(map2);for(const item of this.items)addPairToJSMap(ctx,map2,item);return map2}toString(ctx,onComment,onChompKeep){if(!ctx)return JSON.stringify(this);for(const item of this.items){if(!isPair(item))throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`)}if(!ctx.allNullValues&&this.hasAllNullValues(false))ctx=Object.assign({},ctx,{allNullValues:true});return stringifyCollection(this,ctx,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:ctx.indent||"",onChompKeep,onComment})}};var map={collection:"map",default:true,nodeClass:YAMLMap,tag:"tag:yaml.org,2002:map",resolve(map2,onError){if(!isMap(map2))onError("Expected a mapping for this tag");return map2},createNode:(schema4,obj,ctx)=>YAMLMap.from(schema4,obj,ctx)};var YAMLSeq=class extends Collection{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(schema4){super(SEQ,schema4);this.items=[]}add(value){this.items.push(value)}delete(key){const idx=asItemIndex(key);if(typeof idx!=="number")return false;const del=this.items.splice(idx,1);return del.length>0}get(key,keepScalar){const idx=asItemIndex(key);if(typeof idx!=="number")return void 0;const it=this.items[idx];return!keepScalar&&isScalar(it)?it.value:it}has(key){const idx=asItemIndex(key);return typeof idx==="number"&&idx<this.items.length}set(key,value){const idx=asItemIndex(key);if(typeof idx!=="number")throw new Error(`Expected a valid index, not ${key}.`);const prev=this.items[idx];if(isScalar(prev)&&isScalarValue(value))prev.value=value;else this.items[idx]=value}toJSON(_,ctx){const seq2=[];if(ctx?.onCreate)ctx.onCreate(seq2);let i=0;for(const item of this.items)seq2.push(toJS(item,String(i++),ctx));return seq2}toString(ctx,onComment,onChompKeep){if(!ctx)return JSON.stringify(this);return stringifyCollection(this,ctx,{blockItemPrefix:"- ",flowChars:{start:"[",end:"]"},itemIndent:(ctx.indent||"")+" ",onChompKeep,onComment})}static from(schema4,obj,ctx){const{replacer}=ctx;const seq2=new this(schema4);if(obj&&Symbol.iterator in Object(obj)){let i=0;for(let it of obj){if(typeof replacer==="function"){const key=obj instanceof Set?it:String(i++);it=replacer.call(obj,key,it)}seq2.items.push(createNode(it,void 0,ctx))}}return seq2}};function asItemIndex(key){let idx=isScalar(key)?key.value:key;if(idx&&typeof idx==="string")idx=Number(idx);return typeof idx==="number"&&Number.isInteger(idx)&&idx>=0?idx:null}var seq={collection:"seq",default:true,nodeClass:YAMLSeq,tag:"tag:yaml.org,2002:seq",resolve(seq2,onError){if(!isSeq(seq2))onError("Expected a sequence for this tag");return seq2},createNode:(schema4,obj,ctx)=>YAMLSeq.from(schema4,obj,ctx)};var string={identify:value=>typeof value==="string",default:true,tag:"tag:yaml.org,2002:str",resolve:str=>str,stringify(item,ctx,onComment,onChompKeep){ctx=Object.assign({actualString:true},ctx);return stringifyString(item,ctx,onComment,onChompKeep)}};var nullTag={identify:value=>value==null,createNode:()=>new Scalar(null),default:true,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new Scalar(null),stringify:({source},ctx)=>typeof source==="string"&&nullTag.test.test(source)?source:ctx.options.nullStr};var boolTag={identify:value=>typeof value==="boolean",default:true,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:str=>new Scalar(str[0]==="t"||str[0]==="T"),stringify({source,value},ctx){if(source&&boolTag.test.test(source)){const sv=source[0]==="t"||source[0]==="T";if(value===sv)return source}return value?ctx.options.trueStr:ctx.options.falseStr}};function stringifyNumber({format,minFractionDigits,tag,value}){if(typeof value==="bigint")return String(value);const num=typeof value==="number"?value:Number(value);if(!isFinite(num))return isNaN(num)?".nan":num<0?"-.inf":".inf";let n=JSON.stringify(value);if(!format&&minFractionDigits&&(!tag||tag==="tag:yaml.org,2002:float")&&/^\d/.test(n)){let i=n.indexOf(".");if(i<0){i=n.length;n+="."}let d=minFractionDigits-(n.length-i-1);while(d-- >0)n+="0"}return n}var floatNaN={identify:value=>typeof value==="number",default:true,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF|nan|NaN|NAN))$/,resolve:str=>str.slice(-3).toLowerCase()==="nan"?NaN:str[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:stringifyNumber};var floatExp={identify:value=>typeof value==="number",default:true,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:str=>parseFloat(str),stringify(node){const num=Number(node.value);return isFinite(num)?num.toExponential():stringifyNumber(node)}};var float={identify:value=>typeof value==="number",default:true,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(str){const node=new Scalar(parseFloat(str));const dot=str.indexOf(".");if(dot!==-1&&str[str.length-1]==="0")node.minFractionDigits=str.length-dot-1;return node},stringify:stringifyNumber};var intIdentify=value=>typeof value==="bigint"||Number.isInteger(value);var intResolve=(str,offset,radix,{intAsBigInt})=>intAsBigInt?BigInt(str):parseInt(str.substring(offset),radix);function intStringify(node,radix,prefix){const{value}=node;if(intIdentify(value)&&value>=0)return prefix+value.toString(radix);return stringifyNumber(node)}var intOct={identify:value=>intIdentify(value)&&value>=0,default:true,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(str,_onError,opt)=>intResolve(str,2,8,opt),stringify:node=>intStringify(node,8,"0o")};var int={identify:intIdentify,default:true,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(str,_onError,opt)=>intResolve(str,0,10,opt),stringify:stringifyNumber};var intHex={identify:value=>intIdentify(value)&&value>=0,default:true,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(str,_onError,opt)=>intResolve(str,2,16,opt),stringify:node=>intStringify(node,16,"0x")};var schema=[map,seq,string,nullTag,boolTag,intOct,int,intHex,floatNaN,floatExp,float];function intIdentify2(value){return typeof value==="bigint"||Number.isInteger(value)}var stringifyJSON=({value})=>JSON.stringify(value);var jsonScalars=[{identify:value=>typeof value==="string",default:true,tag:"tag:yaml.org,2002:str",resolve:str=>str,stringify:stringifyJSON},{identify:value=>value==null,createNode:()=>new Scalar(null),default:true,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:stringifyJSON},{identify:value=>typeof value==="boolean",default:true,tag:"tag:yaml.org,2002:bool",test:/^true|false$/,resolve:str=>str==="true",stringify:stringifyJSON},{identify:intIdentify2,default:true,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(str,_onError,{intAsBigInt})=>intAsBigInt?BigInt(str):parseInt(str,10),stringify:({value})=>intIdentify2(value)?value.toString():JSON.stringify(value)},{identify:value=>typeof value==="number",default:true,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:str=>parseFloat(str),stringify:stringifyJSON}];var jsonError={default:true,tag:"",test:/^/,resolve(str,onError){onError(`Unresolved plain scalar ${JSON.stringify(str)}`);return str}};var schema2=[map,seq].concat(jsonScalars,jsonError);var binary={identify:value=>value instanceof Uint8Array,default:false,tag:"tag:yaml.org,2002:binary",resolve(src,onError){if(typeof Buffer==="function"){return Buffer.from(src,"base64")}else if(typeof atob==="function"){const str=atob(src.replace(/[\n\r]/g,""));const buffer=new Uint8Array(str.length);for(let i=0;i<str.length;++i)buffer[i]=str.charCodeAt(i);return buffer}else{onError("This environment does not support reading binary tags; either Buffer or atob is required");return src}},stringify({comment,type,value},ctx,onComment,onChompKeep){const buf=value;let str;if(typeof Buffer==="function"){str=buf instanceof Buffer?buf.toString("base64"):Buffer.from(buf.buffer).toString("base64")}else if(typeof btoa==="function"){let s="";for(let i=0;i<buf.length;++i)s+=String.fromCharCode(buf[i]);str=btoa(s)}else{throw new Error("This environment does not support writing binary tags; either Buffer or btoa is required")}if(!type)type=Scalar.BLOCK_LITERAL;if(type!==Scalar.QUOTE_DOUBLE){const lineWidth=Math.max(ctx.options.lineWidth-ctx.indent.length,ctx.options.minContentWidth);const n=Math.ceil(str.length/lineWidth);const lines=new Array(n);for(let i=0,o=0;i<n;++i,o+=lineWidth){lines[i]=str.substr(o,lineWidth)}str=lines.join(type===Scalar.BLOCK_LITERAL?"\n":" ")}return stringifyString({comment,type,value:str},ctx,onComment,onChompKeep)}};function resolvePairs(seq2,onError){if(isSeq(seq2)){for(let i=0;i<seq2.items.length;++i){let item=seq2.items[i];if(isPair(item))continue;else if(isMap(item)){if(item.items.length>1)onError("Each pair must have its own sequence indicator");const pair=item.items[0]||new Pair(new Scalar(null));if(item.commentBefore)pair.key.commentBefore=pair.key.commentBefore?`${item.commentBefore}
${pair.key.commentBefore}`:item.commentBefore;if(item.comment){const cn=pair.value??pair.key;cn.comment=cn.comment?`${item.comment}
${cn.comment}`:item.comment}item=pair}seq2.items[i]=isPair(item)?item:new Pair(item)}}else onError("Expected a sequence for this tag");return seq2}function createPairs(schema4,iterable,ctx){const{replacer}=ctx;const pairs2=new YAMLSeq(schema4);pairs2.tag="tag:yaml.org,2002:pairs";let i=0;if(iterable&&Symbol.iterator in Object(iterable))for(let it of iterable){if(typeof replacer==="function")it=replacer.call(iterable,String(i++),it);let key,value;if(Array.isArray(it)){if(it.length===2){key=it[0];value=it[1]}else throw new TypeError(`Expected [key, value] tuple: ${it}`)}else if(it&&it instanceof Object){const keys=Object.keys(it);if(keys.length===1){key=keys[0];value=it[key]}else{throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`)}}else{key=it}pairs2.items.push(createPair(key,value,ctx))}return pairs2}var pairs={collection:"seq",default:false,tag:"tag:yaml.org,2002:pairs",resolve:resolvePairs,createNode:createPairs};var YAMLOMap=class _YAMLOMap extends YAMLSeq{constructor(){super();this.add=YAMLMap.prototype.add.bind(this);this.delete=YAMLMap.prototype.delete.bind(this);this.get=YAMLMap.prototype.get.bind(this);this.has=YAMLMap.prototype.has.bind(this);this.set=YAMLMap.prototype.set.bind(this);this.tag=_YAMLOMap.tag}toJSON(_,ctx){if(!ctx)return super.toJSON(_);const map2=new Map;if(ctx?.onCreate)ctx.onCreate(map2);for(const pair of this.items){let key,value;if(isPair(pair)){key=toJS(pair.key,"",ctx);value=toJS(pair.value,key,ctx)}else{key=toJS(pair,"",ctx)}if(map2.has(key))throw new Error("Ordered maps must not include duplicate keys");map2.set(key,value)}return map2}static from(schema4,iterable,ctx){const pairs2=createPairs(schema4,iterable,ctx);const omap2=new this;omap2.items=pairs2.items;return omap2}};YAMLOMap.tag="tag:yaml.org,2002:omap";var omap={collection:"seq",identify:value=>value instanceof Map,nodeClass:YAMLOMap,default:false,tag:"tag:yaml.org,2002:omap",resolve(seq2,onError){const pairs2=resolvePairs(seq2,onError);const seenKeys=[];for(const{key}of pairs2.items){if(isScalar(key)){if(seenKeys.includes(key.value)){onError(`Ordered maps must not include duplicate keys: ${key.value}`)}else{seenKeys.push(key.value)}}}return Object.assign(new YAMLOMap,pairs2)},createNode:(schema4,iterable,ctx)=>YAMLOMap.from(schema4,iterable,ctx)};function boolStringify({value,source},ctx){const boolObj=value?trueTag:falseTag;if(source&&boolObj.test.test(source))return source;return value?ctx.options.trueStr:ctx.options.falseStr}var trueTag={identify:value=>value===true,default:true,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new Scalar(true),stringify:boolStringify};var falseTag={identify:value=>value===false,default:true,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/i,resolve:()=>new Scalar(false),stringify:boolStringify};var floatNaN2={identify:value=>typeof value==="number",default:true,tag:"tag:yaml.org,2002:float",test:/^[-+]?\.(?:inf|Inf|INF|nan|NaN|NAN)$/,resolve:str=>str.slice(-3).toLowerCase()==="nan"?NaN:str[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:stringifyNumber};var floatExp2={identify:value=>typeof value==="number",default:true,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:str=>parseFloat(str.replace(/_/g,"")),stringify(node){const num=Number(node.value);return isFinite(num)?num.toExponential():stringifyNumber(node)}};var float2={identify:value=>typeof value==="number",default:true,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(str){const node=new Scalar(parseFloat(str.replace(/_/g,"")));const dot=str.indexOf(".");if(dot!==-1){const f=str.substring(dot+1).replace(/_/g,"");if(f[f.length-1]==="0")node.minFractionDigits=f.length}return node},stringify:stringifyNumber};var intIdentify3=value=>typeof value==="bigint"||Number.isInteger(value);function intResolve2(str,offset,radix,{intAsBigInt}){const sign=str[0];if(sign==="-"||sign==="+")offset+=1;str=str.substring(offset).replace(/_/g,"");if(intAsBigInt){switch(radix){case 2:str=`0b${str}`;break;case 8:str=`0o${str}`;break;case 16:str=`0x${str}`;break}const n2=BigInt(str);return sign==="-"?BigInt(-1)*n2:n2}const n=parseInt(str,radix);return sign==="-"?-1*n:n}function intStringify2(node,radix,prefix){const{value}=node;if(intIdentify3(value)){const str=value.toString(radix);return value<0?"-"+prefix+str.substr(1):prefix+str}return stringifyNumber(node)}var intBin={identify:intIdentify3,default:true,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(str,_onError,opt)=>intResolve2(str,2,2,opt),stringify:node=>intStringify2(node,2,"0b")};var intOct2={identify:intIdentify3,default:true,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(str,_onError,opt)=>intResolve2(str,1,8,opt),stringify:node=>intStringify2(node,8,"0")};var int2={identify:intIdentify3,default:true,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(str,_onError,opt)=>intResolve2(str,0,10,opt),stringify:stringifyNumber};var intHex2={identify:intIdentify3,default:true,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(str,_onError,opt)=>intResolve2(str,2,16,opt),stringify:node=>intStringify2(node,16,"0x")};var YAMLSet=class _YAMLSet extends YAMLMap{constructor(schema4){super(schema4);this.tag=_YAMLSet.tag}add(key){let pair;if(isPair(key))pair=key;else if(key&&typeof key==="object"&&"key"in key&&"value"in key&&key.value===null)pair=new Pair(key.key,null);else pair=new Pair(key,null);const prev=findPair(this.items,pair.key);if(!prev)this.items.push(pair)}get(key,keepPair){const pair=findPair(this.items,key);return!keepPair&&isPair(pair)?isScalar(pair.key)?pair.key.value:pair.key:pair}set(key,value){if(typeof value!=="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);const prev=findPair(this.items,key);if(prev&&!value){this.items.splice(this.items.indexOf(prev),1)}else if(!prev&&value){this.items.push(new Pair(key))}}toJSON(_,ctx){return super.toJSON(_,ctx,Set)}toString(ctx,onComment,onChompKeep){if(!ctx)return JSON.stringify(this);if(this.hasAllNullValues(true))return super.toString(Object.assign({},ctx,{allNullValues:true}),onComment,onChompKeep);else throw new Error("Set items must all have null values")}static from(schema4,iterable,ctx){const{replacer}=ctx;const set2=new this(schema4);if(iterable&&Symbol.iterator in Object(iterable))for(let value of iterable){if(typeof replacer==="function")value=replacer.call(iterable,value,value);set2.items.push(createPair(value,null,ctx))}return set2}};YAMLSet.tag="tag:yaml.org,2002:set";var set={collection:"map",identify:value=>value instanceof Set,nodeClass:YAMLSet,default:false,tag:"tag:yaml.org,2002:set",createNode:(schema4,iterable,ctx)=>YAMLSet.from(schema4,iterable,ctx),resolve(map2,onError){if(isMap(map2)){if(map2.hasAllNullValues(true))return Object.assign(new YAMLSet,map2);else onError("Set items must all have null values")}else onError("Expected a mapping for this tag");return map2}};function parseSexagesimal(str,asBigInt){const sign=str[0];const parts=sign==="-"||sign==="+"?str.substring(1):str;const num=n=>asBigInt?BigInt(n):Number(n);const res=parts.replace(/_/g,"").split(":").reduce((res2,p)=>res2*num(60)+num(p),num(0));return sign==="-"?num(-1)*res:res}function stringifySexagesimal(node){let{value}=node;let num=n=>n;if(typeof value==="bigint")num=n=>BigInt(n);else if(isNaN(value)||!isFinite(value))return stringifyNumber(node);let sign="";if(value<0){sign="-";value*=num(-1)}const _60=num(60);const parts=[value%_60];if(value<60){parts.unshift(0)}else{value=(value-parts[0])/_60;parts.unshift(value%_60);if(value>=60){value=(value-parts[0])/_60;parts.unshift(value)}}return sign+parts.map(n=>String(n).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var intTime={identify:value=>typeof value==="bigint"||Number.isInteger(value),default:true,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(str,_onError,{intAsBigInt})=>parseSexagesimal(str,intAsBigInt),stringify:stringifySexagesimal};var floatTime={identify:value=>typeof value==="number",default:true,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:str=>parseSexagesimal(str,false),stringify:stringifySexagesimal};var timestamp={identify:value=>value instanceof Date,default:true,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(str){const match=str.match(timestamp.test);if(!match)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");const[,year,month,day,hour,minute,second]=match.map(Number);const millisec=match[7]?Number((match[7]+"00").substr(1,3)):0;let date=Date.UTC(year,month-1,day,hour||0,minute||0,second||0,millisec);const tz=match[8];if(tz&&tz!=="Z"){let d=parseSexagesimal(tz,false);if(Math.abs(d)<30)d*=60;date-=6e4*d}return new Date(date)},stringify:({value})=>value.toISOString().replace(/((T00:00)?:00)?\.000Z$/,"")};var schema3=[map,seq,string,nullTag,trueTag,falseTag,intBin,intOct2,int2,intHex2,floatNaN2,floatExp2,float2,binary,omap,pairs,set,intTime,floatTime,timestamp];var schemas=new Map([["core",schema],["failsafe",[map,seq,string]],["json",schema2],["yaml11",schema3],["yaml-1.1",schema3]]);var tagsByName={binary,bool:boolTag,float,floatExp,floatNaN,floatTime,int,intHex,intOct,intTime,map,null:nullTag,omap,pairs,seq,set,timestamp};var coreKnownTags={"tag:yaml.org,2002:binary":binary,"tag:yaml.org,2002:omap":omap,"tag:yaml.org,2002:pairs":pairs,"tag:yaml.org,2002:set":set,"tag:yaml.org,2002:timestamp":timestamp};function getTags(customTags,schemaName){let tags=schemas.get(schemaName);if(!tags){if(Array.isArray(customTags))tags=[];else{const keys=Array.from(schemas.keys()).filter(key=>key!=="yaml11").map(key=>JSON.stringify(key)).join(", ");throw new Error(`Unknown schema "${schemaName}"; use one of ${keys} or define customTags array`)}}if(Array.isArray(customTags)){for(const tag of customTags)tags=tags.concat(tag)}else if(typeof customTags==="function"){tags=customTags(tags.slice())}return tags.map(tag=>{if(typeof tag!=="string")return tag;const tagObj=tagsByName[tag];if(tagObj)return tagObj;const keys=Object.keys(tagsByName).map(key=>JSON.stringify(key)).join(", ");throw new Error(`Unknown custom tag "${tag}"; use one of ${keys}`)})}var sortMapEntriesByKey=(a,b)=>a.key<b.key?-1:a.key>b.key?1:0;var Schema=class _Schema{constructor({compat,customTags,merge,resolveKnownTags,schema:schema4,sortMapEntries,toStringDefaults}){this.compat=Array.isArray(compat)?getTags(compat,"compat"):compat?getTags(null,compat):null;this.merge=!!merge;this.name=typeof schema4==="string"&&schema4||"core";this.knownTags=resolveKnownTags?coreKnownTags:{};this.tags=getTags(customTags,this.name);this.toStringOptions=toStringDefaults??null;Object.defineProperty(this,MAP,{value:map});Object.defineProperty(this,SCALAR,{value:string});Object.defineProperty(this,SEQ,{value:seq});this.sortMapEntries=typeof sortMapEntries==="function"?sortMapEntries:sortMapEntries===true?sortMapEntriesByKey:null}clone(){const copy=Object.create(_Schema.prototype,Object.getOwnPropertyDescriptors(this));copy.tags=this.tags.slice();return copy}};function stringifyDocument(doc,options){const lines=[];let hasDirectives=options.directives===true;if(options.directives!==false&&doc.directives){const dir=doc.directives.toString(doc);if(dir){lines.push(dir);hasDirectives=true}else if(doc.directives.docStart)hasDirectives=true}if(hasDirectives)lines.push("---");const ctx=createStringifyContext(doc,options);const{commentString}=ctx.options;if(doc.commentBefore){if(lines.length!==1)lines.unshift("");const cs=commentString(doc.commentBefore);lines.unshift(indentComment(cs,""))}let chompKeep=false;let contentComment=null;if(doc.contents){if(isNode(doc.contents)){if(doc.contents.spaceBefore&&hasDirectives)lines.push("");if(doc.contents.commentBefore){const cs=commentString(doc.contents.commentBefore);lines.push(indentComment(cs,""))}ctx.forceBlockIndent=!!doc.comment;contentComment=doc.contents.comment}const onChompKeep=contentComment?void 0:()=>chompKeep=true;let body=stringify(doc.contents,ctx,()=>contentComment=null,onChompKeep);if(contentComment)body+=lineComment(body,"",commentString(contentComment));if((body[0]==="|"||body[0]===">")&&lines[lines.length-1]==="---"){lines[lines.length-1]=`--- ${body}`}else lines.push(body)}else{lines.push(stringify(doc.contents,ctx))}if(doc.directives?.docEnd){if(doc.comment){const cs=commentString(doc.comment);if(cs.includes("\n")){lines.push("...");lines.push(indentComment(cs,""))}else{lines.push(`... ${cs}`)}}else{lines.push("...")}}else{let dc=doc.comment;if(dc&&chompKeep)dc=dc.replace(/^\n+/,"");if(dc){if((!chompKeep||contentComment)&&lines[lines.length-1]!=="")lines.push("");lines.push(indentComment(commentString(dc),""))}}return lines.join("\n")+"\n"}var Document=class _Document{constructor(value,replacer,options){this.commentBefore=null;this.comment=null;this.errors=[];this.warnings=[];Object.defineProperty(this,NODE_TYPE,{value:DOC});let _replacer=null;if(typeof replacer==="function"||Array.isArray(replacer)){_replacer=replacer}else if(options===void 0&&replacer){options=replacer;replacer=void 0}const opt=Object.assign({intAsBigInt:false,keepSourceTokens:false,logLevel:"warn",prettyErrors:true,strict:true,uniqueKeys:true,version:"1.2"},options);this.options=opt;let{version}=opt;if(options?._directives){this.directives=options._directives.atDocument();if(this.directives.yaml.explicit)version=this.directives.yaml.version}else this.directives=new Directives({version});this.setSchema(version,options);this.contents=value===void 0?null:this.createNode(value,_replacer,options)}clone(){const copy=Object.create(_Document.prototype,{[NODE_TYPE]:{value:DOC}});copy.commentBefore=this.commentBefore;copy.comment=this.comment;copy.errors=this.errors.slice();copy.warnings=this.warnings.slice();copy.options=Object.assign({},this.options);if(this.directives)copy.directives=this.directives.clone();copy.schema=this.schema.clone();copy.contents=isNode(this.contents)?this.contents.clone(copy.schema):this.contents;if(this.range)copy.range=this.range.slice();return copy}add(value){if(assertCollection(this.contents))this.contents.add(value)}addIn(path,value){if(assertCollection(this.contents))this.contents.addIn(path,value)}createAlias(node,name){if(!node.anchor){const prev=anchorNames(this);node.anchor=!name||prev.has(name)?findNewAnchor(name||"a",prev):name}return new Alias(node.anchor)}createNode(value,replacer,options){let _replacer=void 0;if(typeof replacer==="function"){value=replacer.call({"":value},"",value);_replacer=replacer}else if(Array.isArray(replacer)){const keyToStr=v=>typeof v==="number"||v instanceof String||v instanceof Number;const asStr=replacer.filter(keyToStr).map(String);if(asStr.length>0)replacer=replacer.concat(asStr);_replacer=replacer}else if(options===void 0&&replacer){options=replacer;replacer=void 0}const{aliasDuplicateObjects,anchorPrefix,flow,keepUndefined,onTagObj,tag}=options??{};const{onAnchor,setAnchors,sourceObjects}=createNodeAnchors(this,anchorPrefix||"a");const ctx={aliasDuplicateObjects:aliasDuplicateObjects??true,keepUndefined:keepUndefined??false,onAnchor,onTagObj,replacer:_replacer,schema:this.schema,sourceObjects};const node=createNode(value,tag,ctx);if(flow&&isCollection(node))node.flow=true;setAnchors();return node}createPair(key,value,options={}){const k=this.createNode(key,null,options);const v=this.createNode(value,null,options);return new Pair(k,v)}delete(key){return assertCollection(this.contents)?this.contents.delete(key):false}deleteIn(path){if(isEmptyPath(path)){if(this.contents==null)return false;this.contents=null;return true}return assertCollection(this.contents)?this.contents.deleteIn(path):false}get(key,keepScalar){return isCollection(this.contents)?this.contents.get(key,keepScalar):void 0}getIn(path,keepScalar){if(isEmptyPath(path))return!keepScalar&&isScalar(this.contents)?this.contents.value:this.contents;return isCollection(this.contents)?this.contents.getIn(path,keepScalar):void 0}has(key){return isCollection(this.contents)?this.contents.has(key):false}hasIn(path){if(isEmptyPath(path))return this.contents!==void 0;return isCollection(this.contents)?this.contents.hasIn(path):false}set(key,value){if(this.contents==null){this.contents=collectionFromPath(this.schema,[key],value)}else if(assertCollection(this.contents)){this.contents.set(key,value)}}setIn(path,value){if(isEmptyPath(path)){this.contents=value}else if(this.contents==null){this.contents=collectionFromPath(this.schema,Array.from(path),value)}else if(assertCollection(this.contents)){this.contents.setIn(path,value)}}setSchema(version,options={}){if(typeof version==="number")version=String(version);let opt;switch(version){case"1.1":if(this.directives)this.directives.yaml.version="1.1";else this.directives=new Directives({version:"1.1"});opt={merge:true,resolveKnownTags:false,schema:"yaml-1.1"};break;case"1.2":case"next":if(this.directives)this.directives.yaml.version=version;else this.directives=new Directives({version});opt={merge:false,resolveKnownTags:true,schema:"core"};break;case null:if(this.directives)delete this.directives;opt=null;break;default:{const sv=JSON.stringify(version);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${sv}`)}}if(options.schema instanceof Object)this.schema=options.schema;else if(opt)this.schema=new Schema(Object.assign(opt,options));else throw new Error(`With a null YAML version, the { schema: Schema } option is required`)}toJS({json,jsonArg,mapAsMap,maxAliasCount,onAnchor,reviver}={}){const ctx={anchors:new Map,doc:this,keep:!json,mapAsMap:mapAsMap===true,mapKeyWarned:false,maxAliasCount:typeof maxAliasCount==="number"?maxAliasCount:100};const res=toJS(this.contents,jsonArg??"",ctx);if(typeof onAnchor==="function")for(const{count,res:res2}of ctx.anchors.values())onAnchor(res2,count);return typeof reviver==="function"?applyReviver(reviver,{"":res},"",res):res}toJSON(jsonArg,onAnchor){return this.toJS({json:true,jsonArg,mapAsMap:false,onAnchor})}toString(options={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in options&&(!Number.isInteger(options.indent)||Number(options.indent)<=0)){const s=JSON.stringify(options.indent);throw new Error(`"indent" option must be a positive integer, not ${s}`)}return stringifyDocument(this,options)}};function assertCollection(contents){if(isCollection(contents))return true;throw new Error("Expected a YAML collection as document contents")}var YAMLError=class extends Error{constructor(name,pos,code,message){super();this.name=name;this.code=code;this.message=message;this.pos=pos}};var YAMLParseError=class extends YAMLError{constructor(pos,code,message){super("YAMLParseError",pos,code,message)}};var YAMLWarning=class extends YAMLError{constructor(pos,code,message){super("YAMLWarning",pos,code,message)}};var prettifyError=(src,lc)=>error=>{if(error.pos[0]===-1)return;error.linePos=error.pos.map(pos=>lc.linePos(pos));const{line,col}=error.linePos[0];error.message+=` at line ${line}, column ${col}`;let ci=col-1;let lineStr=src.substring(lc.lineStarts[line-1],lc.lineStarts[line]).replace(/[\n\r]+$/,"");if(ci>=60&&lineStr.length>80){const trimStart=Math.min(ci-39,lineStr.length-79);lineStr="\u2026"+lineStr.substring(trimStart);ci-=trimStart-1}if(lineStr.length>80)lineStr=lineStr.substring(0,79)+"\u2026";if(line>1&&/^ *$/.test(lineStr.substring(0,ci))){let prev=src.substring(lc.lineStarts[line-2],lc.lineStarts[line-1]);if(prev.length>80)prev=prev.substring(0,79)+"\u2026\n";lineStr=prev+lineStr}if(/[^ ]/.test(lineStr)){let count=1;const end=error.linePos[1];if(end&&end.line===line&&end.col>col){count=Math.max(1,Math.min(end.col-col,80-ci))}const pointer=" ".repeat(ci)+"^".repeat(count);error.message+=`:
${lineStr}
${pointer}
`}};function resolveProps(tokens,{flow,indicator,next,offset,onError,startOnNewline}){let spaceBefore=false;let atNewline=startOnNewline;let hasSpace=startOnNewline;let comment="";let commentSep="";let hasNewline=false;let hasNewlineAfterProp=false;let reqSpace=false;let anchor=null;let tag=null;let comma=null;let found=null;let start=null;for(const token of tokens){if(reqSpace){if(token.type!=="space"&&token.type!=="newline"&&token.type!=="comma")onError(token.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space");reqSpace=false}switch(token.type){case"space":if(!flow&&atNewline&&indicator!=="doc-start"&&token.source[0]===" ")onError(token,"TAB_AS_INDENT","Tabs are not allowed as indentation");hasSpace=true;break;case"comment":{if(!hasSpace)onError(token,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");const cb=token.source.substring(1)||" ";if(!comment)comment=cb;else comment+=commentSep+cb;commentSep="";atNewline=false;break}case"newline":if(atNewline){if(comment)comment+=token.source;else spaceBefore=true}else commentSep+=token.source;atNewline=true;hasNewline=true;if(anchor||tag)hasNewlineAfterProp=true;hasSpace=true;break;case"anchor":if(anchor)onError(token,"MULTIPLE_ANCHORS","A node can have at most one anchor");if(token.source.endsWith(":"))onError(token.offset+token.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",true);anchor=token;if(start===null)start=token.offset;atNewline=false;hasSpace=false;reqSpace=true;break;case"tag":{if(tag)onError(token,"MULTIPLE_TAGS","A node can have at most one tag");tag=token;if(start===null)start=token.offset;atNewline=false;hasSpace=false;reqSpace=true;break}case indicator:if(anchor||tag)onError(token,"BAD_PROP_ORDER",`Anchors and tags must be after the ${token.source} indicator`);if(found)onError(token,"UNEXPECTED_TOKEN",`Unexpected ${token.source} in ${flow??"collection"}`);found=token;atNewline=false;hasSpace=false;break;case"comma":if(flow){if(comma)onError(token,"UNEXPECTED_TOKEN",`Unexpected , in ${flow}`);comma=token;atNewline=false;hasSpace=false;break}default:onError(token,"UNEXPECTED_TOKEN",`Unexpected ${token.type} token`);atNewline=false;hasSpace=false}}const last=tokens[tokens.length-1];const end=last?last.offset+last.source.length:offset;if(reqSpace&&next&&next.type!=="space"&&next.type!=="newline"&&next.type!=="comma"&&(next.type!=="scalar"||next.source!==""))onError(next.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space");return{comma,found,spaceBefore,comment,hasNewline,hasNewlineAfterProp,anchor,tag,end,start:start??end}}function containsNewline(key){if(!key)return null;switch(key.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(key.source.includes("\n"))return true;if(key.end){for(const st of key.end)if(st.type==="newline")return true}return false;case"flow-collection":for(const it of key.items){for(const st of it.start)if(st.type==="newline")return true;if(it.sep){for(const st of it.sep)if(st.type==="newline")return true}if(containsNewline(it.key)||containsNewline(it.value))return true}return false;default:return true}}function flowIndentCheck(indent,fc,onError){if(fc?.type==="flow-collection"){const end=fc.end[0];if(end.indent===indent&&(end.source==="]"||end.source==="}")&&containsNewline(fc)){const msg="Flow end indicator should be more indented than parent";onError(end,"BAD_INDENT",msg,true)}}}function mapIncludes(ctx,items,search){const{uniqueKeys}=ctx.options;if(uniqueKeys===false)return false;const isEqual=typeof uniqueKeys==="function"?uniqueKeys:(a,b)=>a===b||isScalar(a)&&isScalar(b)&&a.value===b.value&&!(a.value==="<<"&&ctx.schema.merge);return items.some(pair=>isEqual(pair.key,search))}var startColMsg="All mapping items must start at the same column";function resolveBlockMap({composeNode:composeNode2,composeEmptyNode:composeEmptyNode2},ctx,bm,onError,tag){const NodeClass=tag?.nodeClass??YAMLMap;const map2=new NodeClass(ctx.schema);if(ctx.atRoot)ctx.atRoot=false;let offset=bm.offset;let commentEnd=null;for(const collItem of bm.items){const{start,key,sep,value}=collItem;const keyProps=resolveProps(start,{indicator:"explicit-key-ind",next:key??sep?.[0],offset,onError,startOnNewline:true});const implicitKey=!keyProps.found;if(implicitKey){if(key){if(key.type==="block-seq")onError(offset,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key");else if("indent"in key&&key.indent!==bm.indent)onError(offset,"BAD_INDENT",startColMsg)}if(!keyProps.anchor&&!keyProps.tag&&!sep){commentEnd=keyProps.end;if(keyProps.comment){if(map2.comment)map2.comment+="\n"+keyProps.comment;else map2.comment=keyProps.comment}continue}if(keyProps.hasNewlineAfterProp||containsNewline(key)){onError(key??start[start.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}}else if(keyProps.found?.indent!==bm.indent){onError(offset,"BAD_INDENT",startColMsg)}const keyStart=keyProps.end;const keyNode=key?composeNode2(ctx,key,keyProps,onError):composeEmptyNode2(ctx,keyStart,start,null,keyProps,onError);if(ctx.schema.compat)flowIndentCheck(bm.indent,key,onError);if(mapIncludes(ctx,map2.items,keyNode))onError(keyStart,"DUPLICATE_KEY","Map keys must be unique");const valueProps=resolveProps(sep??[],{indicator:"map-value-ind",next:value,offset:keyNode.range[2],onError,startOnNewline:!key||key.type==="block-scalar"});offset=valueProps.end;if(valueProps.found){if(implicitKey){if(value?.type==="block-map"&&!valueProps.hasNewline)onError(offset,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings");if(ctx.options.strict&&keyProps.start<valueProps.found.offset-1024)onError(keyNode.range,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit block mapping key")}const valueNode=value?composeNode2(ctx,value,valueProps,onError):composeEmptyNode2(ctx,offset,sep,null,valueProps,onError);if(ctx.schema.compat)flowIndentCheck(bm.indent,value,onError);offset=valueNode.range[2];const pair=new Pair(keyNode,valueNode);if(ctx.options.keepSourceTokens)pair.srcToken=collItem;map2.items.push(pair)}else{if(implicitKey)onError(keyNode.range,"MISSING_CHAR","Implicit map keys need to be followed by map values");if(valueProps.comment){if(keyNode.comment)keyNode.comment+="\n"+valueProps.comment;else keyNode.comment=valueProps.comment}const pair=new Pair(keyNode);if(ctx.options.keepSourceTokens)pair.srcToken=collItem;map2.items.push(pair)}}if(commentEnd&&commentEnd<offset)onError(commentEnd,"IMPOSSIBLE","Map comment with trailing content");map2.range=[bm.offset,offset,commentEnd??offset];return map2}function resolveBlockSeq({composeNode:composeNode2,composeEmptyNode:composeEmptyNode2},ctx,bs,onError,tag){const NodeClass=tag?.nodeClass??YAMLSeq;const seq2=new NodeClass(ctx.schema);if(ctx.atRoot)ctx.atRoot=false;let offset=bs.offset;let commentEnd=null;for(const{start,value}of bs.items){const props=resolveProps(start,{indicator:"seq-item-ind",next:value,offset,onError,startOnNewline:true});if(!props.found){if(props.anchor||props.tag||value){if(value&&value.type==="block-seq")onError(props.end,"BAD_INDENT","All sequence items must start at the same column");else onError(offset,"MISSING_CHAR","Sequence item without - indicator")}else{commentEnd=props.end;if(props.comment)seq2.comment=props.comment;continue}}const node=value?composeNode2(ctx,value,props,onError):composeEmptyNode2(ctx,props.end,start,null,props,onError);if(ctx.schema.compat)flowIndentCheck(bs.indent,value,onError);offset=node.range[2];seq2.items.push(node)}seq2.range=[bs.offset,offset,commentEnd??offset];return seq2}function resolveEnd(end,offset,reqSpace,onError){let comment="";if(end){let hasSpace=false;let sep="";for(const token of end){const{source,type}=token;switch(type){case"space":hasSpace=true;break;case"comment":{if(reqSpace&&!hasSpace)onError(token,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");const cb=source.substring(1)||" ";if(!comment)comment=cb;else comment+=sep+cb;sep="";break}case"newline":if(comment)sep+=source;hasSpace=true;break;default:onError(token,"UNEXPECTED_TOKEN",`Unexpected ${type} at node end`)}offset+=source.length}}return{comment,offset}}var blockMsg="Block collections are not allowed within flow collections";var isBlock=token=>token&&(token.type==="block-map"||token.type==="block-seq");function resolveFlowCollection({composeNode:composeNode2,composeEmptyNode:composeEmptyNode2},ctx,fc,onError,tag){const isMap2=fc.start.source==="{";const fcName=isMap2?"flow map":"flow sequence";const NodeClass=tag?.nodeClass??(isMap2?YAMLMap:YAMLSeq);const coll=new NodeClass(ctx.schema);coll.flow=true;const atRoot=ctx.atRoot;if(atRoot)ctx.atRoot=false;let offset=fc.offset+fc.start.source.length;for(let i=0;i<fc.items.length;++i){const collItem=fc.items[i];const{start,key,sep,value}=collItem;const props=resolveProps(start,{flow:fcName,indicator:"explicit-key-ind",next:key??sep?.[0],offset,onError,startOnNewline:false});if(!props.found){if(!props.anchor&&!props.tag&&!sep&&!value){if(i===0&&props.comma)onError(props.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${fcName}`);else if(i<fc.items.length-1)onError(props.start,"UNEXPECTED_TOKEN",`Unexpected empty item in ${fcName}`);if(props.comment){if(coll.comment)coll.comment+="\n"+props.comment;else coll.comment=props.comment}offset=props.end;continue}if(!isMap2&&ctx.options.strict&&containsNewline(key))onError(key,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(i===0){if(props.comma)onError(props.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${fcName}`)}else{if(!props.comma)onError(props.start,"MISSING_CHAR",`Missing , between ${fcName} items`);if(props.comment){let prevItemComment="";loop:for(const st of start){switch(st.type){case"comma":case"space":break;case"comment":prevItemComment=st.source.substring(1);break loop;default:break loop}}if(prevItemComment){let prev=coll.items[coll.items.length-1];if(isPair(prev))prev=prev.value??prev.key;if(prev.comment)prev.comment+="\n"+prevItemComment;else prev.comment=prevItemComment;props.comment=props.comment.substring(prevItemComment.length+1)}}}if(!isMap2&&!sep&&!props.found){const valueNode=value?composeNode2(ctx,value,props,onError):composeEmptyNode2(ctx,props.end,sep,null,props,onError);coll.items.push(valueNode);offset=valueNode.range[2];if(isBlock(value))onError(valueNode.range,"BLOCK_IN_FLOW",blockMsg)}else{const keyStart=props.end;const keyNode=key?composeNode2(ctx,key,props,onError):composeEmptyNode2(ctx,keyStart,start,null,props,onError);if(isBlock(key))onError(keyNode.range,"BLOCK_IN_FLOW",blockMsg);const valueProps=resolveProps(sep??[],{flow:fcName,indicator:"map-value-ind",next:value,offset:keyNode.range[2],onError,startOnNewline:false});if(valueProps.found){if(!isMap2&&!props.found&&ctx.options.strict){if(sep)for(const st of sep){if(st===valueProps.found)break;if(st.type==="newline"){onError(st,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line");break}}if(props.start<valueProps.found.offset-1024)onError(valueProps.found,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit flow sequence key")}}else if(value){if("source"in value&&value.source&&value.source[0]===":")onError(value,"MISSING_CHAR",`Missing space after : in ${fcName}`);else onError(valueProps.start,"MISSING_CHAR",`Missing , or : between ${fcName} items`)}const valueNode=value?composeNode2(ctx,value,valueProps,onError):valueProps.found?composeEmptyNode2(ctx,valueProps.end,sep,null,valueProps,onError):null;if(valueNode){if(isBlock(value))onError(valueNode.range,"BLOCK_IN_FLOW",blockMsg)}else if(valueProps.comment){if(keyNode.comment)keyNode.comment+="\n"+valueProps.comment;else keyNode.comment=valueProps.comment}const pair=new Pair(keyNode,valueNode);if(ctx.options.keepSourceTokens)pair.srcToken=collItem;if(isMap2){const map2=coll;if(mapIncludes(ctx,map2.items,keyNode))onError(keyStart,"DUPLICATE_KEY","Map keys must be unique");map2.items.push(pair)}else{const map2=new YAMLMap(ctx.schema);map2.flow=true;map2.items.push(pair);coll.items.push(map2)}offset=valueNode?valueNode.range[2]:valueProps.end}}const expectedEnd=isMap2?"}":"]";const[ce,...ee]=fc.end;let cePos=offset;if(ce&&ce.source===expectedEnd)cePos=ce.offset+ce.source.length;else{const name=fcName[0].toUpperCase()+fcName.substring(1);const msg=atRoot?`${name} must end with a ${expectedEnd}`:`${name} in block collection must be sufficiently indented and end with a ${expectedEnd}`;onError(offset,atRoot?"MISSING_CHAR":"BAD_INDENT",msg);if(ce&&ce.source.length!==1)ee.unshift(ce)}if(ee.length>0){const end=resolveEnd(ee,cePos,ctx.options.strict,onError);if(end.comment){if(coll.comment)coll.comment+="\n"+end.comment;else coll.comment=end.comment}coll.range=[fc.offset,cePos,end.offset]}else{coll.range=[fc.offset,cePos,cePos]}return coll}function resolveCollection(CN2,ctx,token,onError,tagName,tag){const coll=token.type==="block-map"?resolveBlockMap(CN2,ctx,token,onError,tag):token.type==="block-seq"?resolveBlockSeq(CN2,ctx,token,onError,tag):resolveFlowCollection(CN2,ctx,token,onError,tag);const Coll=coll.constructor;if(tagName==="!"||tagName===Coll.tagName){coll.tag=Coll.tagName;return coll}if(tagName)coll.tag=tagName;return coll}function composeCollection(CN2,ctx,token,tagToken,onError){const tagName=!tagToken?null:ctx.directives.tagName(tagToken.source,msg=>onError(tagToken,"TAG_RESOLVE_FAILED",msg));const expType=token.type==="block-map"?"map":token.type==="block-seq"?"seq":token.start.source==="{"?"map":"seq";if(!tagToken||!tagName||tagName==="!"||tagName===YAMLMap.tagName&&expType==="map"||tagName===YAMLSeq.tagName&&expType==="seq"||!expType){return resolveCollection(CN2,ctx,token,onError,tagName)}let tag=ctx.schema.tags.find(t=>t.tag===tagName&&t.collection===expType);if(!tag){const kt=ctx.schema.knownTags[tagName];if(kt&&kt.collection===expType){ctx.schema.tags.push(Object.assign({},kt,{default:false}));tag=kt}else{if(kt?.collection){onError(tagToken,"BAD_COLLECTION_TYPE",`${kt.tag} used for ${expType} collection, but expects ${kt.collection}`,true)}else{onError(tagToken,"TAG_RESOLVE_FAILED",`Unresolved tag: ${tagName}`,true)}return resolveCollection(CN2,ctx,token,onError,tagName)}}const coll=resolveCollection(CN2,ctx,token,onError,tagName,tag);const res=tag.resolve?.(coll,msg=>onError(tagToken,"TAG_RESOLVE_FAILED",msg),ctx.options)??coll;const node=isNode(res)?res:new Scalar(res);node.range=coll.range;node.tag=tagName;if(tag?.format)node.format=tag.format;return node}function resolveBlockScalar(scalar,strict,onError){const start=scalar.offset;const header=parseBlockScalarHeader(scalar,strict,onError);if(!header)return{value:"",type:null,comment:"",range:[start,start,start]};const type=header.mode===">"?Scalar.BLOCK_FOLDED:Scalar.BLOCK_LITERAL;const lines=scalar.source?splitLines(scalar.source):[];let chompStart=lines.length;for(let i=lines.length-1;i>=0;--i){const content=lines[i][1];if(content===""||content==="\r")chompStart=i;else break}if(chompStart===0){const value2=header.chomp==="+"&&lines.length>0?"\n".repeat(Math.max(1,lines.length-1)):"";let end2=start+header.length;if(scalar.source)end2+=scalar.source.length;return{value:value2,type,comment:header.comment,range:[start,end2,end2]}}let trimIndent=scalar.indent+header.indent;let offset=scalar.offset+header.length;let contentStart=0;for(let i=0;i<chompStart;++i){const[indent,content]=lines[i];if(content===""||content==="\r"){if(header.indent===0&&indent.length>trimIndent)trimIndent=indent.length}else{if(indent.length<trimIndent){const message="Block scalars with more-indented leading empty lines must use an explicit indentation indicator";onError(offset+indent.length,"MISSING_CHAR",message)}if(header.indent===0)trimIndent=indent.length;contentStart=i;break}offset+=indent.length+content.length+1}for(let i=lines.length-1;i>=chompStart;--i){if(lines[i][0].length>trimIndent)chompStart=i+1}let value="";let sep="";let prevMoreIndented=false;for(let i=0;i<contentStart;++i)value+=lines[i][0].slice(trimIndent)+"\n";for(let i=contentStart;i<chompStart;++i){let[indent,content]=lines[i];offset+=indent.length+content.length+1;const crlf=content[content.length-1]==="\r";if(crlf)content=content.slice(0,-1);if(content&&indent.length<trimIndent){const src=header.indent?"explicit indentation indicator":"first line";const message=`Block scalar lines must not be less indented than their ${src}`;onError(offset-content.length-(crlf?2:1),"BAD_INDENT",message);indent=""}if(type===Scalar.BLOCK_LITERAL){value+=sep+indent.slice(trimIndent)+content;sep="\n"}else if(indent.length>trimIndent||content[0]===" "){if(sep===" ")sep="\n";else if(!prevMoreIndented&&sep==="\n")sep="\n\n";value+=sep+indent.slice(trimIndent)+content;sep="\n";prevMoreIndented=true}else if(content===""){if(sep==="\n")value+="\n";else sep="\n"}else{value+=sep+content;sep=" ";prevMoreIndented=false}}switch(header.chomp){case"-":break;case"+":for(let i=chompStart;i<lines.length;++i)value+="\n"+lines[i][0].slice(trimIndent);if(value[value.length-1]!=="\n")value+="\n";break;default:value+="\n"}const end=start+header.length+scalar.source.length;return{value,type,comment:header.comment,range:[start,end,end]}}function parseBlockScalarHeader({offset,props},strict,onError){if(props[0].type!=="block-scalar-header"){onError(props[0],"IMPOSSIBLE","Block scalar header not found");return null}const{source}=props[0];const mode=source[0];let indent=0;let chomp="";let error=-1;for(let i=1;i<source.length;++i){const ch=source[i];if(!chomp&&(ch==="-"||ch==="+"))chomp=ch;else{const n=Number(ch);if(!indent&&n)indent=n;else if(error===-1)error=offset+i}}if(error!==-1)onError(error,"UNEXPECTED_TOKEN",`Block scalar header includes extra characters: ${source}`);let hasSpace=false;let comment="";let length=source.length;for(let i=1;i<props.length;++i){const token=props[i];switch(token.type){case"space":hasSpace=true;case"newline":length+=token.source.length;break;case"comment":if(strict&&!hasSpace){const message="Comments must be separated from other tokens by white space characters";onError(token,"MISSING_CHAR",message)}length+=token.source.length;comment=token.source.substring(1);break;case"error":onError(token,"UNEXPECTED_TOKEN",token.message);length+=token.source.length;break;default:{const message=`Unexpected token in block scalar header: ${token.type}`;onError(token,"UNEXPECTED_TOKEN",message);const ts=token.source;if(ts&&typeof ts==="string")length+=ts.length}}}return{mode,indent,chomp,comment,length}}function splitLines(source){const split=source.split(/\n( *)/);const first=split[0];const m=first.match(/^( *)/);const line0=m?.[1]?[m[1],first.slice(m[1].length)]:["",first];const lines=[line0];for(let i=1;i<split.length;i+=2)lines.push([split[i],split[i+1]]);return lines}function resolveFlowScalar(scalar,strict,onError){const{offset,type,source,end}=scalar;let _type;let value;const _onError=(rel,code,msg)=>onError(offset+rel,code,msg);switch(type){case"scalar":_type=Scalar.PLAIN;value=plainValue(source,_onError);break;case"single-quoted-scalar":_type=Scalar.QUOTE_SINGLE;value=singleQuotedValue(source,_onError);break;case"double-quoted-scalar":_type=Scalar.QUOTE_DOUBLE;value=doubleQuotedValue(source,_onError);break;default:onError(scalar,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${type}`);return{value:"",type:null,comment:"",range:[offset,offset+source.length,offset+source.length]}}const valueEnd=offset+source.length;const re=resolveEnd(end,valueEnd,strict,onError);return{value,type:_type,comment:re.comment,range:[offset,valueEnd,re.offset]}}function plainValue(source,onError){let badChar="";switch(source[0]){case" ":badChar="a tab character";break;case",":badChar="flow indicator character ,";break;case"%":badChar="directive indicator character %";break;case"|":case">":{badChar=`block scalar indicator ${source[0]}`;break}case"@":case"`":{badChar=`reserved character ${source[0]}`;break}}if(badChar)onError(0,"BAD_SCALAR_START",`Plain value cannot start with ${badChar}`);return foldLines(source)}function singleQuotedValue(source,onError){if(source[source.length-1]!=="'"||source.length===1)onError(source.length,"MISSING_CHAR","Missing closing 'quote");return foldLines(source.slice(1,-1)).replace(/''/g,"'")}function foldLines(source){let first,line;try{first=new RegExp("(.*?)(?<![ ])[ ]*\r?\n","sy");line=new RegExp("[ ]*(.*?)(?:(?<![ ])[ ]*)?\r?\n","sy")}catch(_){first=/(.*?)[ \t]*\r?\n/sy;line=/[ \t]*(.*?)[ \t]*\r?\n/sy}let match=first.exec(source);if(!match)return source;let res=match[1];let sep=" ";let pos=first.lastIndex;line.lastIndex=pos;while(match=line.exec(source)){if(match[1]===""){if(sep==="\n")res+=sep;else sep="\n"}else{res+=sep+match[1];sep=" "}pos=line.lastIndex}const last=/[ \t]*(.*)/sy;last.lastIndex=pos;match=last.exec(source);return res+sep+(match?.[1]??"")}function doubleQuotedValue(source,onError){let res="";for(let i=1;i<source.length-1;++i){const ch=source[i];if(ch==="\r"&&source[i+1]==="\n")continue;if(ch==="\n"){const{fold,offset}=foldNewline(source,i);res+=fold;i=offset}else if(ch==="\\"){let next=source[++i];const cc=escapeCodes[next];if(cc)res+=cc;else if(next==="\n"){next=source[i+1];while(next===" "||next===" ")next=source[++i+1]}else if(next==="\r"&&source[i+1]==="\n"){next=source[++i+1];while(next===" "||next===" ")next=source[++i+1]}else if(next==="x"||next==="u"||next==="U"){const length={x:2,u:4,U:8}[next];res+=parseCharCode(source,i+1,length,onError);i+=length}else{const raw=source.substr(i-1,2);onError(i-1,"BAD_DQ_ESCAPE",`Invalid escape sequence ${raw}`);res+=raw}}else if(ch===" "||ch===" "){const wsStart=i;let next=source[i+1];while(next===" "||next===" ")next=source[++i+1];if(next!=="\n"&&!(next==="\r"&&source[i+2]==="\n"))res+=i>wsStart?source.slice(wsStart,i+1):ch}else{res+=ch}}if(source[source.length-1]!=='"'||source.length===1)onError(source.length,"MISSING_CHAR",'Missing closing "quote');return res}function foldNewline(source,offset){let fold="";let ch=source[offset+1];while(ch===" "||ch===" "||ch==="\n"||ch==="\r"){if(ch==="\r"&&source[offset+2]!=="\n")break;if(ch==="\n")fold+="\n";offset+=1;ch=source[offset+1]}if(!fold)fold=" ";return{fold,offset}}var escapeCodes={"0":"\0",a:"\x07",b:"\b",e:"\x1B",f:"\f",n:"\n",r:"\r",t:" ",v:"\v",N:"\x85",_:"\xA0",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\"," ":" "};function parseCharCode(source,offset,length,onError){const cc=source.substr(offset,length);const ok=cc.length===length&&/^[0-9a-fA-F]+$/.test(cc);const code=ok?parseInt(cc,16):NaN;if(isNaN(code)){const raw=source.substr(offset-2,length+2);onError(offset-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${raw}`);return raw}return String.fromCodePoint(code)}function composeScalar(ctx,token,tagToken,onError){const{value,type,comment,range}=token.type==="block-scalar"?resolveBlockScalar(token,ctx.options.strict,onError):resolveFlowScalar(token,ctx.options.strict,onError);const tagName=tagToken?ctx.directives.tagName(tagToken.source,msg=>onError(tagToken,"TAG_RESOLVE_FAILED",msg)):null;const tag=tagToken&&tagName?findScalarTagByName(ctx.schema,value,tagName,tagToken,onError):token.type==="scalar"?findScalarTagByTest(ctx,value,token,onError):ctx.schema[SCALAR];let scalar;try{const res=tag.resolve(value,msg=>onError(tagToken??token,"TAG_RESOLVE_FAILED",msg),ctx.options);scalar=isScalar(res)?res:new Scalar(res)}catch(error){const msg=error instanceof Error?error.message:String(error);onError(tagToken??token,"TAG_RESOLVE_FAILED",msg);scalar=new Scalar(value)}scalar.range=range;scalar.source=value;if(type)scalar.type=type;if(tagName)scalar.tag=tagName;if(tag.format)scalar.format=tag.format;if(comment)scalar.comment=comment;return scalar}function findScalarTagByName(schema4,value,tagName,tagToken,onError){if(tagName==="!")return schema4[SCALAR];const matchWithTest=[];for(const tag of schema4.tags){if(!tag.collection&&tag.tag===tagName){if(tag.default&&tag.test)matchWithTest.push(tag);else return tag}}for(const tag of matchWithTest)if(tag.test?.test(value))return tag;const kt=schema4.knownTags[tagName];if(kt&&!kt.collection){schema4.tags.push(Object.assign({},kt,{default:false,test:void 0}));return kt}onError(tagToken,"TAG_RESOLVE_FAILED",`Unresolved tag: ${tagName}`,tagName!=="tag:yaml.org,2002:str");return schema4[SCALAR]}function findScalarTagByTest({directives,schema:schema4},value,token,onError){const tag=schema4.tags.find(tag2=>tag2.default&&tag2.test?.test(value))||schema4[SCALAR];if(schema4.compat){const compat=schema4.compat.find(tag2=>tag2.default&&tag2.test?.test(value))??schema4[SCALAR];if(tag.tag!==compat.tag){const ts=directives.tagString(tag.tag);const cs=directives.tagString(compat.tag);const msg=`Value may be parsed as either ${ts} or ${cs}`;onError(token,"TAG_RESOLVE_FAILED",msg,true)}}return tag}function emptyScalarPosition(offset,before,pos){if(before){if(pos===null)pos=before.length;for(let i=pos-1;i>=0;--i){let st=before[i];switch(st.type){case"space":case"comment":case"newline":offset-=st.source.length;continue}st=before[++i];while(st?.type==="space"){offset+=st.source.length;st=before[++i]}break}}return offset}var CN={composeNode,composeEmptyNode};function composeNode(ctx,token,props,onError){const{spaceBefore,comment,anchor,tag}=props;let node;let isSrcToken=true;switch(token.type){case"alias":node=composeAlias(ctx,token,onError);if(anchor||tag)onError(token,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":node=composeScalar(ctx,token,tag,onError);if(anchor)node.anchor=anchor.source.substring(1);break;case"block-map":case"block-seq":case"flow-collection":node=composeCollection(CN,ctx,token,tag,onError);if(anchor)node.anchor=anchor.source.substring(1);break;default:{const message=token.type==="error"?token.message:`Unsupported token (type: ${token.type})`;onError(token,"UNEXPECTED_TOKEN",message);node=composeEmptyNode(ctx,token.offset,void 0,null,props,onError);isSrcToken=false}}if(anchor&&node.anchor==="")onError(anchor,"BAD_ALIAS","Anchor cannot be an empty string");if(spaceBefore)node.spaceBefore=true;if(comment){if(token.type==="scalar"&&token.source==="")node.comment=comment;else node.commentBefore=comment}if(ctx.options.keepSourceTokens&&isSrcToken)node.srcToken=token;return node}function composeEmptyNode(ctx,offset,before,pos,{spaceBefore,comment,anchor,tag,end},onError){const token={type:"scalar",offset:emptyScalarPosition(offset,before,pos),indent:-1,source:""};const node=composeScalar(ctx,token,tag,onError);if(anchor){node.anchor=anchor.source.substring(1);if(node.anchor==="")onError(anchor,"BAD_ALIAS","Anchor cannot be an empty string")}if(spaceBefore)node.spaceBefore=true;if(comment){node.comment=comment;node.range[2]=end}return node}function composeAlias({options},{offset,source,end},onError){const alias=new Alias(source.substring(1));if(alias.source==="")onError(offset,"BAD_ALIAS","Alias cannot be an empty string");if(alias.source.endsWith(":"))onError(offset+source.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",true);const valueEnd=offset+source.length;const re=resolveEnd(end,valueEnd,options.strict,onError);alias.range=[offset,valueEnd,re.offset];if(re.comment)alias.comment=re.comment;return alias}function composeDoc(options,directives,{offset,start,value,end},onError){const opts=Object.assign({_directives:directives},options);const doc=new Document(void 0,opts);const ctx={atRoot:true,directives:doc.directives,options:doc.options,schema:doc.schema};const props=resolveProps(start,{indicator:"doc-start",next:value??end?.[0],offset,onError,startOnNewline:true});if(props.found){doc.directives.docStart=true;if(value&&(value.type==="block-map"||value.type==="block-seq")&&!props.hasNewline)onError(props.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")}doc.contents=value?composeNode(ctx,value,props,onError):composeEmptyNode(ctx,props.end,start,null,props,onError);const contentEnd=doc.contents.range[2];const re=resolveEnd(end,contentEnd,false,onError);if(re.comment)doc.comment=re.comment;doc.range=[offset,contentEnd,re.offset];return doc}function getErrorPos(src){if(typeof src==="number")return[src,src+1];if(Array.isArray(src))return src.length===2?src:[src[0],src[1]];const{offset,source}=src;return[offset,offset+(typeof source==="string"?source.length:1)]}function parsePrelude(prelude){let comment="";let atComment=false;let afterEmptyLine=false;for(let i=0;i<prelude.length;++i){const source=prelude[i];switch(source[0]){case"#":comment+=(comment===""?"":afterEmptyLine?"\n\n":"\n")+(source.substring(1)||" ");atComment=true;afterEmptyLine=false;break;case"%":if(prelude[i+1]?.[0]!=="#")i+=1;atComment=false;break;default:if(!atComment)afterEmptyLine=true;atComment=false}}return{comment,afterEmptyLine}}var Composer=class{constructor(options={}){this.doc=null;this.atDirectives=false;this.prelude=[];this.errors=[];this.warnings=[];this.onError=(source,code,message,warning)=>{const pos=getErrorPos(source);if(warning)this.warnings.push(new YAMLWarning(pos,code,message));else this.errors.push(new YAMLParseError(pos,code,message))};this.directives=new Directives({version:options.version||"1.2"});this.options=options}decorate(doc,afterDoc){const{comment,afterEmptyLine}=parsePrelude(this.prelude);if(comment){const dc=doc.contents;if(afterDoc){doc.comment=doc.comment?`${doc.comment}
${comment}`:comment}else if(afterEmptyLine||doc.directives.docStart||!dc){doc.commentBefore=comment}else if(isCollection(dc)&&!dc.flow&&dc.items.length>0){let it=dc.items[0];if(isPair(it))it=it.key;const cb=it.commentBefore;it.commentBefore=cb?`${comment}
${cb}`:comment}else{const cb=dc.commentBefore;dc.commentBefore=cb?`${comment}
${cb}`:comment}}if(afterDoc){Array.prototype.push.apply(doc.errors,this.errors);Array.prototype.push.apply(doc.warnings,this.warnings)}else{doc.errors=this.errors;doc.warnings=this.warnings}this.prelude=[];this.errors=[];this.warnings=[]}streamInfo(){return{comment:parsePrelude(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(tokens,forceDoc=false,endOffset=-1){for(const token of tokens)yield*this.next(token);yield*this.end(forceDoc,endOffset)}*next(token){switch(token.type){case"directive":this.directives.add(token.source,(offset,message,warning)=>{const pos=getErrorPos(token);pos[0]+=offset;this.onError(pos,"BAD_DIRECTIVE",message,warning)});this.prelude.push(token.source);this.atDirectives=true;break;case"document":{const doc=composeDoc(this.options,this.directives,token,this.onError);if(this.atDirectives&&!doc.directives.docStart)this.onError(token,"MISSING_CHAR","Missing directives-end/doc-start indicator line");this.decorate(doc,false);if(this.doc)yield this.doc;this.doc=doc;this.atDirectives=false;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(token.source);break;case"error":{const msg=token.source?`${token.message}: ${JSON.stringify(token.source)}`:token.message;const error=new YAMLParseError(getErrorPos(token),"UNEXPECTED_TOKEN",msg);if(this.atDirectives||!this.doc)this.errors.push(error);else this.doc.errors.push(error);break}case"doc-end":{if(!this.doc){const msg="Unexpected doc-end without preceding document";this.errors.push(new YAMLParseError(getErrorPos(token),"UNEXPECTED_TOKEN",msg));break}this.doc.directives.docEnd=true;const end=resolveEnd(token.end,token.offset+token.source.length,this.doc.options.strict,this.onError);this.decorate(this.doc,true);if(end.comment){const dc=this.doc.comment;this.doc.comment=dc?`${dc}
${end.comment}`:end.comment}this.doc.range[2]=end.offset;break}default:this.errors.push(new YAMLParseError(getErrorPos(token),"UNEXPECTED_TOKEN",`Unsupported token ${token.type}`))}}*end(forceDoc=false,endOffset=-1){if(this.doc){this.decorate(this.doc,true);yield this.doc;this.doc=null}else if(forceDoc){const opts=Object.assign({_directives:this.directives},this.options);const doc=new Document(void 0,opts);if(this.atDirectives)this.onError(endOffset,"MISSING_CHAR","Missing directives-end indicator line");doc.range=[0,endOffset,endOffset];this.decorate(doc,false);yield doc}}};var BREAK2=Symbol("break visit");var SKIP2=Symbol("skip children");var REMOVE2=Symbol("remove item");function visit2(cst,visitor){if("type"in cst&&cst.type==="document")cst={start:cst.start,value:cst.value};_visit(Object.freeze([]),cst,visitor)}visit2.BREAK=BREAK2;visit2.SKIP=SKIP2;visit2.REMOVE=REMOVE2;visit2.itemAtPath=(cst,path)=>{let item=cst;for(const[field,index]of path){const tok=item?.[field];if(tok&&"items"in tok){item=tok.items[index]}else return void 0}return item};visit2.parentCollection=(cst,path)=>{const parent=visit2.itemAtPath(cst,path.slice(0,-1));const field=path[path.length-1][0];const coll=parent?.[field];if(coll&&"items"in coll)return coll;throw new Error("Parent collection not found")};function _visit(path,item,visitor){let ctrl=visitor(item,path);if(typeof ctrl==="symbol")return ctrl;for(const field of["key","value"]){const token=item[field];if(token&&"items"in token){for(let i=0;i<token.items.length;++i){const ci=_visit(Object.freeze(path.concat([[field,i]])),token.items[i],visitor);if(typeof ci==="number")i=ci-1;else if(ci===BREAK2)return BREAK2;else if(ci===REMOVE2){token.items.splice(i,1);i-=1}}if(typeof ctrl==="function"&&field==="key")ctrl=ctrl(item,path)}}return typeof ctrl==="function"?ctrl(item,path):ctrl}var BOM="\uFEFF";var DOCUMENT="";var FLOW_END="";var SCALAR2="";function tokenType(source){switch(source){case BOM:return"byte-order-mark";case DOCUMENT:return"doc-mode";case FLOW_END:return"flow-error-end";case SCALAR2:return"scalar";case"---":return"doc-start";case"...":return"doc-end";case"":case"\n":case"\r\n":return"newline";case"-":return"seq-item-ind";case"?":return"explicit-key-ind";case":":return"map-value-ind";case"{":return"flow-map-start";case"}":return"flow-map-end";case"[":return"flow-seq-start";case"]":return"flow-seq-end";case",":return"comma"}switch(source[0]){case" ":case" ":return"space";case"#":return"comment";case"%":return"directive-line";case"*":return"alias";case"&":return"anchor";case"!":return"tag";case"'":return"single-quoted-scalar";case'"':return"double-quoted-scalar";case"|":case">":return"block-scalar-header"}return null}function isEmpty(ch){switch(ch){case void 0:case" ":case"\n":case"\r":case" ":return true;default:return false}}var hexDigits="0123456789ABCDEFabcdef".split("");var tagChars="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()".split("");var invalidFlowScalarChars=",[]{}".split("");var invalidAnchorChars=" ,[]{}\n\r ".split("");var isNotAnchorChar=ch=>!ch||invalidAnchorChars.includes(ch);var Lexer=class{constructor(){this.atEnd=false;this.blockScalarIndent=-1;this.blockScalarKeep=false;this.buffer="";this.flowKey=false;this.flowLevel=0;this.indentNext=0;this.indentValue=0;this.lineEndPos=null;this.next=null;this.pos=0}*lex(source,incomplete=false){if(source){this.buffer=this.buffer?this.buffer+source:source;this.lineEndPos=null}this.atEnd=!incomplete;let next=this.next??"stream";while(next&&(incomplete||this.hasChars(1)))next=yield*this.parseNext(next)}atLineEnd(){let i=this.pos;let ch=this.buffer[i];while(ch===" "||ch===" ")ch=this.buffer[++i];if(!ch||ch==="#"||ch==="\n")return true;if(ch==="\r")return this.buffer[i+1]==="\n";return false}charAt(n){return this.buffer[this.pos+n]}continueScalar(offset){let ch=this.buffer[offset];if(this.indentNext>0){let indent=0;while(ch===" ")ch=this.buffer[++indent+offset];if(ch==="\r"){const next=this.buffer[indent+offset+1];if(next==="\n"||!next&&!this.atEnd)return offset+indent+1}return ch==="\n"||indent>=this.indentNext||!ch&&!this.atEnd?offset+indent:-1}if(ch==="-"||ch==="."){const dt=this.buffer.substr(offset,3);if((dt==="---"||dt==="...")&&isEmpty(this.buffer[offset+3]))return-1}return offset}getLine(){let end=this.lineEndPos;if(typeof end!=="number"||end!==-1&&end<this.pos){end=this.buffer.indexOf("\n",this.pos);this.lineEndPos=end}if(end===-1)return this.atEnd?this.buffer.substring(this.pos):null;if(this.buffer[end-1]==="\r")end-=1;return this.buffer.substring(this.pos,end)}hasChars(n){return this.pos+n<=this.buffer.length}setNext(state){this.buffer=this.buffer.substring(this.pos);this.pos=0;this.lineEndPos=null;this.next=state;return null}peek(n){return this.buffer.substr(this.pos,n)}*parseNext(next){switch(next){case"stream":return yield*this.parseStream();case"line-start":return yield*this.parseLineStart();case"block-start":return yield*this.parseBlockStart();case"doc":return yield*this.parseDocument();case"flow":return yield*this.parseFlowCollection();case"quoted-scalar":return yield*this.parseQuotedScalar();case"block-scalar":return yield*this.parseBlockScalar();case"plain-scalar":return yield*this.parsePlainScalar()}}*parseStream(){let line=this.getLine();if(line===null)return this.setNext("stream");if(line[0]===BOM){yield*this.pushCount(1);line=line.substring(1)}if(line[0]==="%"){let dirEnd=line.length;const cs=line.indexOf("#");if(cs!==-1){const ch=line[cs-1];if(ch===" "||ch===" ")dirEnd=cs-1}while(true){const ch=line[dirEnd-1];if(ch===" "||ch===" ")dirEnd-=1;else break}const n=(yield*this.pushCount(dirEnd))+(yield*this.pushSpaces(true));yield*this.pushCount(line.length-n);this.pushNewline();return"stream"}if(this.atLineEnd()){const sp=yield*this.pushSpaces(true);yield*this.pushCount(line.length-sp);yield*this.pushNewline();return"stream"}yield DOCUMENT;return yield*this.parseLineStart()}*parseLineStart(){const ch=this.charAt(0);if(!ch&&!this.atEnd)return this.setNext("line-start");if(ch==="-"||ch==="."){if(!this.atEnd&&!this.hasChars(4))return this.setNext("line-start");const s=this.peek(3);if(s==="---"&&isEmpty(this.charAt(3))){yield*this.pushCount(3);this.indentValue=0;this.indentNext=0;return"doc"}else if(s==="..."&&isEmpty(this.charAt(3))){yield*this.pushCount(3);return"stream"}}this.indentValue=yield*this.pushSpaces(false);if(this.indentNext>this.indentValue&&!isEmpty(this.charAt(1)))this.indentNext=this.indentValue;return yield*this.parseBlockStart()}*parseBlockStart(){const[ch0,ch1]=this.peek(2);if(!ch1&&!this.atEnd)return this.setNext("block-start");if((ch0==="-"||ch0==="?"||ch0===":")&&isEmpty(ch1)){const n=(yield*this.pushCount(1))+(yield*this.pushSpaces(true));this.indentNext=this.indentValue+1;this.indentValue+=n;return yield*this.parseBlockStart()}return"doc"}*parseDocument(){yield*this.pushSpaces(true);const line=this.getLine();if(line===null)return this.setNext("doc");let n=yield*this.pushIndicators();switch(line[n]){case"#":yield*this.pushCount(line.length-n);case void 0:yield*this.pushNewline();return yield*this.parseLineStart();case"{":case"[":yield*this.pushCount(1);this.flowKey=false;this.flowLevel=1;return"flow";case"}":case"]":yield*this.pushCount(1);return"doc";case"*":yield*this.pushUntil(isNotAnchorChar);return"doc";case'"':case"'":return yield*this.parseQuotedScalar();case"|":case">":n+=yield*this.parseBlockScalarHeader();n+=yield*this.pushSpaces(true);yield*this.pushCount(line.length-n);yield*this.pushNewline();return yield*this.parseBlockScalar();default:return yield*this.parsePlainScalar()}}*parseFlowCollection(){let nl,sp;let indent=-1;do{nl=yield*this.pushNewline();if(nl>0){sp=yield*this.pushSpaces(false);this.indentValue=indent=sp}else{sp=0}sp+=yield*this.pushSpaces(true)}while(nl+sp>0);const line=this.getLine();if(line===null)return this.setNext("flow");if(indent!==-1&&indent<this.indentNext&&line[0]!=="#"||indent===0&&(line.startsWith("---")||line.startsWith("..."))&&isEmpty(line[3])){const atFlowEndMarker=indent===this.indentNext-1&&this.flowLevel===1&&(line[0]==="]"||line[0]==="}");if(!atFlowEndMarker){this.flowLevel=0;yield FLOW_END;return yield*this.parseLineStart()}}let n=0;while(line[n]===","){n+=yield*this.pushCount(1);n+=yield*this.pushSpaces(true);this.flowKey=false}n+=yield*this.pushIndicators();switch(line[n]){case void 0:return"flow";case"#":yield*this.pushCount(line.length-n);return"flow";case"{":case"[":yield*this.pushCount(1);this.flowKey=false;this.flowLevel+=1;return"flow";case"}":case"]":yield*this.pushCount(1);this.flowKey=true;this.flowLevel-=1;return this.flowLevel?"flow":"doc";case"*":yield*this.pushUntil(isNotAnchorChar);return"flow";case'"':case"'":this.flowKey=true;return yield*this.parseQuotedScalar();case":":{const next=this.charAt(1);if(this.flowKey||isEmpty(next)||next===","){this.flowKey=false;yield*this.pushCount(1);yield*this.pushSpaces(true);return"flow"}}default:this.flowKey=false;return yield*this.parsePlainScalar()}}*parseQuotedScalar(){const quote=this.charAt(0);let end=this.buffer.indexOf(quote,this.pos+1);if(quote==="'"){while(end!==-1&&this.buffer[end+1]==="'")end=this.buffer.indexOf("'",end+2)}else{while(end!==-1){let n=0;while(this.buffer[end-1-n]==="\\")n+=1;if(n%2===0)break;end=this.buffer.indexOf('"',end+1)}}const qb=this.buffer.substring(0,end);let nl=qb.indexOf("\n",this.pos);if(nl!==-1){while(nl!==-1){const cs=this.continueScalar(nl+1);if(cs===-1)break;nl=qb.indexOf("\n",cs)}if(nl!==-1){end=nl-(qb[nl-1]==="\r"?2:1)}}if(end===-1){if(!this.atEnd)return this.setNext("quoted-scalar");end=this.buffer.length}yield*this.pushToIndex(end+1,false);return this.flowLevel?"flow":"doc"}*parseBlockScalarHeader(){this.blockScalarIndent=-1;this.blockScalarKeep=false;let i=this.pos;while(true){const ch=this.buffer[++i];if(ch==="+")this.blockScalarKeep=true;else if(ch>"0"&&ch<="9")this.blockScalarIndent=Number(ch)-1;else if(ch!=="-")break}return yield*this.pushUntil(ch=>isEmpty(ch)||ch==="#")}*parseBlockScalar(){let nl=this.pos-1;let indent=0;let ch;loop:for(let i=this.pos;ch=this.buffer[i];++i){switch(ch){case" ":indent+=1;break;case"\n":nl=i;indent=0;break;case"\r":{const next=this.buffer[i+1];if(!next&&!this.atEnd)return this.setNext("block-scalar");if(next==="\n")break}default:break loop}}if(!ch&&!this.atEnd)return this.setNext("block-scalar");if(indent>=this.indentNext){if(this.blockScalarIndent===-1)this.indentNext=indent;else this.indentNext+=this.blockScalarIndent;do{const cs=this.continueScalar(nl+1);if(cs===-1)break;nl=this.buffer.indexOf("\n",cs)}while(nl!==-1);if(nl===-1){if(!this.atEnd)return this.setNext("block-scalar");nl=this.buffer.length}}if(!this.blockScalarKeep){do{let i=nl-1;let ch2=this.buffer[i];if(ch2==="\r")ch2=this.buffer[--i];const lastChar=i;while(ch2===" "||ch2===" ")ch2=this.buffer[--i];if(ch2==="\n"&&i>=this.pos&&i+1+indent>lastChar)nl=i;else break}while(true)}yield SCALAR2;yield*this.pushToIndex(nl+1,true);return yield*this.parseLineStart()}*parsePlainScalar(){const inFlow=this.flowLevel>0;let end=this.pos-1;let i=this.pos-1;let ch;while(ch=this.buffer[++i]){if(ch===":"){const next=this.buffer[i+1];if(isEmpty(next)||inFlow&&next===",")break;end=i}else if(isEmpty(ch)){let next=this.buffer[i+1];if(ch==="\r"){if(next==="\n"){i+=1;ch="\n";next=this.buffer[i+1]}else end=i}if(next==="#"||inFlow&&invalidFlowScalarChars.includes(next))break;if(ch==="\n"){const cs=this.continueScalar(i+1);if(cs===-1)break;i=Math.max(i,cs-2)}}else{if(inFlow&&invalidFlowScalarChars.includes(ch))break;end=i}}if(!ch&&!this.atEnd)return this.setNext("plain-scalar");yield SCALAR2;yield*this.pushToIndex(end+1,true);return inFlow?"flow":"doc"}*pushCount(n){if(n>0){yield this.buffer.substr(this.pos,n);this.pos+=n;return n}return 0}*pushToIndex(i,allowEmpty){const s=this.buffer.slice(this.pos,i);if(s){yield s;this.pos+=s.length;return s.length}else if(allowEmpty)yield"";return 0}*pushIndicators(){switch(this.charAt(0)){case"!":return(yield*this.pushTag())+(yield*this.pushSpaces(true))+(yield*this.pushIndicators());case"&":return(yield*this.pushUntil(isNotAnchorChar))+(yield*this.pushSpaces(true))+(yield*this.pushIndicators());case"-":case"?":case":":{const inFlow=this.flowLevel>0;const ch1=this.charAt(1);if(isEmpty(ch1)||inFlow&&invalidFlowScalarChars.includes(ch1)){if(!inFlow)this.indentNext=this.indentValue+1;else if(this.flowKey)this.flowKey=false;return(yield*this.pushCount(1))+(yield*this.pushSpaces(true))+(yield*this.pushIndicators())}}}return 0}*pushTag(){if(this.charAt(1)==="<"){let i=this.pos+2;let ch=this.buffer[i];while(!isEmpty(ch)&&ch!==">")ch=this.buffer[++i];return yield*this.pushToIndex(ch===">"?i+1:i,false)}else{let i=this.pos+1;let ch=this.buffer[i];while(ch){if(tagChars.includes(ch))ch=this.buffer[++i];else if(ch==="%"&&hexDigits.includes(this.buffer[i+1])&&hexDigits.includes(this.buffer[i+2])){ch=this.buffer[i+=3]}else break}return yield*this.pushToIndex(i,false)}}*pushNewline(){const ch=this.buffer[this.pos];if(ch==="\n")return yield*this.pushCount(1);else if(ch==="\r"&&this.charAt(1)==="\n")return yield*this.pushCount(2);else return 0}*pushSpaces(allowTabs){let i=this.pos-1;let ch;do{ch=this.buffer[++i]}while(ch===" "||allowTabs&&ch===" ");const n=i-this.pos;if(n>0){yield this.buffer.substr(this.pos,n);this.pos=i}return n}*pushUntil(test){let i=this.pos;let ch=this.buffer[i];while(!test(ch))ch=this.buffer[++i];return yield*this.pushToIndex(i,false)}};var LineCounter=class{constructor(){this.lineStarts=[];this.addNewLine=offset=>this.lineStarts.push(offset);this.linePos=offset=>{let low=0;let high=this.lineStarts.length;while(low<high){const mid=low+high>>1;if(this.lineStarts[mid]<offset)low=mid+1;else high=mid}if(this.lineStarts[low]===offset)return{line:low+1,col:1};if(low===0)return{line:0,col:offset};const start=this.lineStarts[low-1];return{line:low,col:offset-start+1}}}};function includesToken(list,type){for(let i=0;i<list.length;++i)if(list[i].type===type)return true;return false}function findNonEmptyIndex(list){for(let i=0;i<list.length;++i){switch(list[i].type){case"space":case"comment":case"newline":break;default:return i}}return-1}function isFlowToken(token){switch(token?.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"flow-collection":return true;default:return false}}function getPrevProps(parent){switch(parent.type){case"document":return parent.start;case"block-map":{const it=parent.items[parent.items.length-1];return it.sep??it.start}case"block-seq":return parent.items[parent.items.length-1].start;default:return[]}}function getFirstKeyStartProps(prev){if(prev.length===0)return[];let i=prev.length;loop:while(--i>=0){switch(prev[i].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break loop}}while(prev[++i]?.type==="space"){}return prev.splice(i,prev.length)}function fixFlowSeqItems(fc){if(fc.start.type==="flow-seq-start"){for(const it of fc.items){if(it.sep&&!it.value&&!includesToken(it.start,"explicit-key-ind")&&!includesToken(it.sep,"map-value-ind")){if(it.key)it.value=it.key;delete it.key;if(isFlowToken(it.value)){if(it.value.end)Array.prototype.push.apply(it.value.end,it.sep);else it.value.end=it.sep}else Array.prototype.push.apply(it.start,it.sep);delete it.sep}}}}var Parser=class{constructor(onNewLine){this.atNewLine=true;this.atScalar=false;this.indent=0;this.offset=0;this.onKeyLine=false;this.stack=[];this.source="";this.type="";this.lexer=new Lexer;this.onNewLine=onNewLine}*parse(source,incomplete=false){if(this.onNewLine&&this.offset===0)this.onNewLine(0);for(const lexeme of this.lexer.lex(source,incomplete))yield*this.next(lexeme);if(!incomplete)yield*this.end()}*next(source){this.source=source;if(this.atScalar){this.atScalar=false;yield*this.step();this.offset+=source.length;return}const type=tokenType(source);if(!type){const message=`Not a YAML token: ${source}`;yield*this.pop({type:"error",offset:this.offset,message,source});this.offset+=source.length}else if(type==="scalar"){this.atNewLine=false;this.atScalar=true;this.type="scalar"}else{this.type=type;yield*this.step();switch(type){case"newline":this.atNewLine=true;this.indent=0;if(this.onNewLine)this.onNewLine(this.offset+source.length);break;case"space":if(this.atNewLine&&source[0]===" ")this.indent+=source.length;break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":if(this.atNewLine)this.indent+=source.length;break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=false}this.offset+=source.length}}*end(){while(this.stack.length>0)yield*this.pop()}get sourceToken(){const st={type:this.type,offset:this.offset,indent:this.indent,source:this.source};return st}*step(){const top=this.peek(1);if(this.type==="doc-end"&&(!top||top.type!=="doc-end")){while(this.stack.length>0)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!top)return yield*this.stream();switch(top.type){case"document":return yield*this.document(top);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar(top);case"block-scalar":return yield*this.blockScalar(top);case"block-map":return yield*this.blockMap(top);case"block-seq":return yield*this.blockSequence(top);case"flow-collection":return yield*this.flowCollection(top);case"doc-end":return yield*this.documentEnd(top)}yield*this.pop()}peek(n){return this.stack[this.stack.length-n]}*pop(error){const token=error??this.stack.pop();if(!token){const message="Tried to pop an empty stack";yield{type:"error",offset:this.offset,source:"",message}}else if(this.stack.length===0){yield token}else{const top=this.peek(1);if(token.type==="block-scalar"){token.indent="indent"in top?top.indent:0}else if(token.type==="flow-collection"&&top.type==="document"){token.indent=0}if(token.type==="flow-collection")fixFlowSeqItems(token);switch(top.type){case"document":top.value=token;break;case"block-scalar":top.props.push(token);break;case"block-map":{const it=top.items[top.items.length-1];if(it.value){top.items.push({start:[],key:token,sep:[]});this.onKeyLine=true;return}else if(it.sep){it.value=token}else{Object.assign(it,{key:token,sep:[]});this.onKeyLine=!includesToken(it.start,"explicit-key-ind");return}break}case"block-seq":{const it=top.items[top.items.length-1];if(it.value)top.items.push({start:[],value:token});else it.value=token;break}case"flow-collection":{const it=top.items[top.items.length-1];if(!it||it.value)top.items.push({start:[],key:token,sep:[]});else if(it.sep)it.value=token;else Object.assign(it,{key:token,sep:[]});return}default:yield*this.pop();yield*this.pop(token)}if((top.type==="document"||top.type==="block-map"||top.type==="block-seq")&&(token.type==="block-map"||token.type==="block-seq")){const last=token.items[token.items.length-1];if(last&&!last.sep&&!last.value&&last.start.length>0&&findNonEmptyIndex(last.start)===-1&&(token.indent===0||last.start.every(st=>st.type!=="comment"||st.indent<token.indent))){if(top.type==="document")top.end=last.start;else top.items.push({start:last.start});token.items.splice(-1,1)}}}}*stream(){switch(this.type){case"directive-line":yield{type:"directive",offset:this.offset,source:this.source};return;case"byte-order-mark":case"space":case"comment":case"newline":yield this.sourceToken;return;case"doc-mode":case"doc-start":{const doc={type:"document",offset:this.offset,start:[]};if(this.type==="doc-start")doc.start.push(this.sourceToken);this.stack.push(doc);return}}yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML stream`,source:this.source}}*document(doc){if(doc.value)return yield*this.lineEnd(doc);switch(this.type){case"doc-start":{if(findNonEmptyIndex(doc.start)!==-1){yield*this.pop();yield*this.step()}else doc.start.push(this.sourceToken);return}case"anchor":case"tag":case"space":case"comment":case"newline":doc.start.push(this.sourceToken);return}const bv=this.startBlockValue(doc);if(bv)this.stack.push(bv);else{yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML document`,source:this.source}}}*scalar(scalar){if(this.type==="map-value-ind"){const prev=getPrevProps(this.peek(2));const start=getFirstKeyStartProps(prev);let sep;if(scalar.end){sep=scalar.end;sep.push(this.sourceToken);delete scalar.end}else sep=[this.sourceToken];const map2={type:"block-map",offset:scalar.offset,indent:scalar.indent,items:[{start,key:scalar,sep}]};this.onKeyLine=true;this.stack[this.stack.length-1]=map2}else yield*this.lineEnd(scalar)}*blockScalar(scalar){switch(this.type){case"space":case"comment":case"newline":scalar.props.push(this.sourceToken);return;case"scalar":scalar.source=this.source;this.atNewLine=true;this.indent=0;if(this.onNewLine){let nl=this.source.indexOf("\n")+1;while(nl!==0){this.onNewLine(this.offset+nl);nl=this.source.indexOf("\n",nl)+1}}yield*this.pop();break;default:yield*this.pop();yield*this.step()}}*blockMap(map2){const it=map2.items[map2.items.length-1];switch(this.type){case"newline":this.onKeyLine=false;if(it.value){const end="end"in it.value?it.value.end:void 0;const last=Array.isArray(end)?end[end.length-1]:void 0;if(last?.type==="comment")end?.push(this.sourceToken);else map2.items.push({start:[this.sourceToken]})}else if(it.sep){it.sep.push(this.sourceToken)}else{it.start.push(this.sourceToken)}return;case"space":case"comment":if(it.value){map2.items.push({start:[this.sourceToken]})}else if(it.sep){it.sep.push(this.sourceToken)}else{if(this.atIndentedComment(it.start,map2.indent)){const prev=map2.items[map2.items.length-2];const end=prev?.value?.end;if(Array.isArray(end)){Array.prototype.push.apply(end,it.start);end.push(this.sourceToken);map2.items.pop();return}}it.start.push(this.sourceToken)}return}if(this.indent>=map2.indent){const atNextItem=!this.onKeyLine&&this.indent===map2.indent&&it.sep;let start=[];if(atNextItem&&it.sep&&!it.value){const nl=[];for(let i=0;i<it.sep.length;++i){const st=it.sep[i];switch(st.type){case"newline":nl.push(i);break;case"space":break;case"comment":if(st.indent>map2.indent)nl.length=0;break;default:nl.length=0}}if(nl.length>=2)start=it.sep.splice(nl[1])}switch(this.type){case"anchor":case"tag":if(atNextItem||it.value){start.push(this.sourceToken);map2.items.push({start});this.onKeyLine=true}else if(it.sep){it.sep.push(this.sourceToken)}else{it.start.push(this.sourceToken)}return;case"explicit-key-ind":if(!it.sep&&!includesToken(it.start,"explicit-key-ind")){it.start.push(this.sourceToken)}else if(atNextItem||it.value){start.push(this.sourceToken);map2.items.push({start})}else{this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]})}this.onKeyLine=true;return;case"map-value-ind":if(includesToken(it.start,"explicit-key-ind")){if(!it.sep){if(includesToken(it.start,"newline")){Object.assign(it,{key:null,sep:[this.sourceToken]})}else{const start2=getFirstKeyStartProps(it.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:start2,key:null,sep:[this.sourceToken]}]})}}else if(it.value){map2.items.push({start:[],key:null,sep:[this.sourceToken]})}else if(includesToken(it.sep,"map-value-ind")){this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start,key:null,sep:[this.sourceToken]}]})}else if(isFlowToken(it.key)&&!includesToken(it.sep,"newline")){const start2=getFirstKeyStartProps(it.start);const key=it.key;const sep=it.sep;sep.push(this.sourceToken);delete it.key,delete it.sep;this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:start2,key,sep}]})}else if(start.length>0){it.sep=it.sep.concat(start,this.sourceToken)}else{it.sep.push(this.sourceToken)}}else{if(!it.sep){Object.assign(it,{key:null,sep:[this.sourceToken]})}else if(it.value||atNextItem){map2.items.push({start,key:null,sep:[this.sourceToken]})}else if(includesToken(it.sep,"map-value-ind")){this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]})}else{it.sep.push(this.sourceToken)}}this.onKeyLine=true;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{const fs=this.flowScalar(this.type);if(atNextItem||it.value){map2.items.push({start,key:fs,sep:[]});this.onKeyLine=true}else if(it.sep){this.stack.push(fs)}else{Object.assign(it,{key:fs,sep:[]});this.onKeyLine=true}return}default:{const bv=this.startBlockValue(map2);if(bv){if(atNextItem&&bv.type!=="block-seq"&&includesToken(it.start,"explicit-key-ind")){map2.items.push({start})}this.stack.push(bv);return}}}}yield*this.pop();yield*this.step()}*blockSequence(seq2){const it=seq2.items[seq2.items.length-1];switch(this.type){case"newline":if(it.value){const end="end"in it.value?it.value.end:void 0;const last=Array.isArray(end)?end[end.length-1]:void 0;if(last?.type==="comment")end?.push(this.sourceToken);else seq2.items.push({start:[this.sourceToken]})}else it.start.push(this.sourceToken);return;case"space":case"comment":if(it.value)seq2.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(it.start,seq2.indent)){const prev=seq2.items[seq2.items.length-2];const end=prev?.value?.end;if(Array.isArray(end)){Array.prototype.push.apply(end,it.start);end.push(this.sourceToken);seq2.items.pop();return}}it.start.push(this.sourceToken)}return;case"anchor":case"tag":if(it.value||this.indent<=seq2.indent)break;it.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==seq2.indent)break;if(it.value||includesToken(it.start,"seq-item-ind"))seq2.items.push({start:[this.sourceToken]});else it.start.push(this.sourceToken);return}if(this.indent>seq2.indent){const bv=this.startBlockValue(seq2);if(bv){this.stack.push(bv);return}}yield*this.pop();yield*this.step()}*flowCollection(fc){const it=fc.items[fc.items.length-1];if(this.type==="flow-error-end"){let top;do{yield*this.pop();top=this.peek(1)}while(top&&top.type==="flow-collection")}else if(fc.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":if(!it||it.sep)fc.items.push({start:[this.sourceToken]});else it.start.push(this.sourceToken);return;case"map-value-ind":if(!it||it.value)fc.items.push({start:[],key:null,sep:[this.sourceToken]});else if(it.sep)it.sep.push(this.sourceToken);else Object.assign(it,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":if(!it||it.value)fc.items.push({start:[this.sourceToken]});else if(it.sep)it.sep.push(this.sourceToken);else it.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{const fs=this.flowScalar(this.type);if(!it||it.value)fc.items.push({start:[],key:fs,sep:[]});else if(it.sep)this.stack.push(fs);else Object.assign(it,{key:fs,sep:[]});return}case"flow-map-end":case"flow-seq-end":fc.end.push(this.sourceToken);return}const bv=this.startBlockValue(fc);if(bv)this.stack.push(bv);else{yield*this.pop();yield*this.step()}}else{const parent=this.peek(2);if(parent.type==="block-map"&&(this.type==="map-value-ind"&&parent.indent===fc.indent||this.type==="newline"&&!parent.items[parent.items.length-1].sep)){yield*this.pop();yield*this.step()}else if(this.type==="map-value-ind"&&parent.type!=="flow-collection"){const prev=getPrevProps(parent);const start=getFirstKeyStartProps(prev);fixFlowSeqItems(fc);const sep=fc.end.splice(1,fc.end.length);sep.push(this.sourceToken);const map2={type:"block-map",offset:fc.offset,indent:fc.indent,items:[{start,key:fc,sep}]};this.onKeyLine=true;this.stack[this.stack.length-1]=map2}else{yield*this.lineEnd(fc)}}}flowScalar(type){if(this.onNewLine){let nl=this.source.indexOf("\n")+1;while(nl!==0){this.onNewLine(this.offset+nl);nl=this.source.indexOf("\n",nl)+1}}return{type,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(parent){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=true;const prev=getPrevProps(parent);const start=getFirstKeyStartProps(prev);start.push(this.sourceToken);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start}]}}case"map-value-ind":{this.onKeyLine=true;const prev=getPrevProps(parent);const start=getFirstKeyStartProps(prev);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(start,indent){if(this.type!=="comment")return false;if(this.indent<=indent)return false;return start.every(st=>st.type==="newline"||st.type==="space")}*documentEnd(docEnd){if(this.type!=="doc-mode"){if(docEnd.end)docEnd.end.push(this.sourceToken);else docEnd.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}*lineEnd(token){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop();yield*this.step();break;case"newline":this.onKeyLine=false;case"space":case"comment":default:if(token.end)token.end.push(this.sourceToken);else token.end=[this.sourceToken];if(this.type==="newline")yield*this.pop()}}};function parseOptions(options){const prettyErrors=options.prettyErrors!==false;const lineCounter=options.lineCounter||prettyErrors&&new LineCounter||null;return{lineCounter,prettyErrors}}function parseDocument(source,options={}){const{lineCounter,prettyErrors}=parseOptions(options);const parser=new Parser(lineCounter?.addNewLine);const composer=new Composer(options);let doc=null;for(const _doc of composer.compose(parser.parse(source),true,source.length)){if(!doc)doc=_doc;else if(doc.options.logLevel!=="silent"){doc.errors.push(new YAMLParseError(_doc.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}}if(prettyErrors&&lineCounter){doc.errors.forEach(prettifyError(source,lineCounter));doc.warnings.forEach(prettifyError(source,lineCounter))}return doc}function parse(src,reviver,options){let _reviver=void 0;if(typeof reviver==="function"){_reviver=reviver}else if(options===void 0&&reviver&&typeof reviver==="object"){options=reviver}const doc=parseDocument(src,options);if(!doc)return null;doc.warnings.forEach(warning=>warn(doc.options.logLevel,warning));if(doc.errors.length>0){if(doc.options.logLevel!=="silent")throw doc.errors[0];else doc.errors=[]}return doc.toJS(Object.assign({reviver:_reviver},options))}function stringify3(value,replacer,options){let _replacer=null;if(typeof replacer==="function"||Array.isArray(replacer)){_replacer=replacer}else if(options===void 0&&replacer){options=replacer}if(typeof options==="string")options=options.length;if(typeof options==="number"){const indent=Math.round(options);options=indent<1?void 0:indent>8?{indent:8}:{indent}}if(value===void 0){const{keepUndefined}=options??replacer??{};if(!keepUndefined)return void 0}return new Document(value,_replacer,options).toString(options)}globalThis.YAML={parse,stringify:stringify3};
}()