js-yaml
Version:
YAML 1.2 parser and serializer
1 lines • 299 kB
Source Map (JSON)
{"version":3,"file":"js-yaml.esm.min.mjs","names":["NULL_VALUES","TRUE_VALUES","FALSE_VALUES","TRUE_VALUES","FALSE_VALUES","YAML_INTEGER_IMPLICIT_PATTERN","YAML_INTEGER_EXPLICIT_PATTERN","parseYamlInteger","resolveYamlInteger","parseYamlInteger","resolveYamlInteger","YAML_FLOAT_PATTERN","YAML_FLOAT_SPECIAL_PATTERN","resolveYamlFloat","representYamlFloat","resolveYamlFloat","representYamlFloat","NO_RANGE","fromHexCode","escapedHexLen","NO_RANGE","eventPosition","throwError","NO_RANGE","NOT_RESOLVED","defineScalarTag","_options$implicit","_options$matchByTagPr","_options$implicitFirs","_options$represent","_options$representTag","options","data","tagName","defineSequenceTag","_options$matchByTagPr2","_options$finalize","_options$represent2","_options$representTag2","carrierIsResult","carrier","defineMappingTag","_options$matchByTagPr3","_options$finalize2","_options$represent3","_options$representTag3","strTag","source","NULL_VALUES$1","nullCoreTag","object","nullJsonTag","isExplicit","NULL_VALUES","nullYaml11Tag","TRUE_VALUES$2","FALSE_VALUES$2","boolCoreTag","TRUE_VALUES$1","FALSE_VALUES$1","boolJsonTag","TRUE_VALUES","FALSE_VALUES","boolYaml11Tag","YAML_INTEGER_IMPLICIT_PATTERN$1","YAML_INTEGER_EXPLICIT_PATTERN$1","parseYamlInteger$2","value","sign","resolveYamlInteger$2","result","intCoreTag","YAML_INTEGER_IMPLICIT_PATTERN","YAML_INTEGER_EXPLICIT_PATTERN","parseYamlInteger$1","resolveYamlInteger$1","intJsonTag","YAML_INTEGER_PATTERN","parseYamlInteger","part","resolveYamlInteger","intYaml11Tag","YAML_FLOAT_PATTERN$1","YAML_FLOAT_SPECIAL_PATTERN$1","resolveYamlFloat$2","representYamlFloat$2","floatCoreTag","YAML_FLOAT_IMPLICIT_PATTERN","YAML_FLOAT_EXPLICIT_PATTERN","resolveYamlFloat$1","representYamlFloat$1","floatJsonTag","YAML_FLOAT_PATTERN","YAML_FLOAT_SPECIAL_PATTERN","resolveYamlFloat","representYamlFloat","floatYaml11Tag","mergeTag","BASE64_PATTERN","resolveYamlBinary","input","binary","index","representYamlBinary","binaryTag","YAML_DATE_REGEXP","YAML_TIMESTAMP_REGEXP","makeUtcDate","date","year","month","day","hour","minute","second","fraction","resolveYamlTimestamp","match","offsetHour","offsetMinute","offset","timestampTag","seqTag","item","isPlainObject","prototype","pick","key","keys","omapTag","itemKeys","pairsTag","container","mapTag","map","o","normalizedKey","setTag","_typeof","toPrimitive","t","e","i","r","toPropertyKey","_defineProperty","ownKeys","_objectSpread2","createTagDefinitionMap","createTagDefinitionListMap","compileTags","tag","tags","previousIndex","previous","Schema","compiledTags","implicitScalarTags","exact","prefix","implicitScalarAnyFirstChar","implicitScalarByFirstChar","defaultScalarTag","exactTag","_this$implicitScalarB","candidates","flatTags","FAILSAFE_SCHEMA","JSON_SCHEMA","CORE_SCHEMA","YAML11_SCHEMA","DUMP_SCHEMA","realMapTag","obj","normalizeKey","array","legacyMapTag","DEFAULT_SNIPPET_OPTIONS","getLine","head","tail","maxHalfLength","maxLineLength","position","lineStart","lineEnd","buffer","padStart","max","string","makeSnippet","mark","opts","re","lineStarts","lineEnds","foundLineNo","lineNoLength","line","formatError","where","exception","compact","YAMLException","reason","ch","filename","message","EVENT_ID","SCALAR_STYLE","COLLECTION_STYLE","CHOMPING_MODE","NO_RANGE$3","simpleEscapeSequence","c","simpleEscapeCheck","simpleEscapeMap","charFromCodepoint","fromHexCode$1","escapedHexLen$1","skipFoldedBreaks","breaks","end","foldedBreaks","count","getPlainValue","start","captureStart","captureEnd","fold","getSingleQuotedValue","getDoubleQuotedValue","escaped","hexLength","hexResult","digit","getBlockValue","textIndent","indent","region","lines","didReadContent","emptyLines","atMoreIndented","column","content","first","folded","chomping","getScalarValue","scalar","valueStart","valueEnd","DEFAULT_TAG_HANDLERS","TAG_SUFFIX_CHARS","TAG_URI_CHARS","HEX","percentByte","byte","tagPercentEncode","allowed","isSuffix","tagPercentDecode","remaining","tagNameFull","_ref","_tagHandlers$handle","rawTag","handleEnd","handle","tagHandlers","tagNameShort","fullTag","NO_RANGE$2","MERGE_TAG_NAME","DEFAULT_CONSTRUCTOR_OPTIONS","eventPosition$1","event","throwError$1","state","finalizeCollection","error","constructScalar","_state$schema$lookupM","scalarTag","collectionTagDef","collectionTagName","defaultTagName","isMappingTag","chargeMergeWork","mergeKeys","sourceKey","sourceTag","frame","err","mergeSource","element","elementTag","addMappingValue","_frame$overridable2","_frame$overridable3","addValue","storeAnchor","anchor","constructFromEvents","directive","name","NO_RANGE$1","HAS_OWN","CONTEXT_FLOW_IN","CONTEXT_FLOW_OUT","CONTEXT_BLOCK_IN","CONTEXT_BLOCK_OUT","PATTERN_NON_PRINTABLE","PATTERN_FLOW_INDICATORS","PATTERN_TAG_HANDLE","NS_URI_CHAR","NS_TAG_CHAR","PATTERN_TAG_URI","PATTERN_TAG_SUFFIX","PATTERN_TAG_PREFIX","DEFAULT_PARSER_OPTIONS","addDocumentEvent","addSequenceEvent","addMappingEvent","insertFlowPairMappingEvent","snapshot","addScalarEvent","addAliasEvent","addPopEvent","addEmptyScalarEvent","emptyProperties","snapshotState","restoreState","throwError","isEol","isWhiteSpace","isWsOrEol","isWsOrEolOrEnd","isFlowIndicator","fromDecimalCode","fromHexCode","lc","escapedHexLen","isSimpleEscape","consumeLineBreak","skipSeparationSpace","lineBreaks","hasSeparation","allowComments","testDocumentSeparator","following","skipByteOrderMark","testDocumentBoundary","skipUntilLineEnd","checkPrintable","readTagProperty","props","isVerbatim","isNamed","tagHandle","suffixStart","inFlow","readAnchorProperty","readAlias","readFlowScalarBreak","nodeIndent","readSingleQuotedScalar","simple","readDoubleQuotedScalar","readBlockScalar","detectedIndent","style","current","parentIndent","hadWhitespace","contentIndent","maxLeadingIndent","linePosition","requiredIndent","canStartPlainScalar","nodeContext","readPlainScalar","multiline","savedPosition","savedLine","savedLineStart","savedLineIndent","skipFlowSeparationSpace","startLine","readFlowCollection","isMapping","readNext","terminator","isPair","isExplicitPair","entryLine","entryStart","keyWasRead","parseNode","readBlockSequence","hadBreak","readBlockMapping","atExplicitKey","detected","mappingOpened","pendingExplicitKey","beforeKey","flowIndent","indentStatus","atNewLine","hasContent","propertyStart","allowBlockScalars","allowBlockCollections","allowBlockStyles","allowToSeek","propertyState","_state$events$fallbac","fallbackState","allowCompact","blockIndent","allowPropertyMapping","_state$events$fallbac2","propertyIndent","readDirective","nameStart","args","readDocument","hasDirectives","explicitStart","explicitEnd","markerLine","documentEventIndex","documentEvent","parseEvents","length","nullpos","documentStart","DEFAULT_LOAD_OPTIONS","loadDocuments","PARSER_OPT_KEYS","CONSTRUCTOR_OPT_KEYS","loadAll","iterator","iteratorOrOptions","documents","document","load","INVALID","buildRepresentTypes","defaultTags","schema","implicitScalars","explicitTags","defaultTagsLast","matchTag","build","existing","matched","nodeTagName","implicitTag","node","objectKey","objectValue","jsToAst","_options$noRefs","_options$skipInvalid","root","VISIT_BREAK","VISIT_SKIP","visitNode","control","visitor","ctx","depth","visit","doc","hasBit","mask","bit","DEFAULT_SCALAR_STYLE_RULES","_preferredQuotedStyle","layout","applyQuoteFlowKeysOption","doubleQuoteForInvisibles","doubleQuoteWhitespaceOnly","applyForceQuotesOption","tryLongOrMultilineAsBlock","w","availableWidth","shouldFold","nextLineBreak","quoteInvalidPlain","fallbackToDoubleQuoted","setBit","SRC_C_PRINTABLE","SRC_B_CHAR","SRC_C_BYTE_ORDER_MARK","SRC_S_WHITE","SRC_NB_CHAR","SRC_NS_CHAR","SRC_NB_JSON","SRC_C_INDICATOR","SRC_C_FLOW_INDICATOR","SRC_NS_PLAIN_SAFE_FLOW_OUT","SRC_NS_PLAIN_SAFE_FLOW_IN","SRC_NS_PLAIN_FIRST_FLOW_OUT","SRC_NS_PLAIN_FIRST_FLOW_IN","SRC_NS_PLAIN_CHAR_FLOW_OUT","SRC_NS_PLAIN_CHAR_FLOW_IN","SRC_NB_NS_PLAIN_IN_LINE_FLOW_OUT","SRC_NB_NS_PLAIN_IN_LINE_FLOW_IN","SRC_NS_PLAIN_ONE_LINE_FLOW_OUT","SRC_NS_PLAIN_ONE_LINE_FLOW_IN","SRC_NS_PLAIN_ONE_LINE_BLOCK_KEY","SRC_NS_PLAIN_ONE_LINE_FLOW_KEY","SRC_S_NS_PLAIN_NEXT_LINE_FLOW_OUT","SRC_S_NS_PLAIN_NEXT_LINE_FLOW_IN","SRC_NS_PLAIN_MULTI_LINE_FLOW_OUT","SRC_NS_PLAIN_MULTI_LINE_FLOW_IN","NS_PLAIN_FLOW_OUT","NS_PLAIN_FLOW_IN","NS_PLAIN_BLOCK_KEY","NS_PLAIN_FLOW_KEY","NB_SINGLE_ONE_LINE","NB_SINGLE_MULTI_LINE","BLOCK_SCALAR_CONTENT","C_FORBIDDEN_FIRST_LINE","C_FORBIDDEN_CONTENT","canUsePlain","str","firstLineBreak","resolvedTag","canUseSingleQuoted","canUseBlock","detectAllowedStyles","renderScalar","renderPlain","renderSingleQuoted","renderLiteralBlock","renderFoldedBlock","renderDoubleQuoted","encodeFlowBreaks","blockHeader","dropEndingNewline","indentString","foldBlockScalar","escapeString","nextLF","pad","shiftOfContent","lineRe","spaces","next","needIndentIndicator","indentIndicator","shiftOfParent","clip","isMoreIndented","char","foldLine","breakRe","curr","width","prevMoreIndented","moreIndented","CHARACTERS_TO_ESCAPE","escapeCharacter","character","code","hex","CHAR_LINE_FEED","DEFAULT_PRESENTER_OPTIONS","nodeTagShort","createPresenterState","generateNextLine","level","scalarLayout","writeFlowSequence","writeNode","writeBlockSequence","writeFlowMapping","pairBuffer","keyRender","keyText","valueText","sep","keyIsBareProps","keyColonSep","writeBlockMapping","keyIsBlock","cannotBeCompact","keyHasLineBreak","keyIsTooLong","explicitPair","_ctx$compact","hasAnchor","body","shouldPrintTag","useBlockCollection","block","isblockseq","parent","iskey","rule","noBody","text","rootStartsOwnLine","writeDocumentDirectives","present","previousEnded","directives","marker","DEFAULT_DUMP_OPTIONS","defaultCompareFn","x","a","y","b","dump","compareFn","NO_RANGE","eventPosition","anchorName","buildScalar","raw","tagged","buildCollection","addNode","eventsToAst","events","EVENT_DOCUMENT","EVENT_SEQUENCE","EVENT_MAPPING","EVENT_SCALAR","EVENT_ALIAS","EVENT_POP","SCALAR_STYLE_PLAIN","SCALAR_STYLE_SINGLE_QUOTED","SCALAR_STYLE_DOUBLE_QUOTED","SCALAR_STYLE_LITERAL_BLOCK","SCALAR_STYLE_FOLDED_BLOCK","COLLECTION_STYLE_BLOCK","COLLECTION_STYLE_FLOW","CHOMPING_CLIP","CHOMPING_STRIP","CHOMPING_KEEP"],"sources":["../../src/tag.ts","../../src/tag/scalar/str.ts","../../src/tag/scalar/null_core.ts","../../src/tag/scalar/null_json.ts","../../src/tag/scalar/null_yaml11.ts","../../src/tag/scalar/bool_core.ts","../../src/tag/scalar/bool_json.ts","../../src/tag/scalar/bool_yaml11.ts","../../src/tag/scalar/int_core.ts","../../src/tag/scalar/int_json.ts","../../src/tag/scalar/int_yaml11.ts","../../src/tag/scalar/float_core.ts","../../src/tag/scalar/float_json.ts","../../src/tag/scalar/float_yaml11.ts","../../src/tag/scalar/merge.ts","../../src/tag/scalar/binary.ts","../../src/tag/scalar/timestamp.ts","../../src/tag/sequence/seq.ts","../../src/common/object.ts","../../src/tag/sequence/omap.ts","../../src/tag/sequence/pairs.ts","../../src/tag/mapping/map.ts","../../src/tag/mapping/set.ts","../../src/schema.ts","../../src/tag/mapping/real_map.ts","../../src/tag/mapping/legacy_map.ts","../../src/common/snippet.ts","../../src/common/exception.ts","../../src/parser/events.ts","../../src/parser/parser_scalar.ts","../../src/common/tagname.ts","../../src/parser/constructor.ts","../../src/parser/parser.ts","../../src/load.ts","../../src/ast/from_js.ts","../../src/ast/visit.ts","../../src/ast/styler_defaults.ts","../../src/ast/scalar_styler.ts","../../src/ast/presenter.ts","../../src/dump.ts","../../src/ast/from_events.ts","../../src/index.ts"],"sourcesContent":["/**\n * Returned by a scalar resolver when the source does not match its tag.\n *\n * @category Tags\n */\nconst NOT_RESOLVED: unique symbol = Symbol('NOT_RESOLVED')\n\n/**\n * Options for {@link defineScalarTag}.\n *\n * @category Tags\n */\ninterface ScalarTagOptions<Result> {\n /**\n * Whether this tag participates in resolving plain scalars without an\n * explicit tag. Default: `false`.\n */\n implicit?: boolean\n\n /**\n * Whether explicit tag names are matched by prefix instead of exact equality.\n * Default: `false`.\n */\n matchByTagPrefix?: boolean\n\n /**\n * Set of `source.charAt(0)` keys for which `resolve` may succeed (a superset\n * of what it really matches). A key is either a single character or '' (empty\n * source). `null` means \"no constraint, always try\". Used by the composer to\n * dispatch implicit scalars by first character without running every resolver.\n */\n implicitFirstChars?: readonly string[] | null\n\n /**\n * Construct a value from scalar text, or return {@link NOT_RESOLVED} when it\n * is invalid for this tag. `isExplicit` is true for an explicit tag and\n * `tagName` is the actual matched name.\n */\n resolve: (source: string, isExplicit: boolean, tagName: string) => Result | typeof NOT_RESOLVED\n\n /**\n * Selects this tag for a JavaScript value when dumping. Use `() => false`\n * for load-only tags.\n */\n identify: (data: any) => boolean\n\n /**\n * A scalar's printed form is text, so `represent` always yields a string.\n * The factory supplies a `String(data)` default when a tag omits it.\n */\n represent?: (data: any) => string\n\n /** Return the tag name to emit for a prefix-matching tag. Defaults to `tagName`. */\n representTagName?: (data: any) => string\n}\n\n/**\n * Normalized scalar tag returned by {@link defineScalarTag}.\n *\n * @category Tags\n */\ninterface ScalarTagDefinition<Result = unknown> extends Required<ScalarTagOptions<Result>> {\n /** Tag name used for schema lookup. */\n tagName: string\n\n /** YAML node kind handled by this tag. */\n nodeKind: 'scalar'\n}\n\n/**\n * Options for {@link defineSequenceTag}.\n *\n * @category Tags\n */\ninterface SequenceTagOptions<Carrier, Result = Carrier> {\n /**\n * Whether explicit tag names are matched by prefix instead of exact equality.\n * Default: `false`.\n */\n matchByTagPrefix?: boolean\n\n /** Create the carrier used while constructing a sequence. */\n create: (tagName: string) => Carrier\n\n /** Add an item to the carrier. Return a non-empty error message to reject it. */\n addItem: (carrier: Carrier, item: unknown, index: number) => void | string\n\n /** Convert the completed carrier to the result. Defaults to the identity function. */\n finalize?: (carrier: Carrier) => Result\n\n /**\n * Selects this tag for a JavaScript value when dumping. Use `() => false`\n * for load-only tags.\n */\n identify: (data: any) => boolean\n\n /** Return the array-like contents to dump. Defaults to the identity function. */\n represent?: (data: any) => ArrayLike<unknown>\n\n /** Return the tag name to emit for a prefix-matching tag. Defaults to `tagName`. */\n representTagName?: (data: any) => string\n}\n\n/**\n * Normalized sequence tag returned by {@link defineSequenceTag}.\n *\n * @category Tags\n */\ninterface SequenceTagDefinition<Carrier = unknown, Result = Carrier> extends Required<SequenceTagOptions<Carrier, Result>> {\n /** Tag name used for schema lookup. */\n tagName: string\n\n /** YAML node kind handled by this tag. */\n nodeKind: 'sequence'\n\n /** Sequence tags do not participate in implicit scalar resolution. */\n implicit: false\n\n /** Whether the carrier is also the final result (`finalize` was omitted). */\n carrierIsResult: boolean\n}\n\n/**\n * Options for {@link defineMappingTag}.\n *\n * @category Tags\n */\ninterface MappingTagOptions<Carrier, Result = Carrier> {\n /**\n * Whether explicit tag names are matched by prefix instead of exact equality.\n * Default: `false`.\n */\n matchByTagPrefix?: boolean\n\n /** Create the carrier used while constructing a mapping. */\n create: (tagName: string) => Carrier\n\n /**\n * Writes a pair. Returns '' on success, a non-empty error message otherwise\n * (key does not fit the representation, value rejected, ...). Always a string\n * so the hot path never allocates an exception wrapper.\n */\n addPair: (carrier: Carrier, key: unknown, value: unknown) => string\n\n /** Return whether the carrier contains a key, for duplicate and merge checks. */\n has: (carrier: Carrier, key: unknown) => boolean\n\n /** Return the keys of a completed result for YAML merge processing. */\n keys: (result: Result) => Iterable<unknown>\n\n /** Return a value from a completed result for YAML merge processing. */\n get: (result: Result, key: unknown) => unknown\n\n /** Convert the completed carrier to the result. Defaults to the identity function. */\n finalize?: (carrier: Carrier) => Result\n\n /**\n * Selects this tag for a JavaScript value when dumping. Use `() => false`\n * for load-only tags.\n */\n identify: (data: any) => boolean\n\n /** Return the mapping entries to dump. Defaults to the identity function. */\n represent?: (data: any) => Map<unknown, unknown>\n\n /** Return the tag name to emit for a prefix-matching tag. Defaults to `tagName`. */\n representTagName?: (data: any) => string\n}\n\n/**\n * Normalized mapping tag returned by {@link defineMappingTag}.\n *\n * @category Tags\n */\ninterface MappingTagDefinition<Carrier = unknown, Result = Carrier> extends Required<MappingTagOptions<Carrier, Result>> {\n /** Tag name used for schema lookup. */\n tagName: string\n\n /** YAML node kind handled by this tag. */\n nodeKind: 'mapping'\n\n /** Mapping tags do not participate in implicit scalar resolution. */\n implicit: false\n\n /** Whether the carrier is also the final result (`finalize` was omitted). */\n carrierIsResult: boolean\n}\n\n/**\n * Any normalized tag definition accepted by {@link Schema}.\n *\n * @category Tags\n */\ntype TagDefinition =\n | ScalarTagDefinition<any>\n | SequenceTagDefinition<any, any>\n | MappingTagDefinition<any, any>\n\n/**\n * Create a normalized scalar tag definition.\n *\n * @category Tags\n */\nfunction defineScalarTag<Result> (tagName: string, options: ScalarTagOptions<Result>): ScalarTagDefinition<Result> {\n return {\n tagName,\n nodeKind: 'scalar',\n implicit: options.implicit ?? false,\n matchByTagPrefix: options.matchByTagPrefix ?? false,\n implicitFirstChars: options.implicitFirstChars ?? null,\n resolve: options.resolve,\n identify: options.identify,\n represent: options.represent ?? (data => String(data)),\n representTagName: options.representTagName ?? (() => tagName)\n }\n}\n\n/**\n * Create a normalized sequence tag definition.\n *\n * @category Tags\n */\nfunction defineSequenceTag<Carrier, Result = Carrier> (tagName: string, options: SequenceTagOptions<Carrier, Result>): SequenceTagDefinition<Carrier, Result> {\n const carrierIsResult = options.finalize === undefined\n\n return {\n tagName,\n nodeKind: 'sequence',\n implicit: false,\n matchByTagPrefix: options.matchByTagPrefix ?? false,\n create: options.create,\n addItem: options.addItem,\n finalize: options.finalize ?? (carrier => carrier as unknown as Result),\n carrierIsResult,\n identify: options.identify,\n represent: options.represent ?? (data => data as ArrayLike<unknown>),\n representTagName: options.representTagName ?? (() => tagName)\n }\n}\n\n/**\n * Create a normalized mapping tag definition.\n *\n * @category Tags\n */\nfunction defineMappingTag<Carrier, Result = Carrier> (tagName: string, options: MappingTagOptions<Carrier, Result>): MappingTagDefinition<Carrier, Result> {\n const carrierIsResult = options.finalize === undefined\n\n return {\n tagName,\n nodeKind: 'mapping',\n implicit: false,\n matchByTagPrefix: options.matchByTagPrefix ?? false,\n create: options.create,\n addPair: options.addPair,\n has: options.has,\n keys: options.keys,\n get: options.get,\n finalize: options.finalize ?? (carrier => carrier as unknown as Result),\n carrierIsResult,\n identify: options.identify,\n represent: options.represent ?? (data => data as Map<unknown, unknown>),\n representTagName: options.representTagName ?? (() => tagName)\n }\n}\n\nexport {\n NOT_RESOLVED,\n defineScalarTag,\n defineSequenceTag,\n defineMappingTag,\n\n type ScalarTagDefinition,\n type SequenceTagDefinition,\n type MappingTagDefinition,\n type TagDefinition,\n type ScalarTagOptions,\n type SequenceTagOptions,\n type MappingTagOptions\n}\n","import { defineScalarTag } from '../../tag.ts'\n\n/** @category Tags */\nconst strTag = defineScalarTag('tag:yaml.org,2002:str', {\n resolve: (source) => source,\n identify: (data) => typeof data === 'string'\n})\n\nexport { strTag }\n","import { defineScalarTag, NOT_RESOLVED } from '../../tag.ts'\n\nconst NULL_VALUES = ['', '~', 'null', 'Null', 'NULL']\n\n/** @category Tags */\nconst nullCoreTag = defineScalarTag('tag:yaml.org,2002:null', {\n implicit: true,\n // Superset of source.charAt(0) over all matched inputs: '' (empty), '~', 'null'/'Null'/'NULL'.\n implicitFirstChars: ['', '~', 'n', 'N'],\n resolve: (source) => {\n if (NULL_VALUES.indexOf(source) !== -1) return null\n\n return NOT_RESOLVED\n },\n identify: (object) => object === null,\n represent: () => 'null'\n})\n\nexport { nullCoreTag }\n","import { defineScalarTag, NOT_RESOLVED } from '../../tag.ts'\n\n/** @category Tags */\nconst nullJsonTag = defineScalarTag('tag:yaml.org,2002:null', {\n implicit: true,\n // Superset of source.charAt(0) over all matched inputs: null.\n implicitFirstChars: ['n'],\n resolve: (source, isExplicit) => {\n if (source === 'null' || (isExplicit && source === '')) return null\n\n return NOT_RESOLVED\n },\n identify: (object) => object === null,\n represent: () => 'null'\n})\n\nexport { nullJsonTag }\n","import { defineScalarTag, NOT_RESOLVED } from '../../tag.ts'\n\nconst NULL_VALUES = ['', '~', 'null', 'Null', 'NULL']\n\n/** @category Tags */\nconst nullYaml11Tag = defineScalarTag('tag:yaml.org,2002:null', {\n implicit: true,\n // Superset of source.charAt(0) over all matched inputs: '' (empty), '~', 'null'/'Null'/'NULL'.\n implicitFirstChars: ['', '~', 'n', 'N'],\n resolve: (source) => {\n if (NULL_VALUES.indexOf(source) !== -1) return null\n\n return NOT_RESOLVED\n },\n identify: (object) => object === null,\n represent: () => 'null'\n})\n\nexport { nullYaml11Tag }\n","import { defineScalarTag, NOT_RESOLVED } from '../../tag.ts'\n\nconst TRUE_VALUES = ['true', 'True', 'TRUE']\nconst FALSE_VALUES = ['false', 'False', 'FALSE']\n\n/** @category Tags */\nconst boolCoreTag = defineScalarTag('tag:yaml.org,2002:bool', {\n implicit: true,\n // Superset of source.charAt(0) over all matched inputs: true/True/TRUE, false/False/FALSE.\n implicitFirstChars: ['t', 'T', 'f', 'F'],\n resolve: (source) => {\n if (TRUE_VALUES.indexOf(source) !== -1) return true\n if (FALSE_VALUES.indexOf(source) !== -1) return false\n\n return NOT_RESOLVED\n },\n identify: (object) => Object.prototype.toString.call(object) === '[object Boolean]',\n represent: (object) => object ? 'true' : 'false'\n})\n\nexport { boolCoreTag }\n","import { defineScalarTag, NOT_RESOLVED } from '../../tag.ts'\n\nconst TRUE_VALUES = ['true']\nconst FALSE_VALUES = ['false']\n\n/** @category Tags */\nconst boolJsonTag = defineScalarTag('tag:yaml.org,2002:bool', {\n implicit: true,\n // Superset of source.charAt(0) over all matched inputs: true, false.\n implicitFirstChars: ['t', 'f'],\n resolve: (source) => {\n if (TRUE_VALUES.indexOf(source) !== -1) return true\n if (FALSE_VALUES.indexOf(source) !== -1) return false\n\n return NOT_RESOLVED\n },\n identify: (object) => Object.prototype.toString.call(object) === '[object Boolean]',\n represent: (object) => object ? 'true' : 'false'\n})\n\nexport { boolJsonTag }\n","import { defineScalarTag, NOT_RESOLVED } from '../../tag.ts'\n\nconst TRUE_VALUES = ['true', 'True', 'TRUE', 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON']\nconst FALSE_VALUES = ['false', 'False', 'FALSE', 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF']\n\n/** @category Tags */\nconst boolYaml11Tag = defineScalarTag('tag:yaml.org,2002:bool', {\n implicit: true,\n // Superset of source.charAt(0) over all matched inputs.\n implicitFirstChars: ['y', 'Y', 'n', 'N', 't', 'T', 'f', 'F', 'o', 'O'],\n resolve: (source) => {\n if (TRUE_VALUES.indexOf(source) !== -1) return true\n if (FALSE_VALUES.indexOf(source) !== -1) return false\n\n return NOT_RESOLVED\n },\n identify: (object) => Object.prototype.toString.call(object) === '[object Boolean]',\n represent: (object) => object ? 'true' : 'false'\n})\n\nexport { boolYaml11Tag }\n","import { defineScalarTag, NOT_RESOLVED } from '../../tag.ts'\n\n// YAML 1.2 Core schema implicit resolution:\n// [-+]? [0-9]+ | 0o [0-7]+ | 0x [0-9a-fA-F]+\nconst YAML_INTEGER_IMPLICIT_PATTERN = new RegExp(\n // 0o123\n '^(?:0o[0-7]+' +\n // 0x1A\n '|0x[0-9a-fA-F]+' +\n // 12345\n '|[-+]?[0-9]+)$')\n\n// Explicit `!!int` validation is separate from Core implicit resolution.\nconst YAML_INTEGER_EXPLICIT_PATTERN = new RegExp(\n // 0b1010\n '^(?:[-+]?0b[0-1]+' +\n // 0o123\n '|[-+]?0o[0-7]+' +\n // 0x1A\n '|[-+]?0x[0-9a-fA-F]+' +\n // 12345\n '|[-+]?[0-9]+)$')\n\nfunction parseYamlInteger (source: string) {\n let value = source\n let sign = 1\n\n if (value[0] === '-' || value[0] === '+') {\n if (value[0] === '-') sign = -1\n value = value.slice(1)\n }\n\n if (value.startsWith('0b')) return sign * parseInt(value.slice(2), 2)\n if (value.startsWith('0o')) return sign * parseInt(value.slice(2), 8)\n if (value.startsWith('0x')) return sign * parseInt(value.slice(2), 16)\n\n return sign * parseInt(value, 10)\n}\n\nfunction resolveYamlInteger (source: string, isExplicit: boolean) {\n if (isExplicit) {\n if (!YAML_INTEGER_EXPLICIT_PATTERN.test(source)) return NOT_RESOLVED\n } else if (!YAML_INTEGER_IMPLICIT_PATTERN.test(source)) {\n return NOT_RESOLVED\n }\n\n const result = parseYamlInteger(source)\n return Number.isFinite(result) ? result : NOT_RESOLVED\n}\n\n/** @category Tags */\nconst intCoreTag = defineScalarTag('tag:yaml.org,2002:int', {\n implicit: true,\n // Superset of source.charAt(0) over all matched inputs: optional sign + decimal digit.\n implicitFirstChars: ['-', '+', ...'0123456789'],\n resolve: resolveYamlInteger,\n identify: (object) =>\n // No ancient boxed numbers support\n Number.isInteger(object) &&\n // Negative zero => !!float\n !Object.is(object, -0) &&\n // Exponential form => !!float, round-trip for !!int 1e21 will be broken\n object.toString(10).indexOf('e') < 0,\n represent: (object: number) => object.toString(10)\n})\n\nexport { intCoreTag }\n","import { defineScalarTag, NOT_RESOLVED } from '../../tag.ts'\n\n// YAML 1.2 JSON schema implicit resolution:\n// -? ( 0 | [1-9] [0-9]* )\nconst YAML_INTEGER_IMPLICIT_PATTERN = new RegExp(\n '^-?(?:0|[1-9][0-9]*)$')\n\n// Explicit `!!int` validation is separate from JSON implicit resolution.\nconst YAML_INTEGER_EXPLICIT_PATTERN = new RegExp(\n // 0b1010\n '^(?:[-+]?0b[0-1]+' +\n // 0o123\n '|[-+]?0o[0-7]+' +\n // 0x1A\n '|[-+]?0x[0-9a-fA-F]+' +\n // 12345\n '|[-+]?[0-9]+)$')\n\nfunction parseYamlInteger (source: string) {\n let value = source\n let sign = 1\n\n if (value[0] === '-' || value[0] === '+') {\n if (value[0] === '-') sign = -1\n value = value.slice(1)\n }\n\n if (value.startsWith('0b')) return sign * parseInt(value.slice(2), 2)\n if (value.startsWith('0o')) return sign * parseInt(value.slice(2), 8)\n if (value.startsWith('0x')) return sign * parseInt(value.slice(2), 16)\n\n return sign * parseInt(value, 10)\n}\n\nfunction resolveYamlInteger (source: string, isExplicit: boolean) {\n if (isExplicit) {\n if (!YAML_INTEGER_EXPLICIT_PATTERN.test(source)) return NOT_RESOLVED\n } else if (!YAML_INTEGER_IMPLICIT_PATTERN.test(source)) {\n return NOT_RESOLVED\n }\n\n const result = parseYamlInteger(source)\n return Number.isFinite(result) ? result : NOT_RESOLVED\n}\n\n/** @category Tags */\nconst intJsonTag = defineScalarTag('tag:yaml.org,2002:int', {\n implicit: true,\n // Superset of source.charAt(0) over all matched inputs: optional '-' or digit.\n implicitFirstChars: ['-', ...'0123456789'],\n resolve: resolveYamlInteger,\n identify: (object) =>\n // No ancient boxed numbers support\n Number.isInteger(object) &&\n // Negative zero => !!float\n !Object.is(object, -0) &&\n // Exponential form => !!float, round-trip for !!int 1e21 will be broken\n object.toString(10).indexOf('e') < 0,\n represent: (object: number) => object.toString(10)\n})\n\nexport { intJsonTag }\n","import { defineScalarTag, NOT_RESOLVED } from '../../tag.ts'\n\nconst YAML_INTEGER_PATTERN = new RegExp(\n // 0b1010\n '^(?:[-+]?0b[0-1_]+' +\n // 0123\n '|[-+]?0[0-7_]+' +\n // 0x1A\n '|[-+]?0x[0-9a-fA-F_]+' +\n // 1:23\n '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+' +\n // 12345\n '|[-+]?(?:0|[1-9][0-9_]*))$')\n\nfunction parseYamlInteger (source: string) {\n let value = source.replace(/_/g, '')\n let sign = 1\n\n if (value[0] === '-' || value[0] === '+') {\n if (value[0] === '-') sign = -1\n value = value.slice(1)\n }\n\n if (value.startsWith('0b')) return sign * parseInt(value.slice(2), 2)\n if (value.startsWith('0x')) return sign * parseInt(value.slice(2), 16)\n\n if (value.includes(':')) {\n let result = 0\n for (const part of value.split(':')) result = result * 60 + Number(part)\n return sign * result\n }\n\n if (value !== '0' && value[0] === '0') return sign * parseInt(value, 8)\n\n return sign * parseInt(value, 10)\n}\n\nfunction resolveYamlInteger (source: string) {\n if (!YAML_INTEGER_PATTERN.test(source)) return NOT_RESOLVED\n\n const result = parseYamlInteger(source)\n return Number.isFinite(result) ? result : NOT_RESOLVED\n}\n\n/** @category Tags */\nconst intYaml11Tag = defineScalarTag('tag:yaml.org,2002:int', {\n implicit: true,\n // Superset of source.charAt(0) over all matched inputs: optional sign + decimal digit.\n implicitFirstChars: ['-', '+', ...'0123456789'],\n resolve: resolveYamlInteger,\n identify: (object) =>\n // No ancient boxed numbers support\n Number.isInteger(object) &&\n // Negative zero => !!float\n !Object.is(object, -0) &&\n // Exponential form => !!float, round-trip for !!int 1e21 will be broken\n object.toString(10).indexOf('e') < 0,\n represent: (object: number) => object.toString(10)\n})\n\nexport { intYaml11Tag }\n","import { defineScalarTag, NOT_RESOLVED } from '../../tag.ts'\n\nconst YAML_FLOAT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n '^(?:[-+]?[0-9]+(?:\\\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?' +\n // .2e4, .2\n '|[-+]?\\\\.[0-9]+(?:[eE][-+]?[0-9]+)?' +\n // .inf\n '|[-+]?\\\\.(?:inf|Inf|INF)' +\n // .nan\n '|\\\\.(?:nan|NaN|NAN))$')\n\nconst YAML_FLOAT_SPECIAL_PATTERN = new RegExp(\n '^(?:' +\n // .inf\n '[-+]?\\\\.(?:inf|Inf|INF)' +\n // .nan\n '|\\\\.(?:nan|NaN|NAN))$')\n\nfunction resolveYamlFloat (source: string) {\n if (!YAML_FLOAT_PATTERN.test(source)) return NOT_RESOLVED\n\n let value = source.toLowerCase()\n const sign = value[0] === '-' ? -1 : 1\n\n if ('+-'.includes(value[0])) value = value.slice(1)\n\n if (value === '.inf') return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY\n if (value === '.nan') return NaN\n\n const result = sign * parseFloat(value)\n\n if (Number.isFinite(result) || YAML_FLOAT_SPECIAL_PATTERN.test(source)) return result\n return NOT_RESOLVED\n}\n\nfunction representYamlFloat (object: number) {\n if (isNaN(object)) return '.nan'\n if (object === Number.POSITIVE_INFINITY) return '.inf'\n if (object === Number.NEGATIVE_INFINITY) return '-.inf'\n if (Object.is(object, -0)) return '-0.0'\n\n const result = object.toString(10)\n return /^[-+]?[0-9]+e/.test(result) ? result.replace('e', '.e') : result\n}\n\n/** @category Tags */\nconst floatCoreTag = defineScalarTag('tag:yaml.org,2002:float', {\n implicit: true,\n // Superset of source.charAt(0) over all matched inputs: optional sign, '.', or digit\n // ('.inf'/'.nan' start with '.').\n implicitFirstChars: ['-', '+', '.', ...'0123456789'],\n resolve: resolveYamlFloat,\n identify: (object) =>\n // No ancient boxed numbers support\n typeof object === 'number' &&\n (\n // We land here all numbers, not handled (declined) by !!int `.identify`\n // The same condition as for !!int, but reversed.\n\n // Filter out integers...\n !Number.isInteger(object) ||\n // but allow negative zero\n Object.is(object, -0) ||\n // and integers with exponential form\n object.toString(10).indexOf('e') >= 0\n ),\n represent: representYamlFloat\n})\n\nexport { floatCoreTag }\n","import { defineScalarTag, NOT_RESOLVED } from '../../tag.ts'\n\n// YAML 1.2 JSON schema implicit resolution:\n// -? ( 0 | [1-9] [0-9]* ) ( \\. [0-9]* )? ( [eE] [-+]? [0-9]+ )?\nconst YAML_FLOAT_IMPLICIT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n '^-?(?:0|[1-9][0-9]*)(?:\\\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$')\n\n// Explicit `!!float` validation is separate from JSON implicit resolution.\nconst YAML_FLOAT_EXPLICIT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n '^(?:[-+]?[0-9]+(?:\\\\.[0-9]*)?(?:[eE][-+]?[0-9]+)?' +\n // .2e4, .2\n '|[-+]?\\\\.[0-9]+(?:[eE][-+]?[0-9]+)?' +\n // .inf\n '|[-+]?\\\\.(?:inf|Inf|INF)' +\n // .nan\n '|\\\\.(?:nan|NaN|NAN))$')\n\nfunction resolveYamlFloat (source: string, isExplicit: boolean) {\n if (isExplicit) {\n if (!YAML_FLOAT_EXPLICIT_PATTERN.test(source)) return NOT_RESOLVED\n\n let value = source.toLowerCase()\n const sign = value[0] === '-' ? -1 : 1\n\n if ('+-'.includes(value[0])) value = value.slice(1)\n\n if (value === '.inf') return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY\n if (value === '.nan') return NaN\n\n const result = sign * parseFloat(value)\n return Number.isFinite(result) ? result : NOT_RESOLVED\n }\n\n if (!YAML_FLOAT_IMPLICIT_PATTERN.test(source)) return NOT_RESOLVED\n\n const result = Number(source)\n\n if (Number.isFinite(result)) return result\n return NOT_RESOLVED\n}\n\nfunction representYamlFloat (object: number) {\n if (isNaN(object)) return '.nan'\n if (object === Number.POSITIVE_INFINITY) return '.inf'\n if (object === Number.NEGATIVE_INFINITY) return '-.inf'\n if (Object.is(object, -0)) return '-0.0'\n\n const result = object.toString(10)\n return /^[-+]?[0-9]+e/.test(result) ? result.replace('e', '.e') : result\n}\n\n/** @category Tags */\nconst floatJsonTag = defineScalarTag('tag:yaml.org,2002:float', {\n implicit: true,\n // Superset of source.charAt(0) over all matched inputs: optional '-' or digit.\n implicitFirstChars: ['-', ...'0123456789'],\n resolve: resolveYamlFloat,\n identify: (object) =>\n // No ancient boxed numbers support\n typeof object === 'number' &&\n (\n // We land here all numbers, not handled (declined) by !!int `.identify`\n // The same condition as for !!int, but reversed.\n\n // Filter out integers...\n !Number.isInteger(object) ||\n // but allow negative zero\n Object.is(object, -0) ||\n // and integers with exponential form\n object.toString(10).indexOf('e') >= 0\n ),\n represent: representYamlFloat\n})\n\nexport { floatJsonTag }\n","import { defineScalarTag, NOT_RESOLVED } from '../../tag.ts'\n\nconst YAML_FLOAT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n '^(?:[-+]?(?:(?:[0-9][0-9_]*)?\\\\.[0-9_]*)(?:[eE][-+][0-9]+)?' +\n // 190:20:30.15\n '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*' +\n // .inf\n '|[-+]?\\\\.(?:inf|Inf|INF)' +\n // .nan\n '|\\\\.(?:nan|NaN|NAN))$')\n\nconst YAML_FLOAT_SPECIAL_PATTERN = new RegExp(\n '^(?:' +\n // .inf\n '[-+]?\\\\.(?:inf|Inf|INF)' +\n // .nan\n '|\\\\.(?:nan|NaN|NAN))$')\n\nfunction resolveYamlFloat (source: string) {\n if (!YAML_FLOAT_PATTERN.test(source)) return NOT_RESOLVED\n\n let value = source.toLowerCase().replace(/_/g, '')\n const sign = value[0] === '-' ? -1 : 1\n\n if ('+-'.includes(value[0])) value = value.slice(1)\n\n if (value === '.inf') return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY\n if (value === '.nan') return NaN\n\n let result = 0\n\n if (value.includes(':')) {\n for (const part of value.split(':')) result = result * 60 + Number(part)\n result *= sign\n } else {\n result = sign * parseFloat(value)\n }\n\n if (Number.isFinite(result) || YAML_FLOAT_SPECIAL_PATTERN.test(source)) return result\n return NOT_RESOLVED\n}\n\nfunction representYamlFloat (object: number) {\n if (isNaN(object)) return '.nan'\n if (object === Number.POSITIVE_INFINITY) return '.inf'\n if (object === Number.NEGATIVE_INFINITY) return '-.inf'\n if (Object.is(object, -0)) return '-0.0'\n\n const result = object.toString(10)\n return /^[-+]?[0-9]+e/.test(result) ? result.replace('e', '.e') : result\n}\n\n/** @category Tags */\nconst floatYaml11Tag = defineScalarTag('tag:yaml.org,2002:float', {\n implicit: true,\n // Superset of source.charAt(0) over all matched inputs: optional sign, '.', or digit\n // ('.inf'/'.nan' start with '.').\n implicitFirstChars: ['-', '+', '.', ...'0123456789'],\n resolve: resolveYamlFloat,\n identify: (object) =>\n // No ancient boxed numbers support\n typeof object === 'number' &&\n (\n // We land here all numbers, not handled (declined) by !!int `.identify`\n // The same condition as for !!int, but reversed.\n\n // Filter out integers...\n !Number.isInteger(object) ||\n // but allow negative zero\n Object.is(object, -0) ||\n // and integers with exponential form\n object.toString(10).indexOf('e') >= 0\n ),\n represent: representYamlFloat\n})\n\nexport { floatYaml11Tag }\n","import { defineScalarTag, NOT_RESOLVED } from '../../tag.ts'\n\n/**\n * Enables merge keys in {@link CORE_SCHEMA} when added with\n * {@link Schema.withTags}.\n *\n * @category Tags\n */\nconst mergeTag = defineScalarTag('tag:yaml.org,2002:merge', {\n implicit: true,\n // source.charAt(0) over matched implicit inputs: '<' ('<<').\n implicitFirstChars: ['<'],\n // Merge semantics live in the tag, not in the value: the constructor acts on\n // a key tagged `!!merge`, so `<<` anywhere else is just this string.\n resolve: (source, isExplicit) => {\n if (source === '<<' || (isExplicit && source === '')) return '<<'\n return NOT_RESOLVED\n },\n identify: () => false\n})\n\nexport { mergeTag }\n","import { defineScalarTag, NOT_RESOLVED } from '../../tag.ts'\n\nconst BASE64_PATTERN = /^[A-Za-z0-9+/]*={0,2}$/\n\nfunction resolveYamlBinary (source: string) {\n // Strip allowed whitespace first, so validation stays a plain base64 check.\n const input = source.replace(/\\s/g, '')\n if (input.length % 4 !== 0 || !BASE64_PATTERN.test(input)) return NOT_RESOLVED\n\n const binary = atob(input)\n const result = new Uint8Array(binary.length)\n for (let index = 0; index < binary.length; index++) {\n result[index] = binary.charCodeAt(index)\n }\n return result\n}\n\nfunction representYamlBinary (object: Uint8Array) {\n let binary = ''\n for (let index = 0; index < object.length; index++) {\n binary += String.fromCharCode(object[index])\n }\n return btoa(binary)\n}\n\n/**\n * The `!!binary` tag, represented as a `Uint8Array`.\n *\n * @category Tags\n */\nconst binaryTag = defineScalarTag('tag:yaml.org,2002:binary', {\n resolve: resolveYamlBinary,\n identify: (object) => Object.prototype.toString.call(object) === '[object Uint8Array]',\n represent: representYamlBinary\n})\n\nexport { binaryTag }\n","import { defineScalarTag, NOT_RESOLVED } from '../../tag.ts'\n\nconst YAML_DATE_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$')\n\nconst YAML_TIMESTAMP_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' +\n '-([0-9][0-9]?)' +\n '-([0-9][0-9]?)' +\n '(?:[Tt]|[ \\\\t]+)' +\n '([0-9][0-9]?)' +\n ':([0-9][0-9])' +\n ':([0-9][0-9])' +\n '(?:\\\\.([0-9]*))?' +\n '(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)' +\n '(?::([0-9][0-9]))?))?$')\n\nfunction makeUtcDate (\n year: number,\n month: number,\n day: number,\n hour = 0,\n minute = 0,\n second = 0,\n fraction = 0\n) {\n const date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction))\n\n // Date.UTC() treats years 0..99 as 1900..1999. Restore the parsed YAML year\n // before validating calendar normalization, e.g. reject 0001-02-29.\n date.setUTCFullYear(year, month, day)\n\n return date\n}\n\nfunction resolveYamlTimestamp (source: string) {\n let match = YAML_DATE_REGEXP.exec(source)\n if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(source)\n if (match === null) return NOT_RESOLVED\n\n const year = +(match[1])\n const month = +(match[2]) - 1\n const day = +(match[3])\n\n // Date-only form (`YYYY-MM-DD`) has no time captures.\n if (!match[4]) {\n const date = makeUtcDate(year, month, day)\n // Reject dates that JS would normalize, e.g. 2023-02-29 -> 2023-03-01.\n if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month || date.getUTCDate() !== day) {\n return NOT_RESOLVED\n }\n return date\n }\n\n const hour = +(match[4])\n const minute = +(match[5])\n const second = +(match[6])\n let fraction = 0\n\n // Reject times that JS would normalize into the next minute/hour/day.\n if (hour > 23 || minute > 59 || second > 59) return NOT_RESOLVED\n\n if (match[7]) {\n let value = match[7].slice(0, 3)\n while (value.length < 3) value += '0'\n fraction = +value\n }\n\n const date = makeUtcDate(year, month, day, hour, minute, second, fraction)\n\n // Reject invalid calendar dates before applying timezone offset.\n if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month || date.getUTCDate() !== day) {\n return NOT_RESOLVED\n }\n\n if (match[9]) {\n const offsetHour = +(match[10])\n const offsetMinute = +(match[11] || 0)\n // Reject timezone offsets that JS date arithmetic would otherwise accept.\n if (offsetHour > 23 || offsetMinute > 59) return NOT_RESOLVED\n\n const offset = (offsetHour * 60 + offsetMinute) * 60000\n date.setTime(date.getTime() - (match[9] === '-' ? -offset : offset))\n }\n\n return date\n}\n\n/**\n * The YAML 1.1 `!!timestamp` tag, represented as a JavaScript `Date`.\n *\n * @category Tags\n */\nconst timestampTag = defineScalarTag('tag:yaml.org,2002:timestamp', {\n implicit: true,\n // Both patterns start with a 4-digit year, so source.charAt(0) is always a digit.\n implicitFirstChars: [...'0123456789'],\n resolve: resolveYamlTimestamp,\n identify: (object) => object instanceof Date,\n represent: (object: Date) => object.toISOString()\n})\n\nexport { timestampTag }\n","import { defineSequenceTag } from '../../tag.ts'\n\n/** @category Tags */\nconst seqTag = defineSequenceTag('tag:yaml.org,2002:seq', {\n create: () => [] as unknown[],\n addItem: (container, item) => {\n container.push(item)\n },\n identify: Array.isArray\n})\n\nexport { seqTag }\n","function isPlainObject (data: unknown): boolean {\n if (data === null || typeof data !== 'object' || Array.isArray(data)) return false\n const prototype = Object.getPrototypeOf(data)\n return prototype === null || prototype === Object.prototype\n}\n\n// Project `object` onto `keys`. Absent keys are skipped (so the result can be\n// safely spread over defaults without clobbering them with `undefined`), hence\n// the `Partial` return.\nfunction pick<T extends object, K extends keyof T> (object: T, keys: readonly K[]): Partial<Pick<T, K>> {\n const result: Partial<Pick<T, K>> = {}\n for (const key of keys) {\n if (object[key] !== undefined) result[key] = object[key]\n }\n return result\n}\n\nexport {\n isPlainObject,\n pick\n}\n","import { defineSequenceTag } from '../../tag.ts'\nimport { isPlainObject } from '../../common/object.ts'\n\n/**\n * Provided only for YAML 1.1 compatibility and supported by the loader only.\n * JavaScript has no dedicated class to represent this type, so it cannot be\n * identified and dumped.\n *\n * ```yaml\n * !!omap\n * - one: 1\n * - two: 2\n * ```\n *\n * is loaded as\n *\n * ```javascript\n * [\n * { one: 1 },\n * { two: 2 }\n * ]\n * ```\n *\n * @category Tags\n */\nconst omapTag = defineSequenceTag('tag:yaml.org,2002:omap', {\n create: (): { list: unknown[]; seen: Set<unknown> } => ({ list: [], seen: new Set() }),\n addItem: (carrier, item) => {\n let key: unknown\n\n if (item instanceof Map) {\n if (item.size !== 1) return 'cannot resolve an ordered map item'\n key = item.keys().next().value\n } else if (isPlainObject(item)) {\n const itemKeys = Object.keys(item as Record<string, unknown>)\n if (itemKeys.length !== 1) return 'cannot resolve an ordered map item'\n key = itemKeys[0]\n } else {\n return 'cannot resolve an ordered map item'\n }\n\n if (carrier.seen.has(key)) return 'duplicate key in ordered map'\n carrier.seen.add(key)\n carrier.list.push(item)\n return ''\n },\n finalize: (carrier): unknown[] => carrier.list,\n identify: () => false\n})\n\nexport { omapTag }\n","import { defineSequenceTag } from '../../tag.ts'\n\n/**\n * Provided only for YAML 1.1 compatibility and supported by the loader only.\n * JavaScript has no dedicated class to represent this type, so it cannot be\n * identified and dumped.\n *\n * ```yaml\n * !!pairs\n * - one: 1\n * - two: 2\n * ```\n *\n * is loaded as\n *\n * ```javascript\n * [\n * ['one', 1],\n * ['two', 2]\n * ]\n * ```\n *\n * @category Tags\n */\nconst pairsTag = defineSequenceTag('tag:yaml.org,2002:pairs', {\n create: () => [] as [unknown, unknown][],\n addItem: (container, item) => {\n if (item instanceof Map) {\n if (item.size !== 1) return 'cannot resolve a pairs item'\n\n container.push(item.entries().next().value!)\n return ''\n }\n\n if (Object.prototype.toString.call(item) !== '[object Object]') {\n return 'cannot resolve a pairs item'\n }\n\n const object = item as Record<string, unknown>\n const keys = Object.keys(object)\n\n if (keys.length !== 1) return 'cannot resolve a pairs item'\n\n container.push([keys[0], object[keys[0]]])\n return ''\n },\n identify: () => false\n})\n\nexport { pairsTag }\n","import { defineMappingTag } from '../../tag.ts'\nimport { isPlainObject } from '../../common/object.ts'\n\n/**\n * This is the default mapping implementation. It uses `{}` objects and has only\n * partial functionality due to language limitations. This choice was made\n * because users expect to get JavaScript objects, and it was left unchanged to\n * avoid too many breaking changes in the v5 release.\n *\n * Side effects:\n *\n * - `Object.hasOwn()` checks or `for...of` loops are required for safe use (to\n * avoid falling through to prototypes).\n * - Only scalar string keys are supported properly.\n * - Other scalar keys, such as `null` and numbers, are converted to strings.\n * This is historical behaviour, and it can cause side effects such as\n * problems with `!!merge`.\n *\n * Note that non-string scalar keys may be deprecated in future versions.\n *\n * Ideally, use {@link realMapTag} instead.\n *\n * @category Tags\n */\nconst mapTag = defineMappingTag('tag:yaml.org,2002:map', {\n create: (): Record<string, unknown> => ({}),\n identify: isPlainObject,\n // Dump side: wrap the plain object into the canonical `Map` form the writer\n // walks. Shallow — keys/values stay references to the originals.\n represent: (o: Record<string, unknown>) => {\n const map = new Map<string, unknown>()\n for (const key of Object.keys(o)) map.set(key, o[key])\n return map\n },\n addPair: (container, key, value) => {\n if (key !== null && typeof key === 'object') {\n return 'object-based map does not support complex keys'\n }\n const normalizedKey = String(key)\n if (normalizedKey === '__proto__') {\n // Define as an own data property so a literal `__proto__` key stays data\n // and never invokes the prototype setter.\n Object.defineProperty(container, normalizedKey, {\n value, enumerable: true, configurable: true, writable: true\n })\n } else {\n container[normalizedKey] = value\n }\n return ''\n },\n // hasOwn, not `in`: a plain object inherits `toString` and friends.\n has: (container, key) => {\n if (key !== null && typeof key === 'object') return false\n return Object.prototype.hasOwnProperty.call(container, String(key))\n },\n keys: (container) => Object.keys(container),\n get: (container, key) => {\n const normalizedKey = String(key)\n // key is from `keys()` only. Strong check is not needed, but leave for sure.\n if (!Object.prototype.hasOwnProperty.call(container, normalizedKey)) return null\n return container[normalizedKey]\n }\n})\n\nexport { mapTag, isPlainObject }\n","import { defineMappingTag } from '../../tag.ts'\n\n/**\n * The YAML 1.1 `!!set` tag, represented as a JavaScript `Set`.\n *\n * @category Tags\n */\nconst setTag = defineMappingTag('tag:yaml.org,2002:set', {\n create: () => new Set<unknown>(),\n identify: (data) => data instanceof Set,\n represent: (data: Set<unknown>) => {\n const map = new Map<unknown, null>()\n for (const key of data) map.set(key, null)\n return map\n },\n addPair: (container, key, value) => {\n if (value !== null) return 'cannot resolve a set item'\n container.add(key)\n return ''\n },\n has: (container, key) => container.has(key),\n keys: (container) => container.keys(),\n get: () => null\n})\n\nexport { setTag }\n","import {\n NOT_RESOLVED,\n type MappingTagDefinition,\n type ScalarTagDefinition,\n type SequenceTagDefinition,\n type TagDefinition\n} from './tag.ts'\nimport { strTag } from './tag/scalar/str.ts'\nimport { nullCoreTag } from './tag/scalar/null_core.ts'\nimport { nullJsonTag } from './tag/scalar/null_json.ts'\nimport { nullYaml11Tag } from './tag/scalar/null_yaml11.ts'\nimport { boolCoreTag } from './tag/scalar/bool_core.ts'\nimport { boolJsonTag } from './tag/scalar/bool_json.ts'\nimport { boolYaml11Tag } from './tag/scalar/bool_yaml11.ts'\nimport { intCoreTag } from './tag/scalar/int_core.ts'\nimport { intJsonTag } from './tag/scalar/int_json.ts'\nimport { intYaml11Tag } from './tag/scalar/int_yaml11.ts'\nimport { floatCoreTag } from './tag/scalar/float_core.ts'\nimport { floatJsonTag } from './tag/scalar/float_json.ts'\nimport { floatYaml11Tag } from './tag/scalar/float_yaml11.ts'\nimport { mergeTag } from './tag/scalar/merge.ts'\nimport { binaryTag } from './tag/scalar/binary.ts'\nimport { timestampTag } from './tag/scalar/timestamp.ts'\nimport { seqTag } from './tag/sequence/seq.ts'\nimport { omapTag } from './tag/sequence/omap.ts'\nimport { pairsTag } from './tag/sequence/pairs.ts'\nimport { mapTag } from './tag/mapping/map.ts'\nimport { setTag } from './tag/mapping/set.ts'\n\ninterface TagDefinitionMap {\n scalar: Record<string, ScalarTagDefinition>\n sequence: Record<string, SequenceTagDefinition>\n mapping: Record<string, MappingTagDefinition>\n}\n\ninterface TagDefinitionListMap {\n scalar: ScalarTagDefinition[]\n sequence: SequenceTagDefinition[]\n mapping: MappingTagDefinition[]\n}\n\nfunction createTagDefinitionMap (): TagDefinitionMap {\n return {\n scalar: Object.create(null),\n sequence: Object.create(null),\n mapping: Object.create(null)\n }\n}\n\nfunction createTagDefinitionListMap (): TagDefinitionListMap {\n return {\n scalar: [],\n sequence: [],\n mapping: []\n }\n}\n\nfunction compileTags (tags: readonly TagDefinition[]) {\n const result: TagDefinition[] = []\n\n for (const tag of tags) {\n let index = result.length\n\n for (let previousIndex = 0; previousIndex < result.length; previousIndex++) {\n const previous = result[previousIndex]\n\n if (previous.nodeKind === tag.nodeKind &&\n previous.tagName === tag.tagName &&\n previous.matchByTagPrefix === tag.matchByTagPrefix) {\n index = previousIndex\n break\n }\n }\n\n result[index] = tag\n }\n\n return result\n}\n\n/**\n * Controls tag resolution when loading and type selection when dumping.\n *\n * @category Schemas\n */\nclass Schema {\n readonly tags: readonly TagDefinition[]\n /** @internal */\n readonly implicitScalarTags: readonly ScalarTagDefinition[]\n\n /**\n * Dispatch implicit scalar resolvers by `source.charAt(0)`. Each bucket holds\n * the resolvers that may match that key, in schema order; a key absent from\n * the map uses\n * {@link Schema.implicitScalarAnyFirstChar}\n * (resolvers that declared no first-char constraint, so they apply to any\n * first character).\n */\n private readonly implicitScalarByFirstChar: ReadonlyMap<string, readonly ScalarTagDefinition[]>\n private readonly implicitScalarAnyFirstChar: readonly ScalarTagDefinition[]\n\n /**\n * The default scalar tag (`!!str`), resolved once so the composer's fallback\n * for unresolved plain scalars avoids a keyed lookup per scalar.\n *\n * @internal\n */\n readonly defaultScalarTag: ScalarTagDefinition\n\n /**\n * The default container tags (`!!seq` / `!!map`), used by the dumper: when a\n * value is identified by its default tag, the tag is implicit and not\n * printed. Undefined if the schema does not define them (then such values\n * can't be dumped).\n *\n * @internal\n */\n readonly defaultSequenceTag: SequenceTagDefinition | undefined\n /** @internal */\n readonly defaultMappingTag: MappingTagDefinition | undefined\n private readonly exact: TagDefinitionMap\n private readonly prefix: TagDefinitionListMap\n\n constructor (tags: readonly TagDefinition[]) {\n const compiledTags = compileTags(tags)\n const implicitScalarTags: ScalarTagDefinition[] = []\n const exact = createTagDefinitionMap()\n const prefix = createTagDefinitionListMap()\n\n for (const tag of compiledTags) {\n if (tag.nodeKind === 'scalar' && tag.implicit) {\n if (tag.matchByTagPrefix) {\n throw new Error('Implicit scalar tags cannot match by tag prefix')\n }\n\n implicitScalarTags.push(tag)\n }\n\n switch (tag.nodeKind) {\n case 'scalar':\n if (tag.matchByTagPrefix) prefix.scalar.push(tag)\n else exact.scalar[tag.tagName] = tag\n break\n case 'sequence':\n if (tag.matchByTagPrefix) prefix.sequence.push(tag)\n else exact.sequence[tag.tagName] = tag\n break\n case 'mapping':\n if (tag.matchByTagPrefix) prefix.mapping.push(tag)\n else exact.mapping[tag.tagName] = tag\n break\n }\n }\n\n const implicitScalarAnyFirstChar = implicitScalarTags.filter(tag => tag.implicitFirstChars === null)\n\n const keys = new Set<string>()\n for (const tag of implicitScalarTags) {\n if (tag.implicitFirstChars !== null) {\n for (const key of tag.implicitFirstChars) keys.add(key)\n }\n }\n\n const implicitScalarByFirstChar = new Map<string, ScalarTagDefinition[]>()\n for (const key of keys) {\n implicitScalarByFirstChar.set(key, implicitScalarTags.filter(tag =>\n tag.implicitFirstChars === null || tag.implicitFirstChars.indexOf(key) !== -1))\n }\n\n const defaultScalarTag = exact.scalar['tag:yaml.org,2002:str']\n if (!defaultScalarTag) throw new Error('schema does not define the default scalar tag (tag:yaml.org,2002:str)')\n\n this.tags = compiledTags\n this.implicitScalarTags = implicitScalarTags\n this.implicitScalarByFirstChar = implicitScalarByFirstChar\n this.implicitScalarAnyFirstChar = implicitScalarAnyFirstChar\n this.defaultScalarTag = defaultScalarTag\n this.defaultSequenceTag = exact.sequence['tag:yaml.org,2002:seq']\n this.defaultMappingTag = exact.mapping['tag:yaml.org,2002:map']\n this.exact = exact\n this.prefix = prefix\n }\n\n /** @internal */\n lookupScalarTag (tagName: string): ScalarTagDefinition | undefined {\n const exactTag = this.exact.scalar[tagName]\n if (exactTag) return exactTag\n\n for (const tag of this.prefix.scalar) {\n if (tagName.startsWith(tag.tagName)) return tag\n }\n\n return undefined\n }\n\n /** @internal */\n lookupSequenceTag (tagName: string): SequenceTagDefinition | undefined {\n const exactTag = this.exact.sequence[tagName]\n if (exactTag) return exactTag\n\n for (const tag of this.prefix.sequence) {\n if (tagName.startsWith(tag.tagName)) return tag\n }\n\n return undefined\n }\n\n /** @internal */\n lookupMappingTag (tagName: string): MappingTagDefinition | undefined {\n const exactTag = this.exact.mapping[tagName]\n if (exactTag) return exactTag\n\n for (const tag of this.prefix.mapping) {\n if (tagName.startsWith(tag.tagName)) return tag\n }\n\n return undefined\n }\n\n /** @internal */\n resolveImplicitScalarTag (source: string): { value: unknown, tag: ScalarTagDefinition } {\n const candidates = this.implicitScalarByFirstChar.get(source.charAt(0)) ??\n this.implicitScalarAnyFirstChar\n\n for (const tag of candidates) {\n const value = tag.resolve(source, false, tag.tagName)\n if (value !== NOT_RESOLVED) return { value, tag }\n }\n\n const tag = this.defaultScalarTag\n return { value: tag.resolve(source, false, tag.tagName), tag }\n }\n\n /**\n * Creates a new schema with the specified tags added. If a tag already\n * exists, it is replaced by the specified tag.\n *\n * @example\n *\n * ```javascript\n * import { CORE_SCHEMA, mergeTag, realMapTag } from 'js-yaml'\n *\n * const schema = CORE_SCHEMA.withTags(mergeTag, realMapTag)\n * ```\n */\n withTags (...tags: Array<TagDefinition | readonly TagDefinition[]>): Schema {\n let flatTags: TagDefinition[] = []\n for (const tag of tags) flatTags = flatTags.concat(tag)\n\n return new Schema([...this.tags, ...flatTags])\n }\n}\n\n/**\n * The YAML 1.2 Failsafe Schema: strings, sequences, and mappings.\n *\n * @category Schemas\n */\nconst FAILSAFE_SCHEMA = new Schema([\n strTag,\n seqTag,\n mapTag\n])\n\n/**\n * The YAML 1.2 JSON Schema. It uses JSON scalar forms while retaining YAML\n * collection syntax.\n *\n * @category Schemas\n */\nconst JSON_SCHEMA = new Schema([\n ...FAILSAFE_SCHEMA.tags,\n nullJsonTag,\n boolJsonTag,\n intJsonTag,\n floatJsonTag\n])\n\n/**\n * The default schema for the loaders. Note, {@link CORE_SCHEMA} comes\n * without the `!!merge` tag. You can easily enable it if needed.\n *\n * @example\n * Enable {@link mergeTag}:\n *\n * ```javascript\n * import { load, CORE_SCHEMA, mergeTag } from 'js-yaml'\n *\n * try {\n * load(data, { schema: CORE_SCHEMA.withTags(mergeTag) })\n * } catch (e) {\n * console.error(e)\n * }\n * ```\n *\n * @category Schemas\n */\nconst CORE_SCHEMA = new Schema([\n ...FAILSAFE_SCHEMA.tags,\n nullCoreTag,\n boolCoreTag,\n intCoreTag,\n floatCoreTag\n])\n\n/**\n * YAML 1.1-compatible schema.\n *\n * @category Schemas\n */\nconst YAML11_SCHEMA = new Schema([\n ...FAILSAFE_SCHEMA.tags,\n nullYaml11Tag,\n boolYaml11Tag,\n intYaml11Tag,\n floatYaml11Tag,\n timestampTag,\n mergeTag,\n binaryTag,\n omapTag,\n pairsTag,\n setTag\n])\n\n/**\n * The dumper schema for maximum compatibility. It combines all supported type\n * variants from YAML 1.1 and YAML 1.2 so strings matching any of them are\n * quoted. This makes the generated YAML more compatible with other parsers.\n *\n * The schema is based on YAML 1.1, but extends `!!int` and `!!float` to accept\n * both YAML 1.1 and Core Schema forms, since Core Schema supports some forms\n * that YAML 1.1 does not.\n *\n * @category Schemas\n */\nconst DUMP_SCHEMA = YAML11_SCHEMA.withTags(\n {\n ...intYaml11Tag,\n resolve: (source, isExplicit, tagName) => {\n const result = intYaml11Tag.resolve(source, isExplicit, tagName)\n return result === NOT_RESOLVED ? intCoreTag.resolve(source, isExplicit, tagName) : result\n }\n },\n {\n ...floatYaml11Tag,\n resolve: (source, isExplicit, tagName) => {\n const result = floatYaml11Tag.resolve(source, isExplicit, tagName)\n return result === NOT_RESOLVED ? floatCoreTag.resolve(source, isExplicit, tagName) : result\n }\n }\n)\n\nexport {\n Schema,\n FAILSAFE_SCHEMA,\n JSON_SCHEMA,\n CORE_SCHEMA,\n YAML11_SCHEMA,\n DUMP_SCHEMA\n}\n","import { defineMappingTag } from '../../tag.ts'\nimport { isPlainObject } from '../../common/object.ts'\n\n/**\n * Recommended when non-string keys are actually needed. It uses native\n * JavaScript `Map` objects, so keys keep their constructed types instead of\n * being converted to strings.\n *\n * It is not the default to avoid widespread breaking changes in existing\n * projects. `Map` has a different access API and does not pass deep equality\n * checks against `{}`-based fixtures. Alongside the other changes in v5,\n * making it the default was considered too disruptive.\n *\n * If these differences are acceptable for your project, we recommend using\n * {@link realMapTag} to guarantee the absence of problems and side effects.\n *\n * @example\n * Enable {@link realMapTag}:\n *\n * ```javascript\n * import { load, CORE_SCHEMA, realMapTag } from 'js-yaml'\n *\n * try {\n * load(data, { schema: CORE_SCHEMA.withTags(realMapTag) })\n * } catch (e) {\n * console.error(e)\n * }\n * ```\n *\n * @category Tags\n */\nconst realMapTag = defineMappingTag('tag:yaml.org,2002:map', {\n create: () => new Map<unknown, unknown>(),\n addPair: (container: Map<unknown, unknown>, key, value) => {\n container.set(key, value)\n return ''\n },\n has: (container: Map<unknown, unknown>, key) => container.has(key),\n keys: (container: Map<unknown, unknown>) => container.keys(),\n get: (container: Map<unknown, unknown>, key) => container.get(key),\n // Dump side: handle both a real `Map` and a plain object, so this tag fully\n // replaces the default map representation when dumping too.\n identify: (data) => data instanceof Map || isPlainObject(data),\n // Dump side: the canonical mapping form is a `Map`. A real `Map` passes\n // through untouched (keys keep their type); a plain object is wrapped\n // shallowly. Lossless — nothing is stringified.\n represent: (data) => {\n if (data instanceof Map) return data\n const map = new Map<unknown, unknown>()\n const obj = data as Record<string, unknown>\n for (const key of Object.keys(obj)) map.set(key, obj[key])\n return map\n }\n})\n\nexport { realMapTag }\n","import { defineMappingTag } from '../../tag.ts'\nimport { isPlainObject } from '../../common/object.ts'\n\n// Coerce a constructed key into the string identity a `{}` representation uses.\n// Returns null for a nested array key (an array element that is itself an\n// array), which would otherwise blow up exponentially when stringified via\n// aliases.\nfunction normalizeKey (key: unknown): string | null {\n if (Array.isArray(key)) {\n const array = Array.prototype.slice.call(key) as unknown[]\n\n for (let index = 0; index < array.length; index++) {\n if (Array.isArray(array[index])) return null\n\n if (typeof array[index] === 'object' &&\n Object.prototype.toString.call(array[index]) === '[object Object]') {\n array[index] = '[object Object]'\n }\n }\n\n return String(array)\n }\n\n if (typeof key === 'object' &&\n Object.prototype.toString.call(key) === '[object Object]') {\n return '[object Object]'\n }\n\n return String(key)\n}\n\n/**\n * This implementation exists solely to reproduce v4 behavior exactly. Its use\n * is strongly discouraged. If complex or non-string keys are needed, use\n * {@link realMapTag} instead.\n *\n * @category Tags\n */\nconst legacyMapTag = defineMappingTag('tag:yaml.org,2002:map', {\n create: (): Record<string, unknown> => ({}),\n identify: isPlainObject,\n // Dump side: wrap the plain object into the canonical `Map` form the writer\n // walks. Shallow — keys/values stay references to the originals.\n represent: (o: Record<string, unknown>) => {\n const map = new Map<string, unknown>()\n for (const key of Object.keys(o)) map.set(key, o[key])\n return map\n },\n addPair: (container, key, value) => {\n const normalizedKey = normalizeKey(key)\n if (normalizedKey === null) return 'nested arrays are not supported inside keys'\n if (normalizedKey === '__proto__') {\n // Define as an own data property so a literal `__proto__` key stays data\n // and never invokes the prototype setter.\n Object.defineProperty(container, normalizedKey, {\n value, enumerable: true, configurable: true, writable: true\n })\n } else {\n container[normalizedKey] = value\n }\n return ''\n },\n // hasOwn, not `in`: a plain object inherits `toString` and friends.\n has: (container, key) => {\n const normalizedKey = normalizeKey(key)\n return normalizedKey !== null && Object.prototype.hasOwnProperty.call(container, normalizedKey)\n },\n keys: (container) => Object.keys(container),\n get: (container, key) => {\n const normalizedKey = String(key)\n // key is from `keys()` only. Strong check is not needed, but leave for sure.\n if (!Object.prototype.hasOwnProperty.call(container, normalizedKey)) return null\n return container[normalizedKey]\n }\n})\n\nexport { legacyMapTag, isPlainObject }\n","export interface SnippetMark {\n name?: string | null\n buffer: string\n position: number\n line: number\n column: number\n snippet?: string | null\n}\n\ninterface SnippetOptions {\n maxLength?: number\n indent?: number\n linesBefore?: number\n linesAfter?: number\n}\n\nconst DEFAULT_SNIPPET_OPTIONS: Required<SnippetOptions> = {\n maxLength: 79,\n indent: 1,\n linesBefore: 3,\n linesAfter: 2\n}\n\n// get snippet for a single line, respecting maxLength\nfunction getLine (buffer: string, lineStart: number, lineEnd: number, position: number, maxLineLength: number) {\n let head = ''\n let tail = ''\n const maxHalfLength = Math.floor(maxLineLength / 2) - 1\n\n if (position - lineStart > maxHalfLength) {\n head = ' ... '\n lineStart = position - maxHalfLength + head.length\n }\n\n if (lineEnd - position > maxHalfLength) {\n tail = ' ...'\n lineEnd = position + maxHalfLength - tail.length\n }\n\n return {\n str: head + buffer.slice(lineStart, lineEnd).replace(/\\t/g, '→') + tail,\n pos: position - lineStart + head.length // relative position\n }\n}\n\nfunction padStart (string: string, max: number) {\n // max() protects from negativa value, to avoid exception.\n return ' '.repeat(Math.max(max - string.length, 0)) + string\n}\n\nfunction makeSnippet (mark: SnippetMark, options?: SnippetOptions) {\n if (!mark.buffer) return null\n\n const opts = { ...DEFAULT_SNIPPET_OPTIONS, ...options }\n\n const re = /\\r?\\n|\\r|\\0/g\n const lineStarts = [0]\n const lineEnds: number[] = []\n let match: RegExpExecArray | null\n let foundLineNo = -1\n\n while ((match = re.exec(mark.buffer))) {\n lineEnds.push(match.index)\n lineStarts.push(match.index + match[0].length)\n\n if (mark.position <= match.index && foundLineNo < 0) {\n foundLineNo = lineStarts.length - 2\n }\n }\n\n if (foundLineNo < 0) foundLineNo = lineStarts.length - 1\n\n let result = ''\n const lineNoLength = Math.min(mark.line + opts.linesAfter, lineEnds.length).toString().length\n const maxLineLength = opts.maxLength - (opts.indent + lineNoLength + 3)\n\n for (let i = 1; i <= opts.linesBefore; i++) {\n if (foundLineNo - i < 0) break\n const line = getLine(\n mark.buffer,\n lineStarts[foundLineNo - i],\n lineEnds[foundLineNo - i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]),\n maxLineLength\n )\n result = `${' '.repeat(opts.indent)}${padStart((mark.line - i + 1).toString(), lineNoLength)} | ${line.str}\\n${result}`\n }\n\n const line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength)\n result += `${' '.repeat(opts.indent)}${padStart((mark.line + 1).toString(), lineNoLength)} | ${line.str}\\n`\n result += `${'-'.repeat(opts.indent + lineNoLength + 3 + line.pos)}^\\n`\n\n for (let i = 1; i <= opts.linesAfter; i++) {\n if (foundLineNo + i >= lineEnds.length) break\n const line = getLine(\n mark.buffer,\n lineStarts[foundLineNo + i],\n lineEnds[foundLineNo + i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]),\n maxLineLength\n )\n result += `${' '.repeat(opts.indent)}${padStart((mark.line + i + 1).toString(), lineNoLength)} | ${line.str}\\n`\n }\n\n return result.replace(/\\n$/, '')\n}\n\nexport default makeSnippet\n","import makeSnippet, { type SnippetMark } from './snippet.ts'\n\n// YAML error class. http://stackoverflow.com/questions/8458984\n//\nfunction formatError (exception: YAMLException, compact?: boolean) {\n let where = ''\n\n if (!exception.mark) return exception.reason\n\n if (exception.mark.name) {\n where += `in \"${exception.mark.name}\" `\n }\n\n where += `(${exception.mark.line + 1}:${exception.mark.column + 1})`\n\n if (!compact && exception.mark.snippet) {\n where += `\\n\\n${exception.mark.snippet}`\n }\n\n return `${exception.reason} ${where}`\n}\n\n/**\n * A YAML error. Unlike an ordinary `Error`, it adds a source snippet showing\n * the location of the problem to the error message, when available.\n *\n * @category Main\n */\nclass YAMLException extends Error {\n reason: string\n mark?: SnippetMark\n\n /**\n * Optional `mark` contains source snippet data. Usually, use\n * {@link YAMLException.throwAt} instead of passing it directly.\n */\n constructor (reason: string, mark?: SnippetMark) {\n super()\n\n this.name = 'YAMLException'\n this.reason = reason\n this.mark = mark\n this.message = formatError(this, false)\n\n // Guard for ancient browsers\n if (Error.captureStackTrace) {\n // Include stack trace in error object,\n Error.captureStackTrace(this, this.constructor)\n }\n }\n\n /**\n * Returns the formatted error, omitting the source snippet in compact mode.\n */\n toString (compact?: boolean) {\n return `${this.name}: ${formatError(this, compact)}`\n }\n\n /**\n * Builds a YAMLException with a source snippet and throws it. `source` is\n * the raw input text; `position` is an offset into it.\n */\n static throwAt (source: string, position: number, message: string, filename = ''): never {\n let line = 0\n let lineStart = 0\n\n for (let index = 0; index < position; index++) {\n const ch = source.charCodeAt(index)\n\n if (ch === 0x0A/* LF */) {\n line++\n lineStart = index + 1\n } else if (ch === 0x0D/* CR */) {\n line++\n if (source.charCodeAt(index + 1) === 0x0A/* LF */) index++\n lineStart = index + 1\n }\n }\n\n const mark: SnippetMark = {\n name: filename,\n buffer: source,\n position,\n line,\n column: position - lineStart\n }\n\n mark.snippet = makeSnippet(mark)\n throw new YAMLException(message, mark)\n }\n}\n\nexport { YAMLException }\n","/** @category Events */\nconst EVENT_ID = {\n DOCUMENT: 1,\n SEQUENCE: 2,\n MAPPING: 3,\n SCALAR: 4,\n ALIAS: 5,\n POP: 6\n} as const\n\n/** @category Events */\ntype EventId = typeof EVENT_ID[keyof typeof EVENT_ID]\n\n/** @category Nodes */\nconst SCALAR_STYLE = {\n PLAIN: 1,\n SINGLE_QUOTED: 2,\n DOUBLE_QUOTED: 3,\n LITERAL_BLOCK: 4,\n FOLDED_BLOCK: 5\n} as const\n\n/** @category Nodes */\ntype ScalarStyle = typeof SCALAR_STYLE[keyof typeof SCALAR_STYLE]\n\n/** @category Nodes */\nconst COLLECTION_STYLE = {\n BLOCK: 1,\n FLOW: 2\n} as const\n\n/** @category Nodes */\ntype CollectionStyle = typeof COLLECTION_STYLE[keyof typeof COLLECTION_STYLE]\n\n/** @category Nodes */\nconst CHOMPING_MODE = {\n CLIP: 1,\n STRIP: 2,\n KEEP: 3\n} as const\n\n/** @category Nodes */\ntype ChompingMode = typeof CHOMPING_MODE[keyof typeof CHOMPING_MODE]\n\n/** @category Events */\ntype DocumentDirective =\n { kind: 'yaml', version: string } |\n { kind: 'tag', handle: string, prefix: string }\n\ntype TagHandlers = Record<string, string>\n\n/** @category Events */\ninterface DocumentEvent {\n type: typeof EVENT_ID.DOCUMENT\n explicitStart: boolean\n explicitEnd: boolean\n directives: DocumentDirective[]\n}\n\n/** @category Events */\ninterface SequenceEvent {\n type: typeof EVENT_ID.SEQUENCE\n start: number\n anchorStart: number\n anchorEnd: number\n tagStart: number\n tagEnd: number\n style: CollectionStyle\n}\n\n/** @category Events */\ninterface MappingEvent {\n type: typeof EVENT_ID.MAPPING\n start: number\n anchorStart: number\n anchorEnd: number\n tagStart: number\n tagEnd: number\n style: CollectionStyle\n}\n\n/**\n * A scalar whose decoded value can be read with {@link getScalarValue}.\n *\n * @category Events\n */\ninterface ScalarEvent {\n type: typeof EVENT_ID.SCALAR\n valueStart: number\n valueEnd: number\n anchorStart: number\n anchorEnd: number\n tagStart: number\n tagEnd: number\n style: ScalarStyle\n chomping: ChompingMode\n indent: number\n fast: boolean\n}\n\n/** @category Events */\ninterface AliasEvent {\n type: typeof EVENT_ID.ALIAS\n anchorStart: number\n anchorEnd: number\n}\n\n/**\n * Closes the most recently opened document, sequence, or mapping.\n *\n * @category Events\n */\ninterface PopEvent {\n type: typeof EVENT_ID.POP\n}\n\n/**\n * Source ranges are zero-based and end-exclusive; `-1` means absent.\n *\n * @category Events\n */\ntype Event =\n DocumentEvent |\n SequenceEvent |\n MappingEvent |\n ScalarEvent |\n AliasEvent |\n PopEvent\n\nexport {\n EVENT_ID,\n SCALAR_STYLE,\n COLLECTION_STYLE,\n CHOMPING_MODE,\n\n type EventId,\n type ScalarStyle,\n type CollectionStyle,\n type ChompingMode,\n\n type DocumentDirective,\n type TagHandlers,\n type DocumentEvent,\n type SequenceEvent,\n type MappingEvent,\n type ScalarEvent,\n type AliasEvent,\n type PopEvent,\n type Event\n}\n","import {\n SCALAR_STYLE,\n CHOMPING_MODE,\n type ScalarEvent\n} from './events.ts'\n\nconst NO_RANGE = -1\n\n// --- character helpers (mirrors src/loader.ts, kept self-contained here) ---\n\nfunction simpleEscapeSequence (c: number) {\n switch (c) {\n case 0x30/* 0 */: return '\\x00'\n case 0x61/* a */: return '\\x07'\n case 0x62/* b */: return '\\x08'\n case 0x74/* t */: return '\\x09'\n case 0x09/* Tab */: return '\\x09'\n case 0x6E/* n */: return '\\x0A'\n case 0x76/* v */: return '\\x0B'\n case 0x66/* f */: return '\\x0C'\n case 0x72/* r */: return '\\x0D'\n case 0x65/* e */: return '\\x1B'\n case 0x20/* Space */: return ' '\n case 0x22/* \" */: return '\\x22'\n case 0x2F/* / */: return '/'\n case 0x5C/* \\ */: return '\\x5C'\n case 0x4E/* N */: return '\\x85'\n case 0x5F/* _ */: return '\\xA0'\n case 0x4C/* L */: return '\\u2028'\n case 0x50/* P */: return '\\u2029'\n default: return ''\n }\n}\n\nconst simpleEscapeCheck = new Array(256)\nconst simpleEscapeMap = new Array(256)\nfor (let i = 0; i < 256; i++) {\n simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0\n simpleEscapeMap[i] = simpleEscapeSequence(i)\n}\n\nfunction charFromCodepoint (c: number) {\n if (c <= 0xFFFF) {\n return String.fromCharCode(c)\n }\n return String.fromCharCode(\n ((c - 0x010000) >> 10) + 0xD800,\n ((c - 0x010000) & 0x03FF) + 0xDC00\n )\n}\n\nfunction fromHexCode (c: number) {\n if (c >= 0x30/* 0 */ && c <= 0x39/* 9 */) return c - 0x30\n const lc = c | 0x20\n // Double-quoted scalar ranges are validated by parser.ts before cooking.\n return lc - 0x61 + 10\n}\n\nfunction escapedHexLen (c: number) {\n if (c === 0x78/* x */) return 2\n if (c === 0x75/* u */) return 4\n // Double-quoted scalar ranges are validated by parser.ts before cooking.\n return 8\n}\n\n// --- line folding helpers ---\n\n// Skip a run of line breaks plus the leading whitespace of the following\n// lines, returning the number of line breaks consumed and the new position.\nfunction skipFoldedBreaks (input: string, position: number, end: number) {\n let breaks = 0\n\n while (position < end) {\n const ch = input.charCodeAt(position)\n\n if (ch === 0x0A/* LF */) {\n breaks++\n position++\n } else if (ch === 0x0D/* CR */) {\n breaks++\n position++\n if (input.charCodeAt(position) === 0x0A/* LF */) position++\n } else if (ch === 0x20/* Space */ || ch === 0x09/* Tab */) {\n position++\n } else {\n break\n }\n }\n\n return { position, breaks }\n}\n\n// Folding of line breaks between content chunks: a single break becomes a\n// space, several breaks become (count - 1) newlines.\nfunction foldedBreaks (count: number) {\n if (count === 1) return ' '\n // Called only after skipFoldedBreaks() consumed at least one line break.\n return '\\n'.repeat(count - 1)\n}\n\n// --- per-style extractors ---\n\nfunction getPlainValue (input: string, start: number, end: number) {\n let result = ''\n let position = start\n let captureStart = start\n let captureEnd = start\n\n while (position < end) {\n const ch = input.charCodeAt(position)\n\n if (ch === 0x0A/* LF */ || ch === 0x0D/* CR */) {\n result += input.slice(captureStart, captureEnd)\n const fold = skipFoldedBreaks(input, position, end)\n result += foldedBreaks(fold.breaks)\n position = captureStart = captureEnd = fold.position\n } else {\n position++\n if (ch !== 0x20/* Space */ && ch !== 0x09/* Tab */) captureEnd = position\n }\n }\n\n return result + input.slice(captureStart, captureEnd)\n}\n\nfunction getSingleQuotedValue (input: string, start: number, end: number) {\n let result = ''\n let position = start\n let captureStart = start\n let captureEnd = start\n\n while (position < end) {\n const ch = input.charCodeAt(position)\n\n if (ch === 0x27/* ' */) {\n // Within the stored range every quote is part of an escaped '' pair.\n result += input.slice(captureStart, position) + \"'\"\n position += 2\n captureStart = captureEnd = position\n } else if (ch === 0x0A/* LF */ || ch === 0x0D/* CR */) {\n result += input.slice(captureStart, captureEnd)\n const fold = skipFoldedBreaks(input, position, end)\n result += foldedBreaks(fold.breaks)\n position = captureStart = captureEnd = fold.position\n } else {\n position++\n if (ch !== 0x20/* Space */ && ch !== 0x09/* Tab */) captureEnd = position\n }\n }\n\n // Whitespace right before the closing quote is significant (it is only\n // stripped when followed by a line break).\n return result + input.slice(captureStart, end)\n}\n\nfunction getDoubleQuotedValue (input: string, start: number, end: number) {\n let result = ''\n let position = start\n let captureStart = start\n let captureEnd = start\n\n while (position < end) {\n const ch = input.charCodeAt(position)\n\n if (ch === 0x5C/* \\ */) {\n result += input.slice(captureStart, position)\n position++\n const escaped = input.charCodeAt(position)\n\n if (escaped === 0x0A/* LF */ || escaped === 0x0D/* CR */) {\n // Escaped line break: a line continuation that joins with nothing.\n position = skipFoldedBreaks(input, position, end).position\n } else if (escaped < 256 && simpleEscapeCheck[escaped]) {\n result += simpleEscapeMap[escaped]\n position++\n } else {\n // parser.ts has already rejected unknown escapes and invalid hex digits.\n let hexLength = escapedHexLen(escaped)\n let hexResult = 0\n\n for (; hexLength > 0; hexLength--) {\n position++\n const digit = fromHexCode(input.charCodeAt(position))\n hexResult = (hexResult << 4) + digit\n }\n\n result += charFromCodepoint(hexResult)\n position++\n }\n\n captureStart = captureEnd = position\n } else if (ch === 0x0A/* LF */ || ch === 0x0D/* CR */) {\n result += input.slice(captureStart, captureEnd)\n const fold = skipFoldedBreaks(input, position, end)\n result += foldedBreaks(fold.breaks)\n position = captureStart = captureEnd = fold.position\n } else {\n position++\n if (ch !== 0x20/* Space */ && ch !== 0x09/* Tab */) captureEnd = position\n }\n }\n\n return result + input.slice(captureStart, end)\n}\n\nfunction getBlockValue (\n input: string,\n start: number,\n end: number,\n indent: number,\n chomping: number,\n folded: boolean\n) {\n const textIndent = indent < 0 ? 0 : indent\n // The range starts at column 0 of the first line and includes every line\n // break, including those of trailing blank lines.\n const region = input.slice(start, end).replace(/\\r\\n?/g, '\\n')\n // An empty range is a block with no lines at all (e.g. an empty `|+`) and\n // must stay empty; a naive split would invent a phantom blank line. Otherwise\n // a trailing line break leaves a trailing '' from split() that is not a real\n // line (just the terminator of the last one), so drop it. Interior blank\n // lines are kept.\n const lines = region === ''\n ? []\n : (region.endsWith('\\n') ? region.slice(0, -1) : region).split('\\n')\n\n let result = ''\n let didReadContent = false\n let emptyLines = 0\n let atMoreIndented = false\n\n for (const line of lines) {\n // Whitespace beyond the content indentation is part of the content, so the\n // indentation scan stops at textIndent. A line is empty only when nothing\n // remains after the (capped) indentation.\n // indent < 0 means no content line was detected (a wholly blank block), so\n // every line is an empty line.\n let column = 0\n while (column < textIndent && line.charCodeAt(column) === 0x20/* Space */) column++\n\n if (indent < 0 || column >= line.length) {\n emptyLines++\n continue\n }\n\n const content = line.slice(textIndent)\n const first = content.charCodeAt(0)\n\n if (folded) {\n if (first === 0x20/* Space */ || first === 0x09/* Tab */) {\n // More-indented lines are not folded.\n atMoreIndented = true\n result += '\\n'.repeat(didReadContent ? 1 + emptyLines : emptyLines)\n } else if (atMoreIndented) {\n atMoreIndented = false\n result += '\\n'.repeat(emptyLines + 1)\n } else if (emptyLines === 0) {\n if (didReadContent) result += ' '\n } else {\n result += '\\n'.repeat(emptyLines)\n }\n } else {\n result += '\\n'.repeat(didReadContent ? 1 + emptyLines : emptyLines)\n }\n\n result += content\n didReadContent = true\n emptyLines = 0\n }\n\n if (chomping === CHOMPING_MODE.KEEP) {\n result += '\\n'.repeat(didReadContent ? 1 + emptyLines : emptyLines)\n } else if (chomping !== CHOMPING_MODE.STRIP) {\n if (didReadContent) result += '\\n'\n }\n\n return result\n}\n\n/**\n * Decodes the scalar referenced by event offsets in `input`.\n *\n * @category Events\n */\nfunction getScalarValue (input: string, scalar: ScalarEvent): string {\n if (scalar.valueStart === NO_RANGE) return ''\n\n const { valueStart, valueEnd } = scalar\n\n // Fast path: the parser marked this scalar as a verbatim slice of the input\n // (single-line plain / quoted with no escapes or folded breaks), so the\n // per-style char loop below would just reproduce the slice.\n if (scalar.fast) return input.slice(valueStart, valueEnd)\n\n switch (scalar.style) {\n case SCALAR_STYLE.SINGLE_QUOTED:\n return getSingleQuotedValue(input, valueStart, valueEnd)\n case SCALAR_STYLE.DOUBLE_QUOTED:\n return getDoubleQuotedValue(input, valueStart, valueEnd)\n case SCALAR_STYLE.LITERAL_BLOCK:\n return getBlockValue(input, valueStart, valueEnd, scalar.indent, scalar.chomping, false)\n case SCALAR_STYLE.FOLDED_BLOCK:\n return getBlockValue(input, valueStart, valueEnd, scalar.indent, scalar.chomping, true)\n default:\n return getPlainValue(input, valueStart, valueEnd)\n }\n}\n\nexport {\n getScalarValue\n}\n","const DEFAULT_TAG_HANDLERS: Readonly<Record<string, string>> = Object.assign(\n Object.create(null),\n {\n '!': '!',\n '!!': 'tag:yaml.org,2002:'\n }\n)\n\n// YAML 1.2.2, [40] ns-tag-char and [39] ns-uri-char, apart from alphanumerics.\nconst TAG_SUFFIX_CHARS = \"-#;/?:@&=+$_.~*'()\"\nconst TAG_URI_CHARS = TAG_SUFFIX_CHARS + '!,[]'\nconst HEX = '0123456789ABCDEF'\n\nfunction percentByte (byte: number) {\n return '%' + HEX[byte >> 4] + HEX[byte & 0x0F]\n}\n\nfunction tagPercentEncode (source: string, isSuffix: boolean) {\n const allowed = isSuffix ? TAG_SUFFIX_CHARS : TAG_URI_CHARS\n let result = ''\n\n for (let index = 0; index < source.length; index++) {\n let ch = source.charCodeAt(index)\n\n if ((ch >= 0x30 && ch <= 0x39) ||\n (ch >= 0x41 && ch <= 0x5A) ||\n (ch >= 0x61 && ch <= 0x7A) ||\n allowed.includes(source[index])) {\n result += source[index]\n continue\n }\n\n if (ch >= 0xD800 && ch <= 0xDBFF) {\n ch = 0x10000 + ((ch & 0x3FF) << 10) + (source.charCodeAt(++index) & 0x3FF)\n }\n\n if (ch < 0x80) {\n result += percentByte(ch)\n } else if (ch < 0x800) {\n result += percentByte(0xC0 | (ch >> 6)) + percentByte(0x80 | (ch & 0x3F))\n } else if (ch < 0x10000) {\n result += percentByte(0xE0 | (ch >> 12)) +\n percentByte(0x80 | ((ch >> 6) & 0x3F)) + percentByte(0x80 | (ch & 0x3F))\n } else {\n result += percentByte(0xF0 | (ch >> 18)) +\n percentByte(0x80 | ((ch >> 12) & 0x3F)) +\n percentByte(0x80 | ((ch >> 6) & 0x3F)) + percentByte(0x80 | (ch & 0x3F))\n }\n }\n\n return result\n}\n\nfunction tagPercentDecode (source: string) {\n let result = ''\n let index = 0\n\n // Convert escaped UTF-8 bytes without validating malformed encodings.\n while (index < source.length) {\n if (source.charCodeAt(index) !== 0x25/* % */) {\n result += source[index++]\n continue\n }\n\n let ch = parseInt(source.slice(index + 1, index + 3), 16)\n index += 3\n\n if (ch >= 0xC0) {\n let remaining = ch < 0xE0 ? 1 : ch < 0xF0 ? 2 : 3\n ch &= (1 << (6 - remaining)) - 1\n\n while (remaining-- > 0) {\n ch = (ch << 6) | (parseInt(source.slice(index + 1, index + 3), 16) & 0x3F)\n index += 3\n }\n }\n\n if (ch < 0x10000) {\n result += String.fromCharCode(ch)\n } else {\n ch -= 0x10000\n result += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF))\n }\n }\n\n return result\n}\n\nfunction tagNameFull (rawTag: string, tagHandlers?: Readonly<Record<string, string>>) {\n if (rawTag.startsWith('!<') && rawTag.endsWith('>')) {\n return tagPercentDecode(rawTag.slice(2, -1))\n }\n\n const handleEnd = rawTag.indexOf('!', 1)\n const handle = handleEnd === -1 ? '!' : rawTag.slice(0, handleEnd + 1)\n const prefix = tagHandlers?.[handle] ?? DEFAULT_TAG_HANDLERS[handle] ?? handle\n\n return tagPercentDecode(prefix) + tagPercentDecode(rawTag.slice(handle.length))\n}\n\nfunction tagNameShort (fullTag: string) {\n let tag = fullTag\n\n if (tag.charCodeAt(0) === 0x21) {\n tag = tag.slice(1)\n return `!${tagPercentEncode(tag, true)}`\n }\n\n if (tag.slice(0, 18) === 'tag:yaml.org,2002:') {\n return `!!${tagPercentEncode(tag.slice(18), true)}`\n }\n\n return `!<${tagPercentEncode(tag, false)}>`\n}\n\nexport {\n tagNameFull,\n tagNameShort\n}\n","import {\n EVENT_ID,\n SCALAR_STYLE,\n type Event,\n type TagHandlers,\n type MappingEvent,\n type ScalarEvent,\n type SequenceEvent\n} from './events.ts'\nimport { getScalarValue } from './parser_scalar.ts'\nimport { CORE_SCHEMA, type Schema } from '../schema.ts'\nimport {\n NOT_RESOLVED,\n type MappingTagDefinition,\n type ScalarTagDefinition,\n type SequenceTagDefinition\n} from '../tag.ts'\nimport { YAMLException } from '../common/exception.ts'\nimport { tagNameFull } from '../common/tagname.ts'\n\nconst NO_RANGE = -1\n\nconst MERGE_TAG_NAME = 'tag:yaml.org,2002:merge'\n\ninterface DocumentFrame {\n kind: 'document'\n position: number\n value: unknown\n hasValue: boolean\n}\n\ninterface SequenceFrame {\n kind: 'sequence'\n position: number\n value: any\n tag: SequenceTagDefinition<any, any>\n anchor: Anchor | null\n index: number\n}\n\ninterface MappingFrame {\n kind: 'mapping'\n position: number\n value: any\n tag: MappingTagDefinition<any, any>\n anchor: Anchor | null\n key: unknown\n keyPosition: number\n hasKey: boolean\n // The key slot drops its tag, but `<<` is recognized by tag, not by value.\n keyIsMerge: boolean\n // Keys brought in by a merge that an explicit pair is still allowed to\n // override. Lazily allocated: stays null for mappings without `<<`.\n overridable: Set<unknown> | null\n}\n\ntype Frame = DocumentFrame | SequenceFrame | MappingFrame\n\ntype AnyTag = ScalarTagDefinition | SequenceTagDefinition<any, any> | MappingTagDefinition<any, any>\n\ninterface ValueAndTag {\n value: unknown\n tag: AnyTag\n}\n\ninterface Anchor {\n value: unknown\n tag: AnyTag\n isValueFinal: boolean\n}\n\n/** @category Events */\ninterface ConstructorOptions {\n /** Source text referenced by offsets in `events`. */\n source: string\n filename?: string\n\n /**\n * Schema to use.\n *\n * @defaultValue {@link CORE_SCHEMA}\n */\n schema?: Schema\n\n /**\n * Enables compatibility with `JSON.parse` behavior. Duplicate keys in a\n * mapping override values instead of throwing an error.\n *\n * @defaultValue `false`\n */\n json?: boolean\n\n /**\n * Maximum total number of keys processed by merge (`<<`) across one load\n * call. Each member of a merge sequence also counts as one key. Set to `-1`\n * to disable the limit.\n *\n * @defaultValue `10000`\n */\n maxTotalMergeKeys?: number\n\n /**\n * Maximum number of alias nodes (`*ref`) per document. Set to `0` to reject\n * all aliases, or to `-1` for no limit.\n *\n * @defaultValue `-1`\n */\n maxAliases?: number\n}\n\n// `source` is input data, not config — so it has no default here.\nconst DEFAULT_CONSTRUCTOR_OPTIONS: Required<Omit<ConstructorOptions, 'source'>> = {\n filename: '',\n schema: CORE_SCHEMA,\n json: false,\n maxTotalMergeKeys: 10000,\n maxAliases: -1\n}\n\ninterface ConstructorState extends Required<ConstructorOptions> {\n events: Event[]\n documents: unknown[]\n eventIndex: number\n position: number\n frames: Frame[]\n anchors: Map<string, Anchor>\n // Mapping tag each sequence element was built with, keyed by the element\n // itself. Needed by `<<` merge, which sees only the finished element values.\n nodeTags: Map<unknown, MappingTagDefinition<any, any>>\n tagHandlers: TagHandlers\n totalMergeKeys: number\n aliasCount: number\n}\n\nfunction eventPosition (event: Event) {\n if ('tagStart' in event && event.tagStart !== NO_RANGE) return event.tagStart\n if ('anchorStart' in event && event.anchorStart !== NO_RANGE) return event.anchorStart\n if ('valueStart' in event && event.valueStart !== NO_RANGE) return event.valueStart\n if ('start' in event) return event.start\n return 0\n}\n\nfunction throwError (state: ConstructorState, message: string): never {\n YAMLException.throwAt(state.source, state.position, message, state.filename)\n}\n\nfunction finalizeCollection (\n state: ConstructorState,\n position: number,\n tag: SequenceTagDefinition<any, any> | MappingTagDefinition<any, any>,\n carrier: unknown\n) {\n try {\n return tag.finalize(carrier)\n } catch (error) {\n if (error instanceof YAMLException) throw error\n YAMLException.throwAt(\n state.source,\n position,\n error instanceof Error ? error.message : String(error),\n state.filename\n )\n }\n}\n\nfunction constructScalar (\n state: ConstructorState,\n event: ScalarEvent\n): ValueAndTag {\n const source = getScalarValue(state.source, event)\n const rawTag = event.tagStart === NO_RANGE\n ? ''\n : state.source.slice(event.tagStart, event.tagEnd)\n const strTag = state.schema.defaultScalarTag\n\n if (rawTag !== '') {\n if (rawTag === '!') return { value: source, tag: strTag }\n\n const tagName = tagNameFull(rawTag, state.tagHandlers)\n const scalarTag = state.schema.lookupScalarTag(tagName)\n\n if (scalarTag) {\n const result = scalarTag.resolve(source, true, tagName)\n\n if (result === NOT_RESOLVED) {\n throwError(state, `cannot resolve a node with !<${tagName}> explicit tag`)\n }\n\n return { value: result, tag: scalarTag }\n }\n\n // An empty node carrying a collection tag (e.g. `!!map`, `!!seq`) is emitted\n // by the parser as a scalar event, since there is no collection syntax to key\n // off. Resolve it here by the explicit tag's kind into an empty collection.\n const collectionTagDef =\n state.schema.lookupMappingTag(tagName) ??\n state.schema.lookupSequenceTag(tagName)\n\n if (collectionTagDef) {\n if (source !== '') {\n throwError(state, `cannot resolve a node with !<${tagName}> explicit tag`)\n }\n\n const carrier = collectionTagDef.create(tagName)\n const value = collectionTagDef.carrierIsResult\n ? carrier\n : finalizeCollection(state, state.position, collectionTagDef, carrier)\n return { value, tag: collectionTagDef }\n }\n\n throwError(state, `unknown scalar tag !<${tagName}>`)\n }\n\n if (event.style === SCALAR_STYLE.PLAIN) {\n return state.schema.resolveImplicitScalarTag(source)\n }\n\n return { value: strTag.resolve(source, false, strTag.tagName), tag: strTag }\n}\n\nfunction collectionTagName (\n state: ConstructorState,\n event: SequenceEvent | MappingEvent,\n defaultTagName: string\n) {\n const rawTag = event.tagStart === NO_RANGE\n ? ''\n : state.source.slice(event.tagStart, event.tagEnd)\n const tagName = rawTag === '' || rawTag === '!'\n ? defaultTagName\n : tagNameFull(rawTag, state.tagHandlers)\n\n return tagName\n}\n\n// A merge source must be a mapping; every mapping tag exposes the read side.\nfunction isMappingTag (tag: AnyTag): tag is MappingTagDefinition<any, any> {\n return tag.nodeKind === 'mapping'\n}\n\nfunction chargeMergeWork (state: ConstructorState) {\n state.totalMergeKeys++\n\n if (state.maxTotalMergeKeys !== -1 && state.totalMergeKeys > state.maxTotalMergeKeys) {\n throwError(state, `merge keys exceeded maxTotalMergeKeys (${state.maxTotalMergeKeys})`)\n }\n}\n\n// Fold the keys of one mapping source into the target frame, honoring merge\n// precedence: an already-present key (explicit or from an earlier source) wins.\nfunction mergeKeys (state: ConstructorState, frame: MappingFrame, source: unknown, sourceTag: MappingTagDefinition<any, any>) {\n // Count the source mapping itself to bound sequences of empty mappings.\n chargeMergeWork(state)\n\n for (const sourceKey of sourceTag.keys(source)) {\n chargeMergeWork(state)\n\n if (frame.tag.has(frame.value, sourceKey)) continue\n\n const err = frame.tag.addPair(frame.value, sourceKey, sourceTag.get(source, sourceKey))\n if (err) throwError(state, err)\n\n frame.overridable ??= new Set()\n frame.overridable.add(sourceKey)\n }\n}\n\n// The value of a `<<` key: either a mapping (fold its keys) or a sequence of\n// mappings (fold each). Sequence elements arrive as bare values, so the tag each\n// was built with comes from `nodeTags`; a miss means it is not a mapping (a\n// scalar, a nested sequence, or a value some sequence tag synthesized itself).\nfunction mergeSource (state: ConstructorState, frame: MappingFrame, source: unknown, sourceTag: AnyTag) {\n state.position = frame.keyPosition\n\n if (isMappingTag(sourceTag)) {\n mergeKeys(state, frame, source, sourceTag)\n } else if (sourceTag.nodeKind === 'sequence' && Array.isArray(source)) {\n // The current merge budget is sufficient; this hard cap only further limits\n // the attack vector, so there is no reason to expose it as a public option.\n if (source.length > 100) {\n throwError(state, 'abnormal merge sequence size')\n }\n\n for (const element of source) {\n const elementTag = state.nodeTags.get(element)\n if (!elementTag) {\n throwError(state, 'cannot merge mappings; the provided source object is unacceptable')\n }\n mergeKeys(state, frame, element, elementTag)\n }\n } else {\n throwError(state, 'cannot merge mappings; the provided source object is unacceptable')\n }\n}\n\nfunction addMappingValue (state: ConstructorState, frame: MappingFrame, key: unknown, value: unknown, tag: AnyTag) {\n state.position = frame.keyPosition\n\n // `<<` is intercepted before dedup, so a repeated merge key is allowed.\n if (frame.keyIsMerge) {\n mergeSource(state, frame, value, tag)\n return\n }\n\n if (!state.json && frame.tag.has(frame.value, key) && !frame.overridable?.has(key)) {\n throwError(state, 'duplicated mapping key')\n }\n\n const err = frame.tag.addPair(frame.value, key, value)\n if (err) throwError(state, err)\n frame.overridable?.delete(key)\n}\n\nfunction addValue (state: ConstructorState, value: unknown, tag: AnyTag) {\n const frame = state.frames[state.frames.length - 1]!\n\n if (frame.kind === 'document') {\n frame.value = value\n frame.hasValue = true\n } else if (frame.kind === 'sequence') {\n // Any element may later be folded in by a `<<` merge, which by then has no\n // way to tell what built it.\n if (isMappingTag(tag)) state.nodeTags.set(value, tag)\n const err = frame.tag.addItem(frame.value, value, frame.index++)\n if (err) throwError(state, err)\n } else if (frame.hasKey) {\n const key = frame.key\n frame.key = undefined\n frame.hasKey = false\n addMappingValue(state, frame, key, value, tag)\n } else {\n frame.key = value\n frame.keyPosition = state.position\n frame.hasKey = true\n frame.keyIsMerge = tag.tagName === MERGE_TAG_NAME\n }\n}\n\nfunction storeAnchor (\n state: ConstructorState,\n event: ScalarEvent | SequenceEvent | MappingEvent,\n value: unknown,\n tag: AnyTag,\n isValueFinal: boolean\n): Anchor | null {\n if (event.anchorStart !== NO_RANGE) {\n const anchor = {\n value,\n tag,\n isValueFinal\n }\n state.anchors.set(state.source.slice(event.anchorStart, event.anchorEnd), anchor)\n return anchor\n }\n\n return null\n}\n\n/**\n * Constructs JavaScript documents directly from parser events, without an\n * intermediate AST.\n *\n * @category Events\n */\nfunction constructFromEvents (events: Event[], options: ConstructorOptions): unknown[] {\n const state: ConstructorState = {\n ...DEFAULT_CONSTRUCTOR_OPTIONS,\n ...options,\n events,\n documents: [],\n eventIndex: 0,\n position: 0,\n frames: [],\n anchors: new Map(),\n nodeTags: new Map(),\n tagHandlers: Object.create(null),\n totalMergeKeys: 0,\n aliasCount: 0\n }\n\n while (state.eventIndex < state.events.length) {\n const event = state.events[state.eventIndex++]\n state.position = eventPosition(event)\n\n switch (event.type) {\n case EVENT_ID.DOCUMENT:\n state.anchors = new Map()\n state.nodeTags = new Map()\n state.aliasCount = 0\n state.tagHandlers = Object.create(null)\n for (const directive of event.directives) {\n if (directive.kind === 'tag') state.tagHandlers[directive.handle] = directive.prefix\n }\n state.frames.push({ kind: 'document', position: state.position, value: undefined, hasValue: false })\n break\n\n case EVENT_ID.SCALAR: {\n const { value, tag } = constructScalar(state, event)\n storeAnchor(state, event, value, tag, true)\n addValue(state, value, tag)\n break\n }\n\n case EVENT_ID.SEQUENCE: {\n const tagName = collectionTagName(state, event, 'tag:yaml.org,2002:seq')\n const tag = state.schema.lookupSequenceTag(tagName)\n if (!tag) throwError(state, `unknown sequence tag !<${tagName}>`)\n\n const value = tag.create(tagName)\n const anchor = storeAnchor(state, event, value, tag, tag.carrierIsResult)\n\n state.frames.push({\n kind: 'sequence', position: state.position, value, tag, anchor, index: 0\n })\n break\n }\n\n case EVENT_ID.MAPPING: {\n const tagName = collectionTagName(state, event, 'tag:yaml.org,2002:map')\n const tag = state.schema.lookupMappingTag(tagName)\n if (!tag) throwError(state, `unknown mapping tag !<${tagName}>`)\n\n const value = tag.create(tagName)\n const anchor = storeAnchor(state, event, value, tag, tag.carrierIsResult)\n state.frames.push({\n kind: 'mapping',\n position: state.position,\n value,\n tag,\n anchor,\n key: undefined,\n keyPosition: state.position,\n hasKey: false,\n keyIsMerge: false,\n overridable: null\n })\n break\n }\n\n case EVENT_ID.ALIAS: {\n if (state.maxAliases !== -1 && ++state.aliasCount > state.maxAliases) {\n throwError(state, `aliases exceeded maxAliases (${state.maxAliases})`)\n }\n\n const name = state.source.slice(event.anchorStart, event.anchorEnd)\n const anchor = state.anchors.get(name)\n if (!anchor) {\n throwError(state, `unidentified alias \"${name}\"`)\n }\n if (!anchor.isValueFinal) {\n throwError(state, `recursive alias \"${name}\" is not supported for tag ${anchor.tag.tagName} because it uses finalize()`)\n }\n addValue(state, anchor.value, anchor.tag)\n break\n }\n\n case EVENT_ID.POP: {\n const frame = state.frames.pop()!\n\n if (frame.kind === 'mapping' && frame.hasKey) {\n state.position = frame.keyPosition\n throwError(state, 'incomplete mapping pair in event stream')\n }\n\n if (frame.kind === 'document') {\n state.documents.push(frame.value)\n } else {\n const value = frame.tag.carrierIsResult\n ? frame.value\n : finalizeCollection(state, frame.position, frame.tag, frame.value)\n if (frame.anchor) {\n frame.anchor.value = value\n frame.anchor.isValueFinal = true\n }\n addValue(state, value, frame.tag)\n }\n break\n }\n }\n }\n\n return state.documents\n}\n\nexport {\n constructFromEvents,\n DEFAULT_CONSTRUCTOR_OPTIONS,\n type ConstructorOptions\n}\n","import {\n EVENT_ID,\n SCALAR_STYLE,\n COLLECTION_STYLE,\n CHOMPING_MODE,\n type Event,\n type ScalarStyle,\n type CollectionStyle,\n type ChompingMode,\n type DocumentDirective,\n type TagHandlers\n} from './events.ts'\nimport { YAMLException } from '../common/exception.ts'\n\nconst NO_RANGE = -1\nconst HAS_OWN = Object.prototype.hasOwnProperty\n\nconst CONTEXT_FLOW_IN = 1\nconst CONTEXT_FLOW_OUT = 2\nconst CONTEXT_BLOCK_IN = 3\nconst CONTEXT_BLOCK_OUT = 4\n\n// eslint-disable-next-line no-control-regex\nconst PATTERN_NON_PRINTABLE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/\n// eslint-disable-next-line no-useless-escape\nconst PATTERN_FLOW_INDICATORS = /[,\\[\\]{}]/\n// YAML 1.2.2, [91] c-tag-handle.\n// eslint-disable-next-line no-useless-escape\nconst PATTERN_TAG_HANDLE = /^(?:!|!!|![0-9A-Za-z-]+!)$/\n// YAML 1.2.2, [39] ns-uri-char.\n// eslint-disable-next-line no-useless-escape\nconst NS_URI_CHAR = String.raw`(?:%[0-9A-Fa-f]{2}|[0-9A-Za-z\\-#;/?:@&=+$,_.!~*'()\\[\\]])`\n// YAML 1.2.2, [40] ns-tag-char = ns-uri-char - \"!\" - c-flow-indicator.\n// eslint-disable-next-line no-useless-escape\nconst NS_TAG_CHAR = String.raw`(?:%[0-9A-Fa-f]{2}|[0-9A-Za-z\\-#;/?:@&=+$.~*'()_])`\nconst PATTERN_TAG_URI = new RegExp(`^(?:${NS_URI_CHAR})*$`)\n// YAML 1.2.2, [99] c-ns-shorthand-tag suffix part.\nconst PATTERN_TAG_SUFFIX = new RegExp(`^(?:${NS_TAG_CHAR})+$`)\n// YAML 1.2.2, [93] ns-tag-prefix.\nconst PATTERN_TAG_PREFIX = new RegExp(`^(?:!(?:${NS_URI_CHAR})*|${NS_TAG_CHAR}(?:${NS_URI_CHAR})*)$`)\n\ntype NodeContext =\n typeof CONTEXT_FLOW_IN | typeof CONTEXT_FLOW_OUT |\n typeof CONTEXT_BLOCK_IN | typeof CONTEXT_BLOCK_OUT\n\ninterface NodeProperties {\n anchorStart: number\n anchorEnd: number\n tagStart: number\n tagEnd: number\n}\n\ninterface ParserSnapshot {\n position: number\n line: number\n lineStart: number\n lineIndent: number\n firstTabInLine: number\n eventsLength: number\n}\n\n/** @category Events */\ninterface ParserOptions {\n /**\n * File path used in error messages.\n *\n * @defaultValue `null`\n */\n filename?: string\n\n /**\n * Maximum nesting depth for collections. Aliases are not taken into account.\n *\n * @defaultValue `100`\n */\n maxDepth?: number\n}\n\nconst DEFAULT_PARSER_OPTIONS: Required<ParserOptions> = {\n filename: '',\n maxDepth: 100\n}\n\ninterface ParserState extends Required<ParserOptions> {\n input: string\n length: number\n position: number\n line: number\n lineStart: number\n lineIndent: number\n firstTabInLine: number\n depth: number\n directives: DocumentDirective[]\n tagHandlers: TagHandlers\n events: Event[]\n}\n\nfunction addDocumentEvent (\n state: ParserState,\n explicitStart: boolean,\n explicitEnd: boolean\n) {\n state.events.push({\n type: EVENT_ID.DOCUMENT,\n explicitStart,\n explicitEnd,\n directives: state.directives\n })\n}\n\nfunction addSequenceEvent (\n state: ParserState,\n start: number,\n anchorStart: number,\n anchorEnd: number,\n tagStart: number,\n tagEnd: number,\n style: CollectionStyle\n) {\n state.events.push({\n type: EVENT_ID.SEQUENCE,\n start,\n anchorStart,\n anchorEnd,\n tagStart,\n tagEnd,\n style\n })\n}\n\nfunction addMappingEvent (\n state: ParserState,\n start: number,\n anchorStart: number,\n anchorEnd: number,\n tagStart: number,\n tagEnd: number,\n style: CollectionStyle\n) {\n state.events.push({\n type: EVENT_ID.MAPPING,\n start,\n anchorStart,\n anchorEnd,\n tagStart,\n tagEnd,\n style\n })\n}\n\nfunction insertFlowPairMappingEvent (state: ParserState, snapshot: ParserSnapshot) {\n state.events.splice(snapshot.eventsLength, 0, {\n type: EVENT_ID.MAPPING,\n start: snapshot.position,\n anchorStart: NO_RANGE,\n anchorEnd: NO_RANGE,\n tagStart: NO_RANGE,\n tagEnd: NO_RANGE,\n style: COLLECTION_STYLE.FLOW\n })\n}\n\nfunction addScalarEvent (\n state: ParserState,\n valueStart: number,\n valueEnd: number,\n anchorStart: number,\n anchorEnd: number,\n tagStart: number,\n tagEnd: number,\n style: ScalarStyle,\n chomping: ChompingMode = CHOMPING_MODE.CLIP,\n indent = -1,\n fast = false\n) {\n state.events.push({\n type: EVENT_ID.SCALAR,\n valueStart,\n valueEnd,\n anchorStart,\n anchorEnd,\n tagStart,\n tagEnd,\n style,\n chomping,\n indent,\n fast\n })\n}\n\nfunction addAliasEvent (\n state: ParserState,\n anchorStart: number,\n anchorEnd: number\n) {\n state.events.push({\n type: EVENT_ID.ALIAS,\n anchorStart,\n anchorEnd\n })\n}\n\nfunction addPopEvent (state: ParserState) {\n state.events.push({ type: EVENT_ID.POP })\n}\n\nfunction addEmptyScalarEvent (state: ParserState) {\n addScalarEvent(\n state,\n NO_RANGE,\n NO_RANGE,\n NO_RANGE,\n NO_RANGE,\n NO_RANGE,\n NO_RANGE,\n SCALAR_STYLE.PLAIN\n )\n}\n\nfunction emptyProperties (): NodeProperties {\n return {\n anchorStart: NO_RANGE,\n anchorEnd: NO_RANGE,\n tagStart: NO_RANGE,\n tagEnd: NO_RANGE\n }\n}\n\nfunction snapshotState (state: ParserState): ParserSnapshot {\n return {\n position: state.position,\n line: state.line,\n lineStart: state.lineStart,\n lineIndent: state.lineIndent,\n firstTabInLine: state.firstTabInLine,\n eventsLength: state.events.length\n }\n}\n\nfunction restoreState (state: ParserState, snapshot: ParserSnapshot) {\n state.position = snapshot.position\n state.line = snapshot.line\n state.lineStart = snapshot.lineStart\n state.lineIndent = snapshot.lineIndent\n state.firstTabInLine = snapshot.firstTabInLine\n state.events.length = snapshot.eventsLength\n}\n\nfunction throwError (state: ParserState, message: string): never {\n YAMLException.throwAt(state.input.slice(0, state.length), state.position, message, state.filename)\n}\n\nfunction isEol (c: number) {\n return c === 0x0A/* LF */ || c === 0x0D/* CR */\n}\n\nfunction isWhiteSpace (c: number) {\n return c === 0x09/* Tab */ || c === 0x20/* Space */\n}\n\nfunction isWsOrEol (c: number) {\n return isWhiteSpace(c) || isEol(c)\n}\n\nfunction isWsOrEolOrEnd (c: number) {\n return c === 0 || isWsOrEol(c)\n}\n\nfunction isFlowIndicator (c: number) {\n return c === 0x2C/* , */ ||\n c === 0x5B/* [ */ ||\n c === 0x5D/* ] */ ||\n c === 0x7B/* { */ ||\n c === 0x7D/* } */\n}\n\nfunction fromDecimalCode (c: number) {\n return c >= 0x30/* 0 */ && c <= 0x39/* 9 */ ? c - 0x30 : -1\n}\n\nfunction fromHexCode (c: number) {\n if (c >= 0x30/* 0 */ && c <= 0x39/* 9 */) return c - 0x30\n const lc = c | 0x20\n if (lc >= 0x61/* a */ && lc <= 0x66/* f */) return lc - 0x61 + 10\n return -1\n}\n\nfunction escapedHexLen (c: number) {\n if (c === 0x78/* x */) return 2\n if (c === 0x75/* u */) return 4\n if (c === 0x55/* U */) return 8\n return 0\n}\n\nfunction isSimpleEscape (c: number) {\n return c === 0x30/* 0 */ ||\n c === 0x61/* a */ ||\n c === 0x62/* b */ ||\n c === 0x74/* t */ ||\n c === 0x09/* Tab */ ||\n c === 0x6E/* n */ ||\n c === 0x76/* v */ ||\n c === 0x66/* f */ ||\n c === 0x72/* r */ ||\n c === 0x65/* e */ ||\n c === 0x20/* Space */ ||\n c === 0x22/* \" */ ||\n c === 0x2F/* / */ ||\n c === 0x5C/* \\ */ ||\n c === 0x4E/* N */ ||\n c === 0x5F/* _ */ ||\n c === 0x4C/* L */ ||\n c === 0x50/* P */\n}\n\n// Precondition: state.position points at LF or CR.\nfunction consumeLineBreak (state: ParserState) {\n const ch = state.input.charCodeAt(state.position)\n\n if (ch === 0x0A/* LF */) {\n state.position++\n } else {\n state.position++\n if (state.input.charCodeAt(state.position) === 0x0A/* LF */) state.position++\n }\n\n state.line++\n state.lineStart = state.position\n state.lineIndent = 0\n state.firstTabInLine = -1\n}\n\nfunction skipSeparationSpace (state: ParserState, allowComments: boolean) {\n let lineBreaks = 0\n let ch = state.input.charCodeAt(state.position)\n let hasSeparation = state.position === state.lineStart ||\n isWsOrEol(state.input.charCodeAt(state.position - 1))\n\n while (ch !== 0) {\n while (isWhiteSpace(ch)) {\n hasSeparation = true\n if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) {\n state.firstTabInLine = state.position\n }\n ch = state.input.charCodeAt(++state.position)\n }\n\n if (allowComments && hasSeparation && ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position) }\n while (!isEol(ch) && ch !== 0)\n }\n\n if (!isEol(ch)) break\n\n consumeLineBreak(state)\n lineBreaks++\n hasSeparation = true\n ch = state.input.charCodeAt(state.position)\n\n while (ch === 0x20/* Space */) {\n state.lineIndent++\n ch = state.input.charCodeAt(++state.position)\n }\n }\n\n return lineBreaks\n}\n\nfunction testDocumentSeparator (state: ParserState, position = state.position) {\n const ch = state.input.charCodeAt(position)\n\n if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) &&\n ch === state.input.charCodeAt(position + 1) &&\n ch === state.input.charCodeAt(position + 2)) {\n const following = state.input.charCodeAt(position + 3)\n return following === 0 || isWsOrEol(following)\n }\n\n return false\n}\n\nfunction skipByteOrderMark (state: ParserState) {\n if (state.position === state.lineStart &&\n state.input.charCodeAt(state.position) === 0xFEFF) {\n state.position++\n state.lineStart = state.position\n }\n}\n\nfunction testDocumentBoundary (state: ParserState) {\n if (state.position !== state.lineStart) return false\n\n // Fast path: most document boundaries do not have a BOM.\n if (testDocumentSeparator(state)) return true\n if (state.input.charCodeAt(state.position) !== 0xFEFF) return false\n\n // BOM-prefixed boundaries are rare, so snapshot/restore overhead is negligible.\n const snapshot = snapshotState(state)\n\n skipByteOrderMark(state)\n skipSeparationSpace(state, true)\n\n const ch = state.input.charCodeAt(state.position)\n const result = state.position === state.lineStart &&\n (ch === 0x25/* % */ || (ch === 0x2D/* - */ && testDocumentSeparator(state)))\n\n restoreState(state, snapshot)\n return result\n}\n\nfunction skipUntilLineEnd (state: ParserState) {\n let ch = state.input.charCodeAt(state.position)\n\n while (ch !== 0 && !isEol(ch)) {\n ch = state.input.charCodeAt(++state.position)\n }\n}\n\nfunction checkPrintable (state: ParserState, start: number, end: number) {\n const match = PATTERN_NON_PRINTABLE.exec(state.input.slice(start, end))\n\n if (match !== null) {\n // The lone low surrogate alternative also matches the preceding character,\n // so the offending character is always the last one in the match.\n state.position = start + match.index + match[0].length - 1\n throwError(state, 'the stream contains non-printable characters')\n }\n}\n\nfunction readTagProperty (state: ParserState, props: NodeProperties, inFlow: boolean) {\n if (state.input.charCodeAt(state.position) !== 0x21/* ! */) return false\n if (props.tagStart !== NO_RANGE) throwError(state, 'duplication of a tag property')\n\n const start = state.position\n let isVerbatim = false\n let isNamed = false\n let tagHandle = '!'\n let ch = state.input.charCodeAt(++state.position)\n\n if (ch === 0x3C/* < */) {\n isVerbatim = true\n ch = state.input.charCodeAt(++state.position)\n } else if (ch === 0x21/* ! */) {\n isNamed = true\n tagHandle = '!!'\n ch = state.input.charCodeAt(++state.position)\n }\n\n let suffixStart = state.position\n let tagName\n\n if (isVerbatim) {\n while (ch !== 0 && ch !== 0x3E/* > */) ch = state.input.charCodeAt(++state.position)\n if (ch !== 0x3E/* > */) throwError(state, 'unexpected end of the stream within a verbatim tag')\n tagName = state.input.slice(suffixStart, state.position)\n state.position++\n } else {\n while (ch !== 0 && !isWsOrEol(ch) && !(inFlow && isFlowIndicator(ch))) {\n if (ch === 0x21/* ! */) {\n if (!isNamed) {\n tagHandle = state.input.slice(suffixStart - 1, state.position + 1)\n if (!PATTERN_TAG_HANDLE.test(tagHandle)) throwError(state, 'named tag handle cannot contain such characters')\n isNamed = true\n suffixStart = state.position + 1\n } else {\n throwError(state, 'tag suffix cannot contain exclamation marks')\n }\n }\n\n ch = state.input.charCodeAt(++state.position)\n }\n\n tagName = state.input.slice(suffixStart, state.position)\n if (PATTERN_FLOW_INDICATORS.test(tagName)) throwError(state, 'tag suffix cannot contain flow indicator characters')\n }\n\n if (tagName && !(isVerbatim ? PATTERN_TAG_URI.test(tagName) : PATTERN_TAG_SUFFIX.test(tagName))) {\n throwError(state, `tag name cannot contain such characters: ${tagName}`)\n }\n\n if (!isVerbatim && tagHandle !== '!' && tagHandle !== '!!' && !HAS_OWN.call(state.tagHandlers, tagHandle)) {\n throwError(state, `undeclared tag handle \"${tagHandle}\"`)\n }\n\n props.tagStart = start\n props.tagEnd = state.position\n return true\n}\n\nfunction readAnchorProperty (state: ParserState, props: NodeProperties) {\n if (state.input.charCodeAt(state.position) !== 0x26/* & */) return false\n if (props.anchorStart !== NO_RANGE) throwError(state, 'duplication of an anchor property')\n\n state.position++\n const start = state.position\n\n while (state.input.charCodeAt(state.position) !== 0 && !isWsOrEol(state.input.charCodeAt(state.position)) && !isFlowIndicator(state.input.charCodeAt(state.position))) {\n state.position++\n }\n\n if (state.position === start) throwError(state, 'name of an anchor node must contain at least one character')\n\n props.anchorStart = start\n props.anchorEnd = state.position\n return true\n}\n\nfunction readAlias (state: ParserState, props: NodeProperties) {\n if (state.input.charCodeAt(state.position) !== 0x2A/* * */) return false\n if (props.anchorStart !== NO_RANGE || props.tagStart !== NO_RANGE) {\n throwError(state, 'alias node should not have any properties')\n }\n\n state.position++\n const start = state.position\n\n while (state.input.charCodeAt(state.position) !== 0 && !isWsOrEol(state.input.charCodeAt(state.position)) && !isFlowIndicator(state.input.charCodeAt(state.position))) {\n state.position++\n }\n\n if (state.position === start) throwError(state, 'name of an alias node must contain at least one character')\n\n addAliasEvent(state, start, state.position)\n return true\n}\n\nfunction readFlowScalarBreak (state: ParserState, nodeIndent: number) {\n skipSeparationSpace(state, false)\n\n if (state.lineIndent < nodeIndent) {\n throwError(state, 'deficient indentation')\n }\n}\n\nfunction readSingleQuotedScalar (state: ParserState, nodeIndent: number, props: NodeProperties) {\n if (state.input.charCodeAt(state.position) !== 0x27/* ' */) return false\n\n state.position++\n const start = state.position\n // A single-quoted scalar is sliceable verbatim when it has no '' escape pairs\n // and no folded line breaks (see getScalarValue fast path).\n let simple = true\n\n while (state.input.charCodeAt(state.position) !== 0) {\n const ch = state.input.charCodeAt(state.position)\n\n if (ch === 0x27/* ' */) {\n if (state.input.charCodeAt(state.position + 1) === 0x27/* ' */) {\n simple = false\n state.position += 2\n continue\n }\n\n const end = state.position\n state.position++\n addScalarEvent(state, start, end, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, SCALAR_STYLE.SINGLE_QUOTED, CHOMPING_MODE.CLIP, -1, simple)\n return true\n }\n\n if (isEol(ch)) {\n simple = false\n readFlowScalarBreak(state, nodeIndent)\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a single quoted scalar')\n } else if (ch !== 0x09/* Tab */ && ch < 0x20) {\n throwError(state, 'expected valid JSON character')\n } else {\n state.position++\n }\n }\n\n throwError(state, 'unexpected end of the stream within a single quoted scalar')\n}\n\nfunction readDoubleQuotedScalar (state: ParserState, nodeIndent: number, props: NodeProperties) {\n if (state.input.charCodeAt(state.position) !== 0x22/* \" */) return false\n\n state.position++\n const start = state.position\n // A double-quoted scalar is sliceable verbatim when it has no \\ escapes and\n // no folded line breaks (see getScalarValue fast path).\n let simple = true\n\n while (state.input.charCodeAt(state.position) !== 0) {\n const ch = state.input.charCodeAt(state.position)\n\n if (ch === 0x22/* \" */) {\n const end = state.position\n state.position++\n addScalarEvent(state, start, end, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, SCALAR_STYLE.DOUBLE_QUOTED, CHOMPING_MODE.CLIP, -1, simple)\n return true\n }\n\n if (ch === 0x5C/* \\ */) {\n simple = false\n const escaped = state.input.charCodeAt(++state.position)\n\n if (isEol(escaped)) {\n readFlowScalarBreak(state, nodeIndent)\n } else if (isSimpleEscape(escaped)) {\n state.position++\n } else {\n let hexLength = escapedHexLen(escaped)\n\n if (hexLength === 0) throwError(state, 'unknown escape sequence')\n\n while (hexLength-- > 0) {\n state.position++\n if (fromHexCode(state.input.charCodeAt(state.position)) < 0) {\n throwError(state, 'expected hexadecimal character')\n }\n }\n state.position++\n }\n } else if (isEol(ch)) {\n simple = false\n readFlowScalarBreak(state, nodeIndent)\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a double quoted scalar')\n } else if (ch !== 0x09/* Tab */ && ch < 0x20) {\n throwError(state, 'expected valid JSON character')\n } else {\n state.position++\n }\n }\n\n throwError(state, 'unexpected end of the stream within a double quoted scalar')\n}\n\nfunction readBlockScalar (state: ParserState, parentIndent: number, props: NodeProperties) {\n const ch = state.input.charCodeAt(state.position)\n let chomping: ChompingMode = CHOMPING_MODE.CLIP\n let indent = -1\n let detectedIndent = false\n\n if (ch !== 0x7C/* | */ && ch !== 0x3E/* > */) return false\n\n const style = ch === 0x7C/* | */ ? SCALAR_STYLE.LITERAL_BLOCK : SCALAR_STYLE.FOLDED_BLOCK\n state.position++\n\n while (state.input.charCodeAt(state.position) !== 0) {\n const current = state.input.charCodeAt(state.position)\n const digit = fromDecimalCode(current)\n\n if (current === 0x2B/* + */ || current === 0x2D/* - */) {\n if (chomping !== CHOMPING_MODE.CLIP) throwError(state, 'repeat of a chomping mode identifier')\n chomping = current === 0x2B/* + */ ? CHOMPING_MODE.KEEP : CHOMPING_MODE.STRIP\n state.position++\n } else if (digit >= 0) {\n if (digit === 0) {\n throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one')\n }\n if (detectedIndent) throwError(state, 'repeat of an indentation width identifier')\n indent = parentIndent + digit - 1\n detectedIndent = true\n state.position++\n } else {\n break\n }\n }\n\n let hadWhitespace = false\n while (isWhiteSpace(state.input.charCodeAt(state.position))) {\n hadWhitespace = true\n state.position++\n }\n if (hadWhitespace && state.input.charCodeAt(state.position) === 0x23/* # */) skipUntilLineEnd(state)\n\n if (isEol(state.input.charCodeAt(state.position))) {\n consumeLineBreak(state)\n } else if (state.input.charCodeAt(state.position) !== 0) {\n throwError(state, 'a line break is expected')\n }\n\n let contentIndent = detectedIndent ? indent : -1\n let maxLeadingIndent = 0\n const valueStart = state.position\n let valueEnd = state.position\n\n while (state.input.charCodeAt(state.position) !== 0) {\n const linePosition = state.position\n let column = 0\n\n while (state.input.charCodeAt(linePosition + column) === 0x20/* Space */) column++\n\n const first = state.input.charCodeAt(linePosition + column)\n if (first === 0) {\n // End of input acts as a line terminator, but there is no line break to\n // include here. A final all-spaces line still counts: when the block has a\n // content indent, the spaces beyond it are real content; in a wholly blank\n // block (contentIndent < 0) the spaces form a blank line that chomping must\n // see, exactly as it would if the line ended with a break. Capture the line\n // in both cases; otherwise the block ends at the start of this empty line.\n if (contentIndent >= 0) {\n if (column > contentIndent) valueEnd = linePosition + column\n } else if (column > 0) {\n valueEnd = linePosition + column\n }\n break\n }\n if (testDocumentBoundary(state)) break\n\n if (!detectedIndent && contentIndent === -1 && isEol(first)) {\n maxLeadingIndent = Math.max(maxLeadingIndent, column)\n }\n\n if (!detectedIndent && contentIndent === -1 && !isEol(first)) {\n if (first === 0x09/* Tab */ && column < parentIndent) {\n state.position = linePosition + column\n throwError(state, 'tab characters must not be used in indentation')\n }\n if (column >= parentIndent && column < maxLeadingIndent) {\n state.position = linePosition + column\n throwError(state, 'bad indentation of a mapping entry')\n }\n }\n\n if (contentIndent === -1 && first !== 0 && !isEol(first) && column < parentIndent) {\n state.lineIndent = column\n state.position = linePosition + column\n break\n }\n\n if (!detectedIndent && first !== 0 && !isEol(first) && contentIndent === -1) {\n contentIndent = column\n }\n\n const requiredIndent = contentIndent === -1 ? parentIndent + 1 : contentIndent\n if (first !== 0 && !isEol(first) && column < requiredIndent) {\n state.lineIndent = column\n state.position = linePosition + column\n break\n }\n\n skipUntilLineEnd(state)\n valueEnd = state.position\n if (isEol(state.input.charCodeAt(state.position))) {\n consumeLineBreak(state)\n // Include the line break in the range so trailing blank lines are\n // preserved. This is what lets cook tell apart an empty `|+` (range \"\",\n // value \"\") from a `|+` with one blank line (range \"\\n\", value \"\\n\").\n // De-indent and chomping are applied later in getScalarValue.\n valueEnd = state.position\n }\n }\n\n checkPrintable(state, valueStart, valueEnd)\n addScalarEvent(\n state,\n valueStart,\n valueEnd,\n props.anchorStart,\n props.anchorEnd,\n props.tagStart,\n props.tagEnd,\n style,\n chomping,\n contentIndent\n )\n return true\n}\n\nfunction canStartPlainScalar (state: ParserState, nodeContext: NodeContext) {\n const ch = state.input.charCodeAt(state.position)\n const inFlow = nodeContext === CONTEXT_FLOW_IN\n\n if (ch === 0 ||\n isWsOrEol(ch) ||\n ch === 0x23/* # */ ||\n ch === 0x26/* & */ ||\n ch === 0x2A/* * */ ||\n ch === 0x21/* ! */ ||\n ch === 0x7C/* | */ ||\n ch === 0x3E/* > */ ||\n ch === 0x27/* ' */ ||\n ch === 0x22/* \" */ ||\n ch === 0x25/* % */ ||\n ch === 0x40/* @ */ ||\n ch === 0x60/* ` */ ||\n isFlowIndicator(ch)) {\n return false\n }\n\n if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) {\n const following = state.input.charCodeAt(state.position + 1)\n if (isWsOrEolOrEnd(following) || (inFlow && isFlowIndicator(following))) return false\n }\n\n return true\n}\n\nfunction readPlainScalar (state: ParserState, nodeIndent: number, nodeContext: NodeContext, props: NodeProperties) {\n if (!canStartPlainScalar(state, nodeContext)) return false\n\n const start = state.position\n let end = state.position\n let ch = state.input.charCodeAt(state.position)\n const inFlow = nodeContext === CONTEXT_FLOW_IN\n // A single-line plain scalar is sliceable verbatim: the parser already trims\n // trailing whitespace from the range, so no folding is needed (see\n // getScalarValue fast path). Folded line breaks make it non-simple.\n let multiline = false\n\n while (ch !== 0) {\n if (testDocumentBoundary(state)) break\n\n if (ch === 0x3A/* : */) {\n const following = state.input.charCodeAt(state.position + 1)\n if (isWsOrEolOrEnd(following) || (inFlow && isFlowIndicator(following))) break\n } else if (ch === 0x23/* # */) {\n const preceding = state.input.charCodeAt(state.position - 1)\n if (isWsOrEol(preceding)) break\n } else if (inFlow && isFlowIndicator(ch)) {\n break\n } else if (isEol(ch)) {\n const savedPosition = state.position\n const savedLine = state.line\n const savedLineStart = state.lineStart\n const savedLineIndent = state.lineIndent\n\n skipSeparationSpace(state, false)\n\n if (state.lineIndent >= nodeIndent) {\n multiline = true\n ch = state.input.charCodeAt(state.position)\n continue\n }\n\n state.position = savedPosition\n state.line = savedLine\n state.lineStart = savedLineStart\n state.lineIndent = savedLineIndent\n break\n }\n\n if (!isWhiteSpace(ch)) end = state.position + 1\n ch = state.input.charCodeAt(++state.position)\n }\n\n if (end === start) return false\n\n checkPrintable(state, start, end)\n addScalarEvent(state, start, end, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, SCALAR_STYLE.PLAIN, CHOMPING_MODE.CLIP, -1, !multiline)\n return true\n}\n\nfunction findBlockMappingColon (state: ParserState) {\n let position = state.position\n let flowLevel = 0\n\n while (position < state.length) {\n const ch = state.input.charCodeAt(position)\n\n if (isEol(ch)) return -1\n if (ch === 0x23/* # */ && isWsOrEol(state.input.charCodeAt(position - 1))) return -1\n\n if ((ch === 0x2A/* * */ || ch === 0x26/* & */) && position === state.position) {\n do { position++ }\n while (state.input.charCodeAt(position) !== 0 &&\n !isWsOrEol(state.input.charCodeAt(position)) &&\n !isFlowIndicator(state.input.charCodeAt(position)))\n continue\n }\n\n if (ch === 0x5B/* [ */ || ch === 0x7B/* { */) {\n flowLevel++\n } else if (ch === 0x5D/* ] */ || ch === 0x7D/* } */) {\n if (flowLevel > 0) flowLevel--\n } else if (flowLevel === 0 && ch === 0x3A/* : */ && isWsOrEol(state.input.charCodeAt(position + 1))) {\n return position\n }\n\n if ((flowLevel > 0 || position === state.position) &&\n (ch === 0x27/* ' */ || ch === 0x22/* \" */)) {\n const quote = ch\n position++\n\n while (position < state.length && state.input.charCodeAt(position) !== quote) {\n if (state.input.charCodeAt(position) === 0x5C/* \\ */ && quote === 0x22/* \" */) position++\n position++\n }\n }\n\n position++\n }\n\n return -1\n}\n\nfunction skipFlowSeparationSpace (state: ParserState, nodeIndent: number) {\n const startLine = state.line\n skipSeparationSpace(state, true)\n\n if ((state.line > startLine && state.lineIndent < nodeIndent) ||\n (state.firstTabInLine !== -1 && state.lineIndent < nodeIndent)) {\n throwError(state, 'deficient indentation')\n }\n}\n\nfunction readFlowCollection (state: ParserState, nodeIndent: number, props: NodeProperties) {\n const ch = state.input.charCodeAt(state.position)\n const isMapping = ch === 0x7B/* { */\n const start = state.position\n let readNext = true\n\n if (ch !== 0x5B/* [ */ && ch !== 0x7B/* { */) return false\n\n const terminator = isMapping ? 0x7D/* } */ : 0x5D/* ] */\n\n if (isMapping) {\n addMappingEvent(state, start, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, COLLECTION_STYLE.FLOW)\n } else {\n addSequenceEvent(state, start, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, COLLECTION_STYLE.FLOW)\n }\n\n state.position++\n\n while (state.input.charCodeAt(state.position) !== 0) {\n skipFlowSeparationSpace(state, nodeIndent)\n\n let ch = state.input.charCodeAt(state.position)\n\n if (ch === terminator) {\n state.position++\n addPopEvent(state)\n return true\n } else if (!readNext) {\n throwError(state, 'missed comma between flow collection entries')\n } else if (ch === 0x2C/* , */) {\n throwError(state, \"expected the node content, but found ','\")\n }\n\n let isPair = false\n let isExplicitPair = false\n\n if (ch === 0x3F/* ? */ && isWsOrEol(state.input.charCodeAt(state.position + 1))) {\n isPair = isExplicitPair = true\n state.position += 1\n skipFlowSeparationSpace(state, nodeIndent)\n }\n\n const entryLine = state.line\n const entryStart = snapshotState(state)\n\n const keyWasRead = parseNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true)\n skipFlowSeparationSpace(state, nodeIndent)\n\n ch = state.input.charCodeAt(state.position)\n\n if ((isMapping || isExplicitPair || state.line === entryLine) && ch === 0x3A/* : */) {\n isPair = true\n state.position++\n skipFlowSeparationSpace(state, nodeIndent)\n if (!isMapping) {\n insertFlowPairMappingEvent(state, entryStart)\n if (!keyWasRead) addEmptyScalarEvent(state)\n } else if (!keyWasRead) {\n addEmptyScalarEvent(state)\n }\n if (!parseNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true)) {\n addEmptyScalarEvent(state)\n }\n skipFlowSeparationSpace(state, nodeIndent)\n if (!isMapping) addPopEvent(state)\n } else if (isMapping && isPair) {\n if (!keyWasRead) addEmptyScalarEvent(state)\n addEmptyScalarEvent(state)\n } else if (isMapping) {\n addEmptyScalarEvent(state)\n } else if (isPair) {\n insertFlowPairMappingEvent(state, entryStart)\n if (!keyWasRead) addEmptyScalarEvent(state)\n addEmptyScalarEvent(state)\n addPopEvent(state)\n }\n\n ch = state.input.charCodeAt(state.position)\n\n if (ch === 0x2C/* , */) {\n readNext = true\n state.position++\n } else {\n readNext = false\n }\n }\n\n throwError(state, 'unexpected end of the stream within a flow collection')\n}\n\nfunction readBlockSequence (state: ParserState, nodeIndent: number, props: NodeProperties) {\n if (state.firstTabInLine !== -1 || state.input.charCodeAt(state.position) !== 0x2D/* - */ || !isWsOrEolOrEnd(state.input.charCodeAt(state.position + 1))) {\n return false\n }\n\n addSequenceEvent(state, state.position, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, COLLECTION_STYLE.BLOCK)\n\n while (state.input.charCodeAt(state.position) === 0x2D/* - */ && isWsOrEolOrEnd(state.input.charCodeAt(state.position + 1))) {\n if (state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine\n throwError(state, 'tab characters must not be used in indentation')\n }\n\n const entryLine = state.line\n state.position++\n\n const hadBreak = skipSeparationSpace(state, true) > 0\n if (state.firstTabInLine !== -1 &&\n state.input.charCodeAt(state.position) === 0x2D/* - */ &&\n isWsOrEolOrEnd(state.input.charCodeAt(state.position + 1))) {\n throwError(state, 'bad indentation of a sequence entry')\n }\n\n if (hadBreak && state.lineIndent <= nodeIndent) {\n addEmptyScalarEvent(state)\n } else {\n parseNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true)\n }\n\n skipSeparationSpace(state, true)\n\n if (state.lineIndent < nodeIndent || state.position >= state.length) break\n if (state.lineIndent > nodeIndent) throwError(state, 'bad indentation of a sequence entry')\n if (state.line === entryLine &&\n state.input.charCodeAt(state.position) === 0x2D/* - */ &&\n isWsOrEolOrEnd(state.input.charCodeAt(state.position + 1))) {\n throwError(state, 'bad indentation of a sequence entry')\n }\n }\n\n addPopEvent(state)\n return true\n}\n\nfunction readBlockMapping (state: ParserState, nodeIndent: number, flowIndent: number, props: NodeProperties) {\n let atExplicitKey = false\n let detected = false\n let mappingOpened = false\n let pendingExplicitKey = false\n\n if (state.firstTabInLine !== -1) return false\n\n let ch = state.input.charCodeAt(state.position)\n\n while (ch !== 0) {\n if (!atExplicitKey && state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine\n throwError(state, 'tab characters must not be used in indentation')\n }\n\n const following = state.input.charCodeAt(state.position + 1)\n const entryLine = state.line\n\n if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && isWsOrEolOrEnd(following)) {\n if (!mappingOpened) {\n addMappingEvent(state, state.position, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, COLLECTION_STYLE.BLOCK)\n mappingOpened = true\n }\n\n if (ch === 0x3F/* ? */) {\n if (atExplicitKey) addEmptyScalarEvent(state)\n detected = true\n atExplicitKey = true\n } else if (atExplicitKey) {\n atExplicitKey = false\n } else {\n addEmptyScalarEvent(state)\n detected = true\n atExplicitKey = false\n }\n\n state.position += 1\n pendingExplicitKey = true\n } else {\n // An explicit key awaiting its value, followed by an implicit key, means\n // the explicit key's value is empty. Emit it now (append-only) so it is\n // ordered before the implicit key node read just below.\n if (atExplicitKey) {\n addEmptyScalarEvent(state)\n atExplicitKey = false\n }\n\n const beforeKey = snapshotState(state)\n\n if (!parseNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n break\n }\n\n if (state.line === entryLine) {\n ch = state.input.charCodeAt(state.position)\n\n while (isWhiteSpace(ch)) {\n ch = state.input.charCodeAt(++state.position)\n }\n\n if (ch === 0x3A/* : */) {\n ch = state.input.charCodeAt(++state.position)\n\n if (!isWsOrEolOrEnd(ch)) {\n throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping')\n }\n\n if (!mappingOpened) {\n // The key is already parsed; insert the MAPPING event before its\n // events instead of rolling back and re-reading the key.\n state.events.splice(beforeKey.eventsLength, 0, {\n type: EVENT_ID.MAPPING,\n start: beforeKey.position,\n anchorStart: props.anchorStart,\n anchorEnd: props.anchorEnd,\n tagStart: props.tagStart,\n tagEnd: props.tagEnd,\n style: COLLECTION_STYLE.BLOCK\n })\n mappingOpened = true\n }\n\n detected = true\n atExplicitKey = false\n pendingExplicitKey = false\n } else if (detected) {\n throwError(state, \"expected ':' after a mapping key\")\n } else {\n // Not a mapping. If outer properties are pending, roll back so the\n // caller re-reads this node with them attached (events are append-only).\n if (props.anchorStart !== NO_RANGE || props.tagStart !== NO_RANGE) {\n restoreState(state, beforeKey)\n return false\n }\n return true\n }\n } else if (detected) {\n throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key')\n } else {\n if (props.anchorStart !== NO_RANGE || props.tagStart !== NO_RANGE) {\n restoreState(state, beforeKey)\n return false\n }\n return true\n }\n }\n\n if (parseNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, pendingExplicitKey)) {\n pendingExplicitKey = false\n }\n\n if (!atExplicitKey) {\n if (pendingExplicitKey) {\n addEmptyScalarEvent(state)\n pendingExplicitKey = false\n }\n }\n\n skipSeparationSpace(state, true)\n ch = state.input.charCodeAt(state.position)\n\n if ((state.line === entryLine || state.lineIndent > nodeIndent) && ch !== 0) {\n throwError(state, 'bad indentation of a mapping entry')\n } else if (state.lineIndent < nodeIndent) {\n break\n }\n }\n\n if (!detected) return false\n if (atExplicitKey) addEmptyScalarEvent(state)\n if (mappingOpened) addPopEvent(state)\n return true\n}\n\nfunction parseNode (\n state: ParserState,\n parentIndent: number,\n nodeContext: NodeContext,\n allowToSeek: boolean,\n allowCompact: boolean,\n allowPropertyMapping = true\n): boolean {\n if (state.depth >= state.maxDepth) {\n throwError(state, `nesting exceeded maxDepth (${state.maxDepth})`)\n }\n\n state.depth++\n\n let indentStatus = 1\n let atNewLine = false\n let hasContent = false\n let propertyStart: ParserSnapshot | null = null\n const props = emptyProperties()\n\n let allowBlockScalars = nodeContext === CONTEXT_BLOCK_OUT || nodeContext === CONTEXT_BLOCK_IN\n let allowBlockCollections = allowBlockScalars\n const allowBlockStyles = allowBlockScalars\n\n if (allowToSeek && skipSeparationSpace(state, true)) {\n atNewLine = true\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0\n } else {\n indentStatus = -1\n }\n }\n\n if (indentStatus === 1) {\n while (true) {\n const ch = state.input.charCodeAt(state.position)\n const propertyState = snapshotState(state)\n\n if (atNewLine &&\n indentStatus !== 1 &&\n (ch === 0x21/* ! */ || ch === 0x26/* & */)) {\n break\n }\n\n if (atNewLine &&\n allowBlockStyles &&\n (props.tagStart !== NO_RANGE || props.anchorStart !== NO_RANGE) &&\n (ch === 0x21/* ! */ || ch === 0x26/* & */)) {\n const fallbackState = snapshotState(state)\n const flowIndent = parentIndent + 1\n const mappingIndent = state.position - state.lineStart\n\n if (readBlockMapping(state, mappingIndent, flowIndent, props) &&\n state.events[fallbackState.eventsLength]?.type === EVENT_ID.MAPPING) {\n state.depth--\n return true\n }\n\n restoreState(state, fallbackState)\n }\n\n if (atNewLine &&\n ((ch === 0x21/* ! */ && props.tagStart !== NO_RANGE) ||\n (ch === 0x26/* & */ && props.anchorStart !== NO_RANGE))) {\n break\n }\n\n if (!readTagProperty(state, props, nodeContext === CONTEXT_FLOW_IN) && !readAnchorProperty(state, props)) {\n break\n }\n\n if (propertyStart === null) propertyStart = propertyState\n\n if (skipSeparationSpace(state, true)) {\n atNewLine = true\n allowBlockCollections = allowBlockStyles\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0\n } else {\n indentStatus = -1\n }\n } else {\n allowBlockCollections = false\n }\n }\n }\n\n if (allowBlockCollections) {\n allowBlockCollections = atNewLine || allowCompact\n }\n\n if (indentStatus === 1 || nodeContext === CONTEXT_BLOCK_OUT) {\n const flowIndent = nodeContext === CONTEXT_FLOW_IN || nodeContext === CONTEXT_FLOW_OUT\n ? parentIndent\n : parentIndent + 1\n const blockIndent = state.position - state.lineStart\n\n if (indentStatus === 1) {\n if ((allowBlockCollections &&\n (readBlockSequence(state, blockIndent, props) ||\n readBlockMapping(state, blockIndent, flowIndent, props))) ||\n readFlowCollection(state, flowIndent, props)) {\n hasContent = true\n } else {\n const ch = state.input.charCodeAt(state.position)\n\n if (propertyStart !== null && allowPropertyMapping && allowBlockStyles && !allowBlockCollections &&\n ch !== 0x7C/* | */ && ch !== 0x3E/* > */) {\n const fallbackState = snapshotState(state)\n const propertyIndent = propertyStart.position - propertyStart.lineStart\n\n restoreState(state, propertyStart)\n\n if (readBlockMapping(state, propertyIndent, flowIndent, emptyProperties()) &&\n state.events[fallbackState.eventsLength]?.type === EVENT_ID.MAPPING) {\n hasContent = true\n } else {\n restoreState(state, fallbackState)\n }\n }\n\n if (!hasContent &&\n ((allowBlockScalars && readBlockScalar(state, flowIndent, props)) ||\n readSingleQuotedScalar(state, flowIndent, props) ||\n readDoubleQuotedScalar(state, flowIndent, props) ||\n readAlias(state, props) ||\n readPlainScalar(state, flowIndent, nodeContext, props))) {\n hasContent = true\n }\n }\n } else if (indentStatus === 0) {\n hasContent = allowBlockCollections && readBlockSequence(state, blockIndent, props)\n }\n }\n\n allowBlockScalars = allowBlockScalars && !hasContent\n\n if (!hasContent && (props.anchorStart !== NO_RANGE || props.tagStart !== NO_RANGE || allowBlockScalars)) {\n addScalarEvent(\n state,\n NO_RANGE,\n NO_RANGE,\n props.anchorStart,\n props.anchorEnd,\n props.tagStart,\n props.tagEnd,\n SCALAR_STYLE.PLAIN\n )\n hasContent = true\n }\n\n state.depth--\n return hasContent || props.anchorStart !== NO_RANGE || props.tagStart !== NO_RANGE\n}\n\nfunction readDirective (state: ParserState) {\n if (state.lineIndent > 0 || state.input.charCodeAt(state.position) !== 0x25/* % */) return false\n\n state.position++\n const nameStart = state.position\n\n while (state.input.charCodeAt(state.position) !== 0 && !isWsOrEol(state.input.charCodeAt(state.position))) state.position++\n\n const name = state.input.slice(nameStart, state.position)\n const args: string[] = []\n\n if (name.length === 0) throwError(state, 'directive name must not be less than one character in length')\n\n while (state.input.charCodeAt(state.position) !== 0 && !isEol(state.input.charCodeAt(state.position))) {\n while (isWhiteSpace(state.input.charCodeAt(state.position))) state.position++\n if (state.input.charCodeAt(state.position) === 0x23/* # */ || isEol(state.input.charCodeAt(state.position)) || state.input.charCodeAt(state.position) === 0) break\n\n const start = state.position\n while (state.input.charCodeAt(state.position) !== 0 && !isWsOrEol(state.input.charCodeAt(state.position))) state.position++\n args.push(state.input.slice(start, state.position))\n }\n\n if (isEol(state.input.charCodeAt(state.position))) consumeLineBreak(state)\n\n if (name === 'YAML') {\n if (state.directives.some(directive => directive.kind === 'yaml')) throwError(state, 'duplication of %YAML directive')\n if (args.length !== 1) throwError(state, 'YAML directive accepts exactly one argument')\n\n const match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0])\n if (match === null) throwError(state, 'ill-formed argument of the YAML directive')\n if (parseInt(match[1], 10) !== 1) throwError(state, 'unacceptable YAML version of the document')\n\n state.directives.push({ kind: 'yaml', version: args[0] })\n } else if (name === 'TAG') {\n if (args.length !== 2) throwError(state, 'TAG directive accepts exactly two arguments')\n\n const [handle, prefix] = args\n if (!PATTERN_TAG_HANDLE.test(handle)) throwError(state, 'ill-formed tag handle (first argument) of the TAG directive')\n if (HAS_OWN.call(state.tagHandlers, handle)) throwError(state, `there is a previously declared suffix for \"${handle}\" tag handle`)\n if (!PATTERN_TAG_PREFIX.test(prefix)) throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive')\n\n state.tagHandlers[handle] = prefix\n state.directives.push({ kind: 'tag', handle, prefix })\n }\n\n return true\n}\n\nfunction readDocument (state: ParserState) {\n state.directives = []\n state.tagHandlers = Object.create(null)\n let hasDirectives = false\n\n skipSeparationSpace(state, true)\n\n while (readDirective(state)) {\n hasDirectives = true\n skipSeparationSpace(state, true)\n }\n\n let explicitStart = false\n let explicitEnd = false\n let allowCompact = true\n\n if (state.lineIndent === 0 &&\n state.input.charCodeAt(state.position) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 1) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 2) === 0x2D/* - */ &&\n isWsOrEolOrEnd(state.input.charCodeAt(state.position + 3))) {\n explicitStart = true\n const markerLine = state.line\n state.position += 3\n skipSeparationSpace(state, true)\n allowCompact = state.line > markerLine\n } else if (hasDirectives) {\n throwError(state, 'directives end mark is expected')\n }\n\n const documentEventIndex = state.events.length\n if (!explicitStart &&\n state.position === state.lineStart &&\n state.input.charCodeAt(state.position) === 0x2E/* . */ &&\n testDocumentSeparator(state)) {\n state.position += 3\n skipSeparationSpace(state, true)\n return\n }\n\n addDocumentEvent(state, explicitStart, false)\n if (!parseNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, allowCompact, allowCompact)) {\n addEmptyScalarEvent(state)\n }\n skipSeparationSpace(state, true)\n\n if (state.position === state.lineStart && testDocumentSeparator(state)) {\n explicitEnd = state.input.charCodeAt(state.position) === 0x2E/* . */\n if (explicitEnd) {\n const markerLine = state.line\n state.position += 3\n skipSeparationSpace(state, true)\n if (state.line === markerLine && state.position < state.length) {\n throwError(state, 'end of the stream or a document separator is expected')\n }\n }\n }\n\n const documentEvent = state.events[documentEventIndex]\n if (documentEvent?.type === EVENT_ID.DOCUMENT) documentEvent.explicitEnd = explicitEnd\n\n addPopEvent(state)\n\n if (!explicitEnd &&\n state.position < state.length &&\n !testDocumentBoundary(state)) {\n throwError(state, 'end of the stream or a document separator is expected')\n }\n}\n\n/**\n * Parses YAML into a flat event stream referencing source text by offsets.\n *\n * @category Events\n */\nfunction parseEvents (input: string, options: ParserOptions): Event[] {\n const length = input.length\n const state: ParserState = {\n ...DEFAULT_PARSER_OPTIONS,\n ...options,\n input: `${input}\\0`,\n length,\n position: 0,\n line: 0,\n lineStart: 0,\n lineIndent: 0,\n firstTabInLine: -1,\n depth: 0,\n directives: [],\n tagHandlers: Object.create(null),\n events: []\n }\n\n const nullpos = input.indexOf('\\0')\n if (nullpos !== -1) YAMLException.throwAt(input, nullpos, 'null byte is not allowed in input', state.filename)\n\n while (state.position < state.length) {\n skipByteOrderMark(state)\n skipSeparationSpace(state, true)\n if (state.position >= state.length) break\n const documentStart = state.position\n readDocument(state)\n if (state.position === documentStart) {\n // Internal progress guard: if readDocument() ever returns without\n // consuming input, stop here instead of looping forever.\n /* c8 ignore next */\n throwError(state, 'can not read a document')\n }\n }\n\n return state.events\n}\n\nexport {\n parseEvents,\n DEFAULT_PARSER_OPTIONS,\n type ParserOptions\n}\n","import { YAMLException } from './common/exception.ts'\nimport { pick } from './common/object.ts'\nimport {\n constructFromEvents,\n DEFAULT_CONSTRUCTOR_OPTIONS,\n type ConstructorOptions\n} from './parser/constructor.ts'\nimport {\n parseEvents,\n DEFAULT_PARSER_OPTIONS,\n type ParserOptions\n} from './parser/parser.ts'\n\n// `source` is supplied by `loadDocuments` itself, not by the public caller.\n/** @category Main */\ninterface LoadOptions extends ParserOptions, Omit<ConstructorOptions, 'source'> {}\n\n/** @inline */\ntype LoadAllIterator = (document: unknown) => void\n\nconst DEFAULT_LOAD_OPTIONS: Required<LoadOptions> = {\n ...DEFAULT_PARSER_OPTIONS,\n ...DEFAULT_CONSTRUCTOR_OPTIONS\n}\n\nfunction loadDocuments (input: string, options: LoadOptions = {}) {\n const opts = { ...DEFAULT_LOAD_OPTIONS, ...options }\n const source = String(input)\n\n const PARSER_OPT_KEYS = Object.keys(DEFAULT_PARSER_OPTIONS) as\n (keyof typeof DEFAULT_PARSER_OPTIONS)[]\n const CONSTRUCTOR_OPT_KEYS = Object.keys(DEFAULT_CONSTRUCTOR_OPTIONS) as\n (keyof typeof DEFAULT_CONSTRUCTOR_OPTIONS)[]\n\n const events = parseEvents(source, pick(opts, PARSER_OPT_KEYS))\n return constructFromEvents(events, { ...pick(opts, CONSTRUCTOR_OPT_KEYS), source })\n}\n\n/**\n * Same as {@link load}, but understands multi-document sources.\n * Returns an array of documents.\n *\n * @category Main\n */\nfunction loadAll (input: string, options?: LoadOptions): unknown[]\n\n/**\n * @deprecated Iterator is not supported.\n */\nfunction loadAll (input: string, iterator: null, options?: LoadOptions): unknown[]\n\n/**\n * @deprecated Iterator is not supported.\n */\nfunction loadAll (input: string, iterator: LoadAllIterator, options?: LoadOptions): void\nfunction loadAll (\n input: string,\n iteratorOrOptions?: LoadAllIterator | LoadOptions | null,\n options?: LoadOptions\n) {\n let iterator: LoadAllIterator | null = null\n\n if (typeof iteratorOrOptions === 'function') {\n iterator = iteratorOrOptions\n } else if (iteratorOrOptions !== null && typeof iteratorOrOptions === 'object') {\n options = iteratorOrOptions\n }\n\n const documents = loadDocuments(input, options)\n\n if (iterator === null) return documents\n for (const document of documents) iterator(document)\n}\n\n/**\n * Parses `string` as a single YAML document. Throws {@link YAMLException} on\n * error. This function does not understand multi-document or empty sources; it\n * throws an exception on those.\n *\n * > [!NOTE]\n * > 1. When processing untrusted input, see the\n * > [security considerations](../docs/safety.md).\n * > 2. All exceptions MUST be caught, not just {@link YAMLException}.\n * > 3. The default {@link CORE_SCHEMA} comes without the `!!merge` tag. You can\n * > easily enable it if needed.\n * > 4. The default {@link mapTag} is `{}`-object based, with known limitations\n * > (see description). For full compatibility use {@link realMapTag}\n * > instead (it uses native JS `Map`).\n *\n * @example\n * Enable {@link mergeTag} and {@link realMapTag}:\n *\n * ```javascript\n * import { load, CORE_SCHEMA, mergeTag, realMapTag } from 'js-yaml'\n *\n * try {\n * load(data, { schema: CORE_SCHEMA.withTags(mergeTag, realMapTag) })\n * } catch (e) {\n * console.error(e)\n * }\n * ```\n *\n * @category Main\n */\nfunction load (input: string, options?: LoadOptions) {\n const documents = loadDocuments(input, options)\n\n if (documents.length === 0) throw new YAMLException('expected a document, but the input is empty')\n if (documents.length === 1) return documents[0]\n\n throw new YAMLException('expected a single document in the stream, but found more')\n}\n\nexport {\n load,\n loadAll,\n type LoadOptions\n}\n","// JS value graph → AST. Knows tags (`identify` / `represent`). A single\n// identity-`Map` walk handles dedup: a repeat occurrence of an object (including\n// a cycle) becomes an `alias`, and the first occurrence gets an `anchor`.\n\nimport { YAMLException } from '../common/exception.ts'\nimport { type Schema } from '../schema.ts'\nimport { type TagDefinition } from '../tag.ts'\nimport { tagNameShort } from '../common/tagname.ts'\nimport { COLLECTION_STYLE, SCALAR_STYLE } from '../parser/events.ts'\nimport {\n type Document,\n type Node,\n type ScalarNode,\n type SequenceNode,\n type MappingNode\n} from './nodes.ts'\n\n/** @category AST */\ninterface FromJsOptions {\n /** Inlines duplicate objects instead of converting them into references. */\n noRefs?: boolean\n\n /**\n * Skips unrepresentable values instead of throwing. Invalid mapping pairs\n * and sequence items are skipped; `undefined` sequence items become `null`.\n */\n skipInvalid?: boolean\n}\n\n// A match candidate. `implicitTag` means the tag is not printed (implicit\n// scalars and the default str/seq/map tags).\ninterface RepresentType {\n tag: TagDefinition\n implicitTag: boolean\n}\n\n// Returned by `build` when no tag matched.\nconst INVALID = Symbol('INVALID')\n\ninterface FromJsState {\n representTypes: RepresentType[]\n noRefs: boolean\n skipInvalid: boolean\n\n // Already-built collection values → their node, for anchor/alias dedup.\n refs: Map<unknown, Node>\n refCounter: number\n}\n\nfunction buildRepresentTypes (schema: Schema): RepresentType[] {\n const defaultTags = new Set<TagDefinition>([\n schema.defaultScalarTag,\n schema.defaultSequenceTag,\n schema.defaultMappingTag\n ].filter((t): t is TagDefinition => t !== undefined))\n\n // Default container/str tags go last so a more specific tag identifying the\n // same JS value (e.g. a custom tag on a plain object) wins.\n const implicitScalars = schema.implicitScalarTags\n const explicitTags = schema.tags.filter(t =>\n !(t.nodeKind === 'scalar' && t.implicit) && !defaultTags.has(t))\n const defaultTagsLast = schema.tags.filter(t => defaultTags.has(t))\n\n return [\n ...implicitScalars.map(tag => ({ tag, implicitTag: true })),\n ...explicitTags.map(tag => ({ tag, implicitTag: false })),\n ...defaultTagsLast.map(tag => ({ tag, implicitTag: true }))\n ]\n}\n\n// First tag whose `identify` accepts `object`.\nfunction matchTag (state: FromJsState, object: unknown): { tag: TagDefinition, tagName: string, implicitTag: boolean } | null {\n for (let index = 0, length = state.representTypes.length; index < length; index += 1) {\n const { tag, implicitTag } = state.representTypes[index]\n\n if (tag.identify(object)) {\n let tagName: string\n if (tag.matchByTagPrefix) {\n tagName = tag.representTagName(object)\n } else {\n tagName = tag.tagName\n }\n return { tag, tagName, implicitTag }\n }\n }\n\n return null\n}\n\n// Build a node for `object`, or INVALID when no tag matches. `undefined` never\n// throws (caller decides: null in a sequence, skip in a mapping, '' at root);\n// any other unrepresentable value throws unless `skipInvalid`.\nfunction build (state: FromJsState, object: unknown): Node | typeof INVALID {\n if (!state.noRefs && object !== null && typeof object === 'object') {\n const existing = state.refs.get(object)\n if (existing) {\n if (existing.anchor === undefined) existing.anchor = `ref_${state.refCounter++}`\n return { kind: 'alias', anchor: existing.anchor }\n }\n }\n\n const matched = matchTag(state, object)\n\n if (!matched) {\n if (object === undefined) return INVALID\n if (state.skipInvalid) return INVALID\n throw new YAMLException(`unacceptable kind of an object to dump ${Object.prototype.toString.call(object)}`)\n }\n\n const { tag, tagName, implicitTag } = matched\n const nodeTagName = implicitTag ? tagName : tagNameShort(tagName)\n\n if (tag.nodeKind === 'scalar') {\n const node: ScalarNode = {\n kind: 'scalar',\n tag: nodeTagName,\n tagged: !implicitTag,\n style: SCALAR_STYLE.PLAIN,\n value: tag.represent(object)\n }\n return node\n }\n\n if (tag.nodeKind === 'sequence') {\n const container = tag.represent(object)\n const node: SequenceNode = {\n kind: 'sequence',\n tag: nodeTagName,\n tagged: !implicitTag,\n style: COLLECTION_STYLE.BLOCK,\n items: []\n }\n if (!state.noRefs) state.refs.set(object, node)\n\n for (let index = 0, length = container.length; index < length; index += 1) {\n let item = build(state, container[index])\n // An invalid element becomes null; a still-invalid null then skips/throws.\n if (item === INVALID && container[index] === undefined) item = build(state, null)\n if (item === INVALID) continue\n node.items.push(item)\n }\n return node\n }\n\n // mapping — the canonical form is always a `Map`.\n const map = tag.represent(object)\n const node: MappingNode = {\n kind: 'mapping',\n tag: nodeTagName,\n tagged: !implicitTag,\n style: COLLECTION_STYLE.BLOCK,\n items: []\n }\n if (!state.noRefs) state.refs.set(object, node)\n\n for (const [objectKey, objectValue] of map) {\n const key = build(state, objectKey)\n if (key === INVALID) continue // invalid key skips the pair\n const value = build(state, objectValue)\n if (value === INVALID) continue // invalid value skips the pair\n node.items.push({ key, value })\n }\n return node\n}\n\n/**\n * Convert JS object to AST. A JS value is one YAML document. An unrepresentable\n * root becomes an empty document, which the presenter renders as an empty\n * string.\n *\n * @category AST\n */\nfunction jsToAst (input: unknown, schema: Schema, options: FromJsOptions = {}): Document[] {\n const state: FromJsState = {\n representTypes: buildRepresentTypes(schema),\n noRefs: options.noRefs ?? false,\n skipInvalid: options.skipInvalid ?? false,\n refs: new Map(),\n refCounter: 0\n }\n\n const root = build(state, input)\n return [{ contents: root === INVALID ? null : root, directives: [] }]\n}\n\nexport {\n jsToAst,\n type FromJsOptions\n}\n","// Depth-first AST traversal. Mirrors the `kind` walk of the presenter and the\n// `from_*` builders, but stays read-oriented: nodes are plain objects, so a\n// visitor mutates them in place. Control signals let it prune or stop the walk.\n\nimport {\n type Node,\n type Document\n} from './nodes.ts'\n\n// Returned by a visitor to control the walk; anything else (incl. `undefined`)\n// descends as usual.\n/**\n * Return from a visitor to stop the whole traversal.\n *\n * @category AST\n */\nconst VISIT_BREAK = Symbol('visit:break')\n\n/**\n * Return from a visitor to skip the current node's children.\n *\n * @category AST\n */\nconst VISIT_SKIP = Symbol('visit:skip')\n\n/** @inline */\ntype VisitControl = typeof VISIT_BREAK | typeof VISIT_SKIP | undefined | void\n\n/**\n * Traversal-derived position of the current node. Kept off the node itself: a\n * node may sit in several places (alias/dedup reuse), so depth/role belong to\n * the walk, not the node. {@link VisitContext.parent} `kind` +\n * {@link VisitContext.isKey} pin the exact slot.\n *\n * @category AST\n */\ninterface VisitContext {\n /** 0 = document content root */\n depth: number\n\n /** Enclosing sequence/mapping, null at the root */\n parent: Node | null\n\n /** Node sits in a mapping key position */\n isKey: boolean\n}\n\n/** @category AST */\ntype Visitor = (node: Node, ctx: VisitContext) => VisitControl\n\n// Returns `true` once `VISIT_BREAK` was seen, so callers can unwind the walk.\nfunction visitNode (node: Node, visitor: Visitor, ctx: VisitContext): boolean {\n const control = visitor(node, ctx)\n if (control === VISIT_BREAK) return true\n if (control === VISIT_SKIP) return false\n\n const depth = ctx.depth + 1\n\n switch (node.kind) {\n case 'sequence':\n for (const item of node.items) {\n if (visitNode(item, visitor, { depth, parent: node, isKey: false })) return true\n }\n break\n case 'mapping':\n for (const { key, value } of node.items) {\n if (visitNode(key, visitor, { depth, parent: node, isKey: true })) return true\n if (visitNode(value, visitor, { depth, parent: node, isKey: false })) return true\n }\n break\n }\n\n return false\n}\n\n/**\n * Walk every node in the documents, calling {@link Visitor} once per\n * node (pre-order).\n *\n * @category AST\n */\nfunction visit (documents: Document[], visitor: Visitor): void {\n for (const doc of documents) {\n if (doc.contents && visitNode(doc.contents, visitor, { depth: 0, parent: null, isKey: false })) return\n }\n}\n\nexport {\n visit,\n VISIT_BREAK,\n VISIT_SKIP,\n type Visitor,\n type VisitContext\n}\n","import { SCALAR_STYLE, type ScalarStyle } from '../parser/events.ts'\nimport { type ScalarLayout } from './scalar_styler.ts'\n\nfunction hasBit (mask: number, bit: number): boolean { return (mask & (1 << bit)) !== 0 }\n\n// This should eventually be a presenter option, but collection styling,\n// especially key layout, must be designed first to decide whether scalar and\n// collection width limits should share an option or be configured separately.\nconst MIN_SCALAR_CONTENT_WIDTH = 40\n\n/**\n * Default scalar styling rules in application order.\n * See [Scalar styling](../../docs/scalar_styling.md) for usage details.\n *\n * @category AST\n */\nconst DEFAULT_SCALAR_STYLE_RULES = {\n applyQuoteFlowKeysOption,\n doubleQuoteForInvisibles,\n doubleQuoteWhitespaceOnly,\n applyForceQuotesOption,\n tryLongOrMultilineAsBlock,\n quoteInvalidPlain,\n fallbackToDoubleQuoted\n} as const\n\nfunction _preferredQuotedStyle (layout: ScalarLayout): ScalarStyle {\n if (layout.presenterOptions.quoteStyle === 'single' &&\n hasBit(layout.allowedStylesMask, SCALAR_STYLE.SINGLE_QUOTED)) {\n return SCALAR_STYLE.SINGLE_QUOTED\n }\n\n return SCALAR_STYLE.DOUBLE_QUOTED\n}\n\nfunction applyQuoteFlowKeysOption (layout: ScalarLayout): void {\n if (!layout.presenterOptions.quoteFlowKeys) return\n\n // quoteFlowKeys applies only to plain scalar keys in flow mappings.\n if (!layout.isKey || !layout.flowOnly || layout.style !== SCALAR_STYLE.PLAIN) return\n\n layout.style = SCALAR_STYLE.DOUBLE_QUOTED\n}\n\nfunction doubleQuoteForInvisibles (layout: ScalarLayout): void {\n if (layout.style === SCALAR_STYLE.PLAIN &&\n /[\\t\\x7F-\\xA0\\u2028\\u2029\\uFEFF\\uFFFE\\uFFFF]/.test(layout.node.value)) {\n layout.style = SCALAR_STYLE.DOUBLE_QUOTED\n }\n}\n\nfunction doubleQuoteWhitespaceOnly (layout: ScalarLayout): void {\n // Block styles normally make multiline structure easier to see, but\n // whitespace-only content turns that structure into visually empty lines,\n // so force double quotes for this special case.\n if (layout.style === SCALAR_STYLE.PLAIN && /^\\s+$/.test(layout.node.value)) {\n layout.style = SCALAR_STYLE.DOUBLE_QUOTED\n }\n}\n\nfunction applyForceQuotesOption (layout: ScalarLayout): void {\n if (!layout.presenterOptions.forceQuotes) return\n\n // forceQuotes applies only to plain string values, not to mapping keys\n // or other types.\n if (layout.isKey || layout.style !== SCALAR_STYLE.PLAIN) return\n if (layout.node.tag !== layout.presenterOptions.schema.defaultScalarTag.tagName) return\n\n layout.style = layout.node.value.includes('\\n')\n ? SCALAR_STYLE.DOUBLE_QUOTED\n : _preferredQuotedStyle(layout)\n}\n\nfunction tryLongOrMultilineAsBlock (layout: ScalarLayout): void {\n if (layout.style !== SCALAR_STYLE.PLAIN || layout.isKey) return\n\n const value = layout.node.value\n const multiline = value.indexOf('\\n') !== -1\n\n // Literal and folded block style bits are always set together, so checking\n // either one is sufficient.\n if (!hasBit(layout.allowedStylesMask, SCALAR_STYLE.LITERAL_BLOCK)) {\n if (multiline) layout.style = SCALAR_STYLE.DOUBLE_QUOTED\n return\n }\n\n const w = layout.presenterOptions.lineWidth\n\n if (w === -1) {\n if (multiline) layout.style = SCALAR_STYLE.LITERAL_BLOCK\n return\n }\n\n const availableWidth = Math.max(\n Math.min(w, MIN_SCALAR_CONTENT_WIDTH),\n w - layout.shiftOfContent\n )\n\n let position = 0\n let shouldFold = false\n\n // Check whether at least one line exceeds the width budget\n // and can be split at a space.\n while (position <= value.length) {\n let lineEnd = value.length\n\n const nextLineBreak = value.indexOf('\\n', position)\n\n if (nextLineBreak !== -1) lineEnd = nextLineBreak\n\n const line = value.slice(position, lineEnd)\n\n if (line.length > availableWidth &&\n line[0] !== ' ' &&\n / [^ \\t]/.test(line)) {\n shouldFold = true\n }\n\n if (nextLineBreak === -1) break\n position = nextLineBreak + 1\n }\n\n if (shouldFold) {\n layout.style = SCALAR_STYLE.FOLDED_BLOCK\n } else if (multiline) {\n layout.style = SCALAR_STYLE.LITERAL_BLOCK\n }\n}\n\nfunction quoteInvalidPlain (layout: ScalarLayout): void {\n if (layout.style === SCALAR_STYLE.PLAIN &&\n !hasBit(layout.allowedStylesMask, SCALAR_STYLE.PLAIN)) {\n layout.style = _preferredQuotedStyle(layout)\n }\n}\n\nfunction fallbackToDoubleQuoted (layout: ScalarLayout): void {\n if (!hasBit(layout.allowedStylesMask, layout.style)) {\n layout.style = SCALAR_STYLE.DOUBLE_QUOTED\n }\n}\n\nexport { MIN_SCALAR_CONTENT_WIDTH, DEFAULT_SCALAR_STYLE_RULES }\n","import { SCALAR_STYLE, type ScalarStyle } from '../parser/events.ts'\nimport { type Node, type ScalarNode } from './nodes.ts'\nimport { type PresenterOptions } from './presenter.ts'\nimport { MIN_SCALAR_CONTENT_WIDTH } from './styler_defaults.ts'\n\n/** Scalar presentation state passed to styling rules. @category AST */\ninterface ScalarLayout {\n readonly node: Readonly<ScalarNode>\n readonly parent: Readonly<Node> | null\n readonly level: number\n readonly isKey: boolean\n readonly flowOnly: boolean\n readonly shiftOfParent: number\n readonly shiftOfContent: number\n readonly shiftOfFirstLine: number\n readonly presenterOptions: Readonly<Required<PresenterOptions>>\n /**\n * Bit mask of allowed styles; each bit corresponds to a {@link SCALAR_STYLE}\n * value.\n */\n allowedStylesMask: number\n /**\n * Selected output style, which styling rules may modify. To avoid overriding\n * earlier decisions, a rule should normally modify it only while it is\n * {@link SCALAR_STYLE.PLAIN}.\n */\n style: ScalarStyle\n}\n\n/** Function signature for scalar styling rules. @category AST */\ntype ScalarStyleRule = (layout: ScalarLayout) => void\n\nfunction setBit (mask: number, bit: number): number { return mask | (1 << bit) }\n\n// YAML 1.2.2 character productions.\n// https://yaml.org/spec/1.2.2/#51-character-set\nconst SRC_C_PRINTABLE = '[\\\\x09\\\\x0A\\\\x0D\\\\x20-\\\\x7E\\\\x85\\\\xA0-\\\\uD7FF\\\\uE000-\\\\uFFFD\\\\u{10000}-\\\\u{10FFFF}]'\nconst SRC_B_CHAR = '[\\\\n\\\\r]'\nconst SRC_C_BYTE_ORDER_MARK = '\\\\uFEFF'\nconst SRC_S_WHITE = '[ \\\\t]'\nconst SRC_NB_CHAR = `(?:(?!(?:${SRC_B_CHAR}|${SRC_C_BYTE_ORDER_MARK}))${SRC_C_PRINTABLE})`\nconst SRC_NS_CHAR = `(?:(?!${SRC_S_WHITE})${SRC_NB_CHAR})`\n\n// YAML 1.2.2 [2] nb-json.\nconst SRC_NB_JSON = '[\\\\x09\\\\x20-\\\\uD7FF\\\\uE000-\\\\uFFFF\\\\u{10000}-\\\\u{10FFFF}]'\n\n// YAML 1.2.2 indicator productions.\n// https://yaml.org/spec/1.2.2/#54-indicator-characters\nconst SRC_C_INDICATOR = '[-?:,\\\\[\\\\]{}#&*!|>\\'\"%@`]'\nconst SRC_C_FLOW_INDICATOR = '[,\\\\[\\\\]{}]'\n\n// YAML 1.2.2 [127]-[129] ns-plain-safe(c).\n// https://yaml.org/spec/1.2.2/#733-plain-style\nconst SRC_NS_PLAIN_SAFE_FLOW_OUT = SRC_NS_CHAR\nconst SRC_NS_PLAIN_SAFE_FLOW_IN = `(?:(?!${SRC_C_FLOW_INDICATOR})${SRC_NS_CHAR})`\n\n// YAML 1.2.2 [126] ns-plain-first(c).\nconst SRC_NS_PLAIN_FIRST_FLOW_OUT =\n `(?:(?:(?!${SRC_C_INDICATOR})${SRC_NS_CHAR})|[?:-](?=${SRC_NS_PLAIN_SAFE_FLOW_OUT}))`\nconst SRC_NS_PLAIN_FIRST_FLOW_IN =\n `(?:(?:(?!${SRC_C_INDICATOR})${SRC_NS_CHAR})|[?:-](?=${SRC_NS_PLAIN_SAFE_FLOW_IN}))`\n\n// YAML 1.2.2 [130] ns-plain-char(c).\n// The production itself requires lookbehind, so these regexps require ES2018 lookbehind support.\n// const SRC_NS_PLAIN_CHAR_FLOW_OUT =\n// `(?:(?:(?![:#])${SRC_NS_PLAIN_SAFE_FLOW_OUT})|(?<=${SRC_NS_CHAR})#|:(?=${SRC_NS_PLAIN_SAFE_FLOW_OUT}))`\n// const SRC_NS_PLAIN_CHAR_FLOW_IN =\n// `(?:(?:(?![:#])${SRC_NS_PLAIN_SAFE_FLOW_IN})|(?<=${SRC_NS_CHAR})#|:(?=${SRC_NS_PLAIN_SAFE_FLOW_IN}))`\n\n// ES2015-compatible alternative without lookbehind: consume each run of hashes\n// together with the preceding non-hash ns-plain-char.\nconst SRC_NS_PLAIN_CHAR_FLOW_OUT =\n `(?:(?:(?![:#])${SRC_NS_PLAIN_SAFE_FLOW_OUT})|:(?=${SRC_NS_PLAIN_SAFE_FLOW_OUT}))#*`\nconst SRC_NS_PLAIN_CHAR_FLOW_IN =\n `(?:(?:(?![:#])${SRC_NS_PLAIN_SAFE_FLOW_IN})|:(?=${SRC_NS_PLAIN_SAFE_FLOW_IN}))#*`\n\n// YAML 1.2.2 [132] nb-ns-plain-in-line(c).\nconst SRC_NB_NS_PLAIN_IN_LINE_FLOW_OUT = `(?:${SRC_S_WHITE}*${SRC_NS_PLAIN_CHAR_FLOW_OUT})*`\nconst SRC_NB_NS_PLAIN_IN_LINE_FLOW_IN = `(?:${SRC_S_WHITE}*${SRC_NS_PLAIN_CHAR_FLOW_IN})*`\n\n// YAML 1.2.2 [133] ns-plain-one-line(c).\nconst SRC_NS_PLAIN_ONE_LINE_FLOW_OUT =\n `${SRC_NS_PLAIN_FIRST_FLOW_OUT}#*${SRC_NB_NS_PLAIN_IN_LINE_FLOW_OUT}`\nconst SRC_NS_PLAIN_ONE_LINE_FLOW_IN =\n `${SRC_NS_PLAIN_FIRST_FLOW_IN}#*${SRC_NB_NS_PLAIN_IN_LINE_FLOW_IN}`\nconst SRC_NS_PLAIN_ONE_LINE_BLOCK_KEY = SRC_NS_PLAIN_ONE_LINE_FLOW_OUT\nconst SRC_NS_PLAIN_ONE_LINE_FLOW_KEY = SRC_NS_PLAIN_ONE_LINE_FLOW_IN\n\n// YAML 1.2.2 [134] s-ns-plain-next-line(n,c).\n// ScalarNode.value contains the folded value, not the source text: one source\n// line break became a space, while k > 1 breaks became k - 1 LF characters.\n// The space case is already accepted by [132]; each remaining run of LFs\n// therefore represents a transition to the next non-empty content line in [134].\nconst SRC_S_NS_PLAIN_NEXT_LINE_FLOW_OUT =\n `\\\\n+${SRC_NS_PLAIN_CHAR_FLOW_OUT}${SRC_NB_NS_PLAIN_IN_LINE_FLOW_OUT}`\nconst SRC_S_NS_PLAIN_NEXT_LINE_FLOW_IN =\n `\\\\n+${SRC_NS_PLAIN_CHAR_FLOW_IN}${SRC_NB_NS_PLAIN_IN_LINE_FLOW_IN}`\n\n// YAML 1.2.2 [135] ns-plain-multi-line(n,c).\nconst SRC_NS_PLAIN_MULTI_LINE_FLOW_OUT =\n `${SRC_NS_PLAIN_ONE_LINE_FLOW_OUT}(?:${SRC_S_NS_PLAIN_NEXT_LINE_FLOW_OUT})*`\nconst SRC_NS_PLAIN_MULTI_LINE_FLOW_IN =\n `${SRC_NS_PLAIN_ONE_LINE_FLOW_IN}(?:${SRC_S_NS_PLAIN_NEXT_LINE_FLOW_IN})*`\n\n// YAML 1.2.2 [131] ns-plain(n,c).\nconst NS_PLAIN_FLOW_OUT = new RegExp(`^(?:${SRC_NS_PLAIN_MULTI_LINE_FLOW_OUT})$`, 'u')\nconst NS_PLAIN_FLOW_IN = new RegExp(`^(?:${SRC_NS_PLAIN_MULTI_LINE_FLOW_IN})$`, 'u')\nconst NS_PLAIN_BLOCK_KEY = new RegExp(`^(?:${SRC_NS_PLAIN_ONE_LINE_BLOCK_KEY})$`, 'u')\nconst NS_PLAIN_FLOW_KEY = new RegExp(`^(?:${SRC_NS_PLAIN_ONE_LINE_FLOW_KEY})$`, 'u')\n\n// YAML 1.2.2 [118]-[125], projected to ScalarNode.value: doubled quotes\n// are already decoded, and flow folding represents content line feeds as LF.\nconst NB_SINGLE_ONE_LINE = new RegExp(`^(?:${SRC_NB_JSON})*$`, 'u')\nconst NB_SINGLE_MULTI_LINE = new RegExp(`^(?:${SRC_NB_JSON}|\\\\n)*$`, 'u')\n\n// YAML 1.2.2 [170]-[182], projected to ScalarNode.value: source line breaks\n// are normalized to LF; every other content character must be nb-char.\nconst BLOCK_SCALAR_CONTENT = new RegExp(`^(?:${SRC_NB_CHAR}|\\\\n)*$`, 'u')\n\n// YAML 1.2.2 [206] c-forbidden.\n// https://yaml.org/spec/1.2.2/#912-document-markers\nconst C_FORBIDDEN_FIRST_LINE = /^(?:---|\\.\\.\\.)(?=$|[ \\t\\n\\r])/\nconst C_FORBIDDEN_CONTENT = /^(?:---|\\.\\.\\.)(?=$|[ \\t\\n\\r])/m\n\nfunction canUsePlain (layout: ScalarLayout): boolean {\n const str = layout.node.value\n\n // Allow null to be rendered as an empty scalar; its tag is checked below.\n if (str !== '') {\n const nsPlain = layout.isKey\n ? (layout.flowOnly ? NS_PLAIN_FLOW_KEY : NS_PLAIN_BLOCK_KEY)\n : (layout.flowOnly ? NS_PLAIN_FLOW_IN : NS_PLAIN_FLOW_OUT)\n\n if (!nsPlain.test(str)) return false\n if (layout.shiftOfFirstLine === 0 && C_FORBIDDEN_FIRST_LINE.test(str)) return false\n\n if (layout.shiftOfContent === 0) {\n const firstLineBreak = str.indexOf('\\n')\n\n if (firstLineBreak !== -1) {\n const content = str.slice(firstLineBreak + 1)\n\n if (C_FORBIDDEN_CONTENT.test(content)) return false\n }\n }\n }\n\n // Outside the plain-syntax BNF: preserve the node tag under implicit resolution.\n const resolvedTag = layout.presenterOptions.schema.resolveImplicitScalarTag(str).tag.tagName\n\n if (!layout.node.tagged && resolvedTag !== layout.node.tag) return false\n\n // Outside YAML 1.2.2: preserve YAML 1.1 !!value semantics.\n // https://yaml.org/type/value.html\n if (!layout.node.tagged && str === '=' &&\n resolvedTag === layout.presenterOptions.schema.defaultScalarTag.tagName) return false\n\n return true\n}\n\nfunction canUseSingleQuoted (layout: ScalarLayout): boolean {\n const str = layout.node.value\n const nbSingleText = layout.isKey ? NB_SINGLE_ONE_LINE : NB_SINGLE_MULTI_LINE\n\n if (!nbSingleText.test(str)) return false\n\n // [123]-[125] exclude trailing and leading s-white around a folded break;\n // single-quoted style has no escape that could preserve it.\n if (/[ \\t]\\n|\\n[ \\t]/.test(str)) return false\n\n // A decoded LF is rendered through flow folding. At zero continuation\n // indentation, c-forbidden would terminate the quoted scalar.\n if (!layout.isKey && layout.shiftOfContent === 0) {\n const firstLineBreak = str.indexOf('\\n')\n\n if (firstLineBreak !== -1 &&\n C_FORBIDDEN_CONTENT.test(str.slice(firstLineBreak + 1))) return false\n }\n\n return true\n}\n\nfunction canUseBlock (layout: ScalarLayout): boolean {\n if (layout.flowOnly || !BLOCK_SCALAR_CONTENT.test(layout.node.value)) return false\n\n const contentIndent = layout.shiftOfContent - layout.shiftOfParent\n\n if (contentIndent < 1) return false\n\n // A leading space requires [163] c-indentation-indicator. Its value is 1-9.\n if (contentIndent > 9 && /^\\n* /.test(layout.node.value)) return false\n\n // Block content starts on its own line, so every zero-indented content line\n // is subject to [206] c-forbidden.\n if (layout.shiftOfContent === 0 && C_FORBIDDEN_CONTENT.test(layout.node.value)) return false\n\n return true\n}\n\nfunction detectAllowedStyles (layout: ScalarLayout): void {\n // [107] Double-quoted style can express arbitrary strings through escape sequences.\n let mask = setBit(0, SCALAR_STYLE.DOUBLE_QUOTED)\n\n if (canUsePlain(layout)) mask = setBit(mask, SCALAR_STYLE.PLAIN)\n if (canUseSingleQuoted(layout)) mask = setBit(mask, SCALAR_STYLE.SINGLE_QUOTED)\n\n if (canUseBlock(layout)) {\n mask = setBit(setBit(mask, SCALAR_STYLE.LITERAL_BLOCK), SCALAR_STYLE.FOLDED_BLOCK)\n }\n\n layout.allowedStylesMask = mask\n}\n\nfunction renderScalar (layout: ScalarLayout): string {\n switch (layout.style) {\n case SCALAR_STYLE.PLAIN:\n return renderPlain(layout)\n case SCALAR_STYLE.SINGLE_QUOTED:\n return renderSingleQuoted(layout)\n case SCALAR_STYLE.LITERAL_BLOCK:\n return renderLiteralBlock(layout)\n case SCALAR_STYLE.FOLDED_BLOCK:\n return renderFoldedBlock(layout)\n case SCALAR_STYLE.DOUBLE_QUOTED:\n return renderDoubleQuoted(layout)\n }\n}\n\nfunction renderPlain (layout: ScalarLayout): string {\n return encodeFlowBreaks(layout.node.value, layout.shiftOfContent)\n}\n\nfunction renderSingleQuoted (layout: ScalarLayout): string {\n const value = encodeFlowBreaks(layout.node.value, layout.shiftOfContent)\n return `'${value.replace(/'/g, \"''\")}'`\n}\n\nfunction renderLiteralBlock (layout: ScalarLayout): string {\n const value = layout.node.value\n\n return '|' + blockHeader(value, layout.shiftOfParent, layout.shiftOfContent) +\n dropEndingNewline(indentString(value, layout.shiftOfContent))\n}\n\nfunction renderFoldedBlock (layout: ScalarLayout): string {\n const value = layout.node.value\n const w = layout.presenterOptions.lineWidth\n let availableWidth = Infinity\n\n if (w !== -1) {\n availableWidth = Math.max(\n Math.min(w, MIN_SCALAR_CONTENT_WIDTH),\n w - layout.shiftOfContent\n )\n }\n\n return '>' + blockHeader(value, layout.shiftOfParent, layout.shiftOfContent) +\n dropEndingNewline(indentString(\n foldBlockScalar(value, availableWidth),\n layout.shiftOfContent\n ))\n}\n\nfunction renderDoubleQuoted (layout: ScalarLayout): string {\n return `\"${escapeString(layout.node.value)}\"`\n}\n\n// Flow scalars fold line breaks: a run of k source line breaks reparses to k-1\n// literal LF characters. Encode each run of p literal LF characters as p+1\n// breaks and indent the following content line.\nfunction encodeFlowBreaks (string: string, shiftOfContent: number): string {\n let nextLF = string.indexOf('\\n')\n if (nextLF === -1) return string\n\n const pad = ' '.repeat(shiftOfContent)\n let result = string.slice(0, nextLF)\n\n const lineRe = /(\\n+)([^\\n]*)/g\n lineRe.lastIndex = nextLF\n let match\n\n while ((match = lineRe.exec(string))) {\n const breaks = match[1].length\n const line = match[2]\n result += '\\n'.repeat(breaks + 1) + pad + line\n }\n\n return result\n}\n\n// Indents every line in a string. Empty lines (\\n only) are not indented.\nfunction indentString (string: string, spaces: number): string {\n const indent = ' '.repeat(spaces)\n let position = 0\n let result = ''\n const length = string.length\n\n while (position < length) {\n let line\n const next = string.indexOf('\\n', position)\n\n if (next === -1) {\n line = string.slice(position)\n position = length\n } else {\n line = string.slice(position, next + 1)\n position = next + 1\n }\n\n if (line.length && line !== '\\n') result += indent\n\n result += line\n }\n\n return result\n}\n\nfunction needIndentIndicator (string: string): boolean {\n return /^\\n* /.test(string)\n}\n\nfunction blockHeader (string: string, shiftOfParent: number, shiftOfContent: number): string {\n const indentIndicator = needIndentIndicator(string)\n ? String(shiftOfContent - shiftOfParent)\n : ''\n\n // The string '\\n' counts as a trailing empty line.\n const clip = string[string.length - 1] === '\\n'\n const keep = clip && (string[string.length - 2] === '\\n' || string === '\\n')\n const chomp = keep ? '+' : (clip ? '' : '-')\n\n return `${indentIndicator}${chomp}\\n`\n}\n\n// The presenter adds its own trailing newline.\nfunction dropEndingNewline (string: string): string {\n return string[string.length - 1] === '\\n' ? string.slice(0, -1) : string\n}\n\nfunction isMoreIndented (char: string): boolean {\n return char === ' ' || char === '\\t'\n}\n\nfunction foldLine (line: string, width: number): string {\n if (line === '' || isMoreIndented(line[0])) return line\n\n const breakRe = / [^ \\t]/g\n let match\n let start = 0\n let end\n let curr = 0\n let next = 0\n let result = ''\n\n while ((match = breakRe.exec(line))) {\n next = match.index\n\n if (next - start > width) {\n end = (curr > start) ? curr : next\n result += `\\n${line.slice(start, end)}`\n start = end + 1\n }\n\n curr = next\n }\n\n result += '\\n'\n\n if (line.length - start > width && curr > start) {\n result += `${line.slice(start, curr)}\\n${line.slice(curr + 1)}`\n } else {\n result += line.slice(start)\n }\n\n return result.slice(1)\n}\n\nfunction foldBlockScalar (string: string, width: number): string {\n const lineRe = /(\\n+)([^\\n]*)/g\n\n let nextLF = string.indexOf('\\n')\n if (nextLF === -1) nextLF = string.length\n lineRe.lastIndex = nextLF\n\n let result = foldLine(string.slice(0, nextLF), width)\n let prevMoreIndented = string[0] === '\\n' || isMoreIndented(string[0])\n let moreIndented\n let match\n\n while ((match = lineRe.exec(string))) {\n const prefix = match[1]\n const line = match[2]\n\n moreIndented = line !== '' && isMoreIndented(line[0])\n result += prefix +\n ((!prevMoreIndented && !moreIndented && line !== '') ? '\\n' : '') +\n foldLine(line, width)\n prevMoreIndented = moreIndented\n }\n\n return result\n}\n\n// Characters escaped in Double-Quoted Style:\n//\n// - the inverse of YAML 1.2.2 [1] c-printable;\n// - TAB, LF and CR, which c-printable includes;\n// - NEL, NBSP, LS, PS and BOM, which are escaped to make invisible content\n// visible;\n// - double quote and backslash, which must be escaped because they have\n// syntactic meaning.\n//\n// In Unicode mode, the surrogate range matches unpaired surrogates but does not\n// match either code unit of a valid surrogate pair.\n// https://yaml.org/spec/1.2.2/#rule-c-printable\nconst CHARACTERS_TO_ESCAPE =\n /[\"\\\\\\x00-\\x1F\\x7F-\\xA0\\u2028\\u2029\\uD800-\\uDFFF\\uFEFF\\uFFFE\\uFFFF]/gu\n\nfunction escapeCharacter (character: string): string {\n switch (character) {\n case '\\x00': return '\\\\0'\n case '\\x07': return '\\\\a'\n case '\\x08': return '\\\\b'\n case '\\x09': return '\\\\t'\n case '\\x0A': return '\\\\n'\n case '\\x0B': return '\\\\v'\n case '\\x0C': return '\\\\f'\n case '\\x0D': return '\\\\r'\n case '\\x1B': return '\\\\e'\n case '\"': return '\\\\\"'\n case '\\\\': return '\\\\\\\\'\n case '\\x85': return '\\\\N'\n case '\\xA0': return '\\\\_'\n case '\\u2028': return '\\\\L'\n case '\\u2029': return '\\\\P'\n }\n\n const code = character.charCodeAt(0)\n const hex = code.toString(16).toUpperCase()\n\n if (code <= 0xFF) return `\\\\x${'0'.repeat(2 - hex.length)}${hex}`\n\n return `\\\\u${'0'.repeat(4 - hex.length)}${hex}`\n}\n\nfunction escapeString (string: string): string {\n return string.replace(CHARACTERS_TO_ESCAPE, escapeCharacter)\n}\n\nexport {\n detectAllowedStyles,\n renderScalar,\n type ScalarLayout,\n type ScalarStyleRule\n}\n","// AST → text. Walks the node `kind`; the scalar machinery (style selection,\n// quoting, folding) is driven by node text, not by sniffing a JS value.\n\nimport { YAMLException } from '../common/exception.ts'\nimport { tagNameShort } from '../common/tagname.ts'\nimport { COLLECTION_STYLE, SCALAR_STYLE } from '../parser/events.ts'\nimport { type Schema } from '../schema.ts'\nimport {\n type Node,\n type Document,\n type ScalarNode,\n type SequenceNode,\n type MappingNode\n} from './nodes.ts'\nimport {\n detectAllowedStyles,\n renderScalar,\n type ScalarLayout,\n type ScalarStyleRule\n} from './scalar_styler.ts'\nimport { DEFAULT_SCALAR_STYLE_RULES } from './styler_defaults.ts'\n\nconst CHAR_LINE_FEED = 0x0A /* LF */\n\n/** @category AST */\ninterface PresenterOptions {\n /** Schema used when selecting a safe scalar style. */\n schema: Schema\n\n /**\n * Indentation width in spaces.\n *\n * @defaultValue `2`\n */\n indent?: number\n\n /**\n * Does not add an indentation level to array elements when enabled.\n *\n * @defaultValue `false`\n */\n seqNoIndent?: boolean\n\n /**\n * Allows a nested collection to start on the same line after `-`.\n *\n * @defaultValue `true`\n */\n seqInlineFirst?: boolean\n\n /**\n * Preferred line width for folding. Unbreakable and more-indented lines may\n * exceed it. Set to `-1` for unlimited width.\n *\n * @defaultValue `80`\n */\n lineWidth?: number\n\n /**\n * Adds spaces inside flow collection brackets: `{a: 1}` becomes `{ a: 1 }`.\n *\n * @defaultValue `false`\n */\n flowBracketPadding?: boolean\n\n /**\n * Omits the space after commas in flow collections: `[1, 2]` becomes\n * `[1,2]`.\n *\n * @defaultValue `false`\n */\n flowSkipCommaSpace?: boolean\n\n /**\n * Omits the space after `:` in flow mappings: `{\"a\": 1}` becomes `{\"a\":1}`.\n *\n * This forces `quoteFlowKeys`; otherwise `a:1` would be parsed as a single\n * plain scalar instead of a mapping entry.\n *\n * @defaultValue `false`\n */\n flowSkipColonSpace?: boolean\n\n /**\n * Quotes flow mapping keys: `{a: 1}` becomes `{\"a\": 1}`.\n *\n * @defaultValue `false`\n */\n quoteFlowKeys?: boolean\n\n /**\n * Quoting style to use when a string needs quotes.\n *\n * @defaultValue `'single'`\n */\n quoteStyle?: 'single' | 'double'\n\n /**\n * Quotes all non-key strings using {@link quoteStyle}.\n *\n * @defaultValue `false`\n */\n forceQuotes?: boolean\n\n /**\n * Customizes how strings are rendered as plain, quoted, literal, or folded\n * scalars. Rules are applied in array order; providing this option replaces\n * the {@link DEFAULT_SCALAR_STYLE_RULES default rules}.\n *\n * @defaultValue `Object.values(DEFAULT_SCALAR_STYLE_RULES)`\n */\n scalarStyleRules?: readonly ScalarStyleRule[]\n\n /**\n * Prints an explicit tag before an anchor: `&ref_0 !!set` becomes\n * `!!set &ref_0`.\n *\n * @defaultValue `false`\n */\n tagBeforeAnchor?: boolean\n}\n\nconst DEFAULT_PRESENTER_OPTIONS: Required<Omit<PresenterOptions, 'schema'>> = {\n indent: 2,\n seqNoIndent: false,\n seqInlineFirst: true,\n lineWidth: 80,\n flowBracketPadding: false,\n flowSkipCommaSpace: false,\n flowSkipColonSpace: false,\n quoteFlowKeys: false,\n quoteStyle: 'single',\n forceQuotes: false,\n scalarStyleRules: Object.keys(DEFAULT_SCALAR_STYLE_RULES)\n .map(name => Reflect.get(DEFAULT_SCALAR_STYLE_RULES, name)),\n tagBeforeAnchor: false\n}\n\ninterface PresenterState extends Required<PresenterOptions> {\n defaultScalarTagName: string\n openEnded: boolean\n}\n\nfunction nodeTagShort (node: ScalarNode | SequenceNode | MappingNode) {\n return node.tagged ? node.tag : tagNameShort(node.tag)\n}\n\nfunction createPresenterState (options: PresenterOptions): PresenterState {\n const opts = {\n ...DEFAULT_PRESENTER_OPTIONS,\n ...options\n }\n\n if (opts.flowSkipColonSpace) {\n opts.quoteFlowKeys = true\n }\n\n return {\n ...opts,\n defaultScalarTagName: opts.schema.defaultScalarTag.tagName,\n openEnded: false\n }\n}\n\nfunction generateNextLine (state: PresenterState, level: number) {\n return `\\n${' '.repeat(state.indent * level)}`\n}\n\nfunction scalarLayout (state: PresenterState, node: ScalarNode, parent: Readonly<Node> | null, level: number,\n isKey: boolean, flowOnly: boolean): ScalarLayout {\n const shiftOfParent = level === 0 ? -1 : state.indent * (level - 1)\n const shiftOfContent = state.indent * Math.max(1, level)\n\n return {\n node,\n parent,\n level,\n isKey,\n flowOnly,\n shiftOfParent,\n shiftOfContent,\n shiftOfFirstLine: level === 0 ? 0 : state.indent * level,\n presenterOptions: state,\n allowedStylesMask: 0,\n style: node.style\n }\n}\n\nfunction writeFlowSequence (state: PresenterState, level: number, node: SequenceNode) {\n let result = ''\n\n for (let index = 0, length = node.items.length; index < length; index += 1) {\n const item = writeNode(state, level, node.items[index], node, {}).text\n if (index > 0) result += `,${!state.flowSkipCommaSpace ? ' ' : ''}`\n result += item\n }\n\n const pad = state.flowBracketPadding && node.items.length > 0 ? ' ' : ''\n return `[${pad}${result}${pad}]`\n}\n\nfunction writeBlockSequence (state: PresenterState, level: number, node: SequenceNode, compact: boolean) {\n let result = ''\n\n for (let index = 0, length = node.items.length; index < length; index += 1) {\n const item = writeNode(state, level + 1, node.items[index], node,\n { block: true, compact: state.seqInlineFirst, isblockseq: true }).text\n\n if (!compact || result !== '') {\n result += generateNextLine(state, level)\n }\n\n // No trailing space when the value renders empty (e.g. null → '').\n if (item === '' || CHAR_LINE_FEED === item.charCodeAt(0)) {\n result += '-'\n } else {\n result += '- '\n }\n\n result += item\n }\n\n return result\n}\n\nfunction writeFlowMapping (state: PresenterState, level: number, node: MappingNode) {\n let result = ''\n\n for (const { key, value } of node.items) {\n let pairBuffer = ''\n if (result !== '') pairBuffer += `,${!state.flowSkipCommaSpace ? ' ' : ''}`\n\n const keyRender = writeNode(state, level, key, node, { iskey: true })\n const keyText = keyRender.text\n\n const valueText = writeNode(state, level, value, node, {}).text\n // No separating space when the value renders empty (e.g. null → '').\n const sep = state.flowSkipColonSpace || valueText === '' ? '' : ' '\n\n // An alias or a property-only scalar must be separated from `:` because the\n // colon can otherwise be consumed as part of the alias/anchor/tag name.\n const keyIsBareProps = key.kind === 'scalar' && keyRender.noBody &&\n (key.tagged || key.anchor !== undefined)\n const keyColonSep = key.kind === 'alias' || keyIsBareProps ? ' ' : ''\n\n pairBuffer += `${keyText}${keyColonSep}:${sep}${valueText}`\n\n result += pairBuffer\n }\n\n const pad = state.flowBracketPadding && result !== '' ? ' ' : ''\n return `{${pad}${result}${pad}}`\n}\n\nfunction writeBlockMapping (state: PresenterState, level: number, node: MappingNode, compact: boolean) {\n let result = ''\n\n for (let index = 0, length = node.items.length; index < length; index += 1) {\n let pairBuffer = ''\n\n if (!compact || result !== '') {\n pairBuffer += generateNextLine(state, level)\n }\n\n const { key, value } = node.items[index]\n\n // A block key — a block collection (mapping/sequence) or a block scalar\n // (literal/folded) — can't sit on a `key:` line, so it's written with block\n // context and the pair takes the explicit `? key / : value` form. A simple\n // scalar key stays inline (flow-vs-block is invisible there).\n const keyIsBlock =\n ((key.kind === 'mapping' || key.kind === 'sequence') &&\n key.style === COLLECTION_STYLE.BLOCK && key.items.length !== 0) ||\n (key.kind === 'scalar' &&\n (key.style === SCALAR_STYLE.LITERAL_BLOCK || key.style === SCALAR_STYLE.FOLDED_BLOCK))\n\n // The `?`/`:` indicators shift content right like a `-`, so a block key or\n // value that stays on the indicator line keeps its indentation under\n // seqNoIndent (`isblockseq`). One that drops to its own line (tag/anchor)\n // collapses to the parent indent, so leave the flag off there.\n const keyRender = keyIsBlock\n ? writeNode(state, level + 1, key, node,\n { block: true, compact: true, isblockseq: !cannotBeCompact(state, key, level + 1) })\n : writeNode(state, level + 1, key, node, { block: true, compact: true, iskey: true })\n const keyText = keyRender.text\n\n // Block key, over-long key, or multiline scalar key forces explicit form.\n // Multiline isn't a spec requirement — just matches pyyaml's simple-key rule.\n const keyHasLineBreak = key.kind === 'scalar' && key.value.indexOf('\\n') !== -1\n\n // YAML limits an implicit key to 1024 Unicode code points. `length` counts\n // UTF-16 code units, never fewer than code points, so it is a cheap safe\n // precheck. The `u` regexp then counts each [\\s\\S] match as one code point.\n const keyIsTooLong = keyText.length > 1024 && /^[\\s\\S]{1025}/u.test(keyText)\n const explicitPair = keyIsBlock || keyHasLineBreak || keyIsTooLong\n\n if (explicitPair) {\n if (keyText && CHAR_LINE_FEED === keyText.charCodeAt(0)) {\n pairBuffer += '?'\n } else {\n pairBuffer += '? '\n }\n }\n\n pairBuffer += keyText\n\n if (explicitPair) {\n pairBuffer += generateNextLine(state, level)\n }\n\n const valueText = writeNode(state, level + 1, value, node,\n { block: true, compact: explicitPair, isblockseq: explicitPair && !cannotBeCompact(state, value, level + 1) }).text\n\n // Keep a space before the colon when the key text ends in a leading\n // property rather than scalar content, so the colon can't be read as part\n // of it. Two cases: an inline alias key (`*b : v`), and an empty scalar key\n // whose whole text is its anchor/tag (`&a :`, `!!str :`) — without the\n // space `&a:` reparses as an anchored value, dropping the null key.\n const keyIsBareProps = key.kind === 'scalar' && keyRender.noBody &&\n (key.tagged || key.anchor !== undefined)\n const keyColonSep = !explicitPair && (key.kind === 'alias' || keyIsBareProps) ? ' ' : ''\n\n // No trailing space when the value renders empty (e.g. null → '').\n if (valueText === '' || CHAR_LINE_FEED === valueText.charCodeAt(0)) {\n pairBuffer += `${keyColonSep}:`\n } else {\n pairBuffer += `${keyColonSep}: `\n }\n\n pairBuffer += valueText\n\n result += pairBuffer\n }\n\n return result\n}\n\n// Where a node sits relative to its parent — drives layout/style decisions.\n// All flags default to false (the flow-context, non-key, non-compact case).\ninterface NodeContext {\n block?: boolean // block context (vs flow); propagates downward\n compact?: boolean // may start on the current line (no leading newline)\n iskey?: boolean // node is a mapping key\n isblockseq?: boolean // content follows an indicator (`-`, or `?`/`:` in an\n // explicit pair) that already shifted it right; keeps\n // its indentation under seqNoIndent\n}\n\ninterface NodeRender {\n text: string\n noBody: boolean\n}\n\n// A node can't sit compact on its parent's indicator (`-`/`?`/`:`) line when it\n// carries leading props (tag/anchor) that would collide with the indicator, or\n// when the indent step is too narrow for the 2-char indicator. Such a node drops\n// to its own line; a block collection that does so also collapses its seqNoIndent\n// indentation back to the parent.\nfunction cannotBeCompact (state: PresenterState, node: Node, level: number) {\n if (node.kind === 'alias') return true\n return node.tagged || node.anchor !== undefined || (state.indent < 2 && level > 0)\n}\n\nfunction writeNode (state: PresenterState, level: number, node: Node,\n parent: Readonly<Node> | null, ctx: NodeContext): NodeRender {\n if (node.kind === 'alias') {\n state.openEnded = false\n return { text: `*${node.anchor}`, noBody: false }\n }\n\n const { block = false, iskey = false, isblockseq = false } = ctx\n let compact = ctx.compact ?? false\n\n const hasAnchor = node.anchor !== undefined\n\n if (cannotBeCompact(state, node, level)) {\n compact = false\n }\n\n let body: string\n let shouldPrintTag = node.tagged\n const useBlockCollection = block &&\n (node.kind === 'mapping' || node.kind === 'sequence') &&\n node.style === COLLECTION_STYLE.BLOCK && node.items.length !== 0\n\n if (node.kind === 'mapping') {\n if (useBlockCollection) {\n body = writeBlockMapping(state, level, node, compact)\n } else {\n body = writeFlowMapping(state, level, node)\n }\n } else if (node.kind === 'sequence') {\n if (useBlockCollection) {\n if (state.seqNoIndent && !isblockseq && level > 0) {\n body = writeBlockSequence(state, level - 1, node, compact)\n } else {\n body = writeBlockSequence(state, level, node, compact)\n }\n } else {\n body = writeFlowSequence(state, level, node)\n }\n } else {\n const layout = scalarLayout(state, node, parent, level, iskey, !block)\n\n detectAllowedStyles(layout)\n for (const rule of state.scalarStyleRules) rule(layout)\n\n body = renderScalar(layout)\n state.openEnded =\n (layout.style === SCALAR_STYLE.LITERAL_BLOCK || layout.style === SCALAR_STYLE.FOLDED_BLOCK) &&\n (node.value === '\\n' || node.value.endsWith('\\n\\n'))\n\n // A flow sequence entry cannot be completely empty. Print the semantic tag\n // as the node property that explicitly indicates the entry's existence.\n shouldPrintTag = node.tagged ||\n (body === '' && layout.flowOnly && parent?.kind === 'sequence' && !hasAnchor) ||\n (layout.style !== SCALAR_STYLE.PLAIN && node.tag !== state.defaultScalarTagName)\n }\n\n // A flow collection ends with its closing indicator, not with its last child.\n if ((node.kind === 'mapping' || node.kind === 'sequence') && !useBlockCollection) {\n state.openEnded = false\n }\n\n // An indicator plus its mandatory separator occupies 2 columns. For wider\n // indentation, pad a compact block collection so its first item starts at\n // the same column as the following items.\n if (useBlockCollection && compact && level > 0 && state.indent > 2) {\n body = `${' '.repeat(state.indent - 2)}${body}`\n }\n\n const noBody = body === ''\n let text = body\n\n if (shouldPrintTag || hasAnchor) {\n const props: string[] = []\n const tag = shouldPrintTag ? nodeTagShort(node) : null\n const anchor = hasAnchor ? `&${node.anchor}` : null\n\n if (state.tagBeforeAnchor) {\n if (tag !== null) props.push(tag)\n if (anchor !== null) props.push(anchor)\n } else {\n if (anchor !== null) props.push(anchor)\n if (tag !== null) props.push(tag)\n }\n\n // No separator when the body is empty (e.g. `&anchor` on a null node) or\n // already starts on its own line.\n const sep = body === '' || body.charCodeAt(0) === CHAR_LINE_FEED ? '' : ' '\n text = `${props.join(' ')}${sep}${body}`\n }\n\n return { text, noBody }\n}\n\n// A bare (untagged, unanchored) non-empty block collection: writeNode renders it\n// in compact form with its first item on the opening line. That works mid-stream,\n// but right after a `---` the first item must drop to the next line. A tag/anchor\n// already forces the body onto its own line, so those stay on the `---` line.\nfunction rootStartsOwnLine (node: Node) {\n return (node.kind === 'sequence' || node.kind === 'mapping') &&\n node.style === COLLECTION_STYLE.BLOCK &&\n node.items.length !== 0 &&\n !node.tagged &&\n node.anchor === undefined\n}\n\nfunction writeDocumentDirectives (doc: Document) {\n let result = ''\n\n for (const directive of doc.directives) {\n if (directive.kind === 'yaml') {\n result += `%YAML ${directive.version}\\n`\n continue\n }\n\n const { handle, prefix } = directive\n result += `%TAG ${handle} ${prefix}\\n`\n }\n\n return result\n}\n\n/**\n * Build YAML from AST.\n *\n * @category AST\n */\nfunction present (documents: Document[], options: PresenterOptions): string {\n const state = createPresenterState(options)\n let result = ''\n let previousEnded = false\n\n for (let index = 0; index < documents.length; index += 1) {\n const doc = documents[index]\n state.openEnded = false\n const directives = writeDocumentDirectives(doc)\n const hasDirectives = directives !== ''\n const marker = doc.explicitStart || hasDirectives || (index > 0 && !previousEnded)\n\n result += directives\n\n if (doc.contents === null) {\n if (marker) result += '---\\n'\n } else if (marker) {\n const body = writeNode(state, 0, doc.contents, null, { block: true, compact: true }).text\n // Content shares the `---` line, except: an empty render (no separator at\n // all), a bare block collection (wraps to the next line), or directives\n // forcing `---` onto its own line.\n const sep = body === '' ? '' : (hasDirectives || rootStartsOwnLine(doc.contents) ? '\\n' : ' ')\n result += `---${sep}${body}\\n`\n } else {\n result += writeNode(state, 0, doc.contents, null, { block: true, compact: true }).text + '\\n'\n }\n\n previousEnded = doc.explicitEnd || state.openEnded\n if (previousEnded) {\n result += '...\\n'\n }\n }\n\n return result\n}\n\nexport {\n DEFAULT_PRESENTER_OPTIONS,\n present,\n type PresenterOptions\n}\n","import { DUMP_SCHEMA, type Schema } from './schema.ts'\nimport { COLLECTION_STYLE } from './parser/events.ts'\nimport { jsToAst } from './ast/from_js.ts'\nimport { visit, VISIT_SKIP } from './ast/visit.ts'\nimport { type Document } from './ast/nodes.ts'\nimport {\n DEFAULT_PRESENTER_OPTIONS,\n present,\n type PresenterOptions\n} from './ast/presenter.ts'\nimport { pick } from './common/object.ts'\n\n/** @category Main */\ninterface DumpOptions extends Omit<PresenterOptions, 'schema'> {\n /**\n * Schema to use.\n *\n * @defaultValue {@link DUMP_SCHEMA}\n */\n schema?: Schema\n\n /**\n * Skips invalid types instead of throwing. Invalid mapping pairs and sequence\n * items are skipped; `undefined` sequence items are serialized as `null`.\n *\n * @defaultValue `false`\n */\n skipInvalid?: boolean\n\n /**\n * Inlines duplicate objects instead of converting them into references.\n *\n * @defaultValue `false`\n */\n noRefs?: boolean\n\n /**\n * Nesting level at which collections switch from block to flow style. Set to\n * `-1` to never switch automatically.\n *\n * @defaultValue `-1`\n */\n flowLevel?: number\n\n /**\n * Sorts mapping keys when `true`. A function can be provided to define the\n * sort order.\n *\n * @defaultValue `false`\n * @deprecated Use {@link transform} to reorder mapping items.\n */\n sortKeys?: boolean | ((a: any, b: any) => number)\n\n /**\n * Mutates the generated AST before it is rendered.\n *\n * @example Sort mapping keys:\n *\n * ```typescript\n * import { dump, visit } from 'js-yaml'\n *\n * dump(value, {\n * transform: documents => visit(documents, node => {\n * if (node.kind === 'mapping') node.items.sort((a, b) => {\n * const x = a.key.kind === 'scalar' ? a.key.value : ''\n * const y = b.key.kind === 'scalar' ? b.key.value : ''\n * return x.localeCompare(y)\n * })\n * })\n * })\n * ```\n */\n transform?: (documents: Document[]) => void\n}\n\nconst DEFAULT_DUMP_OPTIONS: Required<DumpOptions> = {\n ...DEFAULT_PRESENTER_OPTIONS,\n schema: DUMP_SCHEMA,\n skipInvalid: false,\n noRefs: false,\n flowLevel: -1,\n sortKeys: false,\n transform: () => {}\n}\n\nfunction defaultCompareFn (a: any, b: any) {\n const x = String(a)\n const y = String(b)\n\n if (x < y) return -1\n if (x > y) return 1\n return 0\n}\n\n/**\n * Serializes JS object as a YAML document. By default it can dump every\n * supported YAML type, so it throws an exception if you try to dump regexps or\n * functions. However, you can disable exceptions by setting the\n * {@link DumpOptions.skipInvalid} option to `true`.\n *\n * @category Main\n */\nfunction dump (input: any, options: DumpOptions = {}) {\n const opts = { ...DEFAULT_DUMP_OPTIONS, ...options }\n\n const documents = jsToAst(input, opts.schema, {\n noRefs: opts.noRefs,\n skipInvalid: opts.skipInvalid\n })\n\n // flowLevel: every node at this depth switches to flow; the presenter forces\n // everything below into flow too, so the walk stops there.\n if (opts.flowLevel >= 0) {\n visit(documents, (node, ctx) => {\n if (ctx.depth < opts.flowLevel) return\n if (node.kind === 'sequence' || node.kind === 'mapping') {\n node.style = COLLECTION_STYLE.FLOW\n }\n return VISIT_SKIP\n })\n }\n\n if (opts.sortKeys) {\n const compareFn = opts.sortKeys === true ? defaultCompareFn : opts.sortKeys\n\n visit(documents, node => {\n if (node.kind !== 'mapping') return\n\n node.items.sort((a, b) => compareFn(\n a.key.kind === 'scalar' ? a.key.value : '',\n b.key.kind === 'scalar' ? b.key.value : ''\n ))\n })\n }\n\n opts.transform(documents)\n\n const PRESENTER_OPT_KEYS = Object.keys(DEFAULT_PRESENTER_OPTIONS) as\n (keyof typeof DEFAULT_PRESENTER_OPTIONS)[]\n\n return present(documents, { ...pick(opts, PRESENTER_OPT_KEYS), schema: opts.schema })\n}\n\nexport {\n dump,\n\n type DumpOptions\n}\n","// Parser events → AST. The second entry into the AST world (the first being\n// `jsToAst`): instead of building JS values like the constructor, it mirrors the\n// same document/sequence/mapping frame walk and emits `Node`s that keep the\n// original styles, tags and anchors, so parsed YAML can be re-dumped faithfully.\n\nimport {\n EVENT_ID,\n SCALAR_STYLE,\n type CollectionStyle,\n type Event,\n type MappingEvent,\n type ScalarEvent,\n type SequenceEvent\n} from '../parser/events.ts'\nimport { getScalarValue } from '../parser/parser_scalar.ts'\nimport { type Schema } from '../schema.ts'\nimport {\n type Node,\n type Document,\n type ScalarNode,\n type SequenceNode,\n type MappingNode,\n type AliasNode\n} from './nodes.ts'\n\nconst NO_RANGE = -1\n\ninterface DocumentFrame {\n kind: 'document'\n doc: Document\n}\n\ninterface SequenceFrame {\n kind: 'sequence'\n node: SequenceNode\n}\n\ninterface MappingFrame {\n kind: 'mapping'\n node: MappingNode\n key: Node | null\n}\n\ntype Frame = DocumentFrame | SequenceFrame | MappingFrame\n\n/** @category AST */\ninterface FromEventsOptions {\n /** Source text referenced by offsets in `events`. */\n source: string\n\n /** Schema used to resolve implicit scalar tags. */\n schema: Schema\n}\n\ninterface FromEventsState {\n source: string\n schema: Schema\n eventIndex: number\n position: number\n frames: Frame[]\n documents: Document[]\n}\n\nfunction eventPosition (event: Event) {\n if ('tagStart' in event && event.tagStart !== NO_RANGE) return event.tagStart\n if ('anchorStart' in event && event.anchorStart !== NO_RANGE) return event.anchorStart\n if ('valueStart' in event && event.valueStart !== NO_RANGE) return event.valueStart\n if ('start' in event) return event.start\n return 0\n}\n\nfunction rawTag (state: FromEventsState, event: ScalarEvent | SequenceEvent | MappingEvent) {\n return event.tagStart === NO_RANGE\n ? ''\n : state.source.slice(event.tagStart, event.tagEnd)\n}\n\nfunction anchorName (state: FromEventsState, event: ScalarEvent | SequenceEvent | MappingEvent) {\n return event.anchorStart === NO_RANGE\n ? undefined\n : state.source.slice(event.anchorStart, event.anchorEnd)\n}\n\nfunction buildScalar (state: FromEventsState, event: ScalarEvent): ScalarNode {\n const value = getScalarValue(state.source, event)\n const raw = rawTag(state, event)\n\n let tag: string\n let tagged = false\n if (raw !== '') {\n tagged = true\n tag = raw\n } else if (event.style === SCALAR_STYLE.PLAIN) {\n tag = state.schema.resolveImplicitScalarTag(value).tag.tagName\n } else {\n tag = state.schema.defaultScalarTag.tagName\n }\n\n return { kind: 'scalar', tag, tagged, style: event.style, anchor: anchorName(state, event), value }\n}\n\nfunction buildCollection (\n state: FromEventsState,\n event: SequenceEvent | MappingEvent,\n defaultTagName: string\n): { tag: string, tagged: boolean, style: CollectionStyle, anchor?: string } {\n const raw = rawTag(state, event)\n\n let tag: string\n let tagged = false\n if (raw === '') {\n tag = defaultTagName\n } else {\n tag = raw\n tagged = true\n }\n\n return { tag, tagged, style: event.style, anchor: anchorName(state, event) }\n}\n\nfunction addNode (state: FromEventsState, node: Node) {\n const frame = state.frames[state.frames.length - 1]\n\n if (frame.kind === 'document') {\n frame.doc.contents = node\n } else if (frame.kind === 'sequence') {\n frame.node.items.push(node)\n } else if (frame.key) {\n frame.node.items.push({ key: frame.key, value: node })\n frame.key = null\n } else {\n frame.key = node\n }\n}\n\n/**\n * Builds an AST from parser events\n *\n * @category AST\n */\nfunction eventsToAst (events: Event[], options: FromEventsOptions): Document[] {\n const state: FromEventsState = {\n source: options.source,\n schema: options.schema,\n eventIndex: 0,\n position: 0,\n frames: [],\n documents: []\n }\n\n while (state.eventIndex < events.length) {\n const event = events[state.eventIndex++]\n state.position = eventPosition(event)\n\n switch (event.type) {\n case EVENT_ID.DOCUMENT: {\n const doc: Document = {\n contents: null,\n explicitStart: event.explicitStart,\n explicitEnd: event.explicitEnd,\n directives: event.directives\n }\n state.frames.push({ kind: 'document', doc })\n break\n }\n\n case EVENT_ID.SCALAR:\n addNode(state, buildScalar(state, event))\n break\n\n case EVENT_ID.SEQUENCE: {\n const { tag, tagged, style, anchor } = buildCollection(state, event, 'tag:yaml.org,2002:seq')\n const node: SequenceNode = { kind: 'sequence', tag, tagged, style, anchor, items: [] }\n state.frames.push({ kind: 'sequence', node })\n break\n }\n\n case EVENT_ID.MAPPING: {\n const { tag, tagged, style, anchor } = buildCollection(state, event, 'tag:yaml.org,2002:map')\n const node: MappingNode = { kind: 'mapping', tag, tagged, style, anchor, items: [] }\n state.frames.push({ kind: 'mapping', node, key: null })\n break\n }\n\n case EVENT_ID.ALIAS: {\n const name = state.source.slice(event.anchorStart, event.anchorEnd)\n const node: AliasNode = { kind: 'alias', anchor: name }\n addNode(state, node)\n break\n }\n\n case EVENT_ID.POP: {\n const frame = state.frames.pop()!\n if (frame.kind === 'mapping' && frame.key) {\n throw new Error('incomplete mapping pair in event stream')\n }\n if (frame.kind === 'document') {\n state.documents.push(frame.doc)\n } else {\n addNode(state, frame.node)\n }\n break\n }\n }\n }\n\n return state.documents\n}\n\nexport {\n eventsToAst,\n type FromEventsOptions\n}\n","export {\n Schema,\n FAILSAFE_SCHEMA,\n JSON_SCHEMA,\n CORE_SCHEMA,\n YAML11_SCHEMA,\n DUMP_SCHEMA\n} from './schema.ts'\n\nexport {\n NOT_RESOLVED,\n defineScalarTag,\n defineSequenceTag,\n defineMappingTag,\n type ScalarTagDefinition,\n type SequenceTagDefinition,\n type MappingTagDefinition,\n type TagDefinition,\n type ScalarTagOptions,\n type SequenceTagOptions,\n type MappingTagOptions\n} from './tag.ts'\n\nexport { strTag } from './tag/scalar/str.ts'\nexport { nullCoreTag } from './tag/scalar/null_core.ts'\nexport { nullJsonTag } from './tag/scalar/null_json.ts'\nexport { nullYaml11Tag } from './tag/scalar/null_yaml11.ts'\nexport { boolCoreTag } from './tag/scalar/bool_core.ts'\nexport { boolJsonTag } from './tag/scalar/bool_json.ts'\nexport { boolYaml11Tag } from './tag/scalar/bool_yaml11.ts'\nexport { intCoreTag } from './tag/scalar/int_core.ts'\nexport { intJsonTag } from './tag/scalar/int_json.ts'\nexport { intYaml11Tag } from './tag/scalar/int_yaml11.ts'\nexport { floatCoreTag } from './tag/scalar/float_core.ts'\nexport { floatJsonTag } from './tag/scalar/float_json.ts'\nexport { floatYaml11Tag } from './tag/scalar/float_yaml11.ts'\nexport { mergeTag } from './tag/scalar/merge.ts'\nexport { binaryTag } from './tag/scalar/binary.ts'\nexport { timestampTag } from './tag/scalar/timestamp.ts'\n\nexport { seqTag } from './tag/sequence/seq.ts'\nexport { omapTag } from './tag/sequence/omap.ts'\nexport { pairsTag } from './tag/sequence/pairs.ts'\n\nexport { mapTag } from './tag/mapping/map.ts'\nexport { realMapTag } from './tag/mapping/real_map.ts'\nexport { legacyMapTag } from './tag/mapping/legacy_map.ts'\nexport { setTag } from './tag/mapping/set.ts'\n\nexport { load, loadAll, type LoadOptions } from './load.ts'\nexport { dump, type DumpOptions } from './dump.ts'\nexport { YAMLException } from './common/exception.ts'\n\nexport {\n EVENT_ID,\n SCALAR_STYLE,\n COLLECTION_STYLE,\n CHOMPING_MODE,\n type EventId,\n type ScalarStyle,\n type CollectionStyle,\n type ChompingMode,\n\n type DocumentDirective,\n type DocumentEvent,\n type SequenceEvent,\n type MappingEvent,\n type ScalarEvent,\n type AliasEvent,\n type PopEvent,\n type Event\n} from './parser/events.ts'\n\nexport {\n parseEvents,\n type ParserOptions\n} from './parser/parser.ts'\n\nexport { getScalarValue } from './parser/parser_scalar.ts'\n\nexport {\n constructFromEvents,\n type ConstructorOptions\n} from './parser/constructor.ts'\n\nexport { eventsToAst, type FromEventsOptions } from './ast/from_events.ts'\nexport { jsToAst, type FromJsOptions } from './ast/from_js.ts'\nexport { present, type PresenterOptions } from './ast/presenter.ts'\nexport { type ScalarLayout, type ScalarStyleRule } from './ast/scalar_styler.ts'\nexport { DEFAULT_SCALAR_STYLE_RULES } from './ast/styler_defaults.ts'\n\nexport {\n visit,\n VISIT_BREAK,\n VISIT_SKIP,\n type Visitor,\n type VisitContext\n} from './ast/visit.ts'\n\nexport {\n type Node,\n type Document,\n type NodeBase,\n type ScalarNode,\n type SequenceNode,\n type MappingNode,\n type AliasNode\n} from './ast/nodes.ts'\n\n// Deprecated compatibility exports\n\nimport { EVENT_ID, SCALAR_STYLE, COLLECTION_STYLE, CHOMPING_MODE } from './parser/events.ts'\n\n/** @deprecated Use `EVENT_ID.DOCUMENT` instead. @internal */\nexport const EVENT_DOCUMENT = EVENT_ID.DOCUMENT\n/** @deprecated Use `EVENT_ID.SEQUENCE` instead. @internal */\nexport const EVENT_SEQUENCE = EVENT_ID.SEQUENCE\n/** @deprecated Use `EVENT_ID.MAPPING` instead. @internal */\nexport const EVENT_MAPPING = EVENT_ID.MAPPING\n/** @deprecated Use `EVENT_ID.SCALAR` instead. @internal */\nexport const EVENT_SCALAR = EVENT_ID.SCALAR\n/** @deprecated Use `EVENT_ID.ALIAS` instead. @internal */\nexport const EVENT_ALIAS = EVENT_ID.ALIAS\n/** @deprecated Use `EVENT_ID.POP` instead. @internal */\nexport const EVENT_POP = EVENT_ID.POP\n/** @deprecated Use `SCALAR_STYLE.PLAIN` instead. @internal */\nexport const SCALAR_STYLE_PLAIN = SCALAR_STYLE.PLAIN\n/** @deprecated Use `SCALAR_STYLE.SINGLE_QUOTED` instead. @internal */\nexport const SCALAR_STYLE_SINGLE_QUOTED = SCALAR_STYLE.SINGLE_QUOTED\n/** @deprecated Use `SCALAR_STYLE.DOUBLE_QUOTED` instead. @internal */\nexport const SCALAR_STYLE_DOUBLE_QUOTED = SCALAR_STYLE.DOUBLE_QUOTED\n/** @deprecated Use `SCALAR_STYLE.LITERAL_BLOCK` instead. @internal */\nexport const SCALAR_STYLE_LITERAL_BLOCK = SCALAR_STYLE.LITERAL_BLOCK\n/** @deprecated Use `SCALAR_STYLE.FOLDED_BLOCK` instead. @internal */\nexport const SCALAR_STYLE_FOLDED_BLOCK = SCALAR_STYLE.FOLDED_BLOCK\n/** @deprecated Use `COLLECTION_STYLE.BLOCK` instead. @internal */\nexport const COLLECTION_STYLE_BLOCK = COLLECTION_STYLE.BLOCK\n/** @deprecated Use `COLLECTION_STYLE.FLOW` instead. @internal */\nexport const COLLECTION_STYLE_FLOW = COLLECTION_STYLE.FLOW\n/** @deprecated Use `CHOMPING_MODE.CLIP` instead. @internal */\nexport const CHOMPING_CLIP = CHOMPING_MODE.CLIP\n/** @deprecated Use `CHOMPING_MODE.STRIP` instead. @internal */\nexport const CHOMPING_STRIP = CHOMPING_MODE.STRIP\n/** @deprecated Use `CHOMPING_MODE.KEEP` instead. @internal */\nexport const CHOMPING_KEEP = CHOMPING_MODE.KEEP\n"],"mappings":"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"}