mirror of
				https://github.com/Theodor-Springmann-Stiftung/kgpz_web.git
				synced 2025-10-31 09:55:30 +00:00 
			
		
		
		
	Fixed some build options for vite
This commit is contained in:
		
							
								
								
									
										34
									
								
								node_modules/yaml/dist/stringify/foldFlowLines.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								node_modules/yaml/dist/stringify/foldFlowLines.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| export declare const FOLD_FLOW = "flow"; | ||||
| export declare const FOLD_BLOCK = "block"; | ||||
| export declare const FOLD_QUOTED = "quoted"; | ||||
| /** | ||||
|  * `'block'` prevents more-indented lines from being folded; | ||||
|  * `'quoted'` allows for `\` escapes, including escaped newlines | ||||
|  */ | ||||
| export type FoldMode = 'flow' | 'block' | 'quoted'; | ||||
| export interface FoldOptions { | ||||
|     /** | ||||
|      * Accounts for leading contents on the first line, defaulting to | ||||
|      * `indent.length` | ||||
|      */ | ||||
|     indentAtStart?: number; | ||||
|     /** Default: `80` */ | ||||
|     lineWidth?: number; | ||||
|     /** | ||||
|      * Allow highly indented lines to stretch the line width or indent content | ||||
|      * from the start. | ||||
|      * | ||||
|      * Default: `20` | ||||
|      */ | ||||
|     minContentWidth?: number; | ||||
|     /** Called once if the text is folded */ | ||||
|     onFold?: () => void; | ||||
|     /** Called once if any line of text exceeds lineWidth characters */ | ||||
|     onOverflow?: () => void; | ||||
| } | ||||
| /** | ||||
|  * 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`. | ||||
|  */ | ||||
| export declare function foldFlowLines(text: string, indent: string, mode?: FoldMode, { indentAtStart, lineWidth, minContentWidth, onFold, onOverflow }?: FoldOptions): string; | ||||
							
								
								
									
										151
									
								
								node_modules/yaml/dist/stringify/foldFlowLines.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								node_modules/yaml/dist/stringify/foldFlowLines.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,151 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| const FOLD_FLOW = 'flow'; | ||||
| const FOLD_BLOCK = 'block'; | ||||
| const FOLD_QUOTED = 'quoted'; | ||||
| /** | ||||
|  * 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`. | ||||
|  */ | ||||
| function foldFlowLines(text, indent, mode = 'flow', { indentAtStart, lineWidth = 80, minContentWidth = 20, onFold, onOverflow } = {}) { | ||||
|     if (!lineWidth || lineWidth < 0) | ||||
|         return text; | ||||
|     if (lineWidth < minContentWidth) | ||||
|         minContentWidth = 0; | ||||
|     const endStep = Math.max(1 + minContentWidth, 1 + lineWidth - indent.length); | ||||
|     if (text.length <= endStep) | ||||
|         return text; | ||||
|     const folds = []; | ||||
|     const escapedFolds = {}; | ||||
|     let end = lineWidth - indent.length; | ||||
|     if (typeof indentAtStart === 'number') { | ||||
|         if (indentAtStart > lineWidth - Math.max(2, minContentWidth)) | ||||
|             folds.push(0); | ||||
|         else | ||||
|             end = lineWidth - indentAtStart; | ||||
|     } | ||||
|     let split = undefined; | ||||
|     let prev = undefined; | ||||
|     let overflow = false; | ||||
|     let i = -1; | ||||
|     let escStart = -1; | ||||
|     let escEnd = -1; | ||||
|     if (mode === FOLD_BLOCK) { | ||||
|         i = consumeMoreIndentedLines(text, i, indent.length); | ||||
|         if (i !== -1) | ||||
|             end = i + endStep; | ||||
|     } | ||||
|     for (let ch; (ch = text[(i += 1)]);) { | ||||
|         if (mode === FOLD_QUOTED && ch === '\\') { | ||||
|             escStart = i; | ||||
|             switch (text[i + 1]) { | ||||
|                 case 'x': | ||||
|                     i += 3; | ||||
|                     break; | ||||
|                 case 'u': | ||||
|                     i += 5; | ||||
|                     break; | ||||
|                 case 'U': | ||||
|                     i += 9; | ||||
|                     break; | ||||
|                 default: | ||||
|                     i += 1; | ||||
|             } | ||||
|             escEnd = i; | ||||
|         } | ||||
|         if (ch === '\n') { | ||||
|             if (mode === FOLD_BLOCK) | ||||
|                 i = consumeMoreIndentedLines(text, i, indent.length); | ||||
|             end = i + indent.length + 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; | ||||
|                     } | ||||
|                     // Account for newline escape, but don't break preceding escape | ||||
|                     const j = i > escEnd + 1 ? i - 2 : escStart - 1; | ||||
|                     // Bail out if lineWidth & minContentWidth are shorter than an escape string | ||||
|                     if (escapedFolds[j]) | ||||
|                         return text; | ||||
|                     folds.push(j); | ||||
|                     escapedFolds[j] = true; | ||||
|                     end = j + endStep; | ||||
|                     split = undefined; | ||||
|                 } | ||||
|                 else { | ||||
|                     overflow = true; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         prev = ch; | ||||
|     } | ||||
|     if (overflow && onOverflow) | ||||
|         onOverflow(); | ||||
|     if (folds.length === 0) | ||||
|         return text; | ||||
|     if (onFold) | ||||
|         onFold(); | ||||
|     let res = text.slice(0, folds[0]); | ||||
|     for (let i = 0; i < folds.length; ++i) { | ||||
|         const fold = folds[i]; | ||||
|         const end = folds[i + 1] || text.length; | ||||
|         if (fold === 0) | ||||
|             res = `\n${indent}${text.slice(0, end)}`; | ||||
|         else { | ||||
|             if (mode === FOLD_QUOTED && escapedFolds[fold]) | ||||
|                 res += `${text[fold]}\\`; | ||||
|             res += `\n${indent}${text.slice(fold + 1, end)}`; | ||||
|         } | ||||
|     } | ||||
|     return res; | ||||
| } | ||||
| /** | ||||
|  * Presumes `i + 1` is at the start of a line | ||||
|  * @returns index of last newline in more-indented block | ||||
|  */ | ||||
| function consumeMoreIndentedLines(text, i, indent) { | ||||
|     let end = i; | ||||
|     let start = i + 1; | ||||
|     let ch = text[start]; | ||||
|     while (ch === ' ' || ch === '\t') { | ||||
|         if (i < start + indent) { | ||||
|             ch = text[++i]; | ||||
|         } | ||||
|         else { | ||||
|             do { | ||||
|                 ch = text[++i]; | ||||
|             } while (ch && ch !== '\n'); | ||||
|             end = i; | ||||
|             start = i + 1; | ||||
|             ch = text[start]; | ||||
|         } | ||||
|     } | ||||
|     return end; | ||||
| } | ||||
|  | ||||
| exports.FOLD_BLOCK = FOLD_BLOCK; | ||||
| exports.FOLD_FLOW = FOLD_FLOW; | ||||
| exports.FOLD_QUOTED = FOLD_QUOTED; | ||||
| exports.foldFlowLines = foldFlowLines; | ||||
							
								
								
									
										21
									
								
								node_modules/yaml/dist/stringify/stringify.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								node_modules/yaml/dist/stringify/stringify.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| import type { Document } from '../doc/Document.js'; | ||||
