yaml 2.8.4 → 3.0.0-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 (238) hide show
  1. package/README.md +65 -85
  2. package/{bin.mjs → bin.js} +1 -1
  3. package/dist/chunk-pbuEa-1d.js +13 -0
  4. package/dist/cli.d.ts +10 -7
  5. package/dist/cli.js +180 -0
  6. package/dist/directives-CiM56lHW.js +2963 -0
  7. package/dist/directives-DlYEVlkC.d.ts +1396 -0
  8. package/dist/index.d.ts +320 -25
  9. package/dist/index.js +4 -50
  10. package/dist/line-counter-bmCJ4fGy.js +3086 -0
  11. package/dist/public-api-BTMehGT6.js +77 -0
  12. package/dist/test-events.d.ts +6 -3
  13. package/dist/test-events.js +105 -126
  14. package/dist/util.d.ts +2 -16
  15. package/dist/util.js +2 -28
  16. package/package.json +20 -44
  17. package/browser/dist/compose/compose-collection.js +0 -88
  18. package/browser/dist/compose/compose-doc.js +0 -43
  19. package/browser/dist/compose/compose-node.js +0 -109
  20. package/browser/dist/compose/compose-scalar.js +0 -86
  21. package/browser/dist/compose/composer.js +0 -217
  22. package/browser/dist/compose/resolve-block-map.js +0 -115
  23. package/browser/dist/compose/resolve-block-scalar.js +0 -198
  24. package/browser/dist/compose/resolve-block-seq.js +0 -49
  25. package/browser/dist/compose/resolve-end.js +0 -37
  26. package/browser/dist/compose/resolve-flow-collection.js +0 -207
  27. package/browser/dist/compose/resolve-flow-scalar.js +0 -225
  28. package/browser/dist/compose/resolve-props.js +0 -146
  29. package/browser/dist/compose/util-contains-newline.js +0 -34
  30. package/browser/dist/compose/util-empty-scalar-position.js +0 -26
  31. package/browser/dist/compose/util-flow-indent-check.js +0 -15
  32. package/browser/dist/compose/util-map-includes.js +0 -13
  33. package/browser/dist/doc/Document.js +0 -335
  34. package/browser/dist/doc/anchors.js +0 -71
  35. package/browser/dist/doc/applyReviver.js +0 -55
  36. package/browser/dist/doc/createNode.js +0 -88
  37. package/browser/dist/doc/directives.js +0 -176
  38. package/browser/dist/errors.js +0 -57
  39. package/browser/dist/index.js +0 -17
  40. package/browser/dist/log.js +0 -11
  41. package/browser/dist/nodes/Alias.js +0 -116
  42. package/browser/dist/nodes/Collection.js +0 -147
  43. package/browser/dist/nodes/Node.js +0 -38
  44. package/browser/dist/nodes/Pair.js +0 -36
  45. package/browser/dist/nodes/Scalar.js +0 -24
  46. package/browser/dist/nodes/YAMLMap.js +0 -144
  47. package/browser/dist/nodes/YAMLSeq.js +0 -113
  48. package/browser/dist/nodes/addPairToJSMap.js +0 -63
  49. package/browser/dist/nodes/identity.js +0 -36
  50. package/browser/dist/nodes/toJS.js +0 -37
  51. package/browser/dist/parse/cst-scalar.js +0 -214
  52. package/browser/dist/parse/cst-stringify.js +0 -61
  53. package/browser/dist/parse/cst-visit.js +0 -97
  54. package/browser/dist/parse/cst.js +0 -98
  55. package/browser/dist/parse/lexer.js +0 -717
  56. package/browser/dist/parse/line-counter.js +0 -39
  57. package/browser/dist/parse/parser.js +0 -967
  58. package/browser/dist/public-api.js +0 -102
  59. package/browser/dist/schema/Schema.js +0 -37
  60. package/browser/dist/schema/common/map.js +0 -17
  61. package/browser/dist/schema/common/null.js +0 -15
  62. package/browser/dist/schema/common/seq.js +0 -17
  63. package/browser/dist/schema/common/string.js +0 -14
  64. package/browser/dist/schema/core/bool.js +0 -19
  65. package/browser/dist/schema/core/float.js +0 -43
  66. package/browser/dist/schema/core/int.js +0 -38
  67. package/browser/dist/schema/core/schema.js +0 -23
  68. package/browser/dist/schema/json/schema.js +0 -62
  69. package/browser/dist/schema/tags.js +0 -96
  70. package/browser/dist/schema/yaml-1.1/binary.js +0 -58
  71. package/browser/dist/schema/yaml-1.1/bool.js +0 -26
  72. package/browser/dist/schema/yaml-1.1/float.js +0 -46
  73. package/browser/dist/schema/yaml-1.1/int.js +0 -71
  74. package/browser/dist/schema/yaml-1.1/merge.js +0 -67
  75. package/browser/dist/schema/yaml-1.1/omap.js +0 -74
  76. package/browser/dist/schema/yaml-1.1/pairs.js +0 -78
  77. package/browser/dist/schema/yaml-1.1/schema.js +0 -39
  78. package/browser/dist/schema/yaml-1.1/set.js +0 -93
  79. package/browser/dist/schema/yaml-1.1/timestamp.js +0 -101
  80. package/browser/dist/stringify/foldFlowLines.js +0 -146
  81. package/browser/dist/stringify/stringify.js +0 -129
  82. package/browser/dist/stringify/stringifyCollection.js +0 -153
  83. package/browser/dist/stringify/stringifyComment.js +0 -20
  84. package/browser/dist/stringify/stringifyDocument.js +0 -85
  85. package/browser/dist/stringify/stringifyNumber.js +0 -25
  86. package/browser/dist/stringify/stringifyPair.js +0 -150
  87. package/browser/dist/stringify/stringifyString.js +0 -336
  88. package/browser/dist/util.js +0 -11
  89. package/browser/dist/visit.js +0 -233
  90. package/browser/index.js +0 -5
  91. package/browser/package.json +0 -3
  92. package/dist/cli.mjs +0 -201
  93. package/dist/compose/compose-collection.d.ts +0 -11
  94. package/dist/compose/compose-collection.js +0 -90
  95. package/dist/compose/compose-doc.d.ts +0 -7
  96. package/dist/compose/compose-doc.js +0 -45
  97. package/dist/compose/compose-node.d.ts +0 -29
  98. package/dist/compose/compose-node.js +0 -112
  99. package/dist/compose/compose-scalar.d.ts +0 -5
  100. package/dist/compose/compose-scalar.js +0 -88
  101. package/dist/compose/composer.d.ts +0 -63
  102. package/dist/compose/composer.js +0 -222
  103. package/dist/compose/resolve-block-map.d.ts +0 -6
  104. package/dist/compose/resolve-block-map.js +0 -117
  105. package/dist/compose/resolve-block-scalar.d.ts +0 -11
  106. package/dist/compose/resolve-block-scalar.js +0 -200
  107. package/dist/compose/resolve-block-seq.d.ts +0 -6
  108. package/dist/compose/resolve-block-seq.js +0 -51
  109. package/dist/compose/resolve-end.d.ts +0 -6
  110. package/dist/compose/resolve-end.js +0 -39
  111. package/dist/compose/resolve-flow-collection.d.ts +0 -7
  112. package/dist/compose/resolve-flow-collection.js +0 -209
  113. package/dist/compose/resolve-flow-scalar.d.ts +0 -10
  114. package/dist/compose/resolve-flow-scalar.js +0 -227
  115. package/dist/compose/resolve-props.d.ts +0 -23
  116. package/dist/compose/resolve-props.js +0 -148
  117. package/dist/compose/util-contains-newline.d.ts +0 -2
  118. package/dist/compose/util-contains-newline.js +0 -36
  119. package/dist/compose/util-empty-scalar-position.d.ts +0 -2
  120. package/dist/compose/util-empty-scalar-position.js +0 -28
  121. package/dist/compose/util-flow-indent-check.d.ts +0 -3
  122. package/dist/compose/util-flow-indent-check.js +0 -17
  123. package/dist/compose/util-map-includes.d.ts +0 -4
  124. package/dist/compose/util-map-includes.js +0 -15
  125. package/dist/doc/Document.d.ts +0 -141
  126. package/dist/doc/Document.js +0 -337
  127. package/dist/doc/anchors.d.ts +0 -24
  128. package/dist/doc/anchors.js +0 -76
  129. package/dist/doc/applyReviver.d.ts +0 -9
  130. package/dist/doc/applyReviver.js +0 -57
  131. package/dist/doc/createNode.d.ts +0 -17
  132. package/dist/doc/createNode.js +0 -90
  133. package/dist/doc/directives.d.ts +0 -49
  134. package/dist/doc/directives.js +0 -178
  135. package/dist/errors.d.ts +0 -21
  136. package/dist/errors.js +0 -62
  137. package/dist/log.d.ts +0 -3
  138. package/dist/log.js +0 -19
  139. package/dist/nodes/Alias.d.ts +0 -29
  140. package/dist/nodes/Alias.js +0 -118
  141. package/dist/nodes/Collection.d.ts +0 -73
  142. package/dist/nodes/Collection.js +0 -151
  143. package/dist/nodes/Node.d.ts +0 -53
  144. package/dist/nodes/Node.js +0 -40
  145. package/dist/nodes/Pair.d.ts +0 -22
  146. package/dist/nodes/Pair.js +0 -39
  147. package/dist/nodes/Scalar.d.ts +0 -47
  148. package/dist/nodes/Scalar.js +0 -27
  149. package/dist/nodes/YAMLMap.d.ts +0 -53
  150. package/dist/nodes/YAMLMap.js +0 -147
  151. package/dist/nodes/YAMLSeq.d.ts +0 -60
  152. package/dist/nodes/YAMLSeq.js +0 -115
  153. package/dist/nodes/addPairToJSMap.d.ts +0 -4
  154. package/dist/nodes/addPairToJSMap.js +0 -65
  155. package/dist/nodes/identity.d.ts +0 -23
  156. package/dist/nodes/identity.js +0 -53
  157. package/dist/nodes/toJS.d.ts +0 -29
  158. package/dist/nodes/toJS.js +0 -39
  159. package/dist/options.d.ts +0 -350
  160. package/dist/parse/cst-scalar.d.ts +0 -64
  161. package/dist/parse/cst-scalar.js +0 -218
  162. package/dist/parse/cst-stringify.d.ts +0 -8
  163. package/dist/parse/cst-stringify.js +0 -63
  164. package/dist/parse/cst-visit.d.ts +0 -39
  165. package/dist/parse/cst-visit.js +0 -99
  166. package/dist/parse/cst.d.ts +0 -109
  167. package/dist/parse/cst.js +0 -112
  168. package/dist/parse/lexer.d.ts +0 -87
  169. package/dist/parse/lexer.js +0 -719
  170. package/dist/parse/line-counter.d.ts +0 -22
  171. package/dist/parse/line-counter.js +0 -41
  172. package/dist/parse/parser.d.ts +0 -84
  173. package/dist/parse/parser.js +0 -972
  174. package/dist/public-api.d.ts +0 -44
  175. package/dist/public-api.js +0 -107
  176. package/dist/schema/Schema.d.ts +0 -17
  177. package/dist/schema/Schema.js +0 -39
  178. package/dist/schema/common/map.d.ts +0 -2
  179. package/dist/schema/common/map.js +0 -19
  180. package/dist/schema/common/null.d.ts +0 -4
  181. package/dist/schema/common/null.js +0 -17
  182. package/dist/schema/common/seq.d.ts +0 -2
  183. package/dist/schema/common/seq.js +0 -19
  184. package/dist/schema/common/string.d.ts +0 -2
  185. package/dist/schema/common/string.js +0 -16
  186. package/dist/schema/core/bool.d.ts +0 -4
  187. package/dist/schema/core/bool.js +0 -21
  188. package/dist/schema/core/float.d.ts +0 -4
  189. package/dist/schema/core/float.js +0 -47
  190. package/dist/schema/core/int.d.ts +0 -4
  191. package/dist/schema/core/int.js +0 -42
  192. package/dist/schema/core/schema.d.ts +0 -1
  193. package/dist/schema/core/schema.js +0 -25
  194. package/dist/schema/json/schema.d.ts +0 -2
  195. package/dist/schema/json/schema.js +0 -64
  196. package/dist/schema/json-schema.d.ts +0 -69
  197. package/dist/schema/tags.d.ts +0 -48
  198. package/dist/schema/tags.js +0 -99
  199. package/dist/schema/types.d.ts +0 -92
  200. package/dist/schema/yaml-1.1/binary.d.ts +0 -2
  201. package/dist/schema/yaml-1.1/binary.js +0 -70
  202. package/dist/schema/yaml-1.1/bool.d.ts +0 -7
  203. package/dist/schema/yaml-1.1/bool.js +0 -29
  204. package/dist/schema/yaml-1.1/float.d.ts +0 -4
  205. package/dist/schema/yaml-1.1/float.js +0 -50
  206. package/dist/schema/yaml-1.1/int.d.ts +0 -5
  207. package/dist/schema/yaml-1.1/int.js +0 -76
  208. package/dist/schema/yaml-1.1/merge.d.ts +0 -9
  209. package/dist/schema/yaml-1.1/merge.js +0 -71
  210. package/dist/schema/yaml-1.1/omap.d.ts +0 -22
  211. package/dist/schema/yaml-1.1/omap.js +0 -77
  212. package/dist/schema/yaml-1.1/pairs.d.ts +0 -10
  213. package/dist/schema/yaml-1.1/pairs.js +0 -82
  214. package/dist/schema/yaml-1.1/schema.d.ts +0 -1
  215. package/dist/schema/yaml-1.1/schema.js +0 -41
  216. package/dist/schema/yaml-1.1/set.d.ts +0 -28
  217. package/dist/schema/yaml-1.1/set.js +0 -96
  218. package/dist/schema/yaml-1.1/timestamp.d.ts +0 -6
  219. package/dist/schema/yaml-1.1/timestamp.js +0 -105
  220. package/dist/stringify/foldFlowLines.d.ts +0 -34
  221. package/dist/stringify/foldFlowLines.js +0 -151
  222. package/dist/stringify/stringify.d.ts +0 -21
  223. package/dist/stringify/stringify.js +0 -132
  224. package/dist/stringify/stringifyCollection.d.ts +0 -17
  225. package/dist/stringify/stringifyCollection.js +0 -155
  226. package/dist/stringify/stringifyComment.d.ts +0 -10
  227. package/dist/stringify/stringifyComment.js +0 -24
  228. package/dist/stringify/stringifyDocument.d.ts +0 -4
  229. package/dist/stringify/stringifyDocument.js +0 -87
  230. package/dist/stringify/stringifyNumber.d.ts +0 -2
  231. package/dist/stringify/stringifyNumber.js +0 -27
  232. package/dist/stringify/stringifyPair.d.ts +0 -3
  233. package/dist/stringify/stringifyPair.js +0 -152
  234. package/dist/stringify/stringifyString.d.ts +0 -9
  235. package/dist/stringify/stringifyString.js +0 -338
  236. package/dist/visit.d.ts +0 -102
  237. package/dist/visit.js +0 -236
  238. package/util.js +0 -2
