#!/usr/bin/env node import { createRequire } from 'node:module'; const require = createRequire(import.meta.url); // scripts/check.mjs import { existsSync, readdirSync, readFileSync, statSync } from "node:fs"; import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path"; import { fileURLToPath } from "node:url"; // node_modules/js-yaml/dist/js-yaml.mjs var NOT_RESOLVED = /* @__PURE__ */ Symbol("NOT_RESOLVED"); function defineScalarTag(tagName, options) { return { tagName, nodeKind: "scalar", implicit: options.implicit ?? false, matchByTagPrefix: options.matchByTagPrefix ?? false, implicitFirstChars: options.implicitFirstChars ?? null, resolve: options.resolve, identify: options.identify, represent: options.represent ?? ((data) => String(data)), representTagName: options.representTagName ?? (() => tagName) }; } function defineSequenceTag(tagName, options) { const carrierIsResult = options.finalize === void 0; return { tagName, nodeKind: "sequence", implicit: false, matchByTagPrefix: options.matchByTagPrefix ?? false, create: options.create, addItem: options.addItem, finalize: options.finalize ?? ((carrier) => carrier), carrierIsResult, identify: options.identify, represent: options.represent ?? ((data) => data), representTagName: options.representTagName ?? (() => tagName) }; } function defineMappingTag(tagName, options) { const carrierIsResult = options.finalize === void 0; return { tagName, nodeKind: "mapping", implicit: false, matchByTagPrefix: options.matchByTagPrefix ?? false, create: options.create, addPair: options.addPair, has: options.has, keys: options.keys, get: options.get, finalize: options.finalize ?? ((carrier) => carrier), carrierIsResult, identify: options.identify, represent: options.represent ?? ((data) => data), representTagName: options.representTagName ?? (() => tagName) }; } var strTag = defineScalarTag("tag:yaml.org,2002:str", { resolve: (source) => source, identify: (data) => typeof data === "string" }); var NULL_VALUES$1 = [ "", "~", "null", "Null", "NULL" ]; var nullCoreTag = defineScalarTag("tag:yaml.org,2002:null", { implicit: true, implicitFirstChars: [ "", "~", "n", "N" ], resolve: (source) => { if (NULL_VALUES$1.indexOf(source) !== -1) return null; return NOT_RESOLVED; }, identify: (object) => object === null, represent: () => "null" }); var nullJsonTag = defineScalarTag("tag:yaml.org,2002:null", { implicit: true, implicitFirstChars: ["n"], resolve: (source, isExplicit) => { if (source === "null" || isExplicit && source === "") return null; return NOT_RESOLVED; }, identify: (object) => object === null, represent: () => "null" }); var NULL_VALUES = [ "", "~", "null", "Null", "NULL" ]; var nullYaml11Tag = defineScalarTag("tag:yaml.org,2002:null", { implicit: true, implicitFirstChars: [ "", "~", "n", "N" ], resolve: (source) => { if (NULL_VALUES.indexOf(source) !== -1) return null; return NOT_RESOLVED; }, identify: (object) => object === null, represent: () => "null" }); var TRUE_VALUES$2 = [ "true", "True", "TRUE" ]; var FALSE_VALUES$2 = [ "false", "False", "FALSE" ]; var boolCoreTag = defineScalarTag("tag:yaml.org,2002:bool", { implicit: true, implicitFirstChars: [ "t", "T", "f", "F" ], resolve: (source) => { if (TRUE_VALUES$2.indexOf(source) !== -1) return true; if (FALSE_VALUES$2.indexOf(source) !== -1) return false; return NOT_RESOLVED; }, identify: (object) => Object.prototype.toString.call(object) === "[object Boolean]", represent: (object) => object ? "true" : "false" }); var TRUE_VALUES$1 = ["true"]; var FALSE_VALUES$1 = ["false"]; var boolJsonTag = defineScalarTag("tag:yaml.org,2002:bool", { implicit: true, implicitFirstChars: ["t", "f"], resolve: (source) => { if (TRUE_VALUES$1.indexOf(source) !== -1) return true; if (FALSE_VALUES$1.indexOf(source) !== -1) return false; return NOT_RESOLVED; }, identify: (object) => Object.prototype.toString.call(object) === "[object Boolean]", represent: (object) => object ? "true" : "false" }); var TRUE_VALUES = [ "true", "True", "TRUE", "y", "Y", "yes", "Yes", "YES", "on", "On", "ON" ]; var FALSE_VALUES = [ "false", "False", "FALSE", "n", "N", "no", "No", "NO", "off", "Off", "OFF" ]; var boolYaml11Tag = defineScalarTag("tag:yaml.org,2002:bool", { implicit: true, implicitFirstChars: [ "y", "Y", "n", "N", "t", "T", "f", "F", "o", "O" ], resolve: (source) => { if (TRUE_VALUES.indexOf(source) !== -1) return true; if (FALSE_VALUES.indexOf(source) !== -1) return false; return NOT_RESOLVED; }, identify: (object) => Object.prototype.toString.call(object) === "[object Boolean]", represent: (object) => object ? "true" : "false" }); var YAML_INTEGER_IMPLICIT_PATTERN$1 = /* @__PURE__ */ new RegExp("^(?:0o[0-7]+|0x[0-9a-fA-F]+|[-+]?[0-9]+)$"); var YAML_INTEGER_EXPLICIT_PATTERN$1 = /* @__PURE__ */ new RegExp("^(?:[-+]?0b[0-1]+|[-+]?0o[0-7]+|[-+]?0x[0-9a-fA-F]+|[-+]?[0-9]+)$"); function parseYamlInteger$2(source) { let value = source; let sign = 1; if (value[0] === "-" || value[0] === "+") { if (value[0] === "-") sign = -1; value = value.slice(1); } if (value.startsWith("0b")) return sign * parseInt(value.slice(2), 2); if (value.startsWith("0o")) return sign * parseInt(value.slice(2), 8); if (value.startsWith("0x")) return sign * parseInt(value.slice(2), 16); return sign * parseInt(value, 10); } function resolveYamlInteger$2(source, isExplicit) { if (isExplicit) { if (!YAML_INTEGER_EXPLICIT_PATTERN$1.test(source)) return NOT_RESOLVED; } else if (!YAML_INTEGER_IMPLICIT_PATTERN$1.test(source)) return NOT_RESOLVED; const result = parseYamlInteger$2(source); return Number.isFinite(result) ? result : NOT_RESOLVED; } var intCoreTag = defineScalarTag("tag:yaml.org,2002:int", { implicit: true, implicitFirstChars: [ "-", "+", ..."0123456789" ], resolve: resolveYamlInteger$2, identify: (object) => Number.isInteger(object) && !Object.is(object, -0) && object.toString(10).indexOf("e") < 0, represent: (object) => object.toString(10) }); var YAML_INTEGER_IMPLICIT_PATTERN = /* @__PURE__ */ new RegExp("^-?(?:0|[1-9][0-9]*)$"); var YAML_INTEGER_EXPLICIT_PATTERN = /* @__PURE__ */ new RegExp("^(?:[-+]?0b[0-1]+|[-+]?0o[0-7]+|[-+]?0x[0-9a-fA-F]+|[-+]?[0-9]+)$"); function parseYamlInteger$1(source) { let value = source; let sign = 1; if (value[0] === "-" || value[0] === "+") { if (value[0] === "-") sign = -1; value = value.slice(1); } if (value.startsWith("0b")) return sign * parseInt(value.slice(2), 2); if (value.startsWith("0o")) return sign * parseInt(value.slice(2), 8); if (value.startsWith("0x")) return sign * parseInt(value.slice(2), 16); return sign * parseInt(value, 10); } function resolveYamlInteger$1(source, isExplicit) { if (isExplicit) { if (!YAML_INTEGER_EXPLICIT_PATTERN.test(source)) return NOT_RESOLVED; } else if (!YAML_INTEGER_IMPLICIT_PATTERN.test(source)) return NOT_RESOLVED; const result = parseYamlInteger$1(source); return Number.isFinite(result) ? result : NOT_RESOLVED; } var intJsonTag = defineScalarTag("tag:yaml.org,2002:int", { implicit: true, implicitFirstChars: ["-", ..."0123456789"], resolve: resolveYamlInteger$1, identify: (object) => Number.isInteger(object) && !Object.is(object, -0) && object.toString(10).indexOf("e") < 0, represent: (object) => object.toString(10) }); var YAML_INTEGER_PATTERN = /* @__PURE__ */ new RegExp("^(?:[-+]?0b[0-1_]+|[-+]?0[0-7_]+|[-+]?0x[0-9a-fA-F_]+|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+|[-+]?(?:0|[1-9][0-9_]*))$"); function parseYamlInteger(source) { let value = source.replace(/_/g, ""); let sign = 1; if (value[0] === "-" || value[0] === "+") { if (value[0] === "-") sign = -1; value = value.slice(1); } if (value.startsWith("0b")) return sign * parseInt(value.slice(2), 2); if (value.startsWith("0x")) return sign * parseInt(value.slice(2), 16); if (value.includes(":")) { let result = 0; for (const part of value.split(":")) result = result * 60 + Number(part); return sign * result; } if (value !== "0" && value[0] === "0") return sign * parseInt(value, 8); return sign * parseInt(value, 10); } function resolveYamlInteger(source) { if (!YAML_INTEGER_PATTERN.test(source)) return NOT_RESOLVED; const result = parseYamlInteger(source); return Number.isFinite(result) ? result : NOT_RESOLVED; } var intYaml11Tag = defineScalarTag("tag:yaml.org,2002:int", { implicit: true, implicitFirstChars: [ "-", "+", ..."0123456789" ], resolve: resolveYamlInteger, identify: (object) => Number.isInteger(object) && !Object.is(object, -0) && object.toString(10).indexOf("e") < 0, represent: (object) => object.toString(10) }); var YAML_FLOAT_PATTERN$1 = /* @__PURE__ */ new RegExp("^(?:[-+]?[0-9]+(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?|[-+]?\\.[0-9]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"); var YAML_FLOAT_SPECIAL_PATTERN$1 = /* @__PURE__ */ new RegExp("^(?:[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"); function resolveYamlFloat$2(source) { if (!YAML_FLOAT_PATTERN$1.test(source)) return NOT_RESOLVED; let value = source.toLowerCase(); const sign = value[0] === "-" ? -1 : 1; if ("+-".includes(value[0])) value = value.slice(1); if (value === ".inf") return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; if (value === ".nan") return NaN; const result = sign * parseFloat(value); if (Number.isFinite(result) || YAML_FLOAT_SPECIAL_PATTERN$1.test(source)) return result; return NOT_RESOLVED; } function representYamlFloat$2(object) { if (isNaN(object)) return ".nan"; if (object === Number.POSITIVE_INFINITY) return ".inf"; if (object === Number.NEGATIVE_INFINITY) return "-.inf"; if (Object.is(object, -0)) return "-0.0"; const result = object.toString(10); return /^[-+]?[0-9]+e/.test(result) ? result.replace("e", ".e") : result; } var floatCoreTag = defineScalarTag("tag:yaml.org,2002:float", { implicit: true, implicitFirstChars: [ "-", "+", ".", ..."0123456789" ], resolve: resolveYamlFloat$2, identify: (object) => typeof object === "number" && (!Number.isInteger(object) || Object.is(object, -0) || object.toString(10).indexOf("e") >= 0), represent: representYamlFloat$2 }); var YAML_FLOAT_IMPLICIT_PATTERN = /* @__PURE__ */ new RegExp("^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$"); var YAML_FLOAT_EXPLICIT_PATTERN = /* @__PURE__ */ new RegExp("^(?:[-+]?[0-9]+(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?|[-+]?\\.[0-9]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"); function resolveYamlFloat$1(source, isExplicit) { if (isExplicit) { if (!YAML_FLOAT_EXPLICIT_PATTERN.test(source)) return NOT_RESOLVED; let value = source.toLowerCase(); const sign = value[0] === "-" ? -1 : 1; if ("+-".includes(value[0])) value = value.slice(1); if (value === ".inf") return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; if (value === ".nan") return NaN; const result2 = sign * parseFloat(value); return Number.isFinite(result2) ? result2 : NOT_RESOLVED; } if (!YAML_FLOAT_IMPLICIT_PATTERN.test(source)) return NOT_RESOLVED; const result = Number(source); if (Number.isFinite(result)) return result; return NOT_RESOLVED; } function representYamlFloat$1(object) { if (isNaN(object)) return ".nan"; if (object === Number.POSITIVE_INFINITY) return ".inf"; if (object === Number.NEGATIVE_INFINITY) return "-.inf"; if (Object.is(object, -0)) return "-0.0"; const result = object.toString(10); return /^[-+]?[0-9]+e/.test(result) ? result.replace("e", ".e") : result; } var floatJsonTag = defineScalarTag("tag:yaml.org,2002:float", { implicit: true, implicitFirstChars: ["-", ..."0123456789"], resolve: resolveYamlFloat$1, identify: (object) => typeof object === "number" && (!Number.isInteger(object) || Object.is(object, -0) || object.toString(10).indexOf("e") >= 0), represent: representYamlFloat$1 }); var YAML_FLOAT_PATTERN = /* @__PURE__ */ new RegExp("^(?:[-+]?(?:(?:[0-9][0-9_]*)?\\.[0-9_]*)(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"); var YAML_FLOAT_SPECIAL_PATTERN = /* @__PURE__ */ new RegExp("^(?:[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"); function resolveYamlFloat(source) { if (!YAML_FLOAT_PATTERN.test(source)) return NOT_RESOLVED; let value = source.toLowerCase().replace(/_/g, ""); const sign = value[0] === "-" ? -1 : 1; if ("+-".includes(value[0])) value = value.slice(1); if (value === ".inf") return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; if (value === ".nan") return NaN; let result = 0; if (value.includes(":")) { for (const part of value.split(":")) result = result * 60 + Number(part); result *= sign; } else result = sign * parseFloat(value); if (Number.isFinite(result) || YAML_FLOAT_SPECIAL_PATTERN.test(source)) return result; return NOT_RESOLVED; } function representYamlFloat(object) { if (isNaN(object)) return ".nan"; if (object === Number.POSITIVE_INFINITY) return ".inf"; if (object === Number.NEGATIVE_INFINITY) return "-.inf"; if (Object.is(object, -0)) return "-0.0"; const result = object.toString(10); return /^[-+]?[0-9]+e/.test(result) ? result.replace("e", ".e") : result; } var floatYaml11Tag = defineScalarTag("tag:yaml.org,2002:float", { implicit: true, implicitFirstChars: [ "-", "+", ".", ..."0123456789" ], resolve: resolveYamlFloat, identify: (object) => typeof object === "number" && (!Number.isInteger(object) || Object.is(object, -0) || object.toString(10).indexOf("e") >= 0), represent: representYamlFloat }); var mergeTag = defineScalarTag("tag:yaml.org,2002:merge", { implicit: true, implicitFirstChars: ["<"], resolve: (source, isExplicit) => { if (source === "<<" || isExplicit && source === "") return "<<"; return NOT_RESOLVED; }, identify: () => false }); var BASE64_PATTERN = /^[A-Za-z0-9+/]*={0,2}$/; function resolveYamlBinary(source) { const input = source.replace(/\s/g, ""); if (input.length % 4 !== 0 || !BASE64_PATTERN.test(input)) return NOT_RESOLVED; const binary = atob(input); const result = new Uint8Array(binary.length); for (let index = 0; index < binary.length; index++) result[index] = binary.charCodeAt(index); return result; } function representYamlBinary(object) { let binary = ""; for (let index = 0; index < object.length; index++) binary += String.fromCharCode(object[index]); return btoa(binary); } var binaryTag = defineScalarTag("tag:yaml.org,2002:binary", { resolve: resolveYamlBinary, identify: (object) => Object.prototype.toString.call(object) === "[object Uint8Array]", represent: representYamlBinary }); var YAML_DATE_REGEXP = /* @__PURE__ */ new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"); var YAML_TIMESTAMP_REGEXP = /* @__PURE__ */ new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$"); function makeUtcDate(year, month, day, hour = 0, minute = 0, second = 0, fraction = 0) { const date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); date.setUTCFullYear(year, month, day); return date; } function resolveYamlTimestamp(source) { let match = YAML_DATE_REGEXP.exec(source); if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(source); if (match === null) return NOT_RESOLVED; const year = +match[1]; const month = +match[2] - 1; const day = +match[3]; if (!match[4]) { const date2 = makeUtcDate(year, month, day); if (date2.getUTCFullYear() !== year || date2.getUTCMonth() !== month || date2.getUTCDate() !== day) return NOT_RESOLVED; return date2; } const hour = +match[4]; const minute = +match[5]; const second = +match[6]; let fraction = 0; if (hour > 23 || minute > 59 || second > 59) return NOT_RESOLVED; if (match[7]) { let value = match[7].slice(0, 3); while (value.length < 3) value += "0"; fraction = +value; } const date = makeUtcDate(year, month, day, hour, minute, second, fraction); if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month || date.getUTCDate() !== day) return NOT_RESOLVED; if (match[9]) { const offsetHour = +match[10]; const offsetMinute = +(match[11] || 0); if (offsetHour > 23 || offsetMinute > 59) return NOT_RESOLVED; const offset = (offsetHour * 60 + offsetMinute) * 6e4; date.setTime(date.getTime() - (match[9] === "-" ? -offset : offset)); } return date; } var timestampTag = defineScalarTag("tag:yaml.org,2002:timestamp", { implicit: true, implicitFirstChars: [..."0123456789"], resolve: resolveYamlTimestamp, identify: (object) => object instanceof Date, represent: (object) => object.toISOString() }); var seqTag = defineSequenceTag("tag:yaml.org,2002:seq", { create: () => [], addItem: (container, item) => { container.push(item); }, identify: Array.isArray }); function isPlainObject(data) { if (data === null || typeof data !== "object" || Array.isArray(data)) return false; const prototype = Object.getPrototypeOf(data); return prototype === null || prototype === Object.prototype; } function pick(object, keys) { const result = {}; for (const key of keys) if (object[key] !== void 0) result[key] = object[key]; return result; } var omapTag = defineSequenceTag("tag:yaml.org,2002:omap", { create: () => ({ list: [], seen: /* @__PURE__ */ new Set() }), addItem: (carrier, item) => { let key; if (item instanceof Map) { if (item.size !== 1) return "cannot resolve an ordered map item"; key = item.keys().next().value; } else if (isPlainObject(item)) { const itemKeys = Object.keys(item); if (itemKeys.length !== 1) return "cannot resolve an ordered map item"; key = itemKeys[0]; } else return "cannot resolve an ordered map item"; if (carrier.seen.has(key)) return "duplicate key in ordered map"; carrier.seen.add(key); carrier.list.push(item); return ""; }, finalize: (carrier) => carrier.list, identify: () => false }); var pairsTag = defineSequenceTag("tag:yaml.org,2002:pairs", { create: () => [], addItem: (container, item) => { if (item instanceof Map) { if (item.size !== 1) return "cannot resolve a pairs item"; container.push(item.entries().next().value); return ""; } if (Object.prototype.toString.call(item) !== "[object Object]") return "cannot resolve a pairs item"; const object = item; const keys = Object.keys(object); if (keys.length !== 1) return "cannot resolve a pairs item"; container.push([keys[0], object[keys[0]]]); return ""; }, identify: () => false }); var mapTag = defineMappingTag("tag:yaml.org,2002:map", { create: () => ({}), identify: isPlainObject, represent: (o) => { const map = /* @__PURE__ */ new Map(); for (const key of Object.keys(o)) map.set(key, o[key]); return map; }, addPair: (container, key, value) => { if (key !== null && typeof key === "object") return "object-based map does not support complex keys"; const normalizedKey = String(key); if (normalizedKey === "__proto__") Object.defineProperty(container, normalizedKey, { value, enumerable: true, configurable: true, writable: true }); else container[normalizedKey] = value; return ""; }, has: (container, key) => { if (key !== null && typeof key === "object") return false; return Object.prototype.hasOwnProperty.call(container, String(key)); }, keys: (container) => Object.keys(container), get: (container, key) => { const normalizedKey = String(key); if (!Object.prototype.hasOwnProperty.call(container, normalizedKey)) return null; return container[normalizedKey]; } }); var setTag = defineMappingTag("tag:yaml.org,2002:set", { create: () => /* @__PURE__ */ new Set(), identify: (data) => data instanceof Set, represent: (data) => { const map = /* @__PURE__ */ new Map(); for (const key of data) map.set(key, null); return map; }, addPair: (container, key, value) => { if (value !== null) return "cannot resolve a set item"; container.add(key); return ""; }, has: (container, key) => container.has(key), keys: (container) => container.keys(), get: () => null }); function createTagDefinitionMap() { return { scalar: /* @__PURE__ */ Object.create(null), sequence: /* @__PURE__ */ Object.create(null), mapping: /* @__PURE__ */ Object.create(null) }; } function createTagDefinitionListMap() { return { scalar: [], sequence: [], mapping: [] }; } function compileTags(tags) { const result = []; for (const tag of tags) { let index = result.length; for (let previousIndex = 0; previousIndex < result.length; previousIndex++) { const previous = result[previousIndex]; if (previous.nodeKind === tag.nodeKind && previous.tagName === tag.tagName && previous.matchByTagPrefix === tag.matchByTagPrefix) { index = previousIndex; break; } } result[index] = tag; } return result; } var Schema = class Schema2 { tags; /** @internal */ implicitScalarTags; /** * Dispatch implicit scalar resolvers by `source.charAt(0)`. Each bucket holds * the resolvers that may match that key, in schema order; a key absent from * the map uses * {@link Schema.implicitScalarAnyFirstChar} * (resolvers that declared no first-char constraint, so they apply to any * first character). */ implicitScalarByFirstChar; implicitScalarAnyFirstChar; /** * The default scalar tag (`!!str`), resolved once so the composer's fallback * for unresolved plain scalars avoids a keyed lookup per scalar. * * @internal */ defaultScalarTag; /** * The default container tags (`!!seq` / `!!map`), used by the dumper: when a * value is identified by its default tag, the tag is implicit and not * printed. Undefined if the schema does not define them (then such values * can't be dumped). * * @internal */ defaultSequenceTag; /** @internal */ defaultMappingTag; exact; prefix; constructor(tags) { const compiledTags = compileTags(tags); const implicitScalarTags = []; const exact = createTagDefinitionMap(); const prefix = createTagDefinitionListMap(); for (const tag of compiledTags) { if (tag.nodeKind === "scalar" && tag.implicit) { if (tag.matchByTagPrefix) throw new Error("Implicit scalar tags cannot match by tag prefix"); implicitScalarTags.push(tag); } switch (tag.nodeKind) { case "scalar": if (tag.matchByTagPrefix) prefix.scalar.push(tag); else exact.scalar[tag.tagName] = tag; break; case "sequence": if (tag.matchByTagPrefix) prefix.sequence.push(tag); else exact.sequence[tag.tagName] = tag; break; case "mapping": if (tag.matchByTagPrefix) prefix.mapping.push(tag); else exact.mapping[tag.tagName] = tag; break; } } const implicitScalarAnyFirstChar = implicitScalarTags.filter((tag) => tag.implicitFirstChars === null); const keys = /* @__PURE__ */ new Set(); for (const tag of implicitScalarTags) if (tag.implicitFirstChars !== null) for (const key of tag.implicitFirstChars) keys.add(key); const implicitScalarByFirstChar = /* @__PURE__ */ new Map(); for (const key of keys) implicitScalarByFirstChar.set(key, implicitScalarTags.filter((tag) => tag.implicitFirstChars === null || tag.implicitFirstChars.indexOf(key) !== -1)); const defaultScalarTag = exact.scalar["tag:yaml.org,2002:str"]; if (!defaultScalarTag) throw new Error("schema does not define the default scalar tag (tag:yaml.org,2002:str)"); this.tags = compiledTags; this.implicitScalarTags = implicitScalarTags; this.implicitScalarByFirstChar = implicitScalarByFirstChar; this.implicitScalarAnyFirstChar = implicitScalarAnyFirstChar; this.defaultScalarTag = defaultScalarTag; this.defaultSequenceTag = exact.sequence["tag:yaml.org,2002:seq"]; this.defaultMappingTag = exact.mapping["tag:yaml.org,2002:map"]; this.exact = exact; this.prefix = prefix; } /** @internal */ lookupScalarTag(tagName) { const exactTag = this.exact.scalar[tagName]; if (exactTag) return exactTag; for (const tag of this.prefix.scalar) if (tagName.startsWith(tag.tagName)) return tag; } /** @internal */ lookupSequenceTag(tagName) { const exactTag = this.exact.sequence[tagName]; if (exactTag) return exactTag; for (const tag of this.prefix.sequence) if (tagName.startsWith(tag.tagName)) return tag; } /** @internal */ lookupMappingTag(tagName) { const exactTag = this.exact.mapping[tagName]; if (exactTag) return exactTag; for (const tag of this.prefix.mapping) if (tagName.startsWith(tag.tagName)) return tag; } /** @internal */ resolveImplicitScalarTag(source) { const candidates = this.implicitScalarByFirstChar.get(source.charAt(0)) ?? this.implicitScalarAnyFirstChar; for (const tag2 of candidates) { const value = tag2.resolve(source, false, tag2.tagName); if (value !== NOT_RESOLVED) return { value, tag: tag2 }; } const tag = this.defaultScalarTag; return { value: tag.resolve(source, false, tag.tagName), tag }; } /** * Creates a new schema with the specified tags added. If a tag already * exists, it is replaced by the specified tag. * * @example * * ```javascript * import { CORE_SCHEMA, mergeTag, realMapTag } from 'js-yaml' * * const schema = CORE_SCHEMA.withTags(mergeTag, realMapTag) * ``` */ withTags(...tags) { let flatTags = []; for (const tag of tags) flatTags = flatTags.concat(tag); return new Schema2([...this.tags, ...flatTags]); } }; var FAILSAFE_SCHEMA = new Schema([ strTag, seqTag, mapTag ]); var JSON_SCHEMA = new Schema([ ...FAILSAFE_SCHEMA.tags, nullJsonTag, boolJsonTag, intJsonTag, floatJsonTag ]); var CORE_SCHEMA = new Schema([ ...FAILSAFE_SCHEMA.tags, nullCoreTag, boolCoreTag, intCoreTag, floatCoreTag ]); var YAML11_SCHEMA = new Schema([ ...FAILSAFE_SCHEMA.tags, nullYaml11Tag, boolYaml11Tag, intYaml11Tag, floatYaml11Tag, timestampTag, mergeTag, binaryTag, omapTag, pairsTag, setTag ]); var DUMP_SCHEMA = YAML11_SCHEMA.withTags({ ...intYaml11Tag, resolve: (source, isExplicit, tagName) => { const result = intYaml11Tag.resolve(source, isExplicit, tagName); return result === NOT_RESOLVED ? intCoreTag.resolve(source, isExplicit, tagName) : result; } }, { ...floatYaml11Tag, resolve: (source, isExplicit, tagName) => { const result = floatYaml11Tag.resolve(source, isExplicit, tagName); return result === NOT_RESOLVED ? floatCoreTag.resolve(source, isExplicit, tagName) : result; } }); var realMapTag = defineMappingTag("tag:yaml.org,2002:map", { create: () => /* @__PURE__ */ new Map(), addPair: (container, key, value) => { container.set(key, value); return ""; }, has: (container, key) => container.has(key), keys: (container) => container.keys(), get: (container, key) => container.get(key), identify: (data) => data instanceof Map || isPlainObject(data), represent: (data) => { if (data instanceof Map) return data; const map = /* @__PURE__ */ new Map(); const obj = data; for (const key of Object.keys(obj)) map.set(key, obj[key]); return map; } }); function normalizeKey(key) { if (Array.isArray(key)) { const array = Array.prototype.slice.call(key); for (let index = 0; index < array.length; index++) { if (Array.isArray(array[index])) return null; if (typeof array[index] === "object" && Object.prototype.toString.call(array[index]) === "[object Object]") array[index] = "[object Object]"; } return String(array); } if (typeof key === "object" && Object.prototype.toString.call(key) === "[object Object]") return "[object Object]"; return String(key); } var legacyMapTag = defineMappingTag("tag:yaml.org,2002:map", { create: () => ({}), identify: isPlainObject, represent: (o) => { const map = /* @__PURE__ */ new Map(); for (const key of Object.keys(o)) map.set(key, o[key]); return map; }, addPair: (container, key, value) => { const normalizedKey = normalizeKey(key); if (normalizedKey === null) return "nested arrays are not supported inside keys"; if (normalizedKey === "__proto__") Object.defineProperty(container, normalizedKey, { value, enumerable: true, configurable: true, writable: true }); else container[normalizedKey] = value; return ""; }, has: (container, key) => { const normalizedKey = normalizeKey(key); return normalizedKey !== null && Object.prototype.hasOwnProperty.call(container, normalizedKey); }, keys: (container) => Object.keys(container), get: (container, key) => { const normalizedKey = String(key); if (!Object.prototype.hasOwnProperty.call(container, normalizedKey)) return null; return container[normalizedKey]; } }); var DEFAULT_SNIPPET_OPTIONS = { maxLength: 79, indent: 1, linesBefore: 3, linesAfter: 2 }; function getLine(buffer, lineStart, lineEnd, position, maxLineLength) { let head = ""; let tail = ""; const maxHalfLength = Math.floor(maxLineLength / 2) - 1; if (position - lineStart > maxHalfLength) { head = " ... "; lineStart = position - maxHalfLength + head.length; } if (lineEnd - position > maxHalfLength) { tail = " ..."; lineEnd = position + maxHalfLength - tail.length; } return { str: head + buffer.slice(lineStart, lineEnd).replace(/\t/g, "\u2192") + tail, pos: position - lineStart + head.length }; } function padStart(string, max) { return " ".repeat(Math.max(max - string.length, 0)) + string; } function makeSnippet(mark, options) { if (!mark.buffer) return null; const opts = { ...DEFAULT_SNIPPET_OPTIONS, ...options }; const re = /\r?\n|\r|\0/g; const lineStarts = [0]; const lineEnds = []; let match; let foundLineNo = -1; while (match = re.exec(mark.buffer)) { lineEnds.push(match.index); lineStarts.push(match.index + match[0].length); if (mark.position <= match.index && foundLineNo < 0) foundLineNo = lineStarts.length - 2; } if (foundLineNo < 0) foundLineNo = lineStarts.length - 1; let result = ""; const lineNoLength = Math.min(mark.line + opts.linesAfter, lineEnds.length).toString().length; const maxLineLength = opts.maxLength - (opts.indent + lineNoLength + 3); for (let i = 1; i <= opts.linesBefore; i++) { if (foundLineNo - i < 0) break; const line2 = getLine(mark.buffer, lineStarts[foundLineNo - i], lineEnds[foundLineNo - i], mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]), maxLineLength); result = `${" ".repeat(opts.indent)}${padStart((mark.line - i + 1).toString(), lineNoLength)} | ${line2.str} ${result}`; } const line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength); result += `${" ".repeat(opts.indent)}${padStart((mark.line + 1).toString(), lineNoLength)} | ${line.str} `; result += `${"-".repeat(opts.indent + lineNoLength + 3 + line.pos)}^ `; for (let i = 1; i <= opts.linesAfter; i++) { if (foundLineNo + i >= lineEnds.length) break; const line2 = getLine(mark.buffer, lineStarts[foundLineNo + i], lineEnds[foundLineNo + i], mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]), maxLineLength); result += `${" ".repeat(opts.indent)}${padStart((mark.line + i + 1).toString(), lineNoLength)} | ${line2.str} `; } return result.replace(/\n$/, ""); } function formatError(exception, compact) { let where = ""; if (!exception.mark) return exception.reason; if (exception.mark.name) where += `in "${exception.mark.name}" `; where += `(${exception.mark.line + 1}:${exception.mark.column + 1})`; if (!compact && exception.mark.snippet) where += ` ${exception.mark.snippet}`; return `${exception.reason} ${where}`; } var YAMLException = class YAMLException2 extends Error { reason; mark; /** * Optional `mark` contains source snippet data. Usually, use * {@link YAMLException.throwAt} instead of passing it directly. */ constructor(reason, mark) { super(); this.name = "YAMLException"; this.reason = reason; this.mark = mark; this.message = formatError(this, false); if (Error.captureStackTrace) Error.captureStackTrace(this, this.constructor); } /** * Returns the formatted error, omitting the source snippet in compact mode. */ toString(compact) { return `${this.name}: ${formatError(this, compact)}`; } /** * Builds a YAMLException with a source snippet and throws it. `source` is * the raw input text; `position` is an offset into it. */ static throwAt(source, position, message, filename = "") { let line = 0; let lineStart = 0; for (let index = 0; index < position; index++) { const ch = source.charCodeAt(index); if (ch === 10) { line++; lineStart = index + 1; } else if (ch === 13) { line++; if (source.charCodeAt(index + 1) === 10) index++; lineStart = index + 1; } } const mark = { name: filename, buffer: source, position, line, column: position - lineStart }; mark.snippet = makeSnippet(mark); throw new YAMLException2(message, mark); } }; var EVENT_ID = { DOCUMENT: 1, SEQUENCE: 2, MAPPING: 3, SCALAR: 4, ALIAS: 5, POP: 6 }; var SCALAR_STYLE = { PLAIN: 1, SINGLE_QUOTED: 2, DOUBLE_QUOTED: 3, LITERAL_BLOCK: 4, FOLDED_BLOCK: 5 }; var COLLECTION_STYLE = { BLOCK: 1, FLOW: 2 }; var CHOMPING_MODE = { CLIP: 1, STRIP: 2, KEEP: 3 }; var NO_RANGE$3 = -1; function simpleEscapeSequence(c) { switch (c) { case 48: return "\0"; case 97: return "\x07"; case 98: return "\b"; case 116: return " "; case 9: return " "; case 110: return "\n"; case 118: return "\v"; case 102: return "\f"; case 114: return "\r"; case 101: return "\x1B"; case 32: return " "; case 34: return '"'; case 47: return "/"; case 92: return "\\"; case 78: return "\x85"; case 95: return "\xA0"; case 76: return "\u2028"; case 80: return "\u2029"; default: return ""; } } var simpleEscapeCheck = new Array(256); var simpleEscapeMap = new Array(256); for (let i = 0; i < 256; i++) { simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; simpleEscapeMap[i] = simpleEscapeSequence(i); } function charFromCodepoint(c) { if (c <= 65535) return String.fromCharCode(c); return String.fromCharCode((c - 65536 >> 10) + 55296, (c - 65536 & 1023) + 56320); } function fromHexCode$1(c) { if (c >= 48 && c <= 57) return c - 48; return (c | 32) - 97 + 10; } function escapedHexLen$1(c) { if (c === 120) return 2; if (c === 117) return 4; return 8; } function skipFoldedBreaks(input, position, end) { let breaks = 0; while (position < end) { const ch = input.charCodeAt(position); if (ch === 10) { breaks++; position++; } else if (ch === 13) { breaks++; position++; if (input.charCodeAt(position) === 10) position++; } else if (ch === 32 || ch === 9) position++; else break; } return { position, breaks }; } function foldedBreaks(count) { if (count === 1) return " "; return "\n".repeat(count - 1); } function getPlainValue(input, start, end) { let result = ""; let position = start; let captureStart = start; let captureEnd = start; while (position < end) { const ch = input.charCodeAt(position); if (ch === 10 || ch === 13) { result += input.slice(captureStart, captureEnd); const fold = skipFoldedBreaks(input, position, end); result += foldedBreaks(fold.breaks); position = captureStart = captureEnd = fold.position; } else { position++; if (ch !== 32 && ch !== 9) captureEnd = position; } } return result + input.slice(captureStart, captureEnd); } function getSingleQuotedValue(input, start, end) { let result = ""; let position = start; let captureStart = start; let captureEnd = start; while (position < end) { const ch = input.charCodeAt(position); if (ch === 39) { result += input.slice(captureStart, position) + "'"; position += 2; captureStart = captureEnd = position; } else if (ch === 10 || ch === 13) { result += input.slice(captureStart, captureEnd); const fold = skipFoldedBreaks(input, position, end); result += foldedBreaks(fold.breaks); position = captureStart = captureEnd = fold.position; } else { position++; if (ch !== 32 && ch !== 9) captureEnd = position; } } return result + input.slice(captureStart, end); } function getDoubleQuotedValue(input, start, end) { let result = ""; let position = start; let captureStart = start; let captureEnd = start; while (position < end) { const ch = input.charCodeAt(position); if (ch === 92) { result += input.slice(captureStart, position); position++; const escaped = input.charCodeAt(position); if (escaped === 10 || escaped === 13) position = skipFoldedBreaks(input, position, end).position; else if (escaped < 256 && simpleEscapeCheck[escaped]) { result += simpleEscapeMap[escaped]; position++; } else { let hexLength = escapedHexLen$1(escaped); let hexResult = 0; for (; hexLength > 0; hexLength--) { position++; const digit = fromHexCode$1(input.charCodeAt(position)); hexResult = (hexResult << 4) + digit; } result += charFromCodepoint(hexResult); position++; } captureStart = captureEnd = position; } else if (ch === 10 || ch === 13) { result += input.slice(captureStart, captureEnd); const fold = skipFoldedBreaks(input, position, end); result += foldedBreaks(fold.breaks); position = captureStart = captureEnd = fold.position; } else { position++; if (ch !== 32 && ch !== 9) captureEnd = position; } } return result + input.slice(captureStart, end); } function getBlockValue(input, start, end, indent, chomping, folded) { const textIndent = indent < 0 ? 0 : indent; const region = input.slice(start, end).replace(/\r\n?/g, "\n"); const lines = region === "" ? [] : (region.endsWith("\n") ? region.slice(0, -1) : region).split("\n"); let result = ""; let didReadContent = false; let emptyLines = 0; let atMoreIndented = false; for (const line of lines) { let column = 0; while (column < textIndent && line.charCodeAt(column) === 32) column++; if (indent < 0 || column >= line.length) { emptyLines++; continue; } const content = line.slice(textIndent); const first = content.charCodeAt(0); if (folded) if (first === 32 || first === 9) { atMoreIndented = true; result += "\n".repeat(didReadContent ? 1 + emptyLines : emptyLines); } else if (atMoreIndented) { atMoreIndented = false; result += "\n".repeat(emptyLines + 1); } else if (emptyLines === 0) { if (didReadContent) result += " "; } else result += "\n".repeat(emptyLines); else result += "\n".repeat(didReadContent ? 1 + emptyLines : emptyLines); result += content; didReadContent = true; emptyLines = 0; } if (chomping === CHOMPING_MODE.KEEP) result += "\n".repeat(didReadContent ? 1 + emptyLines : emptyLines); else if (chomping !== CHOMPING_MODE.STRIP) { if (didReadContent) result += "\n"; } return result; } function getScalarValue(input, scalar) { if (scalar.valueStart === NO_RANGE$3) return ""; const { valueStart, valueEnd } = scalar; if (scalar.fast) return input.slice(valueStart, valueEnd); switch (scalar.style) { case SCALAR_STYLE.SINGLE_QUOTED: return getSingleQuotedValue(input, valueStart, valueEnd); case SCALAR_STYLE.DOUBLE_QUOTED: return getDoubleQuotedValue(input, valueStart, valueEnd); case SCALAR_STYLE.LITERAL_BLOCK: return getBlockValue(input, valueStart, valueEnd, scalar.indent, scalar.chomping, false); case SCALAR_STYLE.FOLDED_BLOCK: return getBlockValue(input, valueStart, valueEnd, scalar.indent, scalar.chomping, true); default: return getPlainValue(input, valueStart, valueEnd); } } var DEFAULT_TAG_HANDLERS = Object.assign(/* @__PURE__ */ Object.create(null), { "!": "!", "!!": "tag:yaml.org,2002:" }); function tagNameFull(rawTag, tagHandlers) { if (rawTag.startsWith("!<") && rawTag.endsWith(">")) return decodeURIComponent(rawTag.slice(2, -1)); const handleEnd = rawTag.indexOf("!", 1); const handle = handleEnd === -1 ? "!" : rawTag.slice(0, handleEnd + 1); const prefix = tagHandlers?.[handle] ?? DEFAULT_TAG_HANDLERS[handle] ?? handle; return decodeURIComponent(prefix) + decodeURIComponent(rawTag.slice(handle.length)); } var NO_RANGE$2 = -1; var MERGE_TAG_NAME = "tag:yaml.org,2002:merge"; var DEFAULT_CONSTRUCTOR_OPTIONS = { filename: "", schema: CORE_SCHEMA, json: false, maxTotalMergeKeys: 1e4, maxAliases: -1 }; function eventPosition$1(event) { if ("tagStart" in event && event.tagStart !== NO_RANGE$2) return event.tagStart; if ("anchorStart" in event && event.anchorStart !== NO_RANGE$2) return event.anchorStart; if ("valueStart" in event && event.valueStart !== NO_RANGE$2) return event.valueStart; if ("start" in event) return event.start; return 0; } function throwError$1(state, message) { YAMLException.throwAt(state.source, state.position, message, state.filename); } function finalizeCollection(state, position, tag, carrier) { try { return tag.finalize(carrier); } catch (error) { if (error instanceof YAMLException) throw error; YAMLException.throwAt(state.source, position, error instanceof Error ? error.message : String(error), state.filename); } } function constructScalar(state, event) { const source = getScalarValue(state.source, event); const rawTag = event.tagStart === NO_RANGE$2 ? "" : state.source.slice(event.tagStart, event.tagEnd); const strTag2 = state.schema.defaultScalarTag; if (rawTag !== "") { if (rawTag === "!") return { value: source, tag: strTag2 }; const tagName = tagNameFull(rawTag, state.tagHandlers); const scalarTag = state.schema.lookupScalarTag(tagName); if (scalarTag) { const result = scalarTag.resolve(source, true, tagName); if (result === NOT_RESOLVED) throwError$1(state, `cannot resolve a node with !<${tagName}> explicit tag`); return { value: result, tag: scalarTag }; } const collectionTagDef = state.schema.lookupMappingTag(tagName) ?? state.schema.lookupSequenceTag(tagName); if (collectionTagDef) { if (source !== "") throwError$1(state, `cannot resolve a node with !<${tagName}> explicit tag`); const carrier = collectionTagDef.create(tagName); return { value: collectionTagDef.carrierIsResult ? carrier : finalizeCollection(state, state.position, collectionTagDef, carrier), tag: collectionTagDef }; } throwError$1(state, `unknown scalar tag !<${tagName}>`); } if (event.style === SCALAR_STYLE.PLAIN) return state.schema.resolveImplicitScalarTag(source); return { value: strTag2.resolve(source, false, strTag2.tagName), tag: strTag2 }; } function collectionTagName(state, event, defaultTagName) { const rawTag = event.tagStart === NO_RANGE$2 ? "" : state.source.slice(event.tagStart, event.tagEnd); return rawTag === "" || rawTag === "!" ? defaultTagName : tagNameFull(rawTag, state.tagHandlers); } function isMappingTag(tag) { return tag.nodeKind === "mapping"; } function chargeMergeWork(state) { state.totalMergeKeys++; if (state.maxTotalMergeKeys !== -1 && state.totalMergeKeys > state.maxTotalMergeKeys) throwError$1(state, `merge keys exceeded maxTotalMergeKeys (${state.maxTotalMergeKeys})`); } function mergeKeys(state, frame, source, sourceTag) { chargeMergeWork(state); for (const sourceKey of sourceTag.keys(source)) { chargeMergeWork(state); if (frame.tag.has(frame.value, sourceKey)) continue; const err = frame.tag.addPair(frame.value, sourceKey, sourceTag.get(source, sourceKey)); if (err) throwError$1(state, err); frame.overridable ??= /* @__PURE__ */ new Set(); frame.overridable.add(sourceKey); } } function mergeSource(state, frame, source, sourceTag) { state.position = frame.keyPosition; if (isMappingTag(sourceTag)) mergeKeys(state, frame, source, sourceTag); else if (sourceTag.nodeKind === "sequence" && Array.isArray(source)) { if (source.length > 100) throwError$1(state, "abnormal merge sequence size"); for (const element of source) { const elementTag = state.nodeTags.get(element); if (!elementTag) throwError$1(state, "cannot merge mappings; the provided source object is unacceptable"); mergeKeys(state, frame, element, elementTag); } } else throwError$1(state, "cannot merge mappings; the provided source object is unacceptable"); } function addMappingValue(state, frame, key, value, tag) { state.position = frame.keyPosition; if (frame.keyIsMerge) { mergeSource(state, frame, value, tag); return; } if (!state.json && frame.tag.has(frame.value, key) && !frame.overridable?.has(key)) throwError$1(state, "duplicated mapping key"); const err = frame.tag.addPair(frame.value, key, value); if (err) throwError$1(state, err); frame.overridable?.delete(key); } function addValue(state, value, tag) { const frame = state.frames[state.frames.length - 1]; if (frame.kind === "document") { frame.value = value; frame.hasValue = true; } else if (frame.kind === "sequence") { if (isMappingTag(tag)) state.nodeTags.set(value, tag); const err = frame.tag.addItem(frame.value, value, frame.index++); if (err) throwError$1(state, err); } else if (frame.hasKey) { const key = frame.key; frame.key = void 0; frame.hasKey = false; addMappingValue(state, frame, key, value, tag); } else { frame.key = value; frame.keyPosition = state.position; frame.hasKey = true; frame.keyIsMerge = tag.tagName === MERGE_TAG_NAME; } } function storeAnchor(state, event, value, tag, isValueFinal) { if (event.anchorStart !== NO_RANGE$2) { const anchor = { value, tag, isValueFinal }; state.anchors.set(state.source.slice(event.anchorStart, event.anchorEnd), anchor); return anchor; } return null; } function constructFromEvents(events, options) { const state = { ...DEFAULT_CONSTRUCTOR_OPTIONS, ...options, events, documents: [], eventIndex: 0, position: 0, frames: [], anchors: /* @__PURE__ */ new Map(), nodeTags: /* @__PURE__ */ new Map(), tagHandlers: /* @__PURE__ */ Object.create(null), totalMergeKeys: 0, aliasCount: 0 }; while (state.eventIndex < state.events.length) { const event = state.events[state.eventIndex++]; state.position = eventPosition$1(event); switch (event.type) { case EVENT_ID.DOCUMENT: state.anchors = /* @__PURE__ */ new Map(); state.nodeTags = /* @__PURE__ */ new Map(); state.aliasCount = 0; state.tagHandlers = /* @__PURE__ */ Object.create(null); for (const directive of event.directives) if (directive.kind === "tag") state.tagHandlers[directive.handle] = directive.prefix; state.frames.push({ kind: "document", position: state.position, value: void 0, hasValue: false }); break; case EVENT_ID.SCALAR: { const { value, tag } = constructScalar(state, event); storeAnchor(state, event, value, tag, true); addValue(state, value, tag); break; } case EVENT_ID.SEQUENCE: { const tagName = collectionTagName(state, event, "tag:yaml.org,2002:seq"); const tag = state.schema.lookupSequenceTag(tagName); if (!tag) throwError$1(state, `unknown sequence tag !<${tagName}>`); const value = tag.create(tagName); const anchor = storeAnchor(state, event, value, tag, tag.carrierIsResult); state.frames.push({ kind: "sequence", position: state.position, value, tag, anchor, index: 0 }); break; } case EVENT_ID.MAPPING: { const tagName = collectionTagName(state, event, "tag:yaml.org,2002:map"); const tag = state.schema.lookupMappingTag(tagName); if (!tag) throwError$1(state, `unknown mapping tag !<${tagName}>`); const value = tag.create(tagName); const anchor = storeAnchor(state, event, value, tag, tag.carrierIsResult); state.frames.push({ kind: "mapping", position: state.position, value, tag, anchor, key: void 0, keyPosition: state.position, hasKey: false, keyIsMerge: false, overridable: null }); break; } case EVENT_ID.ALIAS: { if (state.maxAliases !== -1 && ++state.aliasCount > state.maxAliases) throwError$1(state, `aliases exceeded maxAliases (${state.maxAliases})`); const name = state.source.slice(event.anchorStart, event.anchorEnd); const anchor = state.anchors.get(name); if (!anchor) throwError$1(state, `unidentified alias "${name}"`); if (!anchor.isValueFinal) throwError$1(state, `recursive alias "${name}" is not supported for tag ${anchor.tag.tagName} because it uses finalize()`); addValue(state, anchor.value, anchor.tag); break; } case EVENT_ID.POP: { const frame = state.frames.pop(); if (frame.kind === "mapping" && frame.hasKey) { state.position = frame.keyPosition; throwError$1(state, "incomplete mapping pair in event stream"); } if (frame.kind === "document") state.documents.push(frame.value); else { const value = frame.tag.carrierIsResult ? frame.value : finalizeCollection(state, frame.position, frame.tag, frame.value); if (frame.anchor) { frame.anchor.value = value; frame.anchor.isValueFinal = true; } addValue(state, value, frame.tag); } break; } } } return state.documents; } var NO_RANGE$1 = -1; var HAS_OWN = Object.prototype.hasOwnProperty; var CONTEXT_FLOW_IN = 1; var CONTEXT_FLOW_OUT = 2; var CONTEXT_BLOCK_IN = 3; var CONTEXT_BLOCK_OUT = 4; var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; var PATTERN_FLOW_INDICATORS = /[,\[\]{}]/; var PATTERN_TAG_HANDLE = /^(?:!|!!|![0-9A-Za-z-]+!)$/; var NS_URI_CHAR = String.raw`(?:%[0-9A-Fa-f]{2}|[0-9A-Za-z\-#;/?:@&=+$,_.!~*'()\[\]])`; var NS_TAG_CHAR = String.raw`(?:%[0-9A-Fa-f]{2}|[0-9A-Za-z\-#;/?:@&=+$.~*'()_])`; var PATTERN_TAG_URI = new RegExp(`^(?:${NS_URI_CHAR})*$`); var PATTERN_TAG_SUFFIX = new RegExp(`^(?:${NS_TAG_CHAR})+$`); var PATTERN_TAG_PREFIX = new RegExp(`^(?:!(?:${NS_URI_CHAR})*|${NS_TAG_CHAR}(?:${NS_URI_CHAR})*)$`); var DEFAULT_PARSER_OPTIONS = { filename: "", maxDepth: 100 }; function addDocumentEvent(state, explicitStart, explicitEnd) { state.events.push({ type: EVENT_ID.DOCUMENT, explicitStart, explicitEnd, directives: state.directives }); } function addSequenceEvent(state, start, anchorStart, anchorEnd, tagStart, tagEnd, style) { state.events.push({ type: EVENT_ID.SEQUENCE, start, anchorStart, anchorEnd, tagStart, tagEnd, style }); } function addMappingEvent(state, start, anchorStart, anchorEnd, tagStart, tagEnd, style) { state.events.push({ type: EVENT_ID.MAPPING, start, anchorStart, anchorEnd, tagStart, tagEnd, style }); } function insertFlowPairMappingEvent(state, snapshot) { state.events.splice(snapshot.eventsLength, 0, { type: EVENT_ID.MAPPING, start: snapshot.position, anchorStart: NO_RANGE$1, anchorEnd: NO_RANGE$1, tagStart: NO_RANGE$1, tagEnd: NO_RANGE$1, style: COLLECTION_STYLE.FLOW }); } function addScalarEvent(state, valueStart, valueEnd, anchorStart, anchorEnd, tagStart, tagEnd, style, chomping = CHOMPING_MODE.CLIP, indent = -1, fast = false) { state.events.push({ type: EVENT_ID.SCALAR, valueStart, valueEnd, anchorStart, anchorEnd, tagStart, tagEnd, style, chomping, indent, fast }); } function addAliasEvent(state, anchorStart, anchorEnd) { state.events.push({ type: EVENT_ID.ALIAS, anchorStart, anchorEnd }); } function addPopEvent(state) { state.events.push({ type: EVENT_ID.POP }); } function addEmptyScalarEvent(state) { addScalarEvent(state, NO_RANGE$1, NO_RANGE$1, NO_RANGE$1, NO_RANGE$1, NO_RANGE$1, NO_RANGE$1, SCALAR_STYLE.PLAIN); } function emptyProperties() { return { anchorStart: NO_RANGE$1, anchorEnd: NO_RANGE$1, tagStart: NO_RANGE$1, tagEnd: NO_RANGE$1 }; } function snapshotState(state) { return { position: state.position, line: state.line, lineStart: state.lineStart, lineIndent: state.lineIndent, firstTabInLine: state.firstTabInLine, eventsLength: state.events.length }; } function restoreState(state, snapshot) { state.position = snapshot.position; state.line = snapshot.line; state.lineStart = snapshot.lineStart; state.lineIndent = snapshot.lineIndent; state.firstTabInLine = snapshot.firstTabInLine; state.events.length = snapshot.eventsLength; } function throwError(state, message) { YAMLException.throwAt(state.input.slice(0, state.length), state.position, message, state.filename); } function isEol(c) { return c === 10 || c === 13; } function isWhiteSpace(c) { return c === 9 || c === 32; } function isWsOrEol(c) { return isWhiteSpace(c) || isEol(c); } function isWsOrEolOrEnd(c) { return c === 0 || isWsOrEol(c); } function isFlowIndicator(c) { return c === 44 || c === 91 || c === 93 || c === 123 || c === 125; } function fromDecimalCode(c) { return c >= 48 && c <= 57 ? c - 48 : -1; } function fromHexCode(c) { if (c >= 48 && c <= 57) return c - 48; const lc = c | 32; if (lc >= 97 && lc <= 102) return lc - 97 + 10; return -1; } function escapedHexLen(c) { if (c === 120) return 2; if (c === 117) return 4; if (c === 85) return 8; return 0; } function isSimpleEscape(c) { return c === 48 || c === 97 || c === 98 || c === 116 || c === 9 || c === 110 || c === 118 || c === 102 || c === 114 || c === 101 || c === 32 || c === 34 || c === 47 || c === 92 || c === 78 || c === 95 || c === 76 || c === 80; } function consumeLineBreak(state) { if (state.input.charCodeAt(state.position) === 10) state.position++; else { state.position++; if (state.input.charCodeAt(state.position) === 10) state.position++; } state.line++; state.lineStart = state.position; state.lineIndent = 0; state.firstTabInLine = -1; } function skipSeparationSpace(state, allowComments) { let lineBreaks = 0; let ch = state.input.charCodeAt(state.position); let hasSeparation = state.position === state.lineStart || isWsOrEol(state.input.charCodeAt(state.position - 1)); while (ch !== 0) { while (isWhiteSpace(ch)) { hasSeparation = true; if (ch === 9 && state.firstTabInLine === -1) state.firstTabInLine = state.position; ch = state.input.charCodeAt(++state.position); } if (allowComments && hasSeparation && ch === 35) do ch = state.input.charCodeAt(++state.position); while (!isEol(ch) && ch !== 0); if (!isEol(ch)) break; consumeLineBreak(state); lineBreaks++; hasSeparation = true; ch = state.input.charCodeAt(state.position); while (ch === 32) { state.lineIndent++; ch = state.input.charCodeAt(++state.position); } } return lineBreaks; } function testDocumentSeparator(state, position = state.position) { const ch = state.input.charCodeAt(position); if ((ch === 45 || ch === 46) && ch === state.input.charCodeAt(position + 1) && ch === state.input.charCodeAt(position + 2)) { const following = state.input.charCodeAt(position + 3); return following === 0 || isWsOrEol(following); } return false; } function skipByteOrderMark(state) { if (state.position === state.lineStart && state.input.charCodeAt(state.position) === 65279) { state.position++; state.lineStart = state.position; } } function testDocumentBoundary(state) { if (state.position !== state.lineStart) return false; if (testDocumentSeparator(state)) return true; if (state.input.charCodeAt(state.position) !== 65279) return false; const snapshot = snapshotState(state); skipByteOrderMark(state); skipSeparationSpace(state, true); const ch = state.input.charCodeAt(state.position); const result = state.position === state.lineStart && (ch === 37 || ch === 45 && testDocumentSeparator(state)); restoreState(state, snapshot); return result; } function skipUntilLineEnd(state) { let ch = state.input.charCodeAt(state.position); while (ch !== 0 && !isEol(ch)) ch = state.input.charCodeAt(++state.position); } function checkPrintable(state, start, end) { if (PATTERN_NON_PRINTABLE.test(state.input.slice(start, end))) throwError(state, "the stream contains non-printable characters"); } function readTagProperty(state, props, inFlow) { if (state.input.charCodeAt(state.position) !== 33) return false; if (props.tagStart !== NO_RANGE$1) throwError(state, "duplication of a tag property"); const start = state.position; let isVerbatim = false; let isNamed = false; let tagHandle = "!"; let ch = state.input.charCodeAt(++state.position); if (ch === 60) { isVerbatim = true; ch = state.input.charCodeAt(++state.position); } else if (ch === 33) { isNamed = true; tagHandle = "!!"; ch = state.input.charCodeAt(++state.position); } let suffixStart = state.position; let tagName; if (isVerbatim) { while (ch !== 0 && ch !== 62) ch = state.input.charCodeAt(++state.position); if (ch !== 62) throwError(state, "unexpected end of the stream within a verbatim tag"); tagName = state.input.slice(suffixStart, state.position); state.position++; } else { while (ch !== 0 && !isWsOrEol(ch) && !(inFlow && isFlowIndicator(ch))) { if (ch === 33) if (!isNamed) { tagHandle = state.input.slice(suffixStart - 1, state.position + 1); if (!PATTERN_TAG_HANDLE.test(tagHandle)) throwError(state, "named tag handle cannot contain such characters"); isNamed = true; suffixStart = state.position + 1; } else throwError(state, "tag suffix cannot contain exclamation marks"); ch = state.input.charCodeAt(++state.position); } tagName = state.input.slice(suffixStart, state.position); if (PATTERN_FLOW_INDICATORS.test(tagName)) throwError(state, "tag suffix cannot contain flow indicator characters"); } if (tagName && !(isVerbatim ? PATTERN_TAG_URI.test(tagName) : PATTERN_TAG_SUFFIX.test(tagName))) throwError(state, `tag name cannot contain such characters: ${tagName}`); if (!isVerbatim && tagHandle !== "!" && tagHandle !== "!!" && !HAS_OWN.call(state.tagHandlers, tagHandle)) throwError(state, `undeclared tag handle "${tagHandle}"`); props.tagStart = start; props.tagEnd = state.position; return true; } function readAnchorProperty(state, props) { if (state.input.charCodeAt(state.position) !== 38) return false; if (props.anchorStart !== NO_RANGE$1) throwError(state, "duplication of an anchor property"); state.position++; const start = state.position; while (state.input.charCodeAt(state.position) !== 0 && !isWsOrEol(state.input.charCodeAt(state.position)) && !isFlowIndicator(state.input.charCodeAt(state.position))) state.position++; if (state.position === start) throwError(state, "name of an anchor node must contain at least one character"); props.anchorStart = start; props.anchorEnd = state.position; return true; } function readAlias(state, props) { if (state.input.charCodeAt(state.position) !== 42) return false; if (props.anchorStart !== NO_RANGE$1 || props.tagStart !== NO_RANGE$1) throwError(state, "alias node should not have any properties"); state.position++; const start = state.position; while (state.input.charCodeAt(state.position) !== 0 && !isWsOrEol(state.input.charCodeAt(state.position)) && !isFlowIndicator(state.input.charCodeAt(state.position))) state.position++; if (state.position === start) throwError(state, "name of an alias node must contain at least one character"); addAliasEvent(state, start, state.position); return true; } function readFlowScalarBreak(state, nodeIndent) { skipSeparationSpace(state, false); if (state.lineIndent < nodeIndent) throwError(state, "deficient indentation"); } function readSingleQuotedScalar(state, nodeIndent, props) { if (state.input.charCodeAt(state.position) !== 39) return false; state.position++; const start = state.position; let simple = true; while (state.input.charCodeAt(state.position) !== 0) { const ch = state.input.charCodeAt(state.position); if (ch === 39) { if (state.input.charCodeAt(state.position + 1) === 39) { simple = false; state.position += 2; continue; } const end = state.position; state.position++; addScalarEvent(state, start, end, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, SCALAR_STYLE.SINGLE_QUOTED, CHOMPING_MODE.CLIP, -1, simple); return true; } if (isEol(ch)) { simple = false; readFlowScalarBreak(state, nodeIndent); } else if (state.position === state.lineStart && testDocumentSeparator(state)) throwError(state, "unexpected end of the document within a single quoted scalar"); else if (ch !== 9 && ch < 32) throwError(state, "expected valid JSON character"); else state.position++; } throwError(state, "unexpected end of the stream within a single quoted scalar"); } function readDoubleQuotedScalar(state, nodeIndent, props) { if (state.input.charCodeAt(state.position) !== 34) return false; state.position++; const start = state.position; let simple = true; while (state.input.charCodeAt(state.position) !== 0) { const ch = state.input.charCodeAt(state.position); if (ch === 34) { const end = state.position; state.position++; addScalarEvent(state, start, end, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, SCALAR_STYLE.DOUBLE_QUOTED, CHOMPING_MODE.CLIP, -1, simple); return true; } if (ch === 92) { simple = false; const escaped = state.input.charCodeAt(++state.position); if (isEol(escaped)) readFlowScalarBreak(state, nodeIndent); else if (isSimpleEscape(escaped)) state.position++; else { let hexLength = escapedHexLen(escaped); if (hexLength === 0) throwError(state, "unknown escape sequence"); while (hexLength-- > 0) { state.position++; if (fromHexCode(state.input.charCodeAt(state.position)) < 0) throwError(state, "expected hexadecimal character"); } state.position++; } } else if (isEol(ch)) { simple = false; readFlowScalarBreak(state, nodeIndent); } else if (state.position === state.lineStart && testDocumentSeparator(state)) throwError(state, "unexpected end of the document within a double quoted scalar"); else if (ch !== 9 && ch < 32) throwError(state, "expected valid JSON character"); else state.position++; } throwError(state, "unexpected end of the stream within a double quoted scalar"); } function readBlockScalar(state, parentIndent, props) { const ch = state.input.charCodeAt(state.position); let chomping = CHOMPING_MODE.CLIP; let indent = -1; let detectedIndent = false; if (ch !== 124 && ch !== 62) return false; const style = ch === 124 ? SCALAR_STYLE.LITERAL_BLOCK : SCALAR_STYLE.FOLDED_BLOCK; state.position++; while (state.input.charCodeAt(state.position) !== 0) { const current = state.input.charCodeAt(state.position); const digit = fromDecimalCode(current); if (current === 43 || current === 45) { if (chomping !== CHOMPING_MODE.CLIP) throwError(state, "repeat of a chomping mode identifier"); chomping = current === 43 ? CHOMPING_MODE.KEEP : CHOMPING_MODE.STRIP; state.position++; } else if (digit >= 0) { if (digit === 0) throwError(state, "bad explicit indentation width of a block scalar; it cannot be less than one"); if (detectedIndent) throwError(state, "repeat of an indentation width identifier"); indent = parentIndent + digit - 1; detectedIndent = true; state.position++; } else break; } let hadWhitespace = false; while (isWhiteSpace(state.input.charCodeAt(state.position))) { hadWhitespace = true; state.position++; } if (hadWhitespace && state.input.charCodeAt(state.position) === 35) skipUntilLineEnd(state); if (isEol(state.input.charCodeAt(state.position))) consumeLineBreak(state); else if (state.input.charCodeAt(state.position) !== 0) throwError(state, "a line break is expected"); let contentIndent = detectedIndent ? indent : -1; let maxLeadingIndent = 0; const valueStart = state.position; let valueEnd = state.position; while (state.input.charCodeAt(state.position) !== 0) { const linePosition = state.position; let column = 0; while (state.input.charCodeAt(linePosition + column) === 32) column++; const first = state.input.charCodeAt(linePosition + column); if (first === 0) { if (contentIndent >= 0) { if (column > contentIndent) valueEnd = linePosition + column; } else if (column > 0) valueEnd = linePosition + column; break; } if (testDocumentBoundary(state)) break; if (!detectedIndent && contentIndent === -1 && isEol(first)) maxLeadingIndent = Math.max(maxLeadingIndent, column); if (!detectedIndent && contentIndent === -1 && !isEol(first)) { if (first === 9 && column < parentIndent) { state.position = linePosition + column; throwError(state, "tab characters must not be used in indentation"); } if (column < maxLeadingIndent) { state.position = linePosition + column; throwError(state, "bad indentation of a mapping entry"); } } if (contentIndent === -1 && first !== 0 && !isEol(first) && column < parentIndent) { state.lineIndent = column; state.position = linePosition + column; break; } if (!detectedIndent && first !== 0 && !isEol(first) && contentIndent === -1) contentIndent = column; const requiredIndent = contentIndent === -1 ? parentIndent + 1 : contentIndent; if (first !== 0 && !isEol(first) && column < requiredIndent) { state.lineIndent = column; state.position = linePosition + column; break; } skipUntilLineEnd(state); valueEnd = state.position; if (isEol(state.input.charCodeAt(state.position))) { consumeLineBreak(state); valueEnd = state.position; } } checkPrintable(state, valueStart, valueEnd); addScalarEvent(state, valueStart, valueEnd, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, style, chomping, contentIndent); return true; } function canStartPlainScalar(state, nodeContext) { const ch = state.input.charCodeAt(state.position); const inFlow = nodeContext === CONTEXT_FLOW_IN; if (ch === 0 || isWsOrEol(ch) || ch === 35 || ch === 38 || ch === 42 || ch === 33 || ch === 124 || ch === 62 || ch === 39 || ch === 34 || ch === 37 || ch === 64 || ch === 96 || inFlow && isFlowIndicator(ch)) return false; if (ch === 63 || ch === 45) { const following = state.input.charCodeAt(state.position + 1); if (isWsOrEolOrEnd(following) || inFlow && isFlowIndicator(following)) return false; } return true; } function readPlainScalar(state, nodeIndent, nodeContext, props) { if (!canStartPlainScalar(state, nodeContext)) return false; const start = state.position; let end = state.position; let ch = state.input.charCodeAt(state.position); const inFlow = nodeContext === CONTEXT_FLOW_IN; let multiline = false; while (ch !== 0) { if (testDocumentBoundary(state)) break; if (ch === 58) { const following = state.input.charCodeAt(state.position + 1); if (isWsOrEolOrEnd(following) || inFlow && isFlowIndicator(following)) break; } else if (ch === 35) { if (isWsOrEol(state.input.charCodeAt(state.position - 1))) break; } else if (inFlow && isFlowIndicator(ch)) break; else if (isEol(ch)) { const savedPosition = state.position; const savedLine = state.line; const savedLineStart = state.lineStart; const savedLineIndent = state.lineIndent; skipSeparationSpace(state, false); if (state.lineIndent >= nodeIndent) { multiline = true; ch = state.input.charCodeAt(state.position); continue; } state.position = savedPosition; state.line = savedLine; state.lineStart = savedLineStart; state.lineIndent = savedLineIndent; break; } if (!isWhiteSpace(ch)) end = state.position + 1; ch = state.input.charCodeAt(++state.position); } if (end === start) return false; checkPrintable(state, start, end); addScalarEvent(state, start, end, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, SCALAR_STYLE.PLAIN, CHOMPING_MODE.CLIP, -1, !multiline); return true; } function skipFlowSeparationSpace(state, nodeIndent) { const startLine = state.line; skipSeparationSpace(state, true); if (state.line > startLine && state.lineIndent < nodeIndent || state.firstTabInLine !== -1 && state.lineIndent < nodeIndent) throwError(state, "deficient indentation"); } function readFlowCollection(state, nodeIndent, props) { const ch = state.input.charCodeAt(state.position); const isMapping = ch === 123; const start = state.position; let readNext = true; if (ch !== 91 && ch !== 123) return false; const terminator = isMapping ? 125 : 93; if (isMapping) addMappingEvent(state, start, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, COLLECTION_STYLE.FLOW); else addSequenceEvent(state, start, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, COLLECTION_STYLE.FLOW); state.position++; while (state.input.charCodeAt(state.position) !== 0) { skipFlowSeparationSpace(state, nodeIndent); let ch2 = state.input.charCodeAt(state.position); if (ch2 === terminator) { state.position++; addPopEvent(state); return true; } else if (!readNext) throwError(state, "missed comma between flow collection entries"); else if (ch2 === 44) throwError(state, "expected the node content, but found ','"); let isPair = false; let isExplicitPair = false; if (ch2 === 63 && isWsOrEol(state.input.charCodeAt(state.position + 1))) { isPair = isExplicitPair = true; state.position += 1; skipFlowSeparationSpace(state, nodeIndent); } const entryLine = state.line; const entryStart = snapshotState(state); const keyWasRead = parseNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); skipFlowSeparationSpace(state, nodeIndent); ch2 = state.input.charCodeAt(state.position); if ((isMapping || isExplicitPair || state.line === entryLine) && ch2 === 58) { isPair = true; state.position++; skipFlowSeparationSpace(state, nodeIndent); if (!isMapping) { insertFlowPairMappingEvent(state, entryStart); if (!keyWasRead) addEmptyScalarEvent(state); } else if (!keyWasRead) addEmptyScalarEvent(state); if (!parseNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true)) addEmptyScalarEvent(state); skipFlowSeparationSpace(state, nodeIndent); if (!isMapping) addPopEvent(state); } else if (isMapping && isPair) { if (!keyWasRead) addEmptyScalarEvent(state); addEmptyScalarEvent(state); } else if (isMapping) addEmptyScalarEvent(state); else if (isPair) { insertFlowPairMappingEvent(state, entryStart); if (!keyWasRead) addEmptyScalarEvent(state); addEmptyScalarEvent(state); addPopEvent(state); } ch2 = state.input.charCodeAt(state.position); if (ch2 === 44) { readNext = true; state.position++; } else readNext = false; } throwError(state, "unexpected end of the stream within a flow collection"); } function readBlockSequence(state, nodeIndent, props) { if (state.firstTabInLine !== -1 || state.input.charCodeAt(state.position) !== 45 || !isWsOrEolOrEnd(state.input.charCodeAt(state.position + 1))) return false; addSequenceEvent(state, state.position, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, COLLECTION_STYLE.BLOCK); while (state.input.charCodeAt(state.position) === 45 && isWsOrEolOrEnd(state.input.charCodeAt(state.position + 1))) { if (state.firstTabInLine !== -1) { state.position = state.firstTabInLine; throwError(state, "tab characters must not be used in indentation"); } const entryLine = state.line; state.position++; const hadBreak = skipSeparationSpace(state, true) > 0; if (state.firstTabInLine !== -1 && state.input.charCodeAt(state.position) === 45 && isWsOrEolOrEnd(state.input.charCodeAt(state.position + 1))) throwError(state, "bad indentation of a sequence entry"); if (hadBreak && state.lineIndent <= nodeIndent) addEmptyScalarEvent(state); else parseNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); skipSeparationSpace(state, true); if (state.lineIndent < nodeIndent || state.position >= state.length) break; if (state.lineIndent > nodeIndent) throwError(state, "bad indentation of a sequence entry"); if (state.line === entryLine && state.input.charCodeAt(state.position) === 45 && isWsOrEolOrEnd(state.input.charCodeAt(state.position + 1))) throwError(state, "bad indentation of a sequence entry"); } addPopEvent(state); return true; } function readBlockMapping(state, nodeIndent, flowIndent, props) { let atExplicitKey = false; let detected = false; let mappingOpened = false; let pendingExplicitKey = false; if (state.firstTabInLine !== -1) return false; let ch = state.input.charCodeAt(state.position); while (ch !== 0) { if (!atExplicitKey && state.firstTabInLine !== -1) { state.position = state.firstTabInLine; throwError(state, "tab characters must not be used in indentation"); } const following = state.input.charCodeAt(state.position + 1); const entryLine = state.line; if ((ch === 63 || ch === 58) && isWsOrEolOrEnd(following)) { if (!mappingOpened) { addMappingEvent(state, state.position, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, COLLECTION_STYLE.BLOCK); mappingOpened = true; } if (ch === 63) { if (atExplicitKey) addEmptyScalarEvent(state); detected = true; atExplicitKey = true; } else if (atExplicitKey) atExplicitKey = false; else { addEmptyScalarEvent(state); detected = true; atExplicitKey = false; } state.position += 1; pendingExplicitKey = true; } else { if (atExplicitKey) { addEmptyScalarEvent(state); atExplicitKey = false; } const beforeKey = snapshotState(state); if (!parseNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) break; if (state.line === entryLine) { ch = state.input.charCodeAt(state.position); while (isWhiteSpace(ch)) ch = state.input.charCodeAt(++state.position); if (ch === 58) { ch = state.input.charCodeAt(++state.position); if (!isWsOrEolOrEnd(ch)) throwError(state, "a whitespace character is expected after the key-value separator within a block mapping"); if (!mappingOpened) { restoreState(state, beforeKey); addMappingEvent(state, beforeKey.position, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, COLLECTION_STYLE.BLOCK); mappingOpened = true; parseNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true); ch = state.input.charCodeAt(state.position); while (isWhiteSpace(ch)) ch = state.input.charCodeAt(++state.position); state.position++; } detected = true; atExplicitKey = false; pendingExplicitKey = false; } else if (detected) throwError(state, "expected ':' after a mapping key"); else { if (props.anchorStart !== NO_RANGE$1 || props.tagStart !== NO_RANGE$1) { restoreState(state, beforeKey); return false; } return true; } } else if (detected) throwError(state, "can not read a block mapping entry; a multiline key may not be an implicit key"); else { if (props.anchorStart !== NO_RANGE$1 || props.tagStart !== NO_RANGE$1) { restoreState(state, beforeKey); return false; } return true; } } if (parseNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, pendingExplicitKey)) pendingExplicitKey = false; if (!atExplicitKey) { if (pendingExplicitKey) { addEmptyScalarEvent(state); pendingExplicitKey = false; } } skipSeparationSpace(state, true); ch = state.input.charCodeAt(state.position); if ((state.line === entryLine || state.lineIndent > nodeIndent) && ch !== 0) throwError(state, "bad indentation of a mapping entry"); else if (state.lineIndent < nodeIndent) break; } if (!detected) return false; if (atExplicitKey) addEmptyScalarEvent(state); if (mappingOpened) addPopEvent(state); return true; } function parseNode(state, parentIndent, nodeContext, allowToSeek, allowCompact, allowPropertyMapping = true) { if (state.depth >= state.maxDepth) throwError(state, `nesting exceeded maxDepth (${state.maxDepth})`); state.depth++; let indentStatus = 1; let atNewLine = false; let hasContent = false; let propertyStart = null; const props = emptyProperties(); let allowBlockScalars = nodeContext === CONTEXT_BLOCK_OUT || nodeContext === CONTEXT_BLOCK_IN; let allowBlockCollections = allowBlockScalars; const allowBlockStyles = allowBlockScalars; if (allowToSeek && skipSeparationSpace(state, true)) { atNewLine = true; if (state.lineIndent > parentIndent) indentStatus = 1; else if (state.lineIndent === parentIndent) indentStatus = 0; else indentStatus = -1; } if (indentStatus === 1) while (true) { const ch = state.input.charCodeAt(state.position); const propertyState = snapshotState(state); if (atNewLine && indentStatus !== 1 && (ch === 33 || ch === 38)) break; if (atNewLine && allowBlockStyles && (props.tagStart !== NO_RANGE$1 || props.anchorStart !== NO_RANGE$1) && (ch === 33 || ch === 38)) { const fallbackState = snapshotState(state); const flowIndent = parentIndent + 1; if (readBlockMapping(state, state.position - state.lineStart, flowIndent, props) && state.events[fallbackState.eventsLength]?.type === EVENT_ID.MAPPING) { state.depth--; return true; } restoreState(state, fallbackState); } if (atNewLine && (ch === 33 && props.tagStart !== NO_RANGE$1 || ch === 38 && props.anchorStart !== NO_RANGE$1)) break; if (!readTagProperty(state, props, nodeContext === CONTEXT_FLOW_IN) && !readAnchorProperty(state, props)) break; if (propertyStart === null) propertyStart = propertyState; if (skipSeparationSpace(state, true)) { atNewLine = true; allowBlockCollections = allowBlockStyles; if (state.lineIndent > parentIndent) indentStatus = 1; else if (state.lineIndent === parentIndent) indentStatus = 0; else indentStatus = -1; } else allowBlockCollections = false; } if (allowBlockCollections) allowBlockCollections = atNewLine || allowCompact; if (indentStatus === 1 || nodeContext === CONTEXT_BLOCK_OUT) { const flowIndent = nodeContext === CONTEXT_FLOW_IN || nodeContext === CONTEXT_FLOW_OUT ? parentIndent : parentIndent + 1; const blockIndent = state.position - state.lineStart; if (indentStatus === 1) if (allowBlockCollections && (readBlockSequence(state, blockIndent, props) || readBlockMapping(state, blockIndent, flowIndent, props)) || readFlowCollection(state, flowIndent, props)) hasContent = true; else { const ch = state.input.charCodeAt(state.position); if (propertyStart !== null && allowPropertyMapping && allowBlockStyles && !allowBlockCollections && ch !== 124 && ch !== 62) { const fallbackState = snapshotState(state); const propertyIndent = propertyStart.position - propertyStart.lineStart; restoreState(state, propertyStart); if (readBlockMapping(state, propertyIndent, flowIndent, emptyProperties()) && state.events[fallbackState.eventsLength]?.type === EVENT_ID.MAPPING) hasContent = true; else restoreState(state, fallbackState); } if (!hasContent && (allowBlockScalars && readBlockScalar(state, flowIndent, props) || readSingleQuotedScalar(state, flowIndent, props) || readDoubleQuotedScalar(state, flowIndent, props) || readAlias(state, props) || readPlainScalar(state, flowIndent, nodeContext, props))) hasContent = true; } else if (indentStatus === 0) hasContent = allowBlockCollections && readBlockSequence(state, blockIndent, props); } allowBlockScalars = allowBlockScalars && !hasContent; if (!hasContent && (props.anchorStart !== NO_RANGE$1 || props.tagStart !== NO_RANGE$1 || allowBlockScalars)) { addScalarEvent(state, NO_RANGE$1, NO_RANGE$1, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, SCALAR_STYLE.PLAIN); hasContent = true; } state.depth--; return hasContent || props.anchorStart !== NO_RANGE$1 || props.tagStart !== NO_RANGE$1; } function readDirective(state) { if (state.lineIndent > 0 || state.input.charCodeAt(state.position) !== 37) return false; state.position++; const nameStart = state.position; while (state.input.charCodeAt(state.position) !== 0 && !isWsOrEol(state.input.charCodeAt(state.position))) state.position++; const name = state.input.slice(nameStart, state.position); const args = []; if (name.length === 0) throwError(state, "directive name must not be less than one character in length"); while (state.input.charCodeAt(state.position) !== 0 && !isEol(state.input.charCodeAt(state.position))) { while (isWhiteSpace(state.input.charCodeAt(state.position))) state.position++; if (state.input.charCodeAt(state.position) === 35 || isEol(state.input.charCodeAt(state.position)) || state.input.charCodeAt(state.position) === 0) break; const start = state.position; while (state.input.charCodeAt(state.position) !== 0 && !isWsOrEol(state.input.charCodeAt(state.position))) state.position++; args.push(state.input.slice(start, state.position)); } if (isEol(state.input.charCodeAt(state.position))) consumeLineBreak(state); if (name === "YAML") { if (state.directives.some((directive) => directive.kind === "yaml")) throwError(state, "duplication of %YAML directive"); if (args.length !== 1) throwError(state, "YAML directive accepts exactly one argument"); const match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); if (match === null) throwError(state, "ill-formed argument of the YAML directive"); if (parseInt(match[1], 10) !== 1) throwError(state, "unacceptable YAML version of the document"); state.directives.push({ kind: "yaml", version: args[0] }); } else if (name === "TAG") { if (args.length !== 2) throwError(state, "TAG directive accepts exactly two arguments"); const [handle, prefix] = args; if (!PATTERN_TAG_HANDLE.test(handle)) throwError(state, "ill-formed tag handle (first argument) of the TAG directive"); if (HAS_OWN.call(state.tagHandlers, handle)) throwError(state, `there is a previously declared suffix for "${handle}" tag handle`); if (!PATTERN_TAG_PREFIX.test(prefix)) throwError(state, "ill-formed tag prefix (second argument) of the TAG directive"); state.tagHandlers[handle] = prefix; state.directives.push({ kind: "tag", handle, prefix }); } return true; } function readDocument(state) { state.directives = []; state.tagHandlers = /* @__PURE__ */ Object.create(null); let hasDirectives = false; skipSeparationSpace(state, true); while (readDirective(state)) { hasDirectives = true; skipSeparationSpace(state, true); } let explicitStart = false; let explicitEnd = false; let allowCompact = true; if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 45 && state.input.charCodeAt(state.position + 1) === 45 && state.input.charCodeAt(state.position + 2) === 45 && isWsOrEolOrEnd(state.input.charCodeAt(state.position + 3))) { explicitStart = true; const markerLine = state.line; state.position += 3; skipSeparationSpace(state, true); allowCompact = state.line > markerLine; } else if (hasDirectives) throwError(state, "directives end mark is expected"); const documentEventIndex = state.events.length; if (!explicitStart && state.position === state.lineStart && state.input.charCodeAt(state.position) === 46 && testDocumentSeparator(state)) { state.position += 3; skipSeparationSpace(state, true); return; } addDocumentEvent(state, explicitStart, false); if (!parseNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, allowCompact, allowCompact)) addEmptyScalarEvent(state); skipSeparationSpace(state, true); if (state.position === state.lineStart && testDocumentSeparator(state)) { explicitEnd = state.input.charCodeAt(state.position) === 46; if (explicitEnd) { const markerLine = state.line; state.position += 3; skipSeparationSpace(state, true); if (state.line === markerLine && state.position < state.length) throwError(state, "end of the stream or a document separator is expected"); } } const documentEvent = state.events[documentEventIndex]; if (documentEvent?.type === EVENT_ID.DOCUMENT) documentEvent.explicitEnd = explicitEnd; addPopEvent(state); if (!explicitEnd && state.position < state.length && !testDocumentBoundary(state)) throwError(state, "end of the stream or a document separator is expected"); } function parseEvents(input, options) { const length = input.length; const state = { ...DEFAULT_PARSER_OPTIONS, ...options, input: `${input}\0`, length, position: 0, line: 0, lineStart: 0, lineIndent: 0, firstTabInLine: -1, depth: 0, directives: [], tagHandlers: /* @__PURE__ */ Object.create(null), events: [] }; const nullpos = input.indexOf("\0"); if (nullpos !== -1) YAMLException.throwAt(input, nullpos, "null byte is not allowed in input", state.filename); while (state.position < state.length) { skipByteOrderMark(state); skipSeparationSpace(state, true); if (state.position >= state.length) break; const documentStart = state.position; readDocument(state); if (state.position === documentStart) throwError(state, "can not read a document"); } return state.events; } var DEFAULT_LOAD_OPTIONS = { ...DEFAULT_PARSER_OPTIONS, ...DEFAULT_CONSTRUCTOR_OPTIONS }; function loadDocuments(input, options = {}) { const opts = { ...DEFAULT_LOAD_OPTIONS, ...options }; const source = String(input); const PARSER_OPT_KEYS = Object.keys(DEFAULT_PARSER_OPTIONS); const CONSTRUCTOR_OPT_KEYS = Object.keys(DEFAULT_CONSTRUCTOR_OPTIONS); return constructFromEvents(parseEvents(source, pick(opts, PARSER_OPT_KEYS)), { ...pick(opts, CONSTRUCTOR_OPT_KEYS), source }); } function load(input, options) { const documents = loadDocuments(input, options); if (documents.length === 0) throw new YAMLException("expected a document, but the input is empty"); if (documents.length === 1) return documents[0]; throw new YAMLException("expected a single document in the stream, but found more"); } function hasBit(mask, bit) { return (mask & 1 << bit) !== 0; } var DEFAULT_SCALAR_STYLE_RULES = { applyQuoteFlowKeysOption, doubleQuoteForInvisibles, doubleQuoteWhitespaceOnly, applyForceQuotesOption, tryLongOrMultilineAsBlock, quoteInvalidPlain, fallbackToDoubleQuoted }; function _preferredQuotedStyle(layout) { if (layout.presenterOptions.quoteStyle === "single" && hasBit(layout.allowedStylesMask, SCALAR_STYLE.SINGLE_QUOTED)) return SCALAR_STYLE.SINGLE_QUOTED; return SCALAR_STYLE.DOUBLE_QUOTED; } function applyQuoteFlowKeysOption(layout) { if (!layout.presenterOptions.quoteFlowKeys) return; if (!layout.isKey || !layout.flowOnly || layout.style !== SCALAR_STYLE.PLAIN) return; layout.style = SCALAR_STYLE.DOUBLE_QUOTED; } function doubleQuoteForInvisibles(layout) { if (layout.style === SCALAR_STYLE.PLAIN && /[\t\x7F-\xA0\u2028\u2029\uFEFF\uFFFE\uFFFF]/.test(layout.node.value)) layout.style = SCALAR_STYLE.DOUBLE_QUOTED; } function doubleQuoteWhitespaceOnly(layout) { if (layout.style === SCALAR_STYLE.PLAIN && /^\s+$/.test(layout.node.value)) layout.style = SCALAR_STYLE.DOUBLE_QUOTED; } function applyForceQuotesOption(layout) { if (!layout.presenterOptions.forceQuotes) return; if (layout.isKey || layout.style !== SCALAR_STYLE.PLAIN) return; layout.style = layout.node.value.includes("\n") ? SCALAR_STYLE.DOUBLE_QUOTED : _preferredQuotedStyle(layout); } function tryLongOrMultilineAsBlock(layout) { if (layout.style !== SCALAR_STYLE.PLAIN || layout.isKey) return; const value = layout.node.value; const multiline = value.indexOf("\n") !== -1; if (!hasBit(layout.allowedStylesMask, SCALAR_STYLE.LITERAL_BLOCK)) { if (multiline) layout.style = SCALAR_STYLE.DOUBLE_QUOTED; return; } const w2 = layout.presenterOptions.lineWidth; if (w2 === -1) { if (multiline) layout.style = SCALAR_STYLE.LITERAL_BLOCK; return; } const availableWidth = Math.max(Math.min(w2, 40), w2 - layout.shiftOfContent); let position = 0; let shouldFold = false; while (position <= value.length) { let lineEnd = value.length; const nextLineBreak = value.indexOf("\n", position); if (nextLineBreak !== -1) lineEnd = nextLineBreak; const line = value.slice(position, lineEnd); if (line.length > availableWidth && line[0] !== " " && / [^ \t]/.test(line)) shouldFold = true; if (nextLineBreak === -1) break; position = nextLineBreak + 1; } if (shouldFold) layout.style = SCALAR_STYLE.FOLDED_BLOCK; else if (multiline) layout.style = SCALAR_STYLE.LITERAL_BLOCK; } function quoteInvalidPlain(layout) { if (layout.style === SCALAR_STYLE.PLAIN && !hasBit(layout.allowedStylesMask, SCALAR_STYLE.PLAIN)) layout.style = _preferredQuotedStyle(layout); } function fallbackToDoubleQuoted(layout) { if (!hasBit(layout.allowedStylesMask, layout.style)) layout.style = SCALAR_STYLE.DOUBLE_QUOTED; } var SRC_C_PRINTABLE = "[\\x09\\x0A\\x0D\\x20-\\x7E\\x85\\xA0-\\uD7FF\\uE000-\\uFFFD\\u{10000}-\\u{10FFFF}]"; var SRC_B_CHAR = "[\\n\\r]"; var SRC_C_BYTE_ORDER_MARK = "\\uFEFF"; var SRC_S_WHITE = "[ \\t]"; var SRC_NB_CHAR = `(?:(?!(?:${SRC_B_CHAR}|${SRC_C_BYTE_ORDER_MARK}))${SRC_C_PRINTABLE})`; var SRC_NS_CHAR = `(?:(?!${SRC_S_WHITE})${SRC_NB_CHAR})`; var SRC_NB_JSON = "[\\x09\\x20-\\uD7FF\\uE000-\\uFFFF\\u{10000}-\\u{10FFFF}]"; var SRC_C_INDICATOR = "[-?:,\\[\\]{}#&*!|>'\"%@`]"; var SRC_C_FLOW_INDICATOR = "[,\\[\\]{}]"; var SRC_NS_PLAIN_SAFE_FLOW_OUT = SRC_NS_CHAR; var SRC_NS_PLAIN_SAFE_FLOW_IN = `(?:(?!${SRC_C_FLOW_INDICATOR})${SRC_NS_CHAR})`; var SRC_NS_PLAIN_FIRST_FLOW_OUT = `(?:(?:(?!${SRC_C_INDICATOR})${SRC_NS_CHAR})|[?:-](?=${SRC_NS_PLAIN_SAFE_FLOW_OUT}))`; var SRC_NS_PLAIN_FIRST_FLOW_IN = `(?:(?:(?!${SRC_C_INDICATOR})${SRC_NS_CHAR})|[?:-](?=${SRC_NS_PLAIN_SAFE_FLOW_IN}))`; var SRC_NS_PLAIN_CHAR_FLOW_OUT = `(?:(?:(?![:#])${SRC_NS_PLAIN_SAFE_FLOW_OUT})|:(?=${SRC_NS_PLAIN_SAFE_FLOW_OUT}))#*`; var SRC_NS_PLAIN_CHAR_FLOW_IN = `(?:(?:(?![:#])${SRC_NS_PLAIN_SAFE_FLOW_IN})|:(?=${SRC_NS_PLAIN_SAFE_FLOW_IN}))#*`; var SRC_NB_NS_PLAIN_IN_LINE_FLOW_OUT = `(?:${SRC_S_WHITE}*${SRC_NS_PLAIN_CHAR_FLOW_OUT})*`; var SRC_NB_NS_PLAIN_IN_LINE_FLOW_IN = `(?:${SRC_S_WHITE}*${SRC_NS_PLAIN_CHAR_FLOW_IN})*`; var SRC_NS_PLAIN_ONE_LINE_FLOW_OUT = `${SRC_NS_PLAIN_FIRST_FLOW_OUT}#*${SRC_NB_NS_PLAIN_IN_LINE_FLOW_OUT}`; var SRC_NS_PLAIN_ONE_LINE_FLOW_IN = `${SRC_NS_PLAIN_FIRST_FLOW_IN}#*${SRC_NB_NS_PLAIN_IN_LINE_FLOW_IN}`; var SRC_NS_PLAIN_ONE_LINE_BLOCK_KEY = SRC_NS_PLAIN_ONE_LINE_FLOW_OUT; var SRC_NS_PLAIN_ONE_LINE_FLOW_KEY = SRC_NS_PLAIN_ONE_LINE_FLOW_IN; var SRC_S_NS_PLAIN_NEXT_LINE_FLOW_OUT = `\\n+${SRC_NS_PLAIN_CHAR_FLOW_OUT}${SRC_NB_NS_PLAIN_IN_LINE_FLOW_OUT}`; var SRC_S_NS_PLAIN_NEXT_LINE_FLOW_IN = `\\n+${SRC_NS_PLAIN_CHAR_FLOW_IN}${SRC_NB_NS_PLAIN_IN_LINE_FLOW_IN}`; var SRC_NS_PLAIN_MULTI_LINE_FLOW_OUT = `${SRC_NS_PLAIN_ONE_LINE_FLOW_OUT}(?:${SRC_S_NS_PLAIN_NEXT_LINE_FLOW_OUT})*`; var SRC_NS_PLAIN_MULTI_LINE_FLOW_IN = `${SRC_NS_PLAIN_ONE_LINE_FLOW_IN}(?:${SRC_S_NS_PLAIN_NEXT_LINE_FLOW_IN})*`; var NS_PLAIN_FLOW_OUT = new RegExp(`^(?:${SRC_NS_PLAIN_MULTI_LINE_FLOW_OUT})$`, "u"); var NS_PLAIN_FLOW_IN = new RegExp(`^(?:${SRC_NS_PLAIN_MULTI_LINE_FLOW_IN})$`, "u"); var NS_PLAIN_BLOCK_KEY = new RegExp(`^(?:${SRC_NS_PLAIN_ONE_LINE_BLOCK_KEY})$`, "u"); var NS_PLAIN_FLOW_KEY = new RegExp(`^(?:${SRC_NS_PLAIN_ONE_LINE_FLOW_KEY})$`, "u"); var NB_SINGLE_ONE_LINE = new RegExp(`^(?:${SRC_NB_JSON})*$`, "u"); var NB_SINGLE_MULTI_LINE = new RegExp(`^(?:${SRC_NB_JSON}|\\n)*$`, "u"); var BLOCK_SCALAR_CONTENT = new RegExp(`^(?:${SRC_NB_CHAR}|\\n)*$`, "u"); var DEFAULT_PRESENTER_OPTIONS = { indent: 2, seqNoIndent: false, seqInlineFirst: true, lineWidth: 80, flowBracketPadding: false, flowSkipCommaSpace: false, flowSkipColonSpace: false, quoteFlowKeys: false, quoteStyle: "single", forceQuotes: false, scalarStyleRules: Object.keys(DEFAULT_SCALAR_STYLE_RULES).map((name) => Reflect.get(DEFAULT_SCALAR_STYLE_RULES, name)), tagBeforeAnchor: false }; var DEFAULT_DUMP_OPTIONS = { ...DEFAULT_PRESENTER_OPTIONS, schema: DUMP_SCHEMA, skipInvalid: false, noRefs: false, flowLevel: -1, sortKeys: false, transform: () => { } }; var EVENT_DOCUMENT = EVENT_ID.DOCUMENT; var EVENT_SEQUENCE = EVENT_ID.SEQUENCE; var EVENT_MAPPING = EVENT_ID.MAPPING; var EVENT_SCALAR = EVENT_ID.SCALAR; var EVENT_ALIAS = EVENT_ID.ALIAS; var EVENT_POP = EVENT_ID.POP; var SCALAR_STYLE_PLAIN = SCALAR_STYLE.PLAIN; var SCALAR_STYLE_SINGLE_QUOTED = SCALAR_STYLE.SINGLE_QUOTED; var SCALAR_STYLE_DOUBLE_QUOTED = SCALAR_STYLE.DOUBLE_QUOTED; var SCALAR_STYLE_LITERAL_BLOCK = SCALAR_STYLE.LITERAL_BLOCK; var SCALAR_STYLE_FOLDED_BLOCK = SCALAR_STYLE.FOLDED_BLOCK; var COLLECTION_STYLE_BLOCK = COLLECTION_STYLE.BLOCK; var COLLECTION_STYLE_FLOW = COLLECTION_STYLE.FLOW; var CHOMPING_CLIP = CHOMPING_MODE.CLIP; var CHOMPING_STRIP = CHOMPING_MODE.STRIP; var CHOMPING_KEEP = CHOMPING_MODE.KEEP; // node_modules/marked/lib/marked.esm.js function M() { return { async: false, breaks: false, extensions: null, gfm: true, hooks: null, pedantic: false, renderer: null, silent: false, tokenizer: null, walkTokens: null }; } var T = M(); function N(l3) { T = l3; } var _ = { exec: () => null }; function E(l3) { let e = []; return (t) => { let n = Math.max(0, Math.min(3, t - 1)), s = e[n]; return s || (s = l3(n), e[n] = s), s; }; } function d(l3, e = "") { let t = typeof l3 == "string" ? l3 : l3.source, n = { replace: (s, r) => { let i = typeof r == "string" ? r : r.source; return i = i.replace(m.caret, "$1"), t = t.replace(s, i), n; }, getRegex: () => new RegExp(t, e) }; return n; } var Te = ((l3 = "") => { try { return !!new RegExp("(?<=1)(?/, blockquoteSetextReplace: /\n {0,3}((?:=+|-+) *)(?=\n|$)/g, blockquoteSetextReplace2: /^ {0,3}>[ \t]?/gm, listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g, listIsTask: /^\[[ xX]\] +\S/, listReplaceTask: /^\[[ xX]\] +/, listTaskCheckbox: /\[[ xX]\]/, anyLine: /\n.*\n/, hrefBrackets: /^<(.*)>$/, tableDelimiter: /[:|]/, tableAlignChars: /^\||\| *$/g, tableRowBlankLine: /\n[ \t]*$/, tableAlignRight: /^ *-+: *$/, tableAlignCenter: /^ *:-+: *$/, tableAlignLeft: /^ *:-+ *$/, startATag: /^/i, startPreScriptTag: /^<(pre|code|kbd|script)(\s|>)/i, endPreScriptTag: /^<\/(pre|code|kbd|script)(\s|>)/i, startAngleBracket: /^$/, pedanticHrefTitle: /^([^'"]*[^\s])\s+(['"])(.*)\2/, unicodeAlphaNumeric: /[\p{L}\p{N}]/u, escapeTest: /[&<>"']/, escapeReplace: /[&<>"']/g, escapeTestNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/, escapeReplaceNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g, caret: /(^|[^\[])\^/g, percentDecode: /%25/g, findPipe: /\|/g, splitPipe: / \|/, slashPipe: /\\\|/g, carriageReturn: /\r\n|\r/g, spaceLine: /^ +$/gm, notSpaceStart: /^\S*/, endingNewline: /\n$/, listItemRegex: (l3) => new RegExp(`^( {0,3}${l3})((?:[ ][^\\n]*)?(?:\\n|$))`), nextBulletRegex: E((l3) => new RegExp(`^ {0,${l3}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)), hrRegex: E((l3) => new RegExp(`^ {0,${l3}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`)), fencesBeginRegex: E((l3) => new RegExp(`^ {0,${l3}}(?:\`\`\`|~~~)`)), headingBeginRegex: E((l3) => new RegExp(`^ {0,${l3}}#`)), htmlBeginRegex: E((l3) => new RegExp(`^ {0,${l3}}<(?:[a-z].*>|!--)`, "i")), blockquoteBeginRegex: E((l3) => new RegExp(`^ {0,${l3}}>`)) }; var Oe = /^(?:[ \t]*(?:\n|$))+/; var we = /^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/; var ye = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/; var B = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/; var Pe = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/; var j = / {0,3}(?:[*+-]|\d{1,9}[.)])/; var oe = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/; var ae = d(oe).replace(/bull/g, j).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/\|table/g, "").getRegex(); var Se = d(oe).replace(/bull/g, j).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/table/g, / {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(); var F = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/; var $e = /^[^\n]+/; var U = /(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/; var Le = d(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label", U).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(); var _e = d(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g, j).getRegex(); var H = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul"; var K = /|$))/; var ze = d("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))", "i").replace("comment", K).replace("tag", H).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(); var le = d(F).replace("hr", B).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]").replace("html", ")|<(?:script|pre|style|textarea|!--)").replace("tag", H).getRegex(); var Me = d(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", le).getRegex(); var W = { blockquote: Me, code: we, def: Le, fences: ye, heading: Pe, hr: B, html: ze, lheading: ae, list: _e, newline: Oe, paragraph: le, table: _, text: $e }; var se = d("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", B).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", "(?: {4}| {0,3} )[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html", ")|<(?:script|pre|style|textarea|!--)").replace("tag", H).getRegex(); var Ee = { ...W, lheading: Se, table: se, paragraph: d(F).replace("hr", B).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", se).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]").replace("html", ")|<(?:script|pre|style|textarea|!--)").replace("tag", H).getRegex() }; var Ie = { ...W, html: d(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment", K).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(), def: /^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, heading: /^(#{1,6})(.*)(?:\n+|$)/, fences: _, lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, paragraph: d(F).replace("hr", B).replace("heading", ` *#{1,6} *[^ ]`).replace("lheading", ae).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex() }; var Ae = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/; var Ce = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/; var ue = /^( {2,}|\\)\n(?!\s*$)/; var Be = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`+)[^`]+\k(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-", Te ? "(?`+)[^`]+\k(?!`)/).replace("html", /<(?! )[^<>]*?>/).getRegex(); var ce = /^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/; var Ze = d(ce, "u").replace(/punct/g, I).getRegex(); var Ge = d(ce, "u").replace(/punct/g, pe).getRegex(); var he = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)"; var Ne = d(he, "gu").replace(/notPunctSpace/g, X).replace(/punctSpace/g, Z).replace(/punct/g, I).getRegex(); var Qe = d(he, "gu").replace(/notPunctSpace/g, ve).replace(/punctSpace/g, qe).replace(/punct/g, pe).getRegex(); var je = d("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)", "gu").replace(/notPunctSpace/g, X).replace(/punctSpace/g, Z).replace(/punct/g, I).getRegex(); var Fe = d(/^~~?(?:((?!~)punct)|[^\s~])/, "u").replace(/punct/g, I).getRegex(); var Ue = "^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)"; var Ke = d(Ue, "gu").replace(/notPunctSpace/g, X).replace(/punctSpace/g, Z).replace(/punct/g, I).getRegex(); var We = d(/\\(punct)/, "gu").replace(/punct/g, I).getRegex(); var Xe = d(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(); var Je = d(K).replace("(?:-->|$)", "-->").getRegex(); var Ve = d("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment", Je).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(); var v = /(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/; var Ye = d(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label", v).replace("href", /<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(); var ke = d(/^!?\[(label)\]\[(ref)\]/).replace("label", v).replace("ref", U).getRegex(); var de = d(/^!?\[(ref)\](?:\[\])?/).replace("ref", U).getRegex(); var et = d("reflink|nolink(?!\\()", "g").replace("reflink", ke).replace("nolink", de).getRegex(); var ie = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/; var J = { _backpedal: _, anyPunctuation: We, autolink: Xe, blockSkip: He, br: ue, code: Ce, del: _, delLDelim: _, delRDelim: _, emStrongLDelim: Ze, emStrongRDelimAst: Ne, emStrongRDelimUnd: je, escape: Ae, link: Ye, nolink: de, punctuation: De, reflink: ke, reflinkSearch: et, tag: Ve, text: Be, url: _ }; var tt = { ...J, link: d(/^!?\[(label)\]\((.*?)\)/).replace("label", v).getRegex(), reflink: d(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", v).getRegex() }; var Q = { ...J, emStrongRDelimAst: Qe, emStrongLDelim: Ge, delLDelim: Fe, delRDelim: Ke, url: d(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol", ie).replace("email", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(), _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/, del: /^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/, text: d(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\": ">", '"': """, "'": "'" }; var ge = (l3) => rt[l3]; function O(l3, e) { if (e) { if (m.escapeTest.test(l3)) return l3.replace(m.escapeReplace, ge); } else if (m.escapeTestNoEncode.test(l3)) return l3.replace(m.escapeReplaceNoEncode, ge); return l3; } function V(l3) { try { l3 = encodeURI(l3).replace(m.percentDecode, "%"); } catch { return null; } return l3; } function Y(l3, e) { let t = l3.replace(m.findPipe, (r, i, o) => { let u = false, a = i; for (; --a >= 0 && o[a] === "\\"; ) u = !u; return u ? "|" : " |"; }), n = t.split(m.splitPipe), s = 0; if (n[0].trim() || n.shift(), n.length > 0 && !n.at(-1)?.trim() && n.pop(), e) if (n.length > e) n.splice(e); else for (; n.length < e; ) n.push(""); for (; s < n.length; s++) n[s] = n[s].trim().replace(m.slashPipe, "|"); return n; } function $(l3, e, t) { let n = l3.length; if (n === 0) return ""; let s = 0; for (; s < n; ) { let r = l3.charAt(n - s - 1); if (r === e && !t) s++; else if (r !== e && t) s++; else break; } return l3.slice(0, n - s); } function ee(l3) { let e = l3.split(` `), t = e.length - 1; for (; t >= 0 && m.blankLine.test(e[t]); ) t--; return e.length - t <= 2 ? l3 : e.slice(0, t + 1).join(` `); } function fe(l3, e) { if (l3.indexOf(e[1]) === -1) return -1; let t = 0; for (let n = 0; n < l3.length; n++) if (l3[n] === "\\") n++; else if (l3[n] === e[0]) t++; else if (l3[n] === e[1] && (t--, t < 0)) return n; return t > 0 ? -2 : -1; } function me(l3, e = 0) { let t = e, n = ""; for (let s of l3) if (s === " ") { let r = 4 - t % 4; n += " ".repeat(r), t += r; } else n += s, t++; return n; } function xe(l3, e, t, n, s) { let r = e.href, i = e.title || null, o = l3[1].replace(s.other.outputLinkReplace, "$1"); n.state.inLink = true; let u = { type: l3[0].charAt(0) === "!" ? "image" : "link", raw: t, href: r, title: i, text: o, tokens: n.inlineTokens(o) }; return n.state.inLink = false, u; } function st(l3, e, t) { let n = l3.match(t.other.indentCodeCompensation); if (n === null) return e; let s = n[1]; return e.split(` `).map((r) => { let i = r.match(t.other.beginningSpace); if (i === null) return r; let [o] = i; return o.length >= s.length ? r.slice(s.length) : r; }).join(` `); } var w = class { options; rules; lexer; constructor(e) { this.options = e || T; } space(e) { let t = this.rules.block.newline.exec(e); if (t && t[0].length > 0) return { type: "space", raw: t[0] }; } code(e) { let t = this.rules.block.code.exec(e); if (t) { let n = this.options.pedantic ? t[0] : ee(t[0]), s = n.replace(this.rules.other.codeRemoveIndent, ""); return { type: "code", raw: n, codeBlockStyle: "indented", text: s }; } } fences(e) { let t = this.rules.block.fences.exec(e); if (t) { let n = t[0], s = st(n, t[3] || "", this.rules); return { type: "code", raw: n, lang: t[2] ? t[2].trim().replace(this.rules.inline.anyPunctuation, "$1") : t[2], text: s }; } } heading(e) { let t = this.rules.block.heading.exec(e); if (t) { let n = t[2].trim(); if (this.rules.other.endingHash.test(n)) { let s = $(n, "#"); (this.options.pedantic || !s || this.rules.other.endingSpaceChar.test(s)) && (n = s.trim()); } return { type: "heading", raw: $(t[0], ` `), depth: t[1].length, text: n, tokens: this.lexer.inline(n) }; } } hr(e) { let t = this.rules.block.hr.exec(e); if (t) return { type: "hr", raw: $(t[0], ` `) }; } blockquote(e) { let t = this.rules.block.blockquote.exec(e); if (t) { let n = $(t[0], ` `).split(` `), s = "", r = "", i = []; for (; n.length > 0; ) { let o = false, u = [], a; for (a = 0; a < n.length; a++) if (this.rules.other.blockquoteStart.test(n[a])) u.push(n[a]), o = true; else if (!o) u.push(n[a]); else break; n = n.slice(a); let c = u.join(` `), p = c.replace(this.rules.other.blockquoteSetextReplace, ` $1`).replace(this.rules.other.blockquoteSetextReplace2, ""); s = s ? `${s} ${c}` : c, r = r ? `${r} ${p}` : p; let k = this.lexer.state.top; if (this.lexer.state.top = true, this.lexer.blockTokens(p, i, true), this.lexer.state.top = k, n.length === 0) break; let h = i.at(-1); if (h?.type === "code") break; if (h?.type === "blockquote") { let R = h, f = R.raw + ` ` + n.join(` `), S = this.blockquote(f); i[i.length - 1] = S, s = s.substring(0, s.length - R.raw.length) + S.raw, r = r.substring(0, r.length - R.text.length) + S.text; break; } else if (h?.type === "list") { let R = h, f = R.raw + ` ` + n.join(` `), S = this.list(f); i[i.length - 1] = S, s = s.substring(0, s.length - h.raw.length) + S.raw, r = r.substring(0, r.length - R.raw.length) + S.raw, n = f.substring(i.at(-1).raw.length).split(` `); continue; } } return { type: "blockquote", raw: s, tokens: i, text: r }; } } list(e) { let t = this.rules.block.list.exec(e); if (t) { let n = t[1].trim(), s = n.length > 1, r = { type: "list", raw: "", ordered: s, start: s ? +n.slice(0, -1) : "", loose: false, items: [] }; n = s ? `\\d{1,9}\\${n.slice(-1)}` : `\\${n}`, this.options.pedantic && (n = s ? n : "[*+-]"); let i = this.rules.other.listItemRegex(n), o = false; for (; e; ) { let a = false, c = "", p = ""; if (!(t = i.exec(e)) || this.rules.block.hr.test(e)) break; c = t[0], e = e.substring(c.length); let k = me(t[2].split(` `, 1)[0], t[1].length), h = e.split(` `, 1)[0], R = !k.trim(), f = 0; if (this.options.pedantic ? (f = 2, p = k.trimStart()) : R ? f = t[1].length + 1 : (f = k.search(this.rules.other.nonSpaceChar), f = f > 4 ? 1 : f, p = k.slice(f), f += t[1].length), R && this.rules.other.blankLine.test(h) && (c += h + ` `, e = e.substring(h.length + 1), a = true), !a) { let S = this.rules.other.nextBulletRegex(f), te = this.rules.other.hrRegex(f), ne = this.rules.other.fencesBeginRegex(f), re = this.rules.other.headingBeginRegex(f), be = this.rules.other.htmlBeginRegex(f), Re = this.rules.other.blockquoteBeginRegex(f); for (; e; ) { let G = e.split(` `, 1)[0], C; if (h = G, this.options.pedantic ? (h = h.replace(this.rules.other.listReplaceNesting, " "), C = h) : C = h.replace(this.rules.other.tabCharGlobal, " "), ne.test(h) || re.test(h) || be.test(h) || Re.test(h) || S.test(h) || te.test(h)) break; if (C.search(this.rules.other.nonSpaceChar) >= f || !h.trim()) p += ` ` + C.slice(f); else { if (R || k.replace(this.rules.other.tabCharGlobal, " ").search(this.rules.other.nonSpaceChar) >= 4 || ne.test(k) || re.test(k) || te.test(k)) break; p += ` ` + h; } R = !h.trim(), c += G + ` `, e = e.substring(G.length + 1), k = C.slice(f); } } r.loose || (o ? r.loose = true : this.rules.other.doubleBlankLine.test(c) && (o = true)), r.items.push({ type: "list_item", raw: c, task: !!this.options.gfm && this.rules.other.listIsTask.test(p), loose: false, text: p, tokens: [] }), r.raw += c; } let u = r.items.at(-1); if (u) u.raw = u.raw.trimEnd(), u.text = u.text.trimEnd(); else return; r.raw = r.raw.trimEnd(); for (let a of r.items) { this.lexer.state.top = false, a.tokens = this.lexer.blockTokens(a.text, []); let c = a.tokens[0]; if (a.task && (c?.type === "text" || c?.type === "paragraph")) { a.text = a.text.replace(this.rules.other.listReplaceTask, ""), c.raw = c.raw.replace(this.rules.other.listReplaceTask, ""), c.text = c.text.replace(this.rules.other.listReplaceTask, ""); for (let k = this.lexer.inlineQueue.length - 1; k >= 0; k--) if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[k].src)) { this.lexer.inlineQueue[k].src = this.lexer.inlineQueue[k].src.replace(this.rules.other.listReplaceTask, ""); break; } let p = this.rules.other.listTaskCheckbox.exec(a.raw); if (p) { let k = { type: "checkbox", raw: p[0] + " ", checked: p[0] !== "[ ]" }; a.checked = k.checked, r.loose ? a.tokens[0] && ["paragraph", "text"].includes(a.tokens[0].type) && "tokens" in a.tokens[0] && a.tokens[0].tokens ? (a.tokens[0].raw = k.raw + a.tokens[0].raw, a.tokens[0].text = k.raw + a.tokens[0].text, a.tokens[0].tokens.unshift(k)) : a.tokens.unshift({ type: "paragraph", raw: k.raw, text: k.raw, tokens: [k] }) : a.tokens.unshift(k); } } else a.task && (a.task = false); if (!r.loose) { let p = a.tokens.filter((h) => h.type === "space"), k = p.length > 0 && p.some((h) => this.rules.other.anyLine.test(h.raw)); r.loose = k; } } if (r.loose) for (let a of r.items) { a.loose = true; for (let c of a.tokens) c.type === "text" && (c.type = "paragraph"); } return r; } } html(e) { let t = this.rules.block.html.exec(e); if (t) { let n = ee(t[0]); return { type: "html", block: true, raw: n, pre: t[1] === "pre" || t[1] === "script" || t[1] === "style", text: n }; } } def(e) { let t = this.rules.block.def.exec(e); if (t) { let n = t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal, " "), s = t[2] ? t[2].replace(this.rules.other.hrefBrackets, "$1").replace(this.rules.inline.anyPunctuation, "$1") : "", r = t[3] ? t[3].substring(1, t[3].length - 1).replace(this.rules.inline.anyPunctuation, "$1") : t[3]; return { type: "def", tag: n, raw: $(t[0], ` `), href: s, title: r }; } } table(e) { let t = this.rules.block.table.exec(e); if (!t || !this.rules.other.tableDelimiter.test(t[2])) return; let n = Y(t[1]), s = t[2].replace(this.rules.other.tableAlignChars, "").split("|"), r = t[3]?.trim() ? t[3].replace(this.rules.other.tableRowBlankLine, "").split(` `) : [], i = { type: "table", raw: $(t[0], ` `), header: [], align: [], rows: [] }; if (n.length === s.length) { for (let o of s) this.rules.other.tableAlignRight.test(o) ? i.align.push("right") : this.rules.other.tableAlignCenter.test(o) ? i.align.push("center") : this.rules.other.tableAlignLeft.test(o) ? i.align.push("left") : i.align.push(null); for (let o = 0; o < n.length; o++) i.header.push({ text: n[o], tokens: this.lexer.inline(n[o]), header: true, align: i.align[o] }); for (let o of r) i.rows.push(Y(o, i.header.length).map((u, a) => ({ text: u, tokens: this.lexer.inline(u), header: false, align: i.align[a] }))); return i; } } lheading(e) { let t = this.rules.block.lheading.exec(e); if (t) { let n = t[1].trim(); return { type: "heading", raw: $(t[0], ` `), depth: t[2].charAt(0) === "=" ? 1 : 2, text: n, tokens: this.lexer.inline(n) }; } } paragraph(e) { let t = this.rules.block.paragraph.exec(e); if (t) { let n = t[1].charAt(t[1].length - 1) === ` ` ? t[1].slice(0, -1) : t[1]; return { type: "paragraph", raw: t[0], text: n, tokens: this.lexer.inline(n) }; } } text(e) { let t = this.rules.block.text.exec(e); if (t) return { type: "text", raw: t[0], text: t[0], tokens: this.lexer.inline(t[0]) }; } escape(e) { let t = this.rules.inline.escape.exec(e); if (t) return { type: "escape", raw: t[0], text: t[1] }; } tag(e) { let t = this.rules.inline.tag.exec(e); if (t) return !this.lexer.state.inLink && this.rules.other.startATag.test(t[0]) ? this.lexer.state.inLink = true : this.lexer.state.inLink && this.rules.other.endATag.test(t[0]) && (this.lexer.state.inLink = false), !this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(t[0]) ? this.lexer.state.inRawBlock = true : this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(t[0]) && (this.lexer.state.inRawBlock = false), { type: "html", raw: t[0], inLink: this.lexer.state.inLink, inRawBlock: this.lexer.state.inRawBlock, block: false, text: t[0] }; } link(e) { let t = this.rules.inline.link.exec(e); if (t) { let n = t[2].trim(); if (!this.options.pedantic && this.rules.other.startAngleBracket.test(n)) { if (!this.rules.other.endAngleBracket.test(n)) return; let i = $(n.slice(0, -1), "\\"); if ((n.length - i.length) % 2 === 0) return; } else { let i = fe(t[2], "()"); if (i === -2) return; if (i > -1) { let u = (t[0].indexOf("!") === 0 ? 5 : 4) + t[1].length + i; t[2] = t[2].substring(0, i), t[0] = t[0].substring(0, u).trim(), t[3] = ""; } } let s = t[2], r = ""; if (this.options.pedantic) { let i = this.rules.other.pedanticHrefTitle.exec(s); i && (s = i[1], r = i[3]); } else r = t[3] ? t[3].slice(1, -1) : ""; return s = s.trim(), this.rules.other.startAngleBracket.test(s) && (this.options.pedantic && !this.rules.other.endAngleBracket.test(n) ? s = s.slice(1) : s = s.slice(1, -1)), xe(t, { href: s && s.replace(this.rules.inline.anyPunctuation, "$1"), title: r && r.replace(this.rules.inline.anyPunctuation, "$1") }, t[0], this.lexer, this.rules); } } reflink(e, t) { let n; if ((n = this.rules.inline.reflink.exec(e)) || (n = this.rules.inline.nolink.exec(e))) { let s = (n[2] || n[1]).replace(this.rules.other.multipleSpaceGlobal, " "), r = t[s.toLowerCase()]; if (!r) { let i = n[0].charAt(0); return { type: "text", raw: i, text: i }; } return xe(n, r, n[0], this.lexer, this.rules); } } emStrong(e, t, n = "") { let s = this.rules.inline.emStrongLDelim.exec(e); if (!s || !s[1] && !s[2] && !s[3] && !s[4] || s[4] && n.match(this.rules.other.unicodeAlphaNumeric)) return; if (!(s[1] || s[3] || "") || !n || this.rules.inline.punctuation.exec(n)) { let i = [...s[0]].length - 1, o, u, a = i, c = 0, p = s[0][0] === "*" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd; for (p.lastIndex = 0, t = t.slice(-1 * e.length + i); (s = p.exec(t)) !== null; ) { if (o = s[1] || s[2] || s[3] || s[4] || s[5] || s[6], !o) continue; if (u = [...o].length, s[3] || s[4]) { a += u; continue; } else if ((s[5] || s[6]) && i % 3 && !((i + u) % 3)) { c += u; continue; } if (a -= u, a > 0) continue; u = Math.min(u, u + a + c); let k = [...s[0]][0].length, h = e.slice(0, i + s.index + k + u); if (Math.min(i, u) % 2) { let f = h.slice(1, -1); return { type: "em", raw: h, text: f, tokens: this.lexer.inlineTokens(f) }; } let R = h.slice(2, -2); return { type: "strong", raw: h, text: R, tokens: this.lexer.inlineTokens(R) }; } } } codespan(e) { let t = this.rules.inline.code.exec(e); if (t) { let n = t[2].replace(this.rules.other.newLineCharGlobal, " "), s = this.rules.other.nonSpaceChar.test(n), r = this.rules.other.startingSpaceChar.test(n) && this.rules.other.endingSpaceChar.test(n); return s && r && (n = n.substring(1, n.length - 1)), { type: "codespan", raw: t[0], text: n }; } } br(e) { let t = this.rules.inline.br.exec(e); if (t) return { type: "br", raw: t[0] }; } del(e, t, n = "") { let s = this.rules.inline.delLDelim.exec(e); if (!s) return; if (!(s[1] || "") || !n || this.rules.inline.punctuation.exec(n)) { let i = [...s[0]].length - 1, o, u, a = i, c = this.rules.inline.delRDelim; for (c.lastIndex = 0, t = t.slice(-1 * e.length + i); (s = c.exec(t)) !== null; ) { if (o = s[1] || s[2] || s[3] || s[4] || s[5] || s[6], !o || (u = [...o].length, u !== i)) continue; if (s[3] || s[4]) { a += u; continue; } if (a -= u, a > 0) continue; u = Math.min(u, u + a); let p = [...s[0]][0].length, k = e.slice(0, i + s.index + p + u), h = k.slice(i, -i); return { type: "del", raw: k, text: h, tokens: this.lexer.inlineTokens(h) }; } } } autolink(e) { let t = this.rules.inline.autolink.exec(e); if (t) { let n, s; return t[2] === "@" ? (n = t[1], s = "mailto:" + n) : (n = t[1], s = n), { type: "link", raw: t[0], text: n, href: s, tokens: [{ type: "text", raw: n, text: n }] }; } } url(e) { let t; if (t = this.rules.inline.url.exec(e)) { let n, s; if (t[2] === "@") n = t[0], s = "mailto:" + n; else { let r; do r = t[0], t[0] = this.rules.inline._backpedal.exec(t[0])?.[0] ?? ""; while (r !== t[0]); n = t[0], t[1] === "www." ? s = "http://" + t[0] : s = t[0]; } return { type: "link", raw: t[0], text: n, href: s, tokens: [{ type: "text", raw: n, text: n }] }; } } inlineText(e) { let t = this.rules.inline.text.exec(e); if (t) { let n = this.lexer.state.inRawBlock; return { type: "text", raw: t[0], text: t[0], escaped: n }; } } }; var x = class l { tokens; options; state; inlineQueue; tokenizer; constructor(e) { this.tokens = [], this.tokens.links = /* @__PURE__ */ Object.create(null), this.options = e || T, this.options.tokenizer = this.options.tokenizer || new w(), this.tokenizer = this.options.tokenizer, this.tokenizer.options = this.options, this.tokenizer.lexer = this, this.inlineQueue = [], this.state = { inLink: false, inRawBlock: false, top: true }; let t = { other: m, block: D.normal, inline: A.normal }; this.options.pedantic ? (t.block = D.pedantic, t.inline = A.pedantic) : this.options.gfm && (t.block = D.gfm, this.options.breaks ? t.inline = A.breaks : t.inline = A.gfm), this.tokenizer.rules = t; } static get rules() { return { block: D, inline: A }; } static lex(e, t) { return new l(t).lex(e); } static lexInline(e, t) { return new l(t).inlineTokens(e); } lex(e) { e = e.replace(m.carriageReturn, ` `), this.blockTokens(e, this.tokens); for (let t = 0; t < this.inlineQueue.length; t++) { let n = this.inlineQueue[t]; this.inlineTokens(n.src, n.tokens); } return this.inlineQueue = [], this.tokens; } blockTokens(e, t = [], n = false) { this.tokenizer.lexer = this, this.options.pedantic && (e = e.replace(m.tabCharGlobal, " ").replace(m.spaceLine, "")); let s = 1 / 0; for (; e; ) { if (e.length < s) s = e.length; else { this.infiniteLoopError(e.charCodeAt(0)); break; } let r; if (this.options.extensions?.block?.some((o) => (r = o.call({ lexer: this }, e, t)) ? (e = e.substring(r.raw.length), t.push(r), true) : false)) continue; if (r = this.tokenizer.space(e)) { e = e.substring(r.raw.length); let o = t.at(-1); r.raw.length === 1 && o !== void 0 ? o.raw += ` ` : t.push(r); continue; } if (r = this.tokenizer.code(e)) { e = e.substring(r.raw.length); let o = t.at(-1); o?.type === "paragraph" || o?.type === "text" ? (o.raw += (o.raw.endsWith(` `) ? "" : ` `) + r.raw, o.text += ` ` + r.text, this.inlineQueue.at(-1).src = o.text) : t.push(r); continue; } if (r = this.tokenizer.fences(e)) { e = e.substring(r.raw.length), t.push(r); continue; } if (r = this.tokenizer.heading(e)) { e = e.substring(r.raw.length), t.push(r); continue; } if (r = this.tokenizer.hr(e)) { e = e.substring(r.raw.length), t.push(r); continue; } if (r = this.tokenizer.blockquote(e)) { e = e.substring(r.raw.length), t.push(r); continue; } if (r = this.tokenizer.list(e)) { e = e.substring(r.raw.length), t.push(r); continue; } if (r = this.tokenizer.html(e)) { e = e.substring(r.raw.length), t.push(r); continue; } if (r = this.tokenizer.def(e)) { e = e.substring(r.raw.length); let o = t.at(-1); o?.type === "paragraph" || o?.type === "text" ? (o.raw += (o.raw.endsWith(` `) ? "" : ` `) + r.raw, o.text += ` ` + r.raw, this.inlineQueue.at(-1).src = o.text) : this.tokens.links[r.tag] || (this.tokens.links[r.tag] = { href: r.href, title: r.title }, t.push(r)); continue; } if (r = this.tokenizer.table(e)) { e = e.substring(r.raw.length), t.push(r); continue; } if (r = this.tokenizer.lheading(e)) { e = e.substring(r.raw.length), t.push(r); continue; } let i = e; if (this.options.extensions?.startBlock) { let o = 1 / 0, u = e.slice(1), a; this.options.extensions.startBlock.forEach((c) => { a = c.call({ lexer: this }, u), typeof a == "number" && a >= 0 && (o = Math.min(o, a)); }), o < 1 / 0 && o >= 0 && (i = e.substring(0, o + 1)); } if (this.state.top && (r = this.tokenizer.paragraph(i))) { let o = t.at(-1); n && o?.type === "paragraph" ? (o.raw += (o.raw.endsWith(` `) ? "" : ` `) + r.raw, o.text += ` ` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = o.text) : t.push(r), n = i.length !== e.length, e = e.substring(r.raw.length); continue; } if (r = this.tokenizer.text(e)) { e = e.substring(r.raw.length); let o = t.at(-1); o?.type === "text" ? (o.raw += (o.raw.endsWith(` `) ? "" : ` `) + r.raw, o.text += ` ` + r.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = o.text) : t.push(r); continue; } if (e) { this.infiniteLoopError(e.charCodeAt(0)); break; } } return this.state.top = true, t; } inline(e, t = []) { return this.inlineQueue.push({ src: e, tokens: t }), t; } inlineTokens(e, t = []) { this.tokenizer.lexer = this; let n = e, s = null; if (this.tokens.links) { let a = Object.keys(this.tokens.links); if (a.length > 0) for (; (s = this.tokenizer.rules.inline.reflinkSearch.exec(n)) !== null; ) a.includes(s[0].slice(s[0].lastIndexOf("[") + 1, -1)) && (n = n.slice(0, s.index) + "[" + "a".repeat(s[0].length - 2) + "]" + n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex)); } for (; (s = this.tokenizer.rules.inline.anyPunctuation.exec(n)) !== null; ) n = n.slice(0, s.index) + "++" + n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex); let r; for (; (s = this.tokenizer.rules.inline.blockSkip.exec(n)) !== null; ) r = s[2] ? s[2].length : 0, n = n.slice(0, s.index + r) + "[" + "a".repeat(s[0].length - r - 2) + "]" + n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex); n = this.options.hooks?.emStrongMask?.call({ lexer: this }, n) ?? n; let i = false, o = "", u = 1 / 0; for (; e; ) { if (e.length < u) u = e.length; else { this.infiniteLoopError(e.charCodeAt(0)); break; } i || (o = ""), i = false; let a; if (this.options.extensions?.inline?.some((p) => (a = p.call({ lexer: this }, e, t)) ? (e = e.substring(a.raw.length), t.push(a), true) : false)) continue; if (a = this.tokenizer.escape(e)) { e = e.substring(a.raw.length), t.push(a); continue; } if (a = this.tokenizer.tag(e)) { e = e.substring(a.raw.length), t.push(a); continue; } if (a = this.tokenizer.link(e)) { e = e.substring(a.raw.length), t.push(a); continue; } if (a = this.tokenizer.reflink(e, this.tokens.links)) { e = e.substring(a.raw.length); let p = t.at(-1); a.type === "text" && p?.type === "text" ? (p.raw += a.raw, p.text += a.text) : t.push(a); continue; } if (a = this.tokenizer.emStrong(e, n, o)) { e = e.substring(a.raw.length), t.push(a); continue; } if (a = this.tokenizer.codespan(e)) { e = e.substring(a.raw.length), t.push(a); continue; } if (a = this.tokenizer.br(e)) { e = e.substring(a.raw.length), t.push(a); continue; } if (a = this.tokenizer.del(e, n, o)) { e = e.substring(a.raw.length), t.push(a); continue; } if (a = this.tokenizer.autolink(e)) { e = e.substring(a.raw.length), t.push(a); continue; } if (!this.state.inLink && (a = this.tokenizer.url(e))) { e = e.substring(a.raw.length), t.push(a); continue; } let c = e; if (this.options.extensions?.startInline) { let p = 1 / 0, k = e.slice(1), h; this.options.extensions.startInline.forEach((R) => { h = R.call({ lexer: this }, k), typeof h == "number" && h >= 0 && (p = Math.min(p, h)); }), p < 1 / 0 && p >= 0 && (c = e.substring(0, p + 1)); } if (a = this.tokenizer.inlineText(c)) { e = e.substring(a.raw.length), a.raw.slice(-1) !== "_" && (o = a.raw.slice(-1)), i = true; let p = t.at(-1); p?.type === "text" ? (p.raw += a.raw, p.text += a.text) : t.push(a); continue; } if (e) { this.infiniteLoopError(e.charCodeAt(0)); break; } } return t; } infiniteLoopError(e) { let t = "Infinite loop on byte: " + e; if (this.options.silent) console.error(t); else throw new Error(t); } }; var y = class { options; parser; constructor(e) { this.options = e || T; } space(e) { return ""; } code({ text: e, lang: t, escaped: n }) { let s = (t || "").match(m.notSpaceStart)?.[0], r = e.replace(m.endingNewline, "") + ` `; return s ? '
' + (n ? r : O(r, true)) + `
` : "
" + (n ? r : O(r, true)) + `
`; } blockquote({ tokens: e }) { return `
${this.parser.parse(e)}
`; } html({ text: e }) { return e; } def(e) { return ""; } heading({ tokens: e, depth: t }) { return `${this.parser.parseInline(e)} `; } hr(e) { return `
`; } list(e) { let t = e.ordered, n = e.start, s = ""; for (let o = 0; o < e.items.length; o++) { let u = e.items[o]; s += this.listitem(u); } let r = t ? "ol" : "ul", i = t && n !== 1 ? ' start="' + n + '"' : ""; return "<" + r + i + `> ` + s + " `; } listitem(e) { return `
  • ${this.parser.parse(e.tokens)}
  • `; } checkbox({ checked: e }) { return " '; } paragraph({ tokens: e }) { return `

    ${this.parser.parseInline(e)}

    `; } table(e) { let t = "", n = ""; for (let r = 0; r < e.header.length; r++) n += this.tablecell(e.header[r]); t += this.tablerow({ text: n }); let s = ""; for (let r = 0; r < e.rows.length; r++) { let i = e.rows[r]; n = ""; for (let o = 0; o < i.length; o++) n += this.tablecell(i[o]); s += this.tablerow({ text: n }); } return s && (s = `${s}`), ` ` + t + ` ` + s + `
    `; } tablerow({ text: e }) { return ` ${e} `; } tablecell(e) { let t = this.parser.parseInline(e.tokens), n = e.header ? "th" : "td"; return (e.align ? `<${n} align="${e.align}">` : `<${n}>`) + t + ` `; } strong({ tokens: e }) { return `${this.parser.parseInline(e)}`; } em({ tokens: e }) { return `${this.parser.parseInline(e)}`; } codespan({ text: e }) { return `${O(e, true)}`; } br(e) { return "
    "; } del({ tokens: e }) { return `${this.parser.parseInline(e)}`; } link({ href: e, title: t, tokens: n }) { let s = this.parser.parseInline(n), r = V(e); if (r === null) return s; e = r; let i = '
    ", i; } image({ href: e, title: t, text: n, tokens: s }) { s && (n = this.parser.parseInline(s, this.parser.textRenderer)); let r = V(e); if (r === null) return O(n); e = r; let i = `${O(n)} { let o = r[i].flat(1 / 0); n = n.concat(this.walkTokens(o, t)); }) : r.tokens && (n = n.concat(this.walkTokens(r.tokens, t))); } } return n; } use(...e) { let t = this.defaults.extensions || { renderers: {}, childTokens: {} }; return e.forEach((n) => { let s = { ...n }; if (s.async = this.defaults.async || s.async || false, n.extensions && (n.extensions.forEach((r) => { if (!r.name) throw new Error("extension name required"); if ("renderer" in r) { let i = t.renderers[r.name]; i ? t.renderers[r.name] = function(...o) { let u = r.renderer.apply(this, o); return u === false && (u = i.apply(this, o)), u; } : t.renderers[r.name] = r.renderer; } if ("tokenizer" in r) { if (!r.level || r.level !== "block" && r.level !== "inline") throw new Error("extension level must be 'block' or 'inline'"); let i = t[r.level]; i ? i.unshift(r.tokenizer) : t[r.level] = [r.tokenizer], r.start && (r.level === "block" ? t.startBlock ? t.startBlock.push(r.start) : t.startBlock = [r.start] : r.level === "inline" && (t.startInline ? t.startInline.push(r.start) : t.startInline = [r.start])); } "childTokens" in r && r.childTokens && (t.childTokens[r.name] = r.childTokens); }), s.extensions = t), n.renderer) { let r = this.defaults.renderer || new y(this.defaults); for (let i in n.renderer) { if (!(i in r)) throw new Error(`renderer '${i}' does not exist`); if (["options", "parser"].includes(i)) continue; let o = i, u = n.renderer[o], a = r[o]; r[o] = (...c) => { let p = u.apply(r, c); return p === false && (p = a.apply(r, c)), p || ""; }; } s.renderer = r; } if (n.tokenizer) { let r = this.defaults.tokenizer || new w(this.defaults); for (let i in n.tokenizer) { if (!(i in r)) throw new Error(`tokenizer '${i}' does not exist`); if (["options", "rules", "lexer"].includes(i)) continue; let o = i, u = n.tokenizer[o], a = r[o]; r[o] = (...c) => { let p = u.apply(r, c); return p === false && (p = a.apply(r, c)), p; }; } s.tokenizer = r; } if (n.hooks) { let r = this.defaults.hooks || new P(); for (let i in n.hooks) { if (!(i in r)) throw new Error(`hook '${i}' does not exist`); if (["options", "block"].includes(i)) continue; let o = i, u = n.hooks[o], a = r[o]; P.passThroughHooks.has(i) ? r[o] = (c) => { if (this.defaults.async && P.passThroughHooksRespectAsync.has(i)) return (async () => { let k = await u.call(r, c); return a.call(r, k); })(); let p = u.call(r, c); return a.call(r, p); } : r[o] = (...c) => { if (this.defaults.async) return (async () => { let k = await u.apply(r, c); return k === false && (k = await a.apply(r, c)), k; })(); let p = u.apply(r, c); return p === false && (p = a.apply(r, c)), p; }; } s.hooks = r; } if (n.walkTokens) { let r = this.defaults.walkTokens, i = n.walkTokens; s.walkTokens = function(o) { let u = []; return u.push(i.call(this, o)), r && (u = u.concat(r.call(this, o))), u; }; } this.defaults = { ...this.defaults, ...s }; }), this; } setOptions(e) { return this.defaults = { ...this.defaults, ...e }, this; } lexer(e, t) { return x.lex(e, t ?? this.defaults); } parser(e, t) { return b.parse(e, t ?? this.defaults); } parseMarkdown(e) { return (n, s) => { let r = { ...s }, i = { ...this.defaults, ...r }, o = this.onError(!!i.silent, !!i.async); if (this.defaults.async === true && r.async === false) return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.")); if (typeof n > "u" || n === null) return o(new Error("marked(): input parameter is undefined or null")); if (typeof n != "string") return o(new Error("marked(): input parameter is of type " + Object.prototype.toString.call(n) + ", string expected")); if (i.hooks && (i.hooks.options = i, i.hooks.block = e), i.async) return (async () => { let u = i.hooks ? await i.hooks.preprocess(n) : n, c = await (i.hooks ? await i.hooks.provideLexer(e) : e ? x.lex : x.lexInline)(u, i), p = i.hooks ? await i.hooks.processAllTokens(c) : c; i.walkTokens && await Promise.all(this.walkTokens(p, i.walkTokens)); let h = await (i.hooks ? await i.hooks.provideParser(e) : e ? b.parse : b.parseInline)(p, i); return i.hooks ? await i.hooks.postprocess(h) : h; })().catch(o); try { i.hooks && (n = i.hooks.preprocess(n)); let a = (i.hooks ? i.hooks.provideLexer(e) : e ? x.lex : x.lexInline)(n, i); i.hooks && (a = i.hooks.processAllTokens(a)), i.walkTokens && this.walkTokens(a, i.walkTokens); let p = (i.hooks ? i.hooks.provideParser(e) : e ? b.parse : b.parseInline)(a, i); return i.hooks && (p = i.hooks.postprocess(p)), p; } catch (u) { return o(u); } }; } onError(e, t) { return (n) => { if (n.message += ` Please report this to https://github.com/markedjs/marked.`, e) { let s = "

    An error occurred:

    " + O(n.message + "", true) + "
    "; return t ? Promise.resolve(s) : s; } if (t) return Promise.reject(n); throw n; }; } }; var z = new q(); function g(l3, e) { return z.parse(l3, e); } g.options = g.setOptions = function(l3) { return z.setOptions(l3), g.defaults = z.defaults, N(g.defaults), g; }; g.getDefaults = M; g.defaults = T; g.use = function(...l3) { return z.use(...l3), g.defaults = z.defaults, N(g.defaults), g; }; g.walkTokens = function(l3, e) { return z.walkTokens(l3, e); }; g.parseInline = z.parseInline; g.Parser = b; g.parser = b.parse; g.Renderer = y; g.TextRenderer = L; g.Lexer = x; g.lexer = x.lex; g.Tokenizer = w; g.Hooks = P; g.parse = g; var Ft = g.options; var Ut = g.setOptions; var Kt = g.use; var Wt = g.walkTokens; var Xt = g.parseInline; var Vt = b.parse; var Yt = x.lex; // scripts/check.mjs var frontmatterFence = /^\uFEFF?---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/; var namePattern = /^[a-z0-9]+(?:-[a-z0-9]+)*$/; var scriptPattern = /\.(?:mjs|cjs|js|ts|sh|bash|nu|py|ps1|cmd|bat)$/i; function filesUnder(dir) { return readdirSync(dir, { withFileTypes: true }).flatMap((entry) => { if (entry.name === "node_modules" || entry.name === ".git") return []; const path = join(dir, entry.name); if (entry.isDirectory()) return filesUnder(path); return entry.isFile() ? [path] : []; }); } function checkSkill(directory) { const root = resolve(directory); if (!statSync(root).isDirectory()) throw new Error("Expected a skill directory"); const skill = join(root, "SKILL.md"); const text = readFileSync(skill, "utf8"); const issues = []; const add = (path, code, message) => issues.push({ path: relative(root, path).split("\\").join("/"), code, message }); const fence = text.match(frontmatterFence); if (!fence) { add( skill, "frontmatter.fence", "Expected opening and closing YAML frontmatter fences" ); } else { let data; try { data = load(fence[1]); } catch { add( skill, "frontmatter.yaml", "Invalid YAML frontmatter, keys, or aliases" ); } if (data !== void 0) { if (!data || typeof data !== "object" || Array.isArray(data)) { add(skill, "frontmatter.mapping", "Frontmatter must be a YAML mapping"); } else { const { name, description } = data; if (typeof name !== "string" || name.length > 64 || !namePattern.test(name)) { add( skill, "name.invalid", "Name must be 1-64 lowercase letters/digits with single internal hyphens" ); } else if (name !== basename(root)) { add( skill, "name.directory", "Name must match directory for Agent Skills portability" ); } if (typeof description !== "string" || !description.trim() || description.length > 1024) { add( skill, "description.invalid", "Description must be a non-empty string of at most 1024 characters" ); } const invocation = data["disable-model-invocation"]; if (invocation !== void 0 && typeof invocation !== "boolean") { add( skill, "invocation.invalid", "disable-model-invocation must be a boolean when present" ); } } } } const files = filesUnder(root).sort(); for (const file of files.filter((path) => path.endsWith(".md"))) { const body = readFileSync(file, "utf8").replace(frontmatterFence, ""); g.walkTokens(g.lexer(body), (token) => { if (token.type !== "link" && token.type !== "image") return; const href = token.href; if (!href || /^[a-z][a-z\d+.-]*:|^[#/?\\]/i.test(href) || isAbsolute(href)) return; let target; try { target = decodeURIComponent(href.split(/[?#]/, 1)[0]); } catch { add(file, "link.encoding", "Local link has invalid percent encoding"); return; } if (!existsSync(resolve(dirname(file), target))) { add(file, "link.missing", `Missing local link target: ${href}`); } }); } const scripted = files.some((file) => scriptPattern.test(file)); const packageFile = join(root, "package.json"); if (!existsSync(packageFile)) { if (scripted) add( packageFile, "package.missing", "Scripted skills require package.json" ); } else { let manifest; try { manifest = JSON.parse(readFileSync(packageFile, "utf8")); } catch { manifest = null; } if (!manifest || typeof manifest !== "object" || Array.isArray(manifest)) { add( packageFile, "package.json", "Expected a JSON object in package.json" ); } else if (scripted && (typeof manifest.scripts?.test !== "string" || !/^node\s+--test(?:\s|$)/.test(manifest.scripts.test))) { add( packageFile, "tests.command", "scripts.test must invoke node --test directly" ); } } if (scripted && !files.some((file) => file.endsWith(".test.mjs"))) { add( packageFile, "tests.missing", "Scripted skills require at least one .test.mjs file" ); } return { skill: root, ok: issues.length === 0, issues }; } if (process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url)) { try { if (process.argv.length !== 3) throw new Error("Usage: node scripts/check.mjs "); const result = checkSkill(process.argv[2]); console.log(JSON.stringify(result, null, 2)); process.exitCode = result.ok ? 0 : 1; } catch (error) { console.log(JSON.stringify({ error: error.message })); process.exitCode = 2; } } export { checkSkill }; /*! Bundled license information: js-yaml/dist/js-yaml.mjs: (*! js-yaml 5.4.1 https://github.com/nodeca/js-yaml @license MIT *) */