| import type { Alias } from '../nodes/Alias.js'; | ||||
| import type { ToStringOptions } from '../options.js'; | ||||
| export type StringifyContext = { | ||||
|     actualString?: boolean; | ||||
|     allNullValues?: boolean; | ||||
|     anchors: Set<string>; | ||||
|     doc: Document; | ||||
|     forceBlockIndent?: boolean; | ||||
|     implicitKey?: boolean; | ||||
|     indent: string; | ||||
|     indentStep: string; | ||||
|     indentAtStart?: number; | ||||
|     inFlow: boolean | null; | ||||
|     inStringifyKey?: boolean; | ||||
|     flowCollectionPadding: string; | ||||
|     options: Readonly<Required<Omit<ToStringOptions, 'collectionStyle' | 'indent'>>>; | ||||
|     resolvedAliases?: Set<Alias>; | ||||
| }; | ||||
| export declare function createStringifyContext(doc: Document, options: ToStringOptions): StringifyContext; | ||||
| export declare function stringify(item: unknown, ctx: StringifyContext, onComment?: () => void, onChompKeep?: () => void): string; | ||||
							
								
								
									
										132
									
								
								node_modules/yaml/dist/stringify/stringify.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										132
									
								
								node_modules/yaml/dist/stringify/stringify.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,132 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| var anchors = require('../doc/anchors.js'); | ||||
| var identity = require('../nodes/identity.js'); | ||||
| var stringifyComment = require('./stringifyComment.js'); | ||||
| var stringifyString = require('./stringifyString.js'); | ||||
|  | ||||
| function createStringifyContext(doc, options) { | ||||
|     const opt = Object.assign({ | ||||
|         blockQuote: true, | ||||
|         commentString: stringifyComment.stringifyComment, | ||||
|         defaultKeyType: null, | ||||
|         defaultStringType: 'PLAIN', | ||||
|         directives: null, | ||||
|         doubleQuotedAsJSON: false, | ||||
|         doubleQuotedMinMultiLineLength: 40, | ||||
|         falseStr: 'false', | ||||
|         flowCollectionPadding: true, | ||||
|         indentSeq: true, | ||||
|         lineWidth: 80, | ||||
|         minContentWidth: 20, | ||||
|         nullStr: 'null', | ||||
|         simpleKeys: false, | ||||
|         singleQuote: null, | ||||
|         trueStr: 'true', | ||||
|         verifyAliasOrder: true | ||||
|     }, doc.schema.toStringOptions, options); | ||||
|     let inFlow; | ||||
|     switch (opt.collectionStyle) { | ||||
|         case 'block': | ||||
|             inFlow = false; | ||||
|             break; | ||||
|         case 'flow': | ||||
|             inFlow = true; | ||||
|             break; | ||||
|         default: | ||||
|             inFlow = null; | ||||
|     } | ||||
|     return { | ||||
|         anchors: new Set(), | ||||
|         doc, | ||||
|         flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '', | ||||
|         indent: '', | ||||
|         indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : '  ', | ||||
|         inFlow, | ||||
|         options: opt | ||||
|     }; | ||||
| } | ||||
| function getTagObject(tags, item) { | ||||
|     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]; | ||||
|     } | ||||
|     let tagObj = undefined; | ||||
|     let obj; | ||||
|     if (identity.isScalar(item)) { | ||||
|         obj = item.value; | ||||
|         let match = tags.filter(t => t.identify?.(obj)); | ||||
|         if (match.length > 1) { | ||||
|             const testMatch = match.filter(t => t.test); | ||||
|             if (testMatch.length > 0) | ||||
|                 match = testMatch; | ||||
|         } | ||||
|         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); | ||||
|     } | ||||
|     if (!tagObj) { | ||||
|         const name = obj?.constructor?.name ?? typeof obj; | ||||
|         throw new Error(`Tag not resolved for ${name} value`); | ||||
|     } | ||||
|     return tagObj; | ||||
| } | ||||
| // needs to be called before value stringifier to allow for circular anchor refs | ||||
| function stringifyProps(node, tagObj, { anchors: anchors$1, doc }) { | ||||
|     if (!doc.directives) | ||||
|         return ''; | ||||
|     const props = []; | ||||
|     const anchor = (identity.isScalar(node) || identity.isCollection(node)) && node.anchor; | ||||
|     if (anchor && anchors.anchorIsValid(anchor)) { | ||||
|         anchors$1.add(anchor); | ||||
|         props.push(`&${anchor}`); | ||||
|     } | ||||
|     const tag = node.tag ? node.tag : tagObj.default ? null : tagObj.tag; | ||||
|     if (tag) | ||||
|         props.push(doc.directives.tagString(tag)); | ||||
|     return props.join(' '); | ||||
| } | ||||
| function stringify(item, ctx, onComment, onChompKeep) { | ||||
|     if (identity.isPair(item)) | ||||
|         return item.toString(ctx, onComment, onChompKeep); | ||||
|     if (identity.isAlias(item)) { | ||||
|         if (ctx.doc.directives) | ||||
|             return item.toString(ctx); | ||||
|         if (ctx.resolvedAliases?.has(item)) { | ||||
|             throw new TypeError(`Cannot stringify circular structure without alias nodes`); | ||||
|         } | ||||
|         else { | ||||
|             if (ctx.resolvedAliases) | ||||
|                 ctx.resolvedAliases.add(item); | ||||
|             else | ||||
|                 ctx.resolvedAliases = new Set([item]); | ||||
|             item = item.resolve(ctx.doc); | ||||
|         } | ||||
|     } | ||||
|     let tagObj = undefined; | ||||
|     const node = identity.isNode(item) | ||||
|         ? item | ||||
|         : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) }); | ||||
|     if (!tagObj) | ||||
|         tagObj = getTagObject(ctx.doc.schema.tags, node); | ||||
|     const props = stringifyProps(node, tagObj, ctx); | ||||
|     if (props.length > 0) | ||||
|         ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1; | ||||
|     const str = typeof tagObj.stringify === 'function' | ||||
|         ? tagObj.stringify(node, ctx, onComment, onChompKeep) | ||||
|         : identity.isScalar(node) | ||||
|             ? stringifyString.stringifyString(node, ctx, onComment, onChompKeep) | ||||
|             : node.toString(ctx, onComment, onChompKeep); | ||||
|     if (!props) | ||||
|         return str; | ||||
|     return identity.isScalar(node) || str[0] === '{' || str[0] === '[' | ||||
|         ? `${props} ${str}` | ||||
|         : `${props}\n${ctx.indent}${str}`; | ||||
| } | ||||
|  | ||||
| exports.createStringifyContext = createStringifyContext; | ||||
| exports.stringify = stringify; | ||||
							
								
								
									
										17
									
								
								node_modules/yaml/dist/stringify/stringifyCollection.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								node_modules/yaml/dist/stringify/stringifyCollection.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| import { Collection } from '../nodes/Collection.js'; | ||||
