yaml 2.0.0-0 → 2.0.0-11

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 (250) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +51 -35
  3. package/browser/dist/compose/compose-collection.js +59 -0
  4. package/browser/dist/compose/compose-doc.js +40 -0
  5. package/browser/dist/compose/compose-node.js +90 -0
  6. package/browser/dist/compose/compose-scalar.js +81 -0
  7. package/browser/dist/compose/composer.js +217 -0
  8. package/browser/dist/compose/resolve-block-map.js +107 -0
  9. package/browser/dist/compose/resolve-block-scalar.js +192 -0
  10. package/browser/dist/compose/resolve-block-seq.js +45 -0
  11. package/browser/dist/compose/resolve-end.js +37 -0
  12. package/browser/dist/compose/resolve-flow-collection.js +200 -0
  13. package/browser/dist/compose/resolve-flow-scalar.js +223 -0
  14. package/browser/dist/compose/resolve-props.js +130 -0
  15. package/browser/dist/compose/util-contains-newline.js +34 -0
  16. package/browser/dist/compose/util-empty-scalar-position.js +27 -0
  17. package/browser/dist/compose/util-flow-indent-check.js +15 -0
  18. package/browser/dist/compose/util-map-includes.js +17 -0
  19. package/browser/dist/doc/Document.js +328 -0
  20. package/browser/dist/doc/anchors.js +72 -0
  21. package/browser/dist/doc/applyReviver.js +54 -0
  22. package/browser/dist/doc/createNode.js +84 -0
  23. package/browser/dist/doc/directives.js +169 -0
  24. package/browser/dist/errors.js +57 -0
  25. package/browser/dist/index.js +17 -1045
  26. package/browser/dist/log.js +14 -0
  27. package/browser/dist/node_modules/tslib/tslib.es6.js +164 -0
  28. package/browser/dist/nodes/Alias.js +94 -0
  29. package/browser/dist/nodes/Collection.js +146 -0
  30. package/browser/dist/nodes/Node.js +48 -0
  31. package/browser/dist/nodes/Pair.js +36 -0
  32. package/browser/dist/nodes/Scalar.js +23 -0
  33. package/browser/dist/nodes/YAMLMap.js +116 -0
  34. package/browser/dist/nodes/YAMLSeq.js +105 -0
  35. package/browser/dist/nodes/addPairToJSMap.js +104 -0
  36. package/browser/dist/nodes/toJS.js +35 -0
  37. package/browser/dist/parse/cst-scalar.js +215 -0
  38. package/browser/dist/parse/cst-stringify.js +61 -0
  39. package/browser/dist/parse/cst-visit.js +97 -0
  40. package/browser/dist/parse/cst.js +98 -0
  41. package/browser/dist/parse/lexer.js +701 -0
  42. package/browser/dist/parse/line-counter.js +39 -0
  43. package/browser/dist/parse/parser.js +916 -0
  44. package/browser/dist/public-api.js +99 -0
  45. package/browser/dist/schema/Schema.js +34 -0
  46. package/browser/dist/schema/common/map.js +42 -0
  47. package/browser/dist/schema/common/null.js +15 -0
  48. package/browser/dist/schema/common/seq.js +33 -0
  49. package/browser/dist/schema/common/string.js +14 -0
  50. package/browser/dist/schema/core/bool.js +19 -0
  51. package/browser/dist/schema/core/float.js +43 -0
  52. package/browser/dist/schema/core/int.js +38 -0
  53. package/browser/dist/schema/core/schema.js +23 -0
  54. package/browser/dist/schema/json/schema.js +62 -0
  55. package/browser/dist/schema/tags.js +83 -0
  56. package/browser/dist/schema/yaml-1.1/binary.js +66 -0
  57. package/browser/dist/schema/yaml-1.1/bool.js +26 -0
  58. package/browser/dist/schema/yaml-1.1/float.js +46 -0
  59. package/browser/dist/schema/yaml-1.1/int.js +71 -0
  60. package/browser/dist/schema/yaml-1.1/omap.js +73 -0
  61. package/browser/dist/schema/yaml-1.1/pairs.js +77 -0
  62. package/browser/dist/schema/yaml-1.1/schema.js +37 -0
  63. package/browser/dist/schema/yaml-1.1/set.js +87 -0
  64. package/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
  65. package/browser/dist/stringify/foldFlowLines.js +135 -0
  66. package/browser/dist/stringify/stringify.js +124 -0
  67. package/browser/dist/stringify/stringifyCollection.js +152 -0
  68. package/browser/dist/stringify/stringifyComment.js +18 -0
  69. package/browser/dist/stringify/stringifyDocument.js +86 -0
  70. package/browser/dist/stringify/stringifyNumber.js +24 -0
  71. package/browser/dist/stringify/stringifyPair.js +122 -0
  72. package/browser/dist/stringify/stringifyString.js +314 -0
  73. package/browser/dist/util.js +9 -2
  74. package/browser/dist/visit.js +234 -0
  75. package/browser/index.js +5 -1
  76. package/browser/package.json +3 -0
  77. package/dist/compose/compose-collection.d.ts +5 -0
  78. package/dist/compose/compose-collection.js +61 -0
  79. package/dist/compose/compose-doc.d.ts +6 -0
  80. package/dist/compose/compose-doc.js +42 -0
  81. package/dist/compose/compose-node.d.ts +26 -0
  82. package/dist/compose/compose-node.js +93 -0
  83. package/dist/compose/compose-scalar.d.ts +5 -0
  84. package/dist/compose/compose-scalar.js +83 -0
  85. package/dist/compose/composer.d.ts +62 -0
  86. package/dist/compose/composer.js +221 -0
  87. package/dist/compose/resolve-block-map.d.ts +6 -0
  88. package/dist/compose/resolve-block-map.js +109 -0
  89. package/dist/compose/resolve-block-scalar.d.ts +10 -0
  90. package/dist/compose/resolve-block-scalar.js +194 -0
  91. package/dist/compose/resolve-block-seq.d.ts +5 -0
  92. package/dist/compose/resolve-block-seq.js +47 -0
  93. package/dist/compose/resolve-end.d.ts +6 -0
  94. package/dist/compose/resolve-end.js +39 -0
  95. package/dist/compose/resolve-flow-collection.d.ts +6 -0
  96. package/dist/compose/resolve-flow-collection.js +202 -0
  97. package/dist/compose/resolve-flow-scalar.d.ts +10 -0
  98. package/dist/compose/resolve-flow-scalar.js +225 -0
  99. package/dist/compose/resolve-props.d.ts +21 -0
  100. package/dist/compose/resolve-props.js +132 -0
  101. package/dist/compose/util-contains-newline.d.ts +2 -0
  102. package/dist/compose/util-contains-newline.js +36 -0
  103. package/dist/compose/util-empty-scalar-position.d.ts +2 -0
  104. package/dist/compose/util-empty-scalar-position.js +29 -0
  105. package/dist/compose/util-flow-indent-check.d.ts +3 -0
  106. package/dist/compose/util-flow-indent-check.js +17 -0
  107. package/dist/compose/util-map-includes.d.ts +4 -0
  108. package/dist/compose/util-map-includes.js +19 -0
  109. package/dist/doc/Document.d.ts +139 -0
  110. package/dist/doc/Document.js +330 -0
  111. package/dist/doc/anchors.d.ts +24 -0
  112. package/dist/doc/anchors.js +77 -0
  113. package/dist/doc/applyReviver.d.ts +9 -0
  114. package/dist/doc/applyReviver.js +56 -0
  115. package/dist/doc/createNode.d.ts +17 -0
  116. package/dist/doc/createNode.js +86 -0
  117. package/dist/doc/directives.d.ts +49 -0
  118. package/dist/doc/directives.js +171 -0
  119. package/dist/errors.d.ts +21 -0
  120. package/dist/errors.js +62 -0
  121. package/dist/index.d.ts +19 -0
  122. package/dist/index.js +48 -81
  123. package/dist/log.d.ts +3 -0
  124. package/dist/log.js +17 -0
  125. package/dist/node_modules/tslib/tslib.es6.js +76 -0
  126. package/dist/nodes/Alias.d.ts +28 -0
  127. package/dist/nodes/Alias.js +96 -0
  128. package/dist/nodes/Collection.d.ts +73 -0
  129. package/dist/nodes/Collection.js +150 -0
  130. package/dist/nodes/Node.d.ts +53 -0
  131. package/dist/nodes/Node.js +66 -0
  132. package/dist/nodes/Pair.d.ts +21 -0
  133. package/dist/nodes/Pair.js +39 -0
  134. package/dist/nodes/Scalar.d.ts +42 -0
  135. package/dist/nodes/Scalar.js +26 -0
  136. package/dist/nodes/YAMLMap.d.ts +41 -0
  137. package/dist/nodes/YAMLMap.js +119 -0
  138. package/dist/nodes/YAMLSeq.d.ts +55 -0
  139. package/dist/nodes/YAMLSeq.js +107 -0
  140. package/dist/nodes/addPairToJSMap.d.ts +3 -0
  141. package/dist/nodes/addPairToJSMap.js +106 -0
  142. package/dist/nodes/toJS.d.ts +30 -0
  143. package/dist/nodes/toJS.js +37 -0
  144. package/dist/options.d.ts +330 -0
  145. package/dist/parse/cst-scalar.d.ts +64 -0
  146. package/dist/parse/cst-scalar.js +219 -0
  147. package/dist/parse/cst-stringify.d.ts +8 -0
  148. package/dist/parse/cst-stringify.js +63 -0
  149. package/dist/parse/cst-visit.d.ts +39 -0
  150. package/dist/parse/cst-visit.js +99 -0
  151. package/dist/parse/cst.d.ts +106 -0
  152. package/dist/parse/cst.js +112 -0
  153. package/dist/parse/lexer.d.ts +87 -0
  154. package/dist/parse/lexer.js +703 -0
  155. package/dist/parse/line-counter.d.ts +22 -0
  156. package/dist/parse/line-counter.js +41 -0
  157. package/dist/parse/parser.d.ts +84 -0
  158. package/dist/parse/parser.js +920 -0
  159. package/dist/public-api.d.ts +43 -0
  160. package/dist/public-api.js +104 -0
  161. package/dist/schema/Schema.d.ts +18 -0
  162. package/dist/schema/Schema.js +36 -0
  163. package/dist/schema/common/map.d.ts +2 -0
  164. package/dist/schema/common/map.js +44 -0
  165. package/dist/schema/common/null.d.ts +4 -0
  166. package/dist/schema/common/null.js +17 -0
  167. package/dist/schema/common/seq.d.ts +2 -0
  168. package/dist/schema/common/seq.js +35 -0
  169. package/dist/schema/common/string.d.ts +2 -0
  170. package/dist/schema/common/string.js +16 -0
  171. package/dist/schema/core/bool.d.ts +4 -0
  172. package/dist/schema/core/bool.js +21 -0
  173. package/dist/schema/core/float.d.ts +4 -0
  174. package/dist/schema/core/float.js +47 -0
  175. package/dist/schema/core/int.d.ts +4 -0
  176. package/dist/schema/core/int.js +42 -0
  177. package/dist/schema/core/schema.d.ts +1 -0
  178. package/dist/schema/core/schema.js +25 -0
  179. package/dist/schema/json/schema.d.ts +2 -0
  180. package/dist/schema/json/schema.js +64 -0
  181. package/dist/schema/tags.d.ts +40 -0
  182. package/dist/schema/tags.js +86 -0
  183. package/dist/schema/types.d.ts +82 -0
  184. package/dist/schema/yaml-1.1/binary.d.ts +2 -0
  185. package/dist/schema/yaml-1.1/binary.js +68 -0
  186. package/dist/schema/yaml-1.1/bool.d.ts +7 -0
  187. package/dist/schema/yaml-1.1/bool.js +29 -0
  188. package/dist/schema/yaml-1.1/float.d.ts +4 -0
  189. package/dist/schema/yaml-1.1/float.js +50 -0
  190. package/dist/schema/yaml-1.1/int.d.ts +5 -0
  191. package/dist/schema/yaml-1.1/int.js +76 -0
  192. package/dist/schema/yaml-1.1/omap.d.ts +21 -0
  193. package/dist/schema/yaml-1.1/omap.js +76 -0
  194. package/dist/schema/yaml-1.1/pairs.d.ts +10 -0
  195. package/dist/schema/yaml-1.1/pairs.js +81 -0
  196. package/dist/schema/yaml-1.1/schema.d.ts +1 -0
  197. package/dist/schema/yaml-1.1/schema.js +39 -0
  198. package/dist/schema/yaml-1.1/set.d.ts +22 -0
  199. package/dist/schema/yaml-1.1/set.js +90 -0
  200. package/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
  201. package/dist/schema/yaml-1.1/timestamp.js +105 -0
  202. package/dist/stringify/foldFlowLines.d.ts +34 -0
  203. package/dist/stringify/foldFlowLines.js +140 -0
  204. package/dist/stringify/stringify.d.ts +20 -0
  205. package/dist/stringify/stringify.js +127 -0
  206. package/dist/stringify/stringifyCollection.d.ts +17 -0
  207. package/dist/stringify/stringifyCollection.js +154 -0
  208. package/dist/stringify/stringifyComment.d.ts +10 -0
  209. package/dist/stringify/stringifyComment.js +22 -0
  210. package/dist/stringify/stringifyDocument.d.ts +3 -0
  211. package/dist/stringify/stringifyDocument.js +88 -0
  212. package/dist/stringify/stringifyNumber.d.ts +2 -0
  213. package/dist/stringify/stringifyNumber.js +26 -0
  214. package/dist/stringify/stringifyPair.d.ts +3 -0
  215. package/dist/stringify/stringifyPair.js +124 -0
  216. package/dist/stringify/stringifyString.d.ts +3 -0
  217. package/dist/stringify/stringifyString.js +316 -0
  218. package/dist/test-events.d.ts +4 -0
  219. package/dist/test-events.js +125 -151
  220. package/dist/util.d.ts +9 -0
  221. package/dist/util.js +19 -14
  222. package/dist/visit.d.ts +102 -0
  223. package/dist/visit.js +237 -0
  224. package/package.json +49 -51
  225. package/util.d.ts +3 -86
  226. package/util.js +2 -16
  227. package/browser/dist/PlainValue-6b68dc0e.js +0 -1279
  228. package/browser/dist/Schema-d14032c2.js +0 -1047
  229. package/browser/dist/parse-6e806192.js +0 -1904
  230. package/browser/dist/parse-cst.js +0 -2
  231. package/browser/dist/resolveSeq-3477c430.js +0 -2478
  232. package/browser/dist/types.js +0 -3
  233. package/browser/parse-cst.js +0 -1
  234. package/browser/types.js +0 -1
  235. package/browser/util.js +0 -1
  236. package/dist/Document-59bd9290.js +0 -803
  237. package/dist/PlainValue-ec8e588e.js +0 -876
  238. package/dist/Schema-fe1471c4.js +0 -808
  239. package/dist/parse-ab8de154.js +0 -1748
  240. package/dist/parse-cst.js +0 -8
  241. package/dist/resolveSeq-6b2dc4ac.js +0 -2217
  242. package/dist/types.js +0 -22
  243. package/index.d.ts +0 -411
  244. package/index.js +0 -1
  245. package/parse-cst.d.ts +0 -187
  246. package/parse-cst.js +0 -1
  247. package/types.d.ts +0 -379
  248. package/types.js +0 -17
  249. package/types.mjs +0 -17
  250. package/util.mjs +0 -18
