yaml 1.10.1 → 2.0.0-10

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 (275) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +57 -41
  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 +81 -0
  6. package/browser/dist/compose/compose-scalar.js +81 -0
  7. package/browser/dist/compose/composer.js +219 -0
  8. package/browser/dist/compose/resolve-block-map.js +107 -0
  9. package/browser/dist/compose/resolve-block-scalar.js +185 -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 +128 -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 +321 -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 +166 -0
  24. package/browser/dist/errors.js +57 -0
  25. package/browser/dist/index.js +18 -1002
  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/options.js +18 -0
  38. package/browser/dist/parse/cst-scalar.js +215 -0
  39. package/browser/dist/parse/cst-stringify.js +61 -0
  40. package/browser/dist/parse/cst-visit.js +97 -0
  41. package/browser/dist/parse/cst.js +98 -0
  42. package/browser/dist/parse/lexer.js +692 -0
  43. package/browser/dist/parse/line-counter.js +39 -0
  44. package/browser/dist/parse/parser.js +882 -0
  45. package/browser/dist/public-api.js +99 -0
  46. package/browser/dist/schema/Schema.js +34 -0
  47. package/browser/dist/schema/common/map.js +42 -0
  48. package/browser/dist/schema/common/null.js +13 -0
  49. package/browser/dist/schema/common/seq.js +33 -0
  50. package/browser/dist/schema/common/string.js +14 -0
  51. package/browser/dist/schema/core/bool.js +19 -0
  52. package/browser/dist/schema/core/float.js +43 -0
  53. package/browser/dist/schema/core/int.js +38 -0
  54. package/browser/dist/schema/core/schema.js +23 -0
  55. package/browser/dist/schema/json/schema.js +62 -0
  56. package/browser/dist/schema/tags.js +83 -0
  57. package/browser/dist/schema/yaml-1.1/binary.js +66 -0
  58. package/browser/dist/schema/yaml-1.1/bool.js +26 -0
  59. package/browser/dist/schema/yaml-1.1/float.js +46 -0
  60. package/browser/dist/schema/yaml-1.1/int.js +71 -0
  61. package/browser/dist/schema/yaml-1.1/omap.js +73 -0
  62. package/browser/dist/schema/yaml-1.1/pairs.js +77 -0
  63. package/browser/dist/schema/yaml-1.1/schema.js +37 -0
  64. package/browser/dist/schema/yaml-1.1/set.js +87 -0
  65. package/browser/dist/schema/yaml-1.1/timestamp.js +101 -0
  66. package/browser/dist/stringify/foldFlowLines.js +135 -0
  67. package/browser/dist/stringify/stringify.js +124 -0
  68. package/browser/dist/stringify/stringifyCollection.js +152 -0
  69. package/browser/dist/stringify/stringifyComment.js +18 -0
  70. package/browser/dist/stringify/stringifyDocument.js +68 -0
  71. package/browser/dist/stringify/stringifyNumber.js +24 -0
  72. package/browser/dist/stringify/stringifyPair.js +122 -0
  73. package/browser/dist/stringify/stringifyString.js +314 -0
  74. package/browser/dist/util.js +9 -2
  75. package/browser/dist/visit.js +146 -0
  76. package/browser/index.js +5 -1
  77. package/browser/package.json +3 -0
  78. package/dist/compose/compose-collection.d.ts +5 -0
  79. package/dist/compose/compose-collection.js +61 -0
  80. package/dist/compose/compose-doc.d.ts +6 -0
  81. package/dist/compose/compose-doc.js +42 -0
  82. package/dist/compose/compose-node.d.ts +26 -0
  83. package/dist/compose/compose-node.js +84 -0
  84. package/dist/compose/compose-scalar.d.ts +5 -0
  85. package/dist/compose/compose-scalar.js +83 -0
  86. package/dist/compose/composer.d.ts +62 -0
  87. package/dist/compose/composer.js +223 -0
  88. package/dist/compose/resolve-block-map.d.ts +6 -0
  89. package/dist/compose/resolve-block-map.js +109 -0
  90. package/dist/compose/resolve-block-scalar.d.ts +10 -0
  91. package/dist/compose/resolve-block-scalar.js +187 -0
  92. package/dist/compose/resolve-block-seq.d.ts +5 -0
  93. package/dist/compose/resolve-block-seq.js +47 -0
  94. package/dist/compose/resolve-end.d.ts +6 -0
  95. package/dist/compose/resolve-end.js +39 -0
  96. package/dist/compose/resolve-flow-collection.d.ts +6 -0
  97. package/dist/compose/resolve-flow-collection.js +202 -0
  98. package/dist/compose/resolve-flow-scalar.d.ts +10 -0
  99. package/dist/compose/resolve-flow-scalar.js +225 -0
  100. package/dist/compose/resolve-props.d.ts +21 -0
  101. package/dist/compose/resolve-props.js +130 -0
  102. package/dist/compose/util-contains-newline.d.ts +2 -0
  103. package/dist/compose/util-contains-newline.js +36 -0
  104. package/dist/compose/util-empty-scalar-position.d.ts +2 -0
  105. package/dist/compose/util-empty-scalar-position.js +29 -0
  106. package/dist/compose/util-flow-indent-check.d.ts +3 -0
  107. package/dist/compose/util-flow-indent-check.js +17 -0
  108. package/dist/compose/util-map-includes.d.ts +4 -0
  109. package/dist/compose/util-map-includes.js +19 -0
  110. package/dist/doc/Document.d.ts +139 -0
  111. package/dist/doc/Document.js +323 -0
  112. package/dist/doc/anchors.d.ts +24 -0
  113. package/dist/doc/anchors.js +77 -0
  114. package/dist/doc/applyReviver.d.ts +9 -0
  115. package/dist/doc/applyReviver.js +56 -0
  116. package/dist/doc/createNode.d.ts +17 -0
  117. package/dist/doc/createNode.js +86 -0
  118. package/dist/doc/directives.d.ts +47 -0
  119. package/dist/doc/directives.js +168 -0
  120. package/dist/errors.d.ts +21 -0
  121. package/dist/errors.js +62 -0
  122. package/dist/index.d.ts +19 -0
  123. package/dist/index.js +49 -77
  124. package/dist/log.d.ts +3 -0
  125. package/dist/log.js +17 -0
  126. package/dist/node_modules/tslib/tslib.es6.js +76 -0
  127. package/dist/nodes/Alias.d.ts +28 -0
  128. package/dist/nodes/Alias.js +96 -0
  129. package/dist/nodes/Collection.d.ts +73 -0
  130. package/dist/nodes/Collection.js +150 -0
  131. package/dist/nodes/Node.d.ts +53 -0
  132. package/dist/nodes/Node.js +66 -0
  133. package/dist/nodes/Pair.d.ts +21 -0
  134. package/dist/nodes/Pair.js +39 -0
  135. package/dist/nodes/Scalar.d.ts +42 -0
  136. package/dist/nodes/Scalar.js +26 -0
  137. package/dist/nodes/YAMLMap.d.ts +41 -0
  138. package/dist/nodes/YAMLMap.js +119 -0
  139. package/dist/nodes/YAMLSeq.d.ts +55 -0
  140. package/dist/nodes/YAMLSeq.js +107 -0
  141. package/dist/nodes/addPairToJSMap.d.ts +3 -0
  142. package/dist/nodes/addPairToJSMap.js +106 -0
  143. package/dist/nodes/toJS.d.ts +30 -0
  144. package/dist/nodes/toJS.js +37 -0
  145. package/dist/options.d.ts +338 -0
  146. package/dist/options.js +20 -0
  147. package/dist/parse/cst-scalar.d.ts +64 -0
  148. package/dist/parse/cst-scalar.js +219 -0
  149. package/dist/parse/cst-stringify.d.ts +8 -0
  150. package/dist/parse/cst-stringify.js +63 -0
  151. package/dist/parse/cst-visit.d.ts +39 -0
  152. package/dist/parse/cst-visit.js +99 -0
  153. package/dist/parse/cst.d.ts +106 -0
  154. package/dist/parse/cst.js +112 -0
  155. package/dist/parse/lexer.d.ts +87 -0
  156. package/dist/parse/lexer.js +694 -0
  157. package/dist/parse/line-counter.d.ts +22 -0
  158. package/dist/parse/line-counter.js +41 -0
  159. package/dist/parse/parser.d.ts +84 -0
  160. package/dist/parse/parser.js +886 -0
  161. package/dist/public-api.d.ts +43 -0
  162. package/dist/public-api.js +104 -0
  163. package/dist/schema/Schema.d.ts +18 -0
  164. package/dist/schema/Schema.js +36 -0
  165. package/dist/schema/common/map.d.ts +2 -0
  166. package/dist/schema/common/map.js +44 -0
  167. package/dist/schema/common/null.d.ts +4 -0
  168. package/dist/schema/common/null.js +15 -0
  169. package/dist/schema/common/seq.d.ts +2 -0
  170. package/dist/schema/common/seq.js +35 -0
  171. package/dist/schema/common/string.d.ts +2 -0
  172. package/dist/schema/common/string.js +16 -0
  173. package/dist/schema/core/bool.d.ts +4 -0
  174. package/dist/schema/core/bool.js +21 -0
  175. package/dist/schema/core/float.d.ts +4 -0
  176. package/dist/schema/core/float.js +47 -0
  177. package/dist/schema/core/int.d.ts +4 -0
  178. package/dist/schema/core/int.js +42 -0
  179. package/dist/schema/core/schema.d.ts +1 -0
  180. package/dist/schema/core/schema.js +25 -0
  181. package/dist/schema/json/schema.d.ts +2 -0
  182. package/dist/schema/json/schema.js +64 -0
  183. package/dist/schema/tags.d.ts +40 -0
  184. package/dist/schema/tags.js +86 -0
  185. package/dist/schema/types.d.ts +82 -0
  186. package/dist/schema/yaml-1.1/binary.d.ts +2 -0
  187. package/dist/schema/yaml-1.1/binary.js +68 -0
  188. package/dist/schema/yaml-1.1/bool.d.ts +7 -0
  189. package/dist/schema/yaml-1.1/bool.js +29 -0
  190. package/dist/schema/yaml-1.1/float.d.ts +4 -0
  191. package/dist/schema/yaml-1.1/float.js +50 -0
  192. package/dist/schema/yaml-1.1/int.d.ts +5 -0
  193. package/dist/schema/yaml-1.1/int.js +76 -0
  194. package/dist/schema/yaml-1.1/omap.d.ts +21 -0
  195. package/dist/schema/yaml-1.1/omap.js +76 -0
  196. package/dist/schema/yaml-1.1/pairs.d.ts +10 -0
  197. package/dist/schema/yaml-1.1/pairs.js +81 -0
  198. package/dist/schema/yaml-1.1/schema.d.ts +1 -0
  199. package/dist/schema/yaml-1.1/schema.js +39 -0
  200. package/dist/schema/yaml-1.1/set.d.ts +22 -0
  201. package/dist/schema/yaml-1.1/set.js +90 -0
  202. package/dist/schema/yaml-1.1/timestamp.d.ts +6 -0
  203. package/dist/schema/yaml-1.1/timestamp.js +105 -0
  204. package/dist/stringify/foldFlowLines.d.ts +34 -0
  205. package/dist/stringify/foldFlowLines.js +140 -0
  206. package/dist/stringify/stringify.d.ts +20 -0
  207. package/dist/stringify/stringify.js +127 -0
  208. package/dist/stringify/stringifyCollection.d.ts +17 -0
  209. package/dist/stringify/stringifyCollection.js +154 -0
  210. package/dist/stringify/stringifyComment.d.ts +10 -0
  211. package/dist/stringify/stringifyComment.js +22 -0
  212. package/dist/stringify/stringifyDocument.d.ts +3 -0
  213. package/dist/stringify/stringifyDocument.js +70 -0
  214. package/dist/stringify/stringifyNumber.d.ts +2 -0
  215. package/dist/stringify/stringifyNumber.js +26 -0
  216. package/dist/stringify/stringifyPair.d.ts +3 -0
  217. package/dist/stringify/stringifyPair.js +124 -0
  218. package/dist/stringify/stringifyString.d.ts +3 -0
  219. package/dist/stringify/stringifyString.js +316 -0
  220. package/dist/test-events.d.ts +4 -0
  221. package/dist/test-events.js +126 -152
  222. package/dist/util.d.ts +9 -0
  223. package/dist/util.js +19 -14
  224. package/dist/visit.d.ts +63 -0
  225. package/dist/visit.js +148 -0
  226. package/package.json +43 -55
  227. package/util.d.ts +3 -86
  228. package/util.js +2 -16
  229. package/browser/dist/PlainValue-b8036b75.js +0 -1275
  230. package/browser/dist/Schema-e94716c8.js +0 -682
  231. package/browser/dist/legacy-exports.js +0 -3
  232. package/browser/dist/package.json +0 -1
  233. package/browser/dist/parse-cst.js +0 -1904
  234. package/browser/dist/resolveSeq-492ab440.js +0 -2419
  235. package/browser/dist/types.js +0 -4
  236. package/browser/dist/warnings-df54cb69.js +0 -499
  237. package/browser/map.js +0 -2
  238. package/browser/pair.js +0 -2
  239. package/browser/parse-cst.js +0 -1
  240. package/browser/scalar.js +0 -2
  241. package/browser/schema.js +0 -9
  242. package/browser/seq.js +0 -2
  243. package/browser/types/binary.js +0 -8
  244. package/browser/types/omap.js +0 -3
  245. package/browser/types/pairs.js +0 -3
  246. package/browser/types/set.js +0 -3
  247. package/browser/types/timestamp.js +0 -10
  248. package/browser/types.js +0 -1
  249. package/browser/util.js +0 -1
  250. package/dist/Document-9b4560a1.js +0 -757
  251. package/dist/PlainValue-ec8e588e.js +0 -876
  252. package/dist/Schema-88e323a7.js +0 -525
  253. package/dist/legacy-exports.js +0 -16
  254. package/dist/parse-cst.js +0 -1753
  255. package/dist/resolveSeq-d03cb037.js +0 -2161
  256. package/dist/types.js +0 -23
  257. package/dist/warnings-1000a372.js +0 -416
  258. package/index.d.ts +0 -372
  259. package/index.js +0 -1
  260. package/map.js +0 -2
  261. package/pair.js +0 -2
  262. package/parse-cst.d.ts +0 -191
  263. package/parse-cst.js +0 -1
  264. package/scalar.js +0 -2
  265. package/schema.js +0 -9
  266. package/seq.js +0 -2
  267. package/types/binary.js +0 -8
  268. package/types/omap.js +0 -3
  269. package/types/pairs.js +0 -3
  270. package/types/set.js +0 -3
  271. package/types/timestamp.js +0 -10
  272. package/types.d.ts +0 -407
  273. package/types.js +0 -17
  274. package/types.mjs +0 -17
  275. 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,70 @@
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
+ const lines = [];
9
+ let hasDirectives = options.directives === true;
10
+ if (options.directives !== false && doc.directives) {
11
+ const dir = doc.directives.toString(doc);
12
+ if (dir) {
13
+ lines.push(dir);
14
+ hasDirectives = true;
15
+ }
16
+ else if (doc.directives.marker)
17
+ hasDirectives = true;
18
+ }
19
+ if (hasDirectives)
20
+ lines.push('---');
21
+ const ctx = stringify.createStringifyContext(doc, options);
22
+ const { commentString } = ctx.options;
23
+ if (doc.commentBefore) {
24
+ if (lines.length !== 1)
25
+ lines.unshift('');
26
+ const cs = commentString(doc.commentBefore);
27
+ lines.unshift(stringifyComment.indentComment(cs, ''));
28
+ }
29
+ let chompKeep = false;
30
+ let contentComment = null;
31
+ if (doc.contents) {
32
+ if (Node.isNode(doc.contents)) {
33
+ if (doc.contents.spaceBefore && hasDirectives)
34
+ lines.push('');
35
+ if (doc.contents.commentBefore) {
36
+ const cs = commentString(doc.contents.commentBefore);
37
+ lines.push(stringifyComment.indentComment(cs, ''));
38
+ }
39
+ // top-level block scalars need to be indented if followed by a comment
40
+ ctx.forceBlockIndent = !!doc.comment;
41
+ contentComment = doc.contents.comment;
42
+ }
43
+ const onChompKeep = contentComment ? undefined : () => (chompKeep = true);
44
+ let body = stringify.stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);
45
+ if (contentComment)
46
+ body += stringifyComment.lineComment(body, '', commentString(contentComment));
47
+ if ((body[0] === '|' || body[0] === '>') &&
48
+ lines[lines.length - 1] === '---') {
49
+ // Top-level block scalars with a preceding doc marker ought to use the
50
+ // same line for their header.
51
+ lines[lines.length - 1] = `--- ${body}`;
52
+ }
53
+ else
54
+ lines.push(body);
55
+ }
56
+ else {
57
+ lines.push(stringify.stringify(doc.contents, ctx));
58
+ }
59
+ let dc = doc.comment;
60
+ if (dc && chompKeep)
61
+ dc = dc.replace(/^\n+/, '');
62
+ if (dc) {
63
+ if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')
64
+ lines.push('');
65
+ lines.push(stringifyComment.indentComment(commentString(dc), ''));
66
+ }
67
+ return lines.join('\n') + '\n';
68
+ }
69
+
70
+ 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 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;