yaml 2.8.2 → 3.0.0-0

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-BYypO7fO.js +18 -0
  4. package/dist/cli.d.ts +10 -7
  5. package/dist/cli.js +181 -0
  6. package/dist/directives-CG6n4xSM.js +2856 -0
  7. package/dist/index.d.ts +335 -25
  8. package/dist/index.js +4 -49
  9. package/dist/line-counter-TFl552k_.js +3098 -0
  10. package/dist/public-api-BE74JyVm.js +79 -0
  11. package/dist/stringifyString-S_ITVLTO.d.ts +1306 -0
  12. package/dist/test-events.d.ts +6 -3
  13. package/dist/test-events.js +98 -124
  14. package/dist/util.d.ts +2 -16
  15. package/dist/util.js +2 -27
  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 -102
  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 -223
  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 -114
  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 -64
  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 -128
  82. package/browser/dist/stringify/stringifyCollection.js +0 -143
  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 -24
  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 -105
  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 -225
  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 -116
  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 -43
  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 -344
  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 -68
  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 -131
  224. package/dist/stringify/stringifyCollection.d.ts +0 -17
  225. package/dist/stringify/stringifyCollection.js +0 -145
  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 -26
  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,128 +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
- trueStr: 'true',
24
- verifyAliasOrder: true
25
- }, doc.schema.toStringOptions, options);
26
- let inFlow;
27
- switch (opt.collectionStyle) {
28
- case 'block':
29
- inFlow = false;
30
- break;
31
- case 'flow':
32
- inFlow = true;
33
- break;
34
- default:
35
- inFlow = null;
36
- }
37
- return {
38
- anchors: new Set(),
39
- doc,
40
- flowCollectionPadding: opt.flowCollectionPadding ? ' ' : '',
41
- indent: '',
42
- indentStep: typeof opt.indent === 'number' ? ' '.repeat(opt.indent) : ' ',
43
- inFlow,
44
- options: opt
45
- };
46
- }
47
- function getTagObject(tags, item) {
48
- if (item.tag) {
49
- const match = tags.filter(t => t.tag === item.tag);
50
- if (match.length > 0)
51
- return match.find(t => t.format === item.format) ?? match[0];
52
- }
53
- let tagObj = undefined;
54
- let obj;
55
- if (isScalar(item)) {
56
- obj = item.value;
57
- let match = tags.filter(t => t.identify?.(obj));
58
- if (match.length > 1) {
59
- const testMatch = match.filter(t => t.test);
60
- if (testMatch.length > 0)
61
- match = testMatch;
62
- }
63
- tagObj =
64
- match.find(t => t.format === item.format) ?? match.find(t => !t.format);
65
- }
66
- else {
67
- obj = item;
68
- tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);
69
- }
70
- if (!tagObj) {
71
- const name = obj?.constructor?.name ?? (obj === null ? 'null' : typeof obj);
72
- throw new Error(`Tag not resolved for ${name} value`);
73
- }
74
- return tagObj;
75
- }
76
- // needs to be called before value stringifier to allow for circular anchor refs
77
- function stringifyProps(node, tagObj, { anchors, doc }) {
78
- if (!doc.directives)
79
- return '';
80
- const props = [];
81
- const anchor = (isScalar(node) || isCollection(node)) && node.anchor;
82
- if (anchor && anchorIsValid(anchor)) {
83
- anchors.add(anchor);
84
- props.push(`&${anchor}`);
85
- }
86
- const tag = node.tag ?? (tagObj.default ? null : tagObj.tag);
87
- if (tag)
88
- props.push(doc.directives.tagString(tag));
89
- return props.join(' ');
90
- }
91
- function stringify(item, ctx, onComment, onChompKeep) {
92
- if (isPair(item))
93
- return item.toString(ctx, onComment, onChompKeep);
94
- if (isAlias(item)) {
95
- if (ctx.doc.directives)
96
- return item.toString(ctx);
97
- if (ctx.resolvedAliases?.has(item)) {
98
- throw new TypeError(`Cannot stringify circular structure without alias nodes`);
99
- }
100
- else {
101
- if (ctx.resolvedAliases)
102
- ctx.resolvedAliases.add(item);
103
- else
104
- ctx.resolvedAliases = new Set([item]);
105
- item = item.resolve(ctx.doc);
106
- }
107
- }
108
- let tagObj = undefined;
109
- const node = isNode(item)
110
- ? item
111
- : ctx.doc.createNode(item, { onTagObj: o => (tagObj = o) });
112
- tagObj ?? (tagObj = getTagObject(ctx.doc.schema.tags, node));
113
- const props = stringifyProps(node, tagObj, ctx);
114
- if (props.length > 0)
115
- ctx.indentAtStart = (ctx.indentAtStart ?? 0) + props.length + 1;
116
- const str = typeof tagObj.stringify === 'function'
117
- ? tagObj.stringify(node, ctx, onComment, onChompKeep)
118
- : isScalar(node)
119
- ? stringifyString(node, ctx, onComment, onChompKeep)
120
- : node.toString(ctx, onComment, onChompKeep);
121
- if (!props)
122
- return str;
123
- return isScalar(node) || str[0] === '{' || str[0] === '['
124
- ? `${props} ${str}`
125
- : `${props}\n${ctx.indent}${str}`;
126
- }
127
-
128
- export { createStringifyContext, stringify };
@@ -1,143 +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
- if (i < items.length - 1)
106
- str += ',';
107
- if (comment)
108
- str += lineComment(str, itemIndent, commentString(comment));
109
- if (!reqNewline && (lines.length > linesAtValue || str.includes('\n')))
110
- reqNewline = true;
111
- lines.push(str);
112
- linesAtValue = lines.length;
113
- }
114
- const { start, end } = flowChars;
115
- if (lines.length === 0) {
116
- return start + end;
117
- }
118
- else {
119
- if (!reqNewline) {
120
- const len = lines.reduce((sum, line) => sum + line.length + 2, 2);
121
- reqNewline = ctx.options.lineWidth > 0 && len > ctx.options.lineWidth;
122
- }
123
- if (reqNewline) {
124
- let str = start;
125
- for (const line of lines)
126
- str += line ? `\n${indentStep}${indent}${line}` : '\n';
127
- return `${str}\n${indent}${end}`;
128
- }
129
- else {
130
- return `${start}${fcPadding}${lines.join(' ')}${fcPadding}${end}`;
131
- }
132
- }
133
- }
134
- function addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {
135
- if (comment && chompKeep)
136
- comment = comment.replace(/^\n+/, '');
137
- if (comment) {
138
- const ic = indentComment(commentString(comment), indent);
139
- lines.push(ic.trimStart()); // Avoid double indent on first line
140
- }
141
- }
142
-
143
- 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,24 +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
- let i = n.indexOf('.');
13
- if (i < 0) {
14
- i = n.length;
15
- n += '.';
16
- }
17
- let d = minFractionDigits - (n.length - i - 1);
18
- while (d-- > 0)
19
- n += '0';
20
- }
21
- return n;
22
- }
23
-
24
- 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 };