- 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);