| import { StringifyContext } from './stringify.js'; | ||||
| interface StringifyCollectionOptions { | ||||
|     blockItemPrefix: string; | ||||
|     flowChars: { | ||||
|         start: '{'; | ||||
|         end: '}'; | ||||
|     } | { | ||||
|         start: '['; | ||||
|         end: ']'; | ||||
|     }; | ||||
|     itemIndent: string; | ||||
|     onChompKeep?: () => void; | ||||
|     onComment?: () => void; | ||||
| } | ||||
| export declare function stringifyCollection(collection: Readonly<Collection>, ctx: StringifyContext, options: StringifyCollectionOptions): string; | ||||
| export {}; | ||||
							
								
								
									
										145
									
								
								node_modules/yaml/dist/stringify/stringifyCollection.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								node_modules/yaml/dist/stringify/stringifyCollection.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,145 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| var identity = require('../nodes/identity.js'); | ||||
| var stringify = require('./stringify.js'); | ||||
| var stringifyComment = require('./stringifyComment.js'); | ||||
|  | ||||
| function stringifyCollection(collection, ctx, options) { | ||||
|     const flow = ctx.inFlow ?? collection.flow; | ||||
|     const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection; | ||||
|     return stringify(collection, ctx, options); | ||||
| } | ||||
| function stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) { | ||||
|     const { indent, options: { commentString } } = ctx; | ||||
|     const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null }); | ||||
|     let chompKeep = false; // flag for the preceding node's status | ||||
|     const lines = []; | ||||
|     for (let i = 0; i < items.length; ++i) { | ||||
|         const item = items[i]; | ||||
|         let comment = null; | ||||
|         if (identity.isNode(item)) { | ||||
|             if (!chompKeep && item.spaceBefore) | ||||
|                 lines.push(''); | ||||
|             addCommentBefore(ctx, lines, item.commentBefore, chompKeep); | ||||
|             if (item.comment) | ||||
|                 comment = item.comment; | ||||
|         } | ||||
|         else if (identity.isPair(item)) { | ||||
|             const ik = identity.isNode(item.key) ? item.key : null; | ||||
|             if (ik) { | ||||
|                 if (!chompKeep && ik.spaceBefore) | ||||
|                     lines.push(''); | ||||
|                 addCommentBefore(ctx, lines, ik.commentBefore, chompKeep); | ||||
|             } | ||||
|         } | ||||
|         chompKeep = false; | ||||
|         let str = stringify.stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true)); | ||||
|         if (comment) | ||||
|             str += stringifyComment.lineComment(str, itemIndent, commentString(comment)); | ||||
|         if (chompKeep && comment) | ||||
|             chompKeep = false; | ||||
|         lines.push(blockItemPrefix + str); | ||||
|     } | ||||
|     let str; | ||||
|     if (lines.length === 0) { | ||||
|         str = flowChars.start + flowChars.end; | ||||
|     } | ||||
|     else { | ||||
|         str = lines[0]; | ||||
|         for (let i = 1; i < lines.length; ++i) { | ||||
|             const line = lines[i]; | ||||
|             str += line ? `\n${indent}${line}` : '\n'; | ||||
|         } | ||||
|     } | ||||
|     if (comment) { | ||||
|         str += '\n' + stringifyComment.indentComment(commentString(comment), indent); | ||||
|         if (onComment) | ||||
|             onComment(); | ||||
|     } | ||||
|     else if (chompKeep && onChompKeep) | ||||
|         onChompKeep(); | ||||
|     return str; | ||||
| } | ||||
| function stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) { | ||||
|     const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx; | ||||
|     itemIndent += indentStep; | ||||
|     const itemCtx = Object.assign({}, ctx, { | ||||
|         indent: itemIndent, | ||||
|         inFlow: true, | ||||
|         type: null | ||||
|     }); | ||||
|     let reqNewline = false; | ||||
|     let linesAtValue = 0; | ||||
|     const lines = []; | ||||
|     for (let i = 0; i < items.length; ++i) { | ||||
|         const item = items[i]; | ||||
|         let comment = null; | ||||
|         if (identity.isNode(item)) { | ||||
|             if (item.spaceBefore) | ||||
|                 lines.push(''); | ||||
|             addCommentBefore(ctx, lines, item.commentBefore, false); | ||||
|             if (item.comment) | ||||
|                 comment = item.comment; | ||||
|         } | ||||
|         else if (identity.isPair(item)) { | ||||
|             const ik = identity.isNode(item.key) ? item.key : null; | ||||
|             if (ik) { | ||||
|                 if (ik.spaceBefore) | ||||
|                     lines.push(''); | ||||
|                 addCommentBefore(ctx, lines, ik.commentBefore, false); | ||||
|                 if (ik.comment) | ||||
|                     reqNewline = true; | ||||
|             } | ||||
|             const iv = identity.isNode(item.value) ? item.value : null; | ||||
|             if (iv) { | ||||
|                 if (iv.comment) | ||||
|                     comment = iv.comment; | ||||
|                 if (iv.commentBefore) | ||||
|                     reqNewline = true; | ||||
|             } | ||||
|             else if (item.value == null && ik?.comment) { | ||||
|                 comment = ik.comment; | ||||
|             } | ||||
|         } | ||||
|         if (comment) | ||||
|             reqNewline = true; | ||||
|         let str = stringify.stringify(item, itemCtx, () => (comment = null)); | ||||
|         if (i < items.length - 1) | ||||
|             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; | ||||
|     } | ||||
|     const { start, end } = flowChars; | ||||
|     if (lines.length === 0) { | ||||
|         return start + end; | ||||
|     } | ||||
|     else { | ||||
|         if (!reqNewline) { | ||||
|             const len = lines.reduce((sum, line) => sum + line.length + 2, 2); | ||||
|             reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth; | ||||
|         } | ||||
|         if (reqNewline) { | ||||
|             let str = start; | ||||
|             for (const line of lines) | ||||
|                 str += line ? `\n${indentStep}${indent}${line}` : '\n'; | ||||
|             return `${str}\n${indent}${end}`; | ||||
|         } | ||||
|         else { | ||||
|             return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| function addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) { | ||||
|     if (comment && chompKeep) | ||||
|         comment = comment.replace(/^\n+/, ''); | ||||
|     if (comment) { | ||||
|         const ic = stringifyComment.indentComment(commentString(comment), indent); | ||||
|         lines.push(ic.trimStart()); // Avoid double indent on first line | ||||
|     } | ||||
| } | ||||
|  | ||||
| exports.stringifyCollection = stringifyCollection; | ||||
							
								
								
									
										10
									
								
								node_modules/yaml/dist/stringify/stringifyComment.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								node_modules/yaml/dist/stringify/stringifyComment.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| /** | ||||
|  * Stringifies a comment. | ||||
|  * | ||||
|  * Empty comment lines are left empty, | ||||
|  * lines consisting of a single space are replaced by `#`, | ||||
|  * and all other lines are prefixed with a `#`. | ||||
|  */ | ||||
| export declare const stringifyComment: (str: string) => string; | ||||
| export declare function indentComment(comment: string, indent: string): string; | ||||
| export declare const lineComment: (str: string, indent: string, comment: string) => string; | ||||
							
								
								
									
										24
									
								
								node_modules/yaml/dist/stringify/stringifyComment.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								node_modules/yaml/dist/stringify/stringifyComment.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| /** | ||||
|  * Stringifies a comment. | ||||
|  * | ||||
|  * Empty comment lines are left empty, | ||||
|  * lines consisting of a single space are replaced by `#`, | ||||
|  * and all other lines are prefixed with a `#`. | ||||
|  */ | ||||
| const stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#'); | ||||
| function indentComment(comment, indent) { | ||||
|     if (/^\n+$/.test(comment)) | ||||
|         return comment.substring(1); | ||||
|     return indent ? comment.replace(/^(?! *$)/gm, indent) : comment; | ||||
| } | ||||
| const lineComment = (str, indent, comment) => str.endsWith('\n') | ||||
|     ? indentComment(comment, indent) | ||||
|     : comment.includes('\n') | ||||
|         ? '\n' + indentComment(comment, indent) | ||||
|         : (str.endsWith(' ') ? '' : ' ') + comment; | ||||
|  | ||||
| exports.indentComment = indentComment; | ||||
| exports.lineComment = lineComment; | ||||
| exports.stringifyComment = stringifyComment; | ||||
							
								
								
									
										4
									
								
								node_modules/yaml/dist/stringify/stringifyDocument.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								node_modules/yaml/dist/stringify/stringifyDocument.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| import type { Document } from '../doc/Document.js'; | ||||
| import type { Node } from '../nodes/Node.js'; | ||||
| import type { ToStringOptions } from '../options.js'; | ||||
| export declare function stringifyDocument(doc: Readonly<Document<Node, boolean>>, options: ToStringOptions): string; | ||||
							
								
								
									
										87
									
								
								node_modules/yaml/dist/stringify/stringifyDocument.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								node_modules/yaml/dist/stringify/stringifyDocument.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,87 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| var identity = require('../nodes/identity.js'); | ||||
| var stringify = require('./stringify.js'); | ||||
| var stringifyComment = require('./stringifyComment.js'); | ||||
|  | ||||
| function stringifyDocument(doc, options) { | ||||
|     const lines = []; | ||||
|     let hasDirectives = options.directives === true; | ||||
|     if (options.directives !== false && doc.directives) { | ||||
|         const dir = doc.directives.toString(doc); | ||||
|         if (dir) { | ||||
|             lines.push(dir); | ||||
|             hasDirectives = true; | ||||
|         } | ||||
|         else if (doc.directives.docStart) | ||||
|             hasDirectives = true; | ||||
|     } | ||||
|     if (hasDirectives) | ||||
|         lines.push('---'); | ||||
|     const ctx = stringify.createStringifyContext(doc, options); | ||||
|     const { commentString } = ctx.options; | ||||
|     if (doc.commentBefore) { | ||||
|         if (lines.length !== 1) | ||||
|             lines.unshift(''); | ||||
|         const cs = commentString(doc.commentBefore); | ||||
|         lines.unshift(stringifyComment.indentComment(cs, '')); | ||||
|     } | ||||
|     let chompKeep = false; | ||||
|     let contentComment = null; | ||||
|     if (doc.contents) { | ||||
|         if (identity.isNode(doc.contents)) { | ||||
|             if (doc.contents.spaceBefore && hasDirectives) | ||||
|                 lines.push(''); | ||||
|             if (doc.contents.commentBefore) { | ||||
|                 const cs = commentString(doc.contents.commentBefore); | ||||
|                 lines.push(stringifyComment.indentComment(cs, '')); | ||||
|             } | ||||
|             // top-level block scalars need to be indented if followed by a comment | ||||
|             ctx.forceBlockIndent = !!doc.comment; | ||||
|             contentComment = doc.contents.comment; | ||||
|         } | ||||
|         const onChompKeep = contentComment ? undefined : () => (chompKeep = true); | ||||
|         let body = stringify.stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep); | ||||
|         if (contentComment) | ||||
|             body += stringifyComment.lineComment(body, '', commentString(contentComment)); | ||||
|         if ((body[0] === '|' || body[0] === '>') && | ||||
|             lines[lines.length - 1] === '---') { | ||||
|             // Top-level block scalars with a preceding doc marker ought to use the | ||||
|             // same line for their header. | ||||
|             lines[lines.length - 1] = `--- ${body}`; | ||||
|         } | ||||
|         else | ||||
|             lines.push(body); | ||||
|     } | ||||
|     else { | ||||
|         lines.push(stringify.stringify(doc.contents, ctx)); | ||||
|     } | ||||
|     if (doc.directives?.docEnd) { | ||||
|         if (doc.comment) { | ||||
|             const cs = commentString(doc.comment); | ||||
|             if (cs.includes('\n')) { | ||||
|                 lines.push('...'); | ||||
|                 lines.push(stringifyComment.indentComment(cs, '')); | ||||
|             } | ||||
|             else { | ||||
|                 lines.push(`... ${cs}`); | ||||
|             } | ||||
|         } | ||||
|         else { | ||||
|             lines.push('...'); | ||||
|         } | ||||
|     } | ||||
|     else { | ||||
|         let dc = doc.comment; | ||||
|         if (dc && chompKeep) | ||||
|             dc = dc.replace(/^\n+/, ''); | ||||
|         if (dc) { | ||||
|             if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '') | ||||
|                 lines.push(''); | ||||
|             lines.push(stringifyComment.indentComment(commentString(dc), '')); | ||||
|         } | ||||
|     } | ||||
|     return lines.join('\n') + '\n'; | ||||
| } | ||||
|  | ||||
| exports.stringifyDocument = stringifyDocument; | ||||
							
								
								
									
										2
									
								
								node_modules/yaml/dist/stringify/stringifyNumber.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								node_modules/yaml/dist/stringify/stringifyNumber.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| import type { Scalar } from '../nodes/Scalar.js'; | ||||