@@ -1,129 +0,0 @@
1
- import { anchorIsValid } from '../doc/anchors.js';
2
- import { isPair, isAlias, isNode, isScalar, isCollection } from '../nodes/identity.js';
3
- import { stringifyComment } from './stringifyComment.js';
4
- import { stringifyString } from './stringifyString.js';
5
-
6
- function createStringifyContext(doc, options) {
7
- const opt = Object.assign({
8
- blockQuote: true,
9
- commentString: stringifyComment,
10
- defaultKeyType: null,
11
- defaultStringType: 'PLAIN',
12
- directives: null,
13
- doubleQuotedAsJSON: false,
14
- doubleQuotedMinMultiLineLength: 40,
15
- falseStr: 'false',
16
- flowCollectionPadding: true,
17
- indentSeq: true,
18
- lineWidth: 80,
19
- minContentWidth: 20,
20
- nullStr: 'null',
21
- simpleKeys: false,
22
- singleQuote: null,
23
- trailingComma: false,
24
- trueStr: 'true',
25
- verifyAliasOrder: true
26
- }, doc.schema.toStringOptions, options);
27
- let inFlow;
28
- switch (opt.collectionStyle) {
29
- case 'block':
30
- inFlow = false;
31
- break;
32
- case 'flow':
33
- inFlow = true;
34
- break;
35
- default:
36
- inFlow = null;
37
- }
38
- return {
39
- anchors: new Set(),
40
- doc,
41
- flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',
42
- indent: '',
43
- indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : ' ',
44
- inFlow,
45
- options: opt
46
- };
47
- }
48
- function getTagObject(tags, item) {
49
- if (item.tag) {
50
- const match = tags.filter(t => t.tag === item.tag);
51
- if (match.length > 0)
52
- return match.find(t => t.format === item.format) ?? match[0];
53
- }
54
- let tagObj = undefined;
55
- let obj;
56
- if (isScalar(item)) {
57
- obj = item.value;
58
- let match = tags.filter(t => t.identify?.(obj));
59
- if (match.length > 1) {
60
- const testMatch = match.filter(t => t.test);
61
- if (testMatch.length > 0)
62
- match = testMatch;
63
- }
64
- tagObj =
65
- match.find(t => t.format === item.format) ?? match.find(t => !t.format);
66
- }
67
- else {
68
- obj = item;
69
- tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);
70
- }
71
- if (!tagObj) {
72
- const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);
73
- throw new Error(`Tag not resolved for ${name} value`);
74
- }
75
- return tagObj;
76
- }
77
- // needs to be called before value stringifier to allow for circular anchor refs
78
- function stringifyProps(node, tagObj, { anchors, doc }) {
79
- if (!doc.directives)
80
- return '';
81
- const props = [];
82
- const anchor = (isScalar(node) || isCollection(node)) && node.anchor;
83
- if (anchor && anchorIsValid(anchor)) {
84
- anchors.add(anchor);
85
- props.push(`&${anchor}`);
86
- }
87
- const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);
88
- if (tag)
89
- props.push(doc.directives.tagString(tag));
90
- return props.join(' ');
91
- }
92
- function stringify(item, ctx, onComment, onChompKeep) {
93
- if (isPair(item))
94
- return item.toString(ctx, onComment, onChompKeep);
95
- if (isAlias(item)) {
96
- if (ctx.doc.directives)
97
- return item.toString(ctx);
98
- if (ctx.resolvedAliases?.has(item)) {
99
- throw new TypeError(`Cannot stringify circular structure without alias nodes`);
100
- }
101
- else {
102
- if (ctx.resolvedAliases)
103
- ctx.resolvedAliases.add(item);
104
- else
105
- ctx.resolvedAliases = new Set([item]);
106
- item = item.resolve(ctx.doc);
107
- }
108
- }
109
- let tagObj = undefined;
110
- const node = isNode(item)
111
- ? item
112
- : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });
113
- tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));
114
- const props = stringifyProps(node, tagObj, ctx);
115
- if (props.length > 0)
116
- ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;
117
- const str = typeof tagObj.stringify === 'function'
118
- ? tagObj.stringify(node, ctx, onComment, onChompKeep)
119
- : isScalar(node)
120
- ? stringifyString(node, ctx, onComment, onChompKeep)
121
- : node.toString(ctx, onComment, onChompKeep);
122
- if (!props)
123
- return str;
124
- return isScalar(node) || str[0] === '{' || str[0] === '['
125
- ? `${props} ${str}`
126
- : `${props}\n${ctx.indent}${str}`;
127
- }
128
-
129
- export { createStringifyContext, stringify };
@@ -1,153 +0,0 @@
1
- import { isNode, isPair } from '../nodes/identity.js';
2
- import { stringify } from './stringify.js';
3
- import { lineComment, indentComment } from './stringifyComment.js';
4
-
5
- function stringifyCollection(collection, ctx, options) {
6
- const flow = ctx.inFlow ?? collection.flow;
7
- const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;
8
- return stringify(collection, ctx, options);
9
- }
10
- function stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {
11
- const { indent, options: { commentString } } = ctx;
12
- const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });
13
- let chompKeep = false; // flag for the preceding node's status
14
- const lines = [];
15
- for (let i = 0; i < items.length; ++i) {
16
- const item = items[i];
17
- let comment = null;
18
- if (isNode(item)) {
19
- if (!chompKeep && item.spaceBefore)
20
- lines.push('');
21
- addCommentBefore(ctx, lines, item.commentBefore, chompKeep);
22
- if (item.comment)
23
- comment = item.comment;
24
- }
25
- else if (isPair(item)) {
26
- const ik = isNode(item.key) ? item.key : null;
27
- if (ik) {
28
- if (!chompKeep && ik.spaceBefore)
29
- lines.push('');
30
- addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);
31
- }
32
- }
33
- chompKeep = false;
34
- let str = stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));
35
- if (comment)
36
- str += lineComment(str, itemIndent, commentString(comment));
37
- if (chompKeep && comment)
38
- chompKeep = false;
39
- lines.push(blockItemPrefix + str);
40
- }
41
- let str;
42
- if (lines.length === 0) {
43
- str = flowChars.start + flowChars.end;
44
- }
45
- else {
46
- str = lines[0];
47
- for (let i = 1; i < lines.length; ++i) {
48
- const line = lines[i];
49
- str += line ? `\n${indent}${line}` : '\n';
50
- }
51
- }
52
- if (comment) {
53
- str += '\n' + indentComment(commentString(comment), indent);
54
- if (onComment)
55
- onComment();
56
- }
57
- else if (chompKeep && onChompKeep)
58
- onChompKeep();
59
- return str;
60
- }
61
- function stringifyFlowCollection({ items }, ctx, { flowChars, itemIndent }) {
62
- const { indent, indentStep, flowCollectionPadding: fcPadding, options: { commentString } } = ctx;
63
- itemIndent += indentStep;
64
- const itemCtx = Object.assign({}, ctx, {
65
- indent: itemIndent,
66
- inFlow: true,
67
- type: null
68
- });
69
- let reqNewline = false;
70
- let linesAtValue = 0;
71
- const lines = [];
72
- for (let i = 0; i < items.length; ++i) {
73
- const item = items[i];
74
- let comment = null;
75
- if (isNode(item)) {
76
- if (item.spaceBefore)
77
- lines.push('');
78
- addCommentBefore(ctx, lines, item.commentBefore, false);
79
- if (item.comment)
80
- comment = item.comment;
81
- }
82
- else if (isPair(item)) {
83
- const ik = isNode(item.key) ? item.key : null;
84
- if (ik) {
85
- if (ik.spaceBefore)
86
- lines.push('');
87
- addCommentBefore(ctx, lines, ik.commentBefore, false);
88
- if (ik.comment)
89
- reqNewline = true;
90
- }
91
- const iv = isNode(item.value) ? item.value : null;
92
- if (iv) {
93
- if (iv.comment)
94
- comment = iv.comment;
95
- if (iv.commentBefore)
96
- reqNewline = true;
97
- }
98
- else if (item.value == null && ik?.comment) {
99
- comment = ik.comment;
100
- }
101
- }
102
- if (comment)
103
- reqNewline = true;
104
- let str = stringify(item, itemCtx, () => (comment = null));
105
- reqNewline || (reqNewline = lines.length > linesAtValue || str.includes('\n'));
106
- if (i < items.length - 1) {
107
- str += ',';
108
- }
109
- else if (ctx.options.trailingComma) {
110
- if (ctx.options.lineWidth > 0) {
111
- reqNewline || (reqNewline = lines.reduce((sum, line) => sum + line.length + 2, 2) +
112
- (str.length + 2) >
113
- ctx.options.lineWidth);
114
- }
115
- if (reqNewline) {
116
- str += ',';
117
- }
118
- }
119
- if (comment)
120
- str += lineComment(str, itemIndent, commentString(comment));
121
- lines.push(str);
122
- linesAtValue = lines.length;
123
- }
124
- const { start, end } = flowChars;
125
- if (lines.length === 0) {
126
- return start + end;
127
- }
128
- else {
129
- if (!reqNewline) {
130
- const len = lines.reduce((sum, line) => sum + line.length + 2, 2);
131
- reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;
132
- }
133
- if (reqNewline) {
134
- let str = start;
135
- for (const line of lines)
136
- str += line ? `\n${indentStep}${indent}${line}` : '\n';
137
- return `${str}\n${indent}${end}`;
138
- }
139
- else {
140
- return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;
141
- }
142
- }
143
- }
144
- function addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {
145
- if (comment && chompKeep)
146
- comment = comment.replace(/^\n+/, '');
147
- if (comment) {
148
- const ic = indentComment(commentString(comment), indent);
149
- lines.push(ic.trimStart()); // Avoid double indent on first line
150
- }
151
- }
152
-
153
- export { stringifyCollection };
@@ -1,20 +0,0 @@
1
- /**
2
- * Stringifies a comment.
3
- *
4
- * Empty comment lines are left empty,
5
- * lines consisting of a single space are replaced by `#`,
6
- * and all other lines are prefixed with a `#`.
7
- */
8
- const stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');
9
- function indentComment(comment, indent) {
10
- if (/^\n+$/.test(comment))
11
- return comment.substring(1);
12
- return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;
13
- }
14
- const lineComment = (str, indent, comment) => str.endsWith('\n')
15
- ? indentComment(comment, indent)
16
- : comment.includes('\n')
17
- ? '\n' + indentComment(comment, indent)
18
- : (str.endsWith(' ') ? '' : ' ') + comment;
19
-
20
- export { indentComment, lineComment, stringifyComment };
@@ -1,85 +0,0 @@
1
- import { isNode } from '../nodes/identity.js';
2
- import { createStringifyContext, stringify } from './stringify.js';
3
- import { indentComment, lineComment } from './stringifyComment.js';
4
-
5
- function stringifyDocument(doc, options) {
6
- const lines = [];
7
- let hasDirectives = options.directives === true;
8
- if (options.directives !== false && doc.directives) {
9
- const dir = doc.directives.toString(doc);
10
- if (dir) {
11
- lines.push(dir);
12
- hasDirectives = true;
13
- }
14
- else if (doc.directives.docStart)
15
- hasDirectives = true;
16
- }
17
- if (hasDirectives)
18
- lines.push('---');
19
- const ctx = createStringifyContext(doc, options);
20
- const { commentString } = ctx.options;
21
- if (doc.commentBefore) {
22
- if (lines.length !== 1)
23
- lines.unshift('');
24
- const cs = commentString(doc.commentBefore);
25
- lines.unshift(indentComment(cs, ''));
26
- }
27
- let chompKeep = false;
28
- let contentComment = null;
29
- if (doc.contents) {
30
- if (isNode(doc.contents)) {
31
- if (doc.contents.spaceBefore && hasDirectives)
32
- lines.push('');
33
- if (doc.contents.commentBefore) {
34
- const cs = commentString(doc.contents.commentBefore);
35
- lines.push(indentComment(cs, ''));
36
- }
37
- // top-level block scalars need to be indented if followed by a comment
38
- ctx.forceBlockIndent = !!doc.comment;
39
- contentComment = doc.contents.comment;
40
- }
41
- const onChompKeep = contentComment ? undefined : () => (chompKeep = true);
42
- let body = stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);
43
- if (contentComment)
44
- body += lineComment(body, '', commentString(contentComment));
45
- if ((body[0] === '|' || body[0] === '>') &&
46
- lines[lines.length - 1] === '---') {
47
- // Top-level block scalars with a preceding doc marker ought to use the
48
- // same line for their header.
49
- lines[lines.length - 1] = `--- ${body}`;
50
- }
51
- else
52
- lines.push(body);
53
- }
54
- else {
55
- lines.push(stringify(doc.contents, ctx));
56
- }
57
- if (doc.directives?.docEnd) {
58
- if (doc.comment) {
59
- const cs = commentString(doc.comment);
60
- if (cs.includes('\n')) {
61
- lines.push('...');
62
- lines.push(indentComment(cs, ''));
63
- }
64
- else {
65
- lines.push(`... ${cs}`);
66
- }
67
- }
68
- else {
69
- lines.push('...');
70
- }
71
- }
72
- else {
73
- let dc = doc.comment;
74
- if (dc && chompKeep)
75
- dc = dc.replace(/^\n+/, '');
76
- if (dc) {
77
- if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')
78
- lines.push('');
79
- lines.push(indentComment(commentString(dc), ''));
80
- }
81
- }
82
- return lines.join('\n') + '\n';
83
- }
84
-
85
- export { stringifyDocument };
@@ -1,25 +0,0 @@
1
- function stringifyNumber({ format, minFractionDigits, tag, value }) {
2
- if (typeof value === 'bigint')
3
- return String(value);
4
- const num = typeof value === 'number' ? value : Number(value);
5
- if (!isFinite(num))
6
- return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';
7
- let n = Object.is(value, -0) ? '-0' : JSON.stringify(value);
8
- if (!format &&
9
- minFractionDigits &&
10
- (!tag || tag === 'tag:yaml.org,2002:float') &&
11
- /^-?\d/.test(n) &&
12
- !n.includes('e')) {
13
- let i = n.indexOf('.');
14
- if (i < 0) {
15
- i = n.length;
16
- n += '.';
17
- }
18
- let d = minFractionDigits - (n.length - i - 1);
19
- while (d-- > 0)
20
- n += '0';
21
- }
22
- return n;
23
- }
24
-
25
- export { stringifyNumber };
@@ -1,150 +0,0 @@
1
- import { isCollection, isNode, isScalar, isSeq } from '../nodes/identity.js';
2
- import { Scalar } from '../nodes/Scalar.js';
3
- import { stringify } from './stringify.js';
4
- import { lineComment, indentComment } from './stringifyComment.js';
5
-
6
- function stringifyPair({ key, value }, ctx, onComment, onChompKeep) {
7
- const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;
8
- let keyComment = (isNode(key) && key.comment) || null;
9
- if (simpleKeys) {
10
- if (keyComment) {
11
- throw new Error('With simple keys, key nodes cannot have comments');
12
- }
13
- if (isCollection(key) || (!isNode(key) && typeof key === 'object')) {
14
- const msg = 'With simple keys, collection cannot be used as a key value';
15
- throw new Error(msg);
16
- }
17
- }
18
- let explicitKey = !simpleKeys &&
19
- (!key ||
20
- (keyComment && value == null && !ctx.inFlow) ||
21
- isCollection(key) ||
22
- (isScalar(key)
23
- ? key.type === Scalar.BLOCK_FOLDED || key.type === Scalar.BLOCK_LITERAL
24
- : typeof key === 'object'));
25
- ctx = Object.assign({}, ctx, {
26
- allNullValues: false,
27
- implicitKey: !explicitKey && (simpleKeys || !allNullValues),
28
- indent: indent + indentStep
29
- });
30
- let keyCommentDone = false;
31
- let chompKeep = false;
32
- let str = stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));
33
- if (!explicitKey && !ctx.inFlow && str.length > 1024) {
34
- if (simpleKeys)
35
- throw new Error('With simple keys, single line scalar must not span more than 1024 characters');
36
- explicitKey = true;
37
- }
38
- if (ctx.inFlow) {
39
- if (allNullValues || value == null) {
40
- if (keyCommentDone && onComment)
41
- onComment();
42
- return str === '' ? '?' : explicitKey ? `? ${str}` : str;
43
- }
44
- }
45
- else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {
46
- str = `? ${str}`;
47
- if (keyComment && !keyCommentDone) {
48
- str += lineComment(str, ctx.indent, commentString(keyComment));
49
- }
50
- else if (chompKeep && onChompKeep)
51
- onChompKeep();
52
- return str;
53
- }
54
- if (keyCommentDone)
55
- keyComment = null;
56
- if (explicitKey) {
57
- if (keyComment)
58
- str += lineComment(str, ctx.indent, commentString(keyComment));
59
- str = `? ${str}\n${indent}:`;
60
- }
61
- else {
62
- str = `${str}:`;
63
- if (keyComment)
64
- str += lineComment(str, ctx.indent, commentString(keyComment));
65
- }
66
- let vsb, vcb, valueComment;
67
- if (isNode(value)) {
68
- vsb = !!value.spaceBefore;
69
- vcb = value.commentBefore;
70
- valueComment = value.comment;
71
- }
72
- else {
73
- vsb = false;
74
- vcb = null;
75
- valueComment = null;
76
- if (value && typeof value === 'object')
77
- value = doc.createNode(value);
78
- }
79
- ctx.implicitKey = false;
80
- if (!explicitKey && !keyComment && isScalar(value))
81
- ctx.indentAtStart = str.length + 1;
82
- chompKeep = false;
83
- if (!indentSeq &&
84
- indentStep.length >= 2 &&
85
- !ctx.inFlow &&
86
- !explicitKey &&
87
- isSeq(value) &&
88
- !value.flow &&
89
- !value.tag &&
90
- !value.anchor) {
91
- // If indentSeq === false, consider '- ' as part of indentation where possible
92
- ctx.indent = ctx.indent.substring(2);
93
- }
94
- let valueCommentDone = false;
95
- const valueStr = stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));
96
- let ws = ' ';
97
- if (keyComment || vsb || vcb) {
98
- ws = vsb ? '\n' : '';
99
- if (vcb) {
100
- const cs = commentString(vcb);
101
- ws += `\n${indentComment(cs, ctx.indent)}`;
102
- }
103
- if (valueStr === '' && !ctx.inFlow) {
104
- if (ws === '\n' && valueComment)
105
- ws = '\n\n';
106
- }
107
- else {
108
- ws += `\n${ctx.indent}`;
109
- }
110
- }
111
- else if (!explicitKey && isCollection(value)) {
112
- const vs0 = valueStr[0];
113
- const nl0 = valueStr.indexOf('\n');
114
- const hasNewline = nl0 !== -1;
115
- const flow = ctx.inFlow ?? value.flow ?? value.items.length === 0;
116
- if (hasNewline || !flow) {
117
- let hasPropsLine = false;
118
- if (hasNewline && (vs0 === '&' || vs0 === '!')) {
119
- let sp0 = valueStr.indexOf(' ');
120
- if (vs0 === '&' &&
121
- sp0 !== -1 &&
122
- sp0 < nl0 &&
123
- valueStr[sp0 + 1] === '!') {
124
- sp0 = valueStr.indexOf(' ', sp0 + 1);
125
- }
126
- if (sp0 === -1 || nl0 < sp0)
127
- hasPropsLine = true;
128
- }
129
- if (!hasPropsLine)
130
- ws = `\n${ctx.indent}`;
131
- }
132
- }
133
- else if (valueStr === '' || valueStr[0] === '\n') {
134
- ws = '';
135
- }
136
- str += ws + valueStr;
137
- if (ctx.inFlow) {
138
- if (valueCommentDone && onComment)
139
- onComment();
140
- }
141
- else if (valueComment && !valueCommentDone) {
142
- str += lineComment(str, ctx.indent, commentString(valueComment));
143
- }
144
- else if (chompKeep && onChompKeep) {
145
- onChompKeep();
146
- }
147
- return str;
148
- }
149
-
150
- export { stringifyPair };