diff --git a/dist/post_run/index.js b/dist/post_run/index.js index dfa07ba..12cf96e 100644 --- a/dist/post_run/index.js +++ b/dist/post_run/index.js @@ -97736,19 +97736,26 @@ function composeNode(ctx, token, props, onError) { case 'block-map': case 'block-seq': case 'flow-collection': - node = composeCollection.composeCollection(CN, ctx, token, props, onError); - if (anchor) - node.anchor = anchor.source.substring(1); + try { + node = composeCollection.composeCollection(CN, ctx, token, props, onError); + if (anchor) + node.anchor = anchor.source.substring(1); + } + catch (error) { + // Almost certainly here due to a stack overflow + const message = error instanceof Error ? error.message : String(error); + onError(token, 'RESOURCE_EXHAUSTION', message); + } break; default: { const message = token.type === 'error' ? token.message : `Unsupported token (type: ${token.type})`; onError(token, 'UNEXPECTED_TOKEN', message); - node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError); isSrcToken = false; } } + node ?? (node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError)); if (anchor && node.anchor === '') onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string'); if (atKey && @@ -104969,6 +104976,7 @@ function createStringifyContext(doc, options) { nullStr: 'null', simpleKeys: false, singleQuote: null, + trailingComma: false, trueStr: 'true', verifyAliasOrder: true }, doc.schema.toStringOptions, options); @@ -105190,12 +105198,22 @@ function stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) { if (comment) reqNewline = true; let str = stringify.stringify(item, itemCtx, () => (comment = null)); - if (i < items.length - 1) + reqNewline || (reqNewline = lines.length > linesAtValue || str.includes('\n')); + if (i < items.length - 1) { str += ','; + } + else if (ctx.options.trailingComma) { + if (ctx.options.lineWidth > 0) { + reqNewline || (reqNewline = lines.reduce((sum, line) => sum + line.length + 2, 2) + + (str.length + 2) > + ctx.options.lineWidth); + } + if (reqNewline) { + str += ','; + } + } if (comment) str += stringifyComment.lineComment(str, itemIndent, commentString(comment)); - if (!reqNewline && (lines.length > linesAtValue || str.includes('\n'))) - reqNewline = true; lines.push(str); linesAtValue = lines.length; } diff --git a/dist/run/index.js b/dist/run/index.js index c7e3c00..b0f7888 100644 --- a/dist/run/index.js +++ b/dist/run/index.js @@ -97736,19 +97736,26 @@ function composeNode(ctx, token, props, onError) { case 'block-map': case 'block-seq': case 'flow-collection': - node = composeCollection.composeCollection(CN, ctx, token, props, onError); - if (anchor) - node.anchor = anchor.source.substring(1); + try { + node = composeCollection.composeCollection(CN, ctx, token, props, onError); + if (anchor) + node.anchor = anchor.source.substring(1); + } + catch (error) { + // Almost certainly here due to a stack overflow + const message = error instanceof Error ? error.message : String(error); + onError(token, 'RESOURCE_EXHAUSTION', message); + } break; default: { const message = token.type === 'error' ? token.message : `Unsupported token (type: ${token.type})`; onError(token, 'UNEXPECTED_TOKEN', message); - node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError); isSrcToken = false; } } + node ?? (node = composeEmptyNode(ctx, token.offset, undefined, null, props, onError)); if (anchor && node.anchor === '') onError(anchor, 'BAD_ALIAS', 'Anchor cannot be an empty string'); if (atKey && @@ -104969,6 +104976,7 @@ function createStringifyContext(doc, options) { nullStr: 'null', simpleKeys: false, singleQuote: null, + trailingComma: false, trueStr: 'true', verifyAliasOrder: true }, doc.schema.toStringOptions, options); @@ -105190,12 +105198,22 @@ function stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) { if (comment) reqNewline = true; let str = stringify.stringify(item, itemCtx, () => (comment = null)); - if (i < items.length - 1) + reqNewline || (reqNewline = lines.length > linesAtValue || str.includes('\n')); + if (i < items.length - 1) { str += ','; + } + else if (ctx.options.trailingComma) { + if (ctx.options.lineWidth > 0) { + reqNewline || (reqNewline = lines.reduce((sum, line) => sum + line.length + 2, 2) + + (str.length + 2) > + ctx.options.lineWidth); + } + if (reqNewline) { + str += ','; + } + } if (comment) str += stringifyComment.lineComment(str, itemIndent, commentString(comment)); - if (!reqNewline && (lines.length > linesAtValue || str.includes('\n'))) - reqNewline = true; lines.push(str); linesAtValue = lines.length; }