@node-core/utils 7.3.1 → 7.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/bin/ncu-ci.js +39 -0
  2. package/lib/ci/availability.js +24 -0
  3. package/lib/ci/ci_utils.js +13 -0
  4. package/lib/ci/failure_file_scanner.js +72 -21
  5. package/lib/ci/jenkins.js +23 -0
  6. package/lib/ci/resumable_build.js +86 -0
  7. package/lib/ci/resume_ci.js +64 -25
  8. package/lib/ci/run_ci.js +39 -9
  9. package/lib/ci/workload.js +72 -0
  10. package/lib/update-v8/deps.js +4 -1
  11. package/node_modules/branch-diff/.github/dependabot.yml +14 -2
  12. package/node_modules/branch-diff/.github/workflows/test-and-release.yml +4 -15
  13. package/node_modules/branch-diff/CHANGELOG.md +24 -0
  14. package/node_modules/branch-diff/package.json +35 -3
  15. package/node_modules/js-yaml/dist/browser/js-yaml.esm.min.mjs +2 -2
  16. package/node_modules/js-yaml/dist/browser/js-yaml.esm.min.mjs.map +1 -1
  17. package/node_modules/js-yaml/dist/browser/js-yaml.umd.min.js +1 -1
  18. package/node_modules/js-yaml/dist/browser/js-yaml.umd.min.js.map +1 -1
  19. package/node_modules/js-yaml/dist/js-yaml.cjs.js +2 -1
  20. package/node_modules/js-yaml/dist/js-yaml.cjs.js.map +1 -1
  21. package/node_modules/js-yaml/dist/js-yaml.mjs +2 -1
  22. package/node_modules/js-yaml/dist/js-yaml.mjs.map +1 -1
  23. package/node_modules/js-yaml/package.json +1 -1
  24. package/node_modules/smol-toml/README.md +460 -273
  25. package/node_modules/smol-toml/dist/date.js +50 -21
  26. package/node_modules/smol-toml/dist/error.d.ts +1 -2
  27. package/node_modules/smol-toml/dist/error.js +6 -2
  28. package/node_modules/smol-toml/dist/extract.js +240 -20
  29. package/node_modules/smol-toml/dist/index.cjs +409 -373
  30. package/node_modules/smol-toml/dist/index.d.ts +5 -4
  31. package/node_modules/smol-toml/dist/index.js +2 -1
  32. package/node_modules/smol-toml/dist/parse.d.ts +38 -1
  33. package/node_modules/smol-toml/dist/parse.js +52 -37
  34. package/node_modules/smol-toml/dist/primitive.js +23 -110
  35. package/node_modules/smol-toml/dist/stringify.d.ts +2 -1
  36. package/node_modules/smol-toml/dist/stringify.js +74 -36
  37. package/node_modules/smol-toml/dist/struct.js +76 -99
  38. package/node_modules/smol-toml/dist/util.d.ts +6 -1
  39. package/node_modules/smol-toml/dist/util.js +4 -36
  40. package/node_modules/smol-toml/package.json +8 -8
  41. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"js-yaml.esm.min.mjs","names":[],"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\nfunction tagPercentEncode (source: string) {\n return encodeURI(source).replace(/!/g, '%21')\n}\n\nfunction tagNameFull (rawTag: string, tagHandlers?: Readonly<Record<string, string>>) {\n if (rawTag.startsWith('!<') && rawTag.endsWith('>')) {\n return decodeURIComponent(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 decodeURIComponent(prefix) + decodeURIComponent(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)}`\n }\n\n if (tag.slice(0, 18) === 'tag:yaml.org,2002:') {\n return `!!${tagPercentEncode(tag.slice(18))}`\n }\n\n return `!<${tagPercentEncode(tag)}>`\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 if (PATTERN_NON_PRINTABLE.test(state.input.slice(start, end))) {\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 try {\n decodeURIComponent(tagName)\n } catch {\n throwError(state, `tag name is malformed: ${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 < 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 (inFlow && 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 restoreState(state, beforeKey)\n addMappingEvent(state, beforeKey.position, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, COLLECTION_STYLE.BLOCK)\n mappingOpened = true\n // The key, the `:` and the space after it were already validated\n // above, before the rollback. Re-reading the same input cannot\n // fail, so just consume it again without error checks.\n parseNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)\n\n ch = state.input.charCodeAt(state.position)\n while (isWhiteSpace(ch)) {\n ch = state.input.charCodeAt(++state.position)\n }\n\n state.position++\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 try {\n decodeURIComponent(prefix)\n } catch {\n throwError(state, `tag prefix is malformed: ${prefix}`)\n }\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 values, not to mapping keys.\n if (layout.isKey || layout.style !== SCALAR_STYLE.PLAIN) 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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"}
1
+ {"version":3,"file":"js-yaml.esm.min.mjs","names":[],"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\nfunction tagPercentEncode (source: string) {\n return encodeURI(source).replace(/!/g, '%21')\n}\n\nfunction tagNameFull (rawTag: string, tagHandlers?: Readonly<Record<string, string>>) {\n if (rawTag.startsWith('!<') && rawTag.endsWith('>')) {\n return decodeURIComponent(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 decodeURIComponent(prefix) + decodeURIComponent(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)}`\n }\n\n if (tag.slice(0, 18) === 'tag:yaml.org,2002:') {\n return `!!${tagPercentEncode(tag.slice(18))}`\n }\n\n return `!<${tagPercentEncode(tag)}>`\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 if (PATTERN_NON_PRINTABLE.test(state.input.slice(start, end))) {\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 try {\n decodeURIComponent(tagName)\n } catch {\n throwError(state, `tag name is malformed: ${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 < 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 (inFlow && 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 restoreState(state, beforeKey)\n addMappingEvent(state, beforeKey.position, props.anchorStart, props.anchorEnd, props.tagStart, props.tagEnd, COLLECTION_STYLE.BLOCK)\n mappingOpened = true\n // The key, the `:` and the space after it were already validated\n // above, before the rollback. Re-reading the same input cannot\n // fail, so just consume it again without error checks.\n parseNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)\n\n ch = state.input.charCodeAt(state.position)\n while (isWhiteSpace(ch)) {\n ch = state.input.charCodeAt(++state.position)\n }\n\n state.position++\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 try {\n decodeURIComponent(prefix)\n } catch {\n throwError(state, `tag prefix is malformed: ${prefix}`)\n }\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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"}