X-Git-Url: https://git.josue.xyz/?p=dotfiles%2F.git;a=blobdiff_plain;f=.config%2Fcoc%2Fextensions%2Fnode_modules%2Fcoc-prettier%2Fnode_modules%2Fprettier%2Fthird-party.js;h=5f1ac8ea67270f4979af1fd78a9af246bc0c6af2;hp=61f98aa3347578a4d2826688a8363624de5a76c9;hb=4d07c77cf4d78cab8639e13ddc3c22495e585b0b;hpb=b3950616b54221c40a7dab9099bda675007e5b6e diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/prettier/third-party.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/prettier/third-party.js index 61f98aa3..5f1ac8ea 100755 --- a/.config/coc/extensions/node_modules/coc-prettier/node_modules/prettier/third-party.js +++ b/.config/coc/extensions/node_modules/coc-prettier/node_modules/prettier/third-party.js @@ -1,26 +1,31 @@ 'use strict'; -Object.defineProperty(exports, '__esModule', { value: true }); - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var os = _interopDefault(require('os')); -var path = _interopDefault(require('path')); -var module$1 = _interopDefault(require('module')); -var fs = _interopDefault(require('fs')); -var util = _interopDefault(require('util')); -var stream = _interopDefault(require('stream')); - -function unwrapExports (x) { - return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; -} - -function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; +var os = require('os'); +var path = require('path'); +var Module = require('module'); +var fs = require('fs'); +var util = require('util'); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +var os__default = /*#__PURE__*/_interopDefaultLegacy(os); +var path__default = /*#__PURE__*/_interopDefaultLegacy(path); +var Module__default = /*#__PURE__*/_interopDefaultLegacy(Module); +var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); +var util__default = /*#__PURE__*/_interopDefaultLegacy(util); + +function createCommonjsModule(fn, basedir, module) { + return module = { + path: basedir, + exports: {}, + require: function (path, base) { + return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); + } + }, fn(module, module.exports), module.exports; } -function getCjsExportFromNamespace (n) { - return n && n['default'] || n; +function commonjsRequire () { + throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); } const resolveFrom = (fromDir, moduleId, silent) => { @@ -33,10 +38,10 @@ const resolveFrom = (fromDir, moduleId, silent) => { } try { - fromDir = fs.realpathSync(fromDir); + fromDir = fs__default['default'].realpathSync(fromDir); } catch (err) { if (err.code === 'ENOENT') { - fromDir = path.resolve(fromDir); + fromDir = path__default['default'].resolve(fromDir); } else if (silent) { return null; } else { @@ -44,12 +49,12 @@ const resolveFrom = (fromDir, moduleId, silent) => { } } - const fromFile = path.join(fromDir, 'noop.js'); + const fromFile = path__default['default'].join(fromDir, 'noop.js'); - const resolveFileName = () => module$1._resolveFilename(moduleId, { + const resolveFileName = () => Module__default['default']._resolveFilename(moduleId, { id: fromFile, filename: fromFile, - paths: module$1._nodeModulePaths(fromDir) + paths: Module__default['default']._nodeModulePaths(fromDir) }); if (silent) { @@ -74,7 +79,7 @@ var importFresh = moduleId => { } const parentPath = __filename; - const filePath = resolveFrom_1(path.dirname(parentPath), moduleId); + const filePath = resolveFrom_1(path__default['default'].dirname(parentPath), moduleId); const oldModule = eval('require').cache[filePath]; // Delete itself from module parent if (oldModule && oldModule.parent) { @@ -196,7 +201,7 @@ var errorEx = function errorEx(name, properties) { Object.setPrototypeOf(errorExError.prototype, Error.prototype); Object.setPrototypeOf(errorExError, Error); } else { - util.inherits(errorExError, Error); + util__default['default'].inherits(errorExError, Error); } return errorExError; @@ -261,86 +266,87 @@ function parseJson(txt, reviver, context) { } } -var LF = '\n'; -var CR = '\r'; +var dist = createCommonjsModule(function (module, exports) { -var LinesAndColumns = function () { - function LinesAndColumns(string) { - this.string = string; - var offsets = [0]; - - for (var offset = 0; offset < string.length;) { - switch (string[offset]) { - case LF: - offset += LF.length; - offsets.push(offset); - break; + var LF = '\n'; + var CR = '\r'; - case CR: - offset += CR.length; + var LinesAndColumns = function () { + function LinesAndColumns(string) { + this.string = string; + var offsets = [0]; - if (string[offset] === LF) { + for (var offset = 0; offset < string.length;) { + switch (string[offset]) { + case LF: offset += LF.length; - } + offsets.push(offset); + break; - offsets.push(offset); - break; + case CR: + offset += CR.length; - default: - offset++; - break; - } - } + if (string[offset] === LF) { + offset += LF.length; + } - this.offsets = offsets; - } + offsets.push(offset); + break; - LinesAndColumns.prototype.locationForIndex = function (index) { - if (index < 0 || index > this.string.length) { - return null; + default: + offset++; + break; + } + } + + this.offsets = offsets; } - var line = 0; - var offsets = this.offsets; + LinesAndColumns.prototype.locationForIndex = function (index) { + if (index < 0 || index > this.string.length) { + return null; + } - while (offsets[line + 1] <= index) { - line++; - } + var line = 0; + var offsets = this.offsets; - var column = index - offsets[line]; - return { - line: line, - column: column + while (offsets[line + 1] <= index) { + line++; + } + + var column = index - offsets[line]; + return { + line: line, + column: column + }; }; - }; - LinesAndColumns.prototype.indexForLocation = function (location) { - var line = location.line, - column = location.column; + LinesAndColumns.prototype.indexForLocation = function (location) { + var line = location.line, + column = location.column; - if (line < 0 || line >= this.offsets.length) { - return null; - } + if (line < 0 || line >= this.offsets.length) { + return null; + } - if (column < 0 || column > this.lengthOfLine(line)) { - return null; - } + if (column < 0 || column > this.lengthOfLine(line)) { + return null; + } - return this.offsets[line] + column; - }; + return this.offsets[line] + column; + }; - LinesAndColumns.prototype.lengthOfLine = function (line) { - var offset = this.offsets[line]; - var nextOffset = line === this.offsets.length - 1 ? this.string.length : this.offsets[line + 1]; - return nextOffset - offset; - }; + LinesAndColumns.prototype.lengthOfLine = function (line) { + var offset = this.offsets[line]; + var nextOffset = line === this.offsets.length - 1 ? this.string.length : this.offsets[line + 1]; + return nextOffset - offset; + }; - return LinesAndColumns; -}(); + return LinesAndColumns; + }(); -var dist = /*#__PURE__*/Object.freeze({ - __proto__: null, - 'default': LinesAndColumns + exports.__esModule = true; + exports["default"] = LinesAndColumns; }); var jsTokens = createCommonjsModule(function (module, exports) { @@ -363,551 +369,180 @@ var jsTokens = createCommonjsModule(function (module, exports) { return token; }; }); -unwrapExports(jsTokens); -var jsTokens_1 = jsTokens.matchToToken; - -var ast = createCommonjsModule(function (module) { - /* - Copyright (C) 2013 Yusuke Suzuki - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - (function () { - - function isExpression(node) { - if (node == null) { - return false; - } - switch (node.type) { - case 'ArrayExpression': - case 'AssignmentExpression': - case 'BinaryExpression': - case 'CallExpression': - case 'ConditionalExpression': - case 'FunctionExpression': - case 'Identifier': - case 'Literal': - case 'LogicalExpression': - case 'MemberExpression': - case 'NewExpression': - case 'ObjectExpression': - case 'SequenceExpression': - case 'ThisExpression': - case 'UnaryExpression': - case 'UpdateExpression': - return true; - } +var identifier = createCommonjsModule(function (module, exports) { - return false; + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.isIdentifierStart = isIdentifierStart; + exports.isIdentifierChar = isIdentifierChar; + exports.isIdentifierName = isIdentifierName; + let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08c7\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\u9ffc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7ca\ua7f5-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"; + let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d3-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf\u1ac0\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1df9\u1dfb-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f"; + const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]"); + const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]"); + nonASCIIidentifierStartChars = nonASCIIidentifierChars = null; + const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 157, 310, 10, 21, 11, 7, 153, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 107, 20, 28, 22, 13, 52, 76, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 230, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 35, 56, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 190, 0, 80, 921, 103, 110, 18, 195, 2749, 1070, 4050, 582, 8634, 568, 8, 30, 114, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8952, 286, 50, 2, 18, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 2357, 44, 11, 6, 17, 0, 370, 43, 1301, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42717, 35, 4148, 12, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938]; + const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 154, 10, 176, 2, 54, 14, 32, 9, 16, 3, 46, 10, 54, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 19306, 9, 135, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 5319, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 262, 6, 10, 9, 419, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239]; + + function isInAstralSet(code, set) { + let pos = 0x10000; + + for (let i = 0, length = set.length; i < length; i += 2) { + pos += set[i]; + if (pos > code) return false; + pos += set[i + 1]; + if (pos >= code) return true; } - function isIterationStatement(node) { - if (node == null) { - return false; - } + return false; + } - switch (node.type) { - case 'DoWhileStatement': - case 'ForInStatement': - case 'ForStatement': - case 'WhileStatement': - return true; - } + function isIdentifierStart(code) { + if (code < 65) return code === 36; + if (code <= 90) return true; + if (code < 97) return code === 95; + if (code <= 122) return true; - return false; + if (code <= 0xffff) { + return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)); } - function isStatement(node) { - if (node == null) { - return false; - } - - switch (node.type) { - case 'BlockStatement': - case 'BreakStatement': - case 'ContinueStatement': - case 'DebuggerStatement': - case 'DoWhileStatement': - case 'EmptyStatement': - case 'ExpressionStatement': - case 'ForInStatement': - case 'ForStatement': - case 'IfStatement': - case 'LabeledStatement': - case 'ReturnStatement': - case 'SwitchStatement': - case 'ThrowStatement': - case 'TryStatement': - case 'VariableDeclaration': - case 'WhileStatement': - case 'WithStatement': - return true; - } + return isInAstralSet(code, astralIdentifierStartCodes); + } - return false; - } + function isIdentifierChar(code) { + if (code < 48) return code === 36; + if (code < 58) return true; + if (code < 65) return false; + if (code <= 90) return true; + if (code < 97) return code === 95; + if (code <= 122) return true; - function isSourceElement(node) { - return isStatement(node) || node != null && node.type === 'FunctionDeclaration'; + if (code <= 0xffff) { + return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)); } - function trailingStatement(node) { - switch (node.type) { - case 'IfStatement': - if (node.alternate != null) { - return node.alternate; - } - - return node.consequent; - - case 'LabeledStatement': - case 'ForStatement': - case 'ForInStatement': - case 'WhileStatement': - case 'WithStatement': - return node.body; - } + return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes); + } - return null; - } + function isIdentifierName(name) { + let isFirst = true; - function isProblematicIfStatement(node) { - var current; + for (let _i = 0, _Array$from = Array.from(name); _i < _Array$from.length; _i++) { + const char = _Array$from[_i]; + const cp = char.codePointAt(0); - if (node.type !== 'IfStatement') { - return false; - } + if (isFirst) { + if (!isIdentifierStart(cp)) { + return false; + } - if (node.alternate == null) { + isFirst = false; + } else if (!isIdentifierChar(cp)) { return false; } - - current = node.consequent; - - do { - if (current.type === 'IfStatement') { - if (current.alternate == null) { - return true; - } - } - - current = trailingStatement(current); - } while (current); - - return false; } - module.exports = { - isExpression: isExpression, - isStatement: isStatement, - isIterationStatement: isIterationStatement, - isSourceElement: isSourceElement, - isProblematicIfStatement: isProblematicIfStatement, - trailingStatement: trailingStatement - }; - })(); - /* vim: set sw=4 ts=4 et tw=80 : */ - + return !isFirst; + } }); -var ast_1 = ast.isExpression; -var ast_2 = ast.isStatement; -var ast_3 = ast.isIterationStatement; -var ast_4 = ast.isSourceElement; -var ast_5 = ast.isProblematicIfStatement; -var ast_6 = ast.trailingStatement; - -var code = createCommonjsModule(function (module) { - /* - Copyright (C) 2013-2014 Yusuke Suzuki - Copyright (C) 2014 Ivan Nikulin - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - (function () { - - var ES6Regex, ES5Regex, NON_ASCII_WHITESPACES, IDENTIFIER_START, IDENTIFIER_PART, ch; // See `tools/generate-identifier-regex.js`. - - ES5Regex = { - // ECMAScript 5.1/Unicode v9.0.0 NonAsciiIdentifierStart: - NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/, - // ECMAScript 5.1/Unicode v9.0.0 NonAsciiIdentifierPart: - NonAsciiIdentifierPart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/ - }; - ES6Regex = { - // ECMAScript 6/Unicode v9.0.0 NonAsciiIdentifierStart: - NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/, - // ECMAScript 6/Unicode v9.0.0 NonAsciiIdentifierPart: - NonAsciiIdentifierPart: /[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/ - }; - - function isDecimalDigit(ch) { - return 0x30 <= ch && ch <= 0x39; // 0..9 - } - - function isHexDigit(ch) { - return 0x30 <= ch && ch <= 0x39 || // 0..9 - 0x61 <= ch && ch <= 0x66 || // a..f - 0x41 <= ch && ch <= 0x46; // A..F - } - - function isOctalDigit(ch) { - return ch >= 0x30 && ch <= 0x37; // 0..7 - } // 7.2 White Space - - - NON_ASCII_WHITESPACES = [0x1680, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF]; - - function isWhiteSpace(ch) { - return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 || ch >= 0x1680 && NON_ASCII_WHITESPACES.indexOf(ch) >= 0; - } // 7.3 Line Terminators +var keyword = createCommonjsModule(function (module, exports) { - function isLineTerminator(ch) { - return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029; - } // 7.6 Identifier Names and Identifiers - - - function fromCodePoint(cp) { - if (cp <= 0xFFFF) { - return String.fromCharCode(cp); - } - - var cu1 = String.fromCharCode(Math.floor((cp - 0x10000) / 0x400) + 0xD800); - var cu2 = String.fromCharCode((cp - 0x10000) % 0x400 + 0xDC00); - return cu1 + cu2; - } - - IDENTIFIER_START = new Array(0x80); - - for (ch = 0; ch < 0x80; ++ch) { - IDENTIFIER_START[ch] = ch >= 0x61 && ch <= 0x7A || // a..z - ch >= 0x41 && ch <= 0x5A || // A..Z - ch === 0x24 || ch === 0x5F; // $ (dollar) and _ (underscore) - } - - IDENTIFIER_PART = new Array(0x80); - - for (ch = 0; ch < 0x80; ++ch) { - IDENTIFIER_PART[ch] = ch >= 0x61 && ch <= 0x7A || // a..z - ch >= 0x41 && ch <= 0x5A || // A..Z - ch >= 0x30 && ch <= 0x39 || // 0..9 - ch === 0x24 || ch === 0x5F; // $ (dollar) and _ (underscore) - } - - function isIdentifierStartES5(ch) { - return ch < 0x80 ? IDENTIFIER_START[ch] : ES5Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch)); - } + Object.defineProperty(exports, "__esModule", { + value: true + }); + exports.isReservedWord = isReservedWord; + exports.isStrictReservedWord = isStrictReservedWord; + exports.isStrictBindOnlyReservedWord = isStrictBindOnlyReservedWord; + exports.isStrictBindReservedWord = isStrictBindReservedWord; + exports.isKeyword = isKeyword; + const reservedWords = { + keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"], + strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"], + strictBind: ["eval", "arguments"] + }; + const keywords = new Set(reservedWords.keyword); + const reservedWordsStrictSet = new Set(reservedWords.strict); + const reservedWordsStrictBindSet = new Set(reservedWords.strictBind); - function isIdentifierPartES5(ch) { - return ch < 0x80 ? IDENTIFIER_PART[ch] : ES5Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch)); - } + function isReservedWord(word, inModule) { + return inModule && word === "await" || word === "enum"; + } - function isIdentifierStartES6(ch) { - return ch < 0x80 ? IDENTIFIER_START[ch] : ES6Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch)); - } + function isStrictReservedWord(word, inModule) { + return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word); + } - function isIdentifierPartES6(ch) { - return ch < 0x80 ? IDENTIFIER_PART[ch] : ES6Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch)); - } + function isStrictBindOnlyReservedWord(word) { + return reservedWordsStrictBindSet.has(word); + } - module.exports = { - isDecimalDigit: isDecimalDigit, - isHexDigit: isHexDigit, - isOctalDigit: isOctalDigit, - isWhiteSpace: isWhiteSpace, - isLineTerminator: isLineTerminator, - isIdentifierStartES5: isIdentifierStartES5, - isIdentifierPartES5: isIdentifierPartES5, - isIdentifierStartES6: isIdentifierStartES6, - isIdentifierPartES6: isIdentifierPartES6 - }; - })(); - /* vim: set sw=4 ts=4 et tw=80 : */ + function isStrictBindReservedWord(word, inModule) { + return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word); + } + function isKeyword(word) { + return keywords.has(word); + } }); -var code_1 = code.isDecimalDigit; -var code_2 = code.isHexDigit; -var code_3 = code.isOctalDigit; -var code_4 = code.isWhiteSpace; -var code_5 = code.isLineTerminator; -var code_6 = code.isIdentifierStartES5; -var code_7 = code.isIdentifierPartES5; -var code_8 = code.isIdentifierStartES6; -var code_9 = code.isIdentifierPartES6; - -var keyword = createCommonjsModule(function (module) { - /* - Copyright (C) 2013 Yusuke Suzuki - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - (function () { - - var code$1 = code; - - function isStrictModeReservedWordES6(id) { - switch (id) { - case 'implements': - case 'interface': - case 'package': - case 'private': - case 'protected': - case 'public': - case 'static': - case 'let': - return true; - - default: - return false; - } - } - - function isKeywordES5(id, strict) { - // yield should not be treated as keyword under non-strict mode. - if (!strict && id === 'yield') { - return false; - } - - return isKeywordES6(id, strict); - } - - function isKeywordES6(id, strict) { - if (strict && isStrictModeReservedWordES6(id)) { - return true; - } - - switch (id.length) { - case 2: - return id === 'if' || id === 'in' || id === 'do'; - - case 3: - return id === 'var' || id === 'for' || id === 'new' || id === 'try'; - case 4: - return id === 'this' || id === 'else' || id === 'case' || id === 'void' || id === 'with' || id === 'enum'; - - case 5: - return id === 'while' || id === 'break' || id === 'catch' || id === 'throw' || id === 'const' || id === 'yield' || id === 'class' || id === 'super'; - - case 6: - return id === 'return' || id === 'typeof' || id === 'delete' || id === 'switch' || id === 'export' || id === 'import'; - - case 7: - return id === 'default' || id === 'finally' || id === 'extends'; - - case 8: - return id === 'function' || id === 'continue' || id === 'debugger'; - - case 10: - return id === 'instanceof'; - - default: - return false; - } - } +var lib = createCommonjsModule(function (module, exports) { - function isReservedWordES5(id, strict) { - return id === 'null' || id === 'true' || id === 'false' || isKeywordES5(id, strict); + Object.defineProperty(exports, "__esModule", { + value: true + }); + Object.defineProperty(exports, "isIdentifierName", { + enumerable: true, + get: function () { + return identifier.isIdentifierName; } - - function isReservedWordES6(id, strict) { - return id === 'null' || id === 'true' || id === 'false' || isKeywordES6(id, strict); + }); + Object.defineProperty(exports, "isIdentifierChar", { + enumerable: true, + get: function () { + return identifier.isIdentifierChar; } - - function isRestrictedWord(id) { - return id === 'eval' || id === 'arguments'; + }); + Object.defineProperty(exports, "isIdentifierStart", { + enumerable: true, + get: function () { + return identifier.isIdentifierStart; } - - function isIdentifierNameES5(id) { - var i, iz, ch; - - if (id.length === 0) { - return false; - } - - ch = id.charCodeAt(0); - - if (!code$1.isIdentifierStartES5(ch)) { - return false; - } - - for (i = 1, iz = id.length; i < iz; ++i) { - ch = id.charCodeAt(i); - - if (!code$1.isIdentifierPartES5(ch)) { - return false; - } - } - - return true; + }); + Object.defineProperty(exports, "isReservedWord", { + enumerable: true, + get: function () { + return keyword.isReservedWord; } - - function decodeUtf16(lead, trail) { - return (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; + }); + Object.defineProperty(exports, "isStrictBindOnlyReservedWord", { + enumerable: true, + get: function () { + return keyword.isStrictBindOnlyReservedWord; } - - function isIdentifierNameES6(id) { - var i, iz, ch, lowCh, check; - - if (id.length === 0) { - return false; - } - - check = code$1.isIdentifierStartES6; - - for (i = 0, iz = id.length; i < iz; ++i) { - ch = id.charCodeAt(i); - - if (0xD800 <= ch && ch <= 0xDBFF) { - ++i; - - if (i >= iz) { - return false; - } - - lowCh = id.charCodeAt(i); - - if (!(0xDC00 <= lowCh && lowCh <= 0xDFFF)) { - return false; - } - - ch = decodeUtf16(ch, lowCh); - } - - if (!check(ch)) { - return false; - } - - check = code$1.isIdentifierPartES6; - } - - return true; + }); + Object.defineProperty(exports, "isStrictBindReservedWord", { + enumerable: true, + get: function () { + return keyword.isStrictBindReservedWord; } - - function isIdentifierES5(id, strict) { - return isIdentifierNameES5(id) && !isReservedWordES5(id, strict); + }); + Object.defineProperty(exports, "isStrictReservedWord", { + enumerable: true, + get: function () { + return keyword.isStrictReservedWord; } - - function isIdentifierES6(id, strict) { - return isIdentifierNameES6(id) && !isReservedWordES6(id, strict); + }); + Object.defineProperty(exports, "isKeyword", { + enumerable: true, + get: function () { + return keyword.isKeyword; } - - module.exports = { - isKeywordES5: isKeywordES5, - isKeywordES6: isKeywordES6, - isReservedWordES5: isReservedWordES5, - isReservedWordES6: isReservedWordES6, - isRestrictedWord: isRestrictedWord, - isIdentifierNameES5: isIdentifierNameES5, - isIdentifierNameES6: isIdentifierNameES6, - isIdentifierES5: isIdentifierES5, - isIdentifierES6: isIdentifierES6 - }; - })(); - /* vim: set sw=4 ts=4 et tw=80 : */ - -}); -var keyword_1 = keyword.isKeywordES5; -var keyword_2 = keyword.isKeywordES6; -var keyword_3 = keyword.isReservedWordES5; -var keyword_4 = keyword.isReservedWordES6; -var keyword_5 = keyword.isRestrictedWord; -var keyword_6 = keyword.isIdentifierNameES5; -var keyword_7 = keyword.isIdentifierNameES6; -var keyword_8 = keyword.isIdentifierES5; -var keyword_9 = keyword.isIdentifierES6; - -var utils = createCommonjsModule(function (module, exports) { - /* - Copyright (C) 2013 Yusuke Suzuki - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - (function () { - - exports.ast = ast; - exports.code = code; - exports.keyword = keyword; - })(); - /* vim: set sw=4 ts=4 et tw=80 : */ - + }); }); -var utils_1 = utils.ast; -var utils_2 = utils.code; -var utils_3 = utils.keyword; var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; @@ -1966,21 +1601,6 @@ var conversions = createCommonjsModule(function (module) { return [val / 255 * 100]; }; }); -var conversions_1 = conversions.rgb; -var conversions_2 = conversions.hsl; -var conversions_3 = conversions.hsv; -var conversions_4 = conversions.hwb; -var conversions_5 = conversions.cmyk; -var conversions_6 = conversions.xyz; -var conversions_7 = conversions.lab; -var conversions_8 = conversions.lch; -var conversions_9 = conversions.hex; -var conversions_10 = conversions.keyword; -var conversions_11 = conversions.ansi16; -var conversions_12 = conversions.ansi256; -var conversions_13 = conversions.hcg; -var conversions_14 = conversions.apple; -var conversions_15 = conversions.gray; /* this function routes a model to all other models. @@ -2368,7 +1988,7 @@ function supportsColor(stream) { // release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows // release that supports 256 colors. Windows 10 build 14931 is the first release // that supports 16m/TrueColor. - const osRelease = os.release().split('.'); + const osRelease = os__default['default'].release().split('.'); if (Number(process.versions.node.split('.')[0]) >= 8 && Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) { return Number(osRelease[2]) >= 14931 ? 3 : 2; @@ -2776,9 +2396,8 @@ var chalk = createCommonjsModule(function (module) { module.exports.supportsColor = stdoutColor; module.exports.default = module.exports; // For TypeScript }); -var chalk_1 = chalk.supportsColor; -var lib = createCommonjsModule(function (module, exports) { +var lib$1 = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true @@ -2789,8 +2408,6 @@ var lib = createCommonjsModule(function (module, exports) { var _jsTokens = _interopRequireWildcard(jsTokens); - var _esutils = _interopRequireDefault(utils); - var _chalk = _interopRequireDefault(chalk); function _interopRequireDefault(obj) { @@ -2874,7 +2491,7 @@ var lib = createCommonjsModule(function (module, exports) { const token = (0, _jsTokens.matchToToken)(match); if (token.type === "name") { - if (_esutils.default.keyword.isReservedWordES6(token.value)) { + if ((0, lib.isKeyword)(token.value) || (0, lib.isReservedWord)(token.value)) { return "keyword"; } @@ -2938,11 +2555,8 @@ var lib = createCommonjsModule(function (module, exports) { } } }); -unwrapExports(lib); -var lib_1 = lib.shouldHighlight; -var lib_2 = lib.getChalk; -var lib$1 = createCommonjsModule(function (module, exports) { +var lib$2 = createCommonjsModule(function (module, exports) { Object.defineProperty(exports, "__esModule", { value: true @@ -2950,7 +2564,7 @@ var lib$1 = createCommonjsModule(function (module, exports) { exports.codeFrameColumns = codeFrameColumns; exports.default = _default; - var _highlight = _interopRequireWildcard(lib); + var _highlight = _interopRequireWildcard(lib$1); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; @@ -3021,7 +2635,7 @@ var lib$1 = createCommonjsModule(function (module, exports) { column: 0, line: -1 }, loc.start); - const endLoc = Object.assign({}, startLoc, {}, loc.end); + const endLoc = Object.assign({}, startLoc, loc.end); const { linesAbove = 2, linesBelow = 3 @@ -3158,17 +2772,13 @@ var lib$1 = createCommonjsModule(function (module, exports) { return codeFrameColumns(rawLines, location, opts); } }); -unwrapExports(lib$1); -var lib_1$1 = lib$1.codeFrameColumns; - -var require$$0 = getCjsExportFromNamespace(dist); const { - default: LinesAndColumns$1 -} = require$$0; + default: LinesAndColumns +} = dist; const { codeFrameColumns -} = lib$1; +} = lib$2; const JSONError = errorEx_1('JSONError', { fileName: errorEx_1.append('in %s'), codeFrame: errorEx_1.append('\n\n%s\n') @@ -3197,7 +2807,7 @@ var parseJson$1 = (string, reviver, filename) => { } if (indexMatch && indexMatch.length > 0) { - const lines = new LinesAndColumns$1(string); + const lines = new LinesAndColumns(string); const index = Number(indexMatch[1]); const location = lines.locationForIndex(index); const codeFrame = codeFrameColumns(string, { @@ -3215,7769 +2825,6572 @@ var parseJson$1 = (string, reviver, filename) => { } }; -var constants = createCommonjsModule(function (module, exports) { +const Char = { + ANCHOR: '&', + COMMENT: '#', + TAG: '!', + DIRECTIVES_END: '-', + DOCUMENT_END: '.' +}; +const Type = { + ALIAS: 'ALIAS', + BLANK_LINE: 'BLANK_LINE', + BLOCK_FOLDED: 'BLOCK_FOLDED', + BLOCK_LITERAL: 'BLOCK_LITERAL', + COMMENT: 'COMMENT', + DIRECTIVE: 'DIRECTIVE', + DOCUMENT: 'DOCUMENT', + FLOW_MAP: 'FLOW_MAP', + FLOW_SEQ: 'FLOW_SEQ', + MAP: 'MAP', + MAP_KEY: 'MAP_KEY', + MAP_VALUE: 'MAP_VALUE', + PLAIN: 'PLAIN', + QUOTE_DOUBLE: 'QUOTE_DOUBLE', + QUOTE_SINGLE: 'QUOTE_SINGLE', + SEQ: 'SEQ', + SEQ_ITEM: 'SEQ_ITEM' +}; +const defaultTagPrefix = 'tag:yaml.org,2002:'; +const defaultTags = { + MAP: 'tag:yaml.org,2002:map', + SEQ: 'tag:yaml.org,2002:seq', + STR: 'tag:yaml.org,2002:str' +}; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.Type = exports.Char = void 0; - const Char = { - ANCHOR: '&', - COMMENT: '#', - TAG: '!', - DIRECTIVES_END: '-', - DOCUMENT_END: '.' - }; - exports.Char = Char; - const Type = { - ALIAS: 'ALIAS', - BLANK_LINE: 'BLANK_LINE', - BLOCK_FOLDED: 'BLOCK_FOLDED', - BLOCK_LITERAL: 'BLOCK_LITERAL', - COMMENT: 'COMMENT', - DIRECTIVE: 'DIRECTIVE', - DOCUMENT: 'DOCUMENT', - FLOW_MAP: 'FLOW_MAP', - FLOW_SEQ: 'FLOW_SEQ', - MAP: 'MAP', - MAP_KEY: 'MAP_KEY', - MAP_VALUE: 'MAP_VALUE', - PLAIN: 'PLAIN', - QUOTE_DOUBLE: 'QUOTE_DOUBLE', - QUOTE_SINGLE: 'QUOTE_SINGLE', - SEQ: 'SEQ', - SEQ_ITEM: 'SEQ_ITEM' - }; - exports.Type = Type; -}); -unwrapExports(constants); -var constants_1 = constants.Type; -var constants_2 = constants.Char; +function findLineStarts(src) { + const ls = [0]; + let offset = src.indexOf('\n'); -var sourceUtils = createCommonjsModule(function (module, exports) { + while (offset !== -1) { + offset += 1; + ls.push(offset); + offset = src.indexOf('\n', offset); + } - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.getLinePos = getLinePos; - exports.getLine = getLine; - exports.getPrettyContext = getPrettyContext; + return ls; +} - function findLineStarts(src) { - const ls = [0]; - let offset = src.indexOf('\n'); +function getSrcInfo(cst) { + let lineStarts, src; - while (offset !== -1) { - offset += 1; - ls.push(offset); - offset = src.indexOf('\n', offset); - } + if (typeof cst === 'string') { + lineStarts = findLineStarts(cst); + src = cst; + } else { + if (Array.isArray(cst)) cst = cst[0]; - return ls; + if (cst && cst.context) { + if (!cst.lineStarts) cst.lineStarts = findLineStarts(cst.context.src); + lineStarts = cst.lineStarts; + src = cst.context.src; + } } - function getSrcInfo(cst) { - let lineStarts, src; + return { + lineStarts, + src + }; +} +/** + * @typedef {Object} LinePos - One-indexed position in the source + * @property {number} line + * @property {number} col + */ + +/** + * Determine the line/col position matching a character offset. + * + * Accepts a source string or a CST document as the second parameter. With + * the latter, starting indices for lines are cached in the document as + * `lineStarts: number[]`. + * + * Returns a one-indexed `{ line, col }` location if found, or + * `undefined` otherwise. + * + * @param {number} offset + * @param {string|Document|Document[]} cst + * @returns {?LinePos} + */ + + +function getLinePos(offset, cst) { + if (typeof offset !== 'number' || offset < 0) return null; + const { + lineStarts, + src + } = getSrcInfo(cst); + if (!lineStarts || !src || offset > src.length) return null; - if (typeof cst === 'string') { - lineStarts = findLineStarts(cst); - src = cst; - } else { - if (Array.isArray(cst)) cst = cst[0]; + for (let i = 0; i < lineStarts.length; ++i) { + const start = lineStarts[i]; - if (cst && cst.context) { - if (!cst.lineStarts) cst.lineStarts = findLineStarts(cst.context.src); - lineStarts = cst.lineStarts; - src = cst.context.src; - } + if (offset < start) { + return { + line: i, + col: offset - lineStarts[i - 1] + 1 + }; } - return { - lineStarts, - src + if (offset === start) return { + line: i + 1, + col: 1 }; } - /** - * @typedef {Object} LinePos - One-indexed position in the source - * @property {number} line - * @property {number} col - */ - /** - * Determine the line/col position matching a character offset. - * - * Accepts a source string or a CST document as the second parameter. With - * the latter, starting indices for lines are cached in the document as - * `lineStarts: number[]`. - * - * Returns a one-indexed `{ line, col }` location if found, or - * `undefined` otherwise. - * - * @param {number} offset - * @param {string|Document|Document[]} cst - * @returns {?LinePos} - */ + const line = lineStarts.length; + return { + line, + col: offset - lineStarts[line - 1] + 1 + }; +} +/** + * Get a specified line from the source. + * + * Accepts a source string or a CST document as the second parameter. With + * the latter, starting indices for lines are cached in the document as + * `lineStarts: number[]`. + * + * Returns the line as a string if found, or `null` otherwise. + * + * @param {number} line One-indexed line number + * @param {string|Document|Document[]} cst + * @returns {?string} + */ + + +function getLine(line, cst) { + const { + lineStarts, + src + } = getSrcInfo(cst); + if (!lineStarts || !(line >= 1) || line > lineStarts.length) return null; + const start = lineStarts[line - 1]; + let end = lineStarts[line]; // undefined for last line; that's ok for slice() + while (end && end > start && src[end - 1] === '\n') --end; - function getLinePos(offset, cst) { - if (typeof offset !== 'number' || offset < 0) return null; - const { - lineStarts, - src - } = getSrcInfo(cst); - if (!lineStarts || !src || offset > src.length) return null; + return src.slice(start, end); +} +/** + * Pretty-print the starting line from the source indicated by the range `pos` + * + * Trims output to `maxWidth` chars while keeping the starting column visible, + * using `…` at either end to indicate dropped characters. + * + * Returns a two-line string (or `null`) with `\n` as separator; the second line + * will hold appropriately indented `^` marks indicating the column range. + * + * @param {Object} pos + * @param {LinePos} pos.start + * @param {LinePos} [pos.end] + * @param {string|Document|Document[]*} cst + * @param {number} [maxWidth=80] + * @returns {?string} + */ + + +function getPrettyContext({ + start, + end +}, cst, maxWidth = 80) { + let src = getLine(start.line, cst); + if (!src) return null; + let { + col + } = start; - for (let i = 0; i < lineStarts.length; ++i) { - const start = lineStarts[i]; + if (src.length > maxWidth) { + if (col <= maxWidth - 10) { + src = src.substr(0, maxWidth - 1) + '…'; + } else { + const halfWidth = Math.round(maxWidth / 2); + if (src.length > col + halfWidth) src = src.substr(0, col + halfWidth - 1) + '…'; + col -= src.length - maxWidth; + src = '…' + src.substr(1 - maxWidth); + } + } - if (offset < start) { - return { - line: i, - col: offset - lineStarts[i - 1] + 1 - }; - } + let errLen = 1; + let errEnd = ''; - if (offset === start) return { - line: i + 1, - col: 1 - }; + if (end) { + if (end.line === start.line && col + (end.col - start.col) <= maxWidth + 1) { + errLen = end.col - start.col; + } else { + errLen = Math.min(src.length + 1, maxWidth) - col; + errEnd = '…'; } - - const line = lineStarts.length; - return { - line, - col: offset - lineStarts[line - 1] + 1 - }; } - /** - * Get a specified line from the source. - * - * Accepts a source string or a CST document as the second parameter. With - * the latter, starting indices for lines are cached in the document as - * `lineStarts: number[]`. - * - * Returns the line as a string if found, or `null` otherwise. - * - * @param {number} line One-indexed line number - * @param {string|Document|Document[]} cst - * @returns {?string} - */ + const offset = col > 1 ? ' '.repeat(col - 1) : ''; + const err = '^'.repeat(errLen); + return `${src}\n${offset}${err}${errEnd}`; +} - function getLine(line, cst) { - const { - lineStarts, - src - } = getSrcInfo(cst); - if (!lineStarts || !(line >= 1) || line > lineStarts.length) return null; - const start = lineStarts[line - 1]; - let end = lineStarts[line]; // undefined for last line; that's ok for slice() +class Range { + static copy(orig) { + return new Range(orig.start, orig.end); + } - while (end && end > start && src[end - 1] === '\n') --end; + constructor(start, end) { + this.start = start; + this.end = end || start; + } - return src.slice(start, end); + isEmpty() { + return typeof this.start !== 'number' || !this.end || this.end <= this.start; } /** - * Pretty-print the starting line from the source indicated by the range `pos` - * - * Trims output to `maxWidth` chars while keeping the starting column visible, - * using `…` at either end to indicate dropped characters. + * Set `origStart` and `origEnd` to point to the original source range for + * this node, which may differ due to dropped CR characters. * - * Returns a two-line string (or `null`) with `\n` as separator; the second line - * will hold appropriately indented `^` marks indicating the column range. - * - * @param {Object} pos - * @param {LinePos} pos.start - * @param {LinePos} [pos.end] - * @param {string|Document|Document[]*} cst - * @param {number} [maxWidth=80] - * @returns {?string} + * @param {number[]} cr - Positions of dropped CR characters + * @param {number} offset - Starting index of `cr` from the last call + * @returns {number} - The next offset, matching the one found for `origStart` */ - function getPrettyContext({ - start, - end - }, cst, maxWidth = 80) { - let src = getLine(start.line, cst); - if (!src) return null; - let { - col - } = start; - - if (src.length > maxWidth) { - if (col <= maxWidth - 10) { - src = src.substr(0, maxWidth - 1) + '…'; - } else { - const halfWidth = Math.round(maxWidth / 2); - if (src.length > col + halfWidth) src = src.substr(0, col + halfWidth - 1) + '…'; - col -= src.length - maxWidth; - src = '…' + src.substr(1 - maxWidth); - } - } - - let errLen = 1; - let errEnd = ''; + setOrigRange(cr, offset) { + const { + start, + end + } = this; - if (end) { - if (end.line === start.line && col + (end.col - start.col) <= maxWidth + 1) { - errLen = end.col - start.col; - } else { - errLen = Math.min(src.length + 1, maxWidth) - col; - errEnd = '…'; - } + if (cr.length === 0 || end <= cr[0]) { + this.origStart = start; + this.origEnd = end; + return offset; } - const offset = col > 1 ? ' '.repeat(col - 1) : ''; - const err = '^'.repeat(errLen); - return `${src}\n${offset}${err}${errEnd}`; - } -}); -unwrapExports(sourceUtils); -var sourceUtils_1 = sourceUtils.getLinePos; -var sourceUtils_2 = sourceUtils.getLine; -var sourceUtils_3 = sourceUtils.getPrettyContext; - -var Range_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; + let i = offset; - class Range { - static copy(orig) { - return new Range(orig.start, orig.end); + while (i < cr.length) { + if (cr[i] > start) break;else ++i; } - constructor(start, end) { - this.start = start; - this.end = end || start; - } + this.origStart = start + i; + const nextOffset = i; - isEmpty() { - return typeof this.start !== 'number' || !this.end || this.end <= this.start; + while (i < cr.length) { + // if end was at \n, it should now be at \r + if (cr[i] >= end) break;else ++i; } - /** - * Set `origStart` and `origEnd` to point to the original source range for - * this node, which may differ due to dropped CR characters. - * - * @param {number[]} cr - Positions of dropped CR characters - * @param {number} offset - Starting index of `cr` from the last call - * @returns {number} - The next offset, matching the one found for `origStart` - */ + this.origEnd = end + i; + return nextOffset; + } - setOrigRange(cr, offset) { - const { - start, - end - } = this; - - if (cr.length === 0 || end <= cr[0]) { - this.origStart = start; - this.origEnd = end; - return offset; - } +} +/** Root class of all nodes */ - let i = offset; - while (i < cr.length) { - if (cr[i] > start) break;else ++i; - } +class Node { + static addStringTerminator(src, offset, str) { + if (str[str.length - 1] === '\n') return str; + const next = Node.endOfWhiteSpace(src, offset); + return next >= src.length || src[next] === '\n' ? str + '\n' : str; + } // ^(---|...) - this.origStart = start + i; - const nextOffset = i; - while (i < cr.length) { - // if end was at \n, it should now be at \r - if (cr[i] >= end) break;else ++i; - } + static atDocumentBoundary(src, offset, sep) { + const ch0 = src[offset]; + if (!ch0) return true; + const prev = src[offset - 1]; + if (prev && prev !== '\n') return false; - this.origEnd = end + i; - return nextOffset; + if (sep) { + if (ch0 !== sep) return false; + } else { + if (ch0 !== Char.DIRECTIVES_END && ch0 !== Char.DOCUMENT_END) return false; } + const ch1 = src[offset + 1]; + const ch2 = src[offset + 2]; + if (ch1 !== ch0 || ch2 !== ch0) return false; + const ch3 = src[offset + 3]; + return !ch3 || ch3 === '\n' || ch3 === '\t' || ch3 === ' '; } - exports.default = Range; -}); -unwrapExports(Range_1); - -var Node_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; + static endOfIdentifier(src, offset) { + let ch = src[offset]; + const isVerbatim = ch === '<'; + const notOk = isVerbatim ? ['\n', '\t', ' ', '>'] : ['\n', '\t', ' ', '[', ']', '{', '}', ',']; - var _Range = _interopRequireDefault(Range_1); + while (ch && notOk.indexOf(ch) === -1) ch = src[offset += 1]; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + if (isVerbatim && ch === '>') offset += 1; + return offset; } - /** Root class of all nodes */ + static endOfIndent(src, offset) { + let ch = src[offset]; - class Node { - static addStringTerminator(src, offset, str) { - if (str[str.length - 1] === '\n') return str; - const next = Node.endOfWhiteSpace(src, offset); - return next >= src.length || src[next] === '\n' ? str + '\n' : str; - } // ^(---|...) + while (ch === ' ') ch = src[offset += 1]; + return offset; + } - static atDocumentBoundary(src, offset, sep) { - const ch0 = src[offset]; - if (!ch0) return true; - const prev = src[offset - 1]; - if (prev && prev !== '\n') return false; + static endOfLine(src, offset) { + let ch = src[offset]; - if (sep) { - if (ch0 !== sep) return false; - } else { - if (ch0 !== constants.Char.DIRECTIVES_END && ch0 !== constants.Char.DOCUMENT_END) return false; - } + while (ch && ch !== '\n') ch = src[offset += 1]; - const ch1 = src[offset + 1]; - const ch2 = src[offset + 2]; - if (ch1 !== ch0 || ch2 !== ch0) return false; - const ch3 = src[offset + 3]; - return !ch3 || ch3 === '\n' || ch3 === '\t' || ch3 === ' '; - } + return offset; + } - static endOfIdentifier(src, offset) { - let ch = src[offset]; - const isVerbatim = ch === '<'; - const notOk = isVerbatim ? ['\n', '\t', ' ', '>'] : ['\n', '\t', ' ', '[', ']', '{', '}', ',']; + static endOfWhiteSpace(src, offset) { + let ch = src[offset]; - while (ch && notOk.indexOf(ch) === -1) ch = src[offset += 1]; + while (ch === '\t' || ch === ' ') ch = src[offset += 1]; - if (isVerbatim && ch === '>') offset += 1; - return offset; - } + return offset; + } - static endOfIndent(src, offset) { - let ch = src[offset]; + static startOfLine(src, offset) { + let ch = src[offset - 1]; + if (ch === '\n') return offset; - while (ch === ' ') ch = src[offset += 1]; + while (ch && ch !== '\n') ch = src[offset -= 1]; - return offset; - } + return offset + 1; + } + /** + * End of indentation, or null if the line's indent level is not more + * than `indent` + * + * @param {string} src + * @param {number} indent + * @param {number} lineStart + * @returns {?number} + */ - static endOfLine(src, offset) { - let ch = src[offset]; - while (ch && ch !== '\n') ch = src[offset += 1]; + static endOfBlockIndent(src, indent, lineStart) { + const inEnd = Node.endOfIndent(src, lineStart); - return offset; + if (inEnd > lineStart + indent) { + return inEnd; + } else { + const wsEnd = Node.endOfWhiteSpace(src, inEnd); + const ch = src[wsEnd]; + if (!ch || ch === '\n') return wsEnd; } - static endOfWhiteSpace(src, offset) { - let ch = src[offset]; + return null; + } - while (ch === '\t' || ch === ' ') ch = src[offset += 1]; + static atBlank(src, offset, endAsBlank) { + const ch = src[offset]; + return ch === '\n' || ch === '\t' || ch === ' ' || endAsBlank && !ch; + } - return offset; - } + static nextNodeIsIndented(ch, indentDiff, indicatorAsIndent) { + if (!ch || indentDiff < 0) return false; + if (indentDiff > 0) return true; + return indicatorAsIndent && ch === '-'; + } // should be at line or string end, or at next non-whitespace char - static startOfLine(src, offset) { - let ch = src[offset - 1]; - if (ch === '\n') return offset; - while (ch && ch !== '\n') ch = src[offset -= 1]; + static normalizeOffset(src, offset) { + const ch = src[offset]; + return !ch ? offset : ch !== '\n' && src[offset - 1] === '\n' ? offset - 1 : Node.endOfWhiteSpace(src, offset); + } // fold single newline into space, multiple newlines to N - 1 newlines + // presumes src[offset] === '\n' - return offset + 1; - } - /** - * End of indentation, or null if the line's indent level is not more - * than `indent` - * - * @param {string} src - * @param {number} indent - * @param {number} lineStart - * @returns {?number} - */ + static foldNewline(src, offset, indent) { + let inCount = 0; + let error = false; + let fold = ''; + let ch = src[offset + 1]; - static endOfBlockIndent(src, indent, lineStart) { - const inEnd = Node.endOfIndent(src, lineStart); + while (ch === ' ' || ch === '\t' || ch === '\n') { + switch (ch) { + case '\n': + inCount = 0; + offset += 1; + fold += '\n'; + break; - if (inEnd > lineStart + indent) { - return inEnd; - } else { - const wsEnd = Node.endOfWhiteSpace(src, inEnd); - const ch = src[wsEnd]; - if (!ch || ch === '\n') return wsEnd; + case '\t': + if (inCount <= indent) error = true; + offset = Node.endOfWhiteSpace(src, offset + 2) - 1; + break; + + case ' ': + inCount += 1; + offset += 1; + break; } - return null; + ch = src[offset + 1]; } - static atBlank(src, offset, endAsBlank) { - const ch = src[offset]; - return ch === '\n' || ch === '\t' || ch === ' ' || endAsBlank && !ch; - } + if (!fold) fold = ' '; + if (ch && inCount <= indent) error = true; + return { + fold, + offset, + error + }; + } - static nextNodeIsIndented(ch, indentDiff, indicatorAsIndent) { - if (!ch || indentDiff < 0) return false; - if (indentDiff > 0) return true; - return indicatorAsIndent && ch === '-'; - } // should be at line or string end, or at next non-whitespace char + constructor(type, props, context) { + Object.defineProperty(this, 'context', { + value: context || null, + writable: true + }); + this.error = null; + this.range = null; + this.valueRange = null; + this.props = props || []; + this.type = type; + this.value = null; + } + getPropValue(idx, key, skipKey) { + if (!this.context) return null; + const { + src + } = this.context; + const prop = this.props[idx]; + return prop && src[prop.start] === key ? src.slice(prop.start + (skipKey ? 1 : 0), prop.end) : null; + } - static normalizeOffset(src, offset) { - const ch = src[offset]; - return !ch ? offset : ch !== '\n' && src[offset - 1] === '\n' ? offset - 1 : Node.endOfWhiteSpace(src, offset); - } // fold single newline into space, multiple newlines to N - 1 newlines - // presumes src[offset] === '\n' + get anchor() { + for (let i = 0; i < this.props.length; ++i) { + const anchor = this.getPropValue(i, Char.ANCHOR, true); + if (anchor != null) return anchor; + } + return null; + } - static foldNewline(src, offset, indent) { - let inCount = 0; - let error = false; - let fold = ''; - let ch = src[offset + 1]; + get comment() { + const comments = []; - while (ch === ' ' || ch === '\t' || ch === '\n') { - switch (ch) { - case '\n': - inCount = 0; - offset += 1; - fold += '\n'; - break; + for (let i = 0; i < this.props.length; ++i) { + const comment = this.getPropValue(i, Char.COMMENT, true); + if (comment != null) comments.push(comment); + } - case '\t': - if (inCount <= indent) error = true; - offset = Node.endOfWhiteSpace(src, offset + 2) - 1; - break; + return comments.length > 0 ? comments.join('\n') : null; + } - case ' ': - inCount += 1; - offset += 1; - break; - } + commentHasRequiredWhitespace(start) { + const { + src + } = this.context; + if (this.header && start === this.header.end) return false; + if (!this.valueRange) return false; + const { + end + } = this.valueRange; + return start !== end || Node.atBlank(src, end - 1); + } - ch = src[offset + 1]; - } + get hasComment() { + if (this.context) { + const { + src + } = this.context; - if (!fold) fold = ' '; - if (ch && inCount <= indent) error = true; - return { - fold, - offset, - error - }; + for (let i = 0; i < this.props.length; ++i) { + if (src[this.props[i].start] === Char.COMMENT) return true; + } } - constructor(type, props, context) { - Object.defineProperty(this, 'context', { - value: context || null, - writable: true - }); - this.error = null; - this.range = null; - this.valueRange = null; - this.props = props || []; - this.type = type; - this.value = null; - } + return false; + } - getPropValue(idx, key, skipKey) { - if (!this.context) return null; + get hasProps() { + if (this.context) { const { src } = this.context; - const prop = this.props[idx]; - return prop && src[prop.start] === key ? src.slice(prop.start + (skipKey ? 1 : 0), prop.end) : null; - } - get anchor() { for (let i = 0; i < this.props.length; ++i) { - const anchor = this.getPropValue(i, constants.Char.ANCHOR, true); - if (anchor != null) return anchor; + if (src[this.props[i].start] !== Char.COMMENT) return true; } - - return null; } - get comment() { - const comments = []; + return false; + } - for (let i = 0; i < this.props.length; ++i) { - const comment = this.getPropValue(i, constants.Char.COMMENT, true); - if (comment != null) comments.push(comment); - } + get includesTrailingLines() { + return false; + } - return comments.length > 0 ? comments.join('\n') : null; - } + get jsonLike() { + const jsonLikeTypes = [Type.FLOW_MAP, Type.FLOW_SEQ, Type.QUOTE_DOUBLE, Type.QUOTE_SINGLE]; + return jsonLikeTypes.indexOf(this.type) !== -1; + } - commentHasRequiredWhitespace(start) { - const { - src - } = this.context; - if (this.header && start === this.header.end) return false; - if (!this.valueRange) return false; - const { - end - } = this.valueRange; - return start !== end || Node.atBlank(src, end - 1); - } + get rangeAsLinePos() { + if (!this.range || !this.context) return undefined; + const start = getLinePos(this.range.start, this.context.root); + if (!start) return undefined; + const end = getLinePos(this.range.end, this.context.root); + return { + start, + end + }; + } - get hasComment() { - if (this.context) { - const { - src - } = this.context; + get rawValue() { + if (!this.valueRange || !this.context) return null; + const { + start, + end + } = this.valueRange; + return this.context.src.slice(start, end); + } + + get tag() { + for (let i = 0; i < this.props.length; ++i) { + const tag = this.getPropValue(i, Char.TAG, false); - for (let i = 0; i < this.props.length; ++i) { - if (src[this.props[i].start] === constants.Char.COMMENT) return true; + if (tag != null) { + if (tag[1] === '<') { + return { + verbatim: tag.slice(2, -1) + }; + } else { + // eslint-disable-next-line no-unused-vars + const [_, handle, suffix] = tag.match(/^(.*!)([^!]*)$/); + return { + handle, + suffix + }; } } - - return false; } - get hasProps() { - if (this.context) { - const { - src - } = this.context; - - for (let i = 0; i < this.props.length; ++i) { - if (src[this.props[i].start] !== constants.Char.COMMENT) return true; - } - } + return null; + } - return false; - } + get valueRangeContainsNewline() { + if (!this.valueRange || !this.context) return false; + const { + start, + end + } = this.valueRange; + const { + src + } = this.context; - get includesTrailingLines() { - return false; + for (let i = start; i < end; ++i) { + if (src[i] === '\n') return true; } - get jsonLike() { - const jsonLikeTypes = [constants.Type.FLOW_MAP, constants.Type.FLOW_SEQ, constants.Type.QUOTE_DOUBLE, constants.Type.QUOTE_SINGLE]; - return jsonLikeTypes.indexOf(this.type) !== -1; - } + return false; + } - get rangeAsLinePos() { - if (!this.range || !this.context) return undefined; - const start = (0, sourceUtils.getLinePos)(this.range.start, this.context.root); - if (!start) return undefined; - const end = (0, sourceUtils.getLinePos)(this.range.end, this.context.root); - return { - start, - end - }; - } + parseComment(start) { + const { + src + } = this.context; - get rawValue() { - if (!this.valueRange || !this.context) return null; - const { - start, - end - } = this.valueRange; - return this.context.src.slice(start, end); + if (src[start] === Char.COMMENT) { + const end = Node.endOfLine(src, start + 1); + const commentRange = new Range(start, end); + this.props.push(commentRange); + return end; } - get tag() { - for (let i = 0; i < this.props.length; ++i) { - const tag = this.getPropValue(i, constants.Char.TAG, false); + return start; + } + /** + * Populates the `origStart` and `origEnd` values of all ranges for this + * node. Extended by child classes to handle descendant nodes. + * + * @param {number[]} cr - Positions of dropped CR characters + * @param {number} offset - Starting index of `cr` from the last call + * @returns {number} - The next offset, matching the one found for `origStart` + */ - if (tag != null) { - if (tag[1] === '<') { - return { - verbatim: tag.slice(2, -1) - }; - } else { - // eslint-disable-next-line no-unused-vars - const [_, handle, suffix] = tag.match(/^(.*!)([^!]*)$/); - return { - handle, - suffix - }; - } - } - } - return null; - } + setOrigRanges(cr, offset) { + if (this.range) offset = this.range.setOrigRange(cr, offset); + if (this.valueRange) this.valueRange.setOrigRange(cr, offset); + this.props.forEach(prop => prop.setOrigRange(cr, offset)); + return offset; + } - get valueRangeContainsNewline() { - if (!this.valueRange || !this.context) return false; - const { - start, - end - } = this.valueRange; - const { + toString() { + const { + context: { src - } = this.context; - - for (let i = start; i < end; ++i) { - if (src[i] === '\n') return true; - } + }, + range, + value + } = this; + if (value != null) return value; + const str = src.slice(range.start, range.end); + return Node.addStringTerminator(src, range.end, str); + } - return false; - } +} - parseComment(start) { - const { - src - } = this.context; +class YAMLError extends Error { + constructor(name, source, message) { + if (!message || !(source instanceof Node)) throw new Error(`Invalid arguments for new ${name}`); + super(); + this.name = name; + this.message = message; + this.source = source; + } - if (src[start] === constants.Char.COMMENT) { - const end = Node.endOfLine(src, start + 1); - const commentRange = new _Range.default(start, end); - this.props.push(commentRange); - return end; - } + makePretty() { + if (!this.source) return; + this.nodeType = this.source.type; + const cst = this.source.context && this.source.context.root; - return start; - } - /** - * Populates the `origStart` and `origEnd` values of all ranges for this - * node. Extended by child classes to handle descendant nodes. - * - * @param {number[]} cr - Positions of dropped CR characters - * @param {number} offset - Starting index of `cr` from the last call - * @returns {number} - The next offset, matching the one found for `origStart` - */ + if (typeof this.offset === 'number') { + this.range = new Range(this.offset, this.offset + 1); + const start = cst && getLinePos(this.offset, cst); + if (start) { + const end = { + line: start.line, + col: start.col + 1 + }; + this.linePos = { + start, + end + }; + } - setOrigRanges(cr, offset) { - if (this.range) offset = this.range.setOrigRange(cr, offset); - if (this.valueRange) this.valueRange.setOrigRange(cr, offset); - this.props.forEach(prop => prop.setOrigRange(cr, offset)); - return offset; + delete this.offset; + } else { + this.range = this.source.range; + this.linePos = this.source.rangeAsLinePos; } - toString() { + if (this.linePos) { const { - context: { - src - }, - range, - value - } = this; - if (value != null) return value; - const str = src.slice(range.start, range.end); - return Node.addStringTerminator(src, range.end, str); + line, + col + } = this.linePos.start; + this.message += ` at line ${line}, column ${col}`; + const ctx = cst && getPrettyContext(this.linePos, cst); + if (ctx) this.message += `:\n\n${ctx}\n`; } + delete this.source; } - exports.default = Node; -}); -unwrapExports(Node_1); +} -var errors = createCommonjsModule(function (module, exports) { +class YAMLReferenceError extends YAMLError { + constructor(source, message) { + super('YAMLReferenceError', source, message); + } - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.YAMLWarning = exports.YAMLSyntaxError = exports.YAMLSemanticError = exports.YAMLReferenceError = exports.YAMLError = void 0; +} - var _Node = _interopRequireDefault(Node_1); +class YAMLSemanticError extends YAMLError { + constructor(source, message) { + super('YAMLSemanticError', source, message); + } - var _Range = _interopRequireDefault(Range_1); +} - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; +class YAMLSyntaxError extends YAMLError { + constructor(source, message) { + super('YAMLSyntaxError', source, message); } - class YAMLError extends Error { - constructor(name, source, message) { - if (!message || !(source instanceof _Node.default)) throw new Error(`Invalid arguments for new ${name}`); - super(); - this.name = name; - this.message = message; - this.source = source; - } +} - makePretty() { - if (!this.source) return; - this.nodeType = this.source.type; - const cst = this.source.context && this.source.context.root; +class YAMLWarning extends YAMLError { + constructor(source, message) { + super('YAMLWarning', source, message); + } - if (typeof this.offset === 'number') { - this.range = new _Range.default(this.offset, this.offset + 1); - const start = cst && (0, sourceUtils.getLinePos)(this.offset, cst); +} - if (start) { - const end = { - line: start.line, - col: start.col + 1 - }; - this.linePos = { - start, - end - }; - } +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } - delete this.offset; - } else { - this.range = this.source.range; - this.linePos = this.source.rangeAsLinePos; - } + return obj; +} - if (this.linePos) { - const { - line, - col - } = this.linePos.start; - this.message += ` at line ${line}, column ${col}`; - const ctx = cst && (0, sourceUtils.getPrettyContext)(this.linePos, cst); - if (ctx) this.message += `:\n\n${ctx}\n`; - } +class PlainValue extends Node { + static endOfLine(src, start, inFlow) { + let ch = src[start]; + let offset = start; - delete this.source; + while (ch && ch !== '\n') { + if (inFlow && (ch === '[' || ch === ']' || ch === '{' || ch === '}' || ch === ',')) break; + const next = src[offset + 1]; + if (ch === ':' && (!next || next === '\n' || next === '\t' || next === ' ' || inFlow && next === ',')) break; + if ((ch === ' ' || ch === '\t') && next === '#') break; + offset += 1; + ch = next; } + return offset; } - exports.YAMLError = YAMLError; + get strValue() { + if (!this.valueRange || !this.context) return null; + let { + start, + end + } = this.valueRange; + const { + src + } = this.context; + let ch = src[end - 1]; + + while (start < end && (ch === '\n' || ch === '\t' || ch === ' ')) ch = src[--end - 1]; - class YAMLReferenceError extends YAMLError { - constructor(source, message) { - super('YAMLReferenceError', source, message); + let str = ''; + + for (let i = start; i < end; ++i) { + const ch = src[i]; + + if (ch === '\n') { + const { + fold, + offset + } = Node.foldNewline(src, i, -1); + str += fold; + i = offset; + } else if (ch === ' ' || ch === '\t') { + // trim trailing whitespace + const wsStart = i; + let next = src[i + 1]; + + while (i < end && (next === ' ' || next === '\t')) { + i += 1; + next = src[i + 1]; + } + + if (next !== '\n') str += i > wsStart ? src.slice(wsStart, i + 1) : ch; + } else { + str += ch; + } } + const ch0 = src[start]; + + switch (ch0) { + case '\t': + { + const msg = 'Plain value cannot start with a tab character'; + const errors = [new YAMLSemanticError(this, msg)]; + return { + errors, + str + }; + } + + case '@': + case '`': + { + const msg = `Plain value cannot start with reserved character ${ch0}`; + const errors = [new YAMLSemanticError(this, msg)]; + return { + errors, + str + }; + } + + default: + return str; + } } - exports.YAMLReferenceError = YAMLReferenceError; + parseBlockValue(start) { + const { + indent, + inFlow, + src + } = this.context; + let offset = start; + let valueEnd = start; + + for (let ch = src[offset]; ch === '\n'; ch = src[offset]) { + if (Node.atDocumentBoundary(src, offset + 1)) break; + const end = Node.endOfBlockIndent(src, indent, offset + 1); + if (end === null || src[end] === '#') break; - class YAMLSemanticError extends YAMLError { - constructor(source, message) { - super('YAMLSemanticError', source, message); + if (src[end] === '\n') { + offset = end; + } else { + valueEnd = PlainValue.endOfLine(src, end, inFlow); + offset = valueEnd; + } } + if (this.valueRange.isEmpty()) this.valueRange.start = start; + this.valueRange.end = valueEnd; + return valueEnd; } + /** + * Parses a plain value from the source + * + * Accepted forms are: + * ``` + * #comment + * + * first line + * + * first line #comment + * + * first line + * block + * lines + * + * #comment + * block + * lines + * ``` + * where block lines are empty or have an indent level greater than `indent`. + * + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this scalar, may be `\n` + */ + + + parse(context, start) { + this.context = context; + const { + inFlow, + src + } = context; + let offset = start; + const ch = src[offset]; - exports.YAMLSemanticError = YAMLSemanticError; + if (ch && ch !== '#' && ch !== '\n') { + offset = PlainValue.endOfLine(src, start, inFlow); + } + + this.valueRange = new Range(start, offset); + offset = Node.endOfWhiteSpace(src, offset); + offset = this.parseComment(offset); - class YAMLSyntaxError extends YAMLError { - constructor(source, message) { - super('YAMLSyntaxError', source, message); + if (!this.hasComment || this.valueRange.isEmpty()) { + offset = this.parseBlockValue(offset); } + return offset; } - exports.YAMLSyntaxError = YAMLSyntaxError; +} - class YAMLWarning extends YAMLError { - constructor(source, message) { - super('YAMLWarning', source, message); - } +var Char_1 = Char; +var Node_1 = Node; +var PlainValue_1 = PlainValue; +var Range_1 = Range; +var Type_1 = Type; +var YAMLError_1 = YAMLError; +var YAMLReferenceError_1 = YAMLReferenceError; +var YAMLSemanticError_1 = YAMLSemanticError; +var YAMLSyntaxError_1 = YAMLSyntaxError; +var YAMLWarning_1 = YAMLWarning; +var _defineProperty_1 = _defineProperty; +var defaultTagPrefix_1 = defaultTagPrefix; +var defaultTags_1 = defaultTags; +var PlainValueEc8e588e = { + Char: Char_1, + Node: Node_1, + PlainValue: PlainValue_1, + Range: Range_1, + Type: Type_1, + YAMLError: YAMLError_1, + YAMLReferenceError: YAMLReferenceError_1, + YAMLSemanticError: YAMLSemanticError_1, + YAMLSyntaxError: YAMLSyntaxError_1, + YAMLWarning: YAMLWarning_1, + _defineProperty: _defineProperty_1, + defaultTagPrefix: defaultTagPrefix_1, + defaultTags: defaultTags_1 +}; +class BlankLine extends PlainValueEc8e588e.Node { + constructor() { + super(PlainValueEc8e588e.Type.BLANK_LINE); } + /* istanbul ignore next */ - exports.YAMLWarning = YAMLWarning; -}); -unwrapExports(errors); -var errors_1 = errors.YAMLWarning; -var errors_2 = errors.YAMLSyntaxError; -var errors_3 = errors.YAMLSemanticError; -var errors_4 = errors.YAMLReferenceError; -var errors_5 = errors.YAMLError; -var BlankLine_1 = createCommonjsModule(function (module, exports) { + get includesTrailingLines() { + // This is never called from anywhere, but if it were, + // this is the value it should return. + return true; + } + /** + * Parses a blank line from the source + * + * @param {ParseContext} context + * @param {number} start - Index of first \n character + * @returns {number} - Index of the character after this + */ - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - var _Node = _interopRequireDefault(Node_1); + parse(context, start) { + this.context = context; + this.range = new PlainValueEc8e588e.Range(start, start + 1); + return start + 1; + } - var _Range = _interopRequireDefault(Range_1); +} - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; +class CollectionItem extends PlainValueEc8e588e.Node { + constructor(type, props) { + super(type, props); + this.node = null; } - class BlankLine extends _Node.default { - constructor() { - super(constants.Type.BLANK_LINE); - } - /* istanbul ignore next */ + get includesTrailingLines() { + return !!this.node && this.node.includesTrailingLines; + } + /** + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this + */ - get includesTrailingLines() { - // This is never called from anywhere, but if it were, - // this is the value it should return. - return true; - } - /** - * Parses blank lines from the source - * - * @param {ParseContext} context - * @param {number} start - Index of first \n character - * @returns {number} - Index of the character after this - */ + parse(context, start) { + this.context = context; + const { + parseNode, + src + } = context; + let { + atLineStart, + lineStart + } = context; + if (!atLineStart && this.type === PlainValueEc8e588e.Type.SEQ_ITEM) this.error = new PlainValueEc8e588e.YAMLSemanticError(this, 'Sequence items must not have preceding content on the same line'); + const indent = atLineStart ? start - lineStart : context.indent; + let offset = PlainValueEc8e588e.Node.endOfWhiteSpace(src, start + 1); + let ch = src[offset]; + const inlineComment = ch === '#'; + const comments = []; + let blankLine = null; + + while (ch === '\n' || ch === '#') { + if (ch === '#') { + const end = PlainValueEc8e588e.Node.endOfLine(src, offset + 1); + comments.push(new PlainValueEc8e588e.Range(offset, end)); + offset = end; + } else { + atLineStart = true; + lineStart = offset + 1; + const wsEnd = PlainValueEc8e588e.Node.endOfWhiteSpace(src, lineStart); + + if (src[wsEnd] === '\n' && comments.length === 0) { + blankLine = new BlankLine(); + lineStart = blankLine.parse({ + src + }, lineStart); + } + offset = PlainValueEc8e588e.Node.endOfIndent(src, lineStart); + } - parse(context, start) { - this.context = context; - const { - src - } = context; - let offset = start + 1; + ch = src[offset]; + } - while (_Node.default.atBlank(src, offset)) { - const lineEnd = _Node.default.endOfWhiteSpace(src, offset); + if (PlainValueEc8e588e.Node.nextNodeIsIndented(ch, offset - (lineStart + indent), this.type !== PlainValueEc8e588e.Type.SEQ_ITEM)) { + this.node = parseNode({ + atLineStart, + inCollection: false, + indent, + lineStart, + parent: this + }, offset); + } else if (ch && lineStart > start + 1) { + offset = lineStart - 1; + } - if (lineEnd === '\n') offset = lineEnd + 1;else break; + if (this.node) { + if (blankLine) { + // Only blank lines preceding non-empty nodes are captured. Note that + // this means that collection item range start indices do not always + // increase monotonically. -- eemeli/yaml#126 + const items = context.parent.items || context.parent.contents; + if (items) items.push(blankLine); } - this.range = new _Range.default(start, offset); - return offset; + if (comments.length) Array.prototype.push.apply(this.props, comments); + offset = this.node.range.end; + } else { + if (inlineComment) { + const c = comments[0]; + this.props.push(c); + offset = c.end; + } else { + offset = PlainValueEc8e588e.Node.endOfLine(src, start + 1); + } } + const end = this.node ? this.node.valueRange.end : offset; + this.valueRange = new PlainValueEc8e588e.Range(start, end); + return offset; } - exports.default = BlankLine; -}); -unwrapExports(BlankLine_1); - -var CollectionItem_1 = createCommonjsModule(function (module, exports) { + setOrigRanges(cr, offset) { + offset = super.setOrigRanges(cr, offset); + return this.node ? this.node.setOrigRanges(cr, offset) : offset; + } - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; + toString() { + const { + context: { + src + }, + node, + range, + value + } = this; + if (value != null) return value; + const str = node ? src.slice(range.start, node.range.start) + String(node) : src.slice(range.start, range.end); + return PlainValueEc8e588e.Node.addStringTerminator(src, range.end, str); + } - var _BlankLine = _interopRequireDefault(BlankLine_1); +} - var _Node = _interopRequireDefault(Node_1); +class Comment extends PlainValueEc8e588e.Node { + constructor() { + super(PlainValueEc8e588e.Type.COMMENT); + } + /** + * Parses a comment line from the source + * + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this scalar + */ - var _Range = _interopRequireDefault(Range_1); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + parse(context, start) { + this.context = context; + const offset = this.parseComment(start); + this.range = new PlainValueEc8e588e.Range(start, offset); + return offset; } - class CollectionItem extends _Node.default { - constructor(type, props) { - super(type, props); - this.node = null; - } +} - get includesTrailingLines() { - return !!this.node && this.node.includesTrailingLines; - } - /** - * @param {ParseContext} context - * @param {number} start - Index of first character - * @returns {number} - Index of the character after this - */ +function grabCollectionEndComments(node) { + let cnode = node; + + while (cnode instanceof CollectionItem) cnode = cnode.node; + + if (!(cnode instanceof Collection)) return null; + const len = cnode.items.length; + let ci = -1; + for (let i = len - 1; i >= 0; --i) { + const n = cnode.items[i]; - parse(context, start) { - this.context = context; + if (n.type === PlainValueEc8e588e.Type.COMMENT) { + // Keep sufficiently indented comments with preceding node const { - parseNode, - src - } = context; - let { - atLineStart, + indent, lineStart - } = context; - if (!atLineStart && this.type === constants.Type.SEQ_ITEM) this.error = new errors.YAMLSemanticError(this, 'Sequence items must not have preceding content on the same line'); - const indent = atLineStart ? start - lineStart : context.indent; + } = n.context; + if (indent > 0 && n.range.start >= lineStart + indent) break; + ci = i; + } else if (n.type === PlainValueEc8e588e.Type.BLANK_LINE) ci = i;else break; + } - let offset = _Node.default.endOfWhiteSpace(src, start + 1); + if (ci === -1) return null; + const ca = cnode.items.splice(ci, len - ci); + const prevEnd = ca[0].range.start; - let ch = src[offset]; - const inlineComment = ch === '#'; - const comments = []; - let blankLine = null; + while (true) { + cnode.range.end = prevEnd; + if (cnode.valueRange && cnode.valueRange.end > prevEnd) cnode.valueRange.end = prevEnd; + if (cnode === node) break; + cnode = cnode.context.parent; + } - while (ch === '\n' || ch === '#') { - if (ch === '#') { - const end = _Node.default.endOfLine(src, offset + 1); + return ca; +} - comments.push(new _Range.default(offset, end)); - offset = end; - } else { - atLineStart = true; - lineStart = offset + 1; +class Collection extends PlainValueEc8e588e.Node { + static nextContentHasIndent(src, offset, indent) { + const lineStart = PlainValueEc8e588e.Node.endOfLine(src, offset) + 1; + offset = PlainValueEc8e588e.Node.endOfWhiteSpace(src, lineStart); + const ch = src[offset]; + if (!ch) return false; + if (offset >= lineStart + indent) return true; + if (ch !== '#' && ch !== '\n') return false; + return Collection.nextContentHasIndent(src, offset, indent); + } + + constructor(firstItem) { + super(firstItem.type === PlainValueEc8e588e.Type.SEQ_ITEM ? PlainValueEc8e588e.Type.SEQ : PlainValueEc8e588e.Type.MAP); + + for (let i = firstItem.props.length - 1; i >= 0; --i) { + if (firstItem.props[i].start < firstItem.context.lineStart) { + // props on previous line are assumed by the collection + this.props = firstItem.props.slice(0, i + 1); + firstItem.props = firstItem.props.slice(i + 1); + const itemRange = firstItem.props[0] || firstItem.valueRange; + firstItem.range.start = itemRange.start; + break; + } + } - const wsEnd = _Node.default.endOfWhiteSpace(src, lineStart); + this.items = [firstItem]; + const ec = grabCollectionEndComments(firstItem); + if (ec) Array.prototype.push.apply(this.items, ec); + } - if (src[wsEnd] === '\n' && comments.length === 0) { - blankLine = new _BlankLine.default(); - lineStart = blankLine.parse({ - src - }, lineStart); + get includesTrailingLines() { + return this.items.length > 0; + } + /** + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this + */ + + + parse(context, start) { + this.context = context; + const { + parseNode, + src + } = context; // It's easier to recalculate lineStart here rather than tracking down the + // last context from which to read it -- eemeli/yaml#2 + + let lineStart = PlainValueEc8e588e.Node.startOfLine(src, start); + const firstItem = this.items[0]; // First-item context needs to be correct for later comment handling + // -- eemeli/yaml#17 + + firstItem.context.parent = this; + this.valueRange = PlainValueEc8e588e.Range.copy(firstItem.valueRange); + const indent = firstItem.range.start - firstItem.context.lineStart; + let offset = start; + offset = PlainValueEc8e588e.Node.normalizeOffset(src, offset); + let ch = src[offset]; + let atLineStart = PlainValueEc8e588e.Node.endOfWhiteSpace(src, lineStart) === offset; + let prevIncludesTrailingLines = false; + + while (ch) { + while (ch === '\n' || ch === '#') { + if (atLineStart && ch === '\n' && !prevIncludesTrailingLines) { + const blankLine = new BlankLine(); + offset = blankLine.parse({ + src + }, offset); + this.valueRange.end = offset; + + if (offset >= src.length) { + ch = null; + break; + } + + this.items.push(blankLine); + offset -= 1; // blankLine.parse() consumes terminal newline + } else if (ch === '#') { + if (offset < lineStart + indent && !Collection.nextContentHasIndent(src, offset, indent)) { + return offset; + } + + const comment = new Comment(); + offset = comment.parse({ + indent, + lineStart, + src + }, offset); + this.items.push(comment); + this.valueRange.end = offset; + + if (offset >= src.length) { + ch = null; + break; } + } + + lineStart = offset + 1; + offset = PlainValueEc8e588e.Node.endOfIndent(src, lineStart); + + if (PlainValueEc8e588e.Node.atBlank(src, offset)) { + const wsEnd = PlainValueEc8e588e.Node.endOfWhiteSpace(src, offset); + const next = src[wsEnd]; - offset = _Node.default.endOfIndent(src, lineStart); + if (!next || next === '\n' || next === '#') { + offset = wsEnd; + } } ch = src[offset]; + atLineStart = true; } - if (_Node.default.nextNodeIsIndented(ch, offset - (lineStart + indent), this.type !== constants.Type.SEQ_ITEM)) { - this.node = parseNode({ - atLineStart, - inCollection: false, - indent, - lineStart, - parent: this - }, offset); - } else if (ch && lineStart > start + 1) { - offset = lineStart - 1; - } - - if (this.node) { - if (blankLine) { - // Only blank lines preceding non-empty nodes are captured. Note that - // this means that collection item range start indices do not always - // increase monotonically. -- eemeli/yaml#126 - const items = context.parent.items || context.parent.contents; - if (items) items.push(blankLine); - } + if (!ch) { + break; + } - if (comments.length) Array.prototype.push.apply(this.props, comments); - offset = this.node.range.end; - } else { - if (inlineComment) { - const c = comments[0]; - this.props.push(c); - offset = c.end; - } else { - offset = _Node.default.endOfLine(src, start + 1); + if (offset !== lineStart + indent && (atLineStart || ch !== ':')) { + if (offset < lineStart + indent) { + if (lineStart > start) offset = lineStart; + break; + } else if (!this.error) { + const msg = 'All collection items must start at the same column'; + this.error = new PlainValueEc8e588e.YAMLSyntaxError(this, msg); } } - const end = this.node ? this.node.valueRange.end : offset; - this.valueRange = new _Range.default(start, end); - return offset; - } + if (firstItem.type === PlainValueEc8e588e.Type.SEQ_ITEM) { + if (ch !== '-') { + if (lineStart > start) offset = lineStart; + break; + } + } else if (ch === '-' && !this.error) { + // map key may start with -, as long as it's followed by a non-whitespace char + const next = src[offset + 1]; - setOrigRanges(cr, offset) { - offset = super.setOrigRanges(cr, offset); - return this.node ? this.node.setOrigRanges(cr, offset) : offset; - } + if (!next || next === '\n' || next === '\t' || next === ' ') { + const msg = 'A collection cannot be both a mapping and a sequence'; + this.error = new PlainValueEc8e588e.YAMLSyntaxError(this, msg); + } + } - toString() { - const { - context: { - src - }, - node, - range, - value - } = this; - if (value != null) return value; - const str = node ? src.slice(range.start, node.range.start) + String(node) : src.slice(range.start, range.end); - return _Node.default.addStringTerminator(src, range.end, str); + const node = parseNode({ + atLineStart, + inCollection: true, + indent, + lineStart, + parent: this + }, offset); + if (!node) return offset; // at next document start + + this.items.push(node); + this.valueRange.end = node.valueRange.end; + offset = PlainValueEc8e588e.Node.normalizeOffset(src, node.range.end); + ch = src[offset]; + atLineStart = false; + prevIncludesTrailingLines = node.includesTrailingLines; // Need to reset lineStart and atLineStart here if preceding node's range + // has advanced to check the current line's indentation level + // -- eemeli/yaml#10 & eemeli/yaml#38 + + if (ch) { + let ls = offset - 1; + let prev = src[ls]; + + while (prev === ' ' || prev === '\t') prev = src[--ls]; + + if (prev === '\n') { + lineStart = ls + 1; + atLineStart = true; + } + } + + const ec = grabCollectionEndComments(node); + if (ec) Array.prototype.push.apply(this.items, ec); } + return offset; } - exports.default = CollectionItem; -}); -unwrapExports(CollectionItem_1); - -var Comment_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - - var _Node = _interopRequireDefault(Node_1); - - var _Range = _interopRequireDefault(Range_1); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + setOrigRanges(cr, offset) { + offset = super.setOrigRanges(cr, offset); + this.items.forEach(node => { + offset = node.setOrigRanges(cr, offset); + }); + return offset; } - class Comment extends _Node.default { - constructor() { - super(constants.Type.COMMENT); - } - /** - * Parses a comment line from the source - * - * @param {ParseContext} context - * @param {number} start - Index of first character - * @returns {number} - Index of the character after this scalar - */ - + toString() { + const { + context: { + src + }, + items, + range, + value + } = this; + if (value != null) return value; + let str = src.slice(range.start, items[0].range.start) + String(items[0]); - parse(context, start) { - this.context = context; - const offset = this.parseComment(start); - this.range = new _Range.default(start, offset); - return offset; + for (let i = 1; i < items.length; ++i) { + const item = items[i]; + const { + atLineStart, + indent + } = item.context; + if (atLineStart) for (let i = 0; i < indent; ++i) str += ' '; + str += String(item); } + return PlainValueEc8e588e.Node.addStringTerminator(src, range.end, str); } - exports.default = Comment; -}); -unwrapExports(Comment_1); +} -var Collection_1 = createCommonjsModule(function (module, exports) { +class Directive extends PlainValueEc8e588e.Node { + constructor() { + super(PlainValueEc8e588e.Type.DIRECTIVE); + this.name = null; + } - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.grabCollectionEndComments = grabCollectionEndComments; - exports.default = void 0; + get parameters() { + const raw = this.rawValue; + return raw ? raw.trim().split(/[ \t]+/) : []; + } - var _BlankLine = _interopRequireDefault(BlankLine_1); + parseName(start) { + const { + src + } = this.context; + let offset = start; + let ch = src[offset]; - var _CollectionItem = _interopRequireDefault(CollectionItem_1); + while (ch && ch !== '\n' && ch !== '\t' && ch !== ' ') ch = src[offset += 1]; - var _Comment = _interopRequireDefault(Comment_1); + this.name = src.slice(start, offset); + return offset; + } - var _Node = _interopRequireDefault(Node_1); + parseParameters(start) { + const { + src + } = this.context; + let offset = start; + let ch = src[offset]; - var _Range = _interopRequireDefault(Range_1); + while (ch && ch !== '\n' && ch !== '#') ch = src[offset += 1]; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + this.valueRange = new PlainValueEc8e588e.Range(start, offset); + return offset; } - function grabCollectionEndComments(node) { - let cnode = node; + parse(context, start) { + this.context = context; + let offset = this.parseName(start + 1); + offset = this.parseParameters(offset); + offset = this.parseComment(offset); + this.range = new PlainValueEc8e588e.Range(start, offset); + return offset; + } - while (cnode instanceof _CollectionItem.default) cnode = cnode.node; +} - if (!(cnode instanceof Collection)) return null; - const len = cnode.items.length; - let ci = -1; +class Document extends PlainValueEc8e588e.Node { + static startCommentOrEndBlankLine(src, start) { + const offset = PlainValueEc8e588e.Node.endOfWhiteSpace(src, start); + const ch = src[offset]; + return ch === '#' || ch === '\n' ? offset : start; + } - for (let i = len - 1; i >= 0; --i) { - const n = cnode.items[i]; + constructor() { + super(PlainValueEc8e588e.Type.DOCUMENT); + this.directives = null; + this.contents = null; + this.directivesEndMarker = null; + this.documentEndMarker = null; + } - if (n.type === constants.Type.COMMENT) { - // Keep sufficiently indented comments with preceding node - const { - indent, - lineStart - } = n.context; - if (indent > 0 && n.range.start >= lineStart + indent) break; - ci = i; - } else if (n.type === constants.Type.BLANK_LINE) ci = i;else break; - } + parseDirectives(start) { + const { + src + } = this.context; + this.directives = []; + let atLineStart = true; + let hasDirectives = false; + let offset = start; - if (ci === -1) return null; - const ca = cnode.items.splice(ci, len - ci); - const prevEnd = ca[0].range.start; + while (!PlainValueEc8e588e.Node.atDocumentBoundary(src, offset, PlainValueEc8e588e.Char.DIRECTIVES_END)) { + offset = Document.startCommentOrEndBlankLine(src, offset); - while (true) { - cnode.range.end = prevEnd; - if (cnode.valueRange && cnode.valueRange.end > prevEnd) cnode.valueRange.end = prevEnd; - if (cnode === node) break; - cnode = cnode.context.parent; - } + switch (src[offset]) { + case '\n': + if (atLineStart) { + const blankLine = new BlankLine(); + offset = blankLine.parse({ + src + }, offset); - return ca; - } + if (offset < src.length) { + this.directives.push(blankLine); + } + } else { + offset += 1; + atLineStart = true; + } - class Collection extends _Node.default { - static nextContentHasIndent(src, offset, indent) { - const lineStart = _Node.default.endOfLine(src, offset) + 1; - offset = _Node.default.endOfWhiteSpace(src, lineStart); - const ch = src[offset]; - if (!ch) return false; - if (offset >= lineStart + indent) return true; - if (ch !== '#' && ch !== '\n') return false; - return Collection.nextContentHasIndent(src, offset, indent); - } - - constructor(firstItem) { - super(firstItem.type === constants.Type.SEQ_ITEM ? constants.Type.SEQ : constants.Type.MAP); - - for (let i = firstItem.props.length - 1; i >= 0; --i) { - if (firstItem.props[i].start < firstItem.context.lineStart) { - // props on previous line are assumed by the collection - this.props = firstItem.props.slice(0, i + 1); - firstItem.props = firstItem.props.slice(i + 1); - const itemRange = firstItem.props[0] || firstItem.valueRange; - firstItem.range.start = itemRange.start; break; - } - } - this.items = [firstItem]; - const ec = grabCollectionEndComments(firstItem); - if (ec) Array.prototype.push.apply(this.items, ec); - } - - get includesTrailingLines() { - return this.items.length > 0; - } - /** - * @param {ParseContext} context - * @param {number} start - Index of first character - * @returns {number} - Index of the character after this - */ - - - parse(context, start) { - this.context = context; - const { - parseNode, - src - } = context; // It's easier to recalculate lineStart here rather than tracking down the - // last context from which to read it -- eemeli/yaml#2 - - let lineStart = _Node.default.startOfLine(src, start); - - const firstItem = this.items[0]; // First-item context needs to be correct for later comment handling - // -- eemeli/yaml#17 - - firstItem.context.parent = this; - this.valueRange = _Range.default.copy(firstItem.valueRange); - const indent = firstItem.range.start - firstItem.context.lineStart; - let offset = start; - offset = _Node.default.normalizeOffset(src, offset); - let ch = src[offset]; - let atLineStart = _Node.default.endOfWhiteSpace(src, lineStart) === offset; - let prevIncludesTrailingLines = false; - - while (ch) { - while (ch === '\n' || ch === '#') { - if (atLineStart && ch === '\n' && !prevIncludesTrailingLines) { - const blankLine = new _BlankLine.default(); - offset = blankLine.parse({ - src - }, offset); - this.valueRange.end = offset; - - if (offset >= src.length) { - ch = null; - break; - } - - this.items.push(blankLine); - offset -= 1; // blankLine.parse() consumes terminal newline - } else if (ch === '#') { - if (offset < lineStart + indent && !Collection.nextContentHasIndent(src, offset, indent)) { - return offset; - } - - const comment = new _Comment.default(); - offset = comment.parse({ - indent, - lineStart, - src - }, offset); - this.items.push(comment); - this.valueRange.end = offset; - - if (offset >= src.length) { - ch = null; - break; - } - } - - lineStart = offset + 1; - offset = _Node.default.endOfIndent(src, lineStart); - - if (_Node.default.atBlank(src, offset)) { - const wsEnd = _Node.default.endOfWhiteSpace(src, offset); - - const next = src[wsEnd]; - - if (!next || next === '\n' || next === '#') { - offset = wsEnd; - } - } - - ch = src[offset]; - atLineStart = true; - } - - if (!ch) { - break; - } - - if (offset !== lineStart + indent && (atLineStart || ch !== ':')) { - if (lineStart > start) offset = lineStart; - break; - } - - if (firstItem.type === constants.Type.SEQ_ITEM !== (ch === '-')) { - let typeswitch = true; - - if (ch === '-') { - // map key may start with -, as long as it's followed by a non-whitespace char - const next = src[offset + 1]; - typeswitch = !next || next === '\n' || next === '\t' || next === ' '; - } - - if (typeswitch) { - if (lineStart > start) offset = lineStart; - break; - } - } - - const node = parseNode({ - atLineStart, - inCollection: true, - indent, - lineStart, - parent: this - }, offset); - if (!node) return offset; // at next document start - - this.items.push(node); - this.valueRange.end = node.valueRange.end; - offset = _Node.default.normalizeOffset(src, node.range.end); - ch = src[offset]; - atLineStart = false; - prevIncludesTrailingLines = node.includesTrailingLines; // Need to reset lineStart and atLineStart here if preceding node's range - // has advanced to check the current line's indentation level - // -- eemeli/yaml#10 & eemeli/yaml#38 - - if (ch) { - let ls = offset - 1; - let prev = src[ls]; - - while (prev === ' ' || prev === '\t') prev = src[--ls]; - - if (prev === '\n') { - lineStart = ls + 1; - atLineStart = true; - } - } - - const ec = grabCollectionEndComments(node); - if (ec) Array.prototype.push.apply(this.items, ec); - } - - return offset; - } - - setOrigRanges(cr, offset) { - offset = super.setOrigRanges(cr, offset); - this.items.forEach(node => { - offset = node.setOrigRanges(cr, offset); - }); - return offset; - } - - toString() { - const { - context: { - src - }, - items, - range, - value - } = this; - if (value != null) return value; - let str = src.slice(range.start, items[0].range.start) + String(items[0]); - - for (let i = 1; i < items.length; ++i) { - const item = items[i]; - const { - atLineStart, - indent - } = item.context; - if (atLineStart) for (let i = 0; i < indent; ++i) str += ' '; - str += String(item); - } - - return _Node.default.addStringTerminator(src, range.end, str); - } - - } - - exports.default = Collection; -}); -unwrapExports(Collection_1); -var Collection_2 = Collection_1.grabCollectionEndComments; - -var Directive_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - - var _Node = _interopRequireDefault(Node_1); - - var _Range = _interopRequireDefault(Range_1); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - - class Directive extends _Node.default { - constructor() { - super(constants.Type.DIRECTIVE); - this.name = null; - } - - get parameters() { - const raw = this.rawValue; - return raw ? raw.trim().split(/[ \t]+/) : []; - } - - parseName(start) { - const { - src - } = this.context; - let offset = start; - let ch = src[offset]; - - while (ch && ch !== '\n' && ch !== '\t' && ch !== ' ') ch = src[offset += 1]; - - this.name = src.slice(start, offset); - return offset; - } - - parseParameters(start) { - const { - src - } = this.context; - let offset = start; - let ch = src[offset]; - - while (ch && ch !== '\n' && ch !== '#') ch = src[offset += 1]; - - this.valueRange = new _Range.default(start, offset); - return offset; - } - - parse(context, start) { - this.context = context; - let offset = this.parseName(start + 1); - offset = this.parseParameters(offset); - offset = this.parseComment(offset); - this.range = new _Range.default(start, offset); - return offset; - } - - } - - exports.default = Directive; -}); -unwrapExports(Directive_1); - -var Document_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - - var _BlankLine = _interopRequireDefault(BlankLine_1); - - var _Comment = _interopRequireDefault(Comment_1); - - var _Directive = _interopRequireDefault(Directive_1); - - var _Node = _interopRequireDefault(Node_1); - - var _Range = _interopRequireDefault(Range_1); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - - class Document extends _Node.default { - static startCommentOrEndBlankLine(src, start) { - const offset = _Node.default.endOfWhiteSpace(src, start); - - const ch = src[offset]; - return ch === '#' || ch === '\n' ? offset : start; - } - - constructor() { - super(constants.Type.DOCUMENT); - this.directives = null; - this.contents = null; - this.directivesEndMarker = null; - this.documentEndMarker = null; - } - - parseDirectives(start) { - const { - src - } = this.context; - this.directives = []; - let atLineStart = true; - let hasDirectives = false; - let offset = start; - - while (!_Node.default.atDocumentBoundary(src, offset, constants.Char.DIRECTIVES_END)) { - offset = Document.startCommentOrEndBlankLine(src, offset); - - switch (src[offset]) { - case '\n': - if (atLineStart) { - const blankLine = new _BlankLine.default(); - offset = blankLine.parse({ - src - }, offset); - - if (offset < src.length) { - this.directives.push(blankLine); - } - } else { - offset += 1; - atLineStart = true; - } - - break; - - case '#': - { - const comment = new _Comment.default(); - offset = comment.parse({ - src - }, offset); - this.directives.push(comment); - atLineStart = false; - } - break; - - case '%': - { - const directive = new _Directive.default(); - offset = directive.parse({ - parent: this, - src - }, offset); - this.directives.push(directive); - hasDirectives = true; - atLineStart = false; - } - break; - - default: - if (hasDirectives) { - this.error = new errors.YAMLSemanticError(this, 'Missing directives-end indicator line'); - } else if (this.directives.length > 0) { - this.contents = this.directives; - this.directives = []; - } - - return offset; - } - } - - if (src[offset]) { - this.directivesEndMarker = new _Range.default(offset, offset + 3); - return offset + 3; - } - - if (hasDirectives) { - this.error = new errors.YAMLSemanticError(this, 'Missing directives-end indicator line'); - } else if (this.directives.length > 0) { - this.contents = this.directives; - this.directives = []; - } - - return offset; - } - - parseContents(start) { - const { - parseNode, - src - } = this.context; - if (!this.contents) this.contents = []; - let lineStart = start; - - while (src[lineStart - 1] === '-') lineStart -= 1; - - let offset = _Node.default.endOfWhiteSpace(src, start); - - let atLineStart = lineStart === start; - this.valueRange = new _Range.default(offset); - - while (!_Node.default.atDocumentBoundary(src, offset, constants.Char.DOCUMENT_END)) { - switch (src[offset]) { - case '\n': - if (atLineStart) { - const blankLine = new _BlankLine.default(); - offset = blankLine.parse({ - src - }, offset); - - if (offset < src.length) { - this.contents.push(blankLine); - } - } else { - offset += 1; - atLineStart = true; - } - - lineStart = offset; - break; - - case '#': - { - const comment = new _Comment.default(); - offset = comment.parse({ - src - }, offset); - this.contents.push(comment); - atLineStart = false; - } - break; - - default: - { - const iEnd = _Node.default.endOfIndent(src, offset); - - const context = { - atLineStart, - indent: -1, - inFlow: false, - inCollection: false, - lineStart, - parent: this - }; - const node = parseNode(context, iEnd); - if (!node) return this.valueRange.end = iEnd; // at next document start - - this.contents.push(node); - offset = node.range.end; - atLineStart = false; - const ec = (0, Collection_1.grabCollectionEndComments)(node); - if (ec) Array.prototype.push.apply(this.contents, ec); - } - } - - offset = Document.startCommentOrEndBlankLine(src, offset); - } - - this.valueRange.end = offset; - - if (src[offset]) { - this.documentEndMarker = new _Range.default(offset, offset + 3); - offset += 3; - - if (src[offset]) { - offset = _Node.default.endOfWhiteSpace(src, offset); - - if (src[offset] === '#') { - const comment = new _Comment.default(); - offset = comment.parse({ - src - }, offset); - this.contents.push(comment); - } - - switch (src[offset]) { - case '\n': - offset += 1; - break; - - case undefined: - break; - - default: - this.error = new errors.YAMLSyntaxError(this, 'Document end marker line cannot have a non-comment suffix'); - } - } - } - - return offset; - } - /** - * @param {ParseContext} context - * @param {number} start - Index of first character - * @returns {number} - Index of the character after this - */ - - - parse(context, start) { - context.root = this; - this.context = context; - const { - src - } = context; - let offset = src.charCodeAt(start) === 0xfeff ? start + 1 : start; // skip BOM - - offset = this.parseDirectives(offset); - offset = this.parseContents(offset); - return offset; - } - - setOrigRanges(cr, offset) { - offset = super.setOrigRanges(cr, offset); - this.directives.forEach(node => { - offset = node.setOrigRanges(cr, offset); - }); - if (this.directivesEndMarker) offset = this.directivesEndMarker.setOrigRange(cr, offset); - this.contents.forEach(node => { - offset = node.setOrigRanges(cr, offset); - }); - if (this.documentEndMarker) offset = this.documentEndMarker.setOrigRange(cr, offset); - return offset; - } - - toString() { - const { - contents, - directives, - value - } = this; - if (value != null) return value; - let str = directives.join(''); - - if (contents.length > 0) { - if (directives.length > 0 || contents[0].type === constants.Type.COMMENT) str += '---\n'; - str += contents.join(''); - } - - if (str[str.length - 1] !== '\n') str += '\n'; - return str; - } - - } - - exports.default = Document; -}); -unwrapExports(Document_1); - -var Alias_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - - var _Node = _interopRequireDefault(Node_1); - - var _Range = _interopRequireDefault(Range_1); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - - class Alias extends _Node.default { - /** - * Parses an *alias from the source - * - * @param {ParseContext} context - * @param {number} start - Index of first character - * @returns {number} - Index of the character after this scalar - */ - parse(context, start) { - this.context = context; - const { - src - } = context; - - let offset = _Node.default.endOfIdentifier(src, start + 1); - - this.valueRange = new _Range.default(start + 1, offset); - offset = _Node.default.endOfWhiteSpace(src, offset); - offset = this.parseComment(offset); - return offset; - } - - } - - exports.default = Alias; -}); -unwrapExports(Alias_1); - -var BlockValue_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = exports.Chomp = void 0; - - var _Node = _interopRequireDefault(Node_1); - - var _Range = _interopRequireDefault(Range_1); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - - const Chomp = { - CLIP: 'CLIP', - KEEP: 'KEEP', - STRIP: 'STRIP' - }; - exports.Chomp = Chomp; - - class BlockValue extends _Node.default { - constructor(type, props) { - super(type, props); - this.blockIndent = null; - this.chomping = Chomp.CLIP; - this.header = null; - } - - get includesTrailingLines() { - return this.chomping === Chomp.KEEP; - } - - get strValue() { - if (!this.valueRange || !this.context) return null; - let { - start, - end - } = this.valueRange; - const { - indent, - src - } = this.context; - if (this.valueRange.isEmpty()) return ''; - let lastNewLine = null; - let ch = src[end - 1]; - - while (ch === '\n' || ch === '\t' || ch === ' ') { - end -= 1; - - if (end <= start) { - if (this.chomping === Chomp.KEEP) break;else return ''; // probably never happens - } - - if (ch === '\n') lastNewLine = end; - ch = src[end - 1]; - } - - let keepStart = end + 1; - - if (lastNewLine) { - if (this.chomping === Chomp.KEEP) { - keepStart = lastNewLine; - end = this.valueRange.end; - } else { - end = lastNewLine; - } - } - - const bi = indent + this.blockIndent; - const folded = this.type === constants.Type.BLOCK_FOLDED; - let atStart = true; - let str = ''; - let sep = ''; - let prevMoreIndented = false; - - for (let i = start; i < end; ++i) { - for (let j = 0; j < bi; ++j) { - if (src[i] !== ' ') break; - i += 1; - } - - const ch = src[i]; - - if (ch === '\n') { - if (sep === '\n') str += '\n';else sep = '\n'; - } else { - const lineEnd = _Node.default.endOfLine(src, i); - - const line = src.slice(i, lineEnd); - i = lineEnd; - - if (folded && (ch === ' ' || ch === '\t') && i < keepStart) { - if (sep === ' ') sep = '\n';else if (!prevMoreIndented && !atStart && sep === '\n') sep = '\n\n'; - str += sep + line; //+ ((lineEnd < end && src[lineEnd]) || '') - - sep = lineEnd < end && src[lineEnd] || ''; - prevMoreIndented = true; - } else { - str += sep + line; - sep = folded && i < keepStart ? ' ' : '\n'; - prevMoreIndented = false; - } - - if (atStart && line !== '') atStart = false; - } - } - - return this.chomping === Chomp.STRIP ? str : str + '\n'; - } - - parseBlockHeader(start) { - const { - src - } = this.context; - let offset = start + 1; - let bi = ''; - - while (true) { - const ch = src[offset]; - - switch (ch) { - case '-': - this.chomping = Chomp.STRIP; - break; - - case '+': - this.chomping = Chomp.KEEP; - break; - - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - bi += ch; - break; - - default: - this.blockIndent = Number(bi) || null; - this.header = new _Range.default(start, offset); - return offset; - } - - offset += 1; - } - } - - parseBlockValue(start) { - const { - indent, - src - } = this.context; - let offset = start; - let valueEnd = start; - let bi = this.blockIndent ? indent + this.blockIndent - 1 : indent; - let minBlockIndent = 1; - - for (let ch = src[offset]; ch === '\n'; ch = src[offset]) { - offset += 1; - if (_Node.default.atDocumentBoundary(src, offset)) break; - - const end = _Node.default.endOfBlockIndent(src, bi, offset); // should not include tab? - - - if (end === null) break; - - if (!this.blockIndent) { - // no explicit block indent, none yet detected - const lineIndent = end - (offset + indent); - - if (src[end] !== '\n') { - // first line with non-whitespace content - if (lineIndent < minBlockIndent) { - offset -= 1; - break; - } - - this.blockIndent = lineIndent; - bi = indent + this.blockIndent - 1; - } else if (lineIndent > minBlockIndent) { - // empty line with more whitespace - minBlockIndent = lineIndent; - } - } - - if (src[end] === '\n') { - offset = end; - } else { - offset = valueEnd = _Node.default.endOfLine(src, end); - } - } - - if (this.chomping !== Chomp.KEEP) { - offset = src[valueEnd] ? valueEnd + 1 : valueEnd; - } - - this.valueRange = new _Range.default(start + 1, offset); - return offset; - } - /** - * Parses a block value from the source - * - * Accepted forms are: - * ``` - * BS - * block - * lines - * - * BS #comment - * block - * lines - * ``` - * where the block style BS matches the regexp `[|>][-+1-9]*` and block lines - * are empty or have an indent level greater than `indent`. - * - * @param {ParseContext} context - * @param {number} start - Index of first character - * @returns {number} - Index of the character after this block - */ - - - parse(context, start) { - this.context = context; - const { - src - } = context; - let offset = this.parseBlockHeader(start); - offset = _Node.default.endOfWhiteSpace(src, offset); - offset = this.parseComment(offset); - offset = this.parseBlockValue(offset); - return offset; - } - - setOrigRanges(cr, offset) { - offset = super.setOrigRanges(cr, offset); - return this.header ? this.header.setOrigRange(cr, offset) : offset; - } - - } - - exports.default = BlockValue; -}); -unwrapExports(BlockValue_1); -var BlockValue_2 = BlockValue_1.Chomp; - -var FlowCollection_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - - var _BlankLine = _interopRequireDefault(BlankLine_1); - - var _Comment = _interopRequireDefault(Comment_1); - - var _Node = _interopRequireDefault(Node_1); - - var _Range = _interopRequireDefault(Range_1); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - - class FlowCollection extends _Node.default { - constructor(type, props) { - super(type, props); - this.items = null; - } - - prevNodeIsJsonLike(idx = this.items.length) { - const node = this.items[idx - 1]; - return !!node && (node.jsonLike || node.type === constants.Type.COMMENT && this.nodeIsJsonLike(idx - 1)); - } - /** - * @param {ParseContext} context - * @param {number} start - Index of first character - * @returns {number} - Index of the character after this - */ - - - parse(context, start) { - this.context = context; - const { - parseNode, - src - } = context; - let { - indent, - lineStart - } = context; - let char = src[start]; // { or [ - - this.items = [{ - char, - offset: start - }]; - - let offset = _Node.default.endOfWhiteSpace(src, start + 1); - - char = src[offset]; - - while (char && char !== ']' && char !== '}') { - switch (char) { - case '\n': - { - lineStart = offset + 1; - - const wsEnd = _Node.default.endOfWhiteSpace(src, lineStart); - - if (src[wsEnd] === '\n') { - const blankLine = new _BlankLine.default(); - lineStart = blankLine.parse({ - src - }, lineStart); - this.items.push(blankLine); - } - - offset = _Node.default.endOfIndent(src, lineStart); - - if (offset <= lineStart + indent) { - char = src[offset]; - - if (offset < lineStart + indent || char !== ']' && char !== '}') { - const msg = 'Insufficient indentation in flow collection'; - this.error = new errors.YAMLSemanticError(this, msg); - } - } - } - break; - - case ',': - { - this.items.push({ - char, - offset - }); - offset += 1; - } - break; - - case '#': - { - const comment = new _Comment.default(); - offset = comment.parse({ - src - }, offset); - this.items.push(comment); - } - break; - - case '?': - case ':': - { - const next = src[offset + 1]; - - if (next === '\n' || next === '\t' || next === ' ' || next === ',' || // in-flow : after JSON-like key does not need to be followed by whitespace - char === ':' && this.prevNodeIsJsonLike()) { - this.items.push({ - char, - offset - }); - offset += 1; - break; - } - } - // fallthrough - - default: - { - const node = parseNode({ - atLineStart: false, - inCollection: false, - inFlow: true, - indent: -1, - lineStart, - parent: this - }, offset); - - if (!node) { - // at next document start - this.valueRange = new _Range.default(start, offset); - return offset; - } - - this.items.push(node); - offset = _Node.default.normalizeOffset(src, node.range.end); - } - } - - offset = _Node.default.endOfWhiteSpace(src, offset); - char = src[offset]; - } - - this.valueRange = new _Range.default(start, offset + 1); - - if (char) { - this.items.push({ - char, - offset - }); - offset = _Node.default.endOfWhiteSpace(src, offset + 1); - offset = this.parseComment(offset); - } - - return offset; - } - - setOrigRanges(cr, offset) { - offset = super.setOrigRanges(cr, offset); - this.items.forEach(node => { - if (node instanceof _Node.default) { - offset = node.setOrigRanges(cr, offset); - } else if (cr.length === 0) { - node.origOffset = node.offset; - } else { - let i = offset; - - while (i < cr.length) { - if (cr[i] > node.offset) break;else ++i; - } - - node.origOffset = node.offset + i; - offset = i; - } - }); - return offset; - } - - toString() { - const { - context: { - src - }, - items, - range, - value - } = this; - if (value != null) return value; - const nodes = items.filter(item => item instanceof _Node.default); - let str = ''; - let prevEnd = range.start; - nodes.forEach(node => { - const prefix = src.slice(prevEnd, node.range.start); - prevEnd = node.range.end; - str += prefix + String(node); - - if (str[str.length - 1] === '\n' && src[prevEnd - 1] !== '\n' && src[prevEnd] === '\n') { - // Comment range does not include the terminal newline, but its - // stringified value does. Without this fix, newlines at comment ends - // get duplicated. - prevEnd += 1; - } - }); - str += src.slice(prevEnd, range.end); - return _Node.default.addStringTerminator(src, range.end, str); - } - - } - - exports.default = FlowCollection; -}); -unwrapExports(FlowCollection_1); - -var PlainValue_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - - var _Node = _interopRequireDefault(Node_1); - - var _Range = _interopRequireDefault(Range_1); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - - class PlainValue extends _Node.default { - static endOfLine(src, start, inFlow) { - let ch = src[start]; - let offset = start; - - while (ch && ch !== '\n') { - if (inFlow && (ch === '[' || ch === ']' || ch === '{' || ch === '}' || ch === ',')) break; - const next = src[offset + 1]; - if (ch === ':' && (!next || next === '\n' || next === '\t' || next === ' ' || inFlow && next === ',')) break; - if ((ch === ' ' || ch === '\t') && next === '#') break; - offset += 1; - ch = next; - } - - return offset; - } - - get strValue() { - if (!this.valueRange || !this.context) return null; - let { - start, - end - } = this.valueRange; - const { - src - } = this.context; - let ch = src[end - 1]; - - while (start < end && (ch === '\n' || ch === '\t' || ch === ' ')) ch = src[--end - 1]; - - ch = src[start]; - - while (start < end && (ch === '\n' || ch === '\t' || ch === ' ')) ch = src[++start]; - - let str = ''; - - for (let i = start; i < end; ++i) { - const ch = src[i]; - - if (ch === '\n') { - const { - fold, - offset - } = _Node.default.foldNewline(src, i, -1); - - str += fold; - i = offset; - } else if (ch === ' ' || ch === '\t') { - // trim trailing whitespace - const wsStart = i; - let next = src[i + 1]; - - while (i < end && (next === ' ' || next === '\t')) { - i += 1; - next = src[i + 1]; - } - - if (next !== '\n') str += i > wsStart ? src.slice(wsStart, i + 1) : ch; - } else { - str += ch; - } - } - - return str; - } - - parseBlockValue(start) { - const { - indent, - inFlow, - src - } = this.context; - let offset = start; - let valueEnd = start; - - for (let ch = src[offset]; ch === '\n'; ch = src[offset]) { - if (_Node.default.atDocumentBoundary(src, offset + 1)) break; - - const end = _Node.default.endOfBlockIndent(src, indent, offset + 1); - - if (end === null || src[end] === '#') break; - - if (src[end] === '\n') { - offset = end; - } else { - valueEnd = PlainValue.endOfLine(src, end, inFlow); - offset = valueEnd; - } - } - - if (this.valueRange.isEmpty()) this.valueRange.start = start; - this.valueRange.end = valueEnd; - return valueEnd; - } - /** - * Parses a plain value from the source - * - * Accepted forms are: - * ``` - * #comment - * - * first line - * - * first line #comment - * - * first line - * block - * lines - * - * #comment - * block - * lines - * ``` - * where block lines are empty or have an indent level greater than `indent`. - * - * @param {ParseContext} context - * @param {number} start - Index of first character - * @returns {number} - Index of the character after this scalar, may be `\n` - */ - - - parse(context, start) { - this.context = context; - const { - inFlow, - src - } = context; - let offset = start; - const ch = src[offset]; - - if (ch && ch !== '#' && ch !== '\n') { - offset = PlainValue.endOfLine(src, start, inFlow); - } - - this.valueRange = new _Range.default(start, offset); - offset = _Node.default.endOfWhiteSpace(src, offset); - offset = this.parseComment(offset); - - if (!this.hasComment || this.valueRange.isEmpty()) { - offset = this.parseBlockValue(offset); - } - - return offset; - } - - } - - exports.default = PlainValue; -}); -unwrapExports(PlainValue_1); - -var QuoteDouble_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - - var _Node = _interopRequireDefault(Node_1); - - var _Range = _interopRequireDefault(Range_1); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - - class QuoteDouble extends _Node.default { - static endOfQuote(src, offset) { - let ch = src[offset]; - - while (ch && ch !== '"') { - offset += ch === '\\' ? 2 : 1; - ch = src[offset]; - } - - return offset + 1; - } - /** - * @returns {string | { str: string, errors: YAMLSyntaxError[] }} - */ - - - get strValue() { - if (!this.valueRange || !this.context) return null; - const errors$1 = []; - const { - start, - end - } = this.valueRange; - const { - indent, - src - } = this.context; - if (src[end - 1] !== '"') errors$1.push(new errors.YAMLSyntaxError(this, 'Missing closing "quote')); // Using String#replace is too painful with escaped newlines preceded by - // escaped backslashes; also, this should be faster. - - let str = ''; - - for (let i = start + 1; i < end - 1; ++i) { - const ch = src[i]; - - if (ch === '\n') { - if (_Node.default.atDocumentBoundary(src, i + 1)) errors$1.push(new errors.YAMLSemanticError(this, 'Document boundary indicators are not allowed within string values')); - - const { - fold, - offset, - error - } = _Node.default.foldNewline(src, i, indent); - - str += fold; - i = offset; - if (error) errors$1.push(new errors.YAMLSemanticError(this, 'Multi-line double-quoted string needs to be sufficiently indented')); - } else if (ch === '\\') { - i += 1; - - switch (src[i]) { - case '0': - str += '\0'; - break; - // null character - - case 'a': - str += '\x07'; - break; - // bell character - - case 'b': - str += '\b'; - break; - // backspace - - case 'e': - str += '\x1b'; - break; - // escape character - - case 'f': - str += '\f'; - break; - // form feed - - case 'n': - str += '\n'; - break; - // line feed - - case 'r': - str += '\r'; - break; - // carriage return - - case 't': - str += '\t'; - break; - // horizontal tab - - case 'v': - str += '\v'; - break; - // vertical tab - - case 'N': - str += '\u0085'; - break; - // Unicode next line - - case '_': - str += '\u00a0'; - break; - // Unicode non-breaking space - - case 'L': - str += '\u2028'; - break; - // Unicode line separator - - case 'P': - str += '\u2029'; - break; - // Unicode paragraph separator - - case ' ': - str += ' '; - break; - - case '"': - str += '"'; - break; - - case '/': - str += '/'; - break; - - case '\\': - str += '\\'; - break; - - case '\t': - str += '\t'; - break; - - case 'x': - str += this.parseCharCode(i + 1, 2, errors$1); - i += 2; - break; - - case 'u': - str += this.parseCharCode(i + 1, 4, errors$1); - i += 4; - break; - - case 'U': - str += this.parseCharCode(i + 1, 8, errors$1); - i += 8; - break; - - case '\n': - // skip escaped newlines, but still trim the following line - while (src[i + 1] === ' ' || src[i + 1] === '\t') i += 1; - - break; - - default: - errors$1.push(new errors.YAMLSyntaxError(this, `Invalid escape sequence ${src.substr(i - 1, 2)}`)); - str += '\\' + src[i]; - } - } else if (ch === ' ' || ch === '\t') { - // trim trailing whitespace - const wsStart = i; - let next = src[i + 1]; - - while (next === ' ' || next === '\t') { - i += 1; - next = src[i + 1]; - } - - if (next !== '\n') str += i > wsStart ? src.slice(wsStart, i + 1) : ch; - } else { - str += ch; - } - } - - return errors$1.length > 0 ? { - errors: errors$1, - str - } : str; - } - - parseCharCode(offset, length, errors$1) { - const { - src - } = this.context; - const cc = src.substr(offset, length); - const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc); - const code = ok ? parseInt(cc, 16) : NaN; - - if (isNaN(code)) { - errors$1.push(new errors.YAMLSyntaxError(this, `Invalid escape sequence ${src.substr(offset - 2, length + 2)}`)); - return src.substr(offset - 2, length + 2); - } - - return String.fromCodePoint(code); - } - /** - * Parses a "double quoted" value from the source - * - * @param {ParseContext} context - * @param {number} start - Index of first character - * @returns {number} - Index of the character after this scalar - */ - - - parse(context, start) { - this.context = context; - const { - src - } = context; - let offset = QuoteDouble.endOfQuote(src, start + 1); - this.valueRange = new _Range.default(start, offset); - offset = _Node.default.endOfWhiteSpace(src, offset); - offset = this.parseComment(offset); - return offset; - } - - } - - exports.default = QuoteDouble; -}); -unwrapExports(QuoteDouble_1); - -var QuoteSingle_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - - var _Node = _interopRequireDefault(Node_1); - - var _Range = _interopRequireDefault(Range_1); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - - class QuoteSingle extends _Node.default { - static endOfQuote(src, offset) { - let ch = src[offset]; - - while (ch) { - if (ch === "'") { - if (src[offset + 1] !== "'") break; - ch = src[offset += 2]; - } else { - ch = src[offset += 1]; - } - } - - return offset + 1; - } - /** - * @returns {string | { str: string, errors: YAMLSyntaxError[] }} - */ - - - get strValue() { - if (!this.valueRange || !this.context) return null; - const errors$1 = []; - const { - start, - end - } = this.valueRange; - const { - indent, - src - } = this.context; - if (src[end - 1] !== "'") errors$1.push(new errors.YAMLSyntaxError(this, "Missing closing 'quote")); - let str = ''; - - for (let i = start + 1; i < end - 1; ++i) { - const ch = src[i]; - - if (ch === '\n') { - if (_Node.default.atDocumentBoundary(src, i + 1)) errors$1.push(new errors.YAMLSemanticError(this, 'Document boundary indicators are not allowed within string values')); - - const { - fold, - offset, - error - } = _Node.default.foldNewline(src, i, indent); - - str += fold; - i = offset; - if (error) errors$1.push(new errors.YAMLSemanticError(this, 'Multi-line single-quoted string needs to be sufficiently indented')); - } else if (ch === "'") { - str += ch; - i += 1; - if (src[i] !== "'") errors$1.push(new errors.YAMLSyntaxError(this, 'Unescaped single quote? This should not happen.')); - } else if (ch === ' ' || ch === '\t') { - // trim trailing whitespace - const wsStart = i; - let next = src[i + 1]; - - while (next === ' ' || next === '\t') { - i += 1; - next = src[i + 1]; - } - - if (next !== '\n') str += i > wsStart ? src.slice(wsStart, i + 1) : ch; - } else { - str += ch; - } - } - - return errors$1.length > 0 ? { - errors: errors$1, - str - } : str; - } - /** - * Parses a 'single quoted' value from the source - * - * @param {ParseContext} context - * @param {number} start - Index of first character - * @returns {number} - Index of the character after this scalar - */ - - - parse(context, start) { - this.context = context; - const { - src - } = context; - let offset = QuoteSingle.endOfQuote(src, start + 1); - this.valueRange = new _Range.default(start, offset); - offset = _Node.default.endOfWhiteSpace(src, offset); - offset = this.parseComment(offset); - return offset; - } - - } - - exports.default = QuoteSingle; -}); -unwrapExports(QuoteSingle_1); - -var ParseContext_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - - var _Alias = _interopRequireDefault(Alias_1); - - var _BlockValue = _interopRequireDefault(BlockValue_1); - - var _Collection = _interopRequireDefault(Collection_1); - - var _CollectionItem = _interopRequireDefault(CollectionItem_1); - - var _FlowCollection = _interopRequireDefault(FlowCollection_1); - - var _Node = _interopRequireDefault(Node_1); - - var _PlainValue = _interopRequireDefault(PlainValue_1); - - var _QuoteDouble = _interopRequireDefault(QuoteDouble_1); - - var _QuoteSingle = _interopRequireDefault(QuoteSingle_1); - - var _Range = _interopRequireDefault(Range_1); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } - - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - } - - function createNewNode(type, props) { - switch (type) { - case constants.Type.ALIAS: - return new _Alias.default(type, props); - - case constants.Type.BLOCK_FOLDED: - case constants.Type.BLOCK_LITERAL: - return new _BlockValue.default(type, props); - - case constants.Type.FLOW_MAP: - case constants.Type.FLOW_SEQ: - return new _FlowCollection.default(type, props); - - case constants.Type.MAP_KEY: - case constants.Type.MAP_VALUE: - case constants.Type.SEQ_ITEM: - return new _CollectionItem.default(type, props); - - case constants.Type.COMMENT: - case constants.Type.PLAIN: - return new _PlainValue.default(type, props); - - case constants.Type.QUOTE_DOUBLE: - return new _QuoteDouble.default(type, props); - - case constants.Type.QUOTE_SINGLE: - return new _QuoteSingle.default(type, props); - - /* istanbul ignore next */ - - default: - return null; - // should never happen - } - } - /** - * @param {boolean} atLineStart - Node starts at beginning of line - * @param {boolean} inFlow - true if currently in a flow context - * @param {boolean} inCollection - true if currently in a collection context - * @param {number} indent - Current level of indentation - * @param {number} lineStart - Start of the current line - * @param {Node} parent - The parent of the node - * @param {string} src - Source of the YAML document - */ - - - class ParseContext { - static parseType(src, offset, inFlow) { - switch (src[offset]) { - case '*': - return constants.Type.ALIAS; - - case '>': - return constants.Type.BLOCK_FOLDED; - - case '|': - return constants.Type.BLOCK_LITERAL; - - case '{': - return constants.Type.FLOW_MAP; - - case '[': - return constants.Type.FLOW_SEQ; - - case '?': - return !inFlow && _Node.default.atBlank(src, offset + 1, true) ? constants.Type.MAP_KEY : constants.Type.PLAIN; - - case ':': - return !inFlow && _Node.default.atBlank(src, offset + 1, true) ? constants.Type.MAP_VALUE : constants.Type.PLAIN; - - case '-': - return !inFlow && _Node.default.atBlank(src, offset + 1, true) ? constants.Type.SEQ_ITEM : constants.Type.PLAIN; - - case '"': - return constants.Type.QUOTE_DOUBLE; - - case "'": - return constants.Type.QUOTE_SINGLE; - - default: - return constants.Type.PLAIN; - } - } - - constructor(orig = {}, { - atLineStart, - inCollection, - inFlow, - indent, - lineStart, - parent - } = {}) { - _defineProperty(this, "parseNode", (overlay, start) => { - if (_Node.default.atDocumentBoundary(this.src, start)) return null; - const context = new ParseContext(this, overlay); - const { - props, - type, - valueStart - } = context.parseProps(start); - const node = createNewNode(type, props); - let offset = node.parse(context, valueStart); - node.range = new _Range.default(start, offset); - /* istanbul ignore if */ - - if (offset <= start) { - // This should never happen, but if it does, let's make sure to at least - // step one character forward to avoid a busy loop. - node.error = new Error(`Node#parse consumed no characters`); - node.error.parseEnd = offset; - node.error.source = node; - node.range.end = start + 1; - } - - if (context.nodeStartsCollection(node)) { - if (!node.error && !context.atLineStart && context.parent.type === constants.Type.DOCUMENT) { - node.error = new errors.YAMLSyntaxError(node, 'Block collection must not have preceding content here (e.g. directives-end indicator)'); - } - - const collection = new _Collection.default(node); - offset = collection.parse(new ParseContext(context), offset); - collection.range = new _Range.default(start, offset); - return collection; - } - - return node; - }); - - this.atLineStart = atLineStart != null ? atLineStart : orig.atLineStart || false; - this.inCollection = inCollection != null ? inCollection : orig.inCollection || false; - this.inFlow = inFlow != null ? inFlow : orig.inFlow || false; - this.indent = indent != null ? indent : orig.indent; - this.lineStart = lineStart != null ? lineStart : orig.lineStart; - this.parent = parent != null ? parent : orig.parent || {}; - this.root = orig.root; - this.src = orig.src; - } - - nodeStartsCollection(node) { - const { - inCollection, - inFlow, - src - } = this; - if (inCollection || inFlow) return false; - if (node instanceof _CollectionItem.default) return true; // check for implicit key - - let offset = node.range.end; - if (src[offset] === '\n' || src[offset - 1] === '\n') return false; - offset = _Node.default.endOfWhiteSpace(src, offset); - return src[offset] === ':'; - } // Anchor and tag are before type, which determines the node implementation - // class; hence this intermediate step. - - - parseProps(offset) { - const { - inFlow, - parent, - src - } = this; - const props = []; - let lineHasProps = false; - offset = _Node.default.endOfWhiteSpace(src, offset); - let ch = src[offset]; - - while (ch === constants.Char.ANCHOR || ch === constants.Char.COMMENT || ch === constants.Char.TAG || ch === '\n') { - if (ch === '\n') { - const lineStart = offset + 1; - - const inEnd = _Node.default.endOfIndent(src, lineStart); - - const indentDiff = inEnd - (lineStart + this.indent); - const noIndicatorAsIndent = parent.type === constants.Type.SEQ_ITEM && parent.context.atLineStart; - if (!_Node.default.nextNodeIsIndented(src[inEnd], indentDiff, !noIndicatorAsIndent)) break; - this.atLineStart = true; - this.lineStart = lineStart; - lineHasProps = false; - offset = inEnd; - } else if (ch === constants.Char.COMMENT) { - const end = _Node.default.endOfLine(src, offset + 1); - - props.push(new _Range.default(offset, end)); - offset = end; - } else { - let end = _Node.default.endOfIdentifier(src, offset + 1); - - if (ch === constants.Char.TAG && src[end] === ',' && /^[a-zA-Z0-9-]+\.[a-zA-Z0-9-]+,\d\d\d\d(-\d\d){0,2}\/\S/.test(src.slice(offset + 1, end + 13))) { - // Let's presume we're dealing with a YAML 1.0 domain tag here, rather - // than an empty but 'foo.bar' private-tagged node in a flow collection - // followed without whitespace by a plain string starting with a year - // or date divided by something. - end = _Node.default.endOfIdentifier(src, end + 5); - } - - props.push(new _Range.default(offset, end)); - lineHasProps = true; - offset = _Node.default.endOfWhiteSpace(src, end); - } - - ch = src[offset]; - } // '- &a : b' has an anchor on an empty node - - - if (lineHasProps && ch === ':' && _Node.default.atBlank(src, offset + 1, true)) offset -= 1; - const type = ParseContext.parseType(src, offset, inFlow); - return { - props, - type, - valueStart: offset - }; - } - /** - * Parses a node from the source - * @param {ParseContext} overlay - * @param {number} start - Index of first non-whitespace character for the node - * @returns {?Node} - null if at a document boundary - */ - - - } - - exports.default = ParseContext; -}); -unwrapExports(ParseContext_1); - -var parse_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = parse; - - var _Document = _interopRequireDefault(Document_1); - - var _ParseContext = _interopRequireDefault(ParseContext_1); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } // Published as 'yaml/parse-cst' - - - function parse(src) { - const cr = []; - - if (src.indexOf('\r') !== -1) { - src = src.replace(/\r\n?/g, (match, offset) => { - if (match.length > 1) cr.push(offset); - return '\n'; - }); - } - - const documents = []; - let offset = 0; - - do { - const doc = new _Document.default(); - const context = new _ParseContext.default({ - src - }); - offset = doc.parse(context, offset); - documents.push(doc); - } while (offset < src.length); - - documents.setOrigRanges = () => { - if (cr.length === 0) return false; - - for (let i = 1; i < cr.length; ++i) cr[i] -= i; - - let crOffset = 0; - - for (let i = 0; i < documents.length; ++i) { - crOffset = documents[i].setOrigRanges(cr, crOffset); - } - - cr.splice(0, cr.length); - return true; - }; - - documents.toString = () => documents.join('...\n'); - - return documents; - } -}); -unwrapExports(parse_1); - -var addComment_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.addCommentBefore = addCommentBefore; - exports.default = addComment; - - function addCommentBefore(str, indent, comment) { - if (!comment) return str; - const cc = comment.replace(/[\s\S]^/gm, `$&${indent}#`); - return `#${cc}\n${indent}${str}`; - } - - function addComment(str, indent, comment) { - return !comment ? str : comment.indexOf('\n') === -1 ? `${str} #${comment}` : `${str}\n` + comment.replace(/^/gm, `${indent || ''}#`); - } -}); -unwrapExports(addComment_1); -var addComment_2 = addComment_1.addCommentBefore; - -var toJSON_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = toJSON; - - function toJSON(value, arg, ctx) { - if (Array.isArray(value)) return value.map((v, i) => toJSON(v, String(i), ctx)); - - if (value && typeof value.toJSON === 'function') { - const anchor = ctx && ctx.anchors && ctx.anchors.find(a => a.node === value); - if (anchor) ctx.onCreate = res => { - anchor.res = res; - delete ctx.onCreate; - }; - const res = value.toJSON(arg, ctx); - if (anchor && ctx.onCreate) ctx.onCreate(res); - return res; - } - - return value; - } -}); -unwrapExports(toJSON_1); - -var Node_1$1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - - class Node {} - - exports.default = Node; -}); -unwrapExports(Node_1$1); - -var Scalar_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - - var _toJSON = _interopRequireDefault(toJSON_1); - - var _Node = _interopRequireDefault(Node_1$1); + case '#': + { + const comment = new Comment(); + offset = comment.parse({ + src + }, offset); + this.directives.push(comment); + atLineStart = false; + } + break; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } // Published as 'yaml/scalar' + case '%': + { + const directive = new Directive(); + offset = directive.parse({ + parent: this, + src + }, offset); + this.directives.push(directive); + hasDirectives = true; + atLineStart = false; + } + break; + default: + if (hasDirectives) { + this.error = new PlainValueEc8e588e.YAMLSemanticError(this, 'Missing directives-end indicator line'); + } else if (this.directives.length > 0) { + this.contents = this.directives; + this.directives = []; + } - class Scalar extends _Node.default { - constructor(value) { - super(); - this.value = value; + return offset; + } } - toJSON(arg, ctx) { - return ctx && ctx.keep ? this.value : (0, _toJSON.default)(this.value, arg, ctx); + if (src[offset]) { + this.directivesEndMarker = new PlainValueEc8e588e.Range(offset, offset + 3); + return offset + 3; } - toString() { - return String(this.value); + if (hasDirectives) { + this.error = new PlainValueEc8e588e.YAMLSemanticError(this, 'Missing directives-end indicator line'); + } else if (this.directives.length > 0) { + this.contents = this.directives; + this.directives = []; } + return offset; } - exports.default = Scalar; -}); -unwrapExports(Scalar_1); - -var Pair_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - - var _addComment = _interopRequireDefault(addComment_1); - - var _toJSON = _interopRequireDefault(toJSON_1); - - var _Collection = _interopRequireDefault(Collection_1$1); - - var _Node = _interopRequireDefault(Node_1$1); - - var _Scalar = _interopRequireDefault(Scalar_1); - - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } // Published as 'yaml/pair' + parseContents(start) { + const { + parseNode, + src + } = this.context; + if (!this.contents) this.contents = []; + let lineStart = start; + while (src[lineStart - 1] === '-') lineStart -= 1; - const stringifyKey = (key, jsKey, ctx) => { - if (jsKey === null) return ''; - if (typeof jsKey !== 'object') return String(jsKey); - if (key instanceof _Node.default && ctx && ctx.doc) return key.toString({ - anchors: {}, - doc: ctx.doc, - indent: '', - inFlow: true, - inStringifyKey: true - }); - return JSON.stringify(jsKey); - }; + let offset = PlainValueEc8e588e.Node.endOfWhiteSpace(src, start); + let atLineStart = lineStart === start; + this.valueRange = new PlainValueEc8e588e.Range(offset); - class Pair extends _Node.default { - constructor(key, value = null) { - super(); - this.key = key; - this.value = value; - this.type = 'PAIR'; - } + while (!PlainValueEc8e588e.Node.atDocumentBoundary(src, offset, PlainValueEc8e588e.Char.DOCUMENT_END)) { + switch (src[offset]) { + case '\n': + if (atLineStart) { + const blankLine = new BlankLine(); + offset = blankLine.parse({ + src + }, offset); - get commentBefore() { - return this.key && this.key.commentBefore; - } + if (offset < src.length) { + this.contents.push(blankLine); + } + } else { + offset += 1; + atLineStart = true; + } - set commentBefore(cb) { - if (this.key == null) this.key = new _Scalar.default(null); - this.key.commentBefore = cb; - } + lineStart = offset; + break; - addToJSMap(ctx, map) { - const key = (0, _toJSON.default)(this.key, '', ctx); + case '#': + { + const comment = new Comment(); + offset = comment.parse({ + src + }, offset); + this.contents.push(comment); + atLineStart = false; + } + break; - if (map instanceof Map) { - const value = (0, _toJSON.default)(this.value, key, ctx); - map.set(key, value); - } else if (map instanceof Set) { - map.add(key); - } else { - const stringKey = stringifyKey(this.key, key, ctx); - map[stringKey] = (0, _toJSON.default)(this.value, stringKey, ctx); + default: + { + const iEnd = PlainValueEc8e588e.Node.endOfIndent(src, offset); + const context = { + atLineStart, + indent: -1, + inFlow: false, + inCollection: false, + lineStart, + parent: this + }; + const node = parseNode(context, iEnd); + if (!node) return this.valueRange.end = iEnd; // at next document start + + this.contents.push(node); + offset = node.range.end; + atLineStart = false; + const ec = grabCollectionEndComments(node); + if (ec) Array.prototype.push.apply(this.contents, ec); + } } - return map; + offset = Document.startCommentOrEndBlankLine(src, offset); } - toJSON(_, ctx) { - const pair = ctx && ctx.mapAsMap ? new Map() : {}; - return this.addToJSMap(ctx, pair); - } + this.valueRange.end = offset; - toString(ctx, onComment, onChompKeep) { - if (!ctx || !ctx.doc) return JSON.stringify(this); - const { - simpleKeys - } = ctx.doc.options; - let { - key, - value - } = this; - let keyComment = key instanceof _Node.default && key.comment; - - if (simpleKeys) { - if (keyComment) { - throw new Error('With simple keys, key nodes cannot have comments'); - } + if (src[offset]) { + this.documentEndMarker = new PlainValueEc8e588e.Range(offset, offset + 3); + offset += 3; - if (key instanceof _Collection.default) { - const msg = 'With simple keys, collection cannot be used as a key value'; - throw new Error(msg); + if (src[offset]) { + offset = PlainValueEc8e588e.Node.endOfWhiteSpace(src, offset); + + if (src[offset] === '#') { + const comment = new Comment(); + offset = comment.parse({ + src + }, offset); + this.contents.push(comment); } - } - - const explicitKey = !simpleKeys && (!key || keyComment || key instanceof _Collection.default || key.type === constants.Type.BLOCK_FOLDED || key.type === constants.Type.BLOCK_LITERAL); - const { - doc, - indent - } = ctx; - ctx = Object.assign({}, ctx, { - implicitKey: !explicitKey, - indent: indent + ' ' - }); - let chompKeep = false; - let str = doc.schema.stringify(key, ctx, () => keyComment = null, () => chompKeep = true); - str = (0, _addComment.default)(str, ctx.indent, keyComment); - - if (ctx.allNullValues && !simpleKeys) { - if (this.comment) { - str = (0, _addComment.default)(str, ctx.indent, this.comment); - if (onComment) onComment(); - } else if (chompKeep && !keyComment && onChompKeep) onChompKeep(); - - return ctx.inFlow ? str : `? ${str}`; - } - - str = explicitKey ? `? ${str}\n${indent}:` : `${str}:`; - - if (this.comment) { - // expected (but not strictly required) to be a single-line comment - str = (0, _addComment.default)(str, ctx.indent, this.comment); - if (onComment) onComment(); - } - let vcb = ''; - let valueComment = null; + switch (src[offset]) { + case '\n': + offset += 1; + break; - if (value instanceof _Node.default) { - if (value.spaceBefore) vcb = '\n'; + case undefined: + break; - if (value.commentBefore) { - const cs = value.commentBefore.replace(/^/gm, `${ctx.indent}#`); - vcb += `\n${cs}`; + default: + this.error = new PlainValueEc8e588e.YAMLSyntaxError(this, 'Document end marker line cannot have a non-comment suffix'); } - - valueComment = value.comment; - } else if (value && typeof value === 'object') { - value = doc.schema.createNode(value, true); - } - - ctx.implicitKey = false; - if (!explicitKey && !this.comment && value instanceof _Scalar.default) ctx.indentAtStart = str.length + 1; - chompKeep = false; - const valueStr = doc.schema.stringify(value, ctx, () => valueComment = null, () => chompKeep = true); - let ws = ' '; - - if (vcb || this.comment) { - ws = `${vcb}\n${ctx.indent}`; - } else if (!explicitKey && value instanceof _Collection.default) { - const flow = valueStr[0] === '[' || valueStr[0] === '{'; - if (!flow || valueStr.includes('\n')) ws = `\n${ctx.indent}`; } - - if (chompKeep && !valueComment && onChompKeep) onChompKeep(); - return (0, _addComment.default)(str + ws + valueStr, ctx.indent, valueComment); } + return offset; } + /** + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this + */ - exports.default = Pair; -}); -unwrapExports(Pair_1); - -var Collection_1$1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = exports.isEmptyPath = void 0; - - var _addComment = _interopRequireDefault(addComment_1); - - var _Node = _interopRequireDefault(Node_1$1); - - var _Pair = _interopRequireDefault(Pair_1); - var _Scalar = _interopRequireDefault(Scalar_1); + parse(context, start) { + context.root = this; + this.context = context; + const { + src + } = context; + let offset = src.charCodeAt(start) === 0xfeff ? start + 1 : start; // skip BOM - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + offset = this.parseDirectives(offset); + offset = this.parseContents(offset); + return offset; } - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; + setOrigRanges(cr, offset) { + offset = super.setOrigRanges(cr, offset); + this.directives.forEach(node => { + offset = node.setOrigRanges(cr, offset); + }); + if (this.directivesEndMarker) offset = this.directivesEndMarker.setOrigRange(cr, offset); + this.contents.forEach(node => { + offset = node.setOrigRanges(cr, offset); + }); + if (this.documentEndMarker) offset = this.documentEndMarker.setOrigRange(cr, offset); + return offset; } - function collectionFromPath(schema, path, value) { - let v = value; + toString() { + const { + contents, + directives, + value + } = this; + if (value != null) return value; + let str = directives.join(''); - for (let i = path.length - 1; i >= 0; --i) { - const k = path[i]; - const o = Number.isInteger(k) && k >= 0 ? [] : {}; - o[k] = v; - v = o; + if (contents.length > 0) { + if (directives.length > 0 || contents[0].type === PlainValueEc8e588e.Type.COMMENT) str += '---\n'; + str += contents.join(''); } - return schema.createNode(v, false); - } // null, undefined, or an empty non-string iterable (e.g. []) + if (str[str.length - 1] !== '\n') str += '\n'; + return str; + } +} - const isEmptyPath = path => path == null || typeof path === 'object' && path[Symbol.iterator]().next().done; +class Alias extends PlainValueEc8e588e.Node { + /** + * Parses an *alias from the source + * + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this scalar + */ + parse(context, start) { + this.context = context; + const { + src + } = context; + let offset = PlainValueEc8e588e.Node.endOfIdentifier(src, start + 1); + this.valueRange = new PlainValueEc8e588e.Range(start + 1, offset); + offset = PlainValueEc8e588e.Node.endOfWhiteSpace(src, offset); + offset = this.parseComment(offset); + return offset; + } - exports.isEmptyPath = isEmptyPath; +} - class Collection extends _Node.default { - constructor(schema) { - super(); +const Chomp = { + CLIP: 'CLIP', + KEEP: 'KEEP', + STRIP: 'STRIP' +}; - _defineProperty(this, "items", []); +class BlockValue extends PlainValueEc8e588e.Node { + constructor(type, props) { + super(type, props); + this.blockIndent = null; + this.chomping = Chomp.CLIP; + this.header = null; + } - this.schema = schema; - } + get includesTrailingLines() { + return this.chomping === Chomp.KEEP; + } - addIn(path, value) { - if (isEmptyPath(path)) this.add(value);else { - const [key, ...rest] = path; - const node = this.get(key, true); - if (node instanceof Collection) node.addIn(rest, value);else if (node === undefined && this.schema) this.set(key, collectionFromPath(this.schema, rest, value));else throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`); - } - } + get strValue() { + if (!this.valueRange || !this.context) return null; + let { + start, + end + } = this.valueRange; + const { + indent, + src + } = this.context; + if (this.valueRange.isEmpty()) return ''; + let lastNewLine = null; + let ch = src[end - 1]; - deleteIn([key, ...rest]) { - if (rest.length === 0) return this.delete(key); - const node = this.get(key, true); - if (node instanceof Collection) return node.deleteIn(rest);else throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`); - } + while (ch === '\n' || ch === '\t' || ch === ' ') { + end -= 1; - getIn([key, ...rest], keepScalar) { - const node = this.get(key, true); - if (rest.length === 0) return !keepScalar && node instanceof _Scalar.default ? node.value : node;else return node instanceof Collection ? node.getIn(rest, keepScalar) : undefined; - } + if (end <= start) { + if (this.chomping === Chomp.KEEP) break;else return ''; // probably never happens + } - hasAllNullValues() { - return this.items.every(node => { - if (!(node instanceof _Pair.default)) return false; - const n = node.value; - return n == null || n instanceof _Scalar.default && n.value == null && !n.commentBefore && !n.comment && !n.tag; - }); + if (ch === '\n') lastNewLine = end; + ch = src[end - 1]; } - hasIn([key, ...rest]) { - if (rest.length === 0) return this.has(key); - const node = this.get(key, true); - return node instanceof Collection ? node.hasIn(rest) : false; - } + let keepStart = end + 1; - setIn([key, ...rest], value) { - if (rest.length === 0) { - this.set(key, value); + if (lastNewLine) { + if (this.chomping === Chomp.KEEP) { + keepStart = lastNewLine; + end = this.valueRange.end; } else { - const node = this.get(key, true); - if (node instanceof Collection) node.setIn(rest, value);else if (node === undefined && this.schema) this.set(key, collectionFromPath(this.schema, rest, value));else throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`); + end = lastNewLine; } - } // overridden in implementations - - /* istanbul ignore next */ - - - toJSON() { - return null; } - toString(ctx, { - blockItem, - flowChars, - isMap, - itemIndent - }, onComment, onChompKeep) { - const { - doc, - indent - } = ctx; - const inFlow = this.type && this.type.substr(0, 4) === 'FLOW' || ctx.inFlow; - if (inFlow) itemIndent += ' '; - const allNullValues = isMap && this.hasAllNullValues(); - ctx = Object.assign({}, ctx, { - allNullValues, - indent: itemIndent, - inFlow, - type: null - }); - let chompKeep = false; - let hasItemWithNewLine = false; - const nodes = this.items.reduce((nodes, item, i) => { - let comment; - - if (item) { - if (!chompKeep && item.spaceBefore) nodes.push({ - type: 'comment', - str: '' - }); - if (item.commentBefore) item.commentBefore.match(/^.*$/gm).forEach(line => { - nodes.push({ - type: 'comment', - str: `#${line}` - }); - }); - if (item.comment) comment = item.comment; - if (inFlow && (!chompKeep && item.spaceBefore || item.commentBefore || item.comment || item.key && (item.key.commentBefore || item.key.comment) || item.value && (item.value.commentBefore || item.value.comment))) hasItemWithNewLine = true; - } + const bi = indent + this.blockIndent; + const folded = this.type === PlainValueEc8e588e.Type.BLOCK_FOLDED; + let atStart = true; + let str = ''; + let sep = ''; + let prevMoreIndented = false; - chompKeep = false; - let str = doc.schema.stringify(item, ctx, () => comment = null, () => chompKeep = true); - if (inFlow && !hasItemWithNewLine && str.includes('\n')) hasItemWithNewLine = true; - if (inFlow && i < this.items.length - 1) str += ','; - str = (0, _addComment.default)(str, itemIndent, comment); - if (chompKeep && (comment || inFlow)) chompKeep = false; - nodes.push({ - type: 'item', - str - }); - return nodes; - }, []); - let str; + for (let i = start; i < end; ++i) { + for (let j = 0; j < bi; ++j) { + if (src[i] !== ' ') break; + i += 1; + } - if (nodes.length === 0) { - str = flowChars.start + flowChars.end; - } else if (inFlow) { - const { - start, - end - } = flowChars; - const strings = nodes.map(n => n.str); + const ch = src[i]; - if (hasItemWithNewLine || strings.reduce((sum, str) => sum + str.length + 2, 2) > Collection.maxFlowStringSingleLineLength) { - str = start; + if (ch === '\n') { + if (sep === '\n') str += '\n';else sep = '\n'; + } else { + const lineEnd = PlainValueEc8e588e.Node.endOfLine(src, i); + const line = src.slice(i, lineEnd); + i = lineEnd; - for (const s of strings) { - str += s ? `\n ${indent}${s}` : '\n'; - } + if (folded && (ch === ' ' || ch === '\t') && i < keepStart) { + if (sep === ' ') sep = '\n';else if (!prevMoreIndented && !atStart && sep === '\n') sep = '\n\n'; + str += sep + line; //+ ((lineEnd < end && src[lineEnd]) || '') - str += `\n${indent}${end}`; + sep = lineEnd < end && src[lineEnd] || ''; + prevMoreIndented = true; } else { - str = `${start} ${strings.join(' ')} ${end}`; + str += sep + line; + sep = folded && i < keepStart ? ' ' : '\n'; + prevMoreIndented = false; } - } else { - const strings = nodes.map(blockItem); - str = strings.shift(); - for (const s of strings) str += s ? `\n${indent}${s}` : '\n'; + if (atStart && line !== '') atStart = false; } - - if (this.comment) { - str += '\n' + this.comment.replace(/^/gm, `${indent}#`); - if (onComment) onComment(); - } else if (chompKeep && onChompKeep) onChompKeep(); - - return str; } + return this.chomping === Chomp.STRIP ? str : str + '\n'; } - exports.default = Collection; - - _defineProperty(Collection, "maxFlowStringSingleLineLength", 60); -}); -unwrapExports(Collection_1$1); -var Collection_2$1 = Collection_1$1.isEmptyPath; - -var Alias_1$1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; + parseBlockHeader(start) { + const { + src + } = this.context; + let offset = start + 1; + let bi = ''; - var _toJSON = _interopRequireDefault(toJSON_1); + while (true) { + const ch = src[offset]; - var _Collection = _interopRequireDefault(Collection_1$1); + switch (ch) { + case '-': + this.chomping = Chomp.STRIP; + break; - var _Node = _interopRequireDefault(Node_1$1); + case '+': + this.chomping = Chomp.KEEP; + break; - var _Pair = _interopRequireDefault(Pair_1); + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + bi += ch; + break; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } + default: + this.blockIndent = Number(bi) || null; + this.header = new PlainValueEc8e588e.Range(start, offset); + return offset; + } - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; + offset += 1; } - - return obj; } - const getAliasCount = (node, anchors) => { - if (node instanceof Alias) { - const anchor = anchors.find(a => a.node === node.source); - return anchor.count * anchor.aliasCount; - } else if (node instanceof _Collection.default) { - let count = 0; - - for (const item of node.items) { - const c = getAliasCount(item, anchors); - if (c > count) count = c; - } + parseBlockValue(start) { + const { + indent, + src + } = this.context; + const explicit = !!this.blockIndent; + let offset = start; + let valueEnd = start; + let minBlockIndent = 1; - return count; - } else if (node instanceof _Pair.default) { - const kc = getAliasCount(node.key, anchors); - const vc = getAliasCount(node.value, anchors); - return Math.max(kc, vc); - } + for (let ch = src[offset]; ch === '\n'; ch = src[offset]) { + offset += 1; + if (PlainValueEc8e588e.Node.atDocumentBoundary(src, offset)) break; + const end = PlainValueEc8e588e.Node.endOfBlockIndent(src, indent, offset); // should not include tab? + + if (end === null) break; + const ch = src[end]; + const lineIndent = end - (offset + indent); + + if (!this.blockIndent) { + // no explicit block indent, none yet detected + if (src[end] !== '\n') { + // first line with non-whitespace content + if (lineIndent < minBlockIndent) { + const msg = 'Block scalars with more-indented leading empty lines must use an explicit indentation indicator'; + this.error = new PlainValueEc8e588e.YAMLSemanticError(this, msg); + } - return 1; - }; + this.blockIndent = lineIndent; + } else if (lineIndent > minBlockIndent) { + // empty line with more whitespace + minBlockIndent = lineIndent; + } + } else if (ch && ch !== '\n' && lineIndent < this.blockIndent) { + if (src[end] === '#') break; - class Alias extends _Node.default { - static stringify({ - range, - source - }, { - anchors, - doc, - implicitKey, - inStringifyKey - }) { - let anchor = Object.keys(anchors).find(a => anchors[a] === source); - if (!anchor && inStringifyKey) anchor = doc.anchors.getName(source) || doc.anchors.newName(); - if (anchor) return `*${anchor}${implicitKey ? ' ' : ''}`; - const msg = doc.anchors.getName(source) ? 'Alias node must be after source node' : 'Source node not found for alias node'; - throw new Error(`${msg} [${range}]`); - } + if (!this.error) { + const src = explicit ? 'explicit indentation indicator' : 'first line'; + const msg = `Block scalars must not be less indented than their ${src}`; + this.error = new PlainValueEc8e588e.YAMLSemanticError(this, msg); + } + } - constructor(source) { - super(); - this.source = source; - this.type = constants.Type.ALIAS; + if (src[end] === '\n') { + offset = end; + } else { + offset = valueEnd = PlainValueEc8e588e.Node.endOfLine(src, end); + } } - set tag(t) { - throw new Error('Alias nodes cannot have tags'); + if (this.chomping !== Chomp.KEEP) { + offset = src[valueEnd] ? valueEnd + 1 : valueEnd; } - toJSON(arg, ctx) { - if (!ctx) return (0, _toJSON.default)(this.source, arg, ctx); - const { - anchors, - maxAliasCount - } = ctx; - const anchor = anchors.find(a => a.node === this.source); - /* istanbul ignore if */ - - if (!anchor || anchor.res === undefined) { - const msg = 'This should not happen: Alias anchor was not resolved?'; - if (this.cstNode) throw new errors.YAMLReferenceError(this.cstNode, msg);else throw new ReferenceError(msg); - } + this.valueRange = new PlainValueEc8e588e.Range(start + 1, offset); + return offset; + } + /** + * Parses a block value from the source + * + * Accepted forms are: + * ``` + * BS + * block + * lines + * + * BS #comment + * block + * lines + * ``` + * where the block style BS matches the regexp `[|>][-+1-9]*` and block lines + * are empty or have an indent level greater than `indent`. + * + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this block + */ - if (maxAliasCount >= 0) { - anchor.count += 1; - if (anchor.aliasCount === 0) anchor.aliasCount = getAliasCount(this.source, anchors); - if (anchor.count * anchor.aliasCount > maxAliasCount) { - const msg = 'Excessive alias count indicates a resource exhaustion attack'; - if (this.cstNode) throw new errors.YAMLReferenceError(this.cstNode, msg);else throw new ReferenceError(msg); - } - } + parse(context, start) { + this.context = context; + const { + src + } = context; + let offset = this.parseBlockHeader(start); + offset = PlainValueEc8e588e.Node.endOfWhiteSpace(src, offset); + offset = this.parseComment(offset); + offset = this.parseBlockValue(offset); + return offset; + } - return anchor.res; - } // Only called when stringifying an alias mapping key while constructing - // Object output. + setOrigRanges(cr, offset) { + offset = super.setOrigRanges(cr, offset); + return this.header ? this.header.setOrigRange(cr, offset) : offset; + } +} - toString(ctx) { - return Alias.stringify(this, ctx); - } +class FlowCollection extends PlainValueEc8e588e.Node { + constructor(type, props) { + super(type, props); + this.items = null; + } + prevNodeIsJsonLike(idx = this.items.length) { + const node = this.items[idx - 1]; + return !!node && (node.jsonLike || node.type === PlainValueEc8e588e.Type.COMMENT && this.prevNodeIsJsonLike(idx - 1)); } + /** + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this + */ - exports.default = Alias; - _defineProperty(Alias, "default", true); -}); -unwrapExports(Alias_1$1); + parse(context, start) { + this.context = context; + const { + parseNode, + src + } = context; + let { + indent, + lineStart + } = context; + let char = src[start]; // { or [ + + this.items = [{ + char, + offset: start + }]; + let offset = PlainValueEc8e588e.Node.endOfWhiteSpace(src, start + 1); + char = src[offset]; + + while (char && char !== ']' && char !== '}') { + switch (char) { + case '\n': + { + lineStart = offset + 1; + const wsEnd = PlainValueEc8e588e.Node.endOfWhiteSpace(src, lineStart); -var _Map = createCommonjsModule(function (module, exports) { + if (src[wsEnd] === '\n') { + const blankLine = new BlankLine(); + lineStart = blankLine.parse({ + src + }, lineStart); + this.items.push(blankLine); + } - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.findPair = findPair; - exports.default = void 0; + offset = PlainValueEc8e588e.Node.endOfIndent(src, lineStart); - var _Collection = _interopRequireDefault(Collection_1$1); + if (offset <= lineStart + indent) { + char = src[offset]; - var _Pair = _interopRequireDefault(Pair_1); + if (offset < lineStart + indent || char !== ']' && char !== '}') { + const msg = 'Insufficient indentation in flow collection'; + this.error = new PlainValueEc8e588e.YAMLSemanticError(this, msg); + } + } + } + break; - var _Scalar = _interopRequireDefault(Scalar_1); + case ',': + { + this.items.push({ + char, + offset + }); + offset += 1; + } + break; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } + case '#': + { + const comment = new Comment(); + offset = comment.parse({ + src + }, offset); + this.items.push(comment); + } + break; - function findPair(items, key) { - const k = key instanceof _Scalar.default ? key.value : key; + case '?': + case ':': + { + const next = src[offset + 1]; - for (const it of items) { - if (it instanceof _Pair.default) { - if (it.key === key || it.key === k) return it; - if (it.key && it.key.value === k) return it; - } - } + if (next === '\n' || next === '\t' || next === ' ' || next === ',' || // in-flow : after JSON-like key does not need to be followed by whitespace + char === ':' && this.prevNodeIsJsonLike()) { + this.items.push({ + char, + offset + }); + offset += 1; + break; + } + } + // fallthrough - return undefined; - } + default: + { + const node = parseNode({ + atLineStart: false, + inCollection: false, + inFlow: true, + indent: -1, + lineStart, + parent: this + }, offset); - class YAMLMap extends _Collection.default { - add(pair, overwrite) { - if (!pair) pair = new _Pair.default(pair);else if (!(pair instanceof _Pair.default)) pair = new _Pair.default(pair.key || pair, pair.value); - const prev = findPair(this.items, pair.key); - const sortEntries = this.schema && this.schema.sortMapEntries; + if (!node) { + // at next document start + this.valueRange = new PlainValueEc8e588e.Range(start, offset); + return offset; + } - if (prev) { - if (overwrite) prev.value = pair.value;else throw new Error(`Key ${pair.key} already set`); - } else if (sortEntries) { - const i = this.items.findIndex(item => sortEntries(pair, item) < 0); - if (i === -1) this.items.push(pair);else this.items.splice(i, 0, pair); - } else { - this.items.push(pair); + this.items.push(node); + offset = PlainValueEc8e588e.Node.normalizeOffset(src, node.range.end); + } } - } - delete(key) { - const it = findPair(this.items, key); - if (!it) return false; - const del = this.items.splice(this.items.indexOf(it), 1); - return del.length > 0; + offset = PlainValueEc8e588e.Node.endOfWhiteSpace(src, offset); + char = src[offset]; } - get(key, keepScalar) { - const it = findPair(this.items, key); - const node = it && it.value; - return !keepScalar && node instanceof _Scalar.default ? node.value : node; - } + this.valueRange = new PlainValueEc8e588e.Range(start, offset + 1); - has(key) { - return !!findPair(this.items, key); + if (char) { + this.items.push({ + char, + offset + }); + offset = PlainValueEc8e588e.Node.endOfWhiteSpace(src, offset + 1); + offset = this.parseComment(offset); } - set(key, value) { - this.add(new _Pair.default(key, value), true); - } - /** - * @param {*} arg ignored - * @param {*} ctx Conversion context, originally set in Document#toJSON() - * @param {Class} Type If set, forces the returned collection type - * @returns {*} Instance of Type, Map, or Object - */ + return offset; + } + setOrigRanges(cr, offset) { + offset = super.setOrigRanges(cr, offset); + this.items.forEach(node => { + if (node instanceof PlainValueEc8e588e.Node) { + offset = node.setOrigRanges(cr, offset); + } else if (cr.length === 0) { + node.origOffset = node.offset; + } else { + let i = offset; - toJSON(_, ctx, Type) { - const map = Type ? new Type() : ctx && ctx.mapAsMap ? new Map() : {}; - if (ctx && ctx.onCreate) ctx.onCreate(map); + while (i < cr.length) { + if (cr[i] > node.offset) break;else ++i; + } - for (const item of this.items) item.addToJSMap(ctx, map); + node.origOffset = node.offset + i; + offset = i; + } + }); + return offset; + } - return map; - } + toString() { + const { + context: { + src + }, + items, + range, + value + } = this; + if (value != null) return value; + const nodes = items.filter(item => item instanceof PlainValueEc8e588e.Node); + let str = ''; + let prevEnd = range.start; + nodes.forEach(node => { + const prefix = src.slice(prevEnd, node.range.start); + prevEnd = node.range.end; + str += prefix + String(node); + + if (str[str.length - 1] === '\n' && src[prevEnd - 1] !== '\n' && src[prevEnd] === '\n') { + // Comment range does not include the terminal newline, but its + // stringified value does. Without this fix, newlines at comment ends + // get duplicated. + prevEnd += 1; + } + }); + str += src.slice(prevEnd, range.end); + return PlainValueEc8e588e.Node.addStringTerminator(src, range.end, str); + } - toString(ctx, onComment, onChompKeep) { - if (!ctx) return JSON.stringify(this); +} - for (const item of this.items) { - if (!(item instanceof _Pair.default)) throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`); - } +class QuoteDouble extends PlainValueEc8e588e.Node { + static endOfQuote(src, offset) { + let ch = src[offset]; - return super.toString(ctx, { - blockItem: n => n.str, - flowChars: { - start: '{', - end: '}' - }, - isMap: true, - itemIndent: ctx.indent || '' - }, onComment, onChompKeep); + while (ch && ch !== '"') { + offset += ch === '\\' ? 2 : 1; + ch = src[offset]; } + return offset + 1; } + /** + * @returns {string | { str: string, errors: YAMLSyntaxError[] }} + */ - exports.default = YAMLMap; -}); - -unwrapExports(_Map); -var _Map_1 = _Map.findPair; -var Seq = createCommonjsModule(function (module, exports) { + get strValue() { + if (!this.valueRange || !this.context) return null; + const errors = []; + const { + start, + end + } = this.valueRange; + const { + indent, + src + } = this.context; + if (src[end - 1] !== '"') errors.push(new PlainValueEc8e588e.YAMLSyntaxError(this, 'Missing closing "quote')); // Using String#replace is too painful with escaped newlines preceded by + // escaped backslashes; also, this should be faster. - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; + let str = ''; - var _toJSON = _interopRequireDefault(toJSON_1); + for (let i = start + 1; i < end - 1; ++i) { + const ch = src[i]; - var _Collection = _interopRequireDefault(Collection_1$1); + if (ch === '\n') { + if (PlainValueEc8e588e.Node.atDocumentBoundary(src, i + 1)) errors.push(new PlainValueEc8e588e.YAMLSemanticError(this, 'Document boundary indicators are not allowed within string values')); + const { + fold, + offset, + error + } = PlainValueEc8e588e.Node.foldNewline(src, i, indent); + str += fold; + i = offset; + if (error) errors.push(new PlainValueEc8e588e.YAMLSemanticError(this, 'Multi-line double-quoted string needs to be sufficiently indented')); + } else if (ch === '\\') { + i += 1; - var _Scalar = _interopRequireDefault(Scalar_1); + switch (src[i]) { + case '0': + str += '\0'; + break; + // null character - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } // Published as 'yaml/seq' + case 'a': + str += '\x07'; + break; + // bell character + case 'b': + str += '\b'; + break; + // backspace - function asItemIndex(key) { - let idx = key instanceof _Scalar.default ? key.value : key; - if (idx && typeof idx === 'string') idx = Number(idx); - return Number.isInteger(idx) && idx >= 0 ? idx : null; - } + case 'e': + str += '\x1b'; + break; + // escape character - class YAMLSeq extends _Collection.default { - add(value) { - this.items.push(value); - } + case 'f': + str += '\f'; + break; + // form feed - delete(key) { - const idx = asItemIndex(key); - if (typeof idx !== 'number') return false; - const del = this.items.splice(idx, 1); - return del.length > 0; - } + case 'n': + str += '\n'; + break; + // line feed - get(key, keepScalar) { - const idx = asItemIndex(key); - if (typeof idx !== 'number') return undefined; - const it = this.items[idx]; - return !keepScalar && it instanceof _Scalar.default ? it.value : it; - } + case 'r': + str += '\r'; + break; + // carriage return - has(key) { - const idx = asItemIndex(key); - return typeof idx === 'number' && idx < this.items.length; - } + case 't': + str += '\t'; + break; + // horizontal tab - set(key, value) { - const idx = asItemIndex(key); - if (typeof idx !== 'number') throw new Error(`Expected a valid index, not ${key}.`); - this.items[idx] = value; - } + case 'v': + str += '\v'; + break; + // vertical tab - toJSON(_, ctx) { - const seq = []; - if (ctx && ctx.onCreate) ctx.onCreate(seq); - let i = 0; + case 'N': + str += '\u0085'; + break; + // Unicode next line - for (const item of this.items) seq.push((0, _toJSON.default)(item, String(i++), ctx)); + case '_': + str += '\u00a0'; + break; + // Unicode non-breaking space - return seq; - } + case 'L': + str += '\u2028'; + break; + // Unicode line separator - toString(ctx, onComment, onChompKeep) { - if (!ctx) return JSON.stringify(this); - return super.toString(ctx, { - blockItem: n => n.type === 'comment' ? n.str : `- ${n.str}`, - flowChars: { - start: '[', - end: ']' - }, - isMap: false, - itemIndent: (ctx.indent || '') + ' ' - }, onComment, onChompKeep); - } + case 'P': + str += '\u2029'; + break; + // Unicode paragraph separator - } + case ' ': + str += ' '; + break; - exports.default = YAMLSeq; -}); -unwrapExports(Seq); + case '"': + str += '"'; + break; -var Merge_1 = createCommonjsModule(function (module, exports) { + case '/': + str += '/'; + break; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = exports.MERGE_KEY = void 0; + case '\\': + str += '\\'; + break; - var _Map$1 = _interopRequireDefault(_Map); + case '\t': + str += '\t'; + break; - var _Pair = _interopRequireDefault(Pair_1); + case 'x': + str += this.parseCharCode(i + 1, 2, errors); + i += 2; + break; - var _Scalar = _interopRequireDefault(Scalar_1); + case 'u': + str += this.parseCharCode(i + 1, 4, errors); + i += 4; + break; - var _Seq = _interopRequireDefault(Seq); + case 'U': + str += this.parseCharCode(i + 1, 8, errors); + i += 8; + break; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } + case '\n': + // skip escaped newlines, but still trim the following line + while (src[i + 1] === ' ' || src[i + 1] === '\t') i += 1; - const MERGE_KEY = '<<'; - exports.MERGE_KEY = MERGE_KEY; + break; - class Merge extends _Pair.default { - constructor(pair) { - if (pair instanceof _Pair.default) { - let seq = pair.value; + default: + errors.push(new PlainValueEc8e588e.YAMLSyntaxError(this, `Invalid escape sequence ${src.substr(i - 1, 2)}`)); + str += '\\' + src[i]; + } + } else if (ch === ' ' || ch === '\t') { + // trim trailing whitespace + const wsStart = i; + let next = src[i + 1]; - if (!(seq instanceof _Seq.default)) { - seq = new _Seq.default(); - seq.items.push(pair.value); - seq.range = pair.value.range; + while (next === ' ' || next === '\t') { + i += 1; + next = src[i + 1]; } - super(pair.key, seq); - this.range = pair.range; + if (next !== '\n') str += i > wsStart ? src.slice(wsStart, i + 1) : ch; } else { - super(new _Scalar.default(MERGE_KEY), new _Seq.default()); - } - - this.type = 'MERGE_PAIR'; - } // If the value associated with a merge key is a single mapping node, each of - // its key/value pairs is inserted into the current mapping, unless the key - // already exists in it. If the value associated with the merge key is a - // sequence, then this sequence is expected to contain mapping nodes and each - // of these nodes is merged in turn according to its order in the sequence. - // Keys in mapping nodes earlier in the sequence override keys specified in - // later mapping nodes. -- http://yaml.org/type/merge.html - - - addToJSMap(ctx, map) { - for (const { - source - } of this.value.items) { - if (!(source instanceof _Map$1.default)) throw new Error('Merge sources must be maps'); - const srcMap = source.toJSON(null, ctx, Map); - - for (const [key, value] of srcMap) { - if (map instanceof Map) { - if (!map.has(key)) map.set(key, value); - } else if (map instanceof Set) { - map.add(key); - } else { - if (!Object.prototype.hasOwnProperty.call(map, key)) map[key] = value; - } - } + str += ch; } - - return map; - } - - toString(ctx, onComment) { - const seq = this.value; - if (seq.items.length > 1) return super.toString(ctx, onComment); - this.value = seq.items[0]; - const str = super.toString(ctx, onComment); - this.value = seq; - return str; } + return errors.length > 0 ? { + errors, + str + } : str; } - exports.default = Merge; -}); -unwrapExports(Merge_1); -var Merge_2 = Merge_1.MERGE_KEY; - -var Anchors_1 = createCommonjsModule(function (module, exports) { - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; + parseCharCode(offset, length, errors) { + const { + src + } = this.context; + const cc = src.substr(offset, length); + const ok = cc.length === length && /^[0-9a-fA-F]+$/.test(cc); + const code = ok ? parseInt(cc, 16) : NaN; - var _Alias = _interopRequireDefault(Alias_1$1); + if (isNaN(code)) { + errors.push(new PlainValueEc8e588e.YAMLSyntaxError(this, `Invalid escape sequence ${src.substr(offset - 2, length + 2)}`)); + return src.substr(offset - 2, length + 2); + } - var _Map$1 = _interopRequireDefault(_Map); + return String.fromCodePoint(code); + } + /** + * Parses a "double quoted" value from the source + * + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this scalar + */ - var _Merge = _interopRequireDefault(Merge_1); - var _Scalar = _interopRequireDefault(Scalar_1); + parse(context, start) { + this.context = context; + const { + src + } = context; + let offset = QuoteDouble.endOfQuote(src, start + 1); + this.valueRange = new PlainValueEc8e588e.Range(start, offset); + offset = PlainValueEc8e588e.Node.endOfWhiteSpace(src, offset); + offset = this.parseComment(offset); + return offset; + } - var _Seq = _interopRequireDefault(Seq); +} - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } +class QuoteSingle extends PlainValueEc8e588e.Node { + static endOfQuote(src, offset) { + let ch = src[offset]; - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; + while (ch) { + if (ch === "'") { + if (src[offset + 1] !== "'") break; + ch = src[offset += 2]; + } else { + ch = src[offset += 1]; + } } - return obj; + return offset + 1; } + /** + * @returns {string | { str: string, errors: YAMLSyntaxError[] }} + */ - class Anchors { - static validAnchorNode(node) { - return node instanceof _Scalar.default || node instanceof _Seq.default || node instanceof _Map$1.default; - } - constructor(prefix) { - _defineProperty(this, "map", {}); + get strValue() { + if (!this.valueRange || !this.context) return null; + const errors = []; + const { + start, + end + } = this.valueRange; + const { + indent, + src + } = this.context; + if (src[end - 1] !== "'") errors.push(new PlainValueEc8e588e.YAMLSyntaxError(this, "Missing closing 'quote")); + let str = ''; - this.prefix = prefix; - } + for (let i = start + 1; i < end - 1; ++i) { + const ch = src[i]; - createAlias(node, name) { - this.setAnchor(node, name); - return new _Alias.default(node); - } + if (ch === '\n') { + if (PlainValueEc8e588e.Node.atDocumentBoundary(src, i + 1)) errors.push(new PlainValueEc8e588e.YAMLSemanticError(this, 'Document boundary indicators are not allowed within string values')); + const { + fold, + offset, + error + } = PlainValueEc8e588e.Node.foldNewline(src, i, indent); + str += fold; + i = offset; + if (error) errors.push(new PlainValueEc8e588e.YAMLSemanticError(this, 'Multi-line single-quoted string needs to be sufficiently indented')); + } else if (ch === "'") { + str += ch; + i += 1; + if (src[i] !== "'") errors.push(new PlainValueEc8e588e.YAMLSyntaxError(this, 'Unescaped single quote? This should not happen.')); + } else if (ch === ' ' || ch === '\t') { + // trim trailing whitespace + const wsStart = i; + let next = src[i + 1]; - createMergePair(...sources) { - const merge = new _Merge.default(); - merge.value.items = sources.map(s => { - if (s instanceof _Alias.default) { - if (s.source instanceof _Map$1.default) return s; - } else if (s instanceof _Map$1.default) { - return this.createAlias(s); + while (next === ' ' || next === '\t') { + i += 1; + next = src[i + 1]; } - throw new Error('Merge sources must be Map nodes or their Aliases'); - }); - return merge; - } - - getName(node) { - const { - map - } = this; - return Object.keys(map).find(a => map[a] === node); + if (next !== '\n') str += i > wsStart ? src.slice(wsStart, i + 1) : ch; + } else { + str += ch; + } } - getNode(name) { - return this.map[name]; - } + return errors.length > 0 ? { + errors, + str + } : str; + } + /** + * Parses a 'single quoted' value from the source + * + * @param {ParseContext} context + * @param {number} start - Index of first character + * @returns {number} - Index of the character after this scalar + */ - newName(prefix) { - if (!prefix) prefix = this.prefix; - const names = Object.keys(this.map); - for (let i = 1; true; ++i) { - const name = `${prefix}${i}`; - if (!names.includes(name)) return name; - } - } // During parsing, map & aliases contain CST nodes + parse(context, start) { + this.context = context; + const { + src + } = context; + let offset = QuoteSingle.endOfQuote(src, start + 1); + this.valueRange = new PlainValueEc8e588e.Range(start, offset); + offset = PlainValueEc8e588e.Node.endOfWhiteSpace(src, offset); + offset = this.parseComment(offset); + return offset; + } +} - resolveNodes() { - const { - map, - _cstAliases - } = this; - Object.keys(map).forEach(a => { - map[a] = map[a].resolved; - }); +function createNewNode(type, props) { + switch (type) { + case PlainValueEc8e588e.Type.ALIAS: + return new Alias(type, props); - _cstAliases.forEach(a => { - a.source = a.source.resolved; - }); + case PlainValueEc8e588e.Type.BLOCK_FOLDED: + case PlainValueEc8e588e.Type.BLOCK_LITERAL: + return new BlockValue(type, props); - delete this._cstAliases; - } + case PlainValueEc8e588e.Type.FLOW_MAP: + case PlainValueEc8e588e.Type.FLOW_SEQ: + return new FlowCollection(type, props); - setAnchor(node, name) { - if (node != null && !Anchors.validAnchorNode(node)) { - throw new Error('Anchors may only be set for Scalar, Seq and Map nodes'); - } + case PlainValueEc8e588e.Type.MAP_KEY: + case PlainValueEc8e588e.Type.MAP_VALUE: + case PlainValueEc8e588e.Type.SEQ_ITEM: + return new CollectionItem(type, props); - if (name && /[\x00-\x19\s,[\]{}]/.test(name)) { - throw new Error('Anchor names must not contain whitespace or control characters'); - } + case PlainValueEc8e588e.Type.COMMENT: + case PlainValueEc8e588e.Type.PLAIN: + return new PlainValueEc8e588e.PlainValue(type, props); - const { - map - } = this; - const prev = node && Object.keys(map).find(a => map[a] === node); - - if (prev) { - if (!name) { - return prev; - } else if (prev !== name) { - delete map[prev]; - map[name] = node; - } - } else { - if (!name) { - if (!node) return null; - name = this.newName(); - } + case PlainValueEc8e588e.Type.QUOTE_DOUBLE: + return new QuoteDouble(type, props); - map[name] = node; - } + case PlainValueEc8e588e.Type.QUOTE_SINGLE: + return new QuoteSingle(type, props); - return name; - } + /* istanbul ignore next */ + default: + return null; + // should never happen } +} +/** + * @param {boolean} atLineStart - Node starts at beginning of line + * @param {boolean} inFlow - true if currently in a flow context + * @param {boolean} inCollection - true if currently in a collection context + * @param {number} indent - Current level of indentation + * @param {number} lineStart - Start of the current line + * @param {Node} parent - The parent of the node + * @param {string} src - Source of the YAML document + */ - exports.default = Anchors; -}); -unwrapExports(Anchors_1); -var listTagNames = createCommonjsModule(function (module, exports) { +class ParseContext { + static parseType(src, offset, inFlow) { + switch (src[offset]) { + case '*': + return PlainValueEc8e588e.Type.ALIAS; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; + case '>': + return PlainValueEc8e588e.Type.BLOCK_FOLDED; + + case '|': + return PlainValueEc8e588e.Type.BLOCK_LITERAL; - var _Collection = _interopRequireDefault(Collection_1$1); + case '{': + return PlainValueEc8e588e.Type.FLOW_MAP; - var _Pair = _interopRequireDefault(Pair_1); + case '[': + return PlainValueEc8e588e.Type.FLOW_SEQ; - var _Scalar = _interopRequireDefault(Scalar_1); + case '?': + return !inFlow && PlainValueEc8e588e.Node.atBlank(src, offset + 1, true) ? PlainValueEc8e588e.Type.MAP_KEY : PlainValueEc8e588e.Type.PLAIN; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } + case ':': + return !inFlow && PlainValueEc8e588e.Node.atBlank(src, offset + 1, true) ? PlainValueEc8e588e.Type.MAP_VALUE : PlainValueEc8e588e.Type.PLAIN; - const visit = (node, tags) => { - if (node && typeof node === 'object') { - const { - tag - } = node; + case '-': + return !inFlow && PlainValueEc8e588e.Node.atBlank(src, offset + 1, true) ? PlainValueEc8e588e.Type.SEQ_ITEM : PlainValueEc8e588e.Type.PLAIN; - if (node instanceof _Collection.default) { - if (tag) tags[tag] = true; - node.items.forEach(n => visit(n, tags)); - } else if (node instanceof _Pair.default) { - visit(node.key, tags); - visit(node.value, tags); - } else if (node instanceof _Scalar.default) { - if (tag) tags[tag] = true; - } - } + case '"': + return PlainValueEc8e588e.Type.QUOTE_DOUBLE; - return tags; - }; + case "'": + return PlainValueEc8e588e.Type.QUOTE_SINGLE; - var _default = node => Object.keys(visit(node, {})); + default: + return PlainValueEc8e588e.Type.PLAIN; + } + } - exports.default = _default; -}); -unwrapExports(listTagNames); + constructor(orig = {}, { + atLineStart, + inCollection, + inFlow, + indent, + lineStart, + parent + } = {}) { + PlainValueEc8e588e._defineProperty(this, "parseNode", (overlay, start) => { + if (PlainValueEc8e588e.Node.atDocumentBoundary(this.src, start)) return null; + const context = new ParseContext(this, overlay); + const { + props, + type, + valueStart + } = context.parseProps(start); + const node = createNewNode(type, props); + let offset = node.parse(context, valueStart); + node.range = new PlainValueEc8e588e.Range(start, offset); + /* istanbul ignore if */ -var warnings = createCommonjsModule(function (module, exports) { + if (offset <= start) { + // This should never happen, but if it does, let's make sure to at least + // step one character forward to avoid a busy loop. + node.error = new Error(`Node#parse consumed no characters`); + node.error.parseEnd = offset; + node.error.source = node; + node.range.end = start + 1; + } - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.warn = warn; - exports.warnFileDeprecation = warnFileDeprecation; - exports.warnOptionDeprecation = warnOptionDeprecation; - /* global global, console */ + if (context.nodeStartsCollection(node)) { + if (!node.error && !context.atLineStart && context.parent.type === PlainValueEc8e588e.Type.DOCUMENT) { + node.error = new PlainValueEc8e588e.YAMLSyntaxError(node, 'Block collection must not have preceding content here (e.g. directives-end indicator)'); + } - function warn(warning, type) { - if (global && global._YAML_SILENCE_WARNINGS) return; - const { - emitWarning - } = global && global.process; // This will throw in Jest if `warning` is an Error instance due to - // https://github.com/facebook/jest/issues/2549 + const collection = new Collection(node); + offset = collection.parse(new ParseContext(context), offset); + collection.range = new PlainValueEc8e588e.Range(start, offset); + return collection; + } - if (emitWarning) emitWarning(warning, type);else { - // eslint-disable-next-line no-console - console.warn(type ? `${type}: ${warning}` : warning); - } - } + return node; + }); - function warnFileDeprecation(filename) { - if (global && global._YAML_SILENCE_DEPRECATION_WARNINGS) return; - const path = filename.replace(/.*yaml[/\\]/i, '').replace(/\.js$/, '').replace(/\\/g, '/'); - warn(`The endpoint 'yaml/${path}' will be removed in a future release.`, 'DeprecationWarning'); + this.atLineStart = atLineStart != null ? atLineStart : orig.atLineStart || false; + this.inCollection = inCollection != null ? inCollection : orig.inCollection || false; + this.inFlow = inFlow != null ? inFlow : orig.inFlow || false; + this.indent = indent != null ? indent : orig.indent; + this.lineStart = lineStart != null ? lineStart : orig.lineStart; + this.parent = parent != null ? parent : orig.parent || {}; + this.root = orig.root; + this.src = orig.src; } - const warned = {}; + nodeStartsCollection(node) { + const { + inCollection, + inFlow, + src + } = this; + if (inCollection || inFlow) return false; + if (node instanceof CollectionItem) return true; // check for implicit key - function warnOptionDeprecation(name, alternative) { - if (global && global._YAML_SILENCE_DEPRECATION_WARNINGS) return; - if (warned[name]) return; - warned[name] = true; - let msg = `The option '${name}' will be removed in a future release`; - msg += alternative ? `, use '${alternative}' instead.` : '.'; - warn(msg, 'DeprecationWarning'); - } -}); -unwrapExports(warnings); -var warnings_1 = warnings.warn; -var warnings_2 = warnings.warnFileDeprecation; -var warnings_3 = warnings.warnOptionDeprecation; + let offset = node.range.end; + if (src[offset] === '\n' || src[offset - 1] === '\n') return false; + offset = PlainValueEc8e588e.Node.endOfWhiteSpace(src, offset); + return src[offset] === ':'; + } // Anchor and tag are before type, which determines the node implementation + // class; hence this intermediate step. -var foldFlowLines_1 = createCommonjsModule(function (module, exports) { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = foldFlowLines; - exports.FOLD_QUOTED = exports.FOLD_BLOCK = exports.FOLD_FLOW = void 0; - const FOLD_FLOW = 'flow'; - exports.FOLD_FLOW = FOLD_FLOW; - const FOLD_BLOCK = 'block'; - exports.FOLD_BLOCK = FOLD_BLOCK; - const FOLD_QUOTED = 'quoted'; // presumes i+1 is at the start of a line - // returns index of last newline in more-indented block + parseProps(offset) { + const { + inFlow, + parent, + src + } = this; + const props = []; + let lineHasProps = false; + offset = this.atLineStart ? PlainValueEc8e588e.Node.endOfIndent(src, offset) : PlainValueEc8e588e.Node.endOfWhiteSpace(src, offset); + let ch = src[offset]; - exports.FOLD_QUOTED = FOLD_QUOTED; + while (ch === PlainValueEc8e588e.Char.ANCHOR || ch === PlainValueEc8e588e.Char.COMMENT || ch === PlainValueEc8e588e.Char.TAG || ch === '\n') { + if (ch === '\n') { + const lineStart = offset + 1; + const inEnd = PlainValueEc8e588e.Node.endOfIndent(src, lineStart); + const indentDiff = inEnd - (lineStart + this.indent); + const noIndicatorAsIndent = parent.type === PlainValueEc8e588e.Type.SEQ_ITEM && parent.context.atLineStart; + if (!PlainValueEc8e588e.Node.nextNodeIsIndented(src[inEnd], indentDiff, !noIndicatorAsIndent)) break; + this.atLineStart = true; + this.lineStart = lineStart; + lineHasProps = false; + offset = inEnd; + } else if (ch === PlainValueEc8e588e.Char.COMMENT) { + const end = PlainValueEc8e588e.Node.endOfLine(src, offset + 1); + props.push(new PlainValueEc8e588e.Range(offset, end)); + offset = end; + } else { + let end = PlainValueEc8e588e.Node.endOfIdentifier(src, offset + 1); + + if (ch === PlainValueEc8e588e.Char.TAG && src[end] === ',' && /^[a-zA-Z0-9-]+\.[a-zA-Z0-9-]+,\d\d\d\d(-\d\d){0,2}\/\S/.test(src.slice(offset + 1, end + 13))) { + // Let's presume we're dealing with a YAML 1.0 domain tag here, rather + // than an empty but 'foo.bar' private-tagged node in a flow collection + // followed without whitespace by a plain string starting with a year + // or date divided by something. + end = PlainValueEc8e588e.Node.endOfIdentifier(src, end + 5); + } - const consumeMoreIndentedLines = (text, i) => { - let ch = text[i + 1]; + props.push(new PlainValueEc8e588e.Range(offset, end)); + lineHasProps = true; + offset = PlainValueEc8e588e.Node.endOfWhiteSpace(src, end); + } - while (ch === ' ' || ch === '\t') { - do { - ch = text[i += 1]; - } while (ch && ch !== '\n'); + ch = src[offset]; + } // '- &a : b' has an anchor on an empty node - ch = text[i + 1]; - } - return i; - }; + if (lineHasProps && ch === ':' && PlainValueEc8e588e.Node.atBlank(src, offset + 1, true)) offset -= 1; + const type = ParseContext.parseType(src, offset, inFlow); + return { + props, + type, + valueStart: offset + }; + } /** - * Tries to keep input at up to `lineWidth` characters, splitting only on spaces - * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are - * terminated with `\n` and started with `indent`. - * - * @param {string} text - * @param {string} indent - * @param {string} [mode='flow'] `'block'` prevents more-indented lines - * from being folded; `'quoted'` allows for `\` escapes, including escaped - * newlines - * @param {Object} options - * @param {number} [options.indentAtStart] Accounts for leading contents on - * the first line, defaulting to `indent.length` - * @param {number} [options.lineWidth=80] - * @param {number} [options.minContentWidth=20] Allow highly indented lines to - * stretch the line width - * @param {function} options.onFold Called once if the text is folded - * @param {function} options.onFold Called once if any line of text exceeds - * lineWidth characters + * Parses a node from the source + * @param {ParseContext} overlay + * @param {number} start - Index of first non-whitespace character for the node + * @returns {?Node} - null if at a document boundary */ - function foldFlowLines(text, indent, mode, { - indentAtStart, - lineWidth = 80, - minContentWidth = 20, - onFold, - onOverflow - }) { - if (!lineWidth || lineWidth < 0) return text; - const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length); - if (text.length <= endStep) return text; - const folds = []; - const escapedFolds = {}; - let end = lineWidth - (typeof indentAtStart === 'number' ? indentAtStart : indent.length); - let split = undefined; - let prev = undefined; - let overflow = false; - let i = -1; - - if (mode === FOLD_BLOCK) { - i = consumeMoreIndentedLines(text, i); - if (i !== -1) end = i + endStep; - } - - for (let ch; ch = text[i += 1];) { - if (mode === FOLD_QUOTED && ch === '\\') { - switch (text[i + 1]) { - case 'x': - i += 3; - break; +} // Published as 'yaml/parse-cst' - case 'u': - i += 5; - break; - case 'U': - i += 9; - break; +function parse(src) { + const cr = []; - default: - i += 1; - } - } + if (src.indexOf('\r') !== -1) { + src = src.replace(/\r\n?/g, (match, offset) => { + if (match.length > 1) cr.push(offset); + return '\n'; + }); + } - if (ch === '\n') { - if (mode === FOLD_BLOCK) i = consumeMoreIndentedLines(text, i); - end = i + endStep; - split = undefined; - } else { - if (ch === ' ' && prev && prev !== ' ' && prev !== '\n' && prev !== '\t') { - // space surrounded by non-space can be replaced with newline + indent - const next = text[i + 1]; - if (next && next !== ' ' && next !== '\n' && next !== '\t') split = i; - } + const documents = []; + let offset = 0; - if (i >= end) { - if (split) { - folds.push(split); - end = split + endStep; - split = undefined; - } else if (mode === FOLD_QUOTED) { - // white-space collected at end may stretch past lineWidth - while (prev === ' ' || prev === '\t') { - prev = ch; - ch = text[i += 1]; - overflow = true; - } // i - 2 accounts for not-dropped last char + newline-escaping \ - - - folds.push(i - 2); - escapedFolds[i - 2] = true; - end = i - 2 + endStep; - split = undefined; - } else { - overflow = true; - } - } - } + do { + const doc = new Document(); + const context = new ParseContext({ + src + }); + offset = doc.parse(context, offset); + documents.push(doc); + } while (offset < src.length); - prev = ch; - } + documents.setOrigRanges = () => { + if (cr.length === 0) return false; - if (overflow && onOverflow) onOverflow(); - if (folds.length === 0) return text; - if (onFold) onFold(); - let res = text.slice(0, folds[0]); + for (let i = 1; i < cr.length; ++i) cr[i] -= i; - for (let i = 0; i < folds.length; ++i) { - const fold = folds[i]; - const end = folds[i + 1] || text.length; - if (mode === FOLD_QUOTED && escapedFolds[fold]) res += `${text[fold]}\\`; - res += `\n${indent}${text.slice(fold + 1, end)}`; + let crOffset = 0; + + for (let i = 0; i < documents.length; ++i) { + crOffset = documents[i].setOrigRanges(cr, crOffset); } - return res; - } -}); -unwrapExports(foldFlowLines_1); -var foldFlowLines_2 = foldFlowLines_1.FOLD_QUOTED; -var foldFlowLines_3 = foldFlowLines_1.FOLD_BLOCK; -var foldFlowLines_4 = foldFlowLines_1.FOLD_FLOW; + cr.splice(0, cr.length); + return true; + }; -var options = createCommonjsModule(function (module, exports) { + documents.toString = () => documents.join('...\n'); - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.strOptions = exports.nullOptions = exports.boolOptions = exports.binaryOptions = void 0; - const binaryOptions = { - defaultType: constants.Type.BLOCK_LITERAL, - lineWidth: 76 - }; - exports.binaryOptions = binaryOptions; - const boolOptions = { - trueStr: 'true', - falseStr: 'false' - }; - exports.boolOptions = boolOptions; - const nullOptions = { - nullStr: 'null' - }; - exports.nullOptions = nullOptions; - const strOptions = { - defaultType: constants.Type.PLAIN, - doubleQuoted: { - jsonEncoding: false, - minMultiLineLength: 40 - }, - fold: { - lineWidth: 80, - minContentWidth: 20 - } - }; - exports.strOptions = strOptions; -}); -unwrapExports(options); -var options_1 = options.strOptions; -var options_2 = options.nullOptions; -var options_3 = options.boolOptions; -var options_4 = options.binaryOptions; + return documents; +} -var stringify = createCommonjsModule(function (module, exports) { +var parse_1 = parse; +var parseCst = { + parse: parse_1 +}; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.stringifyNumber = stringifyNumber; - exports.stringifyString = stringifyString; +function addCommentBefore(str, indent, comment) { + if (!comment) return str; + const cc = comment.replace(/[\s\S]^/gm, `$&${indent}#`); + return `#${cc}\n${indent}${str}`; +} - var _foldFlowLines = _interopRequireWildcard(foldFlowLines_1); +function addComment(str, indent, comment) { + return !comment ? str : comment.indexOf('\n') === -1 ? `${str} #${comment}` : `${str}\n` + comment.replace(/^/gm, `${indent || ''}#`); +} - function _getRequireWildcardCache() { - if (typeof WeakMap !== "function") return null; - var cache = new WeakMap(); +class Node$1 {} - _getRequireWildcardCache = function () { - return cache; - }; +function toJSON(value, arg, ctx) { + if (Array.isArray(value)) return value.map((v, i) => toJSON(v, String(i), ctx)); - return cache; + if (value && typeof value.toJSON === 'function') { + const anchor = ctx && ctx.anchors && ctx.anchors.get(value); + if (anchor) ctx.onCreate = res => { + anchor.res = res; + delete ctx.onCreate; + }; + const res = value.toJSON(arg, ctx); + if (anchor && ctx.onCreate) ctx.onCreate(res); + return res; } - function _interopRequireWildcard(obj) { - if (obj && obj.__esModule) { - return obj; - } + if ((!ctx || !ctx.keep) && typeof value === 'bigint') return Number(value); + return value; +} - if (obj === null || typeof obj !== "object" && typeof obj !== "function") { - return { - default: obj - }; - } +class Scalar extends Node$1 { + constructor(value) { + super(); + this.value = value; + } - var cache = _getRequireWildcardCache(); + toJSON(arg, ctx) { + return ctx && ctx.keep ? this.value : toJSON(this.value, arg, ctx); + } - if (cache && cache.has(obj)) { - return cache.get(obj); - } + toString() { + return String(this.value); + } - var newObj = {}; - var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; +} - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; +function collectionFromPath(schema, path, value) { + let v = value; - if (desc && (desc.get || desc.set)) { - Object.defineProperty(newObj, key, desc); - } else { - newObj[key] = obj[key]; - } - } - } + for (let i = path.length - 1; i >= 0; --i) { + const k = path[i]; + const o = Number.isInteger(k) && k >= 0 ? [] : {}; + o[k] = v; + v = o; + } - newObj.default = obj; + return schema.createNode(v, false); +} // null, undefined, or an empty non-string iterable (e.g. []) - if (cache) { - cache.set(obj, newObj); - } - return newObj; - } +const isEmptyPath = path => path == null || typeof path === 'object' && path[Symbol.iterator]().next().done; - const getFoldOptions = ({ - indentAtStart - }) => indentAtStart ? Object.assign({ - indentAtStart - }, options.strOptions.fold) : options.strOptions.fold; +class Collection$1 extends Node$1 { + constructor(schema) { + super(); - function stringifyNumber({ - format, - minFractionDigits, - tag, - value - }) { - if (!isFinite(value)) return isNaN(value) ? '.nan' : value < 0 ? '-.inf' : '.inf'; - let n = JSON.stringify(value); + PlainValueEc8e588e._defineProperty(this, "items", []); - if (!format && minFractionDigits && (!tag || tag === 'tag:yaml.org,2002:float') && /^\d/.test(n)) { - let i = n.indexOf('.'); + this.schema = schema; + } - if (i < 0) { - i = n.length; - n += '.'; - } + addIn(path, value) { + if (isEmptyPath(path)) this.add(value);else { + const [key, ...rest] = path; + const node = this.get(key, true); + if (node instanceof Collection$1) node.addIn(rest, value);else if (node === undefined && this.schema) this.set(key, collectionFromPath(this.schema, rest, value));else throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`); + } + } - let d = minFractionDigits - (n.length - i - 1); + deleteIn([key, ...rest]) { + if (rest.length === 0) return this.delete(key); + const node = this.get(key, true); + if (node instanceof Collection$1) return node.deleteIn(rest);else throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`); + } - while (d-- > 0) n += '0'; - } + getIn([key, ...rest], keepScalar) { + const node = this.get(key, true); + if (rest.length === 0) return !keepScalar && node instanceof Scalar ? node.value : node;else return node instanceof Collection$1 ? node.getIn(rest, keepScalar) : undefined; + } - return n; + hasAllNullValues() { + return this.items.every(node => { + if (!node || node.type !== 'PAIR') return false; + const n = node.value; + return n == null || n instanceof Scalar && n.value == null && !n.commentBefore && !n.comment && !n.tag; + }); } - function lineLengthOverLimit(str, limit) { - const strLen = str.length; - if (strLen <= limit) return false; + hasIn([key, ...rest]) { + if (rest.length === 0) return this.has(key); + const node = this.get(key, true); + return node instanceof Collection$1 ? node.hasIn(rest) : false; + } - for (let i = 0, start = 0; i < strLen; ++i) { - if (str[i] === '\n') { - if (i - start > limit) return true; - start = i + 1; - if (strLen - start <= limit) return false; - } + setIn([key, ...rest], value) { + if (rest.length === 0) { + this.set(key, value); + } else { + const node = this.get(key, true); + if (node instanceof Collection$1) node.setIn(rest, value);else if (node === undefined && this.schema) this.set(key, collectionFromPath(this.schema, rest, value));else throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`); } + } // overridden in implementations - return true; + /* istanbul ignore next */ + + + toJSON() { + return null; } - function doubleQuotedString(value, ctx) { + toString(ctx, { + blockItem, + flowChars, + isMap, + itemIndent + }, onComment, onChompKeep) { const { - implicitKey, - indent + indent, + indentStep, + stringify } = ctx; - const { - jsonEncoding, - minMultiLineLength - } = options.strOptions.doubleQuoted; - const json = JSON.stringify(value); - if (jsonEncoding) return json; - let str = ''; - let start = 0; - - for (let i = 0, ch = json[i]; ch; ch = json[++i]) { - if (ch === ' ' && json[i + 1] === '\\' && json[i + 2] === 'n') { - // space before newline needs to be escaped to not be folded - str += json.slice(start, i) + '\\ '; - i += 1; - start = i; - ch = '\\'; + const inFlow = this.type === PlainValueEc8e588e.Type.FLOW_MAP || this.type === PlainValueEc8e588e.Type.FLOW_SEQ || ctx.inFlow; + if (inFlow) itemIndent += indentStep; + const allNullValues = isMap && this.hasAllNullValues(); + ctx = Object.assign({}, ctx, { + allNullValues, + indent: itemIndent, + inFlow, + type: null + }); + let chompKeep = false; + let hasItemWithNewLine = false; + const nodes = this.items.reduce((nodes, item, i) => { + let comment; + + if (item) { + if (!chompKeep && item.spaceBefore) nodes.push({ + type: 'comment', + str: '' + }); + if (item.commentBefore) item.commentBefore.match(/^.*$/gm).forEach(line => { + nodes.push({ + type: 'comment', + str: `#${line}` + }); + }); + if (item.comment) comment = item.comment; + if (inFlow && (!chompKeep && item.spaceBefore || item.commentBefore || item.comment || item.key && (item.key.commentBefore || item.key.comment) || item.value && (item.value.commentBefore || item.value.comment))) hasItemWithNewLine = true; } - if (ch === '\\') switch (json[i + 1]) { - case 'u': - { - str += json.slice(start, i); - const code = json.substr(i + 2, 4); + chompKeep = false; + let str = stringify(item, ctx, () => comment = null, () => chompKeep = true); + if (inFlow && !hasItemWithNewLine && str.includes('\n')) hasItemWithNewLine = true; + if (inFlow && i < this.items.length - 1) str += ','; + str = addComment(str, itemIndent, comment); + if (chompKeep && (comment || inFlow)) chompKeep = false; + nodes.push({ + type: 'item', + str + }); + return nodes; + }, []); + let str; + + if (nodes.length === 0) { + str = flowChars.start + flowChars.end; + } else if (inFlow) { + const { + start, + end + } = flowChars; + const strings = nodes.map(n => n.str); - switch (code) { - case '0000': - str += '\\0'; - break; + if (hasItemWithNewLine || strings.reduce((sum, str) => sum + str.length + 2, 2) > Collection$1.maxFlowStringSingleLineLength) { + str = start; - case '0007': - str += '\\a'; - break; + for (const s of strings) { + str += s ? `\n${indentStep}${indent}${s}` : '\n'; + } - case '000b': - str += '\\v'; - break; + str += `\n${indent}${end}`; + } else { + str = `${start} ${strings.join(' ')} ${end}`; + } + } else { + const strings = nodes.map(blockItem); + str = strings.shift(); - case '001b': - str += '\\e'; - break; + for (const s of strings) str += s ? `\n${indent}${s}` : '\n'; + } - case '0085': - str += '\\N'; - break; + if (this.comment) { + str += '\n' + this.comment.replace(/^/gm, `${indent}#`); + if (onComment) onComment(); + } else if (chompKeep && onChompKeep) onChompKeep(); - case '00a0': - str += '\\_'; - break; + return str; + } - case '2028': - str += '\\L'; - break; +} - case '2029': - str += '\\P'; - break; +PlainValueEc8e588e._defineProperty(Collection$1, "maxFlowStringSingleLineLength", 60); - default: - if (code.substr(0, 2) === '00') str += '\\x' + code.substr(2);else str += json.substr(i, 6); - } +function asItemIndex(key) { + let idx = key instanceof Scalar ? key.value : key; + if (idx && typeof idx === 'string') idx = Number(idx); + return Number.isInteger(idx) && idx >= 0 ? idx : null; +} - i += 5; - start = i + 1; - } - break; +class YAMLSeq extends Collection$1 { + add(value) { + this.items.push(value); + } - case 'n': - if (implicitKey || json[i + 2] === '"' || json.length < minMultiLineLength) { - i += 1; - } else { - // folding will eat first newline - str += json.slice(start, i) + '\n\n'; + delete(key) { + const idx = asItemIndex(key); + if (typeof idx !== 'number') return false; + const del = this.items.splice(idx, 1); + return del.length > 0; + } - while (json[i + 2] === '\\' && json[i + 3] === 'n' && json[i + 4] !== '"') { - str += '\n'; - i += 2; - } + get(key, keepScalar) { + const idx = asItemIndex(key); + if (typeof idx !== 'number') return undefined; + const it = this.items[idx]; + return !keepScalar && it instanceof Scalar ? it.value : it; + } - str += indent; // space after newline needs to be escaped to not be folded + has(key) { + const idx = asItemIndex(key); + return typeof idx === 'number' && idx < this.items.length; + } - if (json[i + 2] === ' ') str += '\\'; - i += 1; - start = i + 1; - } + set(key, value) { + const idx = asItemIndex(key); + if (typeof idx !== 'number') throw new Error(`Expected a valid index, not ${key}.`); + this.items[idx] = value; + } - break; + toJSON(_, ctx) { + const seq = []; + if (ctx && ctx.onCreate) ctx.onCreate(seq); + let i = 0; - default: - i += 1; - } - } + for (const item of this.items) seq.push(toJSON(item, String(i++), ctx)); - str = start ? str + json.slice(start) : json; - return implicitKey ? str : (0, _foldFlowLines.default)(str, indent, _foldFlowLines.FOLD_QUOTED, getFoldOptions(ctx)); + return seq; } - function singleQuotedString(value, ctx) { - const { - indent, - implicitKey - } = ctx; + toString(ctx, onComment, onChompKeep) { + if (!ctx) return JSON.stringify(this); + return super.toString(ctx, { + blockItem: n => n.type === 'comment' ? n.str : `- ${n.str}`, + flowChars: { + start: '[', + end: ']' + }, + isMap: false, + itemIndent: (ctx.indent || '') + ' ' + }, onComment, onChompKeep); + } - if (implicitKey) { - if (/\n/.test(value)) return doubleQuotedString(value, ctx); - } else { - // single quoted string can't have leading or trailing whitespace around newline - if (/[ \t]\n|\n[ \t]/.test(value)) return doubleQuotedString(value, ctx); - } +} - const res = "'" + value.replace(/'/g, "''").replace(/\n+/g, `$&\n${indent}`) + "'"; - return implicitKey ? res : (0, _foldFlowLines.default)(res, indent, _foldFlowLines.FOLD_FLOW, getFoldOptions(ctx)); +const stringifyKey = (key, jsKey, ctx) => { + if (jsKey === null) return ''; + if (typeof jsKey !== 'object') return String(jsKey); + if (key instanceof Node$1 && ctx && ctx.doc) return key.toString({ + anchors: {}, + doc: ctx.doc, + indent: '', + indentStep: ctx.indentStep, + inFlow: true, + inStringifyKey: true, + stringify: ctx.stringify + }); + return JSON.stringify(jsKey); +}; + +class Pair extends Node$1 { + constructor(key, value = null) { + super(); + this.key = key; + this.value = value; + this.type = Pair.Type.PAIR; } - function blockString({ - comment, - type, - value - }, ctx, onComment, onChompKeep) { - // 1. Block can't end in whitespace unless the last line is non-empty. - // 2. Strings consisting of only whitespace are best rendered explicitly. - if (/\n[\t ]+$/.test(value) || /^\s*$/.test(value)) { - return doubleQuotedString(value, ctx); + get commentBefore() { + return this.key instanceof Node$1 ? this.key.commentBefore : undefined; + } + + set commentBefore(cb) { + if (this.key == null) this.key = new Scalar(null); + if (this.key instanceof Node$1) this.key.commentBefore = cb;else { + const msg = 'Pair.commentBefore is an alias for Pair.key.commentBefore. To set it, the key must be a Node.'; + throw new Error(msg); } + } - const indent = ctx.indent || (ctx.forceBlockIndent ? ' ' : ''); - const indentSize = indent ? '2' : '1'; // root is at -1 + addToJSMap(ctx, map) { + const key = toJSON(this.key, '', ctx); - const literal = type === constants.Type.BLOCK_FOLDED ? false : type === constants.Type.BLOCK_LITERAL ? true : !lineLengthOverLimit(value, options.strOptions.fold.lineWidth - indent.length); - let header = literal ? '|' : '>'; - if (!value) return header + '\n'; - let wsStart = ''; - let wsEnd = ''; - value = value.replace(/[\n\t ]*$/, ws => { - const n = ws.indexOf('\n'); + if (map instanceof Map) { + const value = toJSON(this.value, key, ctx); + map.set(key, value); + } else if (map instanceof Set) { + map.add(key); + } else { + const stringKey = stringifyKey(this.key, key, ctx); + map[stringKey] = toJSON(this.value, stringKey, ctx); + } - if (n === -1) { - header += '-'; // strip - } else if (value === ws || n !== ws.length - 1) { - header += '+'; // keep + return map; + } - if (onChompKeep) onChompKeep(); - } + toJSON(_, ctx) { + const pair = ctx && ctx.mapAsMap ? new Map() : {}; + return this.addToJSMap(ctx, pair); + } - wsEnd = ws.replace(/\n$/, ''); - return ''; - }).replace(/^[\n ]*/, ws => { - if (ws.indexOf(' ') !== -1) header += indentSize; - const m = ws.match(/ +$/); + toString(ctx, onComment, onChompKeep) { + if (!ctx || !ctx.doc) return JSON.stringify(this); + const { + indent: indentSize, + indentSeq, + simpleKeys + } = ctx.doc.options; + let { + key, + value + } = this; + let keyComment = key instanceof Node$1 && key.comment; - if (m) { - wsStart = ws.slice(0, -m[0].length); - return m[0]; - } else { - wsStart = ws; - return ''; + if (simpleKeys) { + if (keyComment) { + throw new Error('With simple keys, key nodes cannot have comments'); } - }); - if (wsEnd) wsEnd = wsEnd.replace(/\n+(?!\n|$)/g, `$&${indent}`); - if (wsStart) wsStart = wsStart.replace(/\n+/g, `$&${indent}`); - - if (comment) { - header += ' #' + comment.replace(/ ?[\r\n]+/g, ' '); - if (onComment) onComment(); - } - if (!value) return `${header}${indentSize}\n${indent}${wsEnd}`; - - if (literal) { - value = value.replace(/\n+/g, `$&${indent}`); - return `${header}\n${indent}${wsStart}${value}${wsEnd}`; + if (key instanceof Collection$1) { + const msg = 'With simple keys, collection cannot be used as a key value'; + throw new Error(msg); + } } - value = value.replace(/\n+/g, '\n$&').replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g, '$1$2') // more-indented lines aren't folded - // ^ ind.line ^ empty ^ capture next empty lines only at end of indent - .replace(/\n+/g, `$&${indent}`); - const body = (0, _foldFlowLines.default)(`${wsStart}${value}${wsEnd}`, indent, _foldFlowLines.FOLD_BLOCK, options.strOptions.fold); - return `${header}\n${indent}${body}`; - } - - function plainString(item, ctx, onComment, onChompKeep) { + const explicitKey = !simpleKeys && (!key || keyComment || key instanceof Collection$1 || key.type === PlainValueEc8e588e.Type.BLOCK_FOLDED || key.type === PlainValueEc8e588e.Type.BLOCK_LITERAL); const { - comment, - type, - value - } = item; - const { - actualString, - implicitKey, + doc, indent, - inFlow, - tags + indentStep, + stringify } = ctx; + ctx = Object.assign({}, ctx, { + implicitKey: !explicitKey, + indent: indent + indentStep + }); + let chompKeep = false; + let str = stringify(key, ctx, () => keyComment = null, () => chompKeep = true); + str = addComment(str, ctx.indent, keyComment); - if (implicitKey && /[\n[\]{},]/.test(value) || inFlow && /[[\]{},]/.test(value)) { - return doubleQuotedString(value, ctx); - } + if (ctx.allNullValues && !simpleKeys) { + if (this.comment) { + str = addComment(str, ctx.indent, this.comment); + if (onComment) onComment(); + } else if (chompKeep && !keyComment && onChompKeep) onChompKeep(); - if (!value || /^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(value)) { - // not allowed: - // - empty string, '-' or '?' - // - start with an indicator character (except [?:-]) or /[?-] / - // - '\n ', ': ' or ' \n' anywhere - // - '#' not preceded by a non-space char - // - end with ' ' or ':' - return implicitKey || inFlow || value.indexOf('\n') === -1 ? value.indexOf('"') !== -1 && value.indexOf("'") === -1 ? singleQuotedString(value, ctx) : doubleQuotedString(value, ctx) : blockString(item, ctx, onComment, onChompKeep); + return ctx.inFlow ? str : `? ${str}`; } - if (!implicitKey && !inFlow && type !== constants.Type.PLAIN && value.indexOf('\n') !== -1) { - // Where allowed & type not set explicitly, prefer block style for multiline strings - return blockString(item, ctx, onComment, onChompKeep); + str = explicitKey ? `? ${str}\n${indent}:` : `${str}:`; + + if (this.comment) { + // expected (but not strictly required) to be a single-line comment + str = addComment(str, ctx.indent, this.comment); + if (onComment) onComment(); } - const str = value.replace(/\n+/g, `$&\n${indent}`); // Verify that output will be parsed as a string, as e.g. plain numbers and - // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'), - // and others in v1.1. + let vcb = ''; + let valueComment = null; - if (actualString && typeof tags.resolveScalar(str).value !== 'string') { - return doubleQuotedString(value, ctx); - } + if (value instanceof Node$1) { + if (value.spaceBefore) vcb = '\n'; - const body = implicitKey ? str : (0, _foldFlowLines.default)(str, indent, _foldFlowLines.FOLD_FLOW, getFoldOptions(ctx)); + if (value.commentBefore) { + const cs = value.commentBefore.replace(/^/gm, `${ctx.indent}#`); + vcb += `\n${cs}`; + } - if (comment && !inFlow && (body.indexOf('\n') !== -1 || comment.indexOf('\n') !== -1)) { - if (onComment) onComment(); - return (0, addComment_1.addCommentBefore)(body, indent, comment); + valueComment = value.comment; + } else if (value && typeof value === 'object') { + value = doc.schema.createNode(value, true); } - return body; - } - - function stringifyString(item, ctx, onComment, onChompKeep) { - const { - defaultType - } = options.strOptions; - const { - implicitKey, - inFlow - } = ctx; - let { - type, - value - } = item; + ctx.implicitKey = false; + if (!explicitKey && !this.comment && value instanceof Scalar) ctx.indentAtStart = str.length + 1; + chompKeep = false; - if (typeof value !== 'string') { - value = String(value); - item = Object.assign({}, item, { - value - }); + if (!indentSeq && indentSize >= 2 && !ctx.inFlow && !explicitKey && value instanceof YAMLSeq && value.type !== PlainValueEc8e588e.Type.FLOW_SEQ && !value.tag && !doc.anchors.getName(value)) { + // If indentSeq === false, consider '- ' as part of indentation where possible + ctx.indent = ctx.indent.substr(2); } - const _stringify = _type => { - switch (_type) { - case constants.Type.BLOCK_FOLDED: - case constants.Type.BLOCK_LITERAL: - return blockString(item, ctx, onComment, onChompKeep); - - case constants.Type.QUOTE_DOUBLE: - return doubleQuotedString(value, ctx); + const valueStr = stringify(value, ctx, () => valueComment = null, () => chompKeep = true); + let ws = ' '; - case constants.Type.QUOTE_SINGLE: - return singleQuotedString(value, ctx); + if (vcb || this.comment) { + ws = `${vcb}\n${ctx.indent}`; + } else if (!explicitKey && value instanceof Collection$1) { + const flow = valueStr[0] === '[' || valueStr[0] === '{'; + if (!flow || valueStr.includes('\n')) ws = `\n${ctx.indent}`; + } - case constants.Type.PLAIN: - return plainString(item, ctx, onComment, onChompKeep); + if (chompKeep && !valueComment && onChompKeep) onChompKeep(); + return addComment(str + ws + valueStr, ctx.indent, valueComment); + } - default: - return null; - } - }; +} - if (type !== constants.Type.QUOTE_DOUBLE && /[\x00-\x08\x0b-\x1f\x7f-\x9f]/.test(value)) { - // force double quotes on control characters - type = constants.Type.QUOTE_DOUBLE; - } else if ((implicitKey || inFlow) && (type === constants.Type.BLOCK_FOLDED || type === constants.Type.BLOCK_LITERAL)) { - // should not happen; blocks are not valid inside flow containers - type = constants.Type.QUOTE_DOUBLE; - } +PlainValueEc8e588e._defineProperty(Pair, "Type", { + PAIR: 'PAIR', + MERGE_PAIR: 'MERGE_PAIR' +}); - let res = _stringify(type); +const getAliasCount = (node, anchors) => { + if (node instanceof Alias$1) { + const anchor = anchors.get(node.source); + return anchor.count * anchor.aliasCount; + } else if (node instanceof Collection$1) { + let count = 0; - if (res === null) { - res = _stringify(defaultType); - if (res === null) throw new Error(`Unsupported default string type ${defaultType}`); + for (const item of node.items) { + const c = getAliasCount(item, anchors); + if (c > count) count = c; } - return res; + return count; + } else if (node instanceof Pair) { + const kc = getAliasCount(node.key, anchors); + const vc = getAliasCount(node.value, anchors); + return Math.max(kc, vc); } -}); -unwrapExports(stringify); -var stringify_1 = stringify.stringifyNumber; -var stringify_2 = stringify.stringifyString; -var parseUtils = createCommonjsModule(function (module, exports) { + return 1; +}; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.checkFlowCollectionEnd = checkFlowCollectionEnd; - exports.checkKeyLength = checkKeyLength; - exports.resolveComments = resolveComments; +class Alias$1 extends Node$1 { + static stringify({ + range, + source + }, { + anchors, + doc, + implicitKey, + inStringifyKey + }) { + let anchor = Object.keys(anchors).find(a => anchors[a] === source); + if (!anchor && inStringifyKey) anchor = doc.anchors.getName(source) || doc.anchors.newName(); + if (anchor) return `*${anchor}${implicitKey ? ' ' : ''}`; + const msg = doc.anchors.getName(source) ? 'Alias node must be after source node' : 'Source node not found for alias node'; + throw new Error(`${msg} [${range}]`); + } - function checkFlowCollectionEnd(errors$1, cst) { - let char, name; + constructor(source) { + super(); + this.source = source; + this.type = PlainValueEc8e588e.Type.ALIAS; + } - switch (cst.type) { - case constants.Type.FLOW_MAP: - char = '}'; - name = 'flow map'; - break; + set tag(t) { + throw new Error('Alias nodes cannot have tags'); + } - case constants.Type.FLOW_SEQ: - char = ']'; - name = 'flow sequence'; - break; + toJSON(arg, ctx) { + if (!ctx) return toJSON(this.source, arg, ctx); + const { + anchors, + maxAliasCount + } = ctx; + const anchor = anchors.get(this.source); + /* istanbul ignore if */ - default: - errors$1.push(new errors.YAMLSemanticError(cst, 'Not a flow collection!?')); - return; + if (!anchor || anchor.res === undefined) { + const msg = 'This should not happen: Alias anchor was not resolved?'; + if (this.cstNode) throw new PlainValueEc8e588e.YAMLReferenceError(this.cstNode, msg);else throw new ReferenceError(msg); } - let lastItem; - - for (let i = cst.items.length - 1; i >= 0; --i) { - const item = cst.items[i]; + if (maxAliasCount >= 0) { + anchor.count += 1; + if (anchor.aliasCount === 0) anchor.aliasCount = getAliasCount(this.source, anchors); - if (!item || item.type !== constants.Type.COMMENT) { - lastItem = item; - break; + if (anchor.count * anchor.aliasCount > maxAliasCount) { + const msg = 'Excessive alias count indicates a resource exhaustion attack'; + if (this.cstNode) throw new PlainValueEc8e588e.YAMLReferenceError(this.cstNode, msg);else throw new ReferenceError(msg); } } - if (lastItem && lastItem.char !== char) { - const msg = `Expected ${name} to end with ${char}`; - let err; + return anchor.res; + } // Only called when stringifying an alias mapping key while constructing + // Object output. - if (typeof lastItem.offset === 'number') { - err = new errors.YAMLSemanticError(cst, msg); - err.offset = lastItem.offset + 1; - } else { - err = new errors.YAMLSemanticError(lastItem, msg); - if (lastItem.range && lastItem.range.end) err.offset = lastItem.range.end - lastItem.range.start; - } - errors$1.push(err); - } + toString(ctx) { + return Alias$1.stringify(this, ctx); } - function checkKeyLength(errors$1, node, itemIdx, key, keyStart) { - if (!key || typeof keyStart !== 'number') return; - const item = node.items[itemIdx]; - let keyEnd = item && item.range && item.range.start; +} - if (!keyEnd) { - for (let i = itemIdx - 1; i >= 0; --i) { - const it = node.items[i]; +PlainValueEc8e588e._defineProperty(Alias$1, "default", true); - if (it && it.range) { - keyEnd = it.range.end + 2 * (itemIdx - i); - break; - } - } - } +function findPair(items, key) { + const k = key instanceof Scalar ? key.value : key; - if (keyEnd > keyStart + 1024) { - const k = String(key).substr(0, 8) + '...' + String(key).substr(-8); - errors$1.push(new errors.YAMLSemanticError(node, `The "${k}" key is too long`)); + for (const it of items) { + if (it instanceof Pair) { + if (it.key === key || it.key === k) return it; + if (it.key && it.key.value === k) return it; } } - function resolveComments(collection, comments) { - for (const { - afterKey, - before, - comment - } of comments) { - let item = collection.items[before]; - - if (!item) { - if (comment !== undefined) { - if (collection.comment) collection.comment += '\n' + comment;else collection.comment = comment; - } - } else { - if (afterKey && item.value) item = item.value; + return undefined; +} - if (comment === undefined) { - if (afterKey || !item.commentBefore) item.spaceBefore = true; - } else { - if (item.commentBefore) item.commentBefore += '\n' + comment;else item.commentBefore = comment; - } - } +class YAMLMap extends Collection$1 { + add(pair, overwrite) { + if (!pair) pair = new Pair(pair);else if (!(pair instanceof Pair)) pair = new Pair(pair.key || pair, pair.value); + const prev = findPair(this.items, pair.key); + const sortEntries = this.schema && this.schema.sortMapEntries; + + if (prev) { + if (overwrite) prev.value = pair.value;else throw new Error(`Key ${pair.key} already set`); + } else if (sortEntries) { + const i = this.items.findIndex(item => sortEntries(pair, item) < 0); + if (i === -1) this.items.push(pair);else this.items.splice(i, 0, pair); + } else { + this.items.push(pair); } } -}); -unwrapExports(parseUtils); -var parseUtils_1 = parseUtils.checkFlowCollectionEnd; -var parseUtils_2 = parseUtils.checkKeyLength; -var parseUtils_3 = parseUtils.resolveComments; -var parseMap_1 = createCommonjsModule(function (module, exports) { + delete(key) { + const it = findPair(this.items, key); + if (!it) return false; + const del = this.items.splice(this.items.indexOf(it), 1); + return del.length > 0; + } - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = parseMap; + get(key, keepScalar) { + const it = findPair(this.items, key); + const node = it && it.value; + return !keepScalar && node instanceof Scalar ? node.value : node; + } - var _PlainValue = _interopRequireDefault(PlainValue_1); + has(key) { + return !!findPair(this.items, key); + } - var _Map$1 = _interopRequireDefault(_Map); + set(key, value) { + this.add(new Pair(key, value), true); + } + /** + * @param {*} arg ignored + * @param {*} ctx Conversion context, originally set in Document#toJSON() + * @param {Class} Type If set, forces the returned collection type + * @returns {*} Instance of Type, Map, or Object + */ - var _Merge = _interopRequireWildcard(Merge_1); - var _Pair = _interopRequireDefault(Pair_1); + toJSON(_, ctx, Type) { + const map = Type ? new Type() : ctx && ctx.mapAsMap ? new Map() : {}; + if (ctx && ctx.onCreate) ctx.onCreate(map); - var _Alias = _interopRequireDefault(Alias_1$1); + for (const item of this.items) item.addToJSMap(ctx, map); - var _Collection = _interopRequireDefault(Collection_1$1); + return map; + } - function _getRequireWildcardCache() { - if (typeof WeakMap !== "function") return null; - var cache = new WeakMap(); + toString(ctx, onComment, onChompKeep) { + if (!ctx) return JSON.stringify(this); - _getRequireWildcardCache = function () { - return cache; - }; + for (const item of this.items) { + if (!(item instanceof Pair)) throw new Error(`Map items must all be pairs; found ${JSON.stringify(item)} instead`); + } - return cache; + return super.toString(ctx, { + blockItem: n => n.str, + flowChars: { + start: '{', + end: '}' + }, + isMap: true, + itemIndent: ctx.indent || '' + }, onComment, onChompKeep); } - function _interopRequireWildcard(obj) { - if (obj && obj.__esModule) { - return obj; - } +} - if (obj === null || typeof obj !== "object" && typeof obj !== "function") { - return { - default: obj - }; - } +const MERGE_KEY = '<<'; - var cache = _getRequireWildcardCache(); +class Merge extends Pair { + constructor(pair) { + if (pair instanceof Pair) { + let seq = pair.value; - if (cache && cache.has(obj)) { - return cache.get(obj); + if (!(seq instanceof YAMLSeq)) { + seq = new YAMLSeq(); + seq.items.push(pair.value); + seq.range = pair.value.range; + } + + super(pair.key, seq); + this.range = pair.range; + } else { + super(new Scalar(MERGE_KEY), new YAMLSeq()); } - var newObj = {}; - var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + this.type = Pair.Type.MERGE_PAIR; + } // If the value associated with a merge key is a single mapping node, each of + // its key/value pairs is inserted into the current mapping, unless the key + // already exists in it. If the value associated with the merge key is a + // sequence, then this sequence is expected to contain mapping nodes and each + // of these nodes is merged in turn according to its order in the sequence. + // Keys in mapping nodes earlier in the sequence override keys specified in + // later mapping nodes. -- http://yaml.org/type/merge.html - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; - if (desc && (desc.get || desc.set)) { - Object.defineProperty(newObj, key, desc); + addToJSMap(ctx, map) { + for (const { + source + } of this.value.items) { + if (!(source instanceof YAMLMap)) throw new Error('Merge sources must be maps'); + const srcMap = source.toJSON(null, ctx, Map); + + for (const [key, value] of srcMap) { + if (map instanceof Map) { + if (!map.has(key)) map.set(key, value); + } else if (map instanceof Set) { + map.add(key); } else { - newObj[key] = obj[key]; + if (!Object.prototype.hasOwnProperty.call(map, key)) map[key] = value; } } } - newObj.default = obj; - - if (cache) { - cache.set(obj, newObj); - } - - return newObj; + return map; } - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + toString(ctx, onComment) { + const seq = this.value; + if (seq.items.length > 1) return super.toString(ctx, onComment); + this.value = seq.items[0]; + const str = super.toString(ctx, onComment); + this.value = seq; + return str; } - function parseMap(doc, cst) { - if (cst.type !== constants.Type.MAP && cst.type !== constants.Type.FLOW_MAP) { - const msg = `A ${cst.type} node cannot be resolved as a mapping`; - doc.errors.push(new errors.YAMLSyntaxError(cst, msg)); - return null; - } - - const { - comments, - items - } = cst.type === constants.Type.FLOW_MAP ? resolveFlowMapItems(doc, cst) : resolveBlockMapItems(doc, cst); - const map = new _Map$1.default(); - map.items = items; - (0, parseUtils.resolveComments)(map, comments); - let hasCollectionKey = false; - - for (let i = 0; i < items.length; ++i) { - const { - key: iKey - } = items[i]; - if (iKey instanceof _Collection.default) hasCollectionKey = true; - - if (doc.schema.merge && iKey && iKey.value === _Merge.MERGE_KEY) { - items[i] = new _Merge.default(items[i]); - const sources = items[i].value.items; - let error = null; - sources.some(node => { - if (node instanceof _Alias.default) { - // During parsing, alias sources are CST nodes; to account for - // circular references their resolved values can't be used here. - const { - type - } = node.source; - if (type === constants.Type.MAP || type === constants.Type.FLOW_MAP) return false; - return error = 'Merge nodes aliases can only point to maps'; - } +} - return error = 'Merge nodes can only have Alias nodes as values'; - }); - if (error) doc.errors.push(new errors.YAMLSemanticError(cst, error)); - } else { - for (let j = i + 1; j < items.length; ++j) { - const { - key: jKey - } = items[j]; +const binaryOptions = { + defaultType: PlainValueEc8e588e.Type.BLOCK_LITERAL, + lineWidth: 76 +}; +const boolOptions = { + trueStr: 'true', + falseStr: 'false' +}; +const intOptions = { + asBigInt: false +}; +const nullOptions = { + nullStr: 'null' +}; +const strOptions = { + defaultType: PlainValueEc8e588e.Type.PLAIN, + doubleQuoted: { + jsonEncoding: false, + minMultiLineLength: 40 + }, + fold: { + lineWidth: 80, + minContentWidth: 20 + } +}; - if (iKey === jKey || iKey && jKey && Object.prototype.hasOwnProperty.call(iKey, 'value') && iKey.value === jKey.value) { - const msg = `Map keys must be unique; "${iKey}" is repeated`; - doc.errors.push(new errors.YAMLSemanticError(cst, msg)); - break; - } - } +function resolveScalar(str, tags, scalarFallback) { + for (const { + format, + test, + resolve + } of tags) { + if (test) { + const match = str.match(test); + + if (match) { + let res = resolve.apply(null, match); + if (!(res instanceof Scalar)) res = new Scalar(res); + if (format) res.format = format; + return res; } } - - if (hasCollectionKey && !doc.options.mapAsMap) { - const warn = 'Keys with collection values will be stringified as YAML due to JS Object restrictions. Use mapAsMap: true to avoid this.'; - doc.warnings.push(new errors.YAMLWarning(cst, warn)); - } - - cst.resolved = map; - return map; } - const valueHasPairComment = ({ - context: { - lineStart, - node, - src - }, - props - }) => { - if (props.length === 0) return false; - const { - start - } = props[0]; - if (node && start > node.valueRange.start) return false; - if (src[start] !== constants.Char.COMMENT) return false; - - for (let i = lineStart; i < start; ++i) if (src[i] === '\n') return false; - - return true; - }; + if (scalarFallback) str = scalarFallback(str); + return new Scalar(str); +} - function resolvePairComment(item, pair) { - if (!valueHasPairComment(item)) return; - const comment = item.getPropValue(0, constants.Char.COMMENT, true); - let found = false; - const cb = pair.value.commentBefore; +const FOLD_FLOW = 'flow'; +const FOLD_BLOCK = 'block'; +const FOLD_QUOTED = 'quoted'; // presumes i+1 is at the start of a line +// returns index of last newline in more-indented block - if (cb && cb.startsWith(comment)) { - pair.value.commentBefore = cb.substr(comment.length + 1); - found = true; - } else { - const cc = pair.value.comment; +const consumeMoreIndentedLines = (text, i) => { + let ch = text[i + 1]; - if (!item.node && cc && cc.startsWith(comment)) { - pair.value.comment = cc.substr(comment.length + 1); - found = true; - } - } + while (ch === ' ' || ch === '\t') { + do { + ch = text[i += 1]; + } while (ch && ch !== '\n'); - if (found) pair.comment = comment; + ch = text[i + 1]; } - function resolveBlockMapItems(doc, cst) { - const comments = []; - const items = []; - let key = undefined; - let keyStart = null; - - for (let i = 0; i < cst.items.length; ++i) { - const item = cst.items[i]; - - switch (item.type) { - case constants.Type.BLANK_LINE: - comments.push({ - afterKey: !!key, - before: items.length - }); + return i; +}; +/** + * Tries to keep input at up to `lineWidth` characters, splitting only on spaces + * not followed by newlines or spaces unless `mode` is `'quoted'`. Lines are + * terminated with `\n` and started with `indent`. + * + * @param {string} text + * @param {string} indent + * @param {string} [mode='flow'] `'block'` prevents more-indented lines + * from being folded; `'quoted'` allows for `\` escapes, including escaped + * newlines + * @param {Object} options + * @param {number} [options.indentAtStart] Accounts for leading contents on + * the first line, defaulting to `indent.length` + * @param {number} [options.lineWidth=80] + * @param {number} [options.minContentWidth=20] Allow highly indented lines to + * stretch the line width + * @param {function} options.onFold Called once if the text is folded + * @param {function} options.onFold Called once if any line of text exceeds + * lineWidth characters + */ + + +function foldFlowLines(text, indent, mode, { + indentAtStart, + lineWidth = 80, + minContentWidth = 20, + onFold, + onOverflow +}) { + if (!lineWidth || lineWidth < 0) return text; + const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length); + if (text.length <= endStep) return text; + const folds = []; + const escapedFolds = {}; + let end = lineWidth - (typeof indentAtStart === 'number' ? indentAtStart : indent.length); + let split = undefined; + let prev = undefined; + let overflow = false; + let i = -1; + + if (mode === FOLD_BLOCK) { + i = consumeMoreIndentedLines(text, i); + if (i !== -1) end = i + endStep; + } + + for (let ch; ch = text[i += 1];) { + if (mode === FOLD_QUOTED && ch === '\\') { + switch (text[i + 1]) { + case 'x': + i += 3; break; - case constants.Type.COMMENT: - comments.push({ - afterKey: !!key, - before: items.length, - comment: item.comment - }); + case 'u': + i += 5; break; - case constants.Type.MAP_KEY: - if (key !== undefined) items.push(new _Pair.default(key)); - if (item.error) doc.errors.push(item.error); - key = doc.resolveNode(item.node); - keyStart = null; + case 'U': + i += 9; break; - case constants.Type.MAP_VALUE: - { - if (key === undefined) key = null; - if (item.error) doc.errors.push(item.error); + default: + i += 1; + } + } - if (!item.context.atLineStart && item.node && item.node.type === constants.Type.MAP && !item.node.context.atLineStart) { - const msg = 'Nested mappings are not allowed in compact mappings'; - doc.errors.push(new errors.YAMLSemanticError(item.node, msg)); - } + if (ch === '\n') { + if (mode === FOLD_BLOCK) i = consumeMoreIndentedLines(text, i); + end = i + endStep; + split = undefined; + } else { + if (ch === ' ' && prev && prev !== ' ' && prev !== '\n' && prev !== '\t') { + // space surrounded by non-space can be replaced with newline + indent + const next = text[i + 1]; + if (next && next !== ' ' && next !== '\n' && next !== '\t') split = i; + } + + if (i >= end) { + if (split) { + folds.push(split); + end = split + endStep; + split = undefined; + } else if (mode === FOLD_QUOTED) { + // white-space collected at end may stretch past lineWidth + while (prev === ' ' || prev === '\t') { + prev = ch; + ch = text[i += 1]; + overflow = true; + } // i - 2 accounts for not-dropped last char + newline-escaping \ - let valueNode = item.node; - - if (!valueNode && item.props.length > 0) { - // Comments on an empty mapping value need to be preserved, so we - // need to construct a minimal empty node here to use instead of the - // missing `item.node`. -- eemeli/yaml#19 - valueNode = new _PlainValue.default(constants.Type.PLAIN, []); - valueNode.context = { - parent: item, - src: item.context.src - }; - const pos = item.range.start + 1; - valueNode.range = { - start: pos, - end: pos - }; - valueNode.valueRange = { - start: pos, - end: pos - }; - - if (typeof item.range.origStart === 'number') { - const origPos = item.range.origStart + 1; - valueNode.range.origStart = valueNode.range.origEnd = origPos; - valueNode.valueRange.origStart = valueNode.valueRange.origEnd = origPos; - } - } - const pair = new _Pair.default(key, doc.resolveNode(valueNode)); - resolvePairComment(item, pair); - items.push(pair); - (0, parseUtils.checkKeyLength)(doc.errors, cst, i, key, keyStart); - key = undefined; - keyStart = null; - } - break; + folds.push(i - 2); + escapedFolds[i - 2] = true; + end = i - 2 + endStep; + split = undefined; + } else { + overflow = true; + } + } + } - default: - if (key !== undefined) items.push(new _Pair.default(key)); - key = doc.resolveNode(item); - keyStart = item.range.start; - if (item.error) doc.errors.push(item.error); + prev = ch; + } - next: for (let j = i + 1;; ++j) { - const nextItem = cst.items[j]; + if (overflow && onOverflow) onOverflow(); + if (folds.length === 0) return text; + if (onFold) onFold(); + let res = text.slice(0, folds[0]); - switch (nextItem && nextItem.type) { - case constants.Type.BLANK_LINE: - case constants.Type.COMMENT: - continue next; + for (let i = 0; i < folds.length; ++i) { + const fold = folds[i]; + const end = folds[i + 1] || text.length; + if (mode === FOLD_QUOTED && escapedFolds[fold]) res += `${text[fold]}\\`; + res += `\n${indent}${text.slice(fold + 1, end)}`; + } - case constants.Type.MAP_VALUE: - break next; + return res; +} - default: - doc.errors.push(new errors.YAMLSemanticError(item, 'Implicit map keys need to be followed by map values')); - break next; - } - } +const getFoldOptions = ({ + indentAtStart +}) => indentAtStart ? Object.assign({ + indentAtStart +}, strOptions.fold) : strOptions.fold; // Also checks for lines starting with %, as parsing the output as YAML 1.1 will +// presume that's starting a new document. - if (item.valueRangeContainsNewline) { - const msg = 'Implicit map keys need to be on a single line'; - doc.errors.push(new errors.YAMLSemanticError(item, msg)); - } - } - } +const containsDocumentMarker = str => /^(%|---|\.\.\.)/m.test(str); - if (key !== undefined) items.push(new _Pair.default(key)); - return { - comments, - items - }; +function lineLengthOverLimit(str, limit) { + const strLen = str.length; + if (strLen <= limit) return false; + + for (let i = 0, start = 0; i < strLen; ++i) { + if (str[i] === '\n') { + if (i - start > limit) return true; + start = i + 1; + if (strLen - start <= limit) return false; + } } - function resolveFlowMapItems(doc, cst) { - const comments = []; - const items = []; - let key = undefined; - let keyStart = null; - let explicitKey = false; - let next = '{'; + return true; +} - for (let i = 0; i < cst.items.length; ++i) { - (0, parseUtils.checkKeyLength)(doc.errors, cst, i, key, keyStart); - const item = cst.items[i]; +function doubleQuotedString(value, ctx) { + const { + implicitKey + } = ctx; + const { + jsonEncoding, + minMultiLineLength + } = strOptions.doubleQuoted; + const json = JSON.stringify(value); + if (jsonEncoding) return json; + const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : ''); + let str = ''; + let start = 0; + + for (let i = 0, ch = json[i]; ch; ch = json[++i]) { + if (ch === ' ' && json[i + 1] === '\\' && json[i + 2] === 'n') { + // space before newline needs to be escaped to not be folded + str += json.slice(start, i) + '\\ '; + i += 1; + start = i; + ch = '\\'; + } + + if (ch === '\\') switch (json[i + 1]) { + case 'u': + { + str += json.slice(start, i); + const code = json.substr(i + 2, 4); + + switch (code) { + case '0000': + str += '\\0'; + break; - if (typeof item.char === 'string') { - const { - char, - offset - } = item; + case '0007': + str += '\\a'; + break; - if (char === '?' && key === undefined && !explicitKey) { - explicitKey = true; - next = ':'; - continue; - } + case '000b': + str += '\\v'; + break; - if (char === ':') { - if (key === undefined) key = null; + case '001b': + str += '\\e'; + break; - if (next === ':') { - next = ','; - continue; - } - } else { - if (explicitKey) { - if (key === undefined && char !== ',') key = null; - explicitKey = false; - } + case '0085': + str += '\\N'; + break; - if (key !== undefined) { - items.push(new _Pair.default(key)); - key = undefined; - keyStart = null; + case '00a0': + str += '\\_'; + break; - if (char === ',') { - next = ':'; - continue; - } - } - } + case '2028': + str += '\\L'; + break; - if (char === '}') { - if (i === cst.items.length - 1) continue; - } else if (char === next) { - next = ':'; - continue; - } + case '2029': + str += '\\P'; + break; - const msg = `Flow map contains an unexpected ${char}`; - const err = new errors.YAMLSyntaxError(cst, msg); - err.offset = offset; - doc.errors.push(err); - } else if (item.type === constants.Type.BLANK_LINE) { - comments.push({ - afterKey: !!key, - before: items.length - }); - } else if (item.type === constants.Type.COMMENT) { - comments.push({ - afterKey: !!key, - before: items.length, - comment: item.comment - }); - } else if (key === undefined) { - if (next === ',') doc.errors.push(new errors.YAMLSemanticError(item, 'Separator , missing in flow map')); - key = doc.resolveNode(item); - keyStart = explicitKey ? null : item.range.start; // TODO: add error for non-explicit multiline plain key - } else { - if (next !== ',') doc.errors.push(new errors.YAMLSemanticError(item, 'Indicator : missing in flow map entry')); - items.push(new _Pair.default(key, doc.resolveNode(item))); - key = undefined; - explicitKey = false; - } - } + default: + if (code.substr(0, 2) === '00') str += '\\x' + code.substr(2);else str += json.substr(i, 6); + } - (0, parseUtils.checkFlowCollectionEnd)(doc.errors, cst); - if (key !== undefined) items.push(new _Pair.default(key)); - return { - comments, - items - }; - } -}); -unwrapExports(parseMap_1); + i += 5; + start = i + 1; + } + break; -var map = createCommonjsModule(function (module, exports) { + case 'n': + if (implicitKey || json[i + 2] === '"' || json.length < minMultiLineLength) { + i += 1; + } else { + // folding will eat first newline + str += json.slice(start, i) + '\n\n'; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; + while (json[i + 2] === '\\' && json[i + 3] === 'n' && json[i + 4] !== '"') { + str += '\n'; + i += 2; + } - var _Map$1 = _interopRequireDefault(_Map); + str += indent; // space after newline needs to be escaped to not be folded - var _parseMap = _interopRequireDefault(parseMap_1); + if (json[i + 2] === ' ') str += '\\'; + i += 1; + start = i + 1; + } - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + break; + + default: + i += 1; + } } - function createMap(schema, obj, ctx) { - const map = new _Map$1.default(schema); + str = start ? str + json.slice(start) : json; + return implicitKey ? str : foldFlowLines(str, indent, FOLD_QUOTED, getFoldOptions(ctx)); +} + +function singleQuotedString(value, ctx) { + if (ctx.implicitKey) { + if (/\n/.test(value)) return doubleQuotedString(value, ctx); + } else { + // single quoted string can't have leading or trailing whitespace around newline + if (/[ \t]\n|\n[ \t]/.test(value)) return doubleQuotedString(value, ctx); + } - if (obj instanceof Map) { - for (const [key, value] of obj) map.items.push(schema.createPair(key, value, ctx)); - } else if (obj && typeof obj === 'object') { - for (const key of Object.keys(obj)) map.items.push(schema.createPair(key, obj[key], ctx)); - } + const indent = ctx.indent || (containsDocumentMarker(value) ? ' ' : ''); + const res = "'" + value.replace(/'/g, "''").replace(/\n+/g, `$&\n${indent}`) + "'"; + return ctx.implicitKey ? res : foldFlowLines(res, indent, FOLD_FLOW, getFoldOptions(ctx)); +} - if (typeof schema.sortMapEntries === 'function') { - map.items.sort(schema.sortMapEntries); +function blockString({ + comment, + type, + value +}, ctx, onComment, onChompKeep) { + // 1. Block can't end in whitespace unless the last line is non-empty. + // 2. Strings consisting of only whitespace are best rendered explicitly. + if (/\n[\t ]+$/.test(value) || /^\s*$/.test(value)) { + return doubleQuotedString(value, ctx); + } + + const indent = ctx.indent || (ctx.forceBlockIndent || containsDocumentMarker(value) ? ' ' : ''); + const indentSize = indent ? '2' : '1'; // root is at -1 + + const literal = type === PlainValueEc8e588e.Type.BLOCK_FOLDED ? false : type === PlainValueEc8e588e.Type.BLOCK_LITERAL ? true : !lineLengthOverLimit(value, strOptions.fold.lineWidth - indent.length); + let header = literal ? '|' : '>'; + if (!value) return header + '\n'; + let wsStart = ''; + let wsEnd = ''; + value = value.replace(/[\n\t ]*$/, ws => { + const n = ws.indexOf('\n'); + + if (n === -1) { + header += '-'; // strip + } else if (value === ws || n !== ws.length - 1) { + header += '+'; // keep + + if (onChompKeep) onChompKeep(); + } + + wsEnd = ws.replace(/\n$/, ''); + return ''; + }).replace(/^[\n ]*/, ws => { + if (ws.indexOf(' ') !== -1) header += indentSize; + const m = ws.match(/ +$/); + + if (m) { + wsStart = ws.slice(0, -m[0].length); + return m[0]; + } else { + wsStart = ws; + return ''; } + }); + if (wsEnd) wsEnd = wsEnd.replace(/\n+(?!\n|$)/g, `$&${indent}`); + if (wsStart) wsStart = wsStart.replace(/\n+/g, `$&${indent}`); - return map; + if (comment) { + header += ' #' + comment.replace(/ ?[\r\n]+/g, ' '); + if (onComment) onComment(); } - var _default = { - createNode: createMap, - default: true, - nodeClass: _Map$1.default, - tag: 'tag:yaml.org,2002:map', - resolve: _parseMap.default - }; - exports.default = _default; -}); -unwrapExports(map); + if (!value) return `${header}${indentSize}\n${indent}${wsEnd}`; -var parseSeq_1 = createCommonjsModule(function (module, exports) { + if (literal) { + value = value.replace(/\n+/g, `$&${indent}`); + return `${header}\n${indent}${wsStart}${value}${wsEnd}`; + } - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = parseSeq; + value = value.replace(/\n+/g, '\n$&').replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g, '$1$2') // more-indented lines aren't folded + // ^ ind.line ^ empty ^ capture next empty lines only at end of indent + .replace(/\n+/g, `$&${indent}`); + const body = foldFlowLines(`${wsStart}${value}${wsEnd}`, indent, FOLD_BLOCK, strOptions.fold); + return `${header}\n${indent}${body}`; +} - var _Pair = _interopRequireDefault(Pair_1); +function plainString(item, ctx, onComment, onChompKeep) { + const { + comment, + type, + value + } = item; + const { + actualString, + implicitKey, + indent, + inFlow + } = ctx; - var _Seq = _interopRequireDefault(Seq); + if (implicitKey && /[\n[\]{},]/.test(value) || inFlow && /[[\]{},]/.test(value)) { + return doubleQuotedString(value, ctx); + } - var _Collection = _interopRequireDefault(Collection_1$1); + if (!value || /^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(value)) { + // not allowed: + // - empty string, '-' or '?' + // - start with an indicator character (except [?:-]) or /[?-] / + // - '\n ', ': ' or ' \n' anywhere + // - '#' not preceded by a non-space char + // - end with ' ' or ':' + return implicitKey || inFlow || value.indexOf('\n') === -1 ? value.indexOf('"') !== -1 && value.indexOf("'") === -1 ? singleQuotedString(value, ctx) : doubleQuotedString(value, ctx) : blockString(item, ctx, onComment, onChompKeep); + } - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + if (!implicitKey && !inFlow && type !== PlainValueEc8e588e.Type.PLAIN && value.indexOf('\n') !== -1) { + // Where allowed & type not set explicitly, prefer block style for multiline strings + return blockString(item, ctx, onComment, onChompKeep); } - function parseSeq(doc, cst) { - if (cst.type !== constants.Type.SEQ && cst.type !== constants.Type.FLOW_SEQ) { - const msg = `A ${cst.type} node cannot be resolved as a sequence`; - doc.errors.push(new errors.YAMLSyntaxError(cst, msg)); - return null; - } + if (indent === '' && containsDocumentMarker(value)) { + ctx.forceBlockIndent = true; + return blockString(item, ctx, onComment, onChompKeep); + } + + const str = value.replace(/\n+/g, `$&\n${indent}`); // Verify that output will be parsed as a string, as e.g. plain numbers and + // booleans get parsed with those types in v1.2 (e.g. '42', 'true' & '0.9e-3'), + // and others in v1.1. + if (actualString) { const { - comments, - items - } = cst.type === constants.Type.FLOW_SEQ ? resolveFlowSeqItems(doc, cst) : resolveBlockSeqItems(doc, cst); - const seq = new _Seq.default(); - seq.items = items; - (0, parseUtils.resolveComments)(seq, comments); + tags + } = ctx.doc.schema; + const resolved = resolveScalar(str, tags, tags.scalarFallback).value; + if (typeof resolved !== 'string') return doubleQuotedString(value, ctx); + } - if (!doc.options.mapAsMap && items.some(it => it instanceof _Pair.default && it.key instanceof _Collection.default)) { - const warn = 'Keys with collection values will be stringified as YAML due to JS Object restrictions. Use mapAsMap: true to avoid this.'; - doc.warnings.push(new errors.YAMLWarning(cst, warn)); - } + const body = implicitKey ? str : foldFlowLines(str, indent, FOLD_FLOW, getFoldOptions(ctx)); - cst.resolved = seq; - return seq; + if (comment && !inFlow && (body.indexOf('\n') !== -1 || comment.indexOf('\n') !== -1)) { + if (onComment) onComment(); + return addCommentBefore(body, indent, comment); } - function resolveBlockSeqItems(doc, cst) { - const comments = []; - const items = []; + return body; +} - for (let i = 0; i < cst.items.length; ++i) { - const item = cst.items[i]; +function stringifyString(item, ctx, onComment, onChompKeep) { + const { + defaultType + } = strOptions; + const { + implicitKey, + inFlow + } = ctx; + let { + type, + value + } = item; - switch (item.type) { - case constants.Type.BLANK_LINE: - comments.push({ - before: items.length - }); - break; + if (typeof value !== 'string') { + value = String(value); + item = Object.assign({}, item, { + value + }); + } - case constants.Type.COMMENT: - comments.push({ - comment: item.comment, - before: items.length - }); - break; + const _stringify = _type => { + switch (_type) { + case PlainValueEc8e588e.Type.BLOCK_FOLDED: + case PlainValueEc8e588e.Type.BLOCK_LITERAL: + return blockString(item, ctx, onComment, onChompKeep); - case constants.Type.SEQ_ITEM: - if (item.error) doc.errors.push(item.error); - items.push(doc.resolveNode(item.node)); + case PlainValueEc8e588e.Type.QUOTE_DOUBLE: + return doubleQuotedString(value, ctx); - if (item.hasProps) { - const msg = 'Sequence items cannot have tags or anchors before the - indicator'; - doc.errors.push(new errors.YAMLSemanticError(item, msg)); - } + case PlainValueEc8e588e.Type.QUOTE_SINGLE: + return singleQuotedString(value, ctx); - break; + case PlainValueEc8e588e.Type.PLAIN: + return plainString(item, ctx, onComment, onChompKeep); - default: - if (item.error) doc.errors.push(item.error); - doc.errors.push(new errors.YAMLSyntaxError(item, `Unexpected ${item.type} node in sequence`)); - } + default: + return null; } + }; - return { - comments, - items - }; + if (type !== PlainValueEc8e588e.Type.QUOTE_DOUBLE && /[\x00-\x08\x0b-\x1f\x7f-\x9f]/.test(value)) { + // force double quotes on control characters + type = PlainValueEc8e588e.Type.QUOTE_DOUBLE; + } else if ((implicitKey || inFlow) && (type === PlainValueEc8e588e.Type.BLOCK_FOLDED || type === PlainValueEc8e588e.Type.BLOCK_LITERAL)) { + // should not happen; blocks are not valid inside flow containers + type = PlainValueEc8e588e.Type.QUOTE_DOUBLE; } - function resolveFlowSeqItems(doc, cst) { - const comments = []; - const items = []; - let explicitKey = false; - let key = undefined; - let keyStart = null; - let next = '['; + let res = _stringify(type); - for (let i = 0; i < cst.items.length; ++i) { - const item = cst.items[i]; + if (res === null) { + res = _stringify(defaultType); + if (res === null) throw new Error(`Unsupported default string type ${defaultType}`); + } - if (typeof item.char === 'string') { - const { - char, - offset - } = item; + return res; +} - if (char !== ':' && (explicitKey || key !== undefined)) { - if (explicitKey && key === undefined) key = next ? items.pop() : null; - items.push(new _Pair.default(key)); - explicitKey = false; - key = undefined; - keyStart = null; - } +function stringifyNumber({ + format, + minFractionDigits, + tag, + value +}) { + if (typeof value === 'bigint') return String(value); + if (!isFinite(value)) return isNaN(value) ? '.nan' : value < 0 ? '-.inf' : '.inf'; + let n = JSON.stringify(value); - if (char === next) { - next = null; - } else if (!next && char === '?') { - explicitKey = true; - } else if (next !== '[' && char === ':' && key === undefined) { - if (next === ',') { - key = items.pop(); - - if (key instanceof _Pair.default) { - const msg = 'Chaining flow sequence pairs is invalid'; - const err = new errors.YAMLSemanticError(cst, msg); - err.offset = offset; - doc.errors.push(err); - } + if (!format && minFractionDigits && (!tag || tag === 'tag:yaml.org,2002:float') && /^\d/.test(n)) { + let i = n.indexOf('.'); - if (!explicitKey) (0, parseUtils.checkKeyLength)(doc.errors, cst, i, key, keyStart); - } else { - key = null; - } + if (i < 0) { + i = n.length; + n += '.'; + } - keyStart = null; - explicitKey = false; // TODO: add error for non-explicit multiline plain key - - next = null; - } else if (next === '[' || char !== ']' || i < cst.items.length - 1) { - const msg = `Flow sequence contains an unexpected ${char}`; - const err = new errors.YAMLSyntaxError(cst, msg); - err.offset = offset; - doc.errors.push(err); - } - } else if (item.type === constants.Type.BLANK_LINE) { - comments.push({ - before: items.length - }); - } else if (item.type === constants.Type.COMMENT) { - comments.push({ - comment: item.comment, - before: items.length - }); - } else { - if (next) { - const msg = `Expected a ${next} in flow sequence`; - doc.errors.push(new errors.YAMLSemanticError(item, msg)); - } + let d = minFractionDigits - (n.length - i - 1); - const value = doc.resolveNode(item); + while (d-- > 0) n += '0'; + } - if (key === undefined) { - items.push(value); - } else { - items.push(new _Pair.default(key, value)); - key = undefined; - } + return n; +} - keyStart = item.range.start; - next = ','; - } - } +function checkFlowCollectionEnd(errors, cst) { + let char, name; - (0, parseUtils.checkFlowCollectionEnd)(doc.errors, cst); - if (key !== undefined) items.push(new _Pair.default(key)); - return { - comments, - items - }; - } -}); -unwrapExports(parseSeq_1); + switch (cst.type) { + case PlainValueEc8e588e.Type.FLOW_MAP: + char = '}'; + name = 'flow map'; + break; -var seq = createCommonjsModule(function (module, exports) { + case PlainValueEc8e588e.Type.FLOW_SEQ: + char = ']'; + name = 'flow sequence'; + break; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; + default: + errors.push(new PlainValueEc8e588e.YAMLSemanticError(cst, 'Not a flow collection!?')); + return; + } - var _parseSeq = _interopRequireDefault(parseSeq_1); + let lastItem; - var _Seq = _interopRequireDefault(Seq); + for (let i = cst.items.length - 1; i >= 0; --i) { + const item = cst.items[i]; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + if (!item || item.type !== PlainValueEc8e588e.Type.COMMENT) { + lastItem = item; + break; + } } - function createSeq(schema, obj, ctx) { - const seq = new _Seq.default(schema); + if (lastItem && lastItem.char !== char) { + const msg = `Expected ${name} to end with ${char}`; + let err; - if (obj && obj[Symbol.iterator]) { - for (const it of obj) { - const v = schema.createNode(it, ctx.wrapScalars, null, ctx); - seq.items.push(v); - } + if (typeof lastItem.offset === 'number') { + err = new PlainValueEc8e588e.YAMLSemanticError(cst, msg); + err.offset = lastItem.offset + 1; + } else { + err = new PlainValueEc8e588e.YAMLSemanticError(lastItem, msg); + if (lastItem.range && lastItem.range.end) err.offset = lastItem.range.end - lastItem.range.start; } - return seq; + errors.push(err); } +} - var _default = { - createNode: createSeq, - default: true, - nodeClass: _Seq.default, - tag: 'tag:yaml.org,2002:seq', - resolve: _parseSeq.default - }; - exports.default = _default; -}); -unwrapExports(seq); - -var string = createCommonjsModule(function (module, exports) { +function checkFlowCommentSpace(errors, comment) { + const prev = comment.context.src[comment.range.start - 1]; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = exports.resolveString = void 0; - - const resolveString = (doc, node) => { - // on error, will return { str: string, errors: Error[] } - const res = node.strValue; - if (!res) return ''; - if (typeof res === 'string') return res; - res.errors.forEach(error => { - if (!error.source) error.source = node; - doc.errors.push(error); - }); - return res.str; - }; + if (prev !== '\n' && prev !== '\t' && prev !== ' ') { + const msg = 'Comments must be separated from other tokens by white space characters'; + errors.push(new PlainValueEc8e588e.YAMLSemanticError(comment, msg)); + } +} - exports.resolveString = resolveString; - var _default = { - identify: value => typeof value === 'string', - default: true, - tag: 'tag:yaml.org,2002:str', - resolve: resolveString, - - stringify(item, ctx, onComment, onChompKeep) { - ctx = Object.assign({ - actualString: true - }, ctx); - return (0, stringify.stringifyString)(item, ctx, onComment, onChompKeep); - }, +function getLongKeyError(source, key) { + const sk = String(key); + const k = sk.substr(0, 8) + '...' + sk.substr(-8); + return new PlainValueEc8e588e.YAMLSemanticError(source, `The "${k}" key is too long`); +} - options: options.strOptions - }; - exports.default = _default; -}); -unwrapExports(string); -var string_1 = string.resolveString; +function resolveComments(collection, comments) { + for (const { + afterKey, + before, + comment + } of comments) { + let item = collection.items[before]; -var failsafe = createCommonjsModule(function (module, exports) { + if (!item) { + if (comment !== undefined) { + if (collection.comment) collection.comment += '\n' + comment;else collection.comment = comment; + } + } else { + if (afterKey && item.value) item = item.value; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; + if (comment === undefined) { + if (afterKey || !item.commentBefore) item.spaceBefore = true; + } else { + if (item.commentBefore) item.commentBefore += '\n' + comment;else item.commentBefore = comment; + } + } + } +} // on error, will return { str: string, errors: Error[] } - var _map = _interopRequireDefault(map); - var _seq = _interopRequireDefault(seq); +function resolveString(doc, node) { + const res = node.strValue; + if (!res) return ''; + if (typeof res === 'string') return res; + res.errors.forEach(error => { + if (!error.source) error.source = node; + doc.errors.push(error); + }); + return res.str; +} - var _string = _interopRequireDefault(string); +function resolveTagHandle(doc, node) { + const { + handle, + suffix + } = node.tag; + let prefix = doc.tagPrefixes.find(p => p.handle === handle); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + if (!prefix) { + const dtp = doc.getDefaults().tagPrefixes; + if (dtp) prefix = dtp.find(p => p.handle === handle); + if (!prefix) throw new PlainValueEc8e588e.YAMLSemanticError(node, `The ${handle} tag handle is non-default and was not declared.`); } - var _default = [_map.default, _seq.default, _string.default]; - exports.default = _default; -}); -unwrapExports(failsafe); + if (!suffix) throw new PlainValueEc8e588e.YAMLSemanticError(node, `The ${handle} tag has no suffix.`); -var core = createCommonjsModule(function (module, exports) { + if (handle === '!' && (doc.version || doc.options.version) === '1.0') { + if (suffix[0] === '^') { + doc.warnings.push(new PlainValueEc8e588e.YAMLWarning(node, 'YAML 1.0 ^ tag expansion is not supported')); + return suffix; + } - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = exports.floatObj = exports.expObj = exports.nanObj = exports.hexObj = exports.intObj = exports.octObj = exports.boolObj = exports.nullObj = void 0; + if (/[:/]/.test(suffix)) { + // word/foo -> tag:word.yaml.org,2002:foo + const vocab = suffix.match(/^([a-z0-9-]+)\/(.*)/i); + return vocab ? `tag:${vocab[1]}.yaml.org,2002:${vocab[2]}` : `tag:${suffix}`; + } + } - var _Scalar = _interopRequireDefault(Scalar_1); + return prefix.prefix + decodeURIComponent(suffix); +} - var _failsafe = _interopRequireDefault(failsafe); +function resolveTagName(doc, node) { + const { + tag, + type + } = node; + let nonSpecific = false; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + if (tag) { + const { + handle, + suffix, + verbatim + } = tag; + + if (verbatim) { + if (verbatim !== '!' && verbatim !== '!!') return verbatim; + const msg = `Verbatim tags aren't resolved, so ${verbatim} is invalid.`; + doc.errors.push(new PlainValueEc8e588e.YAMLSemanticError(node, msg)); + } else if (handle === '!' && !suffix) { + nonSpecific = true; + } else { + try { + return resolveTagHandle(doc, node); + } catch (error) { + doc.errors.push(error); + } + } } - const nullObj = { - identify: value => value == null, - createNode: (schema, value, ctx) => ctx.wrapScalars ? new _Scalar.default(null) : null, - default: true, - tag: 'tag:yaml.org,2002:null', - test: /^(?:~|[Nn]ull|NULL)?$/, - resolve: () => null, - options: options.nullOptions, - stringify: () => options.nullOptions.nullStr - }; - exports.nullObj = nullObj; - const boolObj = { - identify: value => typeof value === 'boolean', - default: true, - tag: 'tag:yaml.org,2002:bool', - test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/, - resolve: str => str[0] === 't' || str[0] === 'T', - options: options.boolOptions, - stringify: ({ - value - }) => value ? options.boolOptions.trueStr : options.boolOptions.falseStr - }; - exports.boolObj = boolObj; - const octObj = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'OCT', - test: /^0o([0-7]+)$/, - resolve: (str, oct) => parseInt(oct, 8), - stringify: ({ - value - }) => '0o' + value.toString(8) - }; - exports.octObj = octObj; - const intObj = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:int', - test: /^[-+]?[0-9]+$/, - resolve: str => parseInt(str, 10), - stringify: stringify.stringifyNumber - }; - exports.intObj = intObj; - const hexObj = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'HEX', - test: /^0x([0-9a-fA-F]+)$/, - resolve: (str, hex) => parseInt(hex, 16), - stringify: ({ - value - }) => '0x' + value.toString(16) - }; - exports.hexObj = hexObj; - const nanObj = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - test: /^(?:[-+]?\.inf|(\.nan))$/i, - resolve: (str, nan) => nan ? NaN : str[0] === '-' ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, - stringify: stringify.stringifyNumber - }; - exports.nanObj = nanObj; - const expObj = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - format: 'EXP', - test: /^[-+]?(?:0|[1-9][0-9]*)(\.[0-9]*)?[eE][-+]?[0-9]+$/, - resolve: str => parseFloat(str), - stringify: ({ - value - }) => Number(value).toExponential() - }; - exports.expObj = expObj; - const floatObj = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - test: /^[-+]?(?:0|[1-9][0-9]*)\.([0-9]*)$/, - - resolve(str, frac) { - const node = new _Scalar.default(parseFloat(str)); - if (frac && frac[frac.length - 1] === '0') node.minFractionDigits = frac.length; - return node; - }, + switch (type) { + case PlainValueEc8e588e.Type.BLOCK_FOLDED: + case PlainValueEc8e588e.Type.BLOCK_LITERAL: + case PlainValueEc8e588e.Type.QUOTE_DOUBLE: + case PlainValueEc8e588e.Type.QUOTE_SINGLE: + return PlainValueEc8e588e.defaultTags.STR; - stringify: stringify.stringifyNumber - }; - exports.floatObj = floatObj; + case PlainValueEc8e588e.Type.FLOW_MAP: + case PlainValueEc8e588e.Type.MAP: + return PlainValueEc8e588e.defaultTags.MAP; - var _default = _failsafe.default.concat([nullObj, boolObj, octObj, intObj, hexObj, nanObj, expObj, floatObj]); + case PlainValueEc8e588e.Type.FLOW_SEQ: + case PlainValueEc8e588e.Type.SEQ: + return PlainValueEc8e588e.defaultTags.SEQ; - exports.default = _default; -}); -unwrapExports(core); -var core_1 = core.floatObj; -var core_2 = core.expObj; -var core_3 = core.nanObj; -var core_4 = core.hexObj; -var core_5 = core.intObj; -var core_6 = core.octObj; -var core_7 = core.boolObj; -var core_8 = core.nullObj; - -var json = createCommonjsModule(function (module, exports) { + case PlainValueEc8e588e.Type.PLAIN: + return nonSpecific ? PlainValueEc8e588e.defaultTags.STR : null; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; + default: + return null; + } +} + +function resolveByTagName(doc, node, tagName) { + const { + tags + } = doc.schema; + const matchWithTest = []; - var _map = _interopRequireDefault(map); + for (const tag of tags) { + if (tag.tag === tagName) { + if (tag.test) matchWithTest.push(tag);else { + const res = tag.resolve(doc, node); + return res instanceof Collection$1 ? res : new Scalar(res); + } + } + } - var _seq = _interopRequireDefault(seq); + const str = resolveString(doc, node); + if (typeof str === 'string' && matchWithTest.length > 0) return resolveScalar(str, matchWithTest, tags.scalarFallback); + return null; +} - var _Scalar = _interopRequireDefault(Scalar_1); +function getFallbackTagName({ + type +}) { + switch (type) { + case PlainValueEc8e588e.Type.FLOW_MAP: + case PlainValueEc8e588e.Type.MAP: + return PlainValueEc8e588e.defaultTags.MAP; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + case PlainValueEc8e588e.Type.FLOW_SEQ: + case PlainValueEc8e588e.Type.SEQ: + return PlainValueEc8e588e.defaultTags.SEQ; + + default: + return PlainValueEc8e588e.defaultTags.STR; } +} - const schema = [_map.default, _seq.default, { - identify: value => typeof value === 'string', - default: true, - tag: 'tag:yaml.org,2002:str', - resolve: string.resolveString, - stringify: value => JSON.stringify(value) - }, { - identify: value => value == null, - createNode: (schema, value, ctx) => ctx.wrapScalars ? new _Scalar.default(null) : null, - default: true, - tag: 'tag:yaml.org,2002:null', - test: /^null$/, - resolve: () => null, - stringify: value => JSON.stringify(value) - }, { - identify: value => typeof value === 'boolean', - default: true, - tag: 'tag:yaml.org,2002:bool', - test: /^true|false$/, - resolve: str => str === 'true', - stringify: value => JSON.stringify(value) - }, { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:int', - test: /^-?(?:0|[1-9][0-9]*)$/, - resolve: str => parseInt(str, 10), - stringify: value => JSON.stringify(value) - }, { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - test: /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/, - resolve: str => parseFloat(str), - stringify: value => JSON.stringify(value) - }]; - - schema.scalarFallback = str => { - throw new SyntaxError(`Unresolved plain scalar ${JSON.stringify(str)}`); - }; +function resolveTag(doc, node, tagName) { + try { + const res = resolveByTagName(doc, node, tagName); - var _default = schema; - exports.default = _default; -}); -unwrapExports(json); + if (res) { + if (tagName && node.tag) res.tag = tagName; + return res; + } + } catch (error) { + /* istanbul ignore if */ + if (!error.source) error.source = node; + doc.errors.push(error); + return null; + } -var binary = createCommonjsModule(function (module, exports) { + try { + const fallback = getFallbackTagName(node); + if (!fallback) throw new Error(`The tag ${tagName} is unavailable`); + const msg = `The tag ${tagName} is unavailable, falling back to ${fallback}`; + doc.warnings.push(new PlainValueEc8e588e.YAMLWarning(node, msg)); + const res = resolveByTagName(doc, node, fallback); + res.tag = tagName; + return res; + } catch (error) { + const refError = new PlainValueEc8e588e.YAMLReferenceError(node, error.message); + refError.stack = error.stack; + doc.errors.push(refError); + return null; + } +} - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; - /* global atob, btoa, Buffer */ - - var _default = { - identify: value => value instanceof Uint8Array, - // Buffer inherits from Uint8Array - default: false, - tag: 'tag:yaml.org,2002:binary', - - /** - * Returns a Buffer in node and an Uint8Array in browsers - * - * To use the resulting buffer as an image, you'll want to do something like: - * - * const blob = new Blob([buffer], { type: 'image/jpeg' }) - * document.querySelector('#photo').src = URL.createObjectURL(blob) - */ - resolve: (doc, node) => { - if (typeof Buffer === 'function') { - const src = (0, string.resolveString)(doc, node); - return Buffer.from(src, 'base64'); - } else if (typeof atob === 'function') { - const src = atob((0, string.resolveString)(doc, node)); - const buffer = new Uint8Array(src.length); - - for (let i = 0; i < src.length; ++i) buffer[i] = src.charCodeAt(i); - - return buffer; - } else { - doc.errors.push(new errors.YAMLReferenceError(node, 'This environment does not support reading binary tags; either Buffer or atob is required')); - return null; - } - }, - options: options.binaryOptions, - stringify: ({ - comment, - type, - value - }, ctx, onComment, onChompKeep) => { - let src; +const isCollectionItem = node => { + if (!node) return false; + const { + type + } = node; + return type === PlainValueEc8e588e.Type.MAP_KEY || type === PlainValueEc8e588e.Type.MAP_VALUE || type === PlainValueEc8e588e.Type.SEQ_ITEM; +}; - if (typeof Buffer === 'function') { - src = value instanceof Buffer ? value.toString('base64') : Buffer.from(value.buffer).toString('base64'); - } else if (typeof btoa === 'function') { - let s = ''; +function resolveNodeProps(errors, node) { + const comments = { + before: [], + after: [] + }; + let hasAnchor = false; + let hasTag = false; + const props = isCollectionItem(node.context.parent) ? node.context.parent.props.concat(node.props) : node.props; - for (let i = 0; i < value.length; ++i) s += String.fromCharCode(value[i]); + for (const { + start, + end + } of props) { + switch (node.context.src[start]) { + case PlainValueEc8e588e.Char.COMMENT: + { + if (!node.commentHasRequiredWhitespace(start)) { + const msg = 'Comments must be separated from other tokens by white space characters'; + errors.push(new PlainValueEc8e588e.YAMLSemanticError(node, msg)); + } - src = btoa(s); - } else { - throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required'); - } + const { + header, + valueRange + } = node; + const cc = valueRange && (start > valueRange.start || header && start > header.start) ? comments.after : comments.before; + cc.push(node.context.src.slice(start + 1, end)); + break; + } + // Actual anchor & tag resolution is handled by schema, here we just complain - if (!type) type = options.binaryOptions.defaultType; + case PlainValueEc8e588e.Char.ANCHOR: + if (hasAnchor) { + const msg = 'A node can have at most one anchor'; + errors.push(new PlainValueEc8e588e.YAMLSemanticError(node, msg)); + } - if (type === constants.Type.QUOTE_DOUBLE) { - value = src; - } else { - const { - lineWidth - } = options.binaryOptions; - const n = Math.ceil(src.length / lineWidth); - const lines = new Array(n); + hasAnchor = true; + break; - for (let i = 0, o = 0; i < n; ++i, o += lineWidth) { - lines[i] = src.substr(o, lineWidth); + case PlainValueEc8e588e.Char.TAG: + if (hasTag) { + const msg = 'A node can have at most one tag'; + errors.push(new PlainValueEc8e588e.YAMLSemanticError(node, msg)); } - value = lines.join(type === constants.Type.BLOCK_LITERAL ? '\n' : ' '); - } - - return (0, stringify.stringifyString)({ - comment, - type, - value - }, ctx, onComment, onChompKeep); + hasTag = true; + break; } + } + + return { + comments, + hasAnchor, + hasTag }; - exports.default = _default; -}); -unwrapExports(binary); +} -var pairs = createCommonjsModule(function (module, exports) { +function resolveNodeValue(doc, node) { + const { + anchors, + errors, + schema + } = doc; + + if (node.type === PlainValueEc8e588e.Type.ALIAS) { + const name = node.rawValue; + const src = anchors.getNode(name); + + if (!src) { + const msg = `Aliased anchor not found: ${name}`; + errors.push(new PlainValueEc8e588e.YAMLReferenceError(node, msg)); + return null; + } // Lazy resolution for circular references - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.parsePairs = parsePairs; - exports.createPairs = createPairs; - exports.default = void 0; - var _Map$1 = _interopRequireDefault(_Map); + const res = new Alias$1(src); - var _Pair = _interopRequireDefault(Pair_1); + anchors._cstAliases.push(res); - var _parseSeq = _interopRequireDefault(parseSeq_1); + return res; + } - var _Seq = _interopRequireDefault(Seq); + const tagName = resolveTagName(doc, node); + if (tagName) return resolveTag(doc, node, tagName); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + if (node.type !== PlainValueEc8e588e.Type.PLAIN) { + const msg = `Failed to resolve ${node.type} node here`; + errors.push(new PlainValueEc8e588e.YAMLSyntaxError(node, msg)); + return null; } - function parsePairs(doc, cst) { - const seq = (0, _parseSeq.default)(doc, cst); + try { + const str = resolveString(doc, node); + return resolveScalar(str, schema.tags, schema.tags.scalarFallback); + } catch (error) { + if (!error.source) error.source = node; + errors.push(error); + return null; + } +} // sets node.resolved on success - for (let i = 0; i < seq.items.length; ++i) { - let item = seq.items[i]; - if (item instanceof _Pair.default) continue;else if (item instanceof _Map$1.default) { - if (item.items.length > 1) { - const msg = 'Each pair must have its own sequence indicator'; - throw new errors.YAMLSemanticError(cst, msg); - } - const pair = item.items[0] || new _Pair.default(); - if (item.commentBefore) pair.commentBefore = pair.commentBefore ? `${item.commentBefore}\n${pair.commentBefore}` : item.commentBefore; - if (item.comment) pair.comment = pair.comment ? `${item.comment}\n${pair.comment}` : item.comment; - item = pair; - } - seq.items[i] = item instanceof _Pair.default ? item : new _Pair.default(item); - } +function resolveNode(doc, node) { + if (!node) return null; + if (node.error) doc.errors.push(node.error); + const { + comments, + hasAnchor, + hasTag + } = resolveNodeProps(doc.errors, node); - return seq; + if (hasAnchor) { + const { + anchors + } = doc; + const name = node.anchor; + const prev = anchors.getNode(name); // At this point, aliases for any preceding node with the same anchor + // name have already been resolved, so it may safely be renamed. + + if (prev) anchors.map[anchors.newName(name)] = prev; // During parsing, we need to store the CST node in anchors.map as + // anchors need to be available during resolution to allow for + // circular references. + + anchors.map[name] = node; } - function createPairs(schema, iterable, ctx) { - const pairs = new _Seq.default(schema); - pairs.tag = 'tag:yaml.org,2002:pairs'; + if (node.type === PlainValueEc8e588e.Type.ALIAS && (hasAnchor || hasTag)) { + const msg = 'An alias node must not specify any properties'; + doc.errors.push(new PlainValueEc8e588e.YAMLSemanticError(node, msg)); + } - for (const it of iterable) { - let key, value; + const res = resolveNodeValue(doc, node); - if (Array.isArray(it)) { - if (it.length === 2) { - key = it[0]; - value = it[1]; - } else throw new TypeError(`Expected [key, value] tuple: ${it}`); - } else if (it && it instanceof Object) { - const keys = Object.keys(it); - - if (keys.length === 1) { - key = keys[0]; - value = it[key]; - } else throw new TypeError(`Expected { key: value } tuple: ${it}`); - } else { - key = it; - } + if (res) { + res.range = [node.range.start, node.range.end]; + if (doc.options.keepCstNodes) res.cstNode = node; + if (doc.options.keepNodeTypes) res.type = node.type; + const cb = comments.before.join('\n'); - const pair = schema.createPair(key, value, ctx); - pairs.items.push(pair); + if (cb) { + res.commentBefore = res.commentBefore ? `${res.commentBefore}\n${cb}` : cb; } - return pairs; + const ca = comments.after.join('\n'); + if (ca) res.comment = res.comment ? `${res.comment}\n${ca}` : ca; } - var _default = { - default: false, - tag: 'tag:yaml.org,2002:pairs', - resolve: parsePairs, - createNode: createPairs - }; - exports.default = _default; -}); -unwrapExports(pairs); -var pairs_1 = pairs.parsePairs; -var pairs_2 = pairs.createPairs; + return node.resolved = res; +} -var omap = createCommonjsModule(function (module, exports) { +function resolveMap(doc, cst) { + if (cst.type !== PlainValueEc8e588e.Type.MAP && cst.type !== PlainValueEc8e588e.Type.FLOW_MAP) { + const msg = `A ${cst.type} node cannot be resolved as a mapping`; + doc.errors.push(new PlainValueEc8e588e.YAMLSyntaxError(cst, msg)); + return null; + } - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = exports.YAMLOMap = void 0; + const { + comments, + items + } = cst.type === PlainValueEc8e588e.Type.FLOW_MAP ? resolveFlowMapItems(doc, cst) : resolveBlockMapItems(doc, cst); + const map = new YAMLMap(); + map.items = items; + resolveComments(map, comments); + let hasCollectionKey = false; + + for (let i = 0; i < items.length; ++i) { + const { + key: iKey + } = items[i]; + if (iKey instanceof Collection$1) hasCollectionKey = true; + + if (doc.schema.merge && iKey && iKey.value === MERGE_KEY) { + items[i] = new Merge(items[i]); + const sources = items[i].value.items; + let error = null; + sources.some(node => { + if (node instanceof Alias$1) { + // During parsing, alias sources are CST nodes; to account for + // circular references their resolved values can't be used here. + const { + type + } = node.source; + if (type === PlainValueEc8e588e.Type.MAP || type === PlainValueEc8e588e.Type.FLOW_MAP) return false; + return error = 'Merge nodes aliases can only point to maps'; + } + + return error = 'Merge nodes can only have Alias nodes as values'; + }); + if (error) doc.errors.push(new PlainValueEc8e588e.YAMLSemanticError(cst, error)); + } else { + for (let j = i + 1; j < items.length; ++j) { + const { + key: jKey + } = items[j]; + + if (iKey === jKey || iKey && jKey && Object.prototype.hasOwnProperty.call(iKey, 'value') && iKey.value === jKey.value) { + const msg = `Map keys must be unique; "${iKey}" is repeated`; + doc.errors.push(new PlainValueEc8e588e.YAMLSemanticError(cst, msg)); + break; + } + } + } + } - var _toJSON = _interopRequireDefault(toJSON_1); + if (hasCollectionKey && !doc.options.mapAsMap) { + const warn = 'Keys with collection values will be stringified as YAML due to JS Object restrictions. Use mapAsMap: true to avoid this.'; + doc.warnings.push(new PlainValueEc8e588e.YAMLWarning(cst, warn)); + } - var _Map$1 = _interopRequireDefault(_Map); + cst.resolved = map; + return map; +} - var _Pair = _interopRequireDefault(Pair_1); +const valueHasPairComment = ({ + context: { + lineStart, + node, + src + }, + props +}) => { + if (props.length === 0) return false; + const { + start + } = props[0]; + if (node && start > node.valueRange.start) return false; + if (src[start] !== PlainValueEc8e588e.Char.COMMENT) return false; - var _Scalar = _interopRequireDefault(Scalar_1); + for (let i = lineStart; i < start; ++i) if (src[i] === '\n') return false; - var _Seq = _interopRequireDefault(Seq); + return true; +}; - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } +function resolvePairComment(item, pair) { + if (!valueHasPairComment(item)) return; + const comment = item.getPropValue(0, PlainValueEc8e588e.Char.COMMENT, true); + let found = false; + const cb = pair.value.commentBefore; - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } + if (cb && cb.startsWith(comment)) { + pair.value.commentBefore = cb.substr(comment.length + 1); + found = true; + } else { + const cc = pair.value.comment; - return obj; + if (!item.node && cc && cc.startsWith(comment)) { + pair.value.comment = cc.substr(comment.length + 1); + found = true; + } } - class YAMLOMap extends _Seq.default { - constructor() { - super(); + if (found) pair.comment = comment; +} + +function resolveBlockMapItems(doc, cst) { + const comments = []; + const items = []; + let key = undefined; + let keyStart = null; - _defineProperty(this, "add", _Map$1.default.prototype.add.bind(this)); + for (let i = 0; i < cst.items.length; ++i) { + const item = cst.items[i]; - _defineProperty(this, "delete", _Map$1.default.prototype.delete.bind(this)); + switch (item.type) { + case PlainValueEc8e588e.Type.BLANK_LINE: + comments.push({ + afterKey: !!key, + before: items.length + }); + break; - _defineProperty(this, "get", _Map$1.default.prototype.get.bind(this)); + case PlainValueEc8e588e.Type.COMMENT: + comments.push({ + afterKey: !!key, + before: items.length, + comment: item.comment + }); + break; - _defineProperty(this, "has", _Map$1.default.prototype.has.bind(this)); + case PlainValueEc8e588e.Type.MAP_KEY: + if (key !== undefined) items.push(new Pair(key)); + if (item.error) doc.errors.push(item.error); + key = resolveNode(doc, item.node); + keyStart = null; + break; - _defineProperty(this, "set", _Map$1.default.prototype.set.bind(this)); + case PlainValueEc8e588e.Type.MAP_VALUE: + { + if (key === undefined) key = null; + if (item.error) doc.errors.push(item.error); - this.tag = YAMLOMap.tag; - } + if (!item.context.atLineStart && item.node && item.node.type === PlainValueEc8e588e.Type.MAP && !item.node.context.atLineStart) { + const msg = 'Nested mappings are not allowed in compact mappings'; + doc.errors.push(new PlainValueEc8e588e.YAMLSemanticError(item.node, msg)); + } - toJSON(_, ctx) { - const map = new Map(); - if (ctx && ctx.onCreate) ctx.onCreate(map); + let valueNode = item.node; - for (const pair of this.items) { - let key, value; + if (!valueNode && item.props.length > 0) { + // Comments on an empty mapping value need to be preserved, so we + // need to construct a minimal empty node here to use instead of the + // missing `item.node`. -- eemeli/yaml#19 + valueNode = new PlainValueEc8e588e.PlainValue(PlainValueEc8e588e.Type.PLAIN, []); + valueNode.context = { + parent: item, + src: item.context.src + }; + const pos = item.range.start + 1; + valueNode.range = { + start: pos, + end: pos + }; + valueNode.valueRange = { + start: pos, + end: pos + }; - if (pair instanceof _Pair.default) { - key = (0, _toJSON.default)(pair.key, '', ctx); - value = (0, _toJSON.default)(pair.value, key, ctx); - } else { - key = (0, _toJSON.default)(pair, '', ctx); - } + if (typeof item.range.origStart === 'number') { + const origPos = item.range.origStart + 1; + valueNode.range.origStart = valueNode.range.origEnd = origPos; + valueNode.valueRange.origStart = valueNode.valueRange.origEnd = origPos; + } + } - if (map.has(key)) throw new Error('Ordered maps must not include duplicate keys'); - map.set(key, value); - } + const pair = new Pair(key, resolveNode(doc, valueNode)); + resolvePairComment(item, pair); + items.push(pair); - return map; - } + if (key && typeof keyStart === 'number') { + if (item.range.start > keyStart + 1024) doc.errors.push(getLongKeyError(cst, key)); + } - } + key = undefined; + keyStart = null; + } + break; - exports.YAMLOMap = YAMLOMap; + default: + if (key !== undefined) items.push(new Pair(key)); + key = resolveNode(doc, item); + keyStart = item.range.start; + if (item.error) doc.errors.push(item.error); - _defineProperty(YAMLOMap, "tag", 'tag:yaml.org,2002:omap'); + next: for (let j = i + 1;; ++j) { + const nextItem = cst.items[j]; - function parseOMap(doc, cst) { - const pairs$1 = (0, pairs.parsePairs)(doc, cst); - const seenKeys = []; + switch (nextItem && nextItem.type) { + case PlainValueEc8e588e.Type.BLANK_LINE: + case PlainValueEc8e588e.Type.COMMENT: + continue next; - for (const { - key - } of pairs$1.items) { - if (key instanceof _Scalar.default) { - if (seenKeys.includes(key.value)) { - const msg = 'Ordered maps must not include duplicate keys'; - throw new errors.YAMLSemanticError(cst, msg); - } else { - seenKeys.push(key.value); + case PlainValueEc8e588e.Type.MAP_VALUE: + break next; + + default: + { + const msg = 'Implicit map keys need to be followed by map values'; + doc.errors.push(new PlainValueEc8e588e.YAMLSemanticError(item, msg)); + break next; + } + } } - } - } - return Object.assign(new YAMLOMap(), pairs$1); - } + if (item.valueRangeContainsNewline) { + const msg = 'Implicit map keys need to be on a single line'; + doc.errors.push(new PlainValueEc8e588e.YAMLSemanticError(item, msg)); + } - function createOMap(schema, iterable, ctx) { - const pairs$1 = (0, pairs.createPairs)(schema, iterable, ctx); - const omap = new YAMLOMap(); - omap.items = pairs$1.items; - return omap; + } } - var _default = { - identify: value => value instanceof Map, - nodeClass: YAMLOMap, - default: false, - tag: 'tag:yaml.org,2002:omap', - resolve: parseOMap, - createNode: createOMap + if (key !== undefined) items.push(new Pair(key)); + return { + comments, + items }; - exports.default = _default; -}); -unwrapExports(omap); -var omap_1 = omap.YAMLOMap; +} -var set = createCommonjsModule(function (module, exports) { +function resolveFlowMapItems(doc, cst) { + const comments = []; + const items = []; + let key = undefined; + let explicitKey = false; + let next = '{'; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = exports.YAMLSet = void 0; + for (let i = 0; i < cst.items.length; ++i) { + const item = cst.items[i]; - var _Map$1 = _interopRequireWildcard(_Map); + if (typeof item.char === 'string') { + const { + char, + offset + } = item; - var _Pair = _interopRequireDefault(Pair_1); + if (char === '?' && key === undefined && !explicitKey) { + explicitKey = true; + next = ':'; + continue; + } - var _parseMap = _interopRequireDefault(parseMap_1); + if (char === ':') { + if (key === undefined) key = null; - var _Scalar = _interopRequireDefault(Scalar_1); + if (next === ':') { + next = ','; + continue; + } + } else { + if (explicitKey) { + if (key === undefined && char !== ',') key = null; + explicitKey = false; + } - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + if (key !== undefined) { + items.push(new Pair(key)); + key = undefined; + + if (char === ',') { + next = ':'; + continue; + } + } + } + + if (char === '}') { + if (i === cst.items.length - 1) continue; + } else if (char === next) { + next = ':'; + continue; + } + + const msg = `Flow map contains an unexpected ${char}`; + const err = new PlainValueEc8e588e.YAMLSyntaxError(cst, msg); + err.offset = offset; + doc.errors.push(err); + } else if (item.type === PlainValueEc8e588e.Type.BLANK_LINE) { + comments.push({ + afterKey: !!key, + before: items.length + }); + } else if (item.type === PlainValueEc8e588e.Type.COMMENT) { + checkFlowCommentSpace(doc.errors, item); + comments.push({ + afterKey: !!key, + before: items.length, + comment: item.comment + }); + } else if (key === undefined) { + if (next === ',') doc.errors.push(new PlainValueEc8e588e.YAMLSemanticError(item, 'Separator , missing in flow map')); + key = resolveNode(doc, item); + } else { + if (next !== ',') doc.errors.push(new PlainValueEc8e588e.YAMLSemanticError(item, 'Indicator : missing in flow map entry')); + items.push(new Pair(key, resolveNode(doc, item))); + key = undefined; + explicitKey = false; + } } - function _getRequireWildcardCache() { - if (typeof WeakMap !== "function") return null; - var cache = new WeakMap(); + checkFlowCollectionEnd(doc.errors, cst); + if (key !== undefined) items.push(new Pair(key)); + return { + comments, + items + }; +} - _getRequireWildcardCache = function () { - return cache; - }; +function resolveSeq(doc, cst) { + if (cst.type !== PlainValueEc8e588e.Type.SEQ && cst.type !== PlainValueEc8e588e.Type.FLOW_SEQ) { + const msg = `A ${cst.type} node cannot be resolved as a sequence`; + doc.errors.push(new PlainValueEc8e588e.YAMLSyntaxError(cst, msg)); + return null; + } - return cache; + const { + comments, + items + } = cst.type === PlainValueEc8e588e.Type.FLOW_SEQ ? resolveFlowSeqItems(doc, cst) : resolveBlockSeqItems(doc, cst); + const seq = new YAMLSeq(); + seq.items = items; + resolveComments(seq, comments); + + if (!doc.options.mapAsMap && items.some(it => it instanceof Pair && it.key instanceof Collection$1)) { + const warn = 'Keys with collection values will be stringified as YAML due to JS Object restrictions. Use mapAsMap: true to avoid this.'; + doc.warnings.push(new PlainValueEc8e588e.YAMLWarning(cst, warn)); } - function _interopRequireWildcard(obj) { - if (obj && obj.__esModule) { - return obj; - } + cst.resolved = seq; + return seq; +} - if (obj === null || typeof obj !== "object" && typeof obj !== "function") { - return { - default: obj - }; - } +function resolveBlockSeqItems(doc, cst) { + const comments = []; + const items = []; - var cache = _getRequireWildcardCache(); + for (let i = 0; i < cst.items.length; ++i) { + const item = cst.items[i]; - if (cache && cache.has(obj)) { - return cache.get(obj); - } + switch (item.type) { + case PlainValueEc8e588e.Type.BLANK_LINE: + comments.push({ + before: items.length + }); + break; - var newObj = {}; - var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + case PlainValueEc8e588e.Type.COMMENT: + comments.push({ + comment: item.comment, + before: items.length + }); + break; - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + case PlainValueEc8e588e.Type.SEQ_ITEM: + if (item.error) doc.errors.push(item.error); + items.push(resolveNode(doc, item.node)); - if (desc && (desc.get || desc.set)) { - Object.defineProperty(newObj, key, desc); - } else { - newObj[key] = obj[key]; + if (item.hasProps) { + const msg = 'Sequence items cannot have tags or anchors before the - indicator'; + doc.errors.push(new PlainValueEc8e588e.YAMLSemanticError(item, msg)); } - } - } - newObj.default = obj; + break; - if (cache) { - cache.set(obj, newObj); + default: + if (item.error) doc.errors.push(item.error); + doc.errors.push(new PlainValueEc8e588e.YAMLSyntaxError(item, `Unexpected ${item.type} node in sequence`)); } - - return newObj; } - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } + return { + comments, + items + }; +} - return obj; - } +function resolveFlowSeqItems(doc, cst) { + const comments = []; + const items = []; + let explicitKey = false; + let key = undefined; + let keyStart = null; + let next = '['; + let prevItem = null; - class YAMLSet extends _Map$1.default { - constructor() { - super(); - this.tag = YAMLSet.tag; - } + for (let i = 0; i < cst.items.length; ++i) { + const item = cst.items[i]; - add(key) { - const pair = key instanceof _Pair.default ? key : new _Pair.default(key); - const prev = (0, _Map$1.findPair)(this.items, pair.key); - if (!prev) this.items.push(pair); - } + if (typeof item.char === 'string') { + const { + char, + offset + } = item; - get(key, keepPair) { - const pair = (0, _Map$1.findPair)(this.items, key); - return !keepPair && pair instanceof _Pair.default ? pair.key instanceof _Scalar.default ? pair.key.value : pair.key : pair; - } + if (char !== ':' && (explicitKey || key !== undefined)) { + if (explicitKey && key === undefined) key = next ? items.pop() : null; + items.push(new Pair(key)); + explicitKey = false; + key = undefined; + keyStart = null; + } + + if (char === next) { + next = null; + } else if (!next && char === '?') { + explicitKey = true; + } else if (next !== '[' && char === ':' && key === undefined) { + if (next === ',') { + key = items.pop(); + + if (key instanceof Pair) { + const msg = 'Chaining flow sequence pairs is invalid'; + const err = new PlainValueEc8e588e.YAMLSemanticError(cst, msg); + err.offset = offset; + doc.errors.push(err); + } + + if (!explicitKey && typeof keyStart === 'number') { + const keyEnd = item.range ? item.range.start : item.offset; + if (keyEnd > keyStart + 1024) doc.errors.push(getLongKeyError(cst, key)); + const { + src + } = prevItem.context; + + for (let i = keyStart; i < keyEnd; ++i) if (src[i] === '\n') { + const msg = 'Implicit keys of flow sequence pairs need to be on a single line'; + doc.errors.push(new PlainValueEc8e588e.YAMLSemanticError(prevItem, msg)); + break; + } + } + } else { + key = null; + } + + keyStart = null; + explicitKey = false; + next = null; + } else if (next === '[' || char !== ']' || i < cst.items.length - 1) { + const msg = `Flow sequence contains an unexpected ${char}`; + const err = new PlainValueEc8e588e.YAMLSyntaxError(cst, msg); + err.offset = offset; + doc.errors.push(err); + } + } else if (item.type === PlainValueEc8e588e.Type.BLANK_LINE) { + comments.push({ + before: items.length + }); + } else if (item.type === PlainValueEc8e588e.Type.COMMENT) { + checkFlowCommentSpace(doc.errors, item); + comments.push({ + comment: item.comment, + before: items.length + }); + } else { + if (next) { + const msg = `Expected a ${next} in flow sequence`; + doc.errors.push(new PlainValueEc8e588e.YAMLSemanticError(item, msg)); + } - set(key, value) { - if (typeof value !== 'boolean') throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`); - const prev = (0, _Map$1.findPair)(this.items, key); + const value = resolveNode(doc, item); - if (prev && !value) { - this.items.splice(this.items.indexOf(prev), 1); - } else if (!prev && value) { - this.items.push(new _Pair.default(key)); + if (key === undefined) { + items.push(value); + prevItem = item; + } else { + items.push(new Pair(key, value)); + key = undefined; } - } - toJSON(_, ctx) { - return super.toJSON(_, ctx, Set); + keyStart = item.range.start; + next = ','; } + } - toString(ctx, onComment, onChompKeep) { - if (!ctx) return JSON.stringify(this); - if (this.hasAllNullValues()) return super.toString(ctx, onComment, onChompKeep);else throw new Error('Set items must all have null values'); - } + checkFlowCollectionEnd(doc.errors, cst); + if (key !== undefined) items.push(new Pair(key)); + return { + comments, + items + }; +} + +var Alias_1 = Alias$1; +var Collection_1 = Collection$1; +var Merge_1 = Merge; +var Node_1$1 = Node$1; +var Pair_1 = Pair; +var Scalar_1 = Scalar; +var YAMLMap_1 = YAMLMap; +var YAMLSeq_1 = YAMLSeq; +var addComment_1 = addComment; +var binaryOptions_1 = binaryOptions; +var boolOptions_1 = boolOptions; +var findPair_1 = findPair; +var intOptions_1 = intOptions; +var isEmptyPath_1 = isEmptyPath; +var nullOptions_1 = nullOptions; +var resolveMap_1 = resolveMap; +var resolveNode_1 = resolveNode; +var resolveSeq_1 = resolveSeq; +var resolveString_1 = resolveString; +var strOptions_1 = strOptions; +var stringifyNumber_1 = stringifyNumber; +var stringifyString_1 = stringifyString; +var toJSON_1 = toJSON; +var resolveSeq4a68b39b = { + Alias: Alias_1, + Collection: Collection_1, + Merge: Merge_1, + Node: Node_1$1, + Pair: Pair_1, + Scalar: Scalar_1, + YAMLMap: YAMLMap_1, + YAMLSeq: YAMLSeq_1, + addComment: addComment_1, + binaryOptions: binaryOptions_1, + boolOptions: boolOptions_1, + findPair: findPair_1, + intOptions: intOptions_1, + isEmptyPath: isEmptyPath_1, + nullOptions: nullOptions_1, + resolveMap: resolveMap_1, + resolveNode: resolveNode_1, + resolveSeq: resolveSeq_1, + resolveString: resolveString_1, + strOptions: strOptions_1, + stringifyNumber: stringifyNumber_1, + stringifyString: stringifyString_1, + toJSON: toJSON_1 +}; - } +/* global atob, btoa, Buffer */ - exports.YAMLSet = YAMLSet; - _defineProperty(YAMLSet, "tag", 'tag:yaml.org,2002:set'); +const binary = { + identify: value => value instanceof Uint8Array, + // Buffer inherits from Uint8Array + default: false, + tag: 'tag:yaml.org,2002:binary', - function parseSet(doc, cst) { - const map = (0, _parseMap.default)(doc, cst); - if (!map.hasAllNullValues()) throw new errors.YAMLSemanticError(cst, 'Set items must all have null values'); - return Object.assign(new YAMLSet(), map); - } + /** + * Returns a Buffer in node and an Uint8Array in browsers + * + * To use the resulting buffer as an image, you'll want to do something like: + * + * const blob = new Blob([buffer], { type: 'image/jpeg' }) + * document.querySelector('#photo').src = URL.createObjectURL(blob) + */ + resolve: (doc, node) => { + const src = resolveSeq4a68b39b.resolveString(doc, node); - function createSet(schema, iterable, ctx) { - const set = new YAMLSet(); + if (typeof Buffer === 'function') { + return Buffer.from(src, 'base64'); + } else if (typeof atob === 'function') { + // On IE 11, atob() can't handle newlines + const str = atob(src.replace(/[\n\r]/g, '')); + const buffer = new Uint8Array(str.length); - for (const value of iterable) set.items.push(schema.createPair(value, null, ctx)); + for (let i = 0; i < str.length; ++i) buffer[i] = str.charCodeAt(i); - return set; - } + return buffer; + } else { + const msg = 'This environment does not support reading binary tags; either Buffer or atob is required'; + doc.errors.push(new PlainValueEc8e588e.YAMLReferenceError(node, msg)); + return null; + } + }, + options: resolveSeq4a68b39b.binaryOptions, + stringify: ({ + comment, + type, + value + }, ctx, onComment, onChompKeep) => { + let src; - var _default = { - identify: value => value instanceof Set, - nodeClass: YAMLSet, - default: false, - tag: 'tag:yaml.org,2002:set', - resolve: parseSet, - createNode: createSet - }; - exports.default = _default; -}); -unwrapExports(set); -var set_1 = set.YAMLSet; + if (typeof Buffer === 'function') { + src = value instanceof Buffer ? value.toString('base64') : Buffer.from(value.buffer).toString('base64'); + } else if (typeof btoa === 'function') { + let s = ''; -var timestamp_1 = createCommonjsModule(function (module, exports) { + for (let i = 0; i < value.length; ++i) s += String.fromCharCode(value[i]); - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.timestamp = exports.floatTime = exports.intTime = void 0; + src = btoa(s); + } else { + throw new Error('This environment does not support writing binary tags; either Buffer or btoa is required'); + } - const parseSexagesimal = (sign, parts) => { - const n = parts.split(':').reduce((n, p) => n * 60 + Number(p), 0); - return sign === '-' ? -n : n; - }; // hhhh:mm:ss.sss + if (!type) type = resolveSeq4a68b39b.binaryOptions.defaultType; + if (type === PlainValueEc8e588e.Type.QUOTE_DOUBLE) { + value = src; + } else { + const { + lineWidth + } = resolveSeq4a68b39b.binaryOptions; + const n = Math.ceil(src.length / lineWidth); + const lines = new Array(n); - const stringifySexagesimal = ({ - value - }) => { - if (isNaN(value) || !isFinite(value)) return (0, stringify.stringifyNumber)(value); - let sign = ''; + for (let i = 0, o = 0; i < n; ++i, o += lineWidth) { + lines[i] = src.substr(o, lineWidth); + } - if (value < 0) { - sign = '-'; - value = Math.abs(value); + value = lines.join(type === PlainValueEc8e588e.Type.BLOCK_LITERAL ? '\n' : ' '); } - const parts = [value % 60]; // seconds, including ms + return resolveSeq4a68b39b.stringifyString({ + comment, + type, + value + }, ctx, onComment, onChompKeep); + } +}; - if (value < 60) { - parts.unshift(0); // at least one : is required - } else { - value = Math.round((value - parts[0]) / 60); - parts.unshift(value % 60); // minutes +function parsePairs(doc, cst) { + const seq = resolveSeq4a68b39b.resolveSeq(doc, cst); - if (value >= 60) { - value = Math.round((value - parts[0]) / 60); - parts.unshift(value); // hours + for (let i = 0; i < seq.items.length; ++i) { + let item = seq.items[i]; + if (item instanceof resolveSeq4a68b39b.Pair) continue;else if (item instanceof resolveSeq4a68b39b.YAMLMap) { + if (item.items.length > 1) { + const msg = 'Each pair must have its own sequence indicator'; + throw new PlainValueEc8e588e.YAMLSemanticError(cst, msg); } + + const pair = item.items[0] || new resolveSeq4a68b39b.Pair(); + if (item.commentBefore) pair.commentBefore = pair.commentBefore ? `${item.commentBefore}\n${pair.commentBefore}` : item.commentBefore; + if (item.comment) pair.comment = pair.comment ? `${item.comment}\n${pair.comment}` : item.comment; + item = pair; } + seq.items[i] = item instanceof resolveSeq4a68b39b.Pair ? item : new resolveSeq4a68b39b.Pair(item); + } - return sign + parts.map(n => n < 10 ? '0' + String(n) : String(n)).join(':').replace(/000000\d*$/, '') // % 60 may introduce error - ; - }; + return seq; +} - const intTime = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'TIME', - test: /^([-+]?)([0-9][0-9_]*(?::[0-5]?[0-9])+)$/, - resolve: (str, sign, parts) => parseSexagesimal(sign, parts.replace(/_/g, '')), - stringify: stringifySexagesimal - }; - exports.intTime = intTime; - const floatTime = { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - format: 'TIME', - test: /^([-+]?)([0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*)$/, - resolve: (str, sign, parts) => parseSexagesimal(sign, parts.replace(/_/g, '')), - stringify: stringifySexagesimal - }; - exports.floatTime = floatTime; - const timestamp = { - identify: value => value instanceof Date, - default: true, - tag: 'tag:yaml.org,2002:timestamp', - // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part - // may be omitted altogether, resulting in a date format. In such a case, the time part is - // assumed to be 00:00:00Z (start of day, UTC). - test: RegExp('^(?:' + '([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd - '(?:(?:t|T|[ \\t]+)' + // t | T | whitespace - '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)? - '(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30 - ')?' + ')$'), - resolve: (str, year, month, day, hour, minute, second, millisec, tz) => { - if (millisec) millisec = (millisec + '00').substr(1, 3); - let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec || 0); - - if (tz && tz !== 'Z') { - let d = parseSexagesimal(tz[0], tz.slice(1)); - if (Math.abs(d) < 30) d *= 60; - date -= 60000 * d; - } - - return new Date(date); - }, - stringify: ({ - value - }) => value.toISOString().replace(/((T00:00)?:00)?\.000Z$/, '') - }; - exports.timestamp = timestamp; -}); -unwrapExports(timestamp_1); -var timestamp_2 = timestamp_1.timestamp; -var timestamp_3 = timestamp_1.floatTime; -var timestamp_4 = timestamp_1.intTime; +function createPairs(schema, iterable, ctx) { + const pairs = new resolveSeq4a68b39b.YAMLSeq(schema); + pairs.tag = 'tag:yaml.org,2002:pairs'; + + for (const it of iterable) { + let key, value; + + if (Array.isArray(it)) { + if (it.length === 2) { + key = it[0]; + value = it[1]; + } else throw new TypeError(`Expected [key, value] tuple: ${it}`); + } else if (it && it instanceof Object) { + const keys = Object.keys(it); + + if (keys.length === 1) { + key = keys[0]; + value = it[key]; + } else throw new TypeError(`Expected { key: value } tuple: ${it}`); + } else { + key = it; + } -var yaml1_1 = createCommonjsModule(function (module, exports) { + const pair = schema.createPair(key, value, ctx); + pairs.items.push(pair); + } - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; + return pairs; +} - var _Scalar = _interopRequireDefault(Scalar_1); +const pairs = { + default: false, + tag: 'tag:yaml.org,2002:pairs', + resolve: parsePairs, + createNode: createPairs +}; - var _failsafe = _interopRequireDefault(failsafe); +class YAMLOMap extends resolveSeq4a68b39b.YAMLSeq { + constructor() { + super(); - var _binary = _interopRequireDefault(binary); + PlainValueEc8e588e._defineProperty(this, "add", resolveSeq4a68b39b.YAMLMap.prototype.add.bind(this)); - var _omap = _interopRequireDefault(omap); + PlainValueEc8e588e._defineProperty(this, "delete", resolveSeq4a68b39b.YAMLMap.prototype.delete.bind(this)); - var _pairs = _interopRequireDefault(pairs); + PlainValueEc8e588e._defineProperty(this, "get", resolveSeq4a68b39b.YAMLMap.prototype.get.bind(this)); - var _set = _interopRequireDefault(set); + PlainValueEc8e588e._defineProperty(this, "has", resolveSeq4a68b39b.YAMLMap.prototype.has.bind(this)); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + PlainValueEc8e588e._defineProperty(this, "set", resolveSeq4a68b39b.YAMLMap.prototype.set.bind(this)); + + this.tag = YAMLOMap.tag; } - const boolStringify = ({ - value - }) => value ? options.boolOptions.trueStr : options.boolOptions.falseStr; - - var _default = _failsafe.default.concat([{ - identify: value => value == null, - createNode: (schema, value, ctx) => ctx.wrapScalars ? new _Scalar.default(null) : null, - default: true, - tag: 'tag:yaml.org,2002:null', - test: /^(?:~|[Nn]ull|NULL)?$/, - resolve: () => null, - options: options.nullOptions, - stringify: () => options.nullOptions.nullStr - }, { - identify: value => typeof value === 'boolean', - default: true, - tag: 'tag:yaml.org,2002:bool', - test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/, - resolve: () => true, - options: options.boolOptions, - stringify: boolStringify - }, { - identify: value => typeof value === 'boolean', - default: true, - tag: 'tag:yaml.org,2002:bool', - test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/i, - resolve: () => false, - options: options.boolOptions, - stringify: boolStringify - }, { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'BIN', - test: /^0b([0-1_]+)$/, - resolve: (str, bin) => parseInt(bin.replace(/_/g, ''), 2), - stringify: ({ - value - }) => '0b' + value.toString(2) - }, { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'OCT', - test: /^[-+]?0([0-7_]+)$/, - resolve: (str, oct) => parseInt(oct.replace(/_/g, ''), 8), - stringify: ({ - value - }) => (value < 0 ? '-0' : '0') + value.toString(8) - }, { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:int', - test: /^[-+]?[0-9][0-9_]*$/, - resolve: str => parseInt(str.replace(/_/g, ''), 10), - stringify: stringify.stringifyNumber - }, { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:int', - format: 'HEX', - test: /^0x([0-9a-fA-F_]+)$/, - resolve: (str, hex) => parseInt(hex.replace(/_/g, ''), 16), - stringify: ({ - value - }) => (value < 0 ? '-0x' : '0x') + value.toString(16) - }, { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - test: /^(?:[-+]?\.inf|(\.nan))$/i, - resolve: (str, nan) => nan ? NaN : str[0] === '-' ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, - stringify: stringify.stringifyNumber - }, { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - format: 'EXP', - test: /^[-+]?([0-9][0-9_]*)?(\.[0-9_]*)?[eE][-+]?[0-9]+$/, - resolve: str => parseFloat(str.replace(/_/g, '')), - stringify: ({ - value - }) => Number(value).toExponential() - }, { - identify: value => typeof value === 'number', - default: true, - tag: 'tag:yaml.org,2002:float', - test: /^[-+]?(?:[0-9][0-9_]*)?\.([0-9_]*)$/, + toJSON(_, ctx) { + const map = new Map(); + if (ctx && ctx.onCreate) ctx.onCreate(map); - resolve(str, frac) { - const node = new _Scalar.default(parseFloat(str.replace(/_/g, ''))); + for (const pair of this.items) { + let key, value; - if (frac) { - const f = frac.replace(/_/g, ''); - if (f[f.length - 1] === '0') node.minFractionDigits = f.length; + if (pair instanceof resolveSeq4a68b39b.Pair) { + key = resolveSeq4a68b39b.toJSON(pair.key, '', ctx); + value = resolveSeq4a68b39b.toJSON(pair.value, key, ctx); + } else { + key = resolveSeq4a68b39b.toJSON(pair, '', ctx); } - return node; - }, - - stringify: stringify.stringifyNumber - }], _binary.default, _omap.default, _pairs.default, _set.default, timestamp_1.intTime, timestamp_1.floatTime, timestamp_1.timestamp); - - exports.default = _default; -}); -unwrapExports(yaml1_1); + if (map.has(key)) throw new Error('Ordered maps must not include duplicate keys'); + map.set(key, value); + } -var tags_1 = createCommonjsModule(function (module, exports) { + return map; + } - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.tags = exports.schemas = void 0; +} - var _core = _interopRequireWildcard(core); +PlainValueEc8e588e._defineProperty(YAMLOMap, "tag", 'tag:yaml.org,2002:omap'); - var _failsafe = _interopRequireDefault(failsafe); +function parseOMap(doc, cst) { + const pairs = parsePairs(doc, cst); + const seenKeys = []; - var _json = _interopRequireDefault(json); + for (const { + key + } of pairs.items) { + if (key instanceof resolveSeq4a68b39b.Scalar) { + if (seenKeys.includes(key.value)) { + const msg = 'Ordered maps must not include duplicate keys'; + throw new PlainValueEc8e588e.YAMLSemanticError(cst, msg); + } else { + seenKeys.push(key.value); + } + } + } - var _yaml = _interopRequireDefault(yaml1_1); + return Object.assign(new YAMLOMap(), pairs); +} - var _map = _interopRequireDefault(map); +function createOMap(schema, iterable, ctx) { + const pairs = createPairs(schema, iterable, ctx); + const omap = new YAMLOMap(); + omap.items = pairs.items; + return omap; +} - var _seq = _interopRequireDefault(seq); +const omap = { + identify: value => value instanceof Map, + nodeClass: YAMLOMap, + default: false, + tag: 'tag:yaml.org,2002:omap', + resolve: parseOMap, + createNode: createOMap +}; - var _binary = _interopRequireDefault(binary); +class YAMLSet extends resolveSeq4a68b39b.YAMLMap { + constructor() { + super(); + this.tag = YAMLSet.tag; + } - var _omap = _interopRequireDefault(omap); + add(key) { + const pair = key instanceof resolveSeq4a68b39b.Pair ? key : new resolveSeq4a68b39b.Pair(key); + const prev = resolveSeq4a68b39b.findPair(this.items, pair.key); + if (!prev) this.items.push(pair); + } - var _pairs = _interopRequireDefault(pairs); + get(key, keepPair) { + const pair = resolveSeq4a68b39b.findPair(this.items, key); + return !keepPair && pair instanceof resolveSeq4a68b39b.Pair ? pair.key instanceof resolveSeq4a68b39b.Scalar ? pair.key.value : pair.key : pair; + } - var _set = _interopRequireDefault(set); + set(key, value) { + if (typeof value !== 'boolean') throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`); + const prev = resolveSeq4a68b39b.findPair(this.items, key); - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + if (prev && !value) { + this.items.splice(this.items.indexOf(prev), 1); + } else if (!prev && value) { + this.items.push(new resolveSeq4a68b39b.Pair(key)); + } } - function _getRequireWildcardCache() { - if (typeof WeakMap !== "function") return null; - var cache = new WeakMap(); - - _getRequireWildcardCache = function () { - return cache; - }; + toJSON(_, ctx) { + return super.toJSON(_, ctx, Set); + } - return cache; + toString(ctx, onComment, onChompKeep) { + if (!ctx) return JSON.stringify(this); + if (this.hasAllNullValues()) return super.toString(ctx, onComment, onChompKeep);else throw new Error('Set items must all have null values'); } - function _interopRequireWildcard(obj) { - if (obj && obj.__esModule) { - return obj; - } +} - if (obj === null || typeof obj !== "object" && typeof obj !== "function") { - return { - default: obj - }; - } +PlainValueEc8e588e._defineProperty(YAMLSet, "tag", 'tag:yaml.org,2002:set'); - var cache = _getRequireWildcardCache(); +function parseSet(doc, cst) { + const map = resolveSeq4a68b39b.resolveMap(doc, cst); + if (!map.hasAllNullValues()) throw new PlainValueEc8e588e.YAMLSemanticError(cst, 'Set items must all have null values'); + return Object.assign(new YAMLSet(), map); +} - if (cache && cache.has(obj)) { - return cache.get(obj); - } +function createSet(schema, iterable, ctx) { + const set = new YAMLSet(); - var newObj = {}; - var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + for (const value of iterable) set.items.push(schema.createPair(value, null, ctx)); - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; + return set; +} - if (desc && (desc.get || desc.set)) { - Object.defineProperty(newObj, key, desc); - } else { - newObj[key] = obj[key]; - } - } - } +const set = { + identify: value => value instanceof Set, + nodeClass: YAMLSet, + default: false, + tag: 'tag:yaml.org,2002:set', + resolve: parseSet, + createNode: createSet +}; - newObj.default = obj; +const parseSexagesimal = (sign, parts) => { + const n = parts.split(':').reduce((n, p) => n * 60 + Number(p), 0); + return sign === '-' ? -n : n; +}; // hhhh:mm:ss.sss - if (cache) { - cache.set(obj, newObj); - } - return newObj; +const stringifySexagesimal = ({ + value +}) => { + if (isNaN(value) || !isFinite(value)) return resolveSeq4a68b39b.stringifyNumber(value); + let sign = ''; + + if (value < 0) { + sign = '-'; + value = Math.abs(value); } - const schemas = { - core: _core.default, - failsafe: _failsafe.default, - json: _json.default, - yaml11: _yaml.default - }; - exports.schemas = schemas; - const tags = { - binary: _binary.default, - bool: _core.boolObj, - float: _core.floatObj, - floatExp: _core.expObj, - floatNaN: _core.nanObj, - floatTime: timestamp_1.floatTime, - int: _core.intObj, - intHex: _core.hexObj, - intOct: _core.octObj, - intTime: timestamp_1.intTime, - map: _map.default, - null: _core.nullObj, - omap: _omap.default, - pairs: _pairs.default, - seq: _seq.default, - set: _set.default, - timestamp: timestamp_1.timestamp - }; - exports.tags = tags; -}); -unwrapExports(tags_1); -var tags_2 = tags_1.tags; -var tags_3 = tags_1.schemas; + const parts = [value % 60]; // seconds, including ms -var schema = createCommonjsModule(function (module, exports) { + if (value < 60) { + parts.unshift(0); // at least one : is required + } else { + value = Math.round((value - parts[0]) / 60); + parts.unshift(value % 60); // minutes - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; + if (value >= 60) { + value = Math.round((value - parts[0]) / 60); + parts.unshift(value); // hours + } + } - var _Alias = _interopRequireDefault(Alias_1$1); + return sign + parts.map(n => n < 10 ? '0' + String(n) : String(n)).join(':').replace(/000000\d*$/, '') // % 60 may introduce error + ; +}; - var _Collection = _interopRequireDefault(Collection_1$1); +const intTime = { + identify: value => typeof value === 'number', + default: true, + tag: 'tag:yaml.org,2002:int', + format: 'TIME', + test: /^([-+]?)([0-9][0-9_]*(?::[0-5]?[0-9])+)$/, + resolve: (str, sign, parts) => parseSexagesimal(sign, parts.replace(/_/g, '')), + stringify: stringifySexagesimal +}; +const floatTime = { + identify: value => typeof value === 'number', + default: true, + tag: 'tag:yaml.org,2002:float', + format: 'TIME', + test: /^([-+]?)([0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*)$/, + resolve: (str, sign, parts) => parseSexagesimal(sign, parts.replace(/_/g, '')), + stringify: stringifySexagesimal +}; +const timestamp = { + identify: value => value instanceof Date, + default: true, + tag: 'tag:yaml.org,2002:timestamp', + // If the time zone is omitted, the timestamp is assumed to be specified in UTC. The time part + // may be omitted altogether, resulting in a date format. In such a case, the time part is + // assumed to be 00:00:00Z (start of day, UTC). + test: RegExp('^(?:' + '([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})' + // YYYY-Mm-Dd + '(?:(?:t|T|[ \\t]+)' + // t | T | whitespace + '([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)' + // Hh:Mm:Ss(.ss)? + '(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?' + // Z | +5 | -03:30 + ')?' + ')$'), + resolve: (str, year, month, day, hour, minute, second, millisec, tz) => { + if (millisec) millisec = (millisec + '00').substr(1, 3); + let date = Date.UTC(year, month - 1, day, hour || 0, minute || 0, second || 0, millisec || 0); + + if (tz && tz !== 'Z') { + let d = parseSexagesimal(tz[0], tz.slice(1)); + if (Math.abs(d) < 30) d *= 60; + date -= 60000 * d; + } + + return new Date(date); + }, + stringify: ({ + value + }) => value.toISOString().replace(/((T00:00)?:00)?\.000Z$/, '') +}; +/* global console, process, YAML_SILENCE_DEPRECATION_WARNINGS, YAML_SILENCE_WARNINGS */ - var _Node = _interopRequireDefault(Node_1$1); +function shouldWarn(deprecation) { + const env = typeof process !== 'undefined' && process.env || {}; - var _Pair = _interopRequireDefault(Pair_1); + if (deprecation) { + if (typeof YAML_SILENCE_DEPRECATION_WARNINGS !== 'undefined') return !YAML_SILENCE_DEPRECATION_WARNINGS; + return !env.YAML_SILENCE_DEPRECATION_WARNINGS; + } - var _Scalar = _interopRequireDefault(Scalar_1); + if (typeof YAML_SILENCE_WARNINGS !== 'undefined') return !YAML_SILENCE_WARNINGS; + return !env.YAML_SILENCE_WARNINGS; +} - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; - } +function warn(warning, type) { + if (shouldWarn(false)) { + const emit = typeof process !== 'undefined' && process.emitWarning; // This will throw in Jest if `warning` is an Error instance due to + // https://github.com/facebook/jest/issues/2549 - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; + if (emit) emit(warning, type);else { + // eslint-disable-next-line no-console + console.warn(type ? `${type}: ${warning}` : warning); } + } +} - return obj; +function warnFileDeprecation(filename) { + if (shouldWarn(true)) { + const path = filename.replace(/.*yaml[/\\]/i, '').replace(/\.js$/, '').replace(/\\/g, '/'); + warn(`The endpoint 'yaml/${path}' will be removed in a future release.`, 'DeprecationWarning'); } +} - const isMap = ({ - type - }) => type === constants.Type.FLOW_MAP || type === constants.Type.MAP; +const warned = {}; - const isSeq = ({ - type - }) => type === constants.Type.FLOW_SEQ || type === constants.Type.SEQ; +function warnOptionDeprecation(name, alternative) { + if (!warned[name] && shouldWarn(true)) { + warned[name] = true; + let msg = `The option '${name}' will be removed in a future release`; + msg += alternative ? `, use '${alternative}' instead.` : '.'; + warn(msg, 'DeprecationWarning'); + } +} - class Schema { - constructor({ - customTags, - merge, - schema, - sortMapEntries, - tags: deprecatedCustomTags - }) { - this.merge = !!merge; - this.name = schema; - this.sortMapEntries = sortMapEntries === true ? (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0 : sortMapEntries || null; - this.tags = tags_1.schemas[schema.replace(/\W/g, '')]; // 'yaml-1.1' -> 'yaml11' +var binary_1 = binary; +var floatTime_1 = floatTime; +var intTime_1 = intTime; +var omap_1 = omap; +var pairs_1 = pairs; +var set_1 = set; +var timestamp_1 = timestamp; +var warn_1 = warn; +var warnFileDeprecation_1 = warnFileDeprecation; +var warnOptionDeprecation_1 = warnOptionDeprecation; +var warnings39684f17 = { + binary: binary_1, + floatTime: floatTime_1, + intTime: intTime_1, + omap: omap_1, + pairs: pairs_1, + set: set_1, + timestamp: timestamp_1, + warn: warn_1, + warnFileDeprecation: warnFileDeprecation_1, + warnOptionDeprecation: warnOptionDeprecation_1 +}; - if (!this.tags) { - const keys = Object.keys(tags_1.schemas).map(key => JSON.stringify(key)).join(', '); - throw new Error(`Unknown schema "${schema}"; use one of ${keys}`); - } +function createMap(schema, obj, ctx) { + const map = new resolveSeq4a68b39b.YAMLMap(schema); - if (!customTags && deprecatedCustomTags) { - customTags = deprecatedCustomTags; - (0, warnings.warnOptionDeprecation)('tags', 'customTags'); - } + if (obj instanceof Map) { + for (const [key, value] of obj) map.items.push(schema.createPair(key, value, ctx)); + } else if (obj && typeof obj === 'object') { + for (const key of Object.keys(obj)) map.items.push(schema.createPair(key, obj[key], ctx)); + } - if (Array.isArray(customTags)) { - for (const tag of customTags) this.tags = this.tags.concat(tag); - } else if (typeof customTags === 'function') { - this.tags = customTags(this.tags.slice()); - } + if (typeof schema.sortMapEntries === 'function') { + map.items.sort(schema.sortMapEntries); + } - for (let i = 0; i < this.tags.length; ++i) { - const tag = this.tags[i]; + return map; +} - if (typeof tag === 'string') { - const tagObj = tags_1.tags[tag]; +const map = { + createNode: createMap, + default: true, + nodeClass: resolveSeq4a68b39b.YAMLMap, + tag: 'tag:yaml.org,2002:map', + resolve: resolveSeq4a68b39b.resolveMap +}; - if (!tagObj) { - const keys = Object.keys(tags_1.tags).map(key => JSON.stringify(key)).join(', '); - throw new Error(`Unknown custom tag "${tag}"; use one of ${keys}`); - } +function createSeq(schema, obj, ctx) { + const seq = new resolveSeq4a68b39b.YAMLSeq(schema); - this.tags[i] = tagObj; - } - } + if (obj && obj[Symbol.iterator]) { + for (const it of obj) { + const v = schema.createNode(it, ctx.wrapScalars, null, ctx); + seq.items.push(v); } + } - createNode(value, wrapScalars, tag, ctx) { - if (value instanceof _Node.default) return value; - let tagObj; + return seq; +} - if (tag) { - if (tag.startsWith('!!')) tag = Schema.defaultPrefix + tag.slice(2); - const match = this.tags.filter(t => t.tag === tag); - tagObj = match.find(t => !t.format) || match[0]; - if (!tagObj) throw new Error(`Tag ${tag} not found`); - } else { - // TODO: deprecate/remove class check - tagObj = this.tags.find(t => (t.identify && t.identify(value) || t.class && value instanceof t.class) && !t.format); +const seq = { + createNode: createSeq, + default: true, + nodeClass: resolveSeq4a68b39b.YAMLSeq, + tag: 'tag:yaml.org,2002:seq', + resolve: resolveSeq4a68b39b.resolveSeq +}; +const string = { + identify: value => typeof value === 'string', + default: true, + tag: 'tag:yaml.org,2002:str', + resolve: resolveSeq4a68b39b.resolveString, + + stringify(item, ctx, onComment, onChompKeep) { + ctx = Object.assign({ + actualString: true + }, ctx); + return resolveSeq4a68b39b.stringifyString(item, ctx, onComment, onChompKeep); + }, + + options: resolveSeq4a68b39b.strOptions +}; +const failsafe = [map, seq, string]; +/* global BigInt */ - if (!tagObj) { - if (typeof value.toJSON === 'function') value = value.toJSON(); - if (typeof value !== 'object') return wrapScalars ? new _Scalar.default(value) : value; - tagObj = value instanceof Map ? tags_1.tags.map : value[Symbol.iterator] ? tags_1.tags.seq : tags_1.tags.map; - } - } +const intIdentify = value => typeof value === 'bigint' || Number.isInteger(value); - if (!ctx) ctx = { - wrapScalars - };else ctx.wrapScalars = wrapScalars; +const intResolve = (src, part, radix) => resolveSeq4a68b39b.intOptions.asBigInt ? BigInt(src) : parseInt(part, radix); - if (ctx.onTagObj) { - ctx.onTagObj(tagObj); - delete ctx.onTagObj; - } +function intStringify(node, radix, prefix) { + const { + value + } = node; + if (intIdentify(value) && value >= 0) return prefix + value.toString(radix); + return resolveSeq4a68b39b.stringifyNumber(node); +} - const obj = {}; +const nullObj = { + identify: value => value == null, + createNode: (schema, value, ctx) => ctx.wrapScalars ? new resolveSeq4a68b39b.Scalar(null) : null, + default: true, + tag: 'tag:yaml.org,2002:null', + test: /^(?:~|[Nn]ull|NULL)?$/, + resolve: () => null, + options: resolveSeq4a68b39b.nullOptions, + stringify: () => resolveSeq4a68b39b.nullOptions.nullStr +}; +const boolObj = { + identify: value => typeof value === 'boolean', + default: true, + tag: 'tag:yaml.org,2002:bool', + test: /^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/, + resolve: str => str[0] === 't' || str[0] === 'T', + options: resolveSeq4a68b39b.boolOptions, + stringify: ({ + value + }) => value ? resolveSeq4a68b39b.boolOptions.trueStr : resolveSeq4a68b39b.boolOptions.falseStr +}; +const octObj = { + identify: value => intIdentify(value) && value >= 0, + default: true, + tag: 'tag:yaml.org,2002:int', + format: 'OCT', + test: /^0o([0-7]+)$/, + resolve: (str, oct) => intResolve(str, oct, 8), + options: resolveSeq4a68b39b.intOptions, + stringify: node => intStringify(node, 8, '0o') +}; +const intObj = { + identify: intIdentify, + default: true, + tag: 'tag:yaml.org,2002:int', + test: /^[-+]?[0-9]+$/, + resolve: str => intResolve(str, str, 10), + options: resolveSeq4a68b39b.intOptions, + stringify: resolveSeq4a68b39b.stringifyNumber +}; +const hexObj = { + identify: value => intIdentify(value) && value >= 0, + default: true, + tag: 'tag:yaml.org,2002:int', + format: 'HEX', + test: /^0x([0-9a-fA-F]+)$/, + resolve: (str, hex) => intResolve(str, hex, 16), + options: resolveSeq4a68b39b.intOptions, + stringify: node => intStringify(node, 16, '0x') +}; +const nanObj = { + identify: value => typeof value === 'number', + default: true, + tag: 'tag:yaml.org,2002:float', + test: /^(?:[-+]?\.inf|(\.nan))$/i, + resolve: (str, nan) => nan ? NaN : str[0] === '-' ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, + stringify: resolveSeq4a68b39b.stringifyNumber +}; +const expObj = { + identify: value => typeof value === 'number', + default: true, + tag: 'tag:yaml.org,2002:float', + format: 'EXP', + test: /^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/, + resolve: str => parseFloat(str), + stringify: ({ + value + }) => Number(value).toExponential() +}; +const floatObj = { + identify: value => typeof value === 'number', + default: true, + tag: 'tag:yaml.org,2002:float', + test: /^[-+]?(?:\.([0-9]+)|[0-9]+\.([0-9]*))$/, + + resolve(str, frac1, frac2) { + const frac = frac1 || frac2; + const node = new resolveSeq4a68b39b.Scalar(parseFloat(str)); + if (frac && frac[frac.length - 1] === '0') node.minFractionDigits = frac.length; + return node; + }, + + stringify: resolveSeq4a68b39b.stringifyNumber +}; +const core = failsafe.concat([nullObj, boolObj, octObj, intObj, hexObj, nanObj, expObj, floatObj]); +/* global BigInt */ + +const intIdentify$1 = value => typeof value === 'bigint' || Number.isInteger(value); + +const stringifyJSON = ({ + value +}) => JSON.stringify(value); + +const json = [map, seq, { + identify: value => typeof value === 'string', + default: true, + tag: 'tag:yaml.org,2002:str', + resolve: resolveSeq4a68b39b.resolveString, + stringify: stringifyJSON +}, { + identify: value => value == null, + createNode: (schema, value, ctx) => ctx.wrapScalars ? new resolveSeq4a68b39b.Scalar(null) : null, + default: true, + tag: 'tag:yaml.org,2002:null', + test: /^null$/, + resolve: () => null, + stringify: stringifyJSON +}, { + identify: value => typeof value === 'boolean', + default: true, + tag: 'tag:yaml.org,2002:bool', + test: /^true|false$/, + resolve: str => str === 'true', + stringify: stringifyJSON +}, { + identify: intIdentify$1, + default: true, + tag: 'tag:yaml.org,2002:int', + test: /^-?(?:0|[1-9][0-9]*)$/, + resolve: str => resolveSeq4a68b39b.intOptions.asBigInt ? BigInt(str) : parseInt(str, 10), + stringify: ({ + value + }) => intIdentify$1(value) ? value.toString() : JSON.stringify(value) +}, { + identify: value => typeof value === 'number', + default: true, + tag: 'tag:yaml.org,2002:float', + test: /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/, + resolve: str => parseFloat(str), + stringify: stringifyJSON +}]; + +json.scalarFallback = str => { + throw new SyntaxError(`Unresolved plain scalar ${JSON.stringify(str)}`); +}; +/* global BigInt */ - if (value && typeof value === 'object' && ctx.prevObjects) { - const prev = ctx.prevObjects.get(value); - if (prev) { - const alias = new _Alias.default(prev); // leaves source dirty; must be cleaned by caller +const boolStringify = ({ + value +}) => value ? resolveSeq4a68b39b.boolOptions.trueStr : resolveSeq4a68b39b.boolOptions.falseStr; - ctx.aliasNodes.push(alias); - return alias; - } +const intIdentify$2 = value => typeof value === 'bigint' || Number.isInteger(value); - obj.value = value; - ctx.prevObjects.set(value, obj); - } +function intResolve$1(sign, src, radix) { + let str = src.replace(/_/g, ''); - obj.node = tagObj.createNode ? tagObj.createNode(this, value, ctx) : wrapScalars ? new _Scalar.default(value) : value; - if (tag && obj.node instanceof _Node.default) obj.node.tag = tag; - return obj.node; - } + if (resolveSeq4a68b39b.intOptions.asBigInt) { + switch (radix) { + case 2: + str = `0b${str}`; + break; - createPair(key, value, ctx) { - const k = this.createNode(key, ctx.wrapScalars, null, ctx); - const v = this.createNode(value, ctx.wrapScalars, null, ctx); - return new _Pair.default(k, v); - } // falls back to string on no match + case 8: + str = `0o${str}`; + break; + case 16: + str = `0x${str}`; + break; + } - resolveScalar(str, tags) { - if (!tags) tags = this.tags; + const n = BigInt(str); + return sign === '-' ? BigInt(-1) * n : n; + } - for (let i = 0; i < tags.length; ++i) { - const { - format, - test, - resolve - } = tags[i]; - - if (test) { - const match = str.match(test); - - if (match) { - let res = resolve.apply(null, match); - if (!(res instanceof _Scalar.default)) res = new _Scalar.default(res); - if (format) res.format = format; - return res; - } - } - } + const n = parseInt(str, radix); + return sign === '-' ? -1 * n : n; +} - if (this.tags.scalarFallback) str = this.tags.scalarFallback(str); - return new _Scalar.default(str); - } // sets node.resolved on success +function intStringify$1(node, radix, prefix) { + const { + value + } = node; + if (intIdentify$2(value)) { + const str = value.toString(radix); + return value < 0 ? '-' + prefix + str.substr(1) : prefix + str; + } - resolveNode(doc, node, tagName) { - const tags = this.tags.filter(({ - tag - }) => tag === tagName); - const generic = tags.find(({ - test - }) => !test); - if (node.error) doc.errors.push(node.error); + return resolveSeq4a68b39b.stringifyNumber(node); +} - try { - if (generic) { - let res = generic.resolve(doc, node); - if (!(res instanceof _Collection.default)) res = new _Scalar.default(res); - node.resolved = res; - } else { - const str = (0, string.resolveString)(doc, node); +const yaml11 = failsafe.concat([{ + identify: value => value == null, + createNode: (schema, value, ctx) => ctx.wrapScalars ? new resolveSeq4a68b39b.Scalar(null) : null, + default: true, + tag: 'tag:yaml.org,2002:null', + test: /^(?:~|[Nn]ull|NULL)?$/, + resolve: () => null, + options: resolveSeq4a68b39b.nullOptions, + stringify: () => resolveSeq4a68b39b.nullOptions.nullStr +}, { + identify: value => typeof value === 'boolean', + default: true, + tag: 'tag:yaml.org,2002:bool', + test: /^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/, + resolve: () => true, + options: resolveSeq4a68b39b.boolOptions, + stringify: boolStringify +}, { + identify: value => typeof value === 'boolean', + default: true, + tag: 'tag:yaml.org,2002:bool', + test: /^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/i, + resolve: () => false, + options: resolveSeq4a68b39b.boolOptions, + stringify: boolStringify +}, { + identify: intIdentify$2, + default: true, + tag: 'tag:yaml.org,2002:int', + format: 'BIN', + test: /^([-+]?)0b([0-1_]+)$/, + resolve: (str, sign, bin) => intResolve$1(sign, bin, 2), + stringify: node => intStringify$1(node, 2, '0b') +}, { + identify: intIdentify$2, + default: true, + tag: 'tag:yaml.org,2002:int', + format: 'OCT', + test: /^([-+]?)0([0-7_]+)$/, + resolve: (str, sign, oct) => intResolve$1(sign, oct, 8), + stringify: node => intStringify$1(node, 8, '0') +}, { + identify: intIdentify$2, + default: true, + tag: 'tag:yaml.org,2002:int', + test: /^([-+]?)([0-9][0-9_]*)$/, + resolve: (str, sign, abs) => intResolve$1(sign, abs, 10), + stringify: resolveSeq4a68b39b.stringifyNumber +}, { + identify: intIdentify$2, + default: true, + tag: 'tag:yaml.org,2002:int', + format: 'HEX', + test: /^([-+]?)0x([0-9a-fA-F_]+)$/, + resolve: (str, sign, hex) => intResolve$1(sign, hex, 16), + stringify: node => intStringify$1(node, 16, '0x') +}, { + identify: value => typeof value === 'number', + default: true, + tag: 'tag:yaml.org,2002:float', + test: /^(?:[-+]?\.inf|(\.nan))$/i, + resolve: (str, nan) => nan ? NaN : str[0] === '-' ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, + stringify: resolveSeq4a68b39b.stringifyNumber +}, { + identify: value => typeof value === 'number', + default: true, + tag: 'tag:yaml.org,2002:float', + format: 'EXP', + test: /^[-+]?([0-9][0-9_]*)?(\.[0-9_]*)?[eE][-+]?[0-9]+$/, + resolve: str => parseFloat(str.replace(/_/g, '')), + stringify: ({ + value + }) => Number(value).toExponential() +}, { + identify: value => typeof value === 'number', + default: true, + tag: 'tag:yaml.org,2002:float', + test: /^[-+]?(?:[0-9][0-9_]*)?\.([0-9_]*)$/, + + resolve(str, frac) { + const node = new resolveSeq4a68b39b.Scalar(parseFloat(str.replace(/_/g, ''))); + + if (frac) { + const f = frac.replace(/_/g, ''); + if (f[f.length - 1] === '0') node.minFractionDigits = f.length; + } + + return node; + }, + + stringify: resolveSeq4a68b39b.stringifyNumber +}], warnings39684f17.binary, warnings39684f17.omap, warnings39684f17.pairs, warnings39684f17.set, warnings39684f17.intTime, warnings39684f17.floatTime, warnings39684f17.timestamp); +const schemas = { + core, + failsafe, + json, + yaml11 +}; +const tags = { + binary: warnings39684f17.binary, + bool: boolObj, + float: floatObj, + floatExp: expObj, + floatNaN: nanObj, + floatTime: warnings39684f17.floatTime, + int: intObj, + intHex: hexObj, + intOct: octObj, + intTime: warnings39684f17.intTime, + map, + null: nullObj, + omap: warnings39684f17.omap, + pairs: warnings39684f17.pairs, + seq, + set: warnings39684f17.set, + timestamp: warnings39684f17.timestamp +}; - if (typeof str === 'string' && tags.length > 0) { - node.resolved = this.resolveScalar(str, tags); - } - } - } catch (error) { - /* istanbul ignore if */ - if (!error.source) error.source = node; - doc.errors.push(error); - node.resolved = null; - } +function findTagObject(value, tagName, tags) { + if (tagName) { + const match = tags.filter(t => t.tag === tagName); + const tagObj = match.find(t => !t.format) || match[0]; + if (!tagObj) throw new Error(`Tag ${tagName} not found`); + return tagObj; + } // TODO: deprecate/remove class check - if (!node.resolved) return null; - if (tagName && node.tag) node.resolved.tag = tagName; - return node.resolved; - } - resolveNodeWithFallback(doc, node, tagName) { - const res = this.resolveNode(doc, node, tagName); - if (Object.prototype.hasOwnProperty.call(node, 'resolved')) return res; - const fallback = isMap(node) ? Schema.defaultTags.MAP : isSeq(node) ? Schema.defaultTags.SEQ : Schema.defaultTags.STR; - /* istanbul ignore else */ + return tags.find(t => (t.identify && t.identify(value) || t.class && value instanceof t.class) && !t.format); +} - if (fallback) { - doc.warnings.push(new errors.YAMLWarning(node, `The tag ${tagName} is unavailable, falling back to ${fallback}`)); - const res = this.resolveNode(doc, node, fallback); - res.tag = tagName; - return res; - } else { - doc.errors.push(new errors.YAMLReferenceError(node, `The tag ${tagName} is unavailable`)); - return null; - } - } +function createNode(value, tagName, ctx) { + if (value instanceof resolveSeq4a68b39b.Node) return value; + const { + defaultPrefix, + onTagObj, + prevObjects, + schema, + wrapScalars + } = ctx; + if (tagName && tagName.startsWith('!!')) tagName = defaultPrefix + tagName.slice(2); + let tagObj = findTagObject(value, tagName, schema.tags); - getTagObject(item) { - if (item instanceof _Alias.default) return _Alias.default; + if (!tagObj) { + if (typeof value.toJSON === 'function') value = value.toJSON(); + if (typeof value !== 'object') return wrapScalars ? new resolveSeq4a68b39b.Scalar(value) : value; + tagObj = value instanceof Map ? map : value[Symbol.iterator] ? seq : map; + } - if (item.tag) { - const match = this.tags.filter(t => t.tag === item.tag); - if (match.length > 0) return match.find(t => t.format === item.format) || match[0]; - } + if (onTagObj) { + onTagObj(tagObj); + delete ctx.onTagObj; + } // Detect duplicate references to the same object & use Alias nodes for all + // after first. The `obj` wrapper allows for circular references to resolve. - let tagObj, obj; - if (item instanceof _Scalar.default) { - obj = item.value; // TODO: deprecate/remove class check + const obj = {}; - const match = this.tags.filter(t => t.identify && t.identify(obj) || t.class && obj instanceof t.class); - tagObj = match.find(t => t.format === item.format) || match.find(t => !t.format); - } else { - obj = item; - tagObj = this.tags.find(t => t.nodeClass && obj instanceof t.nodeClass); - } + if (value && typeof value === 'object' && prevObjects) { + const prev = prevObjects.get(value); - if (!tagObj) { - const name = obj && obj.constructor ? obj.constructor.name : typeof obj; - throw new Error(`Tag not resolved for ${name} value`); - } + if (prev) { + const alias = new resolveSeq4a68b39b.Alias(prev); // leaves source dirty; must be cleaned by caller - return tagObj; - } // needs to be called before stringifier to allow for circular anchor refs + ctx.aliasNodes.push(alias); // defined along with prevObjects + return alias; + } - stringifyProps(node, tagObj, { - anchors, - doc - }) { - const props = []; - const anchor = doc.anchors.getName(node); + obj.value = value; + prevObjects.set(value, obj); + } - if (anchor) { - anchors[anchor] = node; - props.push(`&${anchor}`); - } + obj.node = tagObj.createNode ? tagObj.createNode(ctx.schema, value, ctx) : wrapScalars ? new resolveSeq4a68b39b.Scalar(value) : value; + if (tagName && obj.node instanceof resolveSeq4a68b39b.Node) obj.node.tag = tagName; + return obj.node; +} - if (node.tag) { - props.push(doc.stringifyTag(node.tag)); - } else if (!tagObj.default) { - props.push(doc.stringifyTag(tagObj.tag)); - } +function getSchemaTags(schemas, knownTags, customTags, schemaId) { + let tags = schemas[schemaId.replace(/\W/g, '')]; // 'yaml-1.1' -> 'yaml11' - return props.join(' '); - } + if (!tags) { + const keys = Object.keys(schemas).map(key => JSON.stringify(key)).join(', '); + throw new Error(`Unknown schema "${schemaId}"; use one of ${keys}`); + } - stringify(item, ctx, onComment, onChompKeep) { - let tagObj; + if (Array.isArray(customTags)) { + for (const tag of customTags) tags = tags.concat(tag); + } else if (typeof customTags === 'function') { + tags = customTags(tags.slice()); + } - if (!(item instanceof _Node.default)) { - const createCtx = { - aliasNodes: [], - onTagObj: o => tagObj = o, - prevObjects: new Map() - }; - item = this.createNode(item, true, null, createCtx); - const { - anchors - } = ctx.doc; + for (let i = 0; i < tags.length; ++i) { + const tag = tags[i]; - for (const alias of createCtx.aliasNodes) { - alias.source = alias.source.node; - let name = anchors.getName(alias.source); + if (typeof tag === 'string') { + const tagObj = knownTags[tag]; - if (!name) { - name = anchors.newName(); - anchors.map[name] = alias.source; - } - } + if (!tagObj) { + const keys = Object.keys(knownTags).map(key => JSON.stringify(key)).join(', '); + throw new Error(`Unknown custom tag "${tag}"; use one of ${keys}`); } - ctx.tags = this; - if (item instanceof _Pair.default) return item.toString(ctx, onComment, onChompKeep); - if (!tagObj) tagObj = this.getTagObject(item); - const props = this.stringifyProps(item, tagObj, ctx); - if (props.length > 0) ctx.indentAtStart = (ctx.indentAtStart || 0) + props.length + 1; - const str = typeof tagObj.stringify === 'function' ? tagObj.stringify(item, ctx, onComment, onChompKeep) : item instanceof _Collection.default ? item.toString(ctx, onComment, onChompKeep) : (0, stringify.stringifyString)(item, ctx, onComment, onChompKeep); - return props ? item instanceof _Collection.default && str[0] !== '{' && str[0] !== '[' ? `${props}\n${ctx.indent}${str}` : `${props} ${str}` : str; + tags[i] = tagObj; } - } - exports.default = Schema; + return tags; +} - _defineProperty(Schema, "defaultPrefix", 'tag:yaml.org,2002:'); +const sortMapEntriesByKey = (a, b) => a.key < b.key ? -1 : a.key > b.key ? 1 : 0; + +class Schema { + // TODO: remove in v2 + // TODO: remove in v2 + constructor({ + customTags, + merge, + schema, + sortMapEntries, + tags: deprecatedCustomTags + }) { + this.merge = !!merge; + this.name = schema; + this.sortMapEntries = sortMapEntries === true ? sortMapEntriesByKey : sortMapEntries || null; + if (!customTags && deprecatedCustomTags) warnings39684f17.warnOptionDeprecation('tags', 'customTags'); + this.tags = getSchemaTags(schemas, tags, customTags || deprecatedCustomTags, schema); + } + + createNode(value, wrapScalars, tagName, ctx) { + const baseCtx = { + defaultPrefix: Schema.defaultPrefix, + schema: this, + wrapScalars + }; + const createCtx = ctx ? Object.assign(ctx, baseCtx) : baseCtx; + return createNode(value, tagName, createCtx); + } - _defineProperty(Schema, "defaultTags", { - MAP: 'tag:yaml.org,2002:map', - SEQ: 'tag:yaml.org,2002:seq', - STR: 'tag:yaml.org,2002:str' - }); -}); -unwrapExports(schema); + createPair(key, value, ctx) { + if (!ctx) ctx = { + wrapScalars: true + }; + const k = this.createNode(key, ctx.wrapScalars, null, ctx); + const v = this.createNode(value, ctx.wrapScalars, null, ctx); + return new resolveSeq4a68b39b.Pair(k, v); + } -var Document_1$1 = createCommonjsModule(function (module, exports) { +} - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; +PlainValueEc8e588e._defineProperty(Schema, "defaultPrefix", PlainValueEc8e588e.defaultTagPrefix); - var _addComment = _interopRequireDefault(addComment_1); +PlainValueEc8e588e._defineProperty(Schema, "defaultTags", PlainValueEc8e588e.defaultTags); - var _Anchors = _interopRequireDefault(Anchors_1); +var Schema_1 = Schema; +var Schema42e9705c = { + Schema: Schema_1 +}; - var _listTagNames = _interopRequireDefault(listTagNames); +const defaultOptions = { + anchorPrefix: 'a', + customTags: null, + indent: 2, + indentSeq: true, + keepCstNodes: false, + keepNodeTypes: true, + keepBlobsInJSON: true, + mapAsMap: false, + maxAliasCount: 100, + prettyErrors: false, + // TODO Set true in v2 + simpleKeys: false, + version: '1.2' +}; +const scalarOptions = { + get binary() { + return resolveSeq4a68b39b.binaryOptions; + }, - var _schema = _interopRequireDefault(schema); + set binary(opt) { + Object.assign(resolveSeq4a68b39b.binaryOptions, opt); + }, - var _Alias = _interopRequireDefault(Alias_1$1); + get bool() { + return resolveSeq4a68b39b.boolOptions; + }, - var _Collection = _interopRequireWildcard(Collection_1$1); + set bool(opt) { + Object.assign(resolveSeq4a68b39b.boolOptions, opt); + }, - var _Node = _interopRequireDefault(Node_1$1); + get int() { + return resolveSeq4a68b39b.intOptions; + }, - var _Scalar = _interopRequireDefault(Scalar_1); + set int(opt) { + Object.assign(resolveSeq4a68b39b.intOptions, opt); + }, - var _toJSON = _interopRequireDefault(toJSON_1); + get null() { + return resolveSeq4a68b39b.nullOptions; + }, - function _getRequireWildcardCache() { - if (typeof WeakMap !== "function") return null; - var cache = new WeakMap(); + set null(opt) { + Object.assign(resolveSeq4a68b39b.nullOptions, opt); + }, - _getRequireWildcardCache = function () { - return cache; - }; + get str() { + return resolveSeq4a68b39b.strOptions; + }, - return cache; + set str(opt) { + Object.assign(resolveSeq4a68b39b.strOptions, opt); } - function _interopRequireWildcard(obj) { - if (obj && obj.__esModule) { - return obj; - } +}; +const documentOptions = { + '1.0': { + schema: 'yaml-1.1', + merge: true, + tagPrefixes: [{ + handle: '!', + prefix: PlainValueEc8e588e.defaultTagPrefix + }, { + handle: '!!', + prefix: 'tag:private.yaml.org,2002:' + }] + }, + '1.1': { + schema: 'yaml-1.1', + merge: true, + tagPrefixes: [{ + handle: '!', + prefix: '!' + }, { + handle: '!!', + prefix: PlainValueEc8e588e.defaultTagPrefix + }] + }, + '1.2': { + schema: 'core', + merge: false, + tagPrefixes: [{ + handle: '!', + prefix: '!' + }, { + handle: '!!', + prefix: PlainValueEc8e588e.defaultTagPrefix + }] + } +}; - if (obj === null || typeof obj !== "object" && typeof obj !== "function") { - return { - default: obj - }; - } +function stringifyTag(doc, tag) { + if ((doc.version || doc.options.version) === '1.0') { + const priv = tag.match(/^tag:private\.yaml\.org,2002:([^:/]+)$/); + if (priv) return '!' + priv[1]; + const vocab = tag.match(/^tag:([a-zA-Z0-9-]+)\.yaml\.org,2002:(.*)/); + return vocab ? `!${vocab[1]}/${vocab[2]}` : `!${tag.replace(/^tag:/, '')}`; + } - var cache = _getRequireWildcardCache(); + let p = doc.tagPrefixes.find(p => tag.indexOf(p.prefix) === 0); - if (cache && cache.has(obj)) { - return cache.get(obj); - } + if (!p) { + const dtp = doc.getDefaults().tagPrefixes; + p = dtp && dtp.find(p => tag.indexOf(p.prefix) === 0); + } - var newObj = {}; - var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; + if (!p) return tag[0] === '!' ? tag : `!<${tag}>`; + const suffix = tag.substr(p.prefix.length).replace(/[!,[\]{}]/g, ch => ({ + '!': '%21', + ',': '%2C', + '[': '%5B', + ']': '%5D', + '{': '%7B', + '}': '%7D' + })[ch]); + return p.handle + suffix; +} - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; +function getTagObject(tags, item) { + if (item instanceof resolveSeq4a68b39b.Alias) return resolveSeq4a68b39b.Alias; - if (desc && (desc.get || desc.set)) { - Object.defineProperty(newObj, key, desc); - } else { - newObj[key] = obj[key]; - } - } - } + if (item.tag) { + const match = tags.filter(t => t.tag === item.tag); + if (match.length > 0) return match.find(t => t.format === item.format) || match[0]; + } - newObj.default = obj; + let tagObj, obj; - if (cache) { - cache.set(obj, newObj); - } + if (item instanceof resolveSeq4a68b39b.Scalar) { + obj = item.value; // TODO: deprecate/remove class check - return newObj; + const match = tags.filter(t => t.identify && t.identify(obj) || t.class && obj instanceof t.class); + tagObj = match.find(t => t.format === item.format) || match.find(t => !t.format); + } else { + obj = item; + tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass); } - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + if (!tagObj) { + const name = obj && obj.constructor ? obj.constructor.name : typeof obj; + throw new Error(`Tag not resolved for ${name} value`); } - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } + return tagObj; +} // needs to be called before value stringifier to allow for circular anchor refs - return obj; - } - const isCollectionItem = node => node && [constants.Type.MAP_KEY, constants.Type.MAP_VALUE, constants.Type.SEQ_ITEM].includes(node.type); +function stringifyProps(node, tagObj, { + anchors, + doc +}) { + const props = []; + const anchor = doc.anchors.getName(node); - class Document { - constructor(options) { - this.anchors = new _Anchors.default(options.anchorPrefix); - this.commentBefore = null; - this.comment = null; - this.contents = null; - this.directivesEndMarker = null; - this.errors = []; - this.options = options; - this.schema = null; - this.tagPrefixes = []; - this.version = null; - this.warnings = []; - } + if (anchor) { + anchors[anchor] = node; + props.push(`&${anchor}`); + } - assertCollectionContents() { - if (this.contents instanceof _Collection.default) return true; - throw new Error('Expected a YAML collection as document contents'); - } + if (node.tag) { + props.push(stringifyTag(doc, node.tag)); + } else if (!tagObj.default) { + props.push(stringifyTag(doc, tagObj.tag)); + } - add(value) { - this.assertCollectionContents(); - return this.contents.add(value); - } + return props.join(' '); +} - addIn(path, value) { - this.assertCollectionContents(); - this.contents.addIn(path, value); - } +function stringify(item, ctx, onComment, onChompKeep) { + const { + anchors, + schema + } = ctx.doc; + let tagObj; + + if (!(item instanceof resolveSeq4a68b39b.Node)) { + const createCtx = { + aliasNodes: [], + onTagObj: o => tagObj = o, + prevObjects: new Map() + }; + item = schema.createNode(item, true, null, createCtx); - delete(key) { - this.assertCollectionContents(); - return this.contents.delete(key); - } + for (const alias of createCtx.aliasNodes) { + alias.source = alias.source.node; + let name = anchors.getName(alias.source); - deleteIn(path) { - if ((0, _Collection.isEmptyPath)(path)) { - if (this.contents == null) return false; - this.contents = null; - return true; + if (!name) { + name = anchors.newName(); + anchors.map[name] = alias.source; } - - this.assertCollectionContents(); - return this.contents.deleteIn(path); - } - - getDefaults() { - return Document.defaults[this.version] || Document.defaults[this.options.version] || {}; - } - - get(key, keepScalar) { - return this.contents instanceof _Collection.default ? this.contents.get(key, keepScalar) : undefined; - } - - getIn(path, keepScalar) { - if ((0, _Collection.isEmptyPath)(path)) return !keepScalar && this.contents instanceof _Scalar.default ? this.contents.value : this.contents; - return this.contents instanceof _Collection.default ? this.contents.getIn(path, keepScalar) : undefined; } + } - has(key) { - return this.contents instanceof _Collection.default ? this.contents.has(key) : false; - } + if (item instanceof resolveSeq4a68b39b.Pair) return item.toString(ctx, onComment, onChompKeep); + if (!tagObj) tagObj = getTagObject(schema.tags, item); + const props = stringifyProps(item, tagObj, ctx); + if (props.length > 0) ctx.indentAtStart = (ctx.indentAtStart || 0) + props.length + 1; + const str = typeof tagObj.stringify === 'function' ? tagObj.stringify(item, ctx, onComment, onChompKeep) : item instanceof resolveSeq4a68b39b.Scalar ? resolveSeq4a68b39b.stringifyString(item, ctx, onComment, onChompKeep) : item.toString(ctx, onComment, onChompKeep); + if (!props) return str; + return item instanceof resolveSeq4a68b39b.Scalar || str[0] === '{' || str[0] === '[' ? `${props} ${str}` : `${props}\n${ctx.indent}${str}`; +} - hasIn(path) { - if ((0, _Collection.isEmptyPath)(path)) return this.contents !== undefined; - return this.contents instanceof _Collection.default ? this.contents.hasIn(path) : false; - } +class Anchors { + static validAnchorNode(node) { + return node instanceof resolveSeq4a68b39b.Scalar || node instanceof resolveSeq4a68b39b.YAMLSeq || node instanceof resolveSeq4a68b39b.YAMLMap; + } - set(key, value) { - this.assertCollectionContents(); - this.contents.set(key, value); - } + constructor(prefix) { + PlainValueEc8e588e._defineProperty(this, "map", {}); - setIn(path, value) { - if ((0, _Collection.isEmptyPath)(path)) this.contents = value;else { - this.assertCollectionContents(); - this.contents.setIn(path, value); - } - } + this.prefix = prefix; + } - setSchema(id, customTags) { - if (!id && !customTags && this.schema) return; - if (typeof id === 'number') id = id.toFixed(1); + createAlias(node, name) { + this.setAnchor(node, name); + return new resolveSeq4a68b39b.Alias(node); + } - if (id === '1.0' || id === '1.1' || id === '1.2') { - if (this.version) this.version = id;else this.options.version = id; - delete this.options.schema; - } else if (id && typeof id === 'string') { - this.options.schema = id; + createMergePair(...sources) { + const merge = new resolveSeq4a68b39b.Merge(); + merge.value.items = sources.map(s => { + if (s instanceof resolveSeq4a68b39b.Alias) { + if (s.source instanceof resolveSeq4a68b39b.YAMLMap) return s; + } else if (s instanceof resolveSeq4a68b39b.YAMLMap) { + return this.createAlias(s); } - if (Array.isArray(customTags)) this.options.customTags = customTags; - const opt = Object.assign({}, this.getDefaults(), this.options); - this.schema = new _schema.default(opt); - } - - parse(node, prevDoc) { - if (this.options.keepCstNodes) this.cstNode = node; - if (this.options.keepNodeTypes) this.type = 'DOCUMENT'; - const { - directives = [], - contents = [], - directivesEndMarker, - error, - valueRange - } = node; + throw new Error('Merge sources must be Map nodes or their Aliases'); + }); + return merge; + } - if (error) { - if (!error.source) error.source = this; - this.errors.push(error); - } + getName(node) { + const { + map + } = this; + return Object.keys(map).find(a => map[a] === node); + } - this.parseDirectives(directives, prevDoc); - if (directivesEndMarker) this.directivesEndMarker = true; - this.range = valueRange ? [valueRange.start, valueRange.end] : null; - this.setSchema(); - this.anchors._cstAliases = []; - this.parseContents(contents); - this.anchors.resolveNodes(); + getNames() { + return Object.keys(this.map); + } - if (this.options.prettyErrors) { - for (const error of this.errors) if (error instanceof errors.YAMLError) error.makePretty(); + getNode(name) { + return this.map[name]; + } - for (const warn of this.warnings) if (warn instanceof errors.YAMLError) warn.makePretty(); - } + newName(prefix) { + if (!prefix) prefix = this.prefix; + const names = Object.keys(this.map); - return this; + for (let i = 1; true; ++i) { + const name = `${prefix}${i}`; + if (!names.includes(name)) return name; } + } // During parsing, map & aliases contain CST nodes - parseDirectives(directives, prevDoc) { - const directiveComments = []; - let hasDirectives = false; - directives.forEach(directive => { - const { - comment, - name - } = directive; - - switch (name) { - case 'TAG': - this.resolveTagDirective(directive); - hasDirectives = true; - break; - case 'YAML': - case 'YAML:1.0': - this.resolveYamlDirective(directive); - hasDirectives = true; - break; + resolveNodes() { + const { + map, + _cstAliases + } = this; + Object.keys(map).forEach(a => { + map[a] = map[a].resolved; + }); - default: - if (name) { - const msg = `YAML only supports %TAG and %YAML directives, and not %${name}`; - this.warnings.push(new errors.YAMLWarning(directive, msg)); - } + _cstAliases.forEach(a => { + a.source = a.source.resolved; + }); - } + delete this._cstAliases; + } - if (comment) directiveComments.push(comment); - }); + setAnchor(node, name) { + if (node != null && !Anchors.validAnchorNode(node)) { + throw new Error('Anchors may only be set for Scalar, Seq and Map nodes'); + } - if (prevDoc && !hasDirectives && '1.1' === (this.version || prevDoc.version || this.options.version)) { - const copyTagPrefix = ({ - handle, - prefix - }) => ({ - handle, - prefix - }); + if (name && /[\x00-\x19\s,[\]{}]/.test(name)) { + throw new Error('Anchor names must not contain whitespace or control characters'); + } - this.tagPrefixes = prevDoc.tagPrefixes.map(copyTagPrefix); - this.version = prevDoc.version; + const { + map + } = this; + const prev = node && Object.keys(map).find(a => map[a] === node); + + if (prev) { + if (!name) { + return prev; + } else if (prev !== name) { + delete map[prev]; + map[name] = node; + } + } else { + if (!name) { + if (!node) return null; + name = this.newName(); } - this.commentBefore = directiveComments.join('\n') || null; + map[name] = node; } - parseContents(contents) { - const comments = { - before: [], - after: [] - }; - const contentNodes = []; - let spaceBefore = false; - contents.forEach(node => { - if (node.valueRange) { - if (contentNodes.length === 1) { - const msg = 'Document is not valid YAML (bad indentation?)'; - this.errors.push(new errors.YAMLSyntaxError(node, msg)); - } - - const res = this.resolveNode(node); - - if (spaceBefore) { - res.spaceBefore = true; - spaceBefore = false; - } - - contentNodes.push(res); - } else if (node.comment !== null) { - const cc = contentNodes.length === 0 ? comments.before : comments.after; - cc.push(node.comment); - } else if (node.type === constants.Type.BLANK_LINE) { - spaceBefore = true; - - if (contentNodes.length === 0 && comments.before.length > 0 && !this.commentBefore) { - // space-separated comments at start are parsed as document comments - this.commentBefore = comments.before.join('\n'); - comments.before = []; - } - } - }); + return name; + } - switch (contentNodes.length) { - case 0: - this.contents = null; - comments.after = comments.before; - break; +} - case 1: - this.contents = contentNodes[0]; +const visit = (node, tags) => { + if (node && typeof node === 'object') { + const { + tag + } = node; - if (this.contents) { - const cb = comments.before.join('\n') || null; + if (node instanceof resolveSeq4a68b39b.Collection) { + if (tag) tags[tag] = true; + node.items.forEach(n => visit(n, tags)); + } else if (node instanceof resolveSeq4a68b39b.Pair) { + visit(node.key, tags); + visit(node.value, tags); + } else if (node instanceof resolveSeq4a68b39b.Scalar) { + if (tag) tags[tag] = true; + } + } - if (cb) { - const cbNode = this.contents instanceof _Collection.default && this.contents.items[0] ? this.contents.items[0] : this.contents; - cbNode.commentBefore = cbNode.commentBefore ? `${cb}\n${cbNode.commentBefore}` : cb; - } - } else { - comments.after = comments.before.concat(comments.after); - } + return tags; +}; - break; +const listTagNames = node => Object.keys(visit(node, {})); - default: - this.contents = contentNodes; +function parseContents(doc, contents) { + const comments = { + before: [], + after: [] + }; + let body = undefined; + let spaceBefore = false; + + for (const node of contents) { + if (node.valueRange) { + if (body !== undefined) { + const msg = 'Document contains trailing content not separated by a ... or --- line'; + doc.errors.push(new PlainValueEc8e588e.YAMLSyntaxError(node, msg)); + break; + } - if (this.contents[0]) { - this.contents[0].commentBefore = comments.before.join('\n') || null; - } else { - comments.after = comments.before.concat(comments.after); - } + const res = resolveSeq4a68b39b.resolveNode(doc, node); + if (spaceBefore) { + res.spaceBefore = true; + spaceBefore = false; } - this.comment = comments.after.join('\n') || null; - } - - resolveTagDirective(directive) { - const [handle, prefix] = directive.parameters; + body = res; + } else if (node.comment !== null) { + const cc = body === undefined ? comments.before : comments.after; + cc.push(node.comment); + } else if (node.type === PlainValueEc8e588e.Type.BLANK_LINE) { + spaceBefore = true; - if (handle && prefix) { - if (this.tagPrefixes.every(p => p.handle !== handle)) { - this.tagPrefixes.push({ - handle, - prefix - }); - } else { - const msg = 'The %TAG directive must only be given at most once per handle in the same document.'; - this.errors.push(new errors.YAMLSemanticError(directive, msg)); - } - } else { - const msg = 'Insufficient parameters given for %TAG directive'; - this.errors.push(new errors.YAMLSemanticError(directive, msg)); + if (body === undefined && comments.before.length > 0 && !doc.commentBefore) { + // space-separated comments at start are parsed as document comments + doc.commentBefore = comments.before.join('\n'); + comments.before = []; } } + } - resolveYamlDirective(directive) { - let [version] = directive.parameters; - if (directive.name === 'YAML:1.0') version = '1.0'; - - if (this.version) { - const msg = 'The %YAML directive must only be given at most once per document.'; - this.errors.push(new errors.YAMLSemanticError(directive, msg)); - } + doc.contents = body || null; - if (!version) { - const msg = 'Insufficient parameters given for %YAML directive'; - this.errors.push(new errors.YAMLSemanticError(directive, msg)); - } else { - if (!Document.defaults[version]) { - const v0 = this.version || this.options.version; - const msg = `Document will be parsed as YAML ${v0} rather than YAML ${version}`; - this.warnings.push(new errors.YAMLWarning(directive, msg)); - } + if (!body) { + doc.comment = comments.before.concat(comments.after).join('\n') || null; + } else { + const cb = comments.before.join('\n'); - this.version = version; - } + if (cb) { + const cbNode = body instanceof resolveSeq4a68b39b.Collection && body.items[0] ? body.items[0] : body; + cbNode.commentBefore = cbNode.commentBefore ? `${cb}\n${cbNode.commentBefore}` : cb; } - resolveTagName(node) { - const { - tag, - type - } = node; - let nonSpecific = false; + doc.comment = comments.after.join('\n') || null; + } +} - if (tag) { - const { - handle, - suffix, - verbatim - } = tag; - - if (verbatim) { - if (verbatim !== '!' && verbatim !== '!!') return verbatim; - const msg = `Verbatim tags aren't resolved, so ${verbatim} is invalid.`; - this.errors.push(new errors.YAMLSemanticError(node, msg)); - } else if (handle === '!' && !suffix) { - nonSpecific = true; - } else { - let prefix = this.tagPrefixes.find(p => p.handle === handle); +function resolveTagDirective({ + tagPrefixes +}, directive) { + const [handle, prefix] = directive.parameters; - if (!prefix) { - const dtp = this.getDefaults().tagPrefixes; - if (dtp) prefix = dtp.find(p => p.handle === handle); - } + if (!handle || !prefix) { + const msg = 'Insufficient parameters given for %TAG directive'; + throw new PlainValueEc8e588e.YAMLSemanticError(directive, msg); + } - if (prefix) { - if (suffix) { - if (handle === '!' && (this.version || this.options.version) === '1.0') { - if (suffix[0] === '^') return suffix; + if (tagPrefixes.some(p => p.handle === handle)) { + const msg = 'The %TAG directive must only be given at most once per handle in the same document.'; + throw new PlainValueEc8e588e.YAMLSemanticError(directive, msg); + } - if (/[:/]/.test(suffix)) { - // word/foo -> tag:word.yaml.org,2002:foo - const vocab = suffix.match(/^([a-z0-9-]+)\/(.*)/i); - return vocab ? `tag:${vocab[1]}.yaml.org,2002:${vocab[2]}` : `tag:${suffix}`; - } - } + return { + handle, + prefix + }; +} - return prefix.prefix + decodeURIComponent(suffix); - } +function resolveYamlDirective(doc, directive) { + let [version] = directive.parameters; + if (directive.name === 'YAML:1.0') version = '1.0'; - this.errors.push(new errors.YAMLSemanticError(node, `The ${handle} tag has no suffix.`)); - } else { - const msg = `The ${handle} tag handle is non-default and was not declared.`; - this.errors.push(new errors.YAMLSemanticError(node, msg)); - } - } - } + if (!version) { + const msg = 'Insufficient parameters given for %YAML directive'; + throw new PlainValueEc8e588e.YAMLSemanticError(directive, msg); + } - switch (type) { - case constants.Type.BLOCK_FOLDED: - case constants.Type.BLOCK_LITERAL: - case constants.Type.QUOTE_DOUBLE: - case constants.Type.QUOTE_SINGLE: - return _schema.default.defaultTags.STR; + if (!documentOptions[version]) { + const v0 = doc.version || doc.options.version; + const msg = `Document will be parsed as YAML ${v0} rather than YAML ${version}`; + doc.warnings.push(new PlainValueEc8e588e.YAMLWarning(directive, msg)); + } - case constants.Type.FLOW_MAP: - case constants.Type.MAP: - return _schema.default.defaultTags.MAP; + return version; +} - case constants.Type.FLOW_SEQ: - case constants.Type.SEQ: - return _schema.default.defaultTags.SEQ; +function parseDirectives(doc, directives, prevDoc) { + const directiveComments = []; + let hasDirectives = false; - case constants.Type.PLAIN: - return nonSpecific ? _schema.default.defaultTags.STR : null; + for (const directive of directives) { + const { + comment, + name + } = directive; - default: - return null; - } - } + switch (name) { + case 'TAG': + try { + doc.tagPrefixes.push(resolveTagDirective(doc, directive)); + } catch (error) { + doc.errors.push(error); + } - resolveNode(node) { - if (!node) return null; - const { - anchors, - errors: errors$1, - schema - } = this; - let hasAnchor = false; - let hasTag = false; - const comments = { - before: [], - after: [] - }; - const props = isCollectionItem(node.context.parent) ? node.context.parent.props.concat(node.props) : node.props; + hasDirectives = true; + break; - for (const { - start, - end - } of props) { - switch (node.context.src[start]) { - case constants.Char.COMMENT: - { - if (!node.commentHasRequiredWhitespace(start)) { - const msg = 'Comments must be separated from other tokens by white space characters'; - errors$1.push(new errors.YAMLSemanticError(node, msg)); - } + case 'YAML': + case 'YAML:1.0': + if (doc.version) { + const msg = 'The %YAML directive must only be given at most once per document.'; + doc.errors.push(new PlainValueEc8e588e.YAMLSemanticError(directive, msg)); + } - const c = node.context.src.slice(start + 1, end); - const { - header, - valueRange - } = node; + try { + doc.version = resolveYamlDirective(doc, directive); + } catch (error) { + doc.errors.push(error); + } - if (valueRange && (start > valueRange.start || header && start > header.start)) { - comments.after.push(c); - } else { - comments.before.push(c); - } - } - break; + hasDirectives = true; + break; - case constants.Char.ANCHOR: - if (hasAnchor) { - const msg = 'A node can have at most one anchor'; - errors$1.push(new errors.YAMLSemanticError(node, msg)); - } + default: + if (name) { + const msg = `YAML only supports %TAG and %YAML directives, and not %${name}`; + doc.warnings.push(new PlainValueEc8e588e.YAMLWarning(directive, msg)); + } - hasAnchor = true; - break; + } - case constants.Char.TAG: - if (hasTag) { - const msg = 'A node can have at most one tag'; - errors$1.push(new errors.YAMLSemanticError(node, msg)); - } + if (comment) directiveComments.push(comment); + } - hasTag = true; - break; - } - } + if (prevDoc && !hasDirectives && '1.1' === (doc.version || prevDoc.version || doc.options.version)) { + const copyTagPrefix = ({ + handle, + prefix + }) => ({ + handle, + prefix + }); - if (hasAnchor) { - const name = node.anchor; - const prev = anchors.getNode(name); // At this point, aliases for any preceding node with the same anchor - // name have already been resolved, so it may safely be renamed. + doc.tagPrefixes = prevDoc.tagPrefixes.map(copyTagPrefix); + doc.version = prevDoc.version; + } - if (prev) anchors.map[anchors.newName(name)] = prev; // During parsing, we need to store the CST node in anchors.map as - // anchors need to be available during resolution to allow for - // circular references. + doc.commentBefore = directiveComments.join('\n') || null; +} - anchors.map[name] = node; - } +function assertCollection(contents) { + if (contents instanceof resolveSeq4a68b39b.Collection) return true; + throw new Error('Expected a YAML collection as document contents'); +} - let res; +class Document$1 { + constructor(options) { + this.anchors = new Anchors(options.anchorPrefix); + this.commentBefore = null; + this.comment = null; + this.contents = null; + this.directivesEndMarker = null; + this.errors = []; + this.options = options; + this.schema = null; + this.tagPrefixes = []; + this.version = null; + this.warnings = []; + } - if (node.type === constants.Type.ALIAS) { - if (hasAnchor || hasTag) { - const msg = 'An alias node must not specify any properties'; - errors$1.push(new errors.YAMLSemanticError(node, msg)); - } + add(value) { + assertCollection(this.contents); + return this.contents.add(value); + } + + addIn(path, value) { + assertCollection(this.contents); + this.contents.addIn(path, value); + } + + delete(key) { + assertCollection(this.contents); + return this.contents.delete(key); + } - const name = node.rawValue; - const src = anchors.getNode(name); + deleteIn(path) { + if (resolveSeq4a68b39b.isEmptyPath(path)) { + if (this.contents == null) return false; + this.contents = null; + return true; + } - if (!src) { - const msg = `Aliased anchor not found: ${name}`; - errors$1.push(new errors.YAMLReferenceError(node, msg)); - return null; - } // Lazy resolution for circular references + assertCollection(this.contents); + return this.contents.deleteIn(path); + } + getDefaults() { + return Document$1.defaults[this.version] || Document$1.defaults[this.options.version] || {}; + } - res = new _Alias.default(src); + get(key, keepScalar) { + return this.contents instanceof resolveSeq4a68b39b.Collection ? this.contents.get(key, keepScalar) : undefined; + } - anchors._cstAliases.push(res); - } else { - const tagName = this.resolveTagName(node); + getIn(path, keepScalar) { + if (resolveSeq4a68b39b.isEmptyPath(path)) return !keepScalar && this.contents instanceof resolveSeq4a68b39b.Scalar ? this.contents.value : this.contents; + return this.contents instanceof resolveSeq4a68b39b.Collection ? this.contents.getIn(path, keepScalar) : undefined; + } - if (tagName) { - res = schema.resolveNodeWithFallback(this, node, tagName); - } else { - if (node.type !== constants.Type.PLAIN) { - const msg = `Failed to resolve ${node.type} node here`; - errors$1.push(new errors.YAMLSyntaxError(node, msg)); - return null; - } + has(key) { + return this.contents instanceof resolveSeq4a68b39b.Collection ? this.contents.has(key) : false; + } - try { - res = schema.resolveScalar(node.strValue || ''); - } catch (error) { - if (!error.source) error.source = node; - errors$1.push(error); - return null; - } - } - } + hasIn(path) { + if (resolveSeq4a68b39b.isEmptyPath(path)) return this.contents !== undefined; + return this.contents instanceof resolveSeq4a68b39b.Collection ? this.contents.hasIn(path) : false; + } - if (res) { - res.range = [node.range.start, node.range.end]; - if (this.options.keepCstNodes) res.cstNode = node; - if (this.options.keepNodeTypes) res.type = node.type; - const cb = comments.before.join('\n'); + set(key, value) { + assertCollection(this.contents); + this.contents.set(key, value); + } - if (cb) { - res.commentBefore = res.commentBefore ? `${res.commentBefore}\n${cb}` : cb; - } + setIn(path, value) { + if (resolveSeq4a68b39b.isEmptyPath(path)) this.contents = value;else { + assertCollection(this.contents); + this.contents.setIn(path, value); + } + } - const ca = comments.after.join('\n'); - if (ca) res.comment = res.comment ? `${res.comment}\n${ca}` : ca; - } + setSchema(id, customTags) { + if (!id && !customTags && this.schema) return; + if (typeof id === 'number') id = id.toFixed(1); - return node.resolved = res; + if (id === '1.0' || id === '1.1' || id === '1.2') { + if (this.version) this.version = id;else this.options.version = id; + delete this.options.schema; + } else if (id && typeof id === 'string') { + this.options.schema = id; } - listNonDefaultTags() { - return (0, _listTagNames.default)(this.contents).filter(t => t.indexOf(_schema.default.defaultPrefix) !== 0); - } + if (Array.isArray(customTags)) this.options.customTags = customTags; + const opt = Object.assign({}, this.getDefaults(), this.options); + this.schema = new Schema42e9705c.Schema(opt); + } - setTagPrefix(handle, prefix) { - if (handle[0] !== '!' || handle[handle.length - 1] !== '!') throw new Error('Handle must start and end with !'); + parse(node, prevDoc) { + if (this.options.keepCstNodes) this.cstNode = node; + if (this.options.keepNodeTypes) this.type = 'DOCUMENT'; + const { + directives = [], + contents = [], + directivesEndMarker, + error, + valueRange + } = node; - if (prefix) { - const prev = this.tagPrefixes.find(p => p.handle === handle); - if (prev) prev.prefix = prefix;else this.tagPrefixes.push({ - handle, - prefix - }); - } else { - this.tagPrefixes = this.tagPrefixes.filter(p => p.handle !== handle); - } + if (error) { + if (!error.source) error.source = this; + this.errors.push(error); } - stringifyTag(tag) { - if ((this.version || this.options.version) === '1.0') { - const priv = tag.match(/^tag:private\.yaml\.org,2002:([^:/]+)$/); - if (priv) return '!' + priv[1]; - const vocab = tag.match(/^tag:([a-zA-Z0-9-]+)\.yaml\.org,2002:(.*)/); - return vocab ? `!${vocab[1]}/${vocab[2]}` : `!${tag.replace(/^tag:/, '')}`; - } else { - let p = this.tagPrefixes.find(p => tag.indexOf(p.prefix) === 0); + parseDirectives(this, directives, prevDoc); + if (directivesEndMarker) this.directivesEndMarker = true; + this.range = valueRange ? [valueRange.start, valueRange.end] : null; + this.setSchema(); + this.anchors._cstAliases = []; + parseContents(this, contents); + this.anchors.resolveNodes(); - if (!p) { - const dtp = this.getDefaults().tagPrefixes; - p = dtp && dtp.find(p => tag.indexOf(p.prefix) === 0); - } + if (this.options.prettyErrors) { + for (const error of this.errors) if (error instanceof PlainValueEc8e588e.YAMLError) error.makePretty(); - if (!p) return tag[0] === '!' ? tag : `!<${tag}>`; - const suffix = tag.substr(p.prefix.length).replace(/[!,[\]{}]/g, ch => ({ - '!': '%21', - ',': '%2C', - '[': '%5B', - ']': '%5D', - '{': '%7B', - '}': '%7D' - })[ch]); - return p.handle + suffix; - } + for (const warn of this.warnings) if (warn instanceof PlainValueEc8e588e.YAMLError) warn.makePretty(); } - toJSON(arg) { - const { - keepBlobsInJSON, - mapAsMap, - maxAliasCount - } = this.options; - const keep = keepBlobsInJSON && (typeof arg !== 'string' || !(this.contents instanceof _Scalar.default)); - const ctx = { - doc: this, - keep, - mapAsMap: keep && !!mapAsMap, - maxAliasCount - }; - const anchorNames = Object.keys(this.anchors.map); - if (anchorNames.length > 0) ctx.anchors = anchorNames.map(name => ({ - alias: [], - aliasCount: 0, - count: 1, - node: this.anchors.map[name] - })); - return (0, _toJSON.default)(this.contents, arg, ctx); - } - - toString() { - if (this.errors.length > 0) throw new Error('Document with errors cannot be stringified'); - this.setSchema(); - const lines = []; - let hasDirectives = false; - - if (this.version) { - let vd = '%YAML 1.2'; - - if (this.schema.name === 'yaml-1.1') { - if (this.version === '1.0') vd = '%YAML:1.0';else if (this.version === '1.1') vd = '%YAML 1.1'; - } + return this; + } - lines.push(vd); - hasDirectives = true; - } + listNonDefaultTags() { + return listTagNames(this.contents).filter(t => t.indexOf(Schema42e9705c.Schema.defaultPrefix) !== 0); + } - const tagNames = this.listNonDefaultTags(); - this.tagPrefixes.forEach(({ + setTagPrefix(handle, prefix) { + if (handle[0] !== '!' || handle[handle.length - 1] !== '!') throw new Error('Handle must start and end with !'); + + if (prefix) { + const prev = this.tagPrefixes.find(p => p.handle === handle); + if (prev) prev.prefix = prefix;else this.tagPrefixes.push({ handle, prefix - }) => { - if (tagNames.some(t => t.indexOf(prefix) === 0)) { - lines.push(`%TAG ${handle} ${prefix}`); - hasDirectives = true; - } }); - if (hasDirectives || this.directivesEndMarker) lines.push('---'); + } else { + this.tagPrefixes = this.tagPrefixes.filter(p => p.handle !== handle); + } + } - if (this.commentBefore) { - if (hasDirectives || !this.directivesEndMarker) lines.unshift(''); - lines.unshift(this.commentBefore.replace(/^/gm, '#')); - } + toJSON(arg, onAnchor) { + const { + keepBlobsInJSON, + mapAsMap, + maxAliasCount + } = this.options; + const keep = keepBlobsInJSON && (typeof arg !== 'string' || !(this.contents instanceof resolveSeq4a68b39b.Scalar)); + const ctx = { + doc: this, + indentStep: ' ', + keep, + mapAsMap: keep && !!mapAsMap, + maxAliasCount, + stringify // Requiring directly in Pair would create circular dependencies - const ctx = { - anchors: {}, - doc: this, - indent: '' - }; - let chompKeep = false; - let contentComment = null; + }; + const anchorNames = Object.keys(this.anchors.map); + if (anchorNames.length > 0) ctx.anchors = new Map(anchorNames.map(name => [this.anchors.map[name], { + alias: [], + aliasCount: 0, + count: 1 + }])); + const res = resolveSeq4a68b39b.toJSON(this.contents, arg, ctx); + if (typeof onAnchor === 'function' && ctx.anchors) for (const { + count, + res + } of ctx.anchors.values()) onAnchor(res, count); + return res; + } - if (this.contents) { - if (this.contents instanceof _Node.default) { - if (this.contents.spaceBefore && (hasDirectives || this.directivesEndMarker)) lines.push(''); - if (this.contents.commentBefore) lines.push(this.contents.commentBefore.replace(/^/gm, '#')); // top-level block scalars need to be indented if followed by a comment + toString() { + if (this.errors.length > 0) throw new Error('Document with errors cannot be stringified'); + const indentSize = this.options.indent; - ctx.forceBlockIndent = !!this.comment; - contentComment = this.contents.comment; - } + if (!Number.isInteger(indentSize) || indentSize <= 0) { + const s = JSON.stringify(indentSize); + throw new Error(`"indent" option must be a positive integer, not ${s}`); + } - const onChompKeep = contentComment ? null : () => chompKeep = true; - const body = this.schema.stringify(this.contents, ctx, () => contentComment = null, onChompKeep); - lines.push((0, _addComment.default)(body, '', contentComment)); - } else if (this.contents !== undefined) { - lines.push(this.schema.stringify(this.contents, ctx)); - } + this.setSchema(); + const lines = []; + let hasDirectives = false; - if (this.comment) { - if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '') lines.push(''); - lines.push(this.comment.replace(/^/gm, '#')); + if (this.version) { + let vd = '%YAML 1.2'; + + if (this.schema.name === 'yaml-1.1') { + if (this.version === '1.0') vd = '%YAML:1.0';else if (this.version === '1.1') vd = '%YAML 1.1'; } - return lines.join('\n') + '\n'; + lines.push(vd); + hasDirectives = true; } - } - - exports.default = Document; + const tagNames = this.listNonDefaultTags(); + this.tagPrefixes.forEach(({ + handle, + prefix + }) => { + if (tagNames.some(t => t.indexOf(prefix) === 0)) { + lines.push(`%TAG ${handle} ${prefix}`); + hasDirectives = true; + } + }); + if (hasDirectives || this.directivesEndMarker) lines.push('---'); - _defineProperty(Document, "defaults", { - '1.0': { - schema: 'yaml-1.1', - merge: true, - tagPrefixes: [{ - handle: '!', - prefix: _schema.default.defaultPrefix - }, { - handle: '!!', - prefix: 'tag:private.yaml.org,2002:' - }] - }, - '1.1': { - schema: 'yaml-1.1', - merge: true, - tagPrefixes: [{ - handle: '!', - prefix: '!' - }, { - handle: '!!', - prefix: _schema.default.defaultPrefix - }] - }, - '1.2': { - schema: 'core', - merge: false, - tagPrefixes: [{ - handle: '!', - prefix: '!' - }, { - handle: '!!', - prefix: _schema.default.defaultPrefix - }] + if (this.commentBefore) { + if (hasDirectives || !this.directivesEndMarker) lines.unshift(''); + lines.unshift(this.commentBefore.replace(/^/gm, '#')); } - }); -}); -unwrapExports(Document_1$1); -var dist$1 = createCommonjsModule(function (module, exports) { + const ctx = { + anchors: {}, + doc: this, + indent: '', + indentStep: ' '.repeat(indentSize), + stringify // Requiring directly in nodes would create circular dependencies - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.default = void 0; + }; + let chompKeep = false; + let contentComment = null; - var _parse = _interopRequireDefault(parse_1); + if (this.contents) { + if (this.contents instanceof resolveSeq4a68b39b.Node) { + if (this.contents.spaceBefore && (hasDirectives || this.directivesEndMarker)) lines.push(''); + if (this.contents.commentBefore) lines.push(this.contents.commentBefore.replace(/^/gm, '#')); // top-level block scalars need to be indented if followed by a comment + + ctx.forceBlockIndent = !!this.comment; + contentComment = this.contents.comment; + } - var _Document = _interopRequireDefault(Document_1$1); + const onChompKeep = contentComment ? null : () => chompKeep = true; + const body = stringify(this.contents, ctx, () => contentComment = null, onChompKeep); + lines.push(resolveSeq4a68b39b.addComment(body, '', contentComment)); + } else if (this.contents !== undefined) { + lines.push(stringify(this.contents, ctx)); + } - var _schema = _interopRequireDefault(schema); + if (this.comment) { + if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '') lines.push(''); + lines.push(this.comment.replace(/^/gm, '#')); + } - function _interopRequireDefault(obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; + return lines.join('\n') + '\n'; } - const defaultOptions = { - anchorPrefix: 'a', - customTags: null, - keepCstNodes: false, - keepNodeTypes: true, - keepBlobsInJSON: true, - mapAsMap: false, - maxAliasCount: 100, - prettyErrors: false, - // TODO Set true in v2 - simpleKeys: false, - version: '1.2' - }; +} - function createNode(value, wrapScalars = true, tag) { - if (tag === undefined && typeof wrapScalars === 'string') { - tag = wrapScalars; - wrapScalars = true; - } +PlainValueEc8e588e._defineProperty(Document$1, "defaults", documentOptions); + +var Document_1 = Document$1; +var defaultOptions_1 = defaultOptions; +var scalarOptions_1 = scalarOptions; +var Document2cf6b08c = { + Document: Document_1, + defaultOptions: defaultOptions_1, + scalarOptions: scalarOptions_1 +}; - const options = Object.assign({}, _Document.default.defaults[defaultOptions.version], defaultOptions); - const schema = new _schema.default(options); - return schema.createNode(value, wrapScalars, tag); +function createNode$1(value, wrapScalars = true, tag) { + if (tag === undefined && typeof wrapScalars === 'string') { + tag = wrapScalars; + wrapScalars = true; } - class Document extends _Document.default { - constructor(options) { - super(Object.assign({}, defaultOptions, options)); - } + const options = Object.assign({}, Document2cf6b08c.Document.defaults[Document2cf6b08c.defaultOptions.version], Document2cf6b08c.defaultOptions); + const schema = new Schema42e9705c.Schema(options); + return schema.createNode(value, wrapScalars, tag); +} +class Document$2 extends Document2cf6b08c.Document { + constructor(options) { + super(Object.assign({}, Document2cf6b08c.defaultOptions, options)); } - function parseAllDocuments(src, options) { - const stream = []; - let prev; +} - for (const cstDoc of (0, _parse.default)(src)) { - const doc = new Document(options); - doc.parse(cstDoc, prev); - stream.push(doc); - prev = doc; - } +function parseAllDocuments(src, options) { + const stream = []; + let prev; - return stream; + for (const cstDoc of parseCst.parse(src)) { + const doc = new Document$2(options); + doc.parse(cstDoc, prev); + stream.push(doc); + prev = doc; } - function parseDocument(src, options) { - const cst = (0, _parse.default)(src); - const doc = new Document(options).parse(cst[0]); + return stream; +} - if (cst.length > 1) { - const errMsg = 'Source contains multiple documents; please use YAML.parseAllDocuments()'; - doc.errors.unshift(new errors.YAMLSemanticError(cst[1], errMsg)); - } +function parseDocument(src, options) { + const cst = parseCst.parse(src); + const doc = new Document$2(options).parse(cst[0]); - return doc; + if (cst.length > 1) { + const errMsg = 'Source contains multiple documents; please use YAML.parseAllDocuments()'; + doc.errors.unshift(new PlainValueEc8e588e.YAMLSemanticError(cst[1], errMsg)); } - function parse(src, options) { - const doc = parseDocument(src, options); - doc.warnings.forEach(warning => (0, warnings.warn)(warning)); - if (doc.errors.length > 0) throw doc.errors[0]; - return doc.toJSON(); - } + return doc; +} - function stringify(value, options) { - const doc = new Document(options); - doc.contents = value; - return String(doc); - } +function parse$1(src, options) { + const doc = parseDocument(src, options); + doc.warnings.forEach(warning => warnings39684f17.warn(warning)); + if (doc.errors.length > 0) throw doc.errors[0]; + return doc.toJSON(); +} - var _default = { - createNode, - defaultOptions, - Document, - parse, - parseAllDocuments, - parseCST: _parse.default, - parseDocument, - stringify - }; - exports.default = _default; -}); -unwrapExports(dist$1); +function stringify$1(value, options) { + const doc = new Document$2(options); + doc.contents = value; + return String(doc); +} + +const YAML = { + createNode: createNode$1, + defaultOptions: Document2cf6b08c.defaultOptions, + Document: Document$2, + parse: parse$1, + parseAllDocuments, + parseCST: parseCst.parse, + parseDocument, + scalarOptions: Document2cf6b08c.scalarOptions, + stringify: stringify$1 +}; +var YAML_1 = YAML; +var dist$1 = { + YAML: YAML_1 +}; -var yaml = dist$1.default; +var yaml = dist$1.YAML; var loaders_1 = createCommonjsModule(function (module, exports) { @@ -11039,8 +9452,6 @@ var loaders_1 = createCommonjsModule(function (module, exports) { }; exports.loaders = loaders; }); -unwrapExports(loaders_1); -var loaders_2 = loaders_1.loaders; var getPropertyByPath_1 = createCommonjsModule(function (module, exports) { @@ -11069,8 +9480,6 @@ var getPropertyByPath_1 = createCommonjsModule(function (module, exports) { }, source); } }); -unwrapExports(getPropertyByPath_1); -var getPropertyByPath_2 = getPropertyByPath_1.getPropertyByPath; var ExplorerBase_1 = createCommonjsModule(function (module, exports) { @@ -11080,7 +9489,7 @@ var ExplorerBase_1 = createCommonjsModule(function (module, exports) { exports.getExtensionDescription = getExtensionDescription; exports.ExplorerBase = void 0; - var _path = _interopRequireDefault(path); + var _path = _interopRequireDefault(path__default['default']); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { @@ -11214,9 +9623,6 @@ var ExplorerBase_1 = createCommonjsModule(function (module, exports) { return ext ? `extension "${ext}"` : 'files without extensions'; } }); -unwrapExports(ExplorerBase_1); -var ExplorerBase_2 = ExplorerBase_1.getExtensionDescription; -var ExplorerBase_3 = ExplorerBase_1.ExplorerBase; var readFile_1 = createCommonjsModule(function (module, exports) { @@ -11226,7 +9632,7 @@ var readFile_1 = createCommonjsModule(function (module, exports) { exports.readFile = readFile; exports.readFileSync = readFileSync; - var _fs = _interopRequireDefault(fs); + var _fs = _interopRequireDefault(fs__default['default']); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { @@ -11278,9 +9684,6 @@ var readFile_1 = createCommonjsModule(function (module, exports) { } } }); -unwrapExports(readFile_1); -var readFile_2 = readFile_1.readFile; -var readFile_3 = readFile_1.readFileSync; var cacheWrapper_1 = createCommonjsModule(function (module, exports) { @@ -11314,13 +9717,10 @@ var cacheWrapper_1 = createCommonjsModule(function (module, exports) { return result; } }); -unwrapExports(cacheWrapper_1); -var cacheWrapper_2 = cacheWrapper_1.cacheWrapper; -var cacheWrapper_3 = cacheWrapper_1.cacheWrapperSync; const { promisify -} = util; +} = util__default['default']; async function isType(fsStatType, statsMethodName, filePath) { if (typeof filePath !== 'string') { @@ -11328,7 +9728,7 @@ async function isType(fsStatType, statsMethodName, filePath) { } try { - const stats = await promisify(fs[fsStatType])(filePath); + const stats = await promisify(fs__default['default'][fsStatType])(filePath); return stats[statsMethodName](); } catch (error) { if (error.code === 'ENOENT') { @@ -11345,7 +9745,7 @@ function isTypeSync(fsStatType, statsMethodName, filePath) { } try { - return fs[fsStatType](filePath)[statsMethodName](); + return fs__default['default'][fsStatType](filePath)[statsMethodName](); } catch (error) { if (error.code === 'ENOENT') { return false; @@ -11378,7 +9778,7 @@ var getDirectory_1 = createCommonjsModule(function (module, exports) { exports.getDirectory = getDirectory; exports.getDirectorySync = getDirectorySync; - var _path = _interopRequireDefault(path); + var _path = _interopRequireDefault(path__default['default']); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { @@ -11410,9 +9810,6 @@ var getDirectory_1 = createCommonjsModule(function (module, exports) { return directory; } }); -unwrapExports(getDirectory_1); -var getDirectory_2 = getDirectory_1.getDirectory; -var getDirectory_3 = getDirectory_1.getDirectorySync; var Explorer_1 = createCommonjsModule(function (module, exports) { @@ -11421,7 +9818,7 @@ var Explorer_1 = createCommonjsModule(function (module, exports) { }); exports.Explorer = void 0; - var _path = _interopRequireDefault(path); + var _path = _interopRequireDefault(path__default['default']); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { @@ -11429,24 +9826,6 @@ var Explorer_1 = createCommonjsModule(function (module, exports) { }; } - function _asyncIterator(iterable) { - var method; - - if (typeof Symbol !== "undefined") { - if (Symbol.asyncIterator) { - method = iterable[Symbol.asyncIterator]; - if (method != null) return method.call(iterable); - } - - if (Symbol.iterator) { - method = iterable[Symbol.iterator]; - if (method != null) return method.call(iterable); - } - } - - throw new TypeError("Object is not async iterable"); - } - class Explorer extends ExplorerBase_1.ExplorerBase { constructor(options) { super(options); @@ -11481,35 +9860,14 @@ var Explorer_1 = createCommonjsModule(function (module, exports) { } async searchDirectory(dir) { - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - - var _iteratorError; - - try { - for (var _iterator = _asyncIterator(this.config.searchPlaces), _step, _value; _step = await _iterator.next(), _iteratorNormalCompletion = _step.done, _value = await _step.value, !_iteratorNormalCompletion; _iteratorNormalCompletion = true) { - const place = _value; - const placeResult = await this.loadSearchPlace(dir, place); - - if (this.shouldSearchStopWithResult(placeResult) === true) { - return placeResult; - } - } // config not found + for await (const place of this.config.searchPlaces) { + const placeResult = await this.loadSearchPlace(dir, place); - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return != null) { - await _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } + if (this.shouldSearchStopWithResult(placeResult) === true) { + return placeResult; } - } + } // config not found + return null; } @@ -11567,8 +9925,6 @@ var Explorer_1 = createCommonjsModule(function (module, exports) { exports.Explorer = Explorer; }); -unwrapExports(Explorer_1); -var Explorer_2 = Explorer_1.Explorer; var ExplorerSync_1 = createCommonjsModule(function (module, exports) { @@ -11577,7 +9933,7 @@ var ExplorerSync_1 = createCommonjsModule(function (module, exports) { }); exports.ExplorerSync = void 0; - var _path = _interopRequireDefault(path); + var _path = _interopRequireDefault(path__default['default']); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { @@ -11684,8 +10040,6 @@ var ExplorerSync_1 = createCommonjsModule(function (module, exports) { exports.ExplorerSync = ExplorerSync; }); -unwrapExports(ExplorerSync_1); -var ExplorerSync_2 = ExplorerSync_1.ExplorerSync; var dist$2 = createCommonjsModule(function (module, exports) { @@ -11696,13 +10050,15 @@ var dist$2 = createCommonjsModule(function (module, exports) { exports.cosmiconfigSync = cosmiconfigSync; exports.defaultLoaders = void 0; - var _os = _interopRequireDefault(os); + var _os = _interopRequireDefault(os__default['default']); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; - } // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + } + /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type function cosmiconfig(moduleName, options = {}) { @@ -11732,6 +10088,7 @@ var dist$2 = createCommonjsModule(function (module, exports) { const defaultLoaders = Object.freeze({ + '.cjs': loaders_1.loaders.loadJs, '.js': loaders_1.loaders.loadJs, '.json': loaders_1.loaders.loadJson, '.yaml': loaders_1.loaders.loadYaml, @@ -11740,35 +10097,31 @@ var dist$2 = createCommonjsModule(function (module, exports) { }); exports.defaultLoaders = defaultLoaders; + const identity = function identity(x) { + return x; + }; + function normalizeOptions(moduleName, options) { const defaults = { packageProp: moduleName, - searchPlaces: ['package.json', `.${moduleName}rc`, `.${moduleName}rc.json`, `.${moduleName}rc.yaml`, `.${moduleName}rc.yml`, `.${moduleName}rc.js`, `${moduleName}.config.js`], + searchPlaces: ['package.json', `.${moduleName}rc`, `.${moduleName}rc.json`, `.${moduleName}rc.yaml`, `.${moduleName}rc.yml`, `.${moduleName}rc.js`, `.${moduleName}rc.cjs`, `${moduleName}.config.js`, `${moduleName}.config.cjs`], ignoreEmptySearchPlaces: true, stopDir: _os.default.homedir(), cache: true, transform: identity, loaders: defaultLoaders }; - const normalizedOptions = Object.assign({}, defaults, {}, options, { - loaders: Object.assign({}, defaults.loaders, {}, options.loaders) + const normalizedOptions = Object.assign({}, defaults, options, { + loaders: Object.assign({}, defaults.loaders, options.loaders) }); return normalizedOptions; } - - const identity = function identity(x) { - return x; - }; }); -unwrapExports(dist$2); -var dist_1 = dist$2.cosmiconfig; -var dist_2 = dist$2.cosmiconfigSync; -var dist_3 = dist$2.defaultLoaders; var findParentDir = createCommonjsModule(function (module, exports) { - var exists = fs.exists || path.exists, - existsSync = fs.existsSync || path.existsSync; + var exists = fs__default['default'].exists || path__default['default'].exists, + existsSync = fs__default['default'].existsSync || path__default['default'].existsSync; function splitPath(path) { var parts = path.split(/(\/|\\)/); @@ -11781,7 +10134,7 @@ var findParentDir = createCommonjsModule(function (module, exports) { function testDir(parts) { if (parts.length === 0) return cb(null, null); var p = parts.join(''); - exists(path.join(p, clue), function (itdoes) { + exists(path__default['default'].join(p, clue), function (itdoes) { if (itdoes) return cb(null, p); testDir(parts.slice(0, -1)); }); @@ -11794,381 +10147,50 @@ var findParentDir = createCommonjsModule(function (module, exports) { function testDir(parts) { if (parts.length === 0) return null; var p = parts.join(''); - var itdoes = existsSync(path.join(p, clue)); + var itdoes = existsSync(path__default['default'].join(p, clue)); return itdoes ? p : testDir(parts.slice(0, -1)); } return testDir(splitPath(currentFullPath)); }; }); -var findParentDir_1 = findParentDir.sync; - -// Returns a wrapper function that returns a wrapped callback -// The wrapper function should do some stuff, and return a -// presumably different callback function. -// This makes sure that own properties are retained, so that -// decorations and such are not lost along the way. -var wrappy_1 = wrappy; - -function wrappy(fn, cb) { - if (fn && cb) return wrappy(fn)(cb); - if (typeof fn !== 'function') throw new TypeError('need wrapper function'); - Object.keys(fn).forEach(function (k) { - wrapper[k] = fn[k]; - }); - return wrapper; - - function wrapper() { - var args = new Array(arguments.length); - - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i]; - } - - var ret = fn.apply(this, args); - var cb = args[args.length - 1]; - - if (typeof ret === 'function' && ret !== cb) { - Object.keys(cb).forEach(function (k) { - ret[k] = cb[k]; - }); - } - - return ret; - } -} - -var once_1 = wrappy_1(once); -var strict = wrappy_1(onceStrict); -once.proto = once(function () { - Object.defineProperty(Function.prototype, 'once', { - value: function () { - return once(this); - }, - configurable: true - }); - Object.defineProperty(Function.prototype, 'onceStrict', { - value: function () { - return onceStrict(this); - }, - configurable: true - }); -}); - -function once(fn) { - var f = function () { - if (f.called) return f.value; - f.called = true; - return f.value = fn.apply(this, arguments); - }; - - f.called = false; - return f; -} - -function onceStrict(fn) { - var f = function () { - if (f.called) throw new Error(f.onceError); - f.called = true; - return f.value = fn.apply(this, arguments); - }; - - var name = fn.name || 'Function wrapped with `once`'; - f.onceError = name + " shouldn't be called more than once"; - f.called = false; - return f; -} -once_1.strict = strict; - -var noop = function () {}; - -var isRequest = function (stream) { - return stream.setHeader && typeof stream.abort === 'function'; -}; - -var isChildProcess = function (stream) { - return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3; -}; - -var eos = function (stream, opts, callback) { - if (typeof opts === 'function') return eos(stream, null, opts); - if (!opts) opts = {}; - callback = once_1(callback || noop); - var ws = stream._writableState; - var rs = stream._readableState; - var readable = opts.readable || opts.readable !== false && stream.readable; - var writable = opts.writable || opts.writable !== false && stream.writable; - var cancelled = false; - - var onlegacyfinish = function () { - if (!stream.writable) onfinish(); - }; - - var onfinish = function () { - writable = false; - if (!readable) callback.call(stream); - }; - - var onend = function () { - readable = false; - if (!writable) callback.call(stream); - }; - - var onexit = function (exitCode) { - callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null); - }; - - var onerror = function (err) { - callback.call(stream, err); - }; - - var onclose = function () { - process.nextTick(onclosenexttick); - }; - - var onclosenexttick = function () { - if (cancelled) return; - if (readable && !(rs && rs.ended && !rs.destroyed)) return callback.call(stream, new Error('premature close')); - if (writable && !(ws && ws.ended && !ws.destroyed)) return callback.call(stream, new Error('premature close')); - }; - - var onrequest = function () { - stream.req.on('finish', onfinish); - }; - - if (isRequest(stream)) { - stream.on('complete', onfinish); - stream.on('abort', onclose); - if (stream.req) onrequest();else stream.on('request', onrequest); - } else if (writable && !ws) { - // legacy streams - stream.on('end', onlegacyfinish); - stream.on('close', onlegacyfinish); - } - - if (isChildProcess(stream)) stream.on('exit', onexit); - stream.on('end', onend); - stream.on('finish', onfinish); - if (opts.error !== false) stream.on('error', onerror); - stream.on('close', onclose); - return function () { - cancelled = true; - stream.removeListener('complete', onfinish); - stream.removeListener('abort', onclose); - stream.removeListener('request', onrequest); - if (stream.req) stream.req.removeListener('finish', onfinish); - stream.removeListener('end', onlegacyfinish); - stream.removeListener('close', onlegacyfinish); - stream.removeListener('finish', onfinish); - stream.removeListener('exit', onexit); - stream.removeListener('end', onend); - stream.removeListener('error', onerror); - stream.removeListener('close', onclose); - }; -}; - -var endOfStream = eos; - -var noop$1 = function () {}; - -var ancient = /^v?\.0/.test(process.version); - -var isFn = function (fn) { - return typeof fn === 'function'; -}; - -var isFS = function (stream) { - if (!ancient) return false; // newer node version do not need to care about fs is a special way - - if (!fs) return false; // browser - - return (stream instanceof (fs.ReadStream || noop$1) || stream instanceof (fs.WriteStream || noop$1)) && isFn(stream.close); -}; - -var isRequest$1 = function (stream) { - return stream.setHeader && isFn(stream.abort); -}; - -var destroyer = function (stream, reading, writing, callback) { - callback = once_1(callback); - var closed = false; - stream.on('close', function () { - closed = true; - }); - endOfStream(stream, { - readable: reading, - writable: writing - }, function (err) { - if (err) return callback(err); - closed = true; - callback(); - }); - var destroyed = false; - return function (err) { - if (closed) return; - if (destroyed) return; - destroyed = true; - if (isFS(stream)) return stream.close(noop$1); // use close for fs streams to avoid fd leaks - - if (isRequest$1(stream)) return stream.abort(); // request.destroy just do .end - .abort is what we want - - if (isFn(stream.destroy)) return stream.destroy(); - callback(err || new Error('stream was destroyed')); - }; -}; - -var call = function (fn) { - fn(); -}; - -var pipe = function (from, to) { - return from.pipe(to); -}; - -var pump = function () { - var streams = Array.prototype.slice.call(arguments); - var callback = isFn(streams[streams.length - 1] || noop$1) && streams.pop() || noop$1; - if (Array.isArray(streams[0])) streams = streams[0]; - if (streams.length < 2) throw new Error('pump requires two streams per minimum'); - var error; - var destroys = streams.map(function (stream, i) { - var reading = i < streams.length - 1; - var writing = i > 0; - return destroyer(stream, reading, writing, function (err) { - if (!error) error = err; - if (err) destroys.forEach(call); - if (reading) return; - destroys.forEach(call); - callback(error); - }); - }); - return streams.reduce(pipe); -}; - -var pump_1 = pump; const { - PassThrough: PassThroughStream -} = stream; - -var bufferStream = options => { - options = Object.assign({}, options); - const { - array - } = options; - let { - encoding - } = options; - const isBuffer = encoding === 'buffer'; - let objectMode = false; + stdin +} = process; - if (array) { - objectMode = !(encoding || isBuffer); - } else { - encoding = encoding || 'utf8'; - } +var getStdin = async () => { + let result = ''; - if (isBuffer) { - encoding = null; + if (stdin.isTTY) { + return result; } - const stream = new PassThroughStream({ - objectMode - }); + stdin.setEncoding('utf8'); - if (encoding) { - stream.setEncoding(encoding); + for await (const chunk of stdin) { + result += chunk; } - let length = 0; - const chunks = []; - stream.on('data', chunk => { - chunks.push(chunk); - - if (objectMode) { - length = chunks.length; - } else { - length += chunk.length; - } - }); - - stream.getBufferedValue = () => { - if (array) { - return chunks; - } - - return isBuffer ? Buffer.concat(chunks, length) : chunks.join(''); - }; - - stream.getBufferedLength = () => length; - - return stream; + return result; }; -class MaxBufferError extends Error { - constructor() { - super('maxBuffer exceeded'); - this.name = 'MaxBufferError'; - } - -} +var buffer = async () => { + const result = []; + let length = 0; -async function getStream(inputStream, options) { - if (!inputStream) { - return Promise.reject(new Error('Expected a stream')); + if (stdin.isTTY) { + return Buffer.concat([]); } - options = Object.assign({ - maxBuffer: Infinity - }, options); - const { - maxBuffer - } = options; - let stream; - await new Promise((resolve, reject) => { - const rejectPromise = error => { - if (error) { - // A null check - error.bufferedData = stream.getBufferedValue(); - } - - reject(error); - }; - - stream = pump_1(inputStream, bufferStream(options), error => { - if (error) { - rejectPromise(error); - return; - } - - resolve(); - }); - stream.on('data', () => { - if (stream.getBufferedLength() > maxBuffer) { - rejectPromise(new MaxBufferError()); - } - }); - }); - return stream.getBufferedValue(); -} - -var getStream_1 = getStream; // TODO: Remove this for the next major release - -var default_1 = getStream; - -var buffer = (stream, options) => getStream(stream, Object.assign({}, options, { - encoding: 'buffer' -})); - -var array = (stream, options) => getStream(stream, Object.assign({}, options, { - array: true -})); + for await (const chunk of stdin) { + result.push(chunk); + length += chunk.length; + } -var MaxBufferError_1 = MaxBufferError; -getStream_1.default = default_1; -getStream_1.buffer = buffer; -getStream_1.array = array; -getStream_1.MaxBufferError = MaxBufferError_1; + return Buffer.concat(result, length); +}; +getStdin.buffer = buffer; var vendors = [ { @@ -12380,25 +10402,18 @@ var vendors = [ } ]; -var vendors$1 = /*#__PURE__*/Object.freeze({ - __proto__: null, - 'default': vendors -}); - -var vendors$2 = getCjsExportFromNamespace(vendors$1); - var ciInfo = createCommonjsModule(function (module, exports) { var env = process.env; // Used for testing only Object.defineProperty(exports, '_vendors', { - value: vendors$2.map(function (v) { + value: vendors.map(function (v) { return v.constant; }) }); exports.name = null; exports.isPR = null; - vendors$2.forEach(function (vendor) { + vendors.forEach(function (vendor) { var envs = Array.isArray(vendor.env) ? vendor.env : [vendor.env]; var isCI = envs.every(function (obj) { return checkEnv(obj); @@ -12449,26 +10464,13 @@ var ciInfo = createCommonjsModule(function (module, exports) { }); } }); -var ciInfo_1 = ciInfo.name; -var ciInfo_2 = ciInfo.isPR; -var ciInfo_3 = ciInfo.isCI; var thirdParty = { cosmiconfig: dist$2.cosmiconfig, cosmiconfigSync: dist$2.cosmiconfigSync, findParentDir: findParentDir.sync, - getStream: getStream_1, + getStdin: getStdin, isCI: () => ciInfo.isCI }; -var thirdParty_1 = thirdParty.cosmiconfig; -var thirdParty_2 = thirdParty.cosmiconfigSync; -var thirdParty_3 = thirdParty.findParentDir; -var thirdParty_4 = thirdParty.getStream; -var thirdParty_5 = thirdParty.isCI; - -exports.cosmiconfig = thirdParty_1; -exports.cosmiconfigSync = thirdParty_2; -exports.default = thirdParty; -exports.findParentDir = thirdParty_3; -exports.getStream = thirdParty_4; -exports.isCI = thirdParty_5; + +module.exports = thirdParty;