| export declare function stringifyNumber({ format, minFractionDigits, tag, value }: Scalar): string; | ||||
							
								
								
									
										26
									
								
								node_modules/yaml/dist/stringify/stringifyNumber.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								node_modules/yaml/dist/stringify/stringifyNumber.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| function stringifyNumber({ format, minFractionDigits, tag, value }) { | ||||
|     if (typeof value === 'bigint') | ||||
|         return String(value); | ||||
|     const num = typeof value === 'number' ? value : Number(value); | ||||
|     if (!isFinite(num)) | ||||
|         return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf'; | ||||
|     let n = JSON.stringify(value); | ||||
|     if (!format && | ||||
|         minFractionDigits && | ||||
|         (!tag || tag === 'tag:yaml.org,2002:float') && | ||||
|         /^\d/.test(n)) { | ||||
|         let i = n.indexOf('.'); | ||||
|         if (i < 0) { | ||||
|             i = n.length; | ||||
|             n += '.'; | ||||
|         } | ||||
|         let d = minFractionDigits - (n.length - i - 1); | ||||
|         while (d-- > 0) | ||||
|             n += '0'; | ||||
|     } | ||||
|     return n; | ||||
| } | ||||
|  | ||||
| exports.stringifyNumber = stringifyNumber; | ||||
							
								
								
									
										3
									
								
								node_modules/yaml/dist/stringify/stringifyPair.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								node_modules/yaml/dist/stringify/stringifyPair.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| import type { Pair } from '../nodes/Pair.js'; | ||||
