summaryrefslogtreecommitdiff
path: root/themes/blowfish/assets/lib/mermaid/utils-d5eeff82.js
diff options
context:
space:
mode:
authorChristoph Cullmann <cullmann@kde.org>2024-04-28 17:33:09 +0200
committerChristoph Cullmann <cullmann@kde.org>2024-04-28 17:33:09 +0200
commite77051ccc4b47951bfa4fde2be436b1bb2fb113b (patch)
treef0b75ee3521da9c8cd39dac4359212348f70e4e8 /themes/blowfish/assets/lib/mermaid/utils-d5eeff82.js
parent4b355837824ac2422d371acef790f0f4249255c7 (diff)
use https://github.com/nunocoracao/blowfish.git
Diffstat (limited to 'themes/blowfish/assets/lib/mermaid/utils-d5eeff82.js')
-rw-r--r--themes/blowfish/assets/lib/mermaid/utils-d5eeff82.js2889
1 files changed, 2889 insertions, 0 deletions
diff --git a/themes/blowfish/assets/lib/mermaid/utils-d5eeff82.js b/themes/blowfish/assets/lib/mermaid/utils-d5eeff82.js
new file mode 100644
index 0000000..5cf642f
--- /dev/null
+++ b/themes/blowfish/assets/lib/mermaid/utils-d5eeff82.js
@@ -0,0 +1,2889 @@
+import { sanitizeUrl } from "@braintree/sanitize-url";
+import { select, curveBasis, curveBasisClosed, curveBasisOpen, curveBumpX, curveBumpY, curveBundle, curveCardinalClosed, curveCardinalOpen, curveCardinal, curveCatmullRomClosed, curveCatmullRomOpen, curveCatmullRom, curveLinear, curveLinearClosed, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore } from "d3";
+import { l as log$1, a as addDirective, s as setLogLevel$1, g as getConfig$1, b as sanitizeText$1, c as assignWithDepth, d as common$1, e as configKeys } from "./config-389b86ff.js";
+import { s as setupGraphViewbox$1 } from "./setupGraphViewbox-e35e4124.js";
+import { c as commonDb } from "./commonDb-2ace122b.js";
+import memoize from "lodash-es/memoize.js";
+/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */
+function isNothing(subject) {
+ return typeof subject === "undefined" || subject === null;
+}
+function isObject(subject) {
+ return typeof subject === "object" && subject !== null;
+}
+function toArray(sequence) {
+ if (Array.isArray(sequence))
+ return sequence;
+ else if (isNothing(sequence))
+ return [];
+ return [sequence];
+}
+function extend(target, source) {
+ var index, length, key, sourceKeys;
+ if (source) {
+ sourceKeys = Object.keys(source);
+ for (index = 0, length = sourceKeys.length; index < length; index += 1) {
+ key = sourceKeys[index];
+ target[key] = source[key];
+ }
+ }
+ return target;
+}
+function repeat(string, count) {
+ var result = "", cycle;
+ for (cycle = 0; cycle < count; cycle += 1) {
+ result += string;
+ }
+ return result;
+}
+function isNegativeZero(number) {
+ return number === 0 && Number.NEGATIVE_INFINITY === 1 / number;
+}
+var isNothing_1 = isNothing;
+var isObject_1 = isObject;
+var toArray_1 = toArray;
+var repeat_1 = repeat;
+var isNegativeZero_1 = isNegativeZero;
+var extend_1 = extend;
+var common = {
+ isNothing: isNothing_1,
+ isObject: isObject_1,
+ toArray: toArray_1,
+ repeat: repeat_1,
+ isNegativeZero: isNegativeZero_1,
+ extend: extend_1
+};
+function formatError(exception2, compact) {
+ var where = "", message = exception2.reason || "(unknown reason)";
+ if (!exception2.mark)
+ return message;
+ if (exception2.mark.name) {
+ where += 'in "' + exception2.mark.name + '" ';
+ }
+ where += "(" + (exception2.mark.line + 1) + ":" + (exception2.mark.column + 1) + ")";
+ if (!compact && exception2.mark.snippet) {
+ where += "\n\n" + exception2.mark.snippet;
+ }
+ return message + " " + where;
+}
+function YAMLException$1(reason, mark) {
+ Error.call(this);
+ this.name = "YAMLException";
+ this.reason = reason;
+ this.mark = mark;
+ this.message = formatError(this, false);
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, this.constructor);
+ } else {
+ this.stack = new Error().stack || "";
+ }
+}
+YAMLException$1.prototype = Object.create(Error.prototype);
+YAMLException$1.prototype.constructor = YAMLException$1;
+YAMLException$1.prototype.toString = function toString(compact) {
+ return this.name + ": " + formatError(this, compact);
+};
+var exception = YAMLException$1;
+function getLine(buffer, lineStart, lineEnd, position, maxLineLength) {
+ var head = "";
+ var tail = "";
+ var 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, "→") + tail,
+ pos: position - lineStart + head.length
+ // relative position
+ };
+}
+function padStart(string, max) {
+ return common.repeat(" ", max - string.length) + string;
+}
+function makeSnippet(mark, options) {
+ options = Object.create(options || null);
+ if (!mark.buffer)
+ return null;
+ if (!options.maxLength)
+ options.maxLength = 79;
+ if (typeof options.indent !== "number")
+ options.indent = 1;
+ if (typeof options.linesBefore !== "number")
+ options.linesBefore = 3;
+ if (typeof options.linesAfter !== "number")
+ options.linesAfter = 2;
+ var re = /\r?\n|\r|\0/g;
+ var lineStarts = [0];
+ var lineEnds = [];
+ var match;
+ var 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;
+ var result = "", i, line;
+ var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;
+ var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);
+ for (i = 1; i <= options.linesBefore; i++) {
+ if (foundLineNo - i < 0)
+ break;
+ line = getLine(
+ mark.buffer,
+ lineStarts[foundLineNo - i],
+ lineEnds[foundLineNo - i],
+ mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]),
+ maxLineLength
+ );
+ result = common.repeat(" ", options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + " | " + line.str + "\n" + result;
+ }
+ line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);
+ result += common.repeat(" ", options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + " | " + line.str + "\n";
+ result += common.repeat("-", options.indent + lineNoLength + 3 + line.pos) + "^\n";
+ for (i = 1; i <= options.linesAfter; i++) {
+ if (foundLineNo + i >= lineEnds.length)
+ break;
+ line = getLine(
+ mark.buffer,
+ lineStarts[foundLineNo + i],
+ lineEnds[foundLineNo + i],
+ mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]),
+ maxLineLength
+ );
+ result += common.repeat(" ", options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + " | " + line.str + "\n";
+ }
+ return result.replace(/\n$/, "");
+}
+var snippet = makeSnippet;
+var TYPE_CONSTRUCTOR_OPTIONS = [
+ "kind",
+ "multi",
+ "resolve",
+ "construct",
+ "instanceOf",
+ "predicate",
+ "represent",
+ "representName",
+ "defaultStyle",
+ "styleAliases"
+];
+var YAML_NODE_KINDS = [
+ "scalar",
+ "sequence",
+ "mapping"
+];
+function compileStyleAliases(map2) {
+ var result = {};
+ if (map2 !== null) {
+ Object.keys(map2).forEach(function(style) {
+ map2[style].forEach(function(alias) {
+ result[String(alias)] = style;
+ });
+ });
+ }
+ return result;
+}
+function Type$1(tag, options) {
+ options = options || {};
+ Object.keys(options).forEach(function(name) {
+ if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {
+ throw new exception('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.');
+ }
+ });
+ this.options = options;
+ this.tag = tag;
+ this.kind = options["kind"] || null;
+ this.resolve = options["resolve"] || function() {
+ return true;
+ };
+ this.construct = options["construct"] || function(data) {
+ return data;
+ };
+ this.instanceOf = options["instanceOf"] || null;
+ this.predicate = options["predicate"] || null;
+ this.represent = options["represent"] || null;
+ this.representName = options["representName"] || null;
+ this.defaultStyle = options["defaultStyle"] || null;
+ this.multi = options["multi"] || false;
+ this.styleAliases = compileStyleAliases(options["styleAliases"] || null);
+ if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {
+ throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.');
+ }
+}
+var type = Type$1;
+function compileList(schema2, name) {
+ var result = [];
+ schema2[name].forEach(function(currentType) {
+ var newIndex = result.length;
+ result.forEach(function(previousType, previousIndex) {
+ if (previousType.tag === currentType.tag && previousType.kind === currentType.kind && previousType.multi === currentType.multi) {
+ newIndex = previousIndex;
+ }
+ });
+ result[newIndex] = currentType;
+ });
+ return result;
+}
+function compileMap() {
+ var result = {
+ scalar: {},
+ sequence: {},
+ mapping: {},
+ fallback: {},
+ multi: {
+ scalar: [],
+ sequence: [],
+ mapping: [],
+ fallback: []
+ }
+ }, index, length;
+ function collectType(type2) {
+ if (type2.multi) {
+ result.multi[type2.kind].push(type2);
+ result.multi["fallback"].push(type2);
+ } else {
+ result[type2.kind][type2.tag] = result["fallback"][type2.tag] = type2;
+ }
+ }
+ for (index = 0, length = arguments.length; index < length; index += 1) {
+ arguments[index].forEach(collectType);
+ }
+ return result;
+}
+function Schema$1(definition) {
+ return this.extend(definition);
+}
+Schema$1.prototype.extend = function extend2(definition) {
+ var implicit = [];
+ var explicit = [];
+ if (definition instanceof type) {
+ explicit.push(definition);
+ } else if (Array.isArray(definition)) {
+ explicit = explicit.concat(definition);
+ } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {
+ if (definition.implicit)
+ implicit = implicit.concat(definition.implicit);
+ if (definition.explicit)
+ explicit = explicit.concat(definition.explicit);
+ } else {
+ throw new exception("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");
+ }
+ implicit.forEach(function(type$1) {
+ if (!(type$1 instanceof type)) {
+ throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object.");
+ }
+ if (type$1.loadKind && type$1.loadKind !== "scalar") {
+ throw new exception("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");
+ }
+ if (type$1.multi) {
+ throw new exception("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.");
+ }
+ });
+ explicit.forEach(function(type$1) {
+ if (!(type$1 instanceof type)) {
+ throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object.");
+ }
+ });
+ var result = Object.create(Schema$1.prototype);
+ result.implicit = (this.implicit || []).concat(implicit);
+ result.explicit = (this.explicit || []).concat(explicit);
+ result.compiledImplicit = compileList(result, "implicit");
+ result.compiledExplicit = compileList(result, "explicit");
+ result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);
+ return result;
+};
+var schema = Schema$1;
+var str = new type("tag:yaml.org,2002:str", {
+ kind: "scalar",
+ construct: function(data) {
+ return data !== null ? data : "";
+ }
+});
+var seq = new type("tag:yaml.org,2002:seq", {
+ kind: "sequence",
+ construct: function(data) {
+ return data !== null ? data : [];
+ }
+});
+var map = new type("tag:yaml.org,2002:map", {
+ kind: "mapping",
+ construct: function(data) {
+ return data !== null ? data : {};
+ }
+});
+var failsafe = new schema({
+ explicit: [
+ str,
+ seq,
+ map
+ ]
+});
+function resolveYamlNull(data) {
+ if (data === null)
+ return true;
+ var max = data.length;
+ return max === 1 && data === "~" || max === 4 && (data === "null" || data === "Null" || data === "NULL");
+}
+function constructYamlNull() {
+ return null;
+}
+function isNull(object) {
+ return object === null;
+}
+var _null = new type("tag:yaml.org,2002:null", {
+ kind: "scalar",
+ resolve: resolveYamlNull,
+ construct: constructYamlNull,
+ predicate: isNull,
+ represent: {
+ canonical: function() {
+ return "~";
+ },
+ lowercase: function() {
+ return "null";
+ },
+ uppercase: function() {
+ return "NULL";
+ },
+ camelcase: function() {
+ return "Null";
+ },
+ empty: function() {
+ return "";
+ }
+ },
+ defaultStyle: "lowercase"
+});
+function resolveYamlBoolean(data) {
+ if (data === null)
+ return false;
+ var max = data.length;
+ return max === 4 && (data === "true" || data === "True" || data === "TRUE") || max === 5 && (data === "false" || data === "False" || data === "FALSE");
+}
+function constructYamlBoolean(data) {
+ return data === "true" || data === "True" || data === "TRUE";
+}
+function isBoolean(object) {
+ return Object.prototype.toString.call(object) === "[object Boolean]";
+}
+var bool = new type("tag:yaml.org,2002:bool", {
+ kind: "scalar",
+ resolve: resolveYamlBoolean,
+ construct: constructYamlBoolean,
+ predicate: isBoolean,
+ represent: {
+ lowercase: function(object) {
+ return object ? "true" : "false";
+ },
+ uppercase: function(object) {
+ return object ? "TRUE" : "FALSE";
+ },
+ camelcase: function(object) {
+ return object ? "True" : "False";
+ }
+ },
+ defaultStyle: "lowercase"
+});
+function isHexCode(c) {
+ return 48 <= c && c <= 57 || 65 <= c && c <= 70 || 97 <= c && c <= 102;
+}
+function isOctCode(c) {
+ return 48 <= c && c <= 55;
+}
+function isDecCode(c) {
+ return 48 <= c && c <= 57;
+}
+function resolveYamlInteger(data) {
+ if (data === null)
+ return false;
+ var max = data.length, index = 0, hasDigits = false, ch;
+ if (!max)
+ return false;
+ ch = data[index];
+ if (ch === "-" || ch === "+") {
+ ch = data[++index];
+ }
+ if (ch === "0") {
+ if (index + 1 === max)
+ return true;
+ ch = data[++index];
+ if (ch === "b") {
+ index++;
+ for (; index < max; index++) {
+ ch = data[index];
+ if (ch === "_")
+ continue;
+ if (ch !== "0" && ch !== "1")
+ return false;
+ hasDigits = true;
+ }
+ return hasDigits && ch !== "_";
+ }
+ if (ch === "x") {
+ index++;
+ for (; index < max; index++) {
+ ch = data[index];
+ if (ch === "_")
+ continue;
+ if (!isHexCode(data.charCodeAt(index)))
+ return false;
+ hasDigits = true;
+ }
+ return hasDigits && ch !== "_";
+ }
+ if (ch === "o") {
+ index++;
+ for (; index < max; index++) {
+ ch = data[index];
+ if (ch === "_")
+ continue;
+ if (!isOctCode(data.charCodeAt(index)))
+ return false;
+ hasDigits = true;
+ }
+ return hasDigits && ch !== "_";
+ }
+ }
+ if (ch === "_")
+ return false;
+ for (; index < max; index++) {
+ ch = data[index];
+ if (ch === "_")
+ continue;
+ if (!isDecCode(data.charCodeAt(index))) {
+ return false;
+ }
+ hasDigits = true;
+ }
+ if (!hasDigits || ch === "_")
+ return false;
+ return true;
+}
+function constructYamlInteger(data) {
+ var value = data, sign = 1, ch;
+ if (value.indexOf("_") !== -1) {
+ value = value.replace(/_/g, "");
+ }
+ ch = value[0];
+ if (ch === "-" || ch === "+") {
+ if (ch === "-")
+ sign = -1;
+ value = value.slice(1);
+ ch = value[0];
+ }
+ if (value === "0")
+ return 0;
+ if (ch === "0") {
+ if (value[1] === "b")
+ return sign * parseInt(value.slice(2), 2);
+ if (value[1] === "x")
+ return sign * parseInt(value.slice(2), 16);
+ if (value[1] === "o")
+ return sign * parseInt(value.slice(2), 8);
+ }
+ return sign * parseInt(value, 10);
+}
+function isInteger(object) {
+ return Object.prototype.toString.call(object) === "[object Number]" && (object % 1 === 0 && !common.isNegativeZero(object));
+}
+var int = new type("tag:yaml.org,2002:int", {
+ kind: "scalar",
+ resolve: resolveYamlInteger,
+ construct: constructYamlInteger,
+ predicate: isInteger,
+ represent: {
+ binary: function(obj) {
+ return obj >= 0 ? "0b" + obj.toString(2) : "-0b" + obj.toString(2).slice(1);
+ },
+ octal: function(obj) {
+ return obj >= 0 ? "0o" + obj.toString(8) : "-0o" + obj.toString(8).slice(1);
+ },
+ decimal: function(obj) {
+ return obj.toString(10);
+ },
+ /* eslint-disable max-len */
+ hexadecimal: function(obj) {
+ return obj >= 0 ? "0x" + obj.toString(16).toUpperCase() : "-0x" + obj.toString(16).toUpperCase().slice(1);
+ }
+ },
+ defaultStyle: "decimal",
+ styleAliases: {
+ binary: [2, "bin"],
+ octal: [8, "oct"],
+ decimal: [10, "dec"],
+ hexadecimal: [16, "hex"]
+ }
+});
+var YAML_FLOAT_PATTERN = new RegExp(
+ // 2.5e4, 2.5 and integers
+ "^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"
+);
+function resolveYamlFloat(data) {
+ if (data === null)
+ return false;
+ if (!YAML_FLOAT_PATTERN.test(data) || // Quick hack to not allow integers end with `_`
+ // Probably should update regexp & check speed
+ data[data.length - 1] === "_") {
+ return false;
+ }
+ return true;
+}
+function constructYamlFloat(data) {
+ var value, sign;
+ value = data.replace(/_/g, "").toLowerCase();
+ sign = value[0] === "-" ? -1 : 1;
+ if ("+-".indexOf(value[0]) >= 0) {
+ value = value.slice(1);
+ }
+ if (value === ".inf") {
+ return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;
+ } else if (value === ".nan") {
+ return NaN;
+ }
+ return sign * parseFloat(value, 10);
+}
+var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;
+function representYamlFloat(object, style) {
+ var res;
+ if (isNaN(object)) {
+ switch (style) {
+ case "lowercase":
+ return ".nan";
+ case "uppercase":
+ return ".NAN";
+ case "camelcase":
+ return ".NaN";
+ }
+ } else if (Number.POSITIVE_INFINITY === object) {
+ switch (style) {
+ case "lowercase":
+ return ".inf";
+ case "uppercase":
+ return ".INF";
+ case "camelcase":
+ return ".Inf";
+ }
+ } else if (Number.NEGATIVE_INFINITY === object) {
+ switch (style) {
+ case "lowercase":
+ return "-.inf";
+ case "uppercase":
+ return "-.INF";
+ case "camelcase":
+ return "-.Inf";
+ }
+ } else if (common.isNegativeZero(object)) {
+ return "-0.0";
+ }
+ res = object.toString(10);
+ return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace("e", ".e") : res;
+}
+function isFloat(object) {
+ return Object.prototype.toString.call(object) === "[object Number]" && (object % 1 !== 0 || common.isNegativeZero(object));
+}
+var float = new type("tag:yaml.org,2002:float", {
+ kind: "scalar",
+ resolve: resolveYamlFloat,
+ construct: constructYamlFloat,
+ predicate: isFloat,
+ represent: representYamlFloat,
+ defaultStyle: "lowercase"
+});
+var json = failsafe.extend({
+ implicit: [
+ _null,
+ bool,
+ int,
+ float
+ ]
+});
+var core = json;
+var YAML_DATE_REGEXP = new RegExp(
+ "^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"
+);
+var YAML_TIMESTAMP_REGEXP = 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 resolveYamlTimestamp(data) {
+ if (data === null)
+ return false;
+ if (YAML_DATE_REGEXP.exec(data) !== null)
+ return true;
+ if (YAML_TIMESTAMP_REGEXP.exec(data) !== null)
+ return true;
+ return false;
+}
+function constructYamlTimestamp(data) {
+ var match, year, month, day, hour, minute, second, fraction = 0, delta = null, tz_hour, tz_minute, date;
+ match = YAML_DATE_REGEXP.exec(data);
+ if (match === null)
+ match = YAML_TIMESTAMP_REGEXP.exec(data);
+ if (match === null)
+ throw new Error("Date resolve error");
+ year = +match[1];
+ month = +match[2] - 1;
+ day = +match[3];
+ if (!match[4]) {
+ return new Date(Date.UTC(year, month, day));
+ }
+ hour = +match[4];
+ minute = +match[5];
+ second = +match[6];
+ if (match[7]) {
+ fraction = match[7].slice(0, 3);
+ while (fraction.length < 3) {
+ fraction += "0";
+ }
+ fraction = +fraction;
+ }
+ if (match[9]) {
+ tz_hour = +match[10];
+ tz_minute = +(match[11] || 0);
+ delta = (tz_hour * 60 + tz_minute) * 6e4;
+ if (match[9] === "-")
+ delta = -delta;
+ }
+ date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));
+ if (delta)
+ date.setTime(date.getTime() - delta);
+ return date;
+}
+function representYamlTimestamp(object) {
+ return object.toISOString();
+}
+var timestamp = new type("tag:yaml.org,2002:timestamp", {
+ kind: "scalar",
+ resolve: resolveYamlTimestamp,
+ construct: constructYamlTimestamp,
+ instanceOf: Date,
+ represent: representYamlTimestamp
+});
+function resolveYamlMerge(data) {
+ return data === "<<" || data === null;
+}
+var merge = new type("tag:yaml.org,2002:merge", {
+ kind: "scalar",
+ resolve: resolveYamlMerge
+});
+var BASE64_MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";
+function resolveYamlBinary(data) {
+ if (data === null)
+ return false;
+ var code, idx, bitlen = 0, max = data.length, map2 = BASE64_MAP;
+ for (idx = 0; idx < max; idx++) {
+ code = map2.indexOf(data.charAt(idx));
+ if (code > 64)
+ continue;
+ if (code < 0)
+ return false;
+ bitlen += 6;
+ }
+ return bitlen % 8 === 0;
+}
+function constructYamlBinary(data) {
+ var idx, tailbits, input = data.replace(/[\r\n=]/g, ""), max = input.length, map2 = BASE64_MAP, bits = 0, result = [];
+ for (idx = 0; idx < max; idx++) {
+ if (idx % 4 === 0 && idx) {
+ result.push(bits >> 16 & 255);
+ result.push(bits >> 8 & 255);
+ result.push(bits & 255);
+ }
+ bits = bits << 6 | map2.indexOf(input.charAt(idx));
+ }
+ tailbits = max % 4 * 6;
+ if (tailbits === 0) {
+ result.push(bits >> 16 & 255);
+ result.push(bits >> 8 & 255);
+ result.push(bits & 255);
+ } else if (tailbits === 18) {
+ result.push(bits >> 10 & 255);
+ result.push(bits >> 2 & 255);
+ } else if (tailbits === 12) {
+ result.push(bits >> 4 & 255);
+ }
+ return new Uint8Array(result);
+}
+function representYamlBinary(object) {
+ var result = "", bits = 0, idx, tail, max = object.length, map2 = BASE64_MAP;
+ for (idx = 0; idx < max; idx++) {
+ if (idx % 3 === 0 && idx) {
+ result += map2[bits >> 18 & 63];
+ result += map2[bits >> 12 & 63];
+ result += map2[bits >> 6 & 63];
+ result += map2[bits & 63];
+ }
+ bits = (bits << 8) + object[idx];
+ }
+ tail = max % 3;
+ if (tail === 0) {
+ result += map2[bits >> 18 & 63];
+ result += map2[bits >> 12 & 63];
+ result += map2[bits >> 6 & 63];
+ result += map2[bits & 63];
+ } else if (tail === 2) {
+ result += map2[bits >> 10 & 63];
+ result += map2[bits >> 4 & 63];
+ result += map2[bits << 2 & 63];
+ result += map2[64];
+ } else if (tail === 1) {
+ result += map2[bits >> 2 & 63];
+ result += map2[bits << 4 & 63];
+ result += map2[64];
+ result += map2[64];
+ }
+ return result;
+}
+function isBinary(obj) {
+ return Object.prototype.toString.call(obj) === "[object Uint8Array]";
+}
+var binary = new type("tag:yaml.org,2002:binary", {
+ kind: "scalar",
+ resolve: resolveYamlBinary,
+ construct: constructYamlBinary,
+ predicate: isBinary,
+ represent: representYamlBinary
+});
+var _hasOwnProperty$3 = Object.prototype.hasOwnProperty;
+var _toString$2 = Object.prototype.toString;
+function resolveYamlOmap(data) {
+ if (data === null)
+ return true;
+ var objectKeys = [], index, length, pair, pairKey, pairHasKey, object = data;
+ for (index = 0, length = object.length; index < length; index += 1) {
+ pair = object[index];
+ pairHasKey = false;
+ if (_toString$2.call(pair) !== "[object Object]")
+ return false;
+ for (pairKey in pair) {
+ if (_hasOwnProperty$3.call(pair, pairKey)) {
+ if (!pairHasKey)
+ pairHasKey = true;
+ else
+ return false;
+ }
+ }
+ if (!pairHasKey)
+ return false;
+ if (objectKeys.indexOf(pairKey) === -1)
+ objectKeys.push(pairKey);
+ else
+ return false;
+ }
+ return true;
+}
+function constructYamlOmap(data) {
+ return data !== null ? data : [];
+}
+var omap = new type("tag:yaml.org,2002:omap", {
+ kind: "sequence",
+ resolve: resolveYamlOmap,
+ construct: constructYamlOmap
+});
+var _toString$1 = Object.prototype.toString;
+function resolveYamlPairs(data) {
+ if (data === null)
+ return true;
+ var index, length, pair, keys, result, object = data;
+ result = new Array(object.length);
+ for (index = 0, length = object.length; index < length; index += 1) {
+ pair = object[index];
+ if (_toString$1.call(pair) !== "[object Object]")
+ return false;
+ keys = Object.keys(pair);
+ if (keys.length !== 1)
+ return false;
+ result[index] = [keys[0], pair[keys[0]]];
+ }
+ return true;
+}
+function constructYamlPairs(data) {
+ if (data === null)
+ return [];
+ var index, length, pair, keys, result, object = data;
+ result = new Array(object.length);
+ for (index = 0, length = object.length; index < length; index += 1) {
+ pair = object[index];
+ keys = Object.keys(pair);
+ result[index] = [keys[0], pair[keys[0]]];
+ }
+ return result;
+}
+var pairs = new type("tag:yaml.org,2002:pairs", {
+ kind: "sequence",
+ resolve: resolveYamlPairs,
+ construct: constructYamlPairs
+});
+var _hasOwnProperty$2 = Object.prototype.hasOwnProperty;
+function resolveYamlSet(data) {
+ if (data === null)
+ return true;
+ var key, object = data;
+ for (key in object) {
+ if (_hasOwnProperty$2.call(object, key)) {
+ if (object[key] !== null)
+ return false;
+ }
+ }
+ return true;
+}
+function constructYamlSet(data) {
+ return data !== null ? data : {};
+}
+var set = new type("tag:yaml.org,2002:set", {
+ kind: "mapping",
+ resolve: resolveYamlSet,
+ construct: constructYamlSet
+});
+var _default = core.extend({
+ implicit: [
+ timestamp,
+ merge
+ ],
+ explicit: [
+ binary,
+ omap,
+ pairs,
+ set
+ ]
+});
+var _hasOwnProperty$1 = Object.prototype.hasOwnProperty;
+var CONTEXT_FLOW_IN = 1;
+var CONTEXT_FLOW_OUT = 2;
+var CONTEXT_BLOCK_IN = 3;
+var CONTEXT_BLOCK_OUT = 4;
+var CHOMPING_CLIP = 1;
+var CHOMPING_STRIP = 2;
+var CHOMPING_KEEP = 3;
+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_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/;
+var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/;
+var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i;
+var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;
+function _class(obj) {
+ return Object.prototype.toString.call(obj);
+}
+function is_EOL(c) {
+ return c === 10 || c === 13;
+}
+function is_WHITE_SPACE(c) {
+ return c === 9 || c === 32;
+}
+function is_WS_OR_EOL(c) {
+ return c === 9 || c === 32 || c === 10 || c === 13;
+}
+function is_FLOW_INDICATOR(c) {
+ return c === 44 || c === 91 || c === 93 || c === 123 || c === 125;
+}
+function fromHexCode(c) {
+ var lc;
+ if (48 <= c && c <= 57) {
+ return c - 48;
+ }
+ lc = c | 32;
+ if (97 <= lc && 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 fromDecimalCode(c) {
+ if (48 <= c && c <= 57) {
+ return c - 48;
+ }
+ return -1;
+}
+function simpleEscapeSequence(c) {
+ return c === 48 ? "\0" : c === 97 ? "\x07" : c === 98 ? "\b" : c === 116 ? " " : c === 9 ? " " : c === 110 ? "\n" : c === 118 ? "\v" : c === 102 ? "\f" : c === 114 ? "\r" : c === 101 ? "\x1B" : c === 32 ? " " : c === 34 ? '"' : c === 47 ? "/" : c === 92 ? "\\" : c === 78 ? "…" : c === 95 ? " " : c === 76 ? "\u2028" : c === 80 ? "\u2029" : "";
+}
+function charFromCodepoint(c) {
+ if (c <= 65535) {
+ return String.fromCharCode(c);
+ }
+ return String.fromCharCode(
+ (c - 65536 >> 10) + 55296,
+ (c - 65536 & 1023) + 56320
+ );
+}
+var simpleEscapeCheck = new Array(256);
+var simpleEscapeMap = new Array(256);
+for (var i = 0; i < 256; i++) {
+ simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;
+ simpleEscapeMap[i] = simpleEscapeSequence(i);
+}
+function State$1(input, options) {
+ this.input = input;
+ this.filename = options["filename"] || null;
+ this.schema = options["schema"] || _default;
+ this.onWarning = options["onWarning"] || null;
+ this.legacy = options["legacy"] || false;
+ this.json = options["json"] || false;
+ this.listener = options["listener"] || null;
+ this.implicitTypes = this.schema.compiledImplicit;
+ this.typeMap = this.schema.compiledTypeMap;
+ this.length = input.length;
+ this.position = 0;
+ this.line = 0;
+ this.lineStart = 0;
+ this.lineIndent = 0;
+ this.firstTabInLine = -1;
+ this.documents = [];
+}
+function generateError(state, message) {
+ var mark = {
+ name: state.filename,
+ buffer: state.input.slice(0, -1),
+ // omit trailing \0
+ position: state.position,
+ line: state.line,
+ column: state.position - state.lineStart
+ };
+ mark.snippet = snippet(mark);
+ return new exception(message, mark);
+}
+function throwError(state, message) {
+ throw generateError(state, message);
+}
+function throwWarning(state, message) {
+ if (state.onWarning) {
+ state.onWarning.call(null, generateError(state, message));
+ }
+}
+var directiveHandlers = {
+ YAML: function handleYamlDirective(state, name, args) {
+ var match, major, minor;
+ if (state.version !== null) {
+ throwError(state, "duplication of %YAML directive");
+ }
+ if (args.length !== 1) {
+ throwError(state, "YAML directive accepts exactly one argument");
+ }
+ match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]);
+ if (match === null) {
+ throwError(state, "ill-formed argument of the YAML directive");
+ }
+ major = parseInt(match[1], 10);
+ minor = parseInt(match[2], 10);
+ if (major !== 1) {
+ throwError(state, "unacceptable YAML version of the document");
+ }
+ state.version = args[0];
+ state.checkLineBreaks = minor < 2;
+ if (minor !== 1 && minor !== 2) {
+ throwWarning(state, "unsupported YAML version of the document");
+ }
+ },
+ TAG: function handleTagDirective(state, name, args) {
+ var handle, prefix;
+ if (args.length !== 2) {
+ throwError(state, "TAG directive accepts exactly two arguments");
+ }
+ handle = args[0];
+ prefix = args[1];
+ if (!PATTERN_TAG_HANDLE.test(handle)) {
+ throwError(state, "ill-formed tag handle (first argument) of the TAG directive");
+ }
+ if (_hasOwnProperty$1.call(state.tagMap, handle)) {
+ throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle');
+ }
+ if (!PATTERN_TAG_URI.test(prefix)) {
+ throwError(state, "ill-formed tag prefix (second argument) of the TAG directive");
+ }
+ try {
+ prefix = decodeURIComponent(prefix);
+ } catch (err) {
+ throwError(state, "tag prefix is malformed: " + prefix);
+ }
+ state.tagMap[handle] = prefix;
+ }
+};
+function captureSegment(state, start, end, checkJson) {
+ var _position, _length, _character, _result;
+ if (start < end) {
+ _result = state.input.slice(start, end);
+ if (checkJson) {
+ for (_position = 0, _length = _result.length; _position < _length; _position += 1) {
+ _character = _result.charCodeAt(_position);
+ if (!(_character === 9 || 32 <= _character && _character <= 1114111)) {
+ throwError(state, "expected valid JSON character");
+ }
+ }
+ } else if (PATTERN_NON_PRINTABLE.test(_result)) {
+ throwError(state, "the stream contains non-printable characters");
+ }
+ state.result += _result;
+ }
+}
+function mergeMappings(state, destination, source, overridableKeys) {
+ var sourceKeys, key, index, quantity;
+ if (!common.isObject(source)) {
+ throwError(state, "cannot merge mappings; the provided source object is unacceptable");
+ }
+ sourceKeys = Object.keys(source);
+ for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {
+ key = sourceKeys[index];
+ if (!_hasOwnProperty$1.call(destination, key)) {
+ destination[key] = source[key];
+ overridableKeys[key] = true;
+ }
+ }
+}
+function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startLineStart, startPos) {
+ var index, quantity;
+ if (Array.isArray(keyNode)) {
+ keyNode = Array.prototype.slice.call(keyNode);
+ for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {
+ if (Array.isArray(keyNode[index])) {
+ throwError(state, "nested arrays are not supported inside keys");
+ }
+ if (typeof keyNode === "object" && _class(keyNode[index]) === "[object Object]") {
+ keyNode[index] = "[object Object]";
+ }
+ }
+ }
+ if (typeof keyNode === "object" && _class(keyNode) === "[object Object]") {
+ keyNode = "[object Object]";
+ }
+ keyNode = String(keyNode);
+ if (_result === null) {
+ _result = {};
+ }
+ if (keyTag === "tag:yaml.org,2002:merge") {
+ if (Array.isArray(valueNode)) {
+ for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {
+ mergeMappings(state, _result, valueNode[index], overridableKeys);
+ }
+ } else {
+ mergeMappings(state, _result, valueNode, overridableKeys);
+ }
+ } else {
+ if (!state.json && !_hasOwnProperty$1.call(overridableKeys, keyNode) && _hasOwnProperty$1.call(_result, keyNode)) {
+ state.line = startLine || state.line;
+ state.lineStart = startLineStart || state.lineStart;
+ state.position = startPos || state.position;
+ throwError(state, "duplicated mapping key");
+ }
+ if (keyNode === "__proto__") {
+ Object.defineProperty(_result, keyNode, {
+ configurable: true,
+ enumerable: true,
+ writable: true,
+ value: valueNode
+ });
+ } else {
+ _result[keyNode] = valueNode;
+ }
+ delete overridableKeys[keyNode];
+ }
+ return _result;
+}
+function readLineBreak(state) {
+ var ch;
+ ch = state.input.charCodeAt(state.position);
+ if (ch === 10) {
+ state.position++;
+ } else if (ch === 13) {
+ state.position++;
+ if (state.input.charCodeAt(state.position) === 10) {
+ state.position++;
+ }
+ } else {
+ throwError(state, "a line break is expected");
+ }
+ state.line += 1;
+ state.lineStart = state.position;
+ state.firstTabInLine = -1;
+}
+function skipSeparationSpace(state, allowComments, checkIndent) {
+ var lineBreaks = 0, ch = state.input.charCodeAt(state.position);
+ while (ch !== 0) {
+ while (is_WHITE_SPACE(ch)) {
+ if (ch === 9 && state.firstTabInLine === -1) {
+ state.firstTabInLine = state.position;
+ }
+ ch = state.input.charCodeAt(++state.position);
+ }
+ if (allowComments && ch === 35) {
+ do {
+ ch = state.input.charCodeAt(++state.position);
+ } while (ch !== 10 && ch !== 13 && ch !== 0);
+ }
+ if (is_EOL(ch)) {
+ readLineBreak(state);
+ ch = state.input.charCodeAt(state.position);
+ lineBreaks++;
+ state.lineIndent = 0;
+ while (ch === 32) {
+ state.lineIndent++;
+ ch = state.input.charCodeAt(++state.position);
+ }
+ } else {
+ break;
+ }
+ }
+ if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {
+ throwWarning(state, "deficient indentation");
+ }
+ return lineBreaks;
+}
+function testDocumentSeparator(state) {
+ var _position = state.position, ch;
+ ch = state.input.charCodeAt(_position);
+ if ((ch === 45 || ch === 46) && ch === state.input.charCodeAt(_position + 1) && ch === state.input.charCodeAt(_position + 2)) {
+ _position += 3;
+ ch = state.input.charCodeAt(_position);
+ if (ch === 0 || is_WS_OR_EOL(ch)) {
+ return true;
+ }
+ }
+ return false;
+}
+function writeFoldedLines(state, count) {
+ if (count === 1) {
+ state.result += " ";
+ } else if (count > 1) {
+ state.result += common.repeat("\n", count - 1);
+ }
+}
+function readPlainScalar(state, nodeIndent, withinFlowCollection) {
+ var preceding, following, captureStart, captureEnd, hasPendingContent, _line, _lineStart, _lineIndent, _kind = state.kind, _result = state.result, ch;
+ ch = state.input.charCodeAt(state.position);
+ if (is_WS_OR_EOL(ch) || is_FLOW_INDICATOR(ch) || ch === 35 || ch === 38 || ch === 42 || ch === 33 || ch === 124 || ch === 62 || ch === 39 || ch === 34 || ch === 37 || ch === 64 || ch === 96) {
+ return false;
+ }
+ if (ch === 63 || ch === 45) {
+ following = state.input.charCodeAt(state.position + 1);
+ if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {
+ return false;
+ }
+ }
+ state.kind = "scalar";
+ state.result = "";
+ captureStart = captureEnd = state.position;
+ hasPendingContent = false;
+ while (ch !== 0) {
+ if (ch === 58) {
+ following = state.input.charCodeAt(state.position + 1);
+ if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {
+ break;
+ }
+ } else if (ch === 35) {
+ preceding = state.input.charCodeAt(state.position - 1);
+ if (is_WS_OR_EOL(preceding)) {
+ break;
+ }
+ } else if (state.position === state.lineStart && testDocumentSeparator(state) || withinFlowCollection && is_FLOW_INDICATOR(ch)) {
+ break;
+ } else if (is_EOL(ch)) {
+ _line = state.line;
+ _lineStart = state.lineStart;
+ _lineIndent = state.lineIndent;
+ skipSeparationSpace(state, false, -1);
+ if (state.lineIndent >= nodeIndent) {
+ hasPendingContent = true;
+ ch = state.input.charCodeAt(state.position);
+ continue;
+ } else {
+ state.position = captureEnd;
+ state.line = _line;
+ state.lineStart = _lineStart;
+ state.lineIndent = _lineIndent;
+ break;
+ }
+ }
+ if (hasPendingContent) {
+ captureSegment(state, captureStart, captureEnd, false);
+ writeFoldedLines(state, state.line - _line);
+ captureStart = captureEnd = state.position;
+ hasPendingContent = false;
+ }
+ if (!is_WHITE_SPACE(ch)) {
+ captureEnd = state.position + 1;
+ }
+ ch = state.input.charCodeAt(++state.position);
+ }
+ captureSegment(state, captureStart, captureEnd, false);
+ if (state.result) {
+ return true;
+ }
+ state.kind = _kind;
+ state.result = _result;
+ return false;
+}
+function readSingleQuotedScalar(state, nodeIndent) {
+ var ch, captureStart, captureEnd;
+ ch = state.input.charCodeAt(state.position);
+ if (ch !== 39) {
+ return false;
+ }
+ state.kind = "scalar";
+ state.result = "";
+ state.position++;
+ captureStart = captureEnd = state.position;
+ while ((ch = state.input.charCodeAt(state.position)) !== 0) {
+ if (ch === 39) {
+ captureSegment(state, captureStart, state.position, true);
+ ch = state.input.charCodeAt(++state.position);
+ if (ch === 39) {
+ captureStart = state.position;
+ state.position++;
+ captureEnd = state.position;
+ } else {
+ return true;
+ }
+ } else if (is_EOL(ch)) {
+ captureSegment(state, captureStart, captureEnd, true);
+ writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));
+ captureStart = captureEnd = state.position;
+ } else if (state.position === state.lineStart && testDocumentSeparator(state)) {
+ throwError(state, "unexpected end of the document within a single quoted scalar");
+ } else {
+ state.position++;
+ captureEnd = state.position;
+ }
+ }
+ throwError(state, "unexpected end of the stream within a single quoted scalar");
+}
+function readDoubleQuotedScalar(state, nodeIndent) {
+ var captureStart, captureEnd, hexLength, hexResult, tmp, ch;
+ ch = state.input.charCodeAt(state.position);
+ if (ch !== 34) {
+ return false;
+ }
+ state.kind = "scalar";
+ state.result = "";
+ state.position++;
+ captureStart = captureEnd = state.position;
+ while ((ch = state.input.charCodeAt(state.position)) !== 0) {
+ if (ch === 34) {
+ captureSegment(state, captureStart, state.position, true);
+ state.position++;
+ return true;
+ } else if (ch === 92) {
+ captureSegment(state, captureStart, state.position, true);
+ ch = state.input.charCodeAt(++state.position);
+ if (is_EOL(ch)) {
+ skipSeparationSpace(state, false, nodeIndent);
+ } else if (ch < 256 && simpleEscapeCheck[ch]) {
+ state.result += simpleEscapeMap[ch];
+ state.position++;
+ } else if ((tmp = escapedHexLen(ch)) > 0) {
+ hexLength = tmp;
+ hexResult = 0;
+ for (; hexLength > 0; hexLength--) {
+ ch = state.input.charCodeAt(++state.position);
+ if ((tmp = fromHexCode(ch)) >= 0) {
+ hexResult = (hexResult << 4) + tmp;
+ } else {
+ throwError(state, "expected hexadecimal character");
+ }
+ }
+ state.result += charFromCodepoint(hexResult);
+ state.position++;
+ } else {
+ throwError(state, "unknown escape sequence");
+ }
+ captureStart = captureEnd = state.position;
+ } else if (is_EOL(ch)) {
+ captureSegment(state, captureStart, captureEnd, true);
+ writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));
+ captureStart = captureEnd = state.position;
+ } else if (state.position === state.lineStart && testDocumentSeparator(state)) {
+ throwError(state, "unexpected end of the document within a double quoted scalar");
+ } else {
+ state.position++;
+ captureEnd = state.position;
+ }
+ }
+ throwError(state, "unexpected end of the stream within a double quoted scalar");
+}
+function readFlowCollection(state, nodeIndent) {
+ var readNext = true, _line, _lineStart, _pos, _tag = state.tag, _result, _anchor = state.anchor, following, terminator, isPair, isExplicitPair, isMapping, overridableKeys = /* @__PURE__ */ Object.create(null), keyNode, keyTag, valueNode, ch;
+ ch = state.input.charCodeAt(state.position);
+ if (ch === 91) {
+ terminator = 93;
+ isMapping = false;
+ _result = [];
+ } else if (ch === 123) {
+ terminator = 125;
+ isMapping = true;
+ _result = {};
+ } else {
+ return false;
+ }
+ if (state.anchor !== null) {
+ state.anchorMap[state.anchor] = _result;
+ }
+ ch = state.input.charCodeAt(++state.position);
+ while (ch !== 0) {
+ skipSeparationSpace(state, true, nodeIndent);
+ ch = state.input.charCodeAt(state.position);
+ if (ch === terminator) {
+ state.position++;
+ state.tag = _tag;
+ state.anchor = _anchor;
+ state.kind = isMapping ? "mapping" : "sequence";
+ state.result = _result;
+ return true;
+ } else if (!readNext) {
+ throwError(state, "missed comma between flow collection entries");
+ } else if (ch === 44) {
+ throwError(state, "expected the node content, but found ','");
+ }
+ keyTag = keyNode = valueNode = null;
+ isPair = isExplicitPair = false;
+ if (ch === 63) {
+ following = state.input.charCodeAt(state.position + 1);
+ if (is_WS_OR_EOL(following)) {
+ isPair = isExplicitPair = true;
+ state.position++;
+ skipSeparationSpace(state, true, nodeIndent);
+ }
+ }
+ _line = state.line;
+ _lineStart = state.lineStart;
+ _pos = state.position;
+ composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
+ keyTag = state.tag;
+ keyNode = state.result;
+ skipSeparationSpace(state, true, nodeIndent);
+ ch = state.input.charCodeAt(state.position);
+ if ((isExplicitPair || state.line === _line) && ch === 58) {
+ isPair = true;
+ ch = state.input.charCodeAt(++state.position);
+ skipSeparationSpace(state, true, nodeIndent);
+ composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
+ valueNode = state.result;
+ }
+ if (isMapping) {
+ storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);
+ } else if (isPair) {
+ _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));
+ } else {
+ _result.push(keyNode);
+ }
+ skipSeparationSpace(state, true, nodeIndent);
+ ch = state.input.charCodeAt(state.position);
+ if (ch === 44) {
+ readNext = true;
+ ch = state.input.charCodeAt(++state.position);
+ } else {
+ readNext = false;
+ }
+ }
+ throwError(state, "unexpected end of the stream within a flow collection");
+}
+function readBlockScalar(state, nodeIndent) {
+ var captureStart, folding, chomping = CHOMPING_CLIP, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, emptyLines = 0, atMoreIndented = false, tmp, ch;
+ ch = state.input.charCodeAt(state.position);
+ if (ch === 124) {
+ folding = false;
+ } else if (ch === 62) {
+ folding = true;
+ } else {
+ return false;
+ }
+ state.kind = "scalar";
+ state.result = "";
+ while (ch !== 0) {
+ ch = state.input.charCodeAt(++state.position);
+ if (ch === 43 || ch === 45) {
+ if (CHOMPING_CLIP === chomping) {
+ chomping = ch === 43 ? CHOMPING_KEEP : CHOMPING_STRIP;
+ } else {
+ throwError(state, "repeat of a chomping mode identifier");
+ }
+ } else if ((tmp = fromDecimalCode(ch)) >= 0) {
+ if (tmp === 0) {
+ throwError(state, "bad explicit indentation width of a block scalar; it cannot be less than one");
+ } else if (!detectedIndent) {
+ textIndent = nodeIndent + tmp - 1;
+ detectedIndent = true;
+ } else {
+ throwError(state, "repeat of an indentation width identifier");
+ }
+ } else {
+ break;
+ }
+ }
+ if (is_WHITE_SPACE(ch)) {
+ do {
+ ch = state.input.charCodeAt(++state.position);
+ } while (is_WHITE_SPACE(ch));
+ if (ch === 35) {
+ do {
+ ch = state.input.charCodeAt(++state.position);
+ } while (!is_EOL(ch) && ch !== 0);
+ }
+ }
+ while (ch !== 0) {
+ readLineBreak(state);
+ state.lineIndent = 0;
+ ch = state.input.charCodeAt(state.position);
+ while ((!detectedIndent || state.lineIndent < textIndent) && ch === 32) {
+ state.lineIndent++;
+ ch = state.input.charCodeAt(++state.position);
+ }
+ if (!detectedIndent && state.lineIndent > textIndent) {
+ textIndent = state.lineIndent;
+ }
+ if (is_EOL(ch)) {
+ emptyLines++;
+ continue;
+ }
+ if (state.lineIndent < textIndent) {
+ if (chomping === CHOMPING_KEEP) {
+ state.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines);
+ } else if (chomping === CHOMPING_CLIP) {
+ if (didReadContent) {
+ state.result += "\n";
+ }
+ }
+ break;
+ }
+ if (folding) {
+ if (is_WHITE_SPACE(ch)) {
+ atMoreIndented = true;
+ state.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines);
+ } else if (atMoreIndented) {
+ atMoreIndented = false;
+ state.result += common.repeat("\n", emptyLines + 1);
+ } else if (emptyLines === 0) {
+ if (didReadContent) {
+ state.result += " ";
+ }
+ } else {
+ state.result += common.repeat("\n", emptyLines);
+ }
+ } else {
+ state.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines);
+ }
+ didReadContent = true;
+ detectedIndent = true;
+ emptyLines = 0;
+ captureStart = state.position;
+ while (!is_EOL(ch) && ch !== 0) {
+ ch = state.input.charCodeAt(++state.position);
+ }
+ captureSegment(state, captureStart, state.position, false);
+ }
+ return true;
+}
+function readBlockSequence(state, nodeIndent) {
+ var _line, _tag = state.tag, _anchor = state.anchor, _result = [], following, detected = false, ch;
+ if (state.firstTabInLine !== -1)
+ return false;
+ if (state.anchor !== null) {
+ state.anchorMap[state.anchor] = _result;
+ }
+ ch = state.input.charCodeAt(state.position);
+ while (ch !== 0) {
+ if (state.firstTabInLine !== -1) {
+ state.position = state.firstTabInLine;
+ throwError(state, "tab characters must not be used in indentation");
+ }
+ if (ch !== 45) {
+ break;
+ }
+ following = state.input.charCodeAt(state.position + 1);
+ if (!is_WS_OR_EOL(following)) {
+ break;
+ }
+ detected = true;
+ state.position++;
+ if (skipSeparationSpace(state, true, -1)) {
+ if (state.lineIndent <= nodeIndent) {
+ _result.push(null);
+ ch = state.input.charCodeAt(state.position);
+ continue;
+ }
+ }
+ _line = state.line;
+ composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);
+ _result.push(state.result);
+ skipSeparationSpace(state, true, -1);
+ ch = state.input.charCodeAt(state.position);
+ if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) {
+ throwError(state, "bad indentation of a sequence entry");
+ } else if (state.lineIndent < nodeIndent) {
+ break;
+ }
+ }
+ if (detected) {
+ state.tag = _tag;
+ state.anchor = _anchor;
+ state.kind = "sequence";
+ state.result = _result;
+ return true;
+ }
+ return false;
+}
+function readBlockMapping(state, nodeIndent, flowIndent) {
+ var following, allowCompact, _line, _keyLine, _keyLineStart, _keyPos, _tag = state.tag, _anchor = state.anchor, _result = {}, overridableKeys = /* @__PURE__ */ Object.create(null), keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch;
+ if (state.firstTabInLine !== -1)
+ return false;
+ if (state.anchor !== null) {
+ state.anchorMap[state.anchor] = _result;
+ }
+ 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");
+ }
+ following = state.input.charCodeAt(state.position + 1);
+ _line = state.line;
+ if ((ch === 63 || ch === 58) && is_WS_OR_EOL(following)) {
+ if (ch === 63) {
+ if (atExplicitKey) {
+ storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
+ keyTag = keyNode = valueNode = null;
+ }
+ detected = true;
+ atExplicitKey = true;
+ allowCompact = true;
+ } else if (atExplicitKey) {
+ atExplicitKey = false;
+ allowCompact = true;
+ } else {
+ throwError(state, "incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line");
+ }
+ state.position += 1;
+ ch = following;
+ } else {
+ _keyLine = state.line;
+ _keyLineStart = state.lineStart;
+ _keyPos = state.position;
+ if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {
+ break;
+ }
+ if (state.line === _line) {
+ ch = state.input.charCodeAt(state.position);
+ while (is_WHITE_SPACE(ch)) {
+ ch = state.input.charCodeAt(++state.position);
+ }
+ if (ch === 58) {
+ ch = state.input.charCodeAt(++state.position);
+ if (!is_WS_OR_EOL(ch)) {
+ throwError(state, "a whitespace character is expected after the key-value separator within a block mapping");
+ }
+ if (atExplicitKey) {
+ storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
+ keyTag = keyNode = valueNode = null;
+ }
+ detected = true;
+ atExplicitKey = false;
+ allowCompact = false;
+ keyTag = state.tag;
+ keyNode = state.result;
+ } else if (detected) {
+ throwError(state, "can not read an implicit mapping pair; a colon is missed");
+ } else {
+ state.tag = _tag;
+ state.anchor = _anchor;
+ return true;
+ }
+ } else if (detected) {
+ throwError(state, "can not read a block mapping entry; a multiline key may not be an implicit key");
+ } else {
+ state.tag = _tag;
+ state.anchor = _anchor;
+ return true;
+ }
+ }
+ if (state.line === _line || state.lineIndent > nodeIndent) {
+ if (atExplicitKey) {
+ _keyLine = state.line;
+ _keyLineStart = state.lineStart;
+ _keyPos = state.position;
+ }
+ if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {
+ if (atExplicitKey) {
+ keyNode = state.result;
+ } else {
+ valueNode = state.result;
+ }
+ }
+ if (!atExplicitKey) {
+ storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);
+ keyTag = keyNode = valueNode = null;
+ }
+ skipSeparationSpace(state, true, -1);
+ ch = state.input.charCodeAt(state.position);
+ }
+ if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) {
+ throwError(state, "bad indentation of a mapping entry");
+ } else if (state.lineIndent < nodeIndent) {
+ break;
+ }
+ }
+ if (atExplicitKey) {
+ storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
+ }
+ if (detected) {
+ state.tag = _tag;
+ state.anchor = _anchor;
+ state.kind = "mapping";
+ state.result = _result;
+ }
+ return detected;
+}
+function readTagProperty(state) {
+ var _position, isVerbatim = false, isNamed = false, tagHandle, tagName, ch;
+ ch = state.input.charCodeAt(state.position);
+ if (ch !== 33)
+ return false;
+ if (state.tag !== null) {
+ throwError(state, "duplication of a tag property");
+ }
+ 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);
+ } else {
+ tagHandle = "!";
+ }
+ _position = state.position;
+ if (isVerbatim) {
+ do {
+ ch = state.input.charCodeAt(++state.position);
+ } while (ch !== 0 && ch !== 62);
+ if (state.position < state.length) {
+ tagName = state.input.slice(_position, state.position);
+ ch = state.input.charCodeAt(++state.position);
+ } else {
+ throwError(state, "unexpected end of the stream within a verbatim tag");
+ }
+ } else {
+ while (ch !== 0 && !is_WS_OR_EOL(ch)) {
+ if (ch === 33) {
+ if (!isNamed) {
+ tagHandle = state.input.slice(_position - 1, state.position + 1);
+ if (!PATTERN_TAG_HANDLE.test(tagHandle)) {
+ throwError(state, "named tag handle cannot contain such characters");
+ }
+ isNamed = true;
+ _position = state.position + 1;
+ } else {
+ throwError(state, "tag suffix cannot contain exclamation marks");
+ }
+ }
+ ch = state.input.charCodeAt(++state.position);
+ }
+ tagName = state.input.slice(_position, state.position);
+ if (PATTERN_FLOW_INDICATORS.test(tagName)) {
+ throwError(state, "tag suffix cannot contain flow indicator characters");
+ }
+ }
+ if (tagName && !PATTERN_TAG_URI.test(tagName)) {
+ throwError(state, "tag name cannot contain such characters: " + tagName);
+ }
+ try {
+ tagName = decodeURIComponent(tagName);
+ } catch (err) {
+ throwError(state, "tag name is malformed: " + tagName);
+ }
+ if (isVerbatim) {
+ state.tag = tagName;
+ } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) {
+ state.tag = state.tagMap[tagHandle] + tagName;
+ } else if (tagHandle === "!") {
+ state.tag = "!" + tagName;
+ } else if (tagHandle === "!!") {
+ state.tag = "tag:yaml.org,2002:" + tagName;
+ } else {
+ throwError(state, 'undeclared tag handle "' + tagHandle + '"');
+ }
+ return true;
+}
+function readAnchorProperty(state) {
+ var _position, ch;
+ ch = state.input.charCodeAt(state.position);
+ if (ch !== 38)
+ return false;
+ if (state.anchor !== null) {
+ throwError(state, "duplication of an anchor property");
+ }
+ ch = state.input.charCodeAt(++state.position);
+ _position = state.position;
+ while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
+ ch = state.input.charCodeAt(++state.position);
+ }
+ if (state.position === _position) {
+ throwError(state, "name of an anchor node must contain at least one character");
+ }
+ state.anchor = state.input.slice(_position, state.position);
+ return true;
+}
+function readAlias(state) {
+ var _position, alias, ch;
+ ch = state.input.charCodeAt(state.position);
+ if (ch !== 42)
+ return false;
+ ch = state.input.charCodeAt(++state.position);
+ _position = state.position;
+ while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
+ ch = state.input.charCodeAt(++state.position);
+ }
+ if (state.position === _position) {
+ throwError(state, "name of an alias node must contain at least one character");
+ }
+ alias = state.input.slice(_position, state.position);
+ if (!_hasOwnProperty$1.call(state.anchorMap, alias)) {
+ throwError(state, 'unidentified alias "' + alias + '"');
+ }
+ state.result = state.anchorMap[alias];
+ skipSeparationSpace(state, true, -1);
+ return true;
+}
+function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {
+ var allowBlockStyles, allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, typeIndex, typeQuantity, typeList, type2, flowIndent, blockIndent;
+ if (state.listener !== null) {
+ state.listener("open", state);
+ }
+ state.tag = null;
+ state.anchor = null;
+ state.kind = null;
+ state.result = null;
+ allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext;
+ if (allowToSeek) {
+ if (skipSeparationSpace(state, true, -1)) {
+ atNewLine = true;
+ if (state.lineIndent > parentIndent) {
+ indentStatus = 1;
+ } else if (state.lineIndent === parentIndent) {
+ indentStatus = 0;
+ } else if (state.lineIndent < parentIndent) {
+ indentStatus = -1;
+ }
+ }
+ }
+ if (indentStatus === 1) {
+ while (readTagProperty(state) || readAnchorProperty(state)) {
+ if (skipSeparationSpace(state, true, -1)) {
+ atNewLine = true;
+ allowBlockCollections = allowBlockStyles;
+ if (state.lineIndent > parentIndent) {
+ indentStatus = 1;
+ } else if (state.lineIndent === parentIndent) {
+ indentStatus = 0;
+ } else if (state.lineIndent < parentIndent) {
+ indentStatus = -1;
+ }
+ } else {
+ allowBlockCollections = false;
+ }
+ }
+ }
+ if (allowBlockCollections) {
+ allowBlockCollections = atNewLine || allowCompact;
+ }
+ if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {
+ if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {
+ flowIndent = parentIndent;
+ } else {
+ flowIndent = parentIndent + 1;
+ }
+ blockIndent = state.position - state.lineStart;
+ if (indentStatus === 1) {
+ if (allowBlockCollections && (readBlockSequence(state, blockIndent) || readBlockMapping(state, blockIndent, flowIndent)) || readFlowCollection(state, flowIndent)) {
+ hasContent = true;
+ } else {
+ if (allowBlockScalars && readBlockScalar(state, flowIndent) || readSingleQuotedScalar(state, flowIndent) || readDoubleQuotedScalar(state, flowIndent)) {
+ hasContent = true;
+ } else if (readAlias(state)) {
+ hasContent = true;
+ if (state.tag !== null || state.anchor !== null) {
+ throwError(state, "alias node should not have any properties");
+ }
+ } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {
+ hasContent = true;
+ if (state.tag === null) {
+ state.tag = "?";
+ }
+ }
+ if (state.anchor !== null) {
+ state.anchorMap[state.anchor] = state.result;
+ }
+ }
+ } else if (indentStatus === 0) {
+ hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);
+ }
+ }
+ if (state.tag === null) {
+ if (state.anchor !== null) {
+ state.anchorMap[state.anchor] = state.result;
+ }
+ } else if (state.tag === "?") {
+ if (state.result !== null && state.kind !== "scalar") {
+ throwError(state, 'unacceptable node kind for !<?> tag; it should be "scalar", not "' + state.kind + '"');
+ }
+ for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {
+ type2 = state.implicitTypes[typeIndex];
+ if (type2.resolve(state.result)) {
+ state.result = type2.construct(state.result);
+ state.tag = type2.tag;
+ if (state.anchor !== null) {
+ state.anchorMap[state.anchor] = state.result;
+ }
+ break;
+ }
+ }
+ } else if (state.tag !== "!") {
+ if (_hasOwnProperty$1.call(state.typeMap[state.kind || "fallback"], state.tag)) {
+ type2 = state.typeMap[state.kind || "fallback"][state.tag];
+ } else {
+ type2 = null;
+ typeList = state.typeMap.multi[state.kind || "fallback"];
+ for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) {
+ if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {
+ type2 = typeList[typeIndex];
+ break;
+ }
+ }
+ }
+ if (!type2) {
+ throwError(state, "unknown tag !<" + state.tag + ">");
+ }
+ if (state.result !== null && type2.kind !== state.kind) {
+ throwError(state, "unacceptable node kind for !<" + state.tag + '> tag; it should be "' + type2.kind + '", not "' + state.kind + '"');
+ }
+ if (!type2.resolve(state.result, state.tag)) {
+ throwError(state, "cannot resolve a node with !<" + state.tag + "> explicit tag");
+ } else {
+ state.result = type2.construct(state.result, state.tag);
+ if (state.anchor !== null) {
+ state.anchorMap[state.anchor] = state.result;
+ }
+ }
+ }
+ if (state.listener !== null) {
+ state.listener("close", state);
+ }
+ return state.tag !== null || state.anchor !== null || hasContent;
+}
+function readDocument(state) {
+ var documentStart = state.position, _position, directiveName, directiveArgs, hasDirectives = false, ch;
+ state.version = null;
+ state.checkLineBreaks = state.legacy;
+ state.tagMap = /* @__PURE__ */ Object.create(null);
+ state.anchorMap = /* @__PURE__ */ Object.create(null);
+ while ((ch = state.input.charCodeAt(state.position)) !== 0) {
+ skipSeparationSpace(state, true, -1);
+ ch = state.input.charCodeAt(state.position);
+ if (state.lineIndent > 0 || ch !== 37) {
+ break;
+ }
+ hasDirectives = true;
+ ch = state.input.charCodeAt(++state.position);
+ _position = state.position;
+ while (ch !== 0 && !is_WS_OR_EOL(ch)) {
+ ch = state.input.charCodeAt(++state.position);
+ }
+ directiveName = state.input.slice(_position, state.position);
+ directiveArgs = [];
+ if (directiveName.length < 1) {
+ throwError(state, "directive name must not be less than one character in length");
+ }
+ while (ch !== 0) {
+ while (is_WHITE_SPACE(ch)) {
+ ch = state.input.charCodeAt(++state.position);
+ }
+ if (ch === 35) {
+ do {
+ ch = state.input.charCodeAt(++state.position);
+ } while (ch !== 0 && !is_EOL(ch));
+ break;
+ }
+ if (is_EOL(ch))
+ break;
+ _position = state.position;
+ while (ch !== 0 && !is_WS_OR_EOL(ch)) {
+ ch = state.input.charCodeAt(++state.position);
+ }
+ directiveArgs.push(state.input.slice(_position, state.position));
+ }
+ if (ch !== 0)
+ readLineBreak(state);
+ if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {
+ directiveHandlers[directiveName](state, directiveName, directiveArgs);
+ } else {
+ throwWarning(state, 'unknown document directive "' + directiveName + '"');
+ }
+ }
+ skipSeparationSpace(state, true, -1);
+ if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 45 && state.input.charCodeAt(state.position + 1) === 45 && state.input.charCodeAt(state.position + 2) === 45) {
+ state.position += 3;
+ skipSeparationSpace(state, true, -1);
+ } else if (hasDirectives) {
+ throwError(state, "directives end mark is expected");
+ }
+ composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);
+ skipSeparationSpace(state, true, -1);
+ if (state.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {
+ throwWarning(state, "non-ASCII line breaks are interpreted as content");
+ }
+ state.documents.push(state.result);
+ if (state.position === state.lineStart && testDocumentSeparator(state)) {
+ if (state.input.charCodeAt(state.position) === 46) {
+ state.position += 3;
+ skipSeparationSpace(state, true, -1);
+ }
+ return;
+ }
+ if (state.position < state.length - 1) {
+ throwError(state, "end of the stream or a document separator is expected");
+ } else {
+ return;
+ }
+}
+function loadDocuments(input, options) {
+ input = String(input);
+ options = options || {};
+ if (input.length !== 0) {
+ if (input.charCodeAt(input.length - 1) !== 10 && input.charCodeAt(input.length - 1) !== 13) {
+ input += "\n";
+ }
+ if (input.charCodeAt(0) === 65279) {
+ input = input.slice(1);
+ }
+ }
+ var state = new State$1(input, options);
+ var nullpos = input.indexOf("\0");
+ if (nullpos !== -1) {
+ state.position = nullpos;
+ throwError(state, "null byte is not allowed in input");
+ }
+ state.input += "\0";
+ while (state.input.charCodeAt(state.position) === 32) {
+ state.lineIndent += 1;
+ state.position += 1;
+ }
+ while (state.position < state.length - 1) {
+ readDocument(state);
+ }
+ return state.documents;
+}
+function loadAll$1(input, iterator2, options) {
+ if (iterator2 !== null && typeof iterator2 === "object" && typeof options === "undefined") {
+ options = iterator2;
+ iterator2 = null;
+ }
+ var documents = loadDocuments(input, options);
+ if (typeof iterator2 !== "function") {
+ return documents;
+ }
+ for (var index = 0, length = documents.length; index < length; index += 1) {
+ iterator2(documents[index]);
+ }
+}
+function load$1(input, options) {
+ var documents = loadDocuments(input, options);
+ if (documents.length === 0) {
+ return void 0;
+ } else if (documents.length === 1) {
+ return documents[0];
+ }
+ throw new exception("expected a single document in the stream, but found more");
+}
+var loadAll_1 = loadAll$1;
+var load_1 = load$1;
+var loader = {
+ loadAll: loadAll_1,
+ load: load_1
+};
+var FAILSAFE_SCHEMA = failsafe;
+var load = loader.load;
+const frontMatterRegex = /^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s;
+function extractFrontMatter(text, db) {
+ var _a;
+ const matches = text.match(frontMatterRegex);
+ if (matches) {
+ const parsed = load(matches[1], {
+ // To keep things simple, only allow strings, arrays, and plain objects.
+ // https://www.yaml.org/spec/1.2/spec.html#id2802346
+ schema: FAILSAFE_SCHEMA
+ });
+ if (parsed == null ? void 0 : parsed.title) {
+ (_a = db.setDiagramTitle) == null ? void 0 : _a.call(db, parsed.title);
+ }
+ return text.slice(matches[0].length);
+ } else {
+ return text;
+ }
+}
+const themes = {};
+const getStyles = (type2, userStyles, options) => {
+ let diagramStyles = "";
+ if (type2 in themes && themes[type2]) {
+ diagramStyles = themes[type2](options);
+ } else {
+ log$1.warn(`No theme found for ${type2}`);
+ }
+ return ` & {
+ font-family: ${options.fontFamily};
+ font-size: ${options.fontSize};
+ fill: ${options.textColor}
+ }
+
+ /* Classes common for multiple diagrams */
+
+ & .error-icon {
+ fill: ${options.errorBkgColor};
+ }
+ & .error-text {
+ fill: ${options.errorTextColor};
+ stroke: ${options.errorTextColor};
+ }
+
+ & .edge-thickness-normal {
+ stroke-width: 2px;
+ }
+ & .edge-thickness-thick {
+ stroke-width: 3.5px
+ }
+ & .edge-pattern-solid {
+ stroke-dasharray: 0;
+ }
+
+ & .edge-pattern-dashed{
+ stroke-dasharray: 3;
+ }
+ .edge-pattern-dotted {
+ stroke-dasharray: 2;
+ }
+
+ & .marker {
+ fill: ${options.lineColor};
+ stroke: ${options.lineColor};
+ }
+ & .marker.cross {
+ stroke: ${options.lineColor};
+ }
+
+ & svg {
+ font-family: ${options.fontFamily};
+ font-size: ${options.fontSize};
+ }
+
+ ${diagramStyles}
+
+ ${userStyles}
+`;
+};
+const addStylesForDiagram = (type2, diagramTheme) => {
+ themes[type2] = diagramTheme;
+};
+const getStyles$1 = getStyles;
+let currentDirective = {};
+const parseDirective$1 = function(p, statement, context, type2) {
+ log$1.debug("parseDirective is being called", statement, context, type2);
+ try {
+ if (statement !== void 0) {
+ statement = statement.trim();
+ switch (context) {
+ case "open_directive":
+ currentDirective = {};
+ break;
+ case "type_directive":
+ if (!currentDirective) {
+ throw new Error("currentDirective is undefined");
+ }
+ currentDirective.type = statement.toLowerCase();
+ break;
+ case "arg_directive":
+ if (!currentDirective) {
+ throw new Error("currentDirective is undefined");
+ }
+ currentDirective.args = JSON.parse(statement);
+ break;
+ case "close_directive":
+ handleDirective(p, currentDirective, type2);
+ currentDirective = void 0;
+ break;
+ }
+ }
+ } catch (error) {
+ log$1.error(
+ `Error while rendering sequenceDiagram directive: ${statement} jison context: ${context}`
+ );
+ log$1.error(error.message);
+ }
+};
+const handleDirective = function(p, directive2, type2) {
+ log$1.info(`Directive type=${directive2.type} with args:`, directive2.args);
+ switch (directive2.type) {
+ case "init":
+ case "initialize": {
+ ["config"].forEach((prop) => {
+ if (directive2.args[prop] !== void 0) {
+ if (type2 === "flowchart-v2") {
+ type2 = "flowchart";
+ }
+ directive2.args[type2] = directive2.args[prop];
+ delete directive2.args[prop];
+ }
+ });
+ log$1.info("sanitize in handleDirective", directive2.args);
+ directiveSanitizer(directive2.args);
+ log$1.info("sanitize in handleDirective (done)", directive2.args);
+ addDirective(directive2.args);
+ break;
+ }
+ case "wrap":
+ case "nowrap":
+ if (p && p["setWrap"]) {
+ p.setWrap(directive2.type === "wrap");
+ }
+ break;
+ case "themeCss":
+ log$1.warn("themeCss encountered");
+ break;
+ default:
+ log$1.warn(
+ `Unhandled directive: source: '%%{${directive2.type}: ${JSON.stringify(
+ directive2.args ? directive2.args : {}
+ )}}%%`,
+ directive2
+ );
+ break;
+ }
+};
+const log = log$1;
+const setLogLevel = setLogLevel$1;
+const getConfig = getConfig$1;
+const sanitizeText = (text) => sanitizeText$1(text, getConfig());
+const setupGraphViewbox = setupGraphViewbox$1;
+const getCommonDb = () => {
+ return commonDb;
+};
+const parseDirective = (p, statement, context, type2) => parseDirective$1(p, statement, context, type2);
+const diagrams = {};
+const registerDiagram = (id, diagram, detector) => {
+ if (diagrams[id]) {
+ throw new Error(`Diagram ${id} already registered.`);
+ }
+ diagrams[id] = diagram;
+ if (detector) {
+ addDetector(id, detector);
+ }
+ addStylesForDiagram(id, diagram.styles);
+ if (diagram.injectUtils) {
+ diagram.injectUtils(
+ log,
+ setLogLevel,
+ getConfig,
+ sanitizeText,
+ setupGraphViewbox,
+ getCommonDb(),
+ parseDirective
+ );
+ }
+};
+const getDiagram = (name) => {
+ if (name in diagrams) {
+ return diagrams[name];
+ }
+ throw new Error(`Diagram ${name} not found.`);
+};
+class UnknownDiagramError extends Error {
+ constructor(message) {
+ super(message);
+ this.name = "UnknownDiagramError";
+ }
+}
+const directive$1 = /%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi;
+const anyComment = /\s*%%.*\n/gm;
+const detectors = {};
+const detectType = function(text, config) {
+ text = text.replace(frontMatterRegex, "").replace(directive$1, "").replace(anyComment, "\n");
+ for (const [key, { detector }] of Object.entries(detectors)) {
+ const diagram = detector(text, config);
+ if (diagram) {
+ return key;
+ }
+ }
+ throw new UnknownDiagramError(
+ `No diagram type detected matching given configuration for text: ${text}`
+ );
+};
+const registerLazyLoadedDiagrams = (...diagrams2) => {
+ for (const { id, detector, loader: loader2 } of diagrams2) {
+ addDetector(id, detector, loader2);
+ }
+};
+const loadRegisteredDiagrams = async () => {
+ log$1.debug(`Loading registered diagrams`);
+ const results = await Promise.allSettled(
+ Object.entries(detectors).map(async ([key, { detector, loader: loader2 }]) => {
+ if (loader2) {
+ try {
+ getDiagram(key);
+ } catch (error) {
+ try {
+ const { diagram, id } = await loader2();
+ registerDiagram(id, diagram, detector);
+ } catch (err) {
+ log$1.error(`Failed to load external diagram with key ${key}. Removing from detectors.`);
+ delete detectors[key];
+ throw err;
+ }
+ }
+ }
+ })
+ );
+ const failed = results.filter((result) => result.status === "rejected");
+ if (failed.length > 0) {
+ log$1.error(`Failed to load ${failed.length} external diagrams`);
+ for (const res of failed) {
+ log$1.error(res);
+ }
+ throw new Error(`Failed to load ${failed.length} external diagrams`);
+ }
+};
+const addDetector = (key, detector, loader2) => {
+ if (detectors[key]) {
+ log$1.error(`Detector with key ${key} already exists`);
+ } else {
+ detectors[key] = { detector, loader: loader2 };
+ }
+ log$1.debug(`Detector with key ${key} added${loader2 ? " with loader" : ""}`);
+};
+const getDiagramLoader = (key) => {
+ return detectors[key].loader;
+};
+const d3CurveTypes = {
+ curveBasis,
+ curveBasisClosed,
+ curveBasisOpen,
+ curveBumpX,
+ curveBumpY,
+ curveBundle,
+ curveCardinalClosed,
+ curveCardinalOpen,
+ curveCardinal,
+ curveCatmullRomClosed,
+ curveCatmullRomOpen,
+ curveCatmullRom,
+ curveLinear,
+ curveLinearClosed,
+ curveMonotoneX,
+ curveMonotoneY,
+ curveNatural,
+ curveStep,
+ curveStepAfter,
+ curveStepBefore
+};
+const directive = /%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi;
+const directiveWithoutOpen = /\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi;
+const detectInit = function(text, config) {
+ const inits = detectDirective(text, /(?:init\b)|(?:initialize\b)/);
+ let results = {};
+ if (Array.isArray(inits)) {
+ const args = inits.map((init) => init.args);
+ directiveSanitizer(args);
+ results = assignWithDepth(results, [...args]);
+ } else {
+ results = inits.args;
+ }
+ if (results) {
+ let type2 = detectType(text, config);
+ ["config"].forEach((prop) => {
+ if (results[prop] !== void 0) {
+ if (type2 === "flowchart-v2") {
+ type2 = "flowchart";
+ }
+ results[type2] = results[prop];
+ delete results[prop];
+ }
+ });
+ }
+ return results;
+};
+const detectDirective = function(text, type2 = null) {
+ try {
+ const commentWithoutDirectives = new RegExp(
+ `[%]{2}(?![{]${directiveWithoutOpen.source})(?=[}][%]{2}).*
+`,
+ "ig"
+ );
+ text = text.trim().replace(commentWithoutDirectives, "").replace(/'/gm, '"');
+ log$1.debug(
+ `Detecting diagram directive${type2 !== null ? " type:" + type2 : ""} based on the text:${text}`
+ );
+ let match;
+ const result = [];
+ while ((match = directive.exec(text)) !== null) {
+ if (match.index === directive.lastIndex) {
+ directive.lastIndex++;
+ }
+ if (match && !type2 || type2 && match[1] && match[1].match(type2) || type2 && match[2] && match[2].match(type2)) {
+ const type22 = match[1] ? match[1] : match[2];
+ const args = match[3] ? match[3].trim() : match[4] ? JSON.parse(match[4].trim()) : null;
+ result.push({ type: type22, args });
+ }
+ }
+ if (result.length === 0) {
+ result.push({ type: text, args: null });
+ }
+ return result.length === 1 ? result[0] : result;
+ } catch (error) {
+ log$1.error(
+ `ERROR: ${error.message} - Unable to parse directive
+ ${type2 !== null ? " type:" + type2 : ""} based on the text:${text}`
+ );
+ return { type: null, args: null };
+ }
+};
+const isSubstringInArray = function(str2, arr) {
+ for (const [i, element] of arr.entries()) {
+ if (element.match(str2)) {
+ return i;
+ }
+ }
+ return -1;
+};
+function interpolateToCurve(interpolate, defaultCurve) {
+ if (!interpolate) {
+ return defaultCurve;
+ }
+ const curveName = `curve${interpolate.charAt(0).toUpperCase() + interpolate.slice(1)}`;
+ return d3CurveTypes[curveName] || defaultCurve;
+}
+function formatUrl(linkStr, config) {
+ const url = linkStr.trim();
+ if (url) {
+ if (config.securityLevel !== "loose") {
+ return sanitizeUrl(url);
+ }
+ return url;
+ }
+}
+const runFunc = (functionName, ...params) => {
+ const arrPaths = functionName.split(".");
+ const len = arrPaths.length - 1;
+ const fnName = arrPaths[len];
+ let obj = window;
+ for (let i = 0; i < len; i++) {
+ obj = obj[arrPaths[i]];
+ if (!obj) {
+ return;
+ }
+ }
+ obj[fnName](...params);
+};
+function distance(p1, p2) {
+ return p1 && p2 ? Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2)) : 0;
+}
+function traverseEdge(points) {
+ let prevPoint;
+ let totalDistance = 0;
+ points.forEach((point) => {
+ totalDistance += distance(point, prevPoint);
+ prevPoint = point;
+ });
+ let remainingDistance = totalDistance / 2;
+ let center = void 0;
+ prevPoint = void 0;
+ points.forEach((point) => {
+ if (prevPoint && !center) {
+ const vectorDistance = distance(point, prevPoint);
+ if (vectorDistance < remainingDistance) {
+ remainingDistance -= vectorDistance;
+ } else {
+ const distanceRatio = remainingDistance / vectorDistance;
+ if (distanceRatio <= 0) {
+ center = prevPoint;
+ }
+ if (distanceRatio >= 1) {
+ center = { x: point.x, y: point.y };
+ }
+ if (distanceRatio > 0 && distanceRatio < 1) {
+ center = {
+ x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point.x,
+ y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point.y
+ };
+ }
+ }
+ }
+ prevPoint = point;
+ });
+ return center;
+}
+function calcLabelPosition(points) {
+ if (points.length === 1) {
+ return points[0];
+ }
+ return traverseEdge(points);
+}
+const calcCardinalityPosition = (isRelationTypePresent, points, initialPosition) => {
+ let prevPoint;
+ log$1.info(`our points ${JSON.stringify(points)}`);
+ if (points[0] !== initialPosition) {
+ points = points.reverse();
+ }
+ const distanceToCardinalityPoint = 25;
+ let remainingDistance = distanceToCardinalityPoint;
+ let center;
+ prevPoint = void 0;
+ points.forEach((point) => {
+ if (prevPoint && !center) {
+ const vectorDistance = distance(point, prevPoint);
+ if (vectorDistance < remainingDistance) {
+ remainingDistance -= vectorDistance;
+ } else {
+ const distanceRatio = remainingDistance / vectorDistance;
+ if (distanceRatio <= 0) {
+ center = prevPoint;
+ }
+ if (distanceRatio >= 1) {
+ center = { x: point.x, y: point.y };
+ }
+ if (distanceRatio > 0 && distanceRatio < 1) {
+ center = {
+ x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point.x,
+ y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point.y
+ };
+ }
+ }
+ }
+ prevPoint = point;
+ });
+ const d = isRelationTypePresent ? 10 : 5;
+ const angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);
+ const cardinalityPosition = { x: 0, y: 0 };
+ cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;
+ cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;
+ return cardinalityPosition;
+};
+function calcTerminalLabelPosition(terminalMarkerSize, position, _points) {
+ let points = JSON.parse(JSON.stringify(_points));
+ let prevPoint;
+ log$1.info("our points", points);
+ if (position !== "start_left" && position !== "start_right") {
+ points = points.reverse();
+ }
+ points.forEach((point) => {
+ prevPoint = point;
+ });
+ const distanceToCardinalityPoint = 25 + terminalMarkerSize;
+ let remainingDistance = distanceToCardinalityPoint;
+ let center;
+ prevPoint = void 0;
+ points.forEach((point) => {
+ if (prevPoint && !center) {
+ const vectorDistance = distance(point, prevPoint);
+ if (vectorDistance < remainingDistance) {
+ remainingDistance -= vectorDistance;
+ } else {
+ const distanceRatio = remainingDistance / vectorDistance;
+ if (distanceRatio <= 0) {
+ center = prevPoint;
+ }
+ if (distanceRatio >= 1) {
+ center = { x: point.x, y: point.y };
+ }
+ if (distanceRatio > 0 && distanceRatio < 1) {
+ center = {
+ x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point.x,
+ y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point.y
+ };
+ }
+ }
+ }
+ prevPoint = point;
+ });
+ const d = 10 + terminalMarkerSize * 0.5;
+ const angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);
+ const cardinalityPosition = { x: 0, y: 0 };
+ cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;
+ cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;
+ if (position === "start_left") {
+ cardinalityPosition.x = Math.sin(angle + Math.PI) * d + (points[0].x + center.x) / 2;
+ cardinalityPosition.y = -Math.cos(angle + Math.PI) * d + (points[0].y + center.y) / 2;
+ }
+ if (position === "end_right") {
+ cardinalityPosition.x = Math.sin(angle - Math.PI) * d + (points[0].x + center.x) / 2 - 5;
+ cardinalityPosition.y = -Math.cos(angle - Math.PI) * d + (points[0].y + center.y) / 2 - 5;
+ }
+ if (position === "end_left") {
+ cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2 - 5;
+ cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2 - 5;
+ }
+ return cardinalityPosition;
+}
+function getStylesFromArray(arr) {
+ let style = "";
+ let labelStyle = "";
+ for (const element of arr) {
+ if (element !== void 0) {
+ if (element.startsWith("color:") || element.startsWith("text-align:")) {
+ labelStyle = labelStyle + element + ";";
+ } else {
+ style = style + element + ";";
+ }
+ }
+ }
+ return { style, labelStyle };
+}
+let cnt = 0;
+const generateId = () => {
+ cnt++;
+ return "id-" + Math.random().toString(36).substr(2, 12) + "-" + cnt;
+};
+function makeid(length) {
+ let result = "";
+ const characters = "0123456789abcdef";
+ const charactersLength = characters.length;
+ for (let i = 0; i < length; i++) {
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
+ }
+ return result;
+}
+const random = (options) => {
+ return makeid(options.length);
+};
+const getTextObj = function() {
+ return {
+ x: 0,
+ y: 0,
+ fill: void 0,
+ anchor: "start",
+ style: "#666",
+ width: 100,
+ height: 100,
+ textMargin: 0,
+ rx: 0,
+ ry: 0,
+ valign: void 0
+ };
+};
+const drawSimpleText = function(elem, textData) {
+ const nText = textData.text.replace(common$1.lineBreakRegex, " ");
+ const [, _fontSizePx] = parseFontSize(textData.fontSize);
+ const textElem = elem.append("text");
+ textElem.attr("x", textData.x);
+ textElem.attr("y", textData.y);
+ textElem.style("text-anchor", textData.anchor);
+ textElem.style("font-family", textData.fontFamily);
+ textElem.style("font-size", _fontSizePx);
+ textElem.style("font-weight", textData.fontWeight);
+ textElem.attr("fill", textData.fill);
+ if (textData.class !== void 0) {
+ textElem.attr("class", textData.class);
+ }
+ const span = textElem.append("tspan");
+ span.attr("x", textData.x + textData.textMargin * 2);
+ span.attr("fill", textData.fill);
+ span.text(nText);
+ return textElem;
+};
+const wrapLabel = memoize(
+ (label, maxWidth, config) => {
+ if (!label) {
+ return label;
+ }
+ config = Object.assign(
+ { fontSize: 12, fontWeight: 400, fontFamily: "Arial", joinWith: "<br/>" },
+ config
+ );
+ if (common$1.lineBreakRegex.test(label)) {
+ return label;
+ }
+ const words = label.split(" ");
+ const completedLines = [];
+ let nextLine = "";
+ words.forEach((word, index) => {
+ const wordLength = calculateTextWidth(`${word} `, config);
+ const nextLineLength = calculateTextWidth(nextLine, config);
+ if (wordLength > maxWidth) {
+ const { hyphenatedStrings, remainingWord } = breakString(word, maxWidth, "-", config);
+ completedLines.push(nextLine, ...hyphenatedStrings);
+ nextLine = remainingWord;
+ } else if (nextLineLength + wordLength >= maxWidth) {
+ completedLines.push(nextLine);
+ nextLine = word;
+ } else {
+ nextLine = [nextLine, word].filter(Boolean).join(" ");
+ }
+ const currentWord = index + 1;
+ const isLastWord = currentWord === words.length;
+ if (isLastWord) {
+ completedLines.push(nextLine);
+ }
+ });
+ return completedLines.filter((line) => line !== "").join(config.joinWith);
+ },
+ (label, maxWidth, config) => `${label}${maxWidth}${config.fontSize}${config.fontWeight}${config.fontFamily}${config.joinWith}`
+);
+const breakString = memoize(
+ (word, maxWidth, hyphenCharacter = "-", config) => {
+ config = Object.assign(
+ { fontSize: 12, fontWeight: 400, fontFamily: "Arial", margin: 0 },
+ config
+ );
+ const characters = [...word];
+ const lines = [];
+ let currentLine = "";
+ characters.forEach((character, index) => {
+ const nextLine = `${currentLine}${character}`;
+ const lineWidth = calculateTextWidth(nextLine, config);
+ if (lineWidth >= maxWidth) {
+ const currentCharacter = index + 1;
+ const isLastLine = characters.length === currentCharacter;
+ const hyphenatedNextLine = `${nextLine}${hyphenCharacter}`;
+ lines.push(isLastLine ? nextLine : hyphenatedNextLine);
+ currentLine = "";
+ } else {
+ currentLine = nextLine;
+ }
+ });
+ return { hyphenatedStrings: lines, remainingWord: currentLine };
+ },
+ (word, maxWidth, hyphenCharacter = "-", config) => `${word}${maxWidth}${hyphenCharacter}${config.fontSize}${config.fontWeight}${config.fontFamily}`
+);
+function calculateTextHeight(text, config) {
+ config = Object.assign(
+ { fontSize: 12, fontWeight: 400, fontFamily: "Arial", margin: 15 },
+ config
+ );
+ return calculateTextDimensions(text, config).height;
+}
+function calculateTextWidth(text, config) {
+ config = Object.assign({ fontSize: 12, fontWeight: 400, fontFamily: "Arial" }, config);
+ return calculateTextDimensions(text, config).width;
+}
+const calculateTextDimensions = memoize(
+ (text, config) => {
+ config = Object.assign({ fontSize: 12, fontWeight: 400, fontFamily: "Arial" }, config);
+ const { fontSize, fontFamily, fontWeight } = config;
+ if (!text) {
+ return { width: 0, height: 0 };
+ }
+ const [, _fontSizePx] = parseFontSize(fontSize);
+ const fontFamilies = ["sans-serif", fontFamily];
+ const lines = text.split(common$1.lineBreakRegex);
+ const dims = [];
+ const body = select("body");
+ if (!body.remove) {
+ return { width: 0, height: 0, lineHeight: 0 };
+ }
+ const g = body.append("svg");
+ for (const fontFamily2 of fontFamilies) {
+ let cheight = 0;
+ const dim = { width: 0, height: 0, lineHeight: 0 };
+ for (const line of lines) {
+ const textObj = getTextObj();
+ textObj.text = line;
+ const textElem = drawSimpleText(g, textObj).style("font-size", _fontSizePx).style("font-weight", fontWeight).style("font-family", fontFamily2);
+ const bBox = (textElem._groups || textElem)[0][0].getBBox();
+ dim.width = Math.round(Math.max(dim.width, bBox.width));
+ cheight = Math.round(bBox.height);
+ dim.height += cheight;
+ dim.lineHeight = Math.round(Math.max(dim.lineHeight, cheight));
+ }
+ dims.push(dim);
+ }
+ g.remove();
+ const index = isNaN(dims[1].height) || isNaN(dims[1].width) || isNaN(dims[1].lineHeight) || dims[0].height > dims[1].height && dims[0].width > dims[1].width && dims[0].lineHeight > dims[1].lineHeight ? 0 : 1;
+ return dims[index];
+ },
+ (text, config) => `${text}${config.fontSize}${config.fontWeight}${config.fontFamily}`
+);
+const initIdGenerator = class iterator {
+ constructor(deterministic, seed) {
+ this.deterministic = deterministic;
+ this.seed = seed;
+ this.count = seed ? seed.length : 0;
+ }
+ next() {
+ if (!this.deterministic) {
+ return Date.now();
+ }
+ return this.count++;
+ }
+};
+let decoder;
+const entityDecode = function(html) {
+ decoder = decoder || document.createElement("div");
+ html = escape(html).replace(/%26/g, "&").replace(/%23/g, "#").replace(/%3B/g, ";");
+ decoder.innerHTML = html;
+ return unescape(decoder.textContent);
+};
+const directiveSanitizer = (args) => {
+ log$1.debug("directiveSanitizer called with", args);
+ if (typeof args === "object") {
+ if (args.length) {
+ args.forEach((arg) => directiveSanitizer(arg));
+ } else {
+ Object.keys(args).forEach((key) => {
+ log$1.debug("Checking key", key);
+ if (key.startsWith("__")) {
+ log$1.debug("sanitize deleting __ option", key);
+ delete args[key];
+ }
+ if (key.includes("proto")) {
+ log$1.debug("sanitize deleting proto option", key);
+ delete args[key];
+ }
+ if (key.includes("constr")) {
+ log$1.debug("sanitize deleting constr option", key);
+ delete args[key];
+ }
+ if (key.includes("themeCSS")) {
+ log$1.debug("sanitizing themeCss option");
+ args[key] = sanitizeCss(args[key]);
+ }
+ if (key.includes("fontFamily")) {
+ log$1.debug("sanitizing fontFamily option");
+ args[key] = sanitizeCss(args[key]);
+ }
+ if (key.includes("altFontFamily")) {
+ log$1.debug("sanitizing altFontFamily option");
+ args[key] = sanitizeCss(args[key]);
+ }
+ if (!configKeys.includes(key)) {
+ log$1.debug("sanitize deleting option", key);
+ delete args[key];
+ } else {
+ if (typeof args[key] === "object") {
+ log$1.debug("sanitize deleting object", key);
+ directiveSanitizer(args[key]);
+ }
+ }
+ });
+ }
+ }
+ if (args.themeVariables) {
+ const kArr = Object.keys(args.themeVariables);
+ for (const k of kArr) {
+ const val = args.themeVariables[k];
+ if (val && val.match && !val.match(/^[\d "#%(),.;A-Za-z]+$/)) {
+ args.themeVariables[k] = "";
+ }
+ }
+ }
+ log$1.debug("After sanitization", args);
+};
+const sanitizeCss = (str2) => {
+ let startCnt = 0;
+ let endCnt = 0;
+ for (const element of str2) {
+ if (startCnt < endCnt) {
+ return "{ /* ERROR: Unbalanced CSS */ }";
+ }
+ if (element === "{") {
+ startCnt++;
+ } else if (element === "}") {
+ endCnt++;
+ }
+ }
+ if (startCnt !== endCnt) {
+ return "{ /* ERROR: Unbalanced CSS */ }";
+ }
+ return str2;
+};
+function isDetailedError(error) {
+ return "str" in error;
+}
+function getErrorMessage(error) {
+ if (error instanceof Error) {
+ return error.message;
+ }
+ return String(error);
+}
+const insertTitle = (parent, cssClass, titleTopMargin, title) => {
+ if (!title) {
+ return;
+ }
+ const bounds = parent.node().getBBox();
+ parent.append("text").text(title).attr("x", bounds.x + bounds.width / 2).attr("y", -titleTopMargin).attr("class", cssClass);
+};
+const parseFontSize = (fontSize) => {
+ if (typeof fontSize === "number") {
+ return [fontSize, fontSize + "px"];
+ }
+ const fontSizeNumber = parseInt(fontSize, 10);
+ if (Number.isNaN(fontSizeNumber)) {
+ return [void 0, void 0];
+ } else if (fontSize === String(fontSizeNumber)) {
+ return [fontSizeNumber, fontSize + "px"];
+ } else {
+ return [fontSizeNumber, fontSize];
+ }
+};
+const utils = {
+ assignWithDepth,
+ wrapLabel,
+ calculateTextHeight,
+ calculateTextWidth,
+ calculateTextDimensions,
+ detectInit,
+ detectDirective,
+ isSubstringInArray,
+ interpolateToCurve,
+ calcLabelPosition,
+ calcCardinalityPosition,
+ calcTerminalLabelPosition,
+ formatUrl,
+ getStylesFromArray,
+ generateId,
+ random,
+ runFunc,
+ entityDecode,
+ initIdGenerator,
+ directiveSanitizer,
+ sanitizeCss,
+ insertTitle,
+ parseFontSize
+};
+export {
+ UnknownDiagramError as U,
+ registerDiagram as a,
+ getDiagramLoader as b,
+ directiveSanitizer as c,
+ detectType as d,
+ extractFrontMatter as e,
+ getStyles$1 as f,
+ getDiagram as g,
+ getErrorMessage as h,
+ isDetailedError as i,
+ calculateTextWidth as j,
+ calculateTextHeight as k,
+ loadRegisteredDiagrams as l,
+ getStylesFromArray as m,
+ interpolateToCurve as n,
+ random as o,
+ parseDirective$1 as p,
+ getConfig as q,
+ registerLazyLoadedDiagrams as r,
+ setupGraphViewbox as s,
+ parseFontSize as t,
+ utils as u,
+ generateId as v,
+ wrapLabel as w
+};
+//# sourceMappingURL=utils-d5eeff82.js.map