diff --git a/dist/index.js b/dist/index.js index 76f25d0..52e648d 100644 --- a/dist/index.js +++ b/dist/index.js @@ -7365,51 +7365,48 @@ exports.Deprecation = Deprecation; "use strict"; +const loader = __nccwpck_require__(1161) +const dumper = __nccwpck_require__(8866) -var loader = __nccwpck_require__(1161); -var dumper = __nccwpck_require__(8866); - - -function renamed(from, to) { +function renamed (from, to) { return function () { throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' + - 'Use yaml.' + to + ' instead, which is now safe by default.'); - }; + 'Use yaml.' + to + ' instead, which is now safe by default.') + } } - -module.exports.Type = __nccwpck_require__(6073); -module.exports.Schema = __nccwpck_require__(1082); -module.exports.FAILSAFE_SCHEMA = __nccwpck_require__(8562); -module.exports.JSON_SCHEMA = __nccwpck_require__(1035); -module.exports.CORE_SCHEMA = __nccwpck_require__(2011); -module.exports.DEFAULT_SCHEMA = __nccwpck_require__(8759); -module.exports.load = loader.load; -module.exports.loadAll = loader.loadAll; -module.exports.dump = dumper.dump; -module.exports.YAMLException = __nccwpck_require__(8179); +module.exports.Type = __nccwpck_require__(6073) +module.exports.Schema = __nccwpck_require__(1082) +module.exports.FAILSAFE_SCHEMA = __nccwpck_require__(8562) +module.exports.JSON_SCHEMA = __nccwpck_require__(1035) +module.exports.CORE_SCHEMA = __nccwpck_require__(2011) +module.exports.DEFAULT_SCHEMA = __nccwpck_require__(8759) +module.exports.load = loader.load +module.exports.loadAll = loader.loadAll +module.exports.dump = dumper.dump +module.exports.YAMLException = __nccwpck_require__(8179) // Re-export all types in case user wants to create custom schema module.exports.types = { - binary: __nccwpck_require__(7900), - float: __nccwpck_require__(2705), - map: __nccwpck_require__(6150), - null: __nccwpck_require__(721), - pairs: __nccwpck_require__(6860), - set: __nccwpck_require__(9548), + binary: __nccwpck_require__(7900), + float: __nccwpck_require__(2705), + map: __nccwpck_require__(6150), + null: __nccwpck_require__(721), + pairs: __nccwpck_require__(6860), + set: __nccwpck_require__(9548), timestamp: __nccwpck_require__(9212), - bool: __nccwpck_require__(4993), - int: __nccwpck_require__(1615), - merge: __nccwpck_require__(6104), - omap: __nccwpck_require__(9046), - seq: __nccwpck_require__(7283), - str: __nccwpck_require__(3619) -}; + bool: __nccwpck_require__(4993), + int: __nccwpck_require__(1615), + merge: __nccwpck_require__(6104), + omap: __nccwpck_require__(9046), + seq: __nccwpck_require__(7283), + str: __nccwpck_require__(3619) +} // Removed functions from JS-YAML 3.0.x -module.exports.safeLoad = renamed('safeLoad', 'load'); -module.exports.safeLoadAll = renamed('safeLoadAll', 'loadAll'); -module.exports.safeDump = renamed('safeDump', 'dump'); +module.exports.safeLoad = renamed('safeLoad', 'load') +module.exports.safeLoadAll = renamed('safeLoadAll', 'loadAll') +module.exports.safeDump = renamed('safeDump', 'dump') /***/ }), @@ -7420,63 +7417,54 @@ module.exports.safeDump = renamed('safeDump', 'dump'); "use strict"; - -function isNothing(subject) { - return (typeof subject === 'undefined') || (subject === null); +function isNothing (subject) { + return (typeof subject === 'undefined') || (subject === null) } - -function isObject(subject) { - return (typeof subject === 'object') && (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 [] -function toArray(sequence) { - if (Array.isArray(sequence)) return sequence; - else if (isNothing(sequence)) return []; - - return [ sequence ]; + return [sequence] } - -function extend(target, source) { - var index, length, key, sourceKeys; - +function extend (target, source) { if (source) { - sourceKeys = Object.keys(source); + const sourceKeys = Object.keys(source) - for (index = 0, length = sourceKeys.length; index < length; index += 1) { - key = sourceKeys[index]; - target[key] = source[key]; + for (let index = 0, length = sourceKeys.length; index < length; index += 1) { + const key = sourceKeys[index] + target[key] = source[key] } } - return target; + return target } +function repeat (string, count) { + let result = '' -function repeat(string, count) { - var result = '', cycle; - - for (cycle = 0; cycle < count; cycle += 1) { - result += string; + for (let cycle = 0; cycle < count; cycle += 1) { + result += string } - return result; + return result } - -function isNegativeZero(number) { - return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number); +function isNegativeZero (number) { + return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number) } - -module.exports.isNothing = isNothing; -module.exports.isObject = isObject; -module.exports.toArray = toArray; -module.exports.repeat = repeat; -module.exports.isNegativeZero = isNegativeZero; -module.exports.extend = extend; +module.exports.isNothing = isNothing +module.exports.isObject = isObject +module.exports.toArray = toArray +module.exports.repeat = repeat +module.exports.isNegativeZero = isNegativeZero +module.exports.extend = extend /***/ }), @@ -7487,203 +7475,196 @@ module.exports.extend = extend; "use strict"; -/*eslint-disable no-use-before-define*/ - -var common = __nccwpck_require__(6829); -var YAMLException = __nccwpck_require__(8179); -var DEFAULT_SCHEMA = __nccwpck_require__(8759); - -var _toString = Object.prototype.toString; -var _hasOwnProperty = Object.prototype.hasOwnProperty; - -var CHAR_BOM = 0xFEFF; -var CHAR_TAB = 0x09; /* Tab */ -var CHAR_LINE_FEED = 0x0A; /* LF */ -var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ -var CHAR_SPACE = 0x20; /* Space */ -var CHAR_EXCLAMATION = 0x21; /* ! */ -var CHAR_DOUBLE_QUOTE = 0x22; /* " */ -var CHAR_SHARP = 0x23; /* # */ -var CHAR_PERCENT = 0x25; /* % */ -var CHAR_AMPERSAND = 0x26; /* & */ -var CHAR_SINGLE_QUOTE = 0x27; /* ' */ -var CHAR_ASTERISK = 0x2A; /* * */ -var CHAR_COMMA = 0x2C; /* , */ -var CHAR_MINUS = 0x2D; /* - */ -var CHAR_COLON = 0x3A; /* : */ -var CHAR_EQUALS = 0x3D; /* = */ -var CHAR_GREATER_THAN = 0x3E; /* > */ -var CHAR_QUESTION = 0x3F; /* ? */ -var CHAR_COMMERCIAL_AT = 0x40; /* @ */ -var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ -var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ -var CHAR_GRAVE_ACCENT = 0x60; /* ` */ -var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ -var CHAR_VERTICAL_LINE = 0x7C; /* | */ -var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ - -var ESCAPE_SEQUENCES = {}; - -ESCAPE_SEQUENCES[0x00] = '\\0'; -ESCAPE_SEQUENCES[0x07] = '\\a'; -ESCAPE_SEQUENCES[0x08] = '\\b'; -ESCAPE_SEQUENCES[0x09] = '\\t'; -ESCAPE_SEQUENCES[0x0A] = '\\n'; -ESCAPE_SEQUENCES[0x0B] = '\\v'; -ESCAPE_SEQUENCES[0x0C] = '\\f'; -ESCAPE_SEQUENCES[0x0D] = '\\r'; -ESCAPE_SEQUENCES[0x1B] = '\\e'; -ESCAPE_SEQUENCES[0x22] = '\\"'; -ESCAPE_SEQUENCES[0x5C] = '\\\\'; -ESCAPE_SEQUENCES[0x85] = '\\N'; -ESCAPE_SEQUENCES[0xA0] = '\\_'; -ESCAPE_SEQUENCES[0x2028] = '\\L'; -ESCAPE_SEQUENCES[0x2029] = '\\P'; - -var DEPRECATED_BOOLEANS_SYNTAX = [ +const common = __nccwpck_require__(6829) +const YAMLException = __nccwpck_require__(8179) +const DEFAULT_SCHEMA = __nccwpck_require__(8759) + +const _toString = Object.prototype.toString +const _hasOwnProperty = Object.prototype.hasOwnProperty + +const CHAR_BOM = 0xFEFF +const CHAR_TAB = 0x09 /* Tab */ +const CHAR_LINE_FEED = 0x0A /* LF */ +const CHAR_CARRIAGE_RETURN = 0x0D /* CR */ +const CHAR_SPACE = 0x20 /* Space */ +const CHAR_EXCLAMATION = 0x21 /* ! */ +const CHAR_DOUBLE_QUOTE = 0x22 /* " */ +const CHAR_SHARP = 0x23 /* # */ +const CHAR_PERCENT = 0x25 /* % */ +const CHAR_AMPERSAND = 0x26 /* & */ +const CHAR_SINGLE_QUOTE = 0x27 /* ' */ +const CHAR_ASTERISK = 0x2A /* * */ +const CHAR_COMMA = 0x2C /* , */ +const CHAR_MINUS = 0x2D /* - */ +const CHAR_COLON = 0x3A /* : */ +const CHAR_EQUALS = 0x3D /* = */ +const CHAR_GREATER_THAN = 0x3E /* > */ +const CHAR_QUESTION = 0x3F /* ? */ +const CHAR_COMMERCIAL_AT = 0x40 /* @ */ +const CHAR_LEFT_SQUARE_BRACKET = 0x5B /* [ */ +const CHAR_RIGHT_SQUARE_BRACKET = 0x5D /* ] */ +const CHAR_GRAVE_ACCENT = 0x60 /* ` */ +const CHAR_LEFT_CURLY_BRACKET = 0x7B /* { */ +const CHAR_VERTICAL_LINE = 0x7C /* | */ +const CHAR_RIGHT_CURLY_BRACKET = 0x7D /* } */ + +const ESCAPE_SEQUENCES = {} + +ESCAPE_SEQUENCES[0x00] = '\\0' +ESCAPE_SEQUENCES[0x07] = '\\a' +ESCAPE_SEQUENCES[0x08] = '\\b' +ESCAPE_SEQUENCES[0x09] = '\\t' +ESCAPE_SEQUENCES[0x0A] = '\\n' +ESCAPE_SEQUENCES[0x0B] = '\\v' +ESCAPE_SEQUENCES[0x0C] = '\\f' +ESCAPE_SEQUENCES[0x0D] = '\\r' +ESCAPE_SEQUENCES[0x1B] = '\\e' +ESCAPE_SEQUENCES[0x22] = '\\"' +ESCAPE_SEQUENCES[0x5C] = '\\\\' +ESCAPE_SEQUENCES[0x85] = '\\N' +ESCAPE_SEQUENCES[0xA0] = '\\_' +ESCAPE_SEQUENCES[0x2028] = '\\L' +ESCAPE_SEQUENCES[0x2029] = '\\P' + +const DEPRECATED_BOOLEANS_SYNTAX = [ 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' -]; - -var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/; +] -function compileStyleMap(schema, map) { - var result, keys, index, length, tag, style, type; +const DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/ - if (map === null) return {}; +function compileStyleMap (schema, map) { + if (map === null) return {} - result = {}; - keys = Object.keys(map); + const result = {} + const keys = Object.keys(map) - for (index = 0, length = keys.length; index < length; index += 1) { - tag = keys[index]; - style = String(map[tag]); + for (let index = 0, length = keys.length; index < length; index += 1) { + let tag = keys[index] + let style = String(map[tag]) if (tag.slice(0, 2) === '!!') { - tag = 'tag:yaml.org,2002:' + tag.slice(2); + tag = 'tag:yaml.org,2002:' + tag.slice(2) } - type = schema.compiledTypeMap['fallback'][tag]; + const type = schema.compiledTypeMap['fallback'][tag] if (type && _hasOwnProperty.call(type.styleAliases, style)) { - style = type.styleAliases[style]; + style = type.styleAliases[style] } - result[tag] = style; + result[tag] = style } - return result; + return result } -function encodeHex(character) { - var string, handle, length; +function encodeHex (character) { + let handle + let length - string = character.toString(16).toUpperCase(); + const string = character.toString(16).toUpperCase() if (character <= 0xFF) { - handle = 'x'; - length = 2; + handle = 'x' + length = 2 } else if (character <= 0xFFFF) { - handle = 'u'; - length = 4; + handle = 'u' + length = 4 } else if (character <= 0xFFFFFFFF) { - handle = 'U'; - length = 8; + handle = 'U' + length = 8 } else { - throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF'); + throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF') } - return '\\' + handle + common.repeat('0', length - string.length) + string; + return '\\' + handle + common.repeat('0', length - string.length) + string } +const QUOTING_TYPE_SINGLE = 1 +const QUOTING_TYPE_DOUBLE = 2 -var QUOTING_TYPE_SINGLE = 1, - QUOTING_TYPE_DOUBLE = 2; +function State (options) { + this.schema = options['schema'] || DEFAULT_SCHEMA + this.indent = Math.max(1, (options['indent'] || 2)) + this.noArrayIndent = options['noArrayIndent'] || false + this.skipInvalid = options['skipInvalid'] || false + this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']) + this.styleMap = compileStyleMap(this.schema, options['styles'] || null) + this.sortKeys = options['sortKeys'] || false + this.lineWidth = options['lineWidth'] || 80 + this.noRefs = options['noRefs'] || false + this.noCompatMode = options['noCompatMode'] || false + this.condenseFlow = options['condenseFlow'] || false + this.quotingType = options['quotingType'] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE + this.forceQuotes = options['forceQuotes'] || false + this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null -function State(options) { - this.schema = options['schema'] || DEFAULT_SCHEMA; - this.indent = Math.max(1, (options['indent'] || 2)); - this.noArrayIndent = options['noArrayIndent'] || false; - this.skipInvalid = options['skipInvalid'] || false; - this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); - this.styleMap = compileStyleMap(this.schema, options['styles'] || null); - this.sortKeys = options['sortKeys'] || false; - this.lineWidth = options['lineWidth'] || 80; - this.noRefs = options['noRefs'] || false; - this.noCompatMode = options['noCompatMode'] || false; - this.condenseFlow = options['condenseFlow'] || false; - this.quotingType = options['quotingType'] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE; - this.forceQuotes = options['forceQuotes'] || false; - this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null; + this.implicitTypes = this.schema.compiledImplicit + this.explicitTypes = this.schema.compiledExplicit - this.implicitTypes = this.schema.compiledImplicit; - this.explicitTypes = this.schema.compiledExplicit; + this.tag = null + this.result = '' - this.tag = null; - this.result = ''; - - this.duplicates = []; - this.usedDuplicates = null; + this.duplicates = [] + this.usedDuplicates = null } // Indents every line in a string. Empty lines (\n only) are not indented. -function indentString(string, spaces) { - var ind = common.repeat(' ', spaces), - position = 0, - next = -1, - result = '', - line, - length = string.length; +function indentString (string, spaces) { + const ind = common.repeat(' ', spaces) + let position = 0 + let result = '' + const length = string.length while (position < length) { - next = string.indexOf('\n', position); + let line + const next = string.indexOf('\n', position) if (next === -1) { - line = string.slice(position); - position = length; + line = string.slice(position) + position = length } else { - line = string.slice(position, next + 1); - position = next + 1; + line = string.slice(position, next + 1) + position = next + 1 } - if (line.length && line !== '\n') result += ind; + if (line.length && line !== '\n') result += ind - result += line; + result += line } - return result; + return result } -function generateNextLine(state, level) { - return '\n' + common.repeat(' ', state.indent * level); +function generateNextLine (state, level) { + return '\n' + common.repeat(' ', state.indent * level) } -function testImplicitResolving(state, str) { - var index, length, type; - - for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { - type = state.implicitTypes[index]; +function testImplicitResolving (state, str) { + for (let index = 0, length = state.implicitTypes.length; index < length; index += 1) { + const type = state.implicitTypes[index] if (type.resolve(str)) { - return true; + return true } } - return false; + return false } // [33] s-white ::= s-space | s-tab -function isWhitespace(c) { - return c === CHAR_SPACE || c === CHAR_TAB; +function isWhitespace (c) { + return c === CHAR_SPACE || c === CHAR_TAB } // Returns true if the character can be printed without escaping. // From YAML 1.2: "any allowed characters known to be non-printable // should also be escaped. [However,] This isn’t mandatory" // Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. -function isPrintable(c) { - return (0x00020 <= c && c <= 0x00007E) - || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) - || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM) - || (0x10000 <= c && c <= 0x10FFFF); +function isPrintable (c) { + return (c >= 0x00020 && c <= 0x00007E) || + ((c >= 0x000A1 && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) || + ((c >= 0x0E000 && c <= 0x00FFFD) && c !== CHAR_BOM) || + (c >= 0x10000 && c <= 0x10FFFF) } // [34] ns-char ::= nb-char - s-white @@ -7691,12 +7672,12 @@ function isPrintable(c) { // [26] b-char ::= b-line-feed | b-carriage-return // Including s-white (for some reason, examples doesn't match specs in this aspect) // ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark -function isNsCharOrWhitespace(c) { - return isPrintable(c) - && c !== CHAR_BOM +function isNsCharOrWhitespace (c) { + return isPrintable(c) && + c !== CHAR_BOM && // - b-char - && c !== CHAR_CARRIAGE_RETURN - && c !== CHAR_LINE_FEED; + c !== CHAR_CARRIAGE_RETURN && + c !== CHAR_LINE_FEED } // [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out @@ -7708,91 +7689,96 @@ function isNsCharOrWhitespace(c) { // [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” ) // | ( /* An ns-char preceding */ “#” ) // | ( “:” /* Followed by an ns-plain-safe(c) */ ) -function isPlainSafe(c, prev, inblock) { - var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c); - var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c); +function isPlainSafe (c, prev, inblock) { + const cIsNsCharOrWhitespace = isNsCharOrWhitespace(c) + const cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c) return ( - // ns-plain-safe - inblock ? // c = flow-in - cIsNsCharOrWhitespace - : cIsNsCharOrWhitespace - // - c-flow-indicator - && c !== CHAR_COMMA - && c !== CHAR_LEFT_SQUARE_BRACKET - && c !== CHAR_RIGHT_SQUARE_BRACKET - && c !== CHAR_LEFT_CURLY_BRACKET - && c !== CHAR_RIGHT_CURLY_BRACKET - ) + ( + // ns-plain-safe + inblock // c = flow-in + ? cIsNsCharOrWhitespace + : cIsNsCharOrWhitespace && + // - c-flow-indicator + c !== CHAR_COMMA && + c !== CHAR_LEFT_SQUARE_BRACKET && + c !== CHAR_RIGHT_SQUARE_BRACKET && + c !== CHAR_LEFT_CURLY_BRACKET && + c !== CHAR_RIGHT_CURLY_BRACKET + ) && // ns-plain-char - && c !== CHAR_SHARP // false on '#' - && !(prev === CHAR_COLON && !cIsNsChar) // false on ': ' - || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#' - || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]' + c !== CHAR_SHARP && // false on '#' + !(prev === CHAR_COLON && !cIsNsChar) + ) || // false on ': ' + (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) || // change to true on '[^ ]#' + (prev === CHAR_COLON && cIsNsChar) // change to true on ':[^ ]' } // Simplified test for values allowed as the first character in plain style. -function isPlainSafeFirst(c) { +function isPlainSafeFirst (c) { // Uses a subset of ns-char - c-indicator // where ns-char = nb-char - s-white. // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part - return isPrintable(c) && c !== CHAR_BOM - && !isWhitespace(c) // - s-white + return isPrintable(c) && + c !== CHAR_BOM && + !isWhitespace(c) && // - s-white // - (c-indicator ::= // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” - && c !== CHAR_MINUS - && c !== CHAR_QUESTION - && c !== CHAR_COLON - && c !== CHAR_COMMA - && c !== CHAR_LEFT_SQUARE_BRACKET - && c !== CHAR_RIGHT_SQUARE_BRACKET - && c !== CHAR_LEFT_CURLY_BRACKET - && c !== CHAR_RIGHT_CURLY_BRACKET + c !== CHAR_MINUS && + c !== CHAR_QUESTION && + c !== CHAR_COLON && + c !== CHAR_COMMA && + c !== CHAR_LEFT_SQUARE_BRACKET && + c !== CHAR_RIGHT_SQUARE_BRACKET && + c !== CHAR_LEFT_CURLY_BRACKET && + c !== CHAR_RIGHT_CURLY_BRACKET && // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” - && c !== CHAR_SHARP - && c !== CHAR_AMPERSAND - && c !== CHAR_ASTERISK - && c !== CHAR_EXCLAMATION - && c !== CHAR_VERTICAL_LINE - && c !== CHAR_EQUALS - && c !== CHAR_GREATER_THAN - && c !== CHAR_SINGLE_QUOTE - && c !== CHAR_DOUBLE_QUOTE + c !== CHAR_SHARP && + c !== CHAR_AMPERSAND && + c !== CHAR_ASTERISK && + c !== CHAR_EXCLAMATION && + c !== CHAR_VERTICAL_LINE && + c !== CHAR_EQUALS && + c !== CHAR_GREATER_THAN && + c !== CHAR_SINGLE_QUOTE && + c !== CHAR_DOUBLE_QUOTE && // | “%” | “@” | “`”) - && c !== CHAR_PERCENT - && c !== CHAR_COMMERCIAL_AT - && c !== CHAR_GRAVE_ACCENT; + c !== CHAR_PERCENT && + c !== CHAR_COMMERCIAL_AT && + c !== CHAR_GRAVE_ACCENT } // Simplified test for values allowed as the last character in plain style. -function isPlainSafeLast(c) { +function isPlainSafeLast (c) { // just not whitespace or colon, it will be checked to be plain character later - return !isWhitespace(c) && c !== CHAR_COLON; + return !isWhitespace(c) && c !== CHAR_COLON } // Same as 'string'.codePointAt(pos), but works in older browsers. -function codePointAt(string, pos) { - var first = string.charCodeAt(pos), second; +function codePointAt (string, pos) { + const first = string.charCodeAt(pos) + let second + if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) { - second = string.charCodeAt(pos + 1); + second = string.charCodeAt(pos + 1) if (second >= 0xDC00 && second <= 0xDFFF) { // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae - return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; + return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000 } } - return first; + return first } // Determines whether block indentation indicator is required. -function needIndentIndicator(string) { - var leadingSpaceRe = /^\n* /; - return leadingSpaceRe.test(string); +function needIndentIndicator (string) { + const leadingSpaceRe = /^\n* / + return leadingSpaceRe.test(string) } -var STYLE_PLAIN = 1, - STYLE_SINGLE = 2, - STYLE_LITERAL = 3, - STYLE_FOLDED = 4, - STYLE_DOUBLE = 5; +const STYLE_PLAIN = 1 +const STYLE_SINGLE = 2 +const STYLE_LITERAL = 3 +const STYLE_FOLDED = 4 +const STYLE_DOUBLE = 5 // Determines which scalar styles are possible and returns the preferred style. // lineWidth = -1 => no limit. @@ -7801,54 +7787,53 @@ var STYLE_PLAIN = 1, // STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. // STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). // STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). -function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, +function chooseScalarStyle (string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType, quotingType, forceQuotes, inblock) { - - var i; - var char = 0; - var prevChar = null; - var hasLineBreak = false; - var hasFoldableLine = false; // only checked if shouldTrackWidth - var shouldTrackWidth = lineWidth !== -1; - var previousLineBreak = -1; // count the first line correctly - var plain = isPlainSafeFirst(codePointAt(string, 0)) - && isPlainSafeLast(codePointAt(string, string.length - 1)); + let i + let char = 0 + let prevChar = null + let hasLineBreak = false + let hasFoldableLine = false // only checked if shouldTrackWidth + const shouldTrackWidth = lineWidth !== -1 + let previousLineBreak = -1 // count the first line correctly + let plain = isPlainSafeFirst(codePointAt(string, 0)) && + isPlainSafeLast(codePointAt(string, string.length - 1)) if (singleLineOnly || forceQuotes) { // Case: no block styles. // Check for disallowed characters to rule out plain and single. for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { - char = codePointAt(string, i); + char = codePointAt(string, i) if (!isPrintable(char)) { - return STYLE_DOUBLE; + return STYLE_DOUBLE } - plain = plain && isPlainSafe(char, prevChar, inblock); - prevChar = char; + plain = plain && isPlainSafe(char, prevChar, inblock) + prevChar = char } } else { // Case: block styles permitted. for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { - char = codePointAt(string, i); + char = codePointAt(string, i) if (char === CHAR_LINE_FEED) { - hasLineBreak = true; + hasLineBreak = true // Check if any line can be folded. if (shouldTrackWidth) { hasFoldableLine = hasFoldableLine || // Foldable line = too long, and not more-indented. (i - previousLineBreak - 1 > lineWidth && - string[previousLineBreak + 1] !== ' '); - previousLineBreak = i; + string[previousLineBreak + 1] !== ' ') + previousLineBreak = i } } else if (!isPrintable(char)) { - return STYLE_DOUBLE; + return STYLE_DOUBLE } - plain = plain && isPlainSafe(char, prevChar, inblock); - prevChar = char; + plain = plain && isPlainSafe(char, prevChar, inblock) + prevChar = char } // in case the end is missing a \n hasFoldableLine = hasFoldableLine || (shouldTrackWidth && (i - previousLineBreak - 1 > lineWidth && - string[previousLineBreak + 1] !== ' ')); + string[previousLineBreak + 1] !== ' ')) } // Although every style can represent \n without escaping, prefer block styles // for multiline, since they're more readable and they don't add empty lines. @@ -7857,20 +7842,20 @@ function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, // Strings interpretable as another type have to be quoted; // e.g. the string 'true' vs. the boolean true. if (plain && !forceQuotes && !testAmbiguousType(string)) { - return STYLE_PLAIN; + return STYLE_PLAIN } - return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE } // Edge case: block indentation indicator can only have one digit. if (indentPerLevel > 9 && needIndentIndicator(string)) { - return STYLE_DOUBLE; + return STYLE_DOUBLE } // At this point we know block styles are valid. // Prefer literal style unless we want to fold. if (!forceQuotes) { - return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; + return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL } - return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE } // Note: line breaking/folding is implemented for only the folded style. @@ -7879,18 +7864,18 @@ function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, // • No ending newline => unaffected; already using strip "-" chomping. // • Ending newline => removed then restored. // Importantly, this keeps the "+" chomp indicator from gaining an extra line. -function writeScalar(state, string, level, iskey, inblock) { +function writeScalar (state, string, level, iskey, inblock) { state.dump = (function () { if (string.length === 0) { - return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''"; + return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''" } if (!state.noCompatMode) { if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) { - return state.quotingType === QUOTING_TYPE_DOUBLE ? ('"' + string + '"') : ("'" + string + "'"); + return state.quotingType === QUOTING_TYPE_DOUBLE ? ('"' + string + '"') : ("'" + string + "'") } } - var indent = state.indent * Math.max(1, level); // no 0-indent scalars + const indent = state.indent * Math.max(1, level) // no 0-indent scalars // As indentation gets deeper, let the width decrease monotonically // to the lower bound min(state.lineWidth, 40). // Note that this implies @@ -7898,461 +7883,441 @@ function writeScalar(state, string, level, iskey, inblock) { // state.lineWidth > 40 + state.indent: width decreases until the lower bound. // This behaves better than a constant minimum width which disallows narrower options, // or an indent threshold which causes the width to suddenly increase. - var lineWidth = state.lineWidth === -1 - ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); + const lineWidth = (state.lineWidth === -1) + ? -1 + : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent) // Without knowing if keys are implicit/explicit, assume implicit for safety. - var singleLineOnly = iskey + const singleLineOnly = iskey || // No block styles in flow mode. - || (state.flowLevel > -1 && level >= state.flowLevel); - function testAmbiguity(string) { - return testImplicitResolving(state, string); + (state.flowLevel > -1 && level >= state.flowLevel) + function testAmbiguity (string) { + return testImplicitResolving(state, string) } switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) { - case STYLE_PLAIN: - return string; + return string case STYLE_SINGLE: - return "'" + string.replace(/'/g, "''") + "'"; + return "'" + string.replace(/'/g, "''") + "'" case STYLE_LITERAL: - return '|' + blockHeader(string, state.indent) - + dropEndingNewline(indentString(string, indent)); + return '|' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(string, indent)) case STYLE_FOLDED: - return '>' + blockHeader(string, state.indent) - + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); + return '>' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(foldString(string, lineWidth), indent)) case STYLE_DOUBLE: - return '"' + escapeString(string, lineWidth) + '"'; + return '"' + escapeString(string, lineWidth) + '"' default: - throw new YAMLException('impossible error: invalid scalar style'); + throw new YAMLException('impossible error: invalid scalar style') } - }()); + }()) } // Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. -function blockHeader(string, indentPerLevel) { - var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; +function blockHeader (string, indentPerLevel) { + const indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '' // note the special case: the string '\n' counts as a "trailing" empty line. - var clip = string[string.length - 1] === '\n'; - var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); - var chomp = keep ? '+' : (clip ? '' : '-'); + const clip = string[string.length - 1] === '\n' + const keep = clip && (string[string.length - 2] === '\n' || string === '\n') + const chomp = keep ? '+' : (clip ? '' : '-') - return indentIndicator + chomp + '\n'; + return indentIndicator + chomp + '\n' } // (See the note for writeScalar.) -function dropEndingNewline(string) { - return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; +function dropEndingNewline (string) { + return string[string.length - 1] === '\n' ? string.slice(0, -1) : string } // Note: a long line without a suitable break point will exceed the width limit. // Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. -function foldString(string, width) { +function foldString (string, width) { // In folded style, $k$ consecutive newlines output as $k+1$ newlines— // unless they're before or after a more-indented line, or at the very // beginning or end, in which case $k$ maps to $k$. // Therefore, parse each chunk as newline(s) followed by a content line. - var lineRe = /(\n+)([^\n]*)/g; + const lineRe = /(\n+)([^\n]*)/g // first line (possibly an empty line) - var result = (function () { - var nextLF = string.indexOf('\n'); - nextLF = nextLF !== -1 ? nextLF : string.length; - lineRe.lastIndex = nextLF; - return foldLine(string.slice(0, nextLF), width); - }()); + let result = (function () { + let nextLF = string.indexOf('\n') + nextLF = nextLF !== -1 ? nextLF : string.length + lineRe.lastIndex = nextLF + return foldLine(string.slice(0, nextLF), width) + }()) // If we haven't reached the first content line yet, don't add an extra \n. - var prevMoreIndented = string[0] === '\n' || string[0] === ' '; - var moreIndented; + let prevMoreIndented = string[0] === '\n' || string[0] === ' ' + let moreIndented // rest of the lines - var match; + let match while ((match = lineRe.exec(string))) { - var prefix = match[1], line = match[2]; - moreIndented = (line[0] === ' '); - result += prefix - + (!prevMoreIndented && !moreIndented && line !== '' - ? '\n' : '') - + foldLine(line, width); - prevMoreIndented = moreIndented; + const prefix = match[1] + const line = match[2] + + moreIndented = (line[0] === ' ') + result += prefix + + ((!prevMoreIndented && !moreIndented && line !== '') ? '\n' : '') + + foldLine(line, width) + prevMoreIndented = moreIndented } - return result; + return result } // Greedy line breaking. // Picks the longest line under the limit each time, // otherwise settles for the shortest line over the limit. // NB. More-indented lines *cannot* be folded, as that would add an extra \n. -function foldLine(line, width) { - if (line === '' || line[0] === ' ') return line; +function foldLine (line, width) { + if (line === '' || line[0] === ' ') return line // Since a more-indented line adds a \n, breaks can't be followed by a space. - var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. - var match; + const breakRe = / [^ ]/g // note: the match index will always be <= length-2. + let match // start is an inclusive index. end, curr, and next are exclusive. - var start = 0, end, curr = 0, next = 0; - var result = ''; + let start = 0 + let end + let curr = 0 + let next = 0 + let result = '' // Invariants: 0 <= start <= length-1. // 0 <= curr <= next <= max(0, length-2). curr - start <= width. // Inside the loop: // A match implies length >= 2, so curr and next are <= length-2. while ((match = breakRe.exec(line))) { - next = match.index; + next = match.index // maintain invariant: curr - start <= width if (next - start > width) { - end = (curr > start) ? curr : next; // derive end <= length-2 - result += '\n' + line.slice(start, end); + end = (curr > start) ? curr : next // derive end <= length-2 + result += '\n' + line.slice(start, end) // skip the space that was output as \n - start = end + 1; // derive start <= length-1 + start = end + 1 // derive start <= length-1 } - curr = next; + curr = next } // By the invariants, start <= length-1, so there is something left over. // It is either the whole string or a part starting from non-whitespace. - result += '\n'; + result += '\n' // Insert a break if the remainder is too long and there is a break available. if (line.length - start > width && curr > start) { - result += line.slice(start, curr) + '\n' + line.slice(curr + 1); + result += line.slice(start, curr) + '\n' + line.slice(curr + 1) } else { - result += line.slice(start); + result += line.slice(start) } - return result.slice(1); // drop extra \n joiner + return result.slice(1) // drop extra \n joiner } // Escapes a double-quoted string. -function escapeString(string) { - var result = ''; - var char = 0; - var escapeSeq; +function escapeString (string) { + let result = '' + let char = 0 - for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { - char = codePointAt(string, i); - escapeSeq = ESCAPE_SEQUENCES[char]; + for (let i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i) + const escapeSeq = ESCAPE_SEQUENCES[char] if (!escapeSeq && isPrintable(char)) { - result += string[i]; - if (char >= 0x10000) result += string[i + 1]; + result += string[i] + if (char >= 0x10000) result += string[i + 1] } else { - result += escapeSeq || encodeHex(char); + result += escapeSeq || encodeHex(char) } } - return result; + return result } -function writeFlowSequence(state, level, object) { - var _result = '', - _tag = state.tag, - index, - length, - value; +function writeFlowSequence (state, level, object) { + let _result = '' + const _tag = state.tag - for (index = 0, length = object.length; index < length; index += 1) { - value = object[index]; + for (let index = 0, length = object.length; index < length; index += 1) { + let value = object[index] if (state.replacer) { - value = state.replacer.call(object, String(index), value); + value = state.replacer.call(object, String(index), value) } // Write only valid elements, put null instead of invalid elements. if (writeNode(state, level, value, false, false) || (typeof value === 'undefined' && writeNode(state, level, null, false, false))) { - - if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : ''); - _result += state.dump; + if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : '') + _result += state.dump } } - state.tag = _tag; - state.dump = '[' + _result + ']'; + state.tag = _tag + state.dump = '[' + _result + ']' } -function writeBlockSequence(state, level, object, compact) { - var _result = '', - _tag = state.tag, - index, - length, - value; +function writeBlockSequence (state, level, object, compact) { + let _result = '' + const _tag = state.tag - for (index = 0, length = object.length; index < length; index += 1) { - value = object[index]; + for (let index = 0, length = object.length; index < length; index += 1) { + let value = object[index] if (state.replacer) { - value = state.replacer.call(object, String(index), value); + value = state.replacer.call(object, String(index), value) } // Write only valid elements, put null instead of invalid elements. if (writeNode(state, level + 1, value, true, true, false, true) || (typeof value === 'undefined' && writeNode(state, level + 1, null, true, true, false, true))) { - if (!compact || _result !== '') { - _result += generateNextLine(state, level); + _result += generateNextLine(state, level) } if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { - _result += '-'; + _result += '-' } else { - _result += '- '; + _result += '- ' } - _result += state.dump; + _result += state.dump } } - state.tag = _tag; - state.dump = _result || '[]'; // Empty sequence if no valid values. + state.tag = _tag + state.dump = _result || '[]' // Empty sequence if no valid values. } -function writeFlowMapping(state, level, object) { - var _result = '', - _tag = state.tag, - objectKeyList = Object.keys(object), - index, - length, - objectKey, - objectValue, - pairBuffer; +function writeFlowMapping (state, level, object) { + let _result = '' + const _tag = state.tag + const objectKeyList = Object.keys(object) - for (index = 0, length = objectKeyList.length; index < length; index += 1) { + for (let index = 0, length = objectKeyList.length; index < length; index += 1) { + let pairBuffer = '' + if (_result !== '') pairBuffer += ', ' - pairBuffer = ''; - if (_result !== '') pairBuffer += ', '; + if (state.condenseFlow) pairBuffer += '"' - if (state.condenseFlow) pairBuffer += '"'; - - objectKey = objectKeyList[index]; - objectValue = object[objectKey]; + const objectKey = objectKeyList[index] + let objectValue = object[objectKey] if (state.replacer) { - objectValue = state.replacer.call(object, objectKey, objectValue); + objectValue = state.replacer.call(object, objectKey, objectValue) } if (!writeNode(state, level, objectKey, false, false)) { - continue; // Skip this pair because of invalid key; + continue // Skip this pair because of invalid key; } - if (state.dump.length > 1024) pairBuffer += '? '; + if (state.dump.length > 1024) pairBuffer += '? ' - pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); + pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' ') if (!writeNode(state, level, objectValue, false, false)) { - continue; // Skip this pair because of invalid value. + continue // Skip this pair because of invalid value. } - pairBuffer += state.dump; + pairBuffer += state.dump // Both key and value are valid. - _result += pairBuffer; + _result += pairBuffer } - state.tag = _tag; - state.dump = '{' + _result + '}'; + state.tag = _tag + state.dump = '{' + _result + '}' } -function writeBlockMapping(state, level, object, compact) { - var _result = '', - _tag = state.tag, - objectKeyList = Object.keys(object), - index, - length, - objectKey, - objectValue, - explicitPair, - pairBuffer; +function writeBlockMapping (state, level, object, compact) { + let _result = '' + const _tag = state.tag + const objectKeyList = Object.keys(object) // Allow sorting keys so that the output file is deterministic if (state.sortKeys === true) { // Default sorting - objectKeyList.sort(); + objectKeyList.sort() } else if (typeof state.sortKeys === 'function') { // Custom sort function - objectKeyList.sort(state.sortKeys); + objectKeyList.sort(state.sortKeys) } else if (state.sortKeys) { // Something is wrong - throw new YAMLException('sortKeys must be a boolean or a function'); + throw new YAMLException('sortKeys must be a boolean or a function') } - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - pairBuffer = ''; + for (let index = 0, length = objectKeyList.length; index < length; index += 1) { + let pairBuffer = '' if (!compact || _result !== '') { - pairBuffer += generateNextLine(state, level); + pairBuffer += generateNextLine(state, level) } - objectKey = objectKeyList[index]; - objectValue = object[objectKey]; + const objectKey = objectKeyList[index] + let objectValue = object[objectKey] if (state.replacer) { - objectValue = state.replacer.call(object, objectKey, objectValue); + objectValue = state.replacer.call(object, objectKey, objectValue) } if (!writeNode(state, level + 1, objectKey, true, true, true)) { - continue; // Skip this pair because of invalid key. + continue // Skip this pair because of invalid key. } - explicitPair = (state.tag !== null && state.tag !== '?') || - (state.dump && state.dump.length > 1024); + const explicitPair = (state.tag !== null && state.tag !== '?') || + (state.dump && state.dump.length > 1024) if (explicitPair) { if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { - pairBuffer += '?'; + pairBuffer += '?' } else { - pairBuffer += '? '; + pairBuffer += '? ' } } - pairBuffer += state.dump; + pairBuffer += state.dump if (explicitPair) { - pairBuffer += generateNextLine(state, level); + pairBuffer += generateNextLine(state, level) } if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { - continue; // Skip this pair because of invalid value. + continue // Skip this pair because of invalid value. } if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { - pairBuffer += ':'; + pairBuffer += ':' } else { - pairBuffer += ': '; + pairBuffer += ': ' } - pairBuffer += state.dump; + pairBuffer += state.dump // Both key and value are valid. - _result += pairBuffer; + _result += pairBuffer } - state.tag = _tag; - state.dump = _result || '{}'; // Empty mapping if no valid pairs. + state.tag = _tag + state.dump = _result || '{}' // Empty mapping if no valid pairs. } -function detectType(state, object, explicit) { - var _result, typeList, index, length, type, style; - - typeList = explicit ? state.explicitTypes : state.implicitTypes; +function detectType (state, object, explicit) { + const typeList = explicit ? state.explicitTypes : state.implicitTypes - for (index = 0, length = typeList.length; index < length; index += 1) { - type = typeList[index]; + for (let index = 0, length = typeList.length; index < length; index += 1) { + const type = typeList[index] - if ((type.instanceOf || type.predicate) && + if ((type.instanceOf || type.predicate) && (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && - (!type.predicate || type.predicate(object))) { - + (!type.predicate || type.predicate(object))) { if (explicit) { if (type.multi && type.representName) { - state.tag = type.representName(object); + state.tag = type.representName(object) } else { - state.tag = type.tag; + state.tag = type.tag } } else { - state.tag = '?'; + state.tag = '?' } if (type.represent) { - style = state.styleMap[type.tag] || type.defaultStyle; + const style = state.styleMap[type.tag] || type.defaultStyle + let _result if (_toString.call(type.represent) === '[object Function]') { - _result = type.represent(object, style); + _result = type.represent(object, style) } else if (_hasOwnProperty.call(type.represent, style)) { - _result = type.represent[style](object, style); + _result = type.represent[style](object, style) } else { - throw new YAMLException('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); + throw new YAMLException('!<' + type.tag + '> tag resolver accepts not "' + style + '" style') } - state.dump = _result; + state.dump = _result } - return true; + return true } } - return false; + return false } // Serializes `object` and writes it to global `result`. // Returns true on success, or false on invalid object. // -function writeNode(state, level, object, block, compact, iskey, isblockseq) { - state.tag = null; - state.dump = object; +function writeNode (state, level, object, block, compact, iskey, isblockseq) { + state.tag = null + state.dump = object if (!detectType(state, object, false)) { - detectType(state, object, true); + detectType(state, object, true) } - var type = _toString.call(state.dump); - var inblock = block; - var tagStr; + const type = _toString.call(state.dump) + const inblock = block if (block) { - block = (state.flowLevel < 0 || state.flowLevel > level); + block = (state.flowLevel < 0 || state.flowLevel > level) } - var objectOrArray = type === '[object Object]' || type === '[object Array]', - duplicateIndex, - duplicate; + const objectOrArray = type === '[object Object]' || type === '[object Array]' + let duplicateIndex + let duplicate if (objectOrArray) { - duplicateIndex = state.duplicates.indexOf(object); - duplicate = duplicateIndex !== -1; + duplicateIndex = state.duplicates.indexOf(object) + duplicate = duplicateIndex !== -1 } if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { - compact = false; + compact = false } if (duplicate && state.usedDuplicates[duplicateIndex]) { - state.dump = '*ref_' + duplicateIndex; + state.dump = '*ref_' + duplicateIndex } else { if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { - state.usedDuplicates[duplicateIndex] = true; + state.usedDuplicates[duplicateIndex] = true } if (type === '[object Object]') { if (block && (Object.keys(state.dump).length !== 0)) { - writeBlockMapping(state, level, state.dump, compact); + writeBlockMapping(state, level, state.dump, compact) if (duplicate) { - state.dump = '&ref_' + duplicateIndex + state.dump; + state.dump = '&ref_' + duplicateIndex + state.dump } } else { - writeFlowMapping(state, level, state.dump); + writeFlowMapping(state, level, state.dump) if (duplicate) { - state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump } } } else if (type === '[object Array]') { if (block && (state.dump.length !== 0)) { if (state.noArrayIndent && !isblockseq && level > 0) { - writeBlockSequence(state, level - 1, state.dump, compact); + writeBlockSequence(state, level - 1, state.dump, compact) } else { - writeBlockSequence(state, level, state.dump, compact); + writeBlockSequence(state, level, state.dump, compact) } if (duplicate) { - state.dump = '&ref_' + duplicateIndex + state.dump; + state.dump = '&ref_' + duplicateIndex + state.dump } } else { - writeFlowSequence(state, level, state.dump); + writeFlowSequence(state, level, state.dump) if (duplicate) { - state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump } } } else if (type === '[object String]') { if (state.tag !== '?') { - writeScalar(state, state.dump, level, iskey, inblock); + writeScalar(state, state.dump, level, iskey, inblock) } } else if (type === '[object Undefined]') { - return false; + return false } else { - if (state.skipInvalid) return false; - throw new YAMLException('unacceptable kind of an object to dump ' + type); + if (state.skipInvalid) return false + throw new YAMLException('unacceptable kind of an object to dump ' + type) } if (state.tag !== null && state.tag !== '?') { @@ -8369,87 +8334,82 @@ function writeNode(state, level, object, block, compact, iskey, isblockseq) { // // Also need to encode '!' because it has special meaning (end of tag prefix). // - tagStr = encodeURI( + let tagStr = encodeURI( state.tag[0] === '!' ? state.tag.slice(1) : state.tag - ).replace(/!/g, '%21'); + ).replace(/!/g, '%21') if (state.tag[0] === '!') { - tagStr = '!' + tagStr; + tagStr = '!' + tagStr } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') { - tagStr = '!!' + tagStr.slice(18); + tagStr = '!!' + tagStr.slice(18) } else { - tagStr = '!<' + tagStr + '>'; + tagStr = '!<' + tagStr + '>' } - state.dump = tagStr + ' ' + state.dump; + state.dump = tagStr + ' ' + state.dump } } - return true; + return true } -function getDuplicateReferences(object, state) { - var objects = [], - duplicatesIndexes = [], - index, - length; +function getDuplicateReferences (object, state) { + const objects = [] + const duplicatesIndexes = [] - inspectNode(object, objects, duplicatesIndexes); + inspectNode(object, objects, duplicatesIndexes) - for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { - state.duplicates.push(objects[duplicatesIndexes[index]]); + const length = duplicatesIndexes.length + for (let index = 0; index < length; index += 1) { + state.duplicates.push(objects[duplicatesIndexes[index]]) } - state.usedDuplicates = new Array(length); + state.usedDuplicates = new Array(length) } -function inspectNode(object, objects, duplicatesIndexes) { - var objectKeyList, - index, - length; - +function inspectNode (object, objects, duplicatesIndexes) { if (object !== null && typeof object === 'object') { - index = objects.indexOf(object); + const index = objects.indexOf(object) if (index !== -1) { if (duplicatesIndexes.indexOf(index) === -1) { - duplicatesIndexes.push(index); + duplicatesIndexes.push(index) } } else { - objects.push(object); + objects.push(object) if (Array.isArray(object)) { - for (index = 0, length = object.length; index < length; index += 1) { - inspectNode(object[index], objects, duplicatesIndexes); + for (let i = 0, length = object.length; i < length; i += 1) { + inspectNode(object[i], objects, duplicatesIndexes) } } else { - objectKeyList = Object.keys(object); + const objectKeyList = Object.keys(object) - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); + for (let i = 0, length = objectKeyList.length; i < length; i += 1) { + inspectNode(object[objectKeyList[i]], objects, duplicatesIndexes) } } } } } -function dump(input, options) { - options = options || {}; +function dump (input, options) { + options = options || {} - var state = new State(options); + const state = new State(options) - if (!state.noRefs) getDuplicateReferences(input, state); + if (!state.noRefs) getDuplicateReferences(input, state) - var value = input; + let value = input if (state.replacer) { - value = state.replacer.call({ '': value }, '', value); + value = state.replacer.call({ '': value }, '', value) } - if (writeNode(state, 0, value, true, true)) return state.dump + '\n'; + if (writeNode(state, 0, value, true, true)) return state.dump + '\n' - return ''; + return '' } -module.exports.dump = dump; +module.exports.dump = dump /***/ }), @@ -8462,57 +8422,53 @@ module.exports.dump = dump; // +function formatError (exception, compact) { + let where = '' + const message = exception.reason || '(unknown reason)' -function formatError(exception, compact) { - var where = '', message = exception.reason || '(unknown reason)'; - - if (!exception.mark) return message; + if (!exception.mark) return message if (exception.mark.name) { - where += 'in "' + exception.mark.name + '" '; + where += 'in "' + exception.mark.name + '" ' } - where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')'; + where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')' if (!compact && exception.mark.snippet) { - where += '\n\n' + exception.mark.snippet; + where += '\n\n' + exception.mark.snippet } - return message + ' ' + where; + return message + ' ' + where } - -function YAMLException(reason, mark) { +function YAMLException (reason, mark) { // Super constructor - Error.call(this); + Error.call(this) - this.name = 'YAMLException'; - this.reason = reason; - this.mark = mark; - this.message = formatError(this, false); + this.name = 'YAMLException' + this.reason = reason + this.mark = mark + this.message = formatError(this, false) // Include stack trace in error object if (Error.captureStackTrace) { // Chrome and NodeJS - Error.captureStackTrace(this, this.constructor); + Error.captureStackTrace(this, this.constructor) } else { // FF, IE 10+ and Safari 6+. Fallback for others - this.stack = (new Error()).stack || ''; + this.stack = (new Error()).stack || '' } } - // Inherit from Error -YAMLException.prototype = Object.create(Error.prototype); -YAMLException.prototype.constructor = YAMLException; - - -YAMLException.prototype.toString = function toString(compact) { - return this.name + ': ' + formatError(this, compact); -}; +YAMLException.prototype = Object.create(Error.prototype) +YAMLException.prototype.constructor = YAMLException +YAMLException.prototype.toString = function toString (compact) { + return this.name + ': ' + formatError(this, compact) +} -module.exports = YAMLException; +module.exports = YAMLException /***/ }), @@ -8523,129 +8479,125 @@ module.exports = YAMLException; "use strict"; -/*eslint-disable max-len,no-use-before-define*/ - -var common = __nccwpck_require__(6829); -var YAMLException = __nccwpck_require__(8179); -var makeSnippet = __nccwpck_require__(6975); -var DEFAULT_SCHEMA = __nccwpck_require__(8759); - - -var _hasOwnProperty = Object.prototype.hasOwnProperty; - - -var CONTEXT_FLOW_IN = 1; -var CONTEXT_FLOW_OUT = 2; -var CONTEXT_BLOCK_IN = 3; -var CONTEXT_BLOCK_OUT = 4; +const common = __nccwpck_require__(6829) +const YAMLException = __nccwpck_require__(8179) +const makeSnippet = __nccwpck_require__(6975) +const DEFAULT_SCHEMA = __nccwpck_require__(8759) +const _hasOwnProperty = Object.prototype.hasOwnProperty -var CHOMPING_CLIP = 1; -var CHOMPING_STRIP = 2; -var CHOMPING_KEEP = 3; +const CONTEXT_FLOW_IN = 1 +const CONTEXT_FLOW_OUT = 2 +const CONTEXT_BLOCK_IN = 3 +const CONTEXT_BLOCK_OUT = 4 +const CHOMPING_CLIP = 1 +const CHOMPING_STRIP = 2 +const 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; +// eslint-disable-next-line no-control-regex +const PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/ +const PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/ +// eslint-disable-next-line no-useless-escape +const PATTERN_FLOW_INDICATORS = /[,\[\]{}]/ +// eslint-disable-next-line no-useless-escape +const PATTERN_TAG_HANDLE = /^(?:!|!!|![0-9A-Za-z-]+!)$/ +// eslint-disable-next-line no-useless-escape +const PATTERN_TAG_URI = /^(?:!|[^,\[\]{}])(?:%[0-9a-f]{2}|[0-9a-z\-#;/?:@&=+$,_.!~*'()\[\]])*$/i +function _class (obj) { return Object.prototype.toString.call(obj) } -function _class(obj) { return Object.prototype.toString.call(obj); } - -function is_EOL(c) { - return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); +function isEol (c) { + return (c === 0x0A/* LF */) || (c === 0x0D/* CR */) } -function is_WHITE_SPACE(c) { - return (c === 0x09/* Tab */) || (c === 0x20/* Space */); +function isWhiteSpace (c) { + return (c === 0x09/* Tab */) || (c === 0x20/* Space */) } -function is_WS_OR_EOL(c) { +function isWsOrEol (c) { return (c === 0x09/* Tab */) || (c === 0x20/* Space */) || (c === 0x0A/* LF */) || - (c === 0x0D/* CR */); + (c === 0x0D/* CR */) } -function is_FLOW_INDICATOR(c) { +function isFlowIndicator (c) { return c === 0x2C/* , */ || c === 0x5B/* [ */ || c === 0x5D/* ] */ || c === 0x7B/* { */ || - c === 0x7D/* } */; + c === 0x7D/* } */ } -function fromHexCode(c) { - var lc; - - if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { - return c - 0x30; +function fromHexCode (c) { + if ((c >= 0x30/* 0 */) && (c <= 0x39/* 9 */)) { + return c - 0x30 } - /*eslint-disable no-bitwise*/ - lc = c | 0x20; + const lc = c | 0x20 - if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { - return lc - 0x61 + 10; + if ((lc >= 0x61/* a */) && (lc <= 0x66/* f */)) { + return lc - 0x61 + 10 } - return -1; + return -1 } -function escapedHexLen(c) { - if (c === 0x78/* x */) { return 2; } - if (c === 0x75/* u */) { return 4; } - if (c === 0x55/* U */) { return 8; } - return 0; +function escapedHexLen (c) { + if (c === 0x78/* x */) { return 2 } + if (c === 0x75/* u */) { return 4 } + if (c === 0x55/* U */) { return 8 } + return 0 } -function fromDecimalCode(c) { - if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { - return c - 0x30; +function fromDecimalCode (c) { + if ((c >= 0x30/* 0 */) && (c <= 0x39/* 9 */)) { + return c - 0x30 } - return -1; -} - -function simpleEscapeSequence(c) { - /* eslint-disable indent */ - return (c === 0x30/* 0 */) ? '\x00' : - (c === 0x61/* a */) ? '\x07' : - (c === 0x62/* b */) ? '\x08' : - (c === 0x74/* t */) ? '\x09' : - (c === 0x09/* Tab */) ? '\x09' : - (c === 0x6E/* n */) ? '\x0A' : - (c === 0x76/* v */) ? '\x0B' : - (c === 0x66/* f */) ? '\x0C' : - (c === 0x72/* r */) ? '\x0D' : - (c === 0x65/* e */) ? '\x1B' : - (c === 0x20/* Space */) ? ' ' : - (c === 0x22/* " */) ? '\x22' : - (c === 0x2F/* / */) ? '/' : - (c === 0x5C/* \ */) ? '\x5C' : - (c === 0x4E/* N */) ? '\x85' : - (c === 0x5F/* _ */) ? '\xA0' : - (c === 0x4C/* L */) ? '\u2028' : - (c === 0x50/* P */) ? '\u2029' : ''; + return -1 } -function charFromCodepoint(c) { +function simpleEscapeSequence (c) { + switch (c) { + case 0x30/* 0 */: return '\x00' + case 0x61/* a */: return '\x07' + case 0x62/* b */: return '\x08' + case 0x74/* t */: return '\x09' + case 0x09/* Tab */: return '\x09' + case 0x6E/* n */: return '\x0A' + case 0x76/* v */: return '\x0B' + case 0x66/* f */: return '\x0C' + case 0x72/* r */: return '\x0D' + case 0x65/* e */: return '\x1B' + case 0x20/* Space */: return ' ' + case 0x22/* " */: return '\x22' + case 0x2F/* / */: return '/' + case 0x5C/* \ */: return '\x5C' + case 0x4E/* N */: return '\x85' + case 0x5F/* _ */: return '\xA0' + case 0x4C/* L */: return '\u2028' + case 0x50/* P */: return '\u2029' + default: return '' + } +} + +function charFromCodepoint (c) { if (c <= 0xFFFF) { - return String.fromCharCode(c); + return String.fromCharCode(c) } // Encode UTF-16 surrogate pair // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF return String.fromCharCode( ((c - 0x010000) >> 10) + 0xD800, ((c - 0x010000) & 0x03FF) + 0xDC00 - ); + ) } // set a property of a literal object, while protecting against prototype pollution, // see https://github.com/nodeca/js-yaml/issues/164 for more details -function setProperty(object, key, value) { +function setProperty (object, key, value) { // used for this specific key only because Object.defineProperty is slow if (key === '__proto__') { Object.defineProperty(object, key, { @@ -8653,47 +8605,50 @@ function setProperty(object, key, value) { enumerable: true, writable: true, value: value - }); + }) } else { - object[key] = value; + object[key] = value } } -var simpleEscapeCheck = new Array(256); // integer, for fast access -var simpleEscapeMap = new Array(256); -for (var i = 0; i < 256; i++) { - simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; - simpleEscapeMap[i] = simpleEscapeSequence(i); +const simpleEscapeCheck = new Array(256) // integer, for fast access +const simpleEscapeMap = new Array(256) +for (let i = 0; i < 256; i++) { + simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0 + simpleEscapeMap[i] = simpleEscapeSequence(i) } +function State (input, options) { + this.input = input -function State(input, options) { - this.input = input; - - this.filename = options['filename'] || null; - this.schema = options['schema'] || DEFAULT_SCHEMA; - this.onWarning = options['onWarning'] || null; + this.filename = options['filename'] || null + this.schema = options['schema'] || DEFAULT_SCHEMA + this.onWarning = options['onWarning'] || null // (Hidden) Remove? makes the loader to expect YAML 1.1 documents // if such documents have no explicit %YAML directive - this.legacy = options['legacy'] || false; + this.legacy = options['legacy'] || false - this.json = options['json'] || false; - this.listener = options['listener'] || null; + this.json = options['json'] || false + this.listener = options['listener'] || null + this.maxDepth = typeof options['maxDepth'] === 'number' ? options['maxDepth'] : 100 + this.maxMergeSeqLength = typeof options['maxMergeSeqLength'] === 'number' ? options['maxMergeSeqLength'] : 20 - this.implicitTypes = this.schema.compiledImplicit; - this.typeMap = this.schema.compiledTypeMap; + 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.length = input.length + this.position = 0 + this.line = 0 + this.lineStart = 0 + this.lineIndent = 0 + this.depth = 0 // position of first leading tab in the current line, // used to make sure there are no tabs in the indentation - this.firstTabInLine = -1; + this.firstTabInLine = -1 - this.documents = []; + this.documents = [] + this.anchorMapTransactions = [] /* this.version; @@ -8703,164 +8658,229 @@ function State(input, options) { this.tag; this.anchor; this.kind; - this.result;*/ - + this.result; */ } - -function generateError(state, message) { - var mark = { - name: state.filename, - buffer: state.input.slice(0, -1), // omit trailing \0 +function generateError (state, message) { + const mark = { + name: state.filename, + buffer: state.input.slice(0, -1), // omit trailing \0 position: state.position, - line: state.line, - column: state.position - state.lineStart - }; + line: state.line, + column: state.position - state.lineStart + } - mark.snippet = makeSnippet(mark); + mark.snippet = makeSnippet(mark) - return new YAMLException(message, mark); + return new YAMLException(message, mark) } -function throwError(state, message) { - throw generateError(state, message); +function throwError (state, message) { + throw generateError(state, message) } -function throwWarning(state, message) { +function throwWarning (state, message) { if (state.onWarning) { - state.onWarning.call(null, generateError(state, message)); + state.onWarning.call(null, generateError(state, message)) } } +function storeAnchor (state, name, value) { + const transactions = state.anchorMapTransactions + + if (transactions.length !== 0) { + const transaction = transactions[transactions.length - 1] -var directiveHandlers = { + if (!_hasOwnProperty.call(transaction, name)) { + transaction[name] = { + existed: _hasOwnProperty.call(state.anchorMap, name), + value: state.anchorMap[name] + } + } + } - YAML: function handleYamlDirective(state, name, args) { + state.anchorMap[name] = value +} + +function beginAnchorTransaction (state) { + state.anchorMapTransactions.push(Object.create(null)) +} + +function commitAnchorTransaction (state) { + const transaction = state.anchorMapTransactions.pop() + const transactions = state.anchorMapTransactions + + if (transactions.length === 0) return + + const parent = transactions[transactions.length - 1] + const names = Object.keys(transaction) + + for (let index = 0, length = names.length; index < length; index += 1) { + const name = names[index] + + if (!_hasOwnProperty.call(parent, name)) { + parent[name] = transaction[name] + } + } +} - var match, major, minor; +function rollbackAnchorTransaction (state) { + const transaction = state.anchorMapTransactions.pop() + const names = Object.keys(transaction) + for (let index = names.length - 1; index >= 0; index -= 1) { + const entry = transaction[names[index]] + + if (entry.existed) { + state.anchorMap[names[index]] = entry.value + } else { + delete state.anchorMap[names[index]] + } + } +} + +function snapshotState (state) { + return { + position: state.position, + line: state.line, + lineStart: state.lineStart, + lineIndent: state.lineIndent, + firstTabInLine: state.firstTabInLine, + tag: state.tag, + anchor: state.anchor, + kind: state.kind, + result: state.result + } +} + +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.tag = snapshot.tag + state.anchor = snapshot.anchor + state.kind = snapshot.kind + state.result = snapshot.result +} + +const directiveHandlers = { + + YAML: function handleYamlDirective (state, name, args) { if (state.version !== null) { - throwError(state, 'duplication of %YAML directive'); + throwError(state, 'duplication of %YAML directive') } if (args.length !== 1) { - throwError(state, 'YAML directive accepts exactly one argument'); + throwError(state, 'YAML directive accepts exactly one argument') } - match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); + const match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]) if (match === null) { - throwError(state, 'ill-formed argument of the YAML directive'); + throwError(state, 'ill-formed argument of the YAML directive') } - major = parseInt(match[1], 10); - minor = parseInt(match[2], 10); + const major = parseInt(match[1], 10) + const minor = parseInt(match[2], 10) if (major !== 1) { - throwError(state, 'unacceptable YAML version of the document'); + throwError(state, 'unacceptable YAML version of the document') } - state.version = args[0]; - state.checkLineBreaks = (minor < 2); + state.version = args[0] + state.checkLineBreaks = (minor < 2) if (minor !== 1 && minor !== 2) { - throwWarning(state, 'unsupported YAML version of the document'); + throwWarning(state, 'unsupported YAML version of the document') } }, - TAG: function handleTagDirective(state, name, args) { - - var handle, prefix; + TAG: function handleTagDirective (state, name, args) { + let prefix if (args.length !== 2) { - throwError(state, 'TAG directive accepts exactly two arguments'); + throwError(state, 'TAG directive accepts exactly two arguments') } - handle = args[0]; - prefix = args[1]; + const handle = args[0] + prefix = args[1] if (!PATTERN_TAG_HANDLE.test(handle)) { - throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); + throwError(state, 'ill-formed tag handle (first argument) of the TAG directive') } if (_hasOwnProperty.call(state.tagMap, handle)) { - throwError(state, 'there is a previously declared suffix for "' + handle + '" tag 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'); + throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive') } try { - prefix = decodeURIComponent(prefix); + prefix = decodeURIComponent(prefix) } catch (err) { - throwError(state, 'tag prefix is malformed: ' + prefix); + throwError(state, 'tag prefix is malformed: ' + prefix) } - state.tagMap[handle] = prefix; + state.tagMap[handle] = prefix } -}; - - -function captureSegment(state, start, end, checkJson) { - var _position, _length, _character, _result; +} +function captureSegment (state, start, end, checkJson) { if (start < end) { - _result = state.input.slice(start, end); + const _result = state.input.slice(start, end) if (checkJson) { - for (_position = 0, _length = _result.length; _position < _length; _position += 1) { - _character = _result.charCodeAt(_position); + for (let _position = 0, _length = _result.length; _position < _length; _position += 1) { + const _character = _result.charCodeAt(_position) if (!(_character === 0x09 || - (0x20 <= _character && _character <= 0x10FFFF))) { - throwError(state, 'expected valid JSON character'); + (_character >= 0x20 && _character <= 0x10FFFF))) { + throwError(state, 'expected valid JSON character') } } } else if (PATTERN_NON_PRINTABLE.test(_result)) { - throwError(state, 'the stream contains non-printable characters'); + throwError(state, 'the stream contains non-printable characters') } - state.result += _result; + state.result += _result } } -function mergeMappings(state, destination, source, overridableKeys) { - var sourceKeys, key, index, quantity; - +function mergeMappings (state, destination, source, overridableKeys) { if (!common.isObject(source)) { - throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); + throwError(state, 'cannot merge mappings; the provided source object is unacceptable') } - sourceKeys = Object.keys(source); + const sourceKeys = Object.keys(source) - for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { - key = sourceKeys[index]; + for (let index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { + const key = sourceKeys[index] if (!_hasOwnProperty.call(destination, key)) { - setProperty(destination, key, source[key]); - overridableKeys[key] = true; + setProperty(destination, key, source[key]) + overridableKeys[key] = true } } } -function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, +function storeMappingPair (state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startLineStart, startPos) { - - var index, quantity; - // The output is a plain object here, so keys can only be strings. // We need to convert keyNode to a string, but doing so can hang the process // (deeply nested arrays that explode exponentially using aliases). if (Array.isArray(keyNode)) { - keyNode = Array.prototype.slice.call(keyNode); + keyNode = Array.prototype.slice.call(keyNode) - for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { + for (let index = 0, quantity = keyNode.length; index < quantity; index += 1) { if (Array.isArray(keyNode[index])) { - throwError(state, 'nested arrays are not supported inside keys'); + throwError(state, 'nested arrays are not supported inside keys') } if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { - keyNode[index] = '[object Object]'; + keyNode[index] = '[object Object]' } } } @@ -8869,814 +8889,785 @@ function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valu // (still use its own toString for arrays, timestamps, // and whatever user schema extensions happen to have @@toStringTag) if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { - keyNode = '[object Object]'; + keyNode = '[object Object]' } - - keyNode = String(keyNode); + keyNode = String(keyNode) if (_result === null) { - _result = {}; + _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); + if (valueNode.length > state.maxMergeSeqLength) { + throwError(state, 'merge sequence length exceeded maxMergeSeqLength (' + state.maxMergeSeqLength + ')') + } + const seen = new Set() + for (let index = 0, quantity = valueNode.length; index < quantity; index += 1) { + const src = valueNode[index] + // Existing keys are not overridden on merge, so dedupe sources to + // avoid redundant work on repeated aliases. + if (seen.has(src)) continue + seen.add(src) + mergeMappings(state, _result, src, overridableKeys) } } else { - mergeMappings(state, _result, valueNode, overridableKeys); + mergeMappings(state, _result, valueNode, overridableKeys) } } else { if (!state.json && !_hasOwnProperty.call(overridableKeys, keyNode) && _hasOwnProperty.call(_result, keyNode)) { - state.line = startLine || state.line; - state.lineStart = startLineStart || state.lineStart; - state.position = startPos || state.position; - throwError(state, 'duplicated mapping key'); + state.line = startLine || state.line + state.lineStart = startLineStart || state.lineStart + state.position = startPos || state.position + throwError(state, 'duplicated mapping key') } - setProperty(_result, keyNode, valueNode); - delete overridableKeys[keyNode]; + setProperty(_result, keyNode, valueNode) + delete overridableKeys[keyNode] } - return _result; + return _result } -function readLineBreak(state) { - var ch; - - ch = state.input.charCodeAt(state.position); +function readLineBreak (state) { + const ch = state.input.charCodeAt(state.position) if (ch === 0x0A/* LF */) { - state.position++; + state.position++ } else if (ch === 0x0D/* CR */) { - state.position++; + state.position++ if (state.input.charCodeAt(state.position) === 0x0A/* LF */) { - state.position++; + state.position++ } } else { - throwError(state, 'a line break is expected'); + throwError(state, 'a line break is expected') } - state.line += 1; - state.lineStart = state.position; - state.firstTabInLine = -1; + state.line += 1 + state.lineStart = state.position + state.firstTabInLine = -1 } -function skipSeparationSpace(state, allowComments, checkIndent) { - var lineBreaks = 0, - ch = state.input.charCodeAt(state.position); +function skipSeparationSpace (state, allowComments, checkIndent) { + let lineBreaks = 0 + let ch = state.input.charCodeAt(state.position) while (ch !== 0) { - while (is_WHITE_SPACE(ch)) { + while (isWhiteSpace(ch)) { if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) { - state.firstTabInLine = state.position; + state.firstTabInLine = state.position } - ch = state.input.charCodeAt(++state.position); + ch = state.input.charCodeAt(++state.position) } if (allowComments && ch === 0x23/* # */) { do { - ch = state.input.charCodeAt(++state.position); - } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); + ch = state.input.charCodeAt(++state.position) + } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0) } - if (is_EOL(ch)) { - readLineBreak(state); + if (isEol(ch)) { + readLineBreak(state) - ch = state.input.charCodeAt(state.position); - lineBreaks++; - state.lineIndent = 0; + ch = state.input.charCodeAt(state.position) + lineBreaks++ + state.lineIndent = 0 while (ch === 0x20/* Space */) { - state.lineIndent++; - ch = state.input.charCodeAt(++state.position); + state.lineIndent++ + ch = state.input.charCodeAt(++state.position) } } else { - break; + break } } if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { - throwWarning(state, 'deficient indentation'); + throwWarning(state, 'deficient indentation') } - return lineBreaks; + return lineBreaks } -function testDocumentSeparator(state) { - var _position = state.position, - ch; - - ch = state.input.charCodeAt(_position); +function testDocumentSeparator (state) { + let _position = state.position + let ch = state.input.charCodeAt(_position) // Condition state.position === state.lineStart is tested // in parent on each call, for efficiency. No needs to test here again. if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) && ch === state.input.charCodeAt(_position + 1) && ch === state.input.charCodeAt(_position + 2)) { + _position += 3 - _position += 3; - - ch = state.input.charCodeAt(_position); + ch = state.input.charCodeAt(_position) - if (ch === 0 || is_WS_OR_EOL(ch)) { - return true; + if (ch === 0 || isWsOrEol(ch)) { + return true } } - return false; + return false } -function writeFoldedLines(state, count) { +function writeFoldedLines (state, count) { if (count === 1) { - state.result += ' '; + 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 === 0x23/* # */ || - ch === 0x26/* & */ || - ch === 0x2A/* * */ || - ch === 0x21/* ! */ || - ch === 0x7C/* | */ || - ch === 0x3E/* > */ || - ch === 0x27/* ' */ || - ch === 0x22/* " */ || - ch === 0x25/* % */ || - ch === 0x40/* @ */ || + state.result += common.repeat('\n', count - 1) + } +} + +function readPlainScalar (state, nodeIndent, withinFlowCollection) { + let captureStart + let captureEnd + let hasPendingContent + let _line + let _lineStart + let _lineIndent + const _kind = state.kind + const _result = state.result + + let ch = state.input.charCodeAt(state.position) + + if (isWsOrEol(ch) || + isFlowIndicator(ch) || + ch === 0x23/* # */ || + ch === 0x26/* & */ || + ch === 0x2A/* * */ || + ch === 0x21/* ! */ || + ch === 0x7C/* | */ || + ch === 0x3E/* > */ || + ch === 0x27/* ' */ || + ch === 0x22/* " */ || + ch === 0x25/* % */ || + ch === 0x40/* @ */ || ch === 0x60/* ` */) { - return false; + return false } if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { - following = state.input.charCodeAt(state.position + 1); + const following = state.input.charCodeAt(state.position + 1) - if (is_WS_OR_EOL(following) || - withinFlowCollection && is_FLOW_INDICATOR(following)) { - return false; + if (isWsOrEol(following) || + (withinFlowCollection && isFlowIndicator(following))) { + return false } } - state.kind = 'scalar'; - state.result = ''; - captureStart = captureEnd = state.position; - hasPendingContent = false; + state.kind = 'scalar' + state.result = '' + captureStart = captureEnd = state.position + hasPendingContent = false while (ch !== 0) { if (ch === 0x3A/* : */) { - following = state.input.charCodeAt(state.position + 1); + const following = state.input.charCodeAt(state.position + 1) - if (is_WS_OR_EOL(following) || - withinFlowCollection && is_FLOW_INDICATOR(following)) { - break; + if (isWsOrEol(following) || + (withinFlowCollection && isFlowIndicator(following))) { + break } - } else if (ch === 0x23/* # */) { - preceding = state.input.charCodeAt(state.position - 1); + const preceding = state.input.charCodeAt(state.position - 1) - if (is_WS_OR_EOL(preceding)) { - break; + if (isWsOrEol(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); + (withinFlowCollection && isFlowIndicator(ch))) { + break + } else if (isEol(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; + hasPendingContent = true + ch = state.input.charCodeAt(state.position) + continue } else { - state.position = captureEnd; - state.line = _line; - state.lineStart = _lineStart; - state.lineIndent = _lineIndent; - break; + 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; + 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; + if (!isWhiteSpace(ch)) { + captureEnd = state.position + 1 } - ch = state.input.charCodeAt(++state.position); + ch = state.input.charCodeAt(++state.position) } - captureSegment(state, captureStart, captureEnd, false); + captureSegment(state, captureStart, captureEnd, false) if (state.result) { - return true; + return true } - state.kind = _kind; - state.result = _result; - return false; + state.kind = _kind + state.result = _result + return false } -function readSingleQuotedScalar(state, nodeIndent) { - var ch, - captureStart, captureEnd; +function readSingleQuotedScalar (state, nodeIndent) { + let captureStart + let captureEnd - ch = state.input.charCodeAt(state.position); + let ch = state.input.charCodeAt(state.position) if (ch !== 0x27/* ' */) { - return false; + return false } - state.kind = 'scalar'; - state.result = ''; - state.position++; - captureStart = captureEnd = state.position; + state.kind = 'scalar' + state.result = '' + state.position++ + captureStart = captureEnd = state.position while ((ch = state.input.charCodeAt(state.position)) !== 0) { if (ch === 0x27/* ' */) { - captureSegment(state, captureStart, state.position, true); - ch = state.input.charCodeAt(++state.position); + captureSegment(state, captureStart, state.position, true) + ch = state.input.charCodeAt(++state.position) if (ch === 0x27/* ' */) { - captureStart = state.position; - state.position++; - captureEnd = state.position; + captureStart = state.position + state.position++ + captureEnd = state.position } else { - return true; + return true } - - } else if (is_EOL(ch)) { - captureSegment(state, captureStart, captureEnd, true); - writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); - captureStart = captureEnd = state.position; - + } else if (isEol(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'); - + throwError(state, 'unexpected end of the document within a single quoted scalar') } else { - state.position++; - captureEnd = state.position; + state.position++ + if (!isWhiteSpace(ch)) { + captureEnd = state.position + } } } - throwError(state, 'unexpected end of the stream within a single quoted scalar'); + throwError(state, 'unexpected end of the stream within a single quoted scalar') } -function readDoubleQuotedScalar(state, nodeIndent) { - var captureStart, - captureEnd, - hexLength, - hexResult, - tmp, - ch; +function readDoubleQuotedScalar (state, nodeIndent) { + let captureStart + let captureEnd + let tmp - ch = state.input.charCodeAt(state.position); + let ch = state.input.charCodeAt(state.position) if (ch !== 0x22/* " */) { - return false; + return false } - state.kind = 'scalar'; - state.result = ''; - state.position++; - captureStart = captureEnd = state.position; + state.kind = 'scalar' + state.result = '' + state.position++ + captureStart = captureEnd = state.position while ((ch = state.input.charCodeAt(state.position)) !== 0) { if (ch === 0x22/* " */) { - captureSegment(state, captureStart, state.position, true); - state.position++; - return true; - + captureSegment(state, captureStart, state.position, true) + state.position++ + return true } else if (ch === 0x5C/* \ */) { - captureSegment(state, captureStart, state.position, true); - ch = state.input.charCodeAt(++state.position); + captureSegment(state, captureStart, state.position, true) + ch = state.input.charCodeAt(++state.position) - if (is_EOL(ch)) { - skipSeparationSpace(state, false, nodeIndent); + if (isEol(ch)) { + skipSeparationSpace(state, false, nodeIndent) // TODO: rework to inline fn with no type cast? } else if (ch < 256 && simpleEscapeCheck[ch]) { - state.result += simpleEscapeMap[ch]; - state.position++; - + state.result += simpleEscapeMap[ch] + state.position++ } else if ((tmp = escapedHexLen(ch)) > 0) { - hexLength = tmp; - hexResult = 0; + let hexLength = tmp + let hexResult = 0 for (; hexLength > 0; hexLength--) { - ch = state.input.charCodeAt(++state.position); + ch = state.input.charCodeAt(++state.position) if ((tmp = fromHexCode(ch)) >= 0) { - hexResult = (hexResult << 4) + tmp; - + hexResult = (hexResult << 4) + tmp } else { - throwError(state, 'expected hexadecimal character'); + throwError(state, 'expected hexadecimal character') } } - state.result += charFromCodepoint(hexResult); - - state.position++; + state.result += charFromCodepoint(hexResult) + state.position++ } else { - throwError(state, 'unknown escape sequence'); + 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; - + captureStart = captureEnd = state.position + } else if (isEol(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'); - + throwError(state, 'unexpected end of the document within a double quoted scalar') } else { - state.position++; - captureEnd = state.position; + state.position++ + if (!isWhiteSpace(ch)) { + captureEnd = state.position + } } } - throwError(state, 'unexpected end of the stream within a double quoted scalar'); + 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 = Object.create(null), - keyNode, - keyTag, - valueNode, - ch; +function readFlowCollection (state, nodeIndent) { + let readNext = true + let _line + let _lineStart + let _pos + const _tag = state.tag + let _result + const _anchor = state.anchor + let terminator + let isPair + let isExplicitPair + let isMapping + const overridableKeys = Object.create(null) + let keyNode + let keyTag + let valueNode - ch = state.input.charCodeAt(state.position); + let ch = state.input.charCodeAt(state.position) if (ch === 0x5B/* [ */) { - terminator = 0x5D;/* ] */ - isMapping = false; - _result = []; + terminator = 0x5D/* ] */ + isMapping = false + _result = [] } else if (ch === 0x7B/* { */) { - terminator = 0x7D;/* } */ - isMapping = true; - _result = {}; + terminator = 0x7D/* } */ + isMapping = true + _result = {} } else { - return false; + return false } if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; + storeAnchor(state, state.anchor, _result) } - ch = state.input.charCodeAt(++state.position); + ch = state.input.charCodeAt(++state.position) while (ch !== 0) { - skipSeparationSpace(state, true, nodeIndent); + skipSeparationSpace(state, true, nodeIndent) - ch = state.input.charCodeAt(state.position); + 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; + 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'); + throwError(state, 'missed comma between flow collection entries') } else if (ch === 0x2C/* , */) { // "flow collection entries can never be completely empty", as per YAML 1.2, section 7.4 - throwError(state, "expected the node content, but found ','"); + throwError(state, "expected the node content, but found ','") } - keyTag = keyNode = valueNode = null; - isPair = isExplicitPair = false; + keyTag = keyNode = valueNode = null + isPair = isExplicitPair = false if (ch === 0x3F/* ? */) { - following = state.input.charCodeAt(state.position + 1); + const following = state.input.charCodeAt(state.position + 1) - if (is_WS_OR_EOL(following)) { - isPair = isExplicitPair = true; - state.position++; - skipSeparationSpace(state, true, nodeIndent); + if (isWsOrEol(following)) { + isPair = isExplicitPair = true + state.position++ + skipSeparationSpace(state, true, nodeIndent) } } - _line = state.line; // Save the current 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); + _line = state.line // Save the current 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); + ch = state.input.charCodeAt(state.position) if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { - isPair = true; - ch = state.input.charCodeAt(++state.position); - skipSeparationSpace(state, true, nodeIndent); - composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); - valueNode = state.result; + 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); + 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)); + _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos)) } else { - _result.push(keyNode); + _result.push(keyNode) } - skipSeparationSpace(state, true, nodeIndent); + skipSeparationSpace(state, true, nodeIndent) - ch = state.input.charCodeAt(state.position); + ch = state.input.charCodeAt(state.position) if (ch === 0x2C/* , */) { - readNext = true; - ch = state.input.charCodeAt(++state.position); + readNext = true + ch = state.input.charCodeAt(++state.position) } else { - readNext = false; + readNext = false } } - throwError(state, 'unexpected end of the stream within a flow collection'); + 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; +function readBlockScalar (state, nodeIndent) { + let folding + let chomping = CHOMPING_CLIP + let didReadContent = false + let detectedIndent = false + let textIndent = nodeIndent + let emptyLines = 0 + let atMoreIndented = false + let tmp - ch = state.input.charCodeAt(state.position); + let ch = state.input.charCodeAt(state.position) if (ch === 0x7C/* | */) { - folding = false; + folding = false } else if (ch === 0x3E/* > */) { - folding = true; + folding = true } else { - return false; + return false } - state.kind = 'scalar'; - state.result = ''; + state.kind = 'scalar' + state.result = '' while (ch !== 0) { - ch = state.input.charCodeAt(++state.position); + ch = state.input.charCodeAt(++state.position) if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { if (CHOMPING_CLIP === chomping) { - chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP; + chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP } else { - throwError(state, 'repeat of a chomping mode identifier'); + 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'); + 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; + textIndent = nodeIndent + tmp - 1 + detectedIndent = true } else { - throwError(state, 'repeat of an indentation width identifier'); + throwError(state, 'repeat of an indentation width identifier') } - } else { - break; + break } } - if (is_WHITE_SPACE(ch)) { - do { ch = state.input.charCodeAt(++state.position); } - while (is_WHITE_SPACE(ch)); + if (isWhiteSpace(ch)) { + do { ch = state.input.charCodeAt(++state.position) } + while (isWhiteSpace(ch)) if (ch === 0x23/* # */) { - do { ch = state.input.charCodeAt(++state.position); } - while (!is_EOL(ch) && (ch !== 0)); + do { ch = state.input.charCodeAt(++state.position) } + while (!isEol(ch) && (ch !== 0)) } } while (ch !== 0) { - readLineBreak(state); - state.lineIndent = 0; + readLineBreak(state) + state.lineIndent = 0 - ch = state.input.charCodeAt(state.position); + ch = state.input.charCodeAt(state.position) + // eslint-disable-next-line no-unmodified-loop-condition while ((!detectedIndent || state.lineIndent < textIndent) && (ch === 0x20/* Space */)) { - state.lineIndent++; - ch = state.input.charCodeAt(++state.position); + state.lineIndent++ + ch = state.input.charCodeAt(++state.position) } if (!detectedIndent && state.lineIndent > textIndent) { - textIndent = state.lineIndent; + textIndent = state.lineIndent } - if (is_EOL(ch)) { - emptyLines++; - continue; + if (isEol(ch)) { + emptyLines++ + continue + } + + if (!detectedIndent && textIndent === 0) { + throwError(state, 'missing indentation for block scalar') } // End of the scalar. if (state.lineIndent < textIndent) { - // Perform the chomping. if (chomping === CHOMPING_KEEP) { - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines) } else if (chomping === CHOMPING_CLIP) { if (didReadContent) { // i.e. only if the scalar is not empty. - state.result += '\n'; + state.result += '\n' } } // Break this `while` cycle and go to the funciton's epilogue. - break; + break } // Folded style: use fancy rules to handle line breaks. if (folding) { - // Lines starting with white space characters (more-indented lines) are not folded. - if (is_WHITE_SPACE(ch)) { - atMoreIndented = true; + if (isWhiteSpace(ch)) { + atMoreIndented = true // except for the first content line (cf. Example 8.1) - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines) // End of more-indented block. } else if (atMoreIndented) { - atMoreIndented = false; - state.result += common.repeat('\n', emptyLines + 1); + atMoreIndented = false + state.result += common.repeat('\n', emptyLines + 1) // Just one line break - perceive as the same line. } else if (emptyLines === 0) { if (didReadContent) { // i.e. only if we have already read some scalar content. - state.result += ' '; + state.result += ' ' } // Several line breaks - perceive as different lines. } else { - state.result += common.repeat('\n', emptyLines); + state.result += common.repeat('\n', emptyLines) } // Literal style: just add exact number of line breaks between content lines. } else { // Keep all line breaks except the header line break. - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines) } - didReadContent = true; - detectedIndent = true; - emptyLines = 0; - captureStart = state.position; + didReadContent = true + detectedIndent = true + emptyLines = 0 + const captureStart = state.position - while (!is_EOL(ch) && (ch !== 0)) { - ch = state.input.charCodeAt(++state.position); + while (!isEol(ch) && (ch !== 0)) { + ch = state.input.charCodeAt(++state.position) } - captureSegment(state, captureStart, state.position, false); + captureSegment(state, captureStart, state.position, false) } - return true; + return true } -function readBlockSequence(state, nodeIndent) { - var _line, - _tag = state.tag, - _anchor = state.anchor, - _result = [], - following, - detected = false, - ch; +function readBlockSequence (state, nodeIndent) { + const _tag = state.tag + const _anchor = state.anchor + const _result = [] + let detected = false // there is a leading tab before this token, so it can't be a block sequence/mapping; // it can still be flow sequence/mapping or a scalar - if (state.firstTabInLine !== -1) return false; + if (state.firstTabInLine !== -1) return false if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; + storeAnchor(state, state.anchor, _result) } - ch = state.input.charCodeAt(state.position); + let 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'); + state.position = state.firstTabInLine + throwError(state, 'tab characters must not be used in indentation') } if (ch !== 0x2D/* - */) { - break; + break } - following = state.input.charCodeAt(state.position + 1); + const following = state.input.charCodeAt(state.position + 1) - if (!is_WS_OR_EOL(following)) { - break; + if (!isWsOrEol(following)) { + break } - detected = true; - state.position++; + detected = true + state.position++ if (skipSeparationSpace(state, true, -1)) { if (state.lineIndent <= nodeIndent) { - _result.push(null); - ch = state.input.charCodeAt(state.position); - continue; + _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); + const _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); + ch = state.input.charCodeAt(state.position) if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { - throwError(state, 'bad indentation of a sequence entry'); + throwError(state, 'bad indentation of a sequence entry') } else if (state.lineIndent < nodeIndent) { - break; + break } } if (detected) { - state.tag = _tag; - state.anchor = _anchor; - state.kind = 'sequence'; - state.result = _result; - return true; + 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 = Object.create(null), - keyTag = null, - keyNode = null, - valueNode = null, - atExplicitKey = false, - detected = false, - ch; + return false +} + +function readBlockMapping (state, nodeIndent, flowIndent) { + let allowCompact + let _keyLine + let _keyLineStart + let _keyPos + const _tag = state.tag + const _anchor = state.anchor + const _result = {} + const overridableKeys = Object.create(null) + let keyTag = null + let keyNode = null + let valueNode = null + let atExplicitKey = false + let detected = false // there is a leading tab before this token, so it can't be a block sequence/mapping; // it can still be flow sequence/mapping or a scalar - if (state.firstTabInLine !== -1) return false; + if (state.firstTabInLine !== -1) return false if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; + storeAnchor(state, state.anchor, _result) } - ch = state.input.charCodeAt(state.position); + 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'); + state.position = state.firstTabInLine + throwError(state, 'tab characters must not be used in indentation') } - following = state.input.charCodeAt(state.position + 1); - _line = state.line; // Save the current line. + const following = state.input.charCodeAt(state.position + 1) + const _line = state.line // Save the current line. // // Explicit notation case. There are two separate blocks: // first for the key (denoted by "?") and second for the value (denoted by ":") // - if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { - + if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && isWsOrEol(following)) { if (ch === 0x3F/* ? */) { if (atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); - keyTag = keyNode = valueNode = null; + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos) + keyTag = keyNode = valueNode = null } - detected = true; - atExplicitKey = true; - allowCompact = true; - + detected = true + atExplicitKey = true + allowCompact = true } else if (atExplicitKey) { // i.e. 0x3A/* : */ === character after the explicit key. - atExplicitKey = false; - allowCompact = true; - + atExplicitKey = false + allowCompact = true } else { - throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); + throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line') } - state.position += 1; - ch = following; + state.position += 1 + ch = following // // Implicit notation case. Flow-style node as the key first, then ":", and the value. // } else { - _keyLine = state.line; - _keyLineStart = state.lineStart; - _keyPos = state.position; + _keyLine = state.line + _keyLineStart = state.lineStart + _keyPos = state.position if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { // Neither implicit nor explicit notation. // Reading is done. Go to the epilogue. - break; + break } if (state.line === _line) { - ch = state.input.charCodeAt(state.position); + ch = state.input.charCodeAt(state.position) - while (is_WHITE_SPACE(ch)) { - ch = state.input.charCodeAt(++state.position); + while (isWhiteSpace(ch)) { + ch = state.input.charCodeAt(++state.position) } if (ch === 0x3A/* : */) { - ch = state.input.charCodeAt(++state.position); + 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 (!isWsOrEol(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; + 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; - + 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'); - + throwError(state, 'can not read an implicit mapping pair; a colon is missed') } else { - state.tag = _tag; - state.anchor = _anchor; - return true; // Keep the result of `composeNode`. + state.tag = _tag + state.anchor = _anchor + return true // Keep the result of `composeNode`. } - } else if (detected) { - throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); - + 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; // Keep the result of `composeNode`. + state.tag = _tag + state.anchor = _anchor + return true // Keep the result of `composeNode`. } } @@ -9685,32 +9676,32 @@ function readBlockMapping(state, nodeIndent, flowIndent) { // if (state.line === _line || state.lineIndent > nodeIndent) { if (atExplicitKey) { - _keyLine = state.line; - _keyLineStart = state.lineStart; - _keyPos = state.position; + _keyLine = state.line + _keyLineStart = state.lineStart + _keyPos = state.position } if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { if (atExplicitKey) { - keyNode = state.result; + keyNode = state.result } else { - valueNode = state.result; + valueNode = state.result } } if (!atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos); - keyTag = keyNode = valueNode = null; + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos) + keyTag = keyNode = valueNode = null } - skipSeparationSpace(state, true, -1); - ch = state.input.charCodeAt(state.position); + 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'); + throwError(state, 'bad indentation of a mapping entry') } else if (state.lineIndent < nodeIndent) { - break; + break } } @@ -9720,293 +9711,330 @@ function readBlockMapping(state, nodeIndent, flowIndent) { // Special case: last mapping's node contains only the key in explicit notation. if (atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos) } // Expose the resulting mapping. if (detected) { - state.tag = _tag; - state.anchor = _anchor; - state.kind = 'mapping'; - state.result = _result; + state.tag = _tag + state.anchor = _anchor + state.kind = 'mapping' + state.result = _result } - return detected; + return detected } -function readTagProperty(state) { - var _position, - isVerbatim = false, - isNamed = false, - tagHandle, - tagName, - ch; +function readTagProperty (state) { + let isVerbatim = false + let isNamed = false + let tagHandle + let tagName - ch = state.input.charCodeAt(state.position); + let ch = state.input.charCodeAt(state.position) - if (ch !== 0x21/* ! */) return false; + if (ch !== 0x21/* ! */) return false if (state.tag !== null) { - throwError(state, 'duplication of a tag property'); + throwError(state, 'duplication of a tag property') } - ch = state.input.charCodeAt(++state.position); + ch = state.input.charCodeAt(++state.position) if (ch === 0x3C/* < */) { - isVerbatim = true; - ch = state.input.charCodeAt(++state.position); - + isVerbatim = true + ch = state.input.charCodeAt(++state.position) } else if (ch === 0x21/* ! */) { - isNamed = true; - tagHandle = '!!'; - ch = state.input.charCodeAt(++state.position); - + isNamed = true + tagHandle = '!!' + ch = state.input.charCodeAt(++state.position) } else { - tagHandle = '!'; + tagHandle = '!' } - _position = state.position; + let _position = state.position if (isVerbatim) { - do { ch = state.input.charCodeAt(++state.position); } - while (ch !== 0 && ch !== 0x3E/* > */); + do { ch = state.input.charCodeAt(++state.position) } + while (ch !== 0 && ch !== 0x3E/* > */) if (state.position < state.length) { - tagName = state.input.slice(_position, state.position); - ch = state.input.charCodeAt(++state.position); + 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'); + throwError(state, 'unexpected end of the stream within a verbatim tag') } } else { - while (ch !== 0 && !is_WS_OR_EOL(ch)) { - + while (ch !== 0 && !isWsOrEol(ch)) { if (ch === 0x21/* ! */) { if (!isNamed) { - tagHandle = state.input.slice(_position - 1, state.position + 1); + tagHandle = state.input.slice(_position - 1, state.position + 1) if (!PATTERN_TAG_HANDLE.test(tagHandle)) { - throwError(state, 'named tag handle cannot contain such characters'); + throwError(state, 'named tag handle cannot contain such characters') } - isNamed = true; - _position = state.position + 1; + isNamed = true + _position = state.position + 1 } else { - throwError(state, 'tag suffix cannot contain exclamation marks'); + throwError(state, 'tag suffix cannot contain exclamation marks') } } - ch = state.input.charCodeAt(++state.position); + ch = state.input.charCodeAt(++state.position) } - tagName = state.input.slice(_position, state.position); + tagName = state.input.slice(_position, state.position) if (PATTERN_FLOW_INDICATORS.test(tagName)) { - throwError(state, 'tag suffix cannot contain flow indicator characters'); + 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); + throwError(state, 'tag name cannot contain such characters: ' + tagName) } try { - tagName = decodeURIComponent(tagName); + tagName = decodeURIComponent(tagName) } catch (err) { - throwError(state, 'tag name is malformed: ' + tagName); + throwError(state, 'tag name is malformed: ' + tagName) } if (isVerbatim) { - state.tag = tagName; - + state.tag = tagName } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) { - state.tag = state.tagMap[tagHandle] + tagName; - + state.tag = state.tagMap[tagHandle] + tagName } else if (tagHandle === '!') { - state.tag = '!' + tagName; - + state.tag = '!' + tagName } else if (tagHandle === '!!') { - state.tag = 'tag:yaml.org,2002:' + tagName; - + state.tag = 'tag:yaml.org,2002:' + tagName } else { - throwError(state, 'undeclared tag handle "' + tagHandle + '"'); + throwError(state, 'undeclared tag handle "' + tagHandle + '"') } - return true; + return true } -function readAnchorProperty(state) { - var _position, - ch; +function readAnchorProperty (state) { + let ch = state.input.charCodeAt(state.position) - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x26/* & */) return false; + if (ch !== 0x26/* & */) return false if (state.anchor !== null) { - throwError(state, 'duplication of an anchor property'); + throwError(state, 'duplication of an anchor property') } - ch = state.input.charCodeAt(++state.position); - _position = state.position; + ch = state.input.charCodeAt(++state.position) + const _position = state.position - while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { - ch = state.input.charCodeAt(++state.position); + while (ch !== 0 && !isWsOrEol(ch) && !isFlowIndicator(ch)) { + ch = state.input.charCodeAt(++state.position) } if (state.position === _position) { - throwError(state, 'name of an anchor node must contain at least one character'); + throwError(state, 'name of an anchor node must contain at least one character') } - state.anchor = state.input.slice(_position, state.position); - return true; + state.anchor = state.input.slice(_position, state.position) + return true } -function readAlias(state) { - var _position, alias, - ch; - - ch = state.input.charCodeAt(state.position); +function readAlias (state) { + let ch = state.input.charCodeAt(state.position) - if (ch !== 0x2A/* * */) return false; + if (ch !== 0x2A/* * */) return false - ch = state.input.charCodeAt(++state.position); - _position = state.position; + ch = state.input.charCodeAt(++state.position) + const _position = state.position - while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { - ch = state.input.charCodeAt(++state.position); + while (ch !== 0 && !isWsOrEol(ch) && !isFlowIndicator(ch)) { + ch = state.input.charCodeAt(++state.position) } if (state.position === _position) { - throwError(state, 'name of an alias node must contain at least one character'); + throwError(state, 'name of an alias node must contain at least one character') } - alias = state.input.slice(_position, state.position); + const alias = state.input.slice(_position, state.position) if (!_hasOwnProperty.call(state.anchorMap, alias)) { - throwError(state, 'unidentified alias "' + alias + '"'); + throwError(state, 'unidentified alias "' + alias + '"') } - state.result = state.anchorMap[alias]; - skipSeparationSpace(state, true, -1); - return true; + state.result = state.anchorMap[alias] + skipSeparationSpace(state, true, -1) + return true +} + +function tryReadBlockMappingFromProperty (state, propertyStart, nodeIndent, flowIndent) { + const fallbackState = snapshotState(state) + + beginAnchorTransaction(state) + restoreState(state, propertyStart) + + // Re-read the leading properties as part of the first implicit key, not as + // properties of the current node. + state.tag = null + state.anchor = null + state.kind = null + state.result = null + + if (readBlockMapping(state, nodeIndent, flowIndent) && state.kind === 'mapping') { + commitAnchorTransaction(state) + return true + } + + rollbackAnchorTransaction(state) + restoreState(state, fallbackState) + return false } -function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { - var allowBlockStyles, - allowBlockScalars, - allowBlockCollections, - indentStatus = 1, // 1: this>parent, 0: this=parent, -1: thisparent, 0: this=parent, -1: this= state.maxDepth) { + throwError(state, 'nesting exceeded maxDepth (' + state.maxDepth + ')') + } + + state.depth += 1 if (state.listener !== null) { - state.listener('open', state); + state.listener('open', state) } - state.tag = null; - state.anchor = null; - state.kind = null; - state.result = null; + state.tag = null + state.anchor = null + state.kind = null + state.result = null - allowBlockStyles = allowBlockScalars = allowBlockCollections = + const allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || - CONTEXT_BLOCK_IN === nodeContext; + CONTEXT_BLOCK_IN === nodeContext if (allowToSeek) { if (skipSeparationSpace(state, true, -1)) { - atNewLine = true; + atNewLine = true if (state.lineIndent > parentIndent) { - indentStatus = 1; + indentStatus = 1 } else if (state.lineIndent === parentIndent) { - indentStatus = 0; + indentStatus = 0 } else if (state.lineIndent < parentIndent) { - indentStatus = -1; + indentStatus = -1 } } } if (indentStatus === 1) { - while (readTagProperty(state) || readAnchorProperty(state)) { + while (true) { + const ch = state.input.charCodeAt(state.position) + const propertyState = snapshotState(state) + + // A duplicate property token after a line break can be the first key of + // a nested block mapping, e.g. `!!map\n !!str key: value`. + if (atNewLine && + ((ch === 0x21/* ! */ && state.tag !== null) || + (ch === 0x26/* & */ && state.anchor !== null))) { + break + } + + if (!readTagProperty(state) && !readAnchorProperty(state)) { + break + } + + if (propertyStart === null) { + propertyStart = propertyState + } + if (skipSeparationSpace(state, true, -1)) { - atNewLine = true; - allowBlockCollections = allowBlockStyles; + atNewLine = true + allowBlockCollections = allowBlockStyles if (state.lineIndent > parentIndent) { - indentStatus = 1; + indentStatus = 1 } else if (state.lineIndent === parentIndent) { - indentStatus = 0; + indentStatus = 0 } else if (state.lineIndent < parentIndent) { - indentStatus = -1; + indentStatus = -1 } } else { - allowBlockCollections = false; + allowBlockCollections = false } } } if (allowBlockCollections) { - allowBlockCollections = atNewLine || allowCompact; + allowBlockCollections = atNewLine || allowCompact } if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { - flowIndent = parentIndent; + flowIndent = parentIndent } else { - flowIndent = parentIndent + 1; + flowIndent = parentIndent + 1 } - blockIndent = state.position - state.lineStart; + blockIndent = state.position - state.lineStart if (indentStatus === 1) { - if (allowBlockCollections && - (readBlockSequence(state, blockIndent) || - readBlockMapping(state, blockIndent, flowIndent)) || + if ((allowBlockCollections && + (readBlockSequence(state, blockIndent) || readBlockMapping(state, blockIndent, flowIndent))) || readFlowCollection(state, flowIndent)) { - hasContent = true; + hasContent = true } else { - if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || + const ch = state.input.charCodeAt(state.position) + + if (propertyStart !== null && allowBlockStyles && !allowBlockCollections && + ch !== 0x7C/* | */ && ch !== 0x3E/* > */ && + tryReadBlockMappingFromProperty( + state, + propertyStart, + propertyStart.position - propertyStart.lineStart, + flowIndent + )) { + hasContent = true + } else if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || readSingleQuotedScalar(state, flowIndent) || readDoubleQuotedScalar(state, flowIndent)) { - hasContent = true; - + hasContent = true } else if (readAlias(state)) { - hasContent = true; + hasContent = true if (state.tag !== null || state.anchor !== null) { - throwError(state, 'alias node should not have any properties'); + throwError(state, 'alias node should not have any properties') } - } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { - hasContent = true; + hasContent = true if (state.tag === null) { - state.tag = '?'; + state.tag = '?' } } if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; + storeAnchor(state, state.anchor, state.result) } } } else if (indentStatus === 0) { // Special case: block sequences are allowed to have same indentation level as the parent. // http://www.yaml.org/spec/1.2/spec.html#id2799784 - hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + hasContent = allowBlockCollections && readBlockSequence(state, blockIndent) } } if (state.tag === null) { if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; + storeAnchor(state, state.anchor, state.result) } - } else if (state.tag === '?') { // Implicit resolving is not allowed for non-scalar types, and '?' // non-specific tag is only automatically assigned to plain scalars. @@ -10015,245 +10043,234 @@ function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact // tag, for example like this: "! [0]" // if (state.result !== null && state.kind !== 'scalar') { - throwError(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); + 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) { - type = state.implicitTypes[typeIndex]; + for (let typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { + type = state.implicitTypes[typeIndex] if (type.resolve(state.result)) { // `state.result` updated in resolver if matched - state.result = type.construct(state.result); - state.tag = type.tag; + state.result = type.construct(state.result) + state.tag = type.tag if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; + storeAnchor(state, state.anchor, state.result) } - break; + break } } } else if (state.tag !== '!') { if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) { - type = state.typeMap[state.kind || 'fallback'][state.tag]; + type = state.typeMap[state.kind || 'fallback'][state.tag] } else { // looking for multi type - type = null; - typeList = state.typeMap.multi[state.kind || 'fallback']; + type = null + const typeList = state.typeMap.multi[state.kind || 'fallback'] - for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) { + for (let typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) { if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) { - type = typeList[typeIndex]; - break; + type = typeList[typeIndex] + break } } } if (!type) { - throwError(state, 'unknown tag !<' + state.tag + '>'); + throwError(state, 'unknown tag !<' + state.tag + '>') } if (state.result !== null && type.kind !== state.kind) { - throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); + throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"') } if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched - throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); + throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag') } else { - state.result = type.construct(state.result, state.tag); + state.result = type.construct(state.result, state.tag) if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; + storeAnchor(state, state.anchor, state.result) } } } if (state.listener !== null) { - state.listener('close', state); + state.listener('close', state) } - return state.tag !== null || state.anchor !== null || hasContent; + + state.depth -= 1 + return state.tag !== null || state.anchor !== null || hasContent } -function readDocument(state) { - var documentStart = state.position, - _position, - directiveName, - directiveArgs, - hasDirectives = false, - ch; +function readDocument (state) { + const documentStart = state.position + let hasDirectives = false + let ch - state.version = null; - state.checkLineBreaks = state.legacy; - state.tagMap = Object.create(null); - state.anchorMap = Object.create(null); + state.version = null + state.checkLineBreaks = state.legacy + state.tagMap = Object.create(null) + state.anchorMap = Object.create(null) while ((ch = state.input.charCodeAt(state.position)) !== 0) { - skipSeparationSpace(state, true, -1); + skipSeparationSpace(state, true, -1) - ch = state.input.charCodeAt(state.position); + ch = state.input.charCodeAt(state.position) if (state.lineIndent > 0 || ch !== 0x25/* % */) { - break; + break } - hasDirectives = true; - ch = state.input.charCodeAt(++state.position); - _position = state.position; + hasDirectives = true + ch = state.input.charCodeAt(++state.position) + let _position = state.position - while (ch !== 0 && !is_WS_OR_EOL(ch)) { - ch = state.input.charCodeAt(++state.position); + while (ch !== 0 && !isWsOrEol(ch)) { + ch = state.input.charCodeAt(++state.position) } - directiveName = state.input.slice(_position, state.position); - directiveArgs = []; + const directiveName = state.input.slice(_position, state.position) + const directiveArgs = [] if (directiveName.length < 1) { - throwError(state, 'directive name must not be less than one character in length'); + 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); + while (isWhiteSpace(ch)) { + ch = state.input.charCodeAt(++state.position) } if (ch === 0x23/* # */) { - do { ch = state.input.charCodeAt(++state.position); } - while (ch !== 0 && !is_EOL(ch)); - break; + do { ch = state.input.charCodeAt(++state.position) } + while (ch !== 0 && !isEol(ch)) + break } - if (is_EOL(ch)) break; + if (isEol(ch)) break - _position = state.position; + _position = state.position - while (ch !== 0 && !is_WS_OR_EOL(ch)) { - ch = state.input.charCodeAt(++state.position); + while (ch !== 0 && !isWsOrEol(ch)) { + ch = state.input.charCodeAt(++state.position) } - directiveArgs.push(state.input.slice(_position, state.position)); + directiveArgs.push(state.input.slice(_position, state.position)) } - if (ch !== 0) readLineBreak(state); + if (ch !== 0) readLineBreak(state) if (_hasOwnProperty.call(directiveHandlers, directiveName)) { - directiveHandlers[directiveName](state, directiveName, directiveArgs); + directiveHandlers[directiveName](state, directiveName, directiveArgs) } else { - throwWarning(state, 'unknown document directive "' + directiveName + '"'); + throwWarning(state, 'unknown document directive "' + directiveName + '"') } } - skipSeparationSpace(state, true, -1); + skipSeparationSpace(state, true, -1) if (state.lineIndent === 0 && - state.input.charCodeAt(state.position) === 0x2D/* - */ && + state.input.charCodeAt(state.position) === 0x2D/* - */ && state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { - state.position += 3; - skipSeparationSpace(state, true, -1); - + state.position += 3 + skipSeparationSpace(state, true, -1) } else if (hasDirectives) { - throwError(state, 'directives end mark is expected'); + throwError(state, 'directives end mark is expected') } - composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); - skipSeparationSpace(state, true, -1); + 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'); + throwWarning(state, 'non-ASCII line breaks are interpreted as content') } - state.documents.push(state.result); + state.documents.push(state.result) if (state.position === state.lineStart && testDocumentSeparator(state)) { - if (state.input.charCodeAt(state.position) === 0x2E/* . */) { - state.position += 3; - skipSeparationSpace(state, true, -1); + state.position += 3 + skipSeparationSpace(state, true, -1) } - return; + return } if (state.position < (state.length - 1)) { - throwError(state, 'end of the stream or a document separator is expected'); - } else { - return; + throwError(state, 'end of the stream or a document separator is expected') } } - -function loadDocuments(input, options) { - input = String(input); - options = options || {}; +function loadDocuments (input, options) { + input = String(input) + options = options || {} if (input.length !== 0) { - // Add tailing `\n` if not exists if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { - input += '\n'; + input += '\n' } // Strip BOM if (input.charCodeAt(0) === 0xFEFF) { - input = input.slice(1); + input = input.slice(1) } } - var state = new State(input, options); + const state = new State(input, options) - var nullpos = input.indexOf('\0'); + const nullpos = input.indexOf('\0') if (nullpos !== -1) { - state.position = nullpos; - throwError(state, 'null byte is not allowed in input'); + state.position = nullpos + throwError(state, 'null byte is not allowed in input') } // Use 0 as string terminator. That significantly simplifies bounds check. - state.input += '\0'; + state.input += '\0' while (state.input.charCodeAt(state.position) === 0x20/* Space */) { - state.lineIndent += 1; - state.position += 1; + state.lineIndent += 1 + state.position += 1 } while (state.position < (state.length - 1)) { - readDocument(state); + readDocument(state) } - return state.documents; + return state.documents } - -function loadAll(input, iterator, options) { +function loadAll (input, iterator, options) { if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { - options = iterator; - iterator = null; + options = iterator + iterator = null } - var documents = loadDocuments(input, options); + const documents = loadDocuments(input, options) if (typeof iterator !== 'function') { - return documents; + return documents } - for (var index = 0, length = documents.length; index < length; index += 1) { - iterator(documents[index]); + for (let index = 0, length = documents.length; index < length; index += 1) { + iterator(documents[index]) } } - -function load(input, options) { - var documents = loadDocuments(input, options); +function load (input, options) { + const documents = loadDocuments(input, options) if (documents.length === 0) { - /*eslint-disable no-undefined*/ - return undefined; + return undefined } else if (documents.length === 1) { - return documents[0]; + return documents[0] } - throw new YAMLException('expected a single document in the stream, but found more'); + throw new YAMLException('expected a single document in the stream, but found more') } - -module.exports.loadAll = loadAll; -module.exports.load = load; +module.exports.loadAll = loadAll +module.exports.load = load /***/ }), @@ -10264,125 +10281,113 @@ module.exports.load = load; "use strict"; -/*eslint-disable max-len*/ +const YAMLException = __nccwpck_require__(8179) +const Type = __nccwpck_require__(6073) -var YAMLException = __nccwpck_require__(8179); -var Type = __nccwpck_require__(6073); - - -function compileList(schema, name) { - var result = []; +function compileList (schema, name) { + const result = [] schema[name].forEach(function (currentType) { - var newIndex = result.length; + let newIndex = result.length result.forEach(function (previousType, previousIndex) { if (previousType.tag === currentType.tag && previousType.kind === currentType.kind && previousType.multi === currentType.multi) { - - newIndex = previousIndex; + newIndex = previousIndex } - }); + }) - result[newIndex] = currentType; - }); + result[newIndex] = currentType + }) - return result; + return result } - -function compileMap(/* lists... */) { - var result = { - scalar: {}, - sequence: {}, - mapping: {}, - fallback: {}, - multi: { - scalar: [], - sequence: [], - mapping: [], - fallback: [] - } - }, index, length; - - function collectType(type) { +function compileMap (/* lists... */) { + const result = { + scalar: {}, + sequence: {}, + mapping: {}, + fallback: {}, + multi: { + scalar: [], + sequence: [], + mapping: [], + fallback: [] + } + } + function collectType (type) { if (type.multi) { - result.multi[type.kind].push(type); - result.multi['fallback'].push(type); + result.multi[type.kind].push(type) + result.multi['fallback'].push(type) } else { - result[type.kind][type.tag] = result['fallback'][type.tag] = type; + result[type.kind][type.tag] = result['fallback'][type.tag] = type } } - for (index = 0, length = arguments.length; index < length; index += 1) { - arguments[index].forEach(collectType); + for (let index = 0, length = arguments.length; index < length; index += 1) { + arguments[index].forEach(collectType) } - return result; + return result } - -function Schema(definition) { - return this.extend(definition); +function Schema (definition) { + return this.extend(definition) } - -Schema.prototype.extend = function extend(definition) { - var implicit = []; - var explicit = []; +Schema.prototype.extend = function extend (definition) { + let implicit = [] + let explicit = [] if (definition instanceof Type) { // Schema.extend(type) - explicit.push(definition); - + explicit.push(definition) } else if (Array.isArray(definition)) { // Schema.extend([ type1, type2, ... ]) - explicit = explicit.concat(definition); - + explicit = explicit.concat(definition) } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) { // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] }) - if (definition.implicit) implicit = implicit.concat(definition.implicit); - if (definition.explicit) explicit = explicit.concat(definition.explicit); - + if (definition.implicit) implicit = implicit.concat(definition.implicit) + if (definition.explicit) explicit = explicit.concat(definition.explicit) } else { throw new YAMLException('Schema.extend argument should be a Type, [ Type ], ' + - 'or a schema definition ({ implicit: [...], explicit: [...] })'); + 'or a schema definition ({ implicit: [...], explicit: [...] })') } implicit.forEach(function (type) { if (!(type instanceof Type)) { - throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.') } if (type.loadKind && type.loadKind !== 'scalar') { - throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); + throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.') } if (type.multi) { - throw new YAMLException('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.'); + throw new YAMLException('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.') } - }); + }) explicit.forEach(function (type) { if (!(type instanceof Type)) { - throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.') } - }); - - var result = Object.create(Schema.prototype); + }) - result.implicit = (this.implicit || []).concat(implicit); - result.explicit = (this.explicit || []).concat(explicit); + const result = Object.create(Schema.prototype) - result.compiledImplicit = compileList(result, 'implicit'); - result.compiledExplicit = compileList(result, 'explicit'); - result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit); + result.implicit = (this.implicit || []).concat(implicit) + result.explicit = (this.explicit || []).concat(explicit) - return result; -}; + result.compiledImplicit = compileList(result, 'implicit') + result.compiledExplicit = compileList(result, 'explicit') + result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit) + return result +} -module.exports = Schema; +module.exports = Schema /***/ }), @@ -10399,9 +10404,7 @@ module.exports = Schema; - - -module.exports = __nccwpck_require__(1035); +module.exports = __nccwpck_require__(1035) /***/ }), @@ -10418,8 +10421,6 @@ module.exports = __nccwpck_require__(1035); - - module.exports = (__nccwpck_require__(2011).extend)({ implicit: [ __nccwpck_require__(9212), @@ -10431,7 +10432,7 @@ module.exports = (__nccwpck_require__(2011).extend)({ __nccwpck_require__(6860), __nccwpck_require__(9548) ] -}); +}) /***/ }), @@ -10445,10 +10446,7 @@ module.exports = (__nccwpck_require__(2011).extend)({ - - -var Schema = __nccwpck_require__(1082); - +const Schema = __nccwpck_require__(1082) module.exports = new Schema({ explicit: [ @@ -10456,7 +10454,7 @@ module.exports = new Schema({ __nccwpck_require__(7283), __nccwpck_require__(6150) ] -}); +}) /***/ }), @@ -10474,8 +10472,6 @@ module.exports = new Schema({ - - module.exports = (__nccwpck_require__(8562).extend)({ implicit: [ __nccwpck_require__(721), @@ -10483,7 +10479,7 @@ module.exports = (__nccwpck_require__(8562).extend)({ __nccwpck_require__(1615), __nccwpck_require__(2705) ] -}); +}) /***/ }), @@ -10494,105 +10490,100 @@ module.exports = (__nccwpck_require__(8562).extend)({ "use strict"; - -var common = __nccwpck_require__(6829); - +const common = __nccwpck_require__(6829) // get snippet for a single line, respecting maxLength -function getLine(buffer, lineStart, lineEnd, position, maxLineLength) { - var head = ''; - var tail = ''; - var maxHalfLength = Math.floor(maxLineLength / 2) - 1; +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; + head = ' ... ' + lineStart = position - maxHalfLength + head.length } if (lineEnd - position > maxHalfLength) { - tail = ' ...'; - lineEnd = position + maxHalfLength - tail.length; + 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 padStart (string, max) { + return common.repeat(' ', max - string.length) + string } +function makeSnippet (mark, options) { + options = Object.create(options || null) -function makeSnippet(mark, options) { - options = Object.create(options || null); - - if (!mark.buffer) return 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; + 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; + 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); + lineEnds.push(match.index) + lineStarts.push(match.index + match[0].length) if (mark.position <= match.index && foundLineNo < 0) { - foundLineNo = lineStarts.length - 2; + foundLineNo = lineStarts.length - 2 } } - if (foundLineNo < 0) foundLineNo = lineStarts.length - 1; + 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); + let result = '' + const lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length + const maxLineLength = options.maxLength - (options.indent + lineNoLength + 3) - for (i = 1; i <= options.linesBefore; i++) { - if (foundLineNo - i < 0) break; - line = getLine( + for (let i = 1; i <= options.linesBefore; i++) { + if (foundLineNo - i < 0) break + const 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.str + '\n' + result } - line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength); + const 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'; + ' | ' + 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( + for (let i = 1; i <= options.linesAfter; i++) { + if (foundLineNo + i >= lineEnds.length) break + const 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'; + ' | ' + line.str + '\n' } - return result.replace(/\n$/, ''); + return result.replace(/\n$/, '') } - -module.exports = makeSnippet; +module.exports = makeSnippet /***/ }), @@ -10603,9 +10594,9 @@ module.exports = makeSnippet; "use strict"; -var YAMLException = __nccwpck_require__(8179); +const YAMLException = __nccwpck_require__(8179) -var TYPE_CONSTRUCTOR_OPTIONS = [ +const TYPE_CONSTRUCTOR_OPTIONS = [ 'kind', 'multi', 'resolve', @@ -10616,57 +10607,57 @@ var TYPE_CONSTRUCTOR_OPTIONS = [ 'representName', 'defaultStyle', 'styleAliases' -]; +] -var YAML_NODE_KINDS = [ +const YAML_NODE_KINDS = [ 'scalar', 'sequence', 'mapping' -]; +] -function compileStyleAliases(map) { - var result = {}; +function compileStyleAliases (map) { + const result = {} if (map !== null) { Object.keys(map).forEach(function (style) { map[style].forEach(function (alias) { - result[String(alias)] = style; - }); - }); + result[String(alias)] = style + }) + }) } - return result; + return result } -function Type(tag, options) { - options = options || {}; +function Type (tag, options) { + options = options || {} Object.keys(options).forEach(function (name) { if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { - throw new YAMLException('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); + throw new YAMLException('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.') } - }); + }) // TODO: Add tag format check. - this.options = options; // keep original options in case user wants to extend this type later - 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); + this.options = options // keep original options in case user wants to extend this type later + 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 YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + throw new YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.') } } -module.exports = Type; +module.exports = Type /***/ }), @@ -10677,120 +10668,117 @@ module.exports = Type; "use strict"; -/*eslint-disable no-bitwise*/ - - -var Type = __nccwpck_require__(6073); - +const Type = __nccwpck_require__(6073) // [ 64, 65, 66 ] -> [ padding, CR, LF ] -var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; - +const BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r' -function resolveYamlBinary(data) { - if (data === null) return false; +function resolveYamlBinary (data) { + if (data === null) return false - var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; + let bitlen = 0 + const max = data.length + const map = BASE64_MAP // Convert one by one. - for (idx = 0; idx < max; idx++) { - code = map.indexOf(data.charAt(idx)); + for (let idx = 0; idx < max; idx++) { + const code = map.indexOf(data.charAt(idx)) // Skip CR/LF - if (code > 64) continue; + if (code > 64) continue // Fail on illegal characters - if (code < 0) return false; + if (code < 0) return false - bitlen += 6; + bitlen += 6 } // If there are any bits left, source was corrupted - return (bitlen % 8) === 0; + return (bitlen % 8) === 0 } -function constructYamlBinary(data) { - var idx, tailbits, - input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan - max = input.length, - map = BASE64_MAP, - bits = 0, - result = []; +function constructYamlBinary (data) { + const input = data.replace(/[\r\n=]/g, '') // remove CR/LF & padding to simplify scan + const max = input.length + const map = BASE64_MAP + let bits = 0 + const result = [] // Collect by 6*4 bits (3 bytes) - for (idx = 0; idx < max; idx++) { + for (let idx = 0; idx < max; idx++) { if ((idx % 4 === 0) && idx) { - result.push((bits >> 16) & 0xFF); - result.push((bits >> 8) & 0xFF); - result.push(bits & 0xFF); + result.push((bits >> 16) & 0xFF) + result.push((bits >> 8) & 0xFF) + result.push(bits & 0xFF) } - bits = (bits << 6) | map.indexOf(input.charAt(idx)); + bits = (bits << 6) | map.indexOf(input.charAt(idx)) } // Dump tail - tailbits = (max % 4) * 6; + const tailbits = (max % 4) * 6 if (tailbits === 0) { - result.push((bits >> 16) & 0xFF); - result.push((bits >> 8) & 0xFF); - result.push(bits & 0xFF); + result.push((bits >> 16) & 0xFF) + result.push((bits >> 8) & 0xFF) + result.push(bits & 0xFF) } else if (tailbits === 18) { - result.push((bits >> 10) & 0xFF); - result.push((bits >> 2) & 0xFF); + result.push((bits >> 10) & 0xFF) + result.push((bits >> 2) & 0xFF) } else if (tailbits === 12) { - result.push((bits >> 4) & 0xFF); + result.push((bits >> 4) & 0xFF) } - return new Uint8Array(result); + return new Uint8Array(result) } -function representYamlBinary(object /*, style*/) { - var result = '', bits = 0, idx, tail, - max = object.length, - map = BASE64_MAP; +function representYamlBinary (object /*, style */) { + let result = '' + let bits = 0 + const max = object.length + const map = BASE64_MAP // Convert every three bytes to 4 ASCII characters. - for (idx = 0; idx < max; idx++) { + for (let idx = 0; idx < max; idx++) { if ((idx % 3 === 0) && idx) { - result += map[(bits >> 18) & 0x3F]; - result += map[(bits >> 12) & 0x3F]; - result += map[(bits >> 6) & 0x3F]; - result += map[bits & 0x3F]; + result += map[(bits >> 18) & 0x3F] + result += map[(bits >> 12) & 0x3F] + result += map[(bits >> 6) & 0x3F] + result += map[bits & 0x3F] } - bits = (bits << 8) + object[idx]; + bits = (bits << 8) + object[idx] } // Dump tail - tail = max % 3; + const tail = max % 3 if (tail === 0) { - result += map[(bits >> 18) & 0x3F]; - result += map[(bits >> 12) & 0x3F]; - result += map[(bits >> 6) & 0x3F]; - result += map[bits & 0x3F]; + result += map[(bits >> 18) & 0x3F] + result += map[(bits >> 12) & 0x3F] + result += map[(bits >> 6) & 0x3F] + result += map[bits & 0x3F] } else if (tail === 2) { - result += map[(bits >> 10) & 0x3F]; - result += map[(bits >> 4) & 0x3F]; - result += map[(bits << 2) & 0x3F]; - result += map[64]; + result += map[(bits >> 10) & 0x3F] + result += map[(bits >> 4) & 0x3F] + result += map[(bits << 2) & 0x3F] + result += map[64] } else if (tail === 1) { - result += map[(bits >> 2) & 0x3F]; - result += map[(bits << 4) & 0x3F]; - result += map[64]; - result += map[64]; + result += map[(bits >> 2) & 0x3F] + result += map[(bits << 4) & 0x3F] + result += map[64] + result += map[64] } - return result; + return result } -function isBinary(obj) { - return Object.prototype.toString.call(obj) === '[object Uint8Array]'; +function isBinary (obj) { + return Object.prototype.toString.call(obj) === '[object Uint8Array]' } module.exports = new Type('tag:yaml.org,2002:binary', { @@ -10799,7 +10787,7 @@ module.exports = new Type('tag:yaml.org,2002:binary', { construct: constructYamlBinary, predicate: isBinary, represent: representYamlBinary -}); +}) /***/ }), @@ -10810,25 +10798,25 @@ module.exports = new Type('tag:yaml.org,2002:binary', { "use strict"; -var Type = __nccwpck_require__(6073); +const Type = __nccwpck_require__(6073) -function resolveYamlBoolean(data) { - if (data === null) return false; +function resolveYamlBoolean (data) { + if (data === null) return false - var max = data.length; + const max = data.length return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || - (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); + (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')) } -function constructYamlBoolean(data) { +function constructYamlBoolean (data) { return data === 'true' || data === 'True' || - data === 'TRUE'; + data === 'TRUE' } -function isBoolean(object) { - return Object.prototype.toString.call(object) === '[object Boolean]'; +function isBoolean (object) { + return Object.prototype.toString.call(object) === '[object Boolean]' } module.exports = new Type('tag:yaml.org,2002:bool', { @@ -10837,12 +10825,12 @@ module.exports = new Type('tag:yaml.org,2002:bool', { 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'; } + lowercase: function (object) { return object ? 'true' : 'false' }, + uppercase: function (object) { return object ? 'TRUE' : 'FALSE' }, + camelcase: function (object) { return object ? 'True' : 'False' } }, defaultStyle: 'lowercase' -}); +}) /***/ }), @@ -10853,91 +10841,93 @@ module.exports = new Type('tag:yaml.org,2002:bool', { "use strict"; -var common = __nccwpck_require__(6829); -var Type = __nccwpck_require__(6073); +const common = __nccwpck_require__(6829) +const Type = __nccwpck_require__(6073) -var YAML_FLOAT_PATTERN = new RegExp( +const YAML_FLOAT_PATTERN = new RegExp( // 2.5e4, 2.5 and integers - '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + + '^(?:[-+]?(?:[0-9]+)(?:\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?' + // .2e4, .2 // special case, seems not from spec - '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + + '|\\.[0-9]+(?:[eE][-+]?[0-9]+)?' + // .inf '|[-+]?\\.(?:inf|Inf|INF)' + // .nan - '|\\.(?:nan|NaN|NAN))$'); + '|\\.(?:nan|NaN|NAN))$') -function resolveYamlFloat(data) { - if (data === null) return false; +const YAML_FLOAT_SPECIAL_PATTERN = new RegExp( + '^(?:' + + // .inf + '[-+]?\\.(?:inf|Inf|INF)' + + // .nan + '|\\.(?:nan|NaN|NAN))$') - 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; +function resolveYamlFloat (data) { + if (data === null) return false + + if (!YAML_FLOAT_PATTERN.test(data)) { + return false } - return true; -} + if (Number.isFinite(parseFloat(data, 10))) { + return true + } -function constructYamlFloat(data) { - var value, sign; + return YAML_FLOAT_SPECIAL_PATTERN.test(data) +} - value = data.replace(/_/g, '').toLowerCase(); - sign = value[0] === '-' ? -1 : 1; +function constructYamlFloat (data) { + let value = data.toLowerCase() + const sign = value[0] === '-' ? -1 : 1 if ('+-'.indexOf(value[0]) >= 0) { - value = value.slice(1); + value = value.slice(1) } if (value === '.inf') { - return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; - + return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY } else if (value === '.nan') { - return NaN; + return NaN } - return sign * parseFloat(value, 10); + return sign * parseFloat(value, 10) } +const SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/ -var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; - -function representYamlFloat(object, style) { - var res; - +function representYamlFloat (object, style) { if (isNaN(object)) { switch (style) { - case 'lowercase': return '.nan'; - case 'uppercase': return '.NAN'; - case 'camelcase': return '.NaN'; + 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'; + 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'; + case 'lowercase': return '-.inf' + case 'uppercase': return '-.INF' + case 'camelcase': return '-.Inf' } } else if (common.isNegativeZero(object)) { - return '-0.0'; + return '-0.0' } - res = object.toString(10); + const res = object.toString(10) // JS stringifier can build scientific format without dots: 5e-100, // while YAML requres dot: 5.e-100. Fix it with simple hack - return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res; + return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res } -function isFloat(object) { +function isFloat (object) { return (Object.prototype.toString.call(object) === '[object Number]') && - (object % 1 !== 0 || common.isNegativeZero(object)); + (object % 1 !== 0 || common.isNegativeZero(object)) } module.exports = new Type('tag:yaml.org,2002:float', { @@ -10947,7 +10937,7 @@ module.exports = new Type('tag:yaml.org,2002:float', { predicate: isFloat, represent: representYamlFloat, defaultStyle: 'lowercase' -}); +}) /***/ }), @@ -10958,138 +10948,125 @@ module.exports = new Type('tag:yaml.org,2002:float', { "use strict"; -var common = __nccwpck_require__(6829); -var Type = __nccwpck_require__(6073); +const common = __nccwpck_require__(6829) +const Type = __nccwpck_require__(6073) -function isHexCode(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || - ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || - ((0x61/* a */ <= c) && (c <= 0x66/* f */)); +function isHexCode (c) { + return ((c >= 0x30/* 0 */) && (c <= 0x39/* 9 */)) || + ((c >= 0x41/* A */) && (c <= 0x46/* F */)) || + ((c >= 0x61/* a */) && (c <= 0x66/* f */)) } -function isOctCode(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); +function isOctCode (c) { + return ((c >= 0x30/* 0 */) && (c <= 0x37/* 7 */)) } -function isDecCode(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); +function isDecCode (c) { + return ((c >= 0x30/* 0 */) && (c <= 0x39/* 9 */)) } -function resolveYamlInteger(data) { - if (data === null) return false; +function resolveYamlInteger (data) { + if (data === null) return false - var max = data.length, - index = 0, - hasDigits = false, - ch; + const max = data.length + let index = 0 + let hasDigits = false - if (!max) return false; + if (!max) return false - ch = data[index]; + let ch = data[index] // sign if (ch === '-' || ch === '+') { - ch = data[++index]; + ch = data[++index] } if (ch === '0') { // 0 - if (index + 1 === max) return true; - ch = data[++index]; + if (index + 1 === max) return true + ch = data[++index] // base 2, base 8, base 16 if (ch === 'b') { // base 2 - index++; + index++ for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (ch !== '0' && ch !== '1') return false; - hasDigits = true; + ch = data[index] + if (ch !== '0' && ch !== '1') return false + hasDigits = true } - return hasDigits && ch !== '_'; + return hasDigits && Number.isFinite(parseYamlInteger(data)) } - if (ch === 'x') { // base 16 - index++; + index++ for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (!isHexCode(data.charCodeAt(index))) return false; - hasDigits = true; + if (!isHexCode(data.charCodeAt(index))) return false + hasDigits = true } - return hasDigits && ch !== '_'; + return hasDigits && Number.isFinite(parseYamlInteger(data)) } - if (ch === 'o') { // base 8 - index++; + index++ for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (!isOctCode(data.charCodeAt(index))) return false; - hasDigits = true; + if (!isOctCode(data.charCodeAt(index))) return false + hasDigits = true } - return hasDigits && ch !== '_'; + return hasDigits && Number.isFinite(parseYamlInteger(data)) } } // base 10 (except 0) - // value should not start with `_`; - if (ch === '_') return false; - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; if (!isDecCode(data.charCodeAt(index))) { - return false; + return false } - hasDigits = true; + hasDigits = true } - // Should have digits and should not end with `_` - if (!hasDigits || ch === '_') return false; + if (!hasDigits) return false - return true; + return Number.isFinite(parseYamlInteger(data)) } -function constructYamlInteger(data) { - var value = data, sign = 1, ch; +function parseYamlInteger (data) { + let value = data + let sign = 1 - if (value.indexOf('_') !== -1) { - value = value.replace(/_/g, ''); - } - - ch = value[0]; + let ch = value[0] if (ch === '-' || ch === '+') { - if (ch === '-') sign = -1; - value = value.slice(1); - ch = value[0]; + if (ch === '-') sign = -1 + value = value.slice(1) + ch = value[0] } - if (value === '0') return 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); + 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); + return sign * parseInt(value, 10) +} + +function constructYamlInteger (data) { + return parseYamlInteger(data) } -function isInteger(object) { +function isInteger (object) { return (Object.prototype.toString.call(object)) === '[object Number]' && - (object % 1 === 0 && !common.isNegativeZero(object)); + (object % 1 === 0 && !common.isNegativeZero(object)) } module.exports = new Type('tag:yaml.org,2002:int', { @@ -11098,20 +11075,19 @@ module.exports = new Type('tag:yaml.org,2002:int', { 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); } + 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) }, + 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' ] + binary: [2, 'bin'], + octal: [8, 'oct'], + decimal: [10, 'dec'], + hexadecimal: [16, 'hex'] } -}); +}) /***/ }), @@ -11122,12 +11098,12 @@ module.exports = new Type('tag:yaml.org,2002:int', { "use strict"; -var Type = __nccwpck_require__(6073); +const Type = __nccwpck_require__(6073) module.exports = new Type('tag:yaml.org,2002:map', { kind: 'mapping', - construct: function (data) { return data !== null ? data : {}; } -}); + construct: function (data) { return data !== null ? data : {} } +}) /***/ }), @@ -11138,16 +11114,16 @@ module.exports = new Type('tag:yaml.org,2002:map', { "use strict"; -var Type = __nccwpck_require__(6073); +const Type = __nccwpck_require__(6073) -function resolveYamlMerge(data) { - return data === '<<' || data === null; +function resolveYamlMerge (data) { + return data === '<<' || data === null } module.exports = new Type('tag:yaml.org,2002:merge', { kind: 'scalar', resolve: resolveYamlMerge -}); +}) /***/ }), @@ -11158,23 +11134,23 @@ module.exports = new Type('tag:yaml.org,2002:merge', { "use strict"; -var Type = __nccwpck_require__(6073); +const Type = __nccwpck_require__(6073) -function resolveYamlNull(data) { - if (data === null) return true; +function resolveYamlNull (data) { + if (data === null) return true - var max = data.length; + const max = data.length return (max === 1 && data === '~') || - (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); + (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')) } -function constructYamlNull() { - return null; +function constructYamlNull () { + return null } -function isNull(object) { - return object === null; +function isNull (object) { + return object === null } module.exports = new Type('tag:yaml.org,2002:null', { @@ -11183,14 +11159,14 @@ module.exports = new Type('tag:yaml.org,2002:null', { construct: constructYamlNull, predicate: isNull, represent: { - canonical: function () { return '~'; }, - lowercase: function () { return 'null'; }, - uppercase: function () { return 'NULL'; }, - camelcase: function () { return 'Null'; }, - empty: function () { return ''; } + canonical: function () { return '~' }, + lowercase: function () { return 'null' }, + uppercase: function () { return 'NULL' }, + camelcase: function () { return 'Null' }, + empty: function () { return '' } }, defaultStyle: 'lowercase' -}); +}) /***/ }), @@ -11201,48 +11177,49 @@ module.exports = new Type('tag:yaml.org,2002:null', { "use strict"; -var Type = __nccwpck_require__(6073); +const Type = __nccwpck_require__(6073) -var _hasOwnProperty = Object.prototype.hasOwnProperty; -var _toString = Object.prototype.toString; +const _hasOwnProperty = Object.prototype.hasOwnProperty +const _toString = Object.prototype.toString -function resolveYamlOmap(data) { - if (data === null) return true; +function resolveYamlOmap (data) { + if (data === null) return true - var objectKeys = [], index, length, pair, pairKey, pairHasKey, - object = data; + const objectKeys = [] + const object = data - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; - pairHasKey = false; + for (let index = 0, length = object.length; index < length; index += 1) { + const pair = object[index] + let pairHasKey = false - if (_toString.call(pair) !== '[object Object]') return false; + if (_toString.call(pair) !== '[object Object]') return false + let pairKey for (pairKey in pair) { if (_hasOwnProperty.call(pair, pairKey)) { - if (!pairHasKey) pairHasKey = true; - else return false; + if (!pairHasKey) pairHasKey = true + else return false } } - if (!pairHasKey) return false; + if (!pairHasKey) return false - if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); - else return false; + if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey) + else return false } - return true; + return true } -function constructYamlOmap(data) { - return data !== null ? data : []; +function constructYamlOmap (data) { + return data !== null ? data : [] } module.exports = new Type('tag:yaml.org,2002:omap', { kind: 'sequence', resolve: resolveYamlOmap, construct: constructYamlOmap -}); +}) /***/ }), @@ -11253,57 +11230,54 @@ module.exports = new Type('tag:yaml.org,2002:omap', { "use strict"; -var Type = __nccwpck_require__(6073); +const Type = __nccwpck_require__(6073) -var _toString = Object.prototype.toString; +const _toString = Object.prototype.toString -function resolveYamlPairs(data) { - if (data === null) return true; +function resolveYamlPairs (data) { + if (data === null) return true - var index, length, pair, keys, result, - object = data; + const object = data - result = new Array(object.length); + const result = new Array(object.length) - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; + for (let index = 0, length = object.length; index < length; index += 1) { + const pair = object[index] - if (_toString.call(pair) !== '[object Object]') return false; + if (_toString.call(pair) !== '[object Object]') return false - keys = Object.keys(pair); + const keys = Object.keys(pair) - if (keys.length !== 1) return false; + if (keys.length !== 1) return false - result[index] = [ keys[0], pair[keys[0]] ]; + result[index] = [keys[0], pair[keys[0]]] } - return true; + return true } -function constructYamlPairs(data) { - if (data === null) return []; - - var index, length, pair, keys, result, - object = data; +function constructYamlPairs (data) { + if (data === null) return [] - result = new Array(object.length); + const object = data + const result = new Array(object.length) - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; + for (let index = 0, length = object.length; index < length; index += 1) { + const pair = object[index] - keys = Object.keys(pair); + const keys = Object.keys(pair) - result[index] = [ keys[0], pair[keys[0]] ]; + result[index] = [keys[0], pair[keys[0]]] } - return result; + return result } module.exports = new Type('tag:yaml.org,2002:pairs', { kind: 'sequence', resolve: resolveYamlPairs, construct: constructYamlPairs -}); +}) /***/ }), @@ -11314,12 +11288,12 @@ module.exports = new Type('tag:yaml.org,2002:pairs', { "use strict"; -var Type = __nccwpck_require__(6073); +const Type = __nccwpck_require__(6073) module.exports = new Type('tag:yaml.org,2002:seq', { kind: 'sequence', - construct: function (data) { return data !== null ? data : []; } -}); + construct: function (data) { return data !== null ? data : [] } +}) /***/ }), @@ -11330,33 +11304,33 @@ module.exports = new Type('tag:yaml.org,2002:seq', { "use strict"; -var Type = __nccwpck_require__(6073); +const Type = __nccwpck_require__(6073) -var _hasOwnProperty = Object.prototype.hasOwnProperty; +const _hasOwnProperty = Object.prototype.hasOwnProperty -function resolveYamlSet(data) { - if (data === null) return true; +function resolveYamlSet (data) { + if (data === null) return true - var key, object = data; + const object = data - for (key in object) { + for (const key in object) { if (_hasOwnProperty.call(object, key)) { - if (object[key] !== null) return false; + if (object[key] !== null) return false } } - return true; + return true } -function constructYamlSet(data) { - return data !== null ? data : {}; +function constructYamlSet (data) { + return data !== null ? data : {} } module.exports = new Type('tag:yaml.org,2002:set', { kind: 'mapping', resolve: resolveYamlSet, construct: constructYamlSet -}); +}) /***/ }), @@ -11367,12 +11341,12 @@ module.exports = new Type('tag:yaml.org,2002:set', { "use strict"; -var Type = __nccwpck_require__(6073); +const Type = __nccwpck_require__(6073) module.exports = new Type('tag:yaml.org,2002:str', { kind: 'scalar', - construct: function (data) { return data !== null ? data : ''; } -}); + construct: function (data) { return data !== null ? data : '' } +}) /***/ }), @@ -11383,83 +11357,83 @@ module.exports = new Type('tag:yaml.org,2002:str', { "use strict"; -var Type = __nccwpck_require__(6073); - -var YAML_DATE_REGEXP = new RegExp( - '^([0-9][0-9][0-9][0-9])' + // [1] year - '-([0-9][0-9])' + // [2] month - '-([0-9][0-9])$'); // [3] day - -var YAML_TIMESTAMP_REGEXP = new RegExp( - '^([0-9][0-9][0-9][0-9])' + // [1] year - '-([0-9][0-9]?)' + // [2] month - '-([0-9][0-9]?)' + // [3] day - '(?:[Tt]|[ \\t]+)' + // ... - '([0-9][0-9]?)' + // [4] hour - ':([0-9][0-9])' + // [5] minute - ':([0-9][0-9])' + // [6] second - '(?:\\.([0-9]*))?' + // [7] fraction - '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour - '(?::([0-9][0-9]))?))?$'); // [11] tz_minute - -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; +const Type = __nccwpck_require__(6073) + +const YAML_DATE_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9])' + // [2] month + '-([0-9][0-9])$') // [3] day + +const YAML_TIMESTAMP_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9]?)' + // [2] month + '-([0-9][0-9]?)' + // [3] day + '(?:[Tt]|[ \\t]+)' + // ... + '([0-9][0-9]?)' + // [4] hour + ':([0-9][0-9])' + // [5] minute + ':([0-9][0-9])' + // [6] second + '(?:\\.([0-9]*))?' + // [7] fraction + '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tzHour + '(?::([0-9][0-9]))?))?$') // [11] tzMinute + +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; +function constructYamlTimestamp (data) { + let fraction = 0 + let delta = null - match = YAML_DATE_REGEXP.exec(data); - if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); + let match = YAML_DATE_REGEXP.exec(data) + if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data) - if (match === null) throw new Error('Date resolve error'); + if (match === null) throw new Error('Date resolve error') // match: [1] year [2] month [3] day - year = +(match[1]); - month = +(match[2]) - 1; // JS month starts with 0 - day = +(match[3]); + const year = +(match[1]) + const month = +(match[2]) - 1 // JS month starts with 0 + const day = +(match[3]) if (!match[4]) { // no hour - return new Date(Date.UTC(year, month, day)); + return new Date(Date.UTC(year, month, day)) } // match: [4] hour [5] minute [6] second [7] fraction - hour = +(match[4]); - minute = +(match[5]); - second = +(match[6]); + const hour = +(match[4]) + const minute = +(match[5]) + const second = +(match[6]) if (match[7]) { - fraction = match[7].slice(0, 3); + fraction = match[7].slice(0, 3) while (fraction.length < 3) { // milli-seconds - fraction += '0'; + fraction += '0' } - fraction = +fraction; + fraction = +fraction } - // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute + // match: [8] tz [9] tz_sign [10] tzHour [11] tzMinute if (match[9]) { - tz_hour = +(match[10]); - tz_minute = +(match[11] || 0); - delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds - if (match[9] === '-') delta = -delta; + const tzHour = +(match[10]) + const tzMinute = +(match[11] || 0) + delta = (tzHour * 60 + tzMinute) * 60000 // delta in mili-seconds + if (match[9] === '-') delta = -delta } - date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + const date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)) - if (delta) date.setTime(date.getTime() - delta); + if (delta) date.setTime(date.getTime() - delta) - return date; + return date } -function representYamlTimestamp(object /*, style*/) { - return object.toISOString(); +function representYamlTimestamp (object /*, style */) { + return object.toISOString() } module.exports = new Type('tag:yaml.org,2002:timestamp', { @@ -11468,7 +11442,7 @@ module.exports = new Type('tag:yaml.org,2002:timestamp', { construct: constructYamlTimestamp, instanceOf: Date, represent: representYamlTimestamp -}); +}) /***/ }), diff --git a/package-lock.json b/package-lock.json index c17d107..9522dad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "@actions/github": "^6.0.1", "@actions/io": "^1.1.3", "glob": "^11.1.0", - "js-yaml": "^4.1.1", + "js-yaml": "^4.2.0", "minimatch": "^10.2.3" }, "devDependencies": { @@ -1692,9 +1692,19 @@ } }, "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", + "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" diff --git a/package.json b/package.json index eda1a74..1f48f3e 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "@actions/github": "^6.0.1", "@actions/io": "^1.1.3", "glob": "^11.1.0", - "js-yaml": "^4.1.1", + "js-yaml": "^4.2.0", "minimatch": "^10.2.3" }, "devDependencies": {