@@ -0,0 +1,154 @@
1
+ 'use strict';
2
+
3
+ var Collection = require('../nodes/Collection.js');
4
+ var Node = require('../nodes/Node.js');
5
+ var stringify = require('./stringify.js');
6
+ var stringifyComment = require('./stringifyComment.js');
7
+
8
+ function stringifyCollection(collection, ctx, options) {
9
+ var _a;
10
+ const flow = (_a = ctx.inFlow) !== null && _a !== void 0 ? _a : collection.flow;
11
+ const stringify = flow ? stringifyFlowCollection : stringifyBlockCollection;
12
+ return stringify(collection, ctx, options);
13
+ }
14
+ function stringifyBlockCollection({ comment, items }, ctx, { blockItemPrefix, flowChars, itemIndent, onChompKeep, onComment }) {
15
+ const { indent, options: { commentString } } = ctx;
16
+ const itemCtx = Object.assign({}, ctx, { indent: itemIndent, type: null });
17
+ let chompKeep = false; // flag for the preceding node's status
18
+ const lines = [];
19
+ for (let i = 0; i < items.length; ++i) {
20
+ const item = items[i];
21
+ let comment = null;
22
+ if (Node.isNode(item)) {
23
+ if (!chompKeep && item.spaceBefore)
24
+ lines.push('');
25
+ addCommentBefore(ctx, lines, item.commentBefore, chompKeep);
26
+ if (item.comment)
27
+ comment = item.comment;
28
+ }
29
+ else if (Node.isPair(item)) {
30
+ const ik = Node.isNode(item.key) ? item.key : null;
31
+ if (ik) {
32
+ if (!chompKeep && ik.spaceBefore)
33
+ lines.push('');
34
+ addCommentBefore(ctx, lines, ik.commentBefore, chompKeep);
35
+ }
36
+ }
37
+ chompKeep = false;
38
+ let str = stringify.stringify(item, itemCtx, () => (comment = null), () => (chompKeep = true));
39
+ if (comment)
40
+ str += stringifyComment.lineComment(str, itemIndent, commentString(comment));
41
+ if (chompKeep && comment)
42
+ chompKeep = false;
43
+ lines.push(blockItemPrefix + str);
44
+ }
45
+ let str;
46
+ if (lines.length === 0) {
47
+ str = flowChars.start + flowChars.end;
48
+ }
49
+ else {
50
+ str = lines[0];
51
+ for (let i = 1; i < lines.length; ++i) {
52
+ const line = lines[i];
53
+ str += line ? `\n${indent}${line}` : '\n';
54
+ }
55
+ }
56
+ if (comment) {
57
+ str += '\n' + stringifyComment.indentComment(commentString(comment), indent);
58
+ if (onComment)
59
+ onComment();
60
+ }
61
+ else if (chompKeep && onChompKeep)
62
+ onChompKeep();
63
+ return str;
64
+ }
65
+ function stringifyFlowCollection({ comment, items }, ctx, { flowChars, itemIndent, onComment }) {
66
+ const { indent, indentStep, options: { commentString } } = ctx;
67
+ itemIndent += indentStep;
68
+ const itemCtx = Object.assign({}, ctx, {
69
+ indent: itemIndent,
70
+ inFlow: true,
71
+ type: null
72
+ });
73
+ let reqNewline = false;
74
+ let linesAtValue = 0;
75
+ const lines = [];
76
+ for (let i = 0; i < items.length; ++i) {
77
+ const item = items[i];
78
+ let comment = null;
79
+ if (Node.isNode(item)) {
80
+ if (item.spaceBefore)
81
+ lines.push('');
82
+ addCommentBefore(ctx, lines, item.commentBefore, false);
83
+ if (item.comment)
84
+ comment = item.comment;
85
+ }
86
+ else if (Node.isPair(item)) {
87
+ const ik = Node.isNode(item.key) ? item.key : null;
88
+ if (ik) {
89
+ if (ik.spaceBefore)
90
+ lines.push('');
91
+ addCommentBefore(ctx, lines, ik.commentBefore, false);
92
+ if (ik.comment)
93
+ reqNewline = true;
94
+ }
95
+ const iv = Node.isNode(item.value) ? item.value : null;
96
+ if (iv) {
97
+ if (iv.comment)
98
+ comment = iv.comment;
99
+ if (iv.commentBefore)
100
+ reqNewline = true;
101
+ }
102
+ else if (item.value == null && ik && ik.comment) {
103
+ comment = ik.comment;
104
+ }
105
+ }
106
+ if (comment)
107
+ reqNewline = true;
108
+ let str = stringify.stringify(item, itemCtx, () => (comment = null));
109
+ if (i < items.length - 1)
110
+ str += ',';
111
+ if (comment)
112
+ str += stringifyComment.lineComment(str, itemIndent, commentString(comment));
113
+ if (!reqNewline && (lines.length > linesAtValue || str.includes('\n')))
114
+ reqNewline = true;
115
+ lines.push(str);
116
+ linesAtValue = lines.length;
117
+ }
118
+ let str;
119
+ const { start, end } = flowChars;
120
+ if (lines.length === 0) {
121
+ str = start + end;
122
+ }
123
+ else {
124
+ if (!reqNewline) {
125
+ const len = lines.reduce((sum, line) => sum + line.length + 2, 2);
126
+ reqNewline = len > Collection.Collection.maxFlowStringSingleLineLength;
127
+ }
128
+ if (reqNewline) {
129
+ str = start;
130
+ for (const line of lines)
131
+ str += line ? `\n${indentStep}${indent}${line}` : '\n';
132
+ str += `\n${indent}${end}`;
133
+ }
134
+ else {
135
+ str = `${start} ${lines.join(' ')} ${end}`;
136
+ }
137
+ }
138
+ if (comment) {
139
+ str += stringifyComment.lineComment(str, commentString(comment), indent);
140
+ if (onComment)
141
+ onComment();
142
+ }
143
+ return str;
144
+ }
145
+ function addCommentBefore({ indent, options: { commentString } }, lines, comment, chompKeep) {
146
+ if (comment && chompKeep)
147
+ comment = comment.replace(/^\n+/, '');
148
+ if (comment) {
149
+ const ic = stringifyComment.indentComment(commentString(comment), indent);
150
+ lines.push(ic.trimStart()); // Avoid double indent on first line
151
+ }
152
+ }
153
+
154
+ exports.stringifyCollection = stringifyCollection;
@@ -0,0 +1,10 @@
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
+ export declare const stringifyComment: (str: string) => string;
9
+ export declare function indentComment(comment: string, indent: string): string;
10
+ export declare const lineComment: (str: string, indent: string, comment: string) => string;
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Stringifies a comment.
5
+ *
6
+ * Empty comment lines are left empty,
7
+ * lines consisting of a single space are replaced by `#`,
8
+ * and all other lines are prefixed with a `#`.
9
+ */
10
+ const stringifyComment = (str) => str.replace(/^(?!$)(?: $)?/gm, '#');
11
+ function indentComment(comment, indent) {
12
+ if (/^\n+$/.test(comment))
13
+ return comment.substring(1);
14
+ return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;
15
+ }
16
+ const lineComment = (str, indent, comment) => comment.includes('\n')
17
+ ? '\n' + indentComment(comment, indent)
18
+ : (str.endsWith(' ') ? '' : ' ') + comment;
19
+
20
+ exports.indentComment = indentComment;
21
+ exports.lineComment = lineComment;
22
+ exports.stringifyComment = stringifyComment;
@@ -0,0 +1,3 @@
1
+ import { Document } from '../doc/Document.js';
2
+ import { ToStringOptions } from '../options.js';
3
+ export declare function stringifyDocument(doc: Readonly<Document>, options: ToStringOptions): string;
@@ -0,0 +1,88 @@
1
+ 'use strict';
2
+
3
+ var Node = require('../nodes/Node.js');
4
+ var stringify = require('./stringify.js');
5
+ var stringifyComment = require('./stringifyComment.js');
6
+
7
+ function stringifyDocument(doc, options) {
8
+ var _a;
9
+ const lines = [];
10
+ let hasDirectives = options.directives === true;
11
+ if (options.directives !== false && doc.directives) {
12
+ const dir = doc.directives.toString(doc);
13
+ if (dir) {
14
+ lines.push(dir);
15
+ hasDirectives = true;
16
+ }
17
+ else if (doc.directives.docStart)
18
+ hasDirectives = true;
19
+ }
20
+ if (hasDirectives)
21
+ lines.push('---');
22
+ const ctx = stringify.createStringifyContext(doc, options);
23
+ const { commentString } = ctx.options;
24
+ if (doc.commentBefore) {
25
+ if (lines.length !== 1)
26
+ lines.unshift('');
27
+ const cs = commentString(doc.commentBefore);
28
+ lines.unshift(stringifyComment.indentComment(cs, ''));
29
+ }
30
+ let chompKeep = false;
31
+ let contentComment = null;
32
+ if (doc.contents) {
33
+ if (Node.isNode(doc.contents)) {
34
+ if (doc.contents.spaceBefore && hasDirectives)
35
+ lines.push('');
36
+ if (doc.contents.commentBefore) {
37
+ const cs = commentString(doc.contents.commentBefore);
38
+ lines.push(stringifyComment.indentComment(cs, ''));
39
+ }
40
+ // top-level block scalars need to be indented if followed by a comment
41
+ ctx.forceBlockIndent = !!doc.comment;
42
+ contentComment = doc.contents.comment;
43
+ }
44
+ const onChompKeep = contentComment ? undefined : () => (chompKeep = true);
45
+ let body = stringify.stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);
46
+ if (contentComment)
47
+ body += stringifyComment.lineComment(body, '', commentString(contentComment));
48
+ if ((body[0] === '|' || body[0] === '>') &&
49
+ lines[lines.length - 1] === '---') {
50
+ // Top-level block scalars with a preceding doc marker ought to use the
51
+ // same line for their header.
52
+ lines[lines.length - 1] = `--- ${body}`;
53
+ }
54
+ else
55
+ lines.push(body);
56
+ }
57
+ else {
58
+ lines.push(stringify.stringify(doc.contents, ctx));
59
+ }
60
+ if ((_a = doc.directives) === null || _a === void 0 ? void 0 : _a.docEnd) {
61
+ if (doc.comment) {
62
+ const cs = commentString(doc.comment);
63
+ if (cs.includes('\n')) {
64
+ lines.push('...');
65
+ lines.push(stringifyComment.indentComment(cs, ''));
66
+ }
67
+ else {
68
+ lines.push(`... ${cs}`);
69
+ }
70
+ }
71
+ else {
72
+ lines.push('...');
73
+ }
74
+ }
75
+ else {
76
+ let dc = doc.comment;
77
+ if (dc && chompKeep)
78
+ dc = dc.replace(/^\n+/, '');
79
+ if (dc) {
80
+ if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')
81
+ lines.push('');
82
+ lines.push(stringifyComment.indentComment(commentString(dc), ''));
83
+ }
84
+ }
85
+ return lines.join('\n') + '\n';
86
+ }
87
+
88
+ exports.stringifyDocument = stringifyDocument;
@@ -0,0 +1,2 @@
1
+ import type { Scalar } from '../nodes/Scalar.js';
2
+ export declare function stringifyNumber({ format, minFractionDigits, tag, value }: Scalar): string;
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ function stringifyNumber({ format, minFractionDigits, tag, value }) {
4
+ if (typeof value === 'bigint')
5
+ return String(value);
6
+ const num = typeof value === 'number' ? value : Number(value);
7
+ if (!isFinite(num))
8
+ return isNaN(num) ? '.nan' : num < 0 ? '-.inf' : '.inf';
9
+ let n = JSON.stringify(value);
10
+ if (!format &&
11
+ minFractionDigits &&
12
+ (!tag || tag === 'tag:yaml.org,2002:float') &&
13
+ /^\d/.test(n)) {
14
+ let i = n.indexOf('.');
15
+ if (i < 0) {
16
+ i = n.length;
17
+ n += '.';
18
+ }
19
+ let d = minFractionDigits - (n.length - i - 1);
20
+ while (d-- > 0)
21
+ n += '0';
22
+ }
23
+ return n;
24
+ }
25
+
26
+ exports.stringifyNumber = stringifyNumber;
@@ -0,0 +1,3 @@
1
+ import type { Pair } from '../nodes/Pair.js';
2
+ import { StringifyContext } from './stringify.js';
3
+ export declare function stringifyPair({ key, value }: Readonly<Pair>, ctx: StringifyContext, onComment?: () => void, onChompKeep?: () => void): string;
@@ -0,0 +1,124 @@
1
+ 'use strict';
2
+
3
+ var Node = require('../nodes/Node.js');
4
+ var Scalar = require('../nodes/Scalar.js');
5
+ var stringify = require('./stringify.js');
6
+ var stringifyComment = require('./stringifyComment.js');
7
+
8
+ function stringifyPair({ key, value }, ctx, onComment, onChompKeep) {
9
+ const { allNullValues, doc, indent, indentStep, options: { commentString, indentSeq, simpleKeys } } = ctx;
10
+ let keyComment = (Node.isNode(key) && key.comment) || null;
11
+ if (simpleKeys) {
12
+ if (keyComment) {
13
+ throw new Error('With simple keys, key nodes cannot have comments');
14
+ }
15
+ if (Node.isCollection(key)) {
16
+ const msg = 'With simple keys, collection cannot be used as a key value';
17
+ throw new Error(msg);
18
+ }
19
+ }
20
+ let explicitKey = !simpleKeys &&
21
+ (!key ||
22
+ (keyComment && value == null && !ctx.inFlow) ||
23
+ Node.isCollection(key) ||
24
+ (Node.isScalar(key)
25
+ ? key.type === Scalar.Scalar.BLOCK_FOLDED || key.type === Scalar.Scalar.BLOCK_LITERAL
26
+ : typeof key === 'object'));
27
+ ctx = Object.assign({}, ctx, {
28
+ allNullValues: false,
29
+ implicitKey: !explicitKey && (simpleKeys || !allNullValues),
30
+ indent: indent + indentStep
31
+ });
32
+ let keyCommentDone = false;
33
+ let chompKeep = false;
34
+ let str = stringify.stringify(key, ctx, () => (keyCommentDone = true), () => (chompKeep = true));
35
+ if (!explicitKey && !ctx.inFlow && str.length > 1024) {
36
+ if (simpleKeys)
37
+ throw new Error('With simple keys, single line scalar must not span more than 1024 characters');
38
+ explicitKey = true;
39
+ }
40
+ if (ctx.inFlow) {
41
+ if (allNullValues || value == null) {
42
+ if (keyCommentDone && onComment)
43
+ onComment();
44
+ return str === '' ? '?' : explicitKey ? `? ${str}` : str;
45
+ }
46
+ }
47
+ else if ((allNullValues && !simpleKeys) || (value == null && explicitKey)) {
48
+ str = `? ${str}`;
49
+ if (keyComment && !keyCommentDone) {
50
+ str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));
51
+ }
52
+ else if (chompKeep && onChompKeep)
53
+ onChompKeep();
54
+ return str;
55
+ }
56
+ if (keyCommentDone)
57
+ keyComment = null;
58
+ if (explicitKey) {
59
+ if (keyComment)
60
+ str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));
61
+ str = `? ${str}\n${indent}:`;
62
+ }
63
+ else {
64
+ str = `${str}:`;
65
+ if (keyComment)
66
+ str += stringifyComment.lineComment(str, ctx.indent, commentString(keyComment));
67
+ }
68
+ let vcb = '';
69
+ let valueComment = null;
70
+ if (Node.isNode(value)) {
71
+ if (value.spaceBefore)
72
+ vcb = '\n';
73
+ if (value.commentBefore) {
74
+ const cs = commentString(value.commentBefore);
75
+ vcb += `\n${stringifyComment.indentComment(cs, ctx.indent)}`;
76
+ }
77
+ valueComment = value.comment;
78
+ }
79
+ else if (value && typeof value === 'object') {
80
+ value = doc.createNode(value);
81
+ }
82
+ ctx.implicitKey = false;
83
+ if (!explicitKey && !keyComment && Node.isScalar(value))
84
+ ctx.indentAtStart = str.length + 1;
85
+ chompKeep = false;
86
+ if (!indentSeq &&
87
+ indentStep.length >= 2 &&
88
+ !ctx.inFlow &&
89
+ !explicitKey &&
90
+ Node.isSeq(value) &&
91
+ !value.flow &&
92
+ !value.tag &&
93
+ !value.anchor) {
94
+ // If indentSeq === false, consider '- ' as part of indentation where possible
95
+ ctx.indent = ctx.indent.substr(2);
96
+ }
97
+ let valueCommentDone = false;
98
+ const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));
99
+ let ws = ' ';
100
+ if (vcb || keyComment) {
101
+ ws = valueStr === '' && !ctx.inFlow ? vcb : `${vcb}\n${ctx.indent}`;
102
+ }
103
+ else if (!explicitKey && Node.isCollection(value)) {
104
+ const flow = valueStr[0] === '[' || valueStr[0] === '{';
105
+ if (!flow || valueStr.includes('\n'))
106
+ ws = `\n${ctx.indent}`;
107
+ }
108
+ else if (valueStr === '' || valueStr[0] === '\n')
109
+ ws = '';
110
+ str += ws + valueStr;
111
+ if (ctx.inFlow) {
112
+ if (valueCommentDone && onComment)
113
+ onComment();
114
+ }
115
+ else if (valueComment && !valueCommentDone) {
116
+ str += stringifyComment.lineComment(str, ctx.indent, commentString(valueComment));
117
+ }
118
+ else if (chompKeep && onChompKeep) {
119
+ onChompKeep();
120
+ }
121
+ return str;
122
+ }
123
+
124
+ exports.stringifyPair = stringifyPair;
@@ -0,0 +1,3 @@
1
+ import { Scalar } from '../nodes/Scalar.js';
2
+ import type { StringifyContext } from './stringify.js';
3
+ export declare function stringifyString(item: Scalar, ctx: StringifyContext, onComment?: () => void, onChompKeep?: () => void): string;