| import { StringifyContext } from './stringify.js'; | ||||
| export declare function stringifyPair({ key, value }: Readonly<Pair>, ctx: StringifyContext, onComment?: () => void, onChompKeep?: () => void): string; | ||||
							
								
								
									
										152
									
								
								node_modules/yaml/dist/stringify/stringifyPair.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								node_modules/yaml/dist/stringify/stringifyPair.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,152 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| var identity = require('../nodes/identity.js'); | ||||
| var Scalar = require('../nodes/Scalar.js'); | ||||
| var stringify = require('./stringify.js'); | ||||
| var stringifyComment = require('./stringifyComment.js'); | ||||
|  | ||||
| function stringifyPair({ key, value }, ctx, onComment, onChompKeep) { | ||||
|     const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx; | ||||
|     let keyComment = (identity.isNode(key) && key.comment) || null; | ||||
|     if (simpleKeys) { | ||||
|         if (keyComment) { | ||||
|             throw new Error('With simple keys, key nodes cannot have comments'); | ||||
|         } | ||||
|         if (identity.isCollection(key) || (!identity.isNode(key) && typeof key === 'object')) { | ||||
|             const msg = 'With simple keys, collection cannot be used as a key value'; | ||||
|             throw new Error(msg); | ||||
|         } | ||||
|     } | ||||
|     let explicitKey = !simpleKeys && | ||||
|         (!key || | ||||
|             (keyComment && value == null && !ctx.inFlow) || | ||||
|             identity.isCollection(key) || | ||||
|             (identity.isScalar(key) | ||||
|                 ? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL | ||||
|                 : typeof key === 'object')); | ||||
|     ctx = Object.assign({}, ctx, { | ||||
|         allNullValues: false, | ||||
|         implicitKey: !explicitKey && (simpleKeys || !allNullValues), | ||||
|         indent: indent + indentStep | ||||
|     }); | ||||
|     let keyCommentDone = false; | ||||
|     let chompKeep = false; | ||||
|     let str = stringify.stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true)); | ||||
|     if (!explicitKey && !ctx.inFlow && str.length > 1024) { | ||||
|         if (simpleKeys) | ||||
|             throw new Error('With simple keys, single line scalar must not span more than 1024 characters'); | ||||
|         explicitKey = true; | ||||
|     } | ||||
|     if (ctx.inFlow) { | ||||
|         if (allNullValues || value == null) { | ||||
|             if (keyCommentDone && onComment) | ||||
|                 onComment(); | ||||
|             return str === '' ? '?' : explicitKey ? `? ${str}` : str; | ||||
|         } | ||||
|     } | ||||
|     else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) { | ||||
|         str = `? ${str}`; | ||||
|         if (keyComment && !keyCommentDone) { | ||||
|             str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment)); | ||||
|         } | ||||
|         else if (chompKeep && onChompKeep) | ||||
|             onChompKeep(); | ||||
|         return str; | ||||
|     } | ||||
|     if (keyCommentDone) | ||||
|         keyComment = null; | ||||
|     if (explicitKey) { | ||||
|         if (keyComment) | ||||
|             str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment)); | ||||
|         str = `? ${str}\n${indent}:`; | ||||
|     } | ||||
|     else { | ||||
|         str = `${str}:`; | ||||
|         if (keyComment) | ||||
|             str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment)); | ||||
|     } | ||||
|     let vsb, vcb, valueComment; | ||||
|     if (identity.isNode(value)) { | ||||
|         vsb = !!value.spaceBefore; | ||||
|         vcb = value.commentBefore; | ||||
|         valueComment = value.comment; | ||||
|     } | ||||
|     else { | ||||
|         vsb = false; | ||||
|         vcb = null; | ||||
|         valueComment = null; | ||||
|         if (value && typeof value === 'object') | ||||
|             value = doc.createNode(value); | ||||
|     } | ||||
|     ctx.implicitKey = false; | ||||
|     if (!explicitKey && !keyComment && identity.isScalar(value)) | ||||
|         ctx.indentAtStart = str.length + 1; | ||||
|     chompKeep = false; | ||||
|     if (!indentSeq && | ||||
|         indentStep.length >= 2 && | ||||
|         !ctx.inFlow && | ||||
|         !explicitKey && | ||||
|         identity.isSeq(value) && | ||||
|         !value.flow && | ||||
|         !value.tag && | ||||
|         !value.anchor) { | ||||
|         // If indentSeq === false, consider '- ' as part of indentation where possible | ||||
|         ctx.indent = ctx.indent.substring(2); | ||||
|     } | ||||
|     let valueCommentDone = false; | ||||
|     const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true)); | ||||
|     let ws = ' '; | ||||
|     if (keyComment || vsb || vcb) { | ||||
|         ws = vsb ? '\n' : ''; | ||||
|         if (vcb) { | ||||
|             const cs = commentString(vcb); | ||||
|             ws += `\n${stringifyComment.indentComment(cs, ctx.indent)}`; | ||||
|         } | ||||
|         if (valueStr === '' && !ctx.inFlow) { | ||||
|             if (ws === '\n') | ||||
|                 ws = '\n\n'; | ||||
|         } | ||||
|         else { | ||||
|             ws += `\n${ctx.indent}`; | ||||
|         } | ||||
|     } | ||||
|     else if (!explicitKey && identity.isCollection(value)) { | ||||
|         const vs0 = valueStr[0]; | ||||
|         const nl0 = valueStr.indexOf('\n'); | ||||
|         const hasNewline = nl0 !== -1; | ||||
|         const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0; | ||||
|         if (hasNewline || !flow) { | ||||
|             let hasPropsLine = false; | ||||
|             if (hasNewline && (vs0 === '&' || vs0 === '!')) { | ||||
|                 let sp0 = valueStr.indexOf(' '); | ||||
|                 if (vs0 === '&' && | ||||
|                     sp0 !== -1 && | ||||
|                     sp0 < nl0 && | ||||
|                     valueStr[sp0 + 1] === '!') { | ||||
|                     sp0 = valueStr.indexOf(' ', sp0 + 1); | ||||
|                 } | ||||
|                 if (sp0 === -1 || nl0 < sp0) | ||||
|                     hasPropsLine = true; | ||||
|             } | ||||
|             if (!hasPropsLine) | ||||
|                 ws = `\n${ctx.indent}`; | ||||
|         } | ||||
|     } | ||||
|     else if (valueStr === '' || valueStr[0] === '\n') { | ||||
|         ws = ''; | ||||
|     } | ||||
|     str += ws + valueStr; | ||||
|     if (ctx.inFlow) { | ||||
|         if (valueCommentDone && onComment) | ||||
|             onComment(); | ||||
|     } | ||||
|     else if (valueComment && !valueCommentDone) { | ||||
|         str += stringifyComment.lineComment(str, ctx.indent, commentString(valueComment)); | ||||
|     } | ||||
|     else if (chompKeep && onChompKeep) { | ||||
|         onChompKeep(); | ||||
|     } | ||||
|     return str; | ||||
| } | ||||
|  | ||||
| exports.stringifyPair = stringifyPair; | ||||
							
								
								
									
										9
									
								
								node_modules/yaml/dist/stringify/stringifyString.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								node_modules/yaml/dist/stringify/stringifyString.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| import { Scalar } from '../nodes/Scalar.js'; | ||||
| import type { StringifyContext } from './stringify.js'; | ||||
| interface StringifyScalar { | ||||
|     value: string; | ||||
|     comment?: string | null; | ||||
|     type?: string; | ||||
| } | ||||
| export declare function stringifyString(item: Scalar | StringifyScalar, ctx: StringifyContext, onComment?: () => void, onChompKeep?: () => void): string; | ||||
| export {}; | ||||
							
								
								
									
										339
									
								
								node_modules/yaml/dist/stringify/stringifyString.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										339
									
								
								node_modules/yaml/dist/stringify/stringifyString.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,339 @@ | ||||
| 'use strict'; | ||||
|  | ||||
| var Scalar = require('../nodes/Scalar.js'); | ||||
| var foldFlowLines = require('./foldFlowLines.js'); | ||||
|  | ||||
| const getFoldOptions = (ctx, isBlock) => ({ | ||||
|     indentAtStart: isBlock ? ctx.indent.length : ctx.indentAtStart, | ||||
|     lineWidth: ctx.options.lineWidth, | ||||
|     minContentWidth: ctx.options.minContentWidth | ||||
| }); | ||||
| // Also checks for lines starting with %, as parsing the output as YAML 1.1 will | ||||
| // presume that's starting a new document. | ||||
| const containsDocumentMarker = (str) => /^(%|---|\.\.\.)/m.test(str); | ||||
| function lineLengthOverLimit(str, lineWidth, indentLength) { | ||||
|     if (!lineWidth || lineWidth < 0) | ||||
|         return false; | ||||
|     const limit = lineWidth - indentLength; | ||||
|     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; | ||||
|         } | ||||
|     } | ||||
|     return true; | ||||
| } | ||||
| function doubleQuotedString(value, ctx) { | ||||
|     const json = JSON.stringify(value); | ||||
|     if (ctx.options.doubleQuotedAsJSON) | ||||
|         return json; | ||||
|     const { implicitKey } = ctx; | ||||
|     const minMultiLineLength = ctx.options.doubleQuotedMinMultiLineLength; | ||||
|     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; | ||||
|                             case '0007': | ||||
|                                 str += '\\a'; | ||||
|                                 break; | ||||
|                             case '000b': | ||||
|                                 str += '\\v'; | ||||
|                                 break; | ||||
|                             case '001b': | ||||
|                                 str += '\\e'; | ||||
|                                 break; | ||||
|                             case '0085': | ||||
|                                 str += '\\N'; | ||||
|                                 break; | ||||
|                             case '00a0': | ||||
|                                 str += '\\_'; | ||||
|                                 break; | ||||
|                             case '2028': | ||||
|                                 str += '\\L'; | ||||
|                                 break; | ||||
|                             case '2029': | ||||
|                                 str += '\\P'; | ||||
|                                 break; | ||||
|                             default: | ||||
|                                 if (code.substr(0, 2) === '00') | ||||
|                                     str += '\\x' + code.substr(2); | ||||
|                                 else | ||||
|                                     str += json.substr(i, 6); | ||||
|                         } | ||||
|                         i += 5; | ||||
|                         start = i + 1; | ||||
|                     } | ||||
|                     break; | ||||
|                 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'; | ||||
|                         while (json[i + 2] === '\\' && | ||||
|                             json[i + 3] === 'n' && | ||||
|                             json[i + 4] !== '"') { | ||||
|                             str += '\n'; | ||||
|                             i += 2; | ||||
|                         } | ||||
|                         str += indent; | ||||
|                         // space after newline needs to be escaped to not be folded | ||||
|                         if (json[i + 2] === ' ') | ||||
|                             str += '\\'; | ||||
|                         i += 1; | ||||
|                         start = i + 1; | ||||
|                     } | ||||
|                     break; | ||||
|                 default: | ||||
|                     i += 1; | ||||
|             } | ||||
|     } | ||||
|     str = start ? str + json.slice(start) : json; | ||||
|     return implicitKey | ||||
|         ? str | ||||
|         : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_QUOTED, getFoldOptions(ctx, false)); | ||||
| } | ||||
| function singleQuotedString(value, ctx) { | ||||
|     if (ctx.options.singleQuote === false || | ||||
|         (ctx.implicitKey && value.includes('\n')) || | ||||
|         /[ \t]\n|\n[ \t]/.test(value) // single quoted string can't have leading or trailing whitespace around newline | ||||
|     ) | ||||
|         return doubleQuotedString(value, ctx); | ||||
|     const indent = ctx.indent || (containsDocumentMarker(value) ? '  ' : ''); | ||||
|     const res = "'" + value.replace(/'/g, "''").replace(/\n+/g, `$&\n${indent}`) + "'"; | ||||
|     return ctx.implicitKey | ||||
|         ? res | ||||
|         : foldFlowLines.foldFlowLines(res, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false)); | ||||
| } | ||||
| function quotedString(value, ctx) { | ||||
|     const { singleQuote } = ctx.options; | ||||
|     let qs; | ||||
|     if (singleQuote === false) | ||||
|         qs = doubleQuotedString; | ||||
|     else { | ||||
|         const hasDouble = value.includes('"'); | ||||
|         const hasSingle = value.includes("'"); | ||||
|         if (hasDouble && !hasSingle) | ||||
|             qs = singleQuotedString; | ||||
|         else if (hasSingle && !hasDouble) | ||||
|             qs = doubleQuotedString; | ||||
|         else | ||||
|             qs = singleQuote ? singleQuotedString : doubleQuotedString; | ||||
|     } | ||||
|     return qs(value, ctx); | ||||
| } | ||||
| // The negative lookbehind avoids a polynomial search, | ||||
| // but isn't supported yet on Safari: https://caniuse.com/js-regexp-lookbehind | ||||
| let blockEndNewlines; | ||||
| try { | ||||
|     blockEndNewlines = new RegExp('(^|(?<!\n))\n+(?!\n|$)', 'g'); | ||||
| } | ||||
| catch { | ||||
|     blockEndNewlines = /\n+(?!\n|$)/g; | ||||
| } | ||||
| function blockString({ comment, type, value }, ctx, onComment, onChompKeep) { | ||||
|     const { blockQuote, commentString, lineWidth } = ctx.options; | ||||
|     // 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 (!blockQuote || /\n[\t ]+$/.test(value) || /^\s*$/.test(value)) { | ||||
|         return quotedString(value, ctx); | ||||
|     } | ||||
|     const indent = ctx.indent || | ||||
|         (ctx.forceBlockIndent || containsDocumentMarker(value) ? '  ' : ''); | ||||
|     const literal = blockQuote === 'literal' | ||||
|         ? true | ||||
|         : blockQuote === 'folded' || type === Scalar.Scalar.BLOCK_FOLDED | ||||
|             ? false | ||||
|             : type === Scalar.Scalar.BLOCK_LITERAL | ||||
|                 ? true | ||||
|                 : !lineLengthOverLimit(value, lineWidth, indent.length); | ||||
|     if (!value) | ||||
|         return literal ? '|\n' : '>\n'; | ||||
|     // determine chomping from whitespace at value end | ||||
|     let chomp; | ||||
|     let endStart; | ||||
|     for (endStart = value.length; endStart > 0; --endStart) { | ||||
|         const ch = value[endStart - 1]; | ||||
|         if (ch !== '\n' && ch !== '\t' && ch !== ' ') | ||||
|             break; | ||||
|     } | ||||
|     let end = value.substring(endStart); | ||||
|     const endNlPos = end.indexOf('\n'); | ||||
|     if (endNlPos === -1) { | ||||
|         chomp = '-'; // strip | ||||
|     } | ||||
|     else if (value === end || endNlPos !== end.length - 1) { | ||||
|         chomp = '+'; // keep | ||||
|         if (onChompKeep) | ||||
|             onChompKeep(); | ||||
|     } | ||||
|     else { | ||||
|         chomp = ''; // clip | ||||
|     } | ||||
|     if (end) { | ||||
|         value = value.slice(0, -end.length); | ||||
|         if (end[end.length - 1] === '\n') | ||||
|             end = end.slice(0, -1); | ||||
|         end = end.replace(blockEndNewlines, `$&${indent}`); | ||||
|     } | ||||
|     // determine indent indicator from whitespace at value start | ||||
|     let startWithSpace = false; | ||||
|     let startEnd; | ||||
|     let startNlPos = -1; | ||||
|     for (startEnd = 0; startEnd < value.length; ++startEnd) { | ||||
|         const ch = value[startEnd]; | ||||
|         if (ch === ' ') | ||||
|             startWithSpace = true; | ||||
|         else if (ch === '\n') | ||||
|             startNlPos = startEnd; | ||||
|         else | ||||
|             break; | ||||
|     } | ||||
|     let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd); | ||||
|     if (start) { | ||||
|         value = value.substring(start.length); | ||||
|         start = start.replace(/\n+/g, `$&${indent}`); | ||||
|     } | ||||
|     const indentSize = indent ? '2' : '1'; // root is at -1 | ||||
|     // Leading | or > is added later | ||||
|     let header = (startWithSpace ? indentSize : '') + chomp; | ||||
|     if (comment) { | ||||
|         header += ' ' + commentString(comment.replace(/ ?[\r\n]+/g, ' ')); | ||||
|         if (onComment) | ||||
|             onComment(); | ||||
|     } | ||||
|     if (!literal) { | ||||
|         const foldedValue = value | ||||
|             .replace(/\n+/g, '\n$&') | ||||
|             .replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g, '$1$2') // more-indented lines aren't folded | ||||
|             //                ^ more-ind. ^ empty     ^ capture next empty lines only at end of indent | ||||
|             .replace(/\n+/g, `$&${indent}`); | ||||
|         let literalFallback = false; | ||||
|         const foldOptions = getFoldOptions(ctx, true); | ||||
|         if (blockQuote !== 'folded' && type !== Scalar.Scalar.BLOCK_FOLDED) { | ||||
|             foldOptions.onOverflow = () => { | ||||
|                 literalFallback = true; | ||||
|             }; | ||||
|         } | ||||
|         const body = foldFlowLines.foldFlowLines(`${start}${foldedValue}${end}`, indent, foldFlowLines.FOLD_BLOCK, foldOptions); | ||||
|         if (!literalFallback) | ||||
|             return `>${header}\n${indent}${body}`; | ||||
|     } | ||||
|     value = value.replace(/\n+/g, `$&${indent}`); | ||||
|     return `|${header}\n${indent}${start}${value}${end}`; | ||||
| } | ||||
| function plainString(item, ctx, onComment, onChompKeep) { | ||||
|     const { type, value } = item; | ||||
|     const { actualString, implicitKey, indent, indentStep, inFlow } = ctx; | ||||
|     if ((implicitKey && value.includes('\n')) || | ||||
|         (inFlow && /[[\]{},]/.test(value))) { | ||||
|         return quotedString(value, ctx); | ||||
|     } | ||||
|     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.includes('\n') | ||||
|             ? quotedString(value, ctx) | ||||
|             : blockString(item, ctx, onComment, onChompKeep); | ||||
|     } | ||||
|     if (!implicitKey && | ||||
|         !inFlow && | ||||
|         type !== Scalar.Scalar.PLAIN && | ||||
|         value.includes('\n')) { | ||||
|         // Where allowed & type not set explicitly, prefer block style for multiline strings | ||||
|         return blockString(item, ctx, onComment, onChompKeep); | ||||
|     } | ||||
|     if (containsDocumentMarker(value)) { | ||||
|         if (indent === '') { | ||||
|             ctx.forceBlockIndent = true; | ||||
|             return blockString(item, ctx, onComment, onChompKeep); | ||||
|         } | ||||
|         else if (implicitKey && indent === indentStep) { | ||||
|             return quotedString(value, ctx); | ||||
|         } | ||||
|     } | ||||
|     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 test = (tag) => tag.default && tag.tag !== 'tag:yaml.org,2002:str' && tag.test?.test(str); | ||||
|         const { compat, tags } = ctx.doc.schema; | ||||
|         if (tags.some(test) || compat?.some(test)) | ||||
|             return quotedString(value, ctx); | ||||
|     } | ||||
|     return implicitKey | ||||
|         ? str | ||||
|         : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx, false)); | ||||
| } | ||||
| function stringifyString(item, ctx, onComment, onChompKeep) { | ||||
|     const { implicitKey, inFlow } = ctx; | ||||
|     const ss = typeof item.value === 'string' | ||||
|         ? item | ||||
|         : Object.assign({}, item, { value: String(item.value) }); | ||||
|     let { type } = item; | ||||
|     if (type !== Scalar.Scalar.QUOTE_DOUBLE) { | ||||
|         // force double quotes on control characters & unpaired surrogates | ||||
|         if (/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(ss.value)) | ||||
|             type = Scalar.Scalar.QUOTE_DOUBLE; | ||||
|     } | ||||
|     const _stringify = (_type) => { | ||||
|         switch (_type) { | ||||
|             case Scalar.Scalar.BLOCK_FOLDED: | ||||
|             case Scalar.Scalar.BLOCK_LITERAL: | ||||
|                 return implicitKey || inFlow | ||||
|                     ? quotedString(ss.value, ctx) // blocks are not valid inside flow containers | ||||
|                     : blockString(ss, ctx, onComment, onChompKeep); | ||||
|             case Scalar.Scalar.QUOTE_DOUBLE: | ||||
|                 return doubleQuotedString(ss.value, ctx); | ||||
|             case Scalar.Scalar.QUOTE_SINGLE: | ||||
|                 return singleQuotedString(ss.value, ctx); | ||||
|             case Scalar.Scalar.PLAIN: | ||||
|                 return plainString(ss, ctx, onComment, onChompKeep); | ||||
|             default: | ||||
|                 return null; | ||||
|         } | ||||
|     }; | ||||
|     let res = _stringify(type); | ||||
|     if (res === null) { | ||||
|         const { defaultKeyType, defaultStringType } = ctx.options; | ||||
|         const t = (implicitKey && defaultKeyType) || defaultStringType; | ||||
|         res = _stringify(t); | ||||
|         if (res === null) | ||||
|             throw new Error(`Unsupported default string type ${t}`); | ||||
|     } | ||||
|     return res; | ||||
| } | ||||
|  | ||||
| exports.stringifyString = stringifyString; | ||||
		Reference in New Issue
	
	Block a user
	 Simon Martens
					Simon Martens