yaml 2.0.0-4 → 2.0.0-8

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 (220) hide show
  1. package/README.md +5 -5
  2. package/browser/dist/compose/compose-collection.js +12 -9
  3. package/browser/dist/compose/compose-doc.js +23 -6
  4. package/browser/dist/compose/compose-node.js +27 -17
  5. package/browser/dist/compose/compose-scalar.js +21 -23
  6. package/browser/dist/compose/composer.js +108 -78
  7. package/browser/dist/compose/resolve-block-map.js +41 -29
  8. package/browser/dist/compose/resolve-block-scalar.js +14 -17
  9. package/browser/dist/compose/resolve-block-seq.js +21 -17
  10. package/browser/dist/compose/resolve-end.js +7 -8
  11. package/browser/dist/compose/resolve-flow-collection.js +158 -199
  12. package/browser/dist/compose/resolve-flow-scalar.js +62 -26
  13. package/browser/dist/compose/resolve-props.js +72 -37
  14. package/browser/dist/compose/util-contains-newline.js +15 -12
  15. package/browser/dist/compose/util-map-includes.js +17 -0
  16. package/browser/dist/doc/Document.js +74 -99
  17. package/browser/dist/doc/anchors.js +72 -0
  18. package/browser/dist/doc/createNode.js +35 -19
  19. package/browser/dist/doc/directives.js +5 -0
  20. package/browser/dist/errors.js +16 -12
  21. package/browser/dist/index.js +3 -3
  22. package/browser/dist/nodes/Alias.js +51 -28
  23. package/browser/dist/nodes/Collection.js +23 -92
  24. package/browser/dist/nodes/Node.js +9 -1
  25. package/browser/dist/nodes/Pair.js +16 -231
  26. package/browser/dist/nodes/YAMLMap.js +8 -4
  27. package/browser/dist/nodes/YAMLSeq.js +7 -4
  28. package/browser/dist/nodes/addPairToJSMap.js +103 -0
  29. package/browser/dist/nodes/toJS.js +12 -10
  30. package/browser/dist/options.js +1 -2
  31. package/browser/dist/parse/cst-scalar.js +219 -0
  32. package/browser/dist/parse/cst-stringify.js +61 -0
  33. package/browser/dist/parse/cst-visit.js +97 -0
  34. package/{dist/parse/tokens.js → browser/dist/parse/cst.js} +12 -7
  35. package/browser/dist/parse/lexer.js +149 -125
  36. package/browser/dist/parse/parser.js +272 -196
  37. package/browser/dist/public-api.js +11 -14
  38. package/browser/dist/schema/Schema.js +28 -0
  39. package/browser/dist/{tags/failsafe → schema/common}/map.js +0 -0
  40. package/browser/dist/schema/common/null.js +13 -0
  41. package/browser/dist/{tags/failsafe → schema/common}/seq.js +1 -1
  42. package/browser/dist/{tags/failsafe → schema/common}/string.js +0 -0
  43. package/browser/dist/schema/core/bool.js +19 -0
  44. package/browser/dist/schema/core/float.js +40 -0
  45. package/browser/dist/schema/core/int.js +38 -0
  46. package/browser/dist/schema/core/schema.js +23 -0
  47. package/browser/dist/{tags/json.js → schema/json/schema.js} +5 -6
  48. package/browser/dist/schema/tags.js +79 -0
  49. package/browser/dist/{tags → schema}/yaml-1.1/binary.js +0 -0
  50. package/browser/dist/schema/yaml-1.1/bool.js +26 -0
  51. package/browser/dist/schema/yaml-1.1/float.js +43 -0
  52. package/browser/dist/schema/yaml-1.1/int.js +71 -0
  53. package/browser/dist/{tags → schema}/yaml-1.1/omap.js +0 -0
  54. package/browser/dist/{tags → schema}/yaml-1.1/pairs.js +9 -6
  55. package/browser/dist/schema/yaml-1.1/schema.js +37 -0
  56. package/browser/dist/{tags → schema}/yaml-1.1/set.js +0 -0
  57. package/browser/dist/{tags → schema}/yaml-1.1/timestamp.js +0 -0
  58. package/browser/dist/stringify/stringify.js +8 -6
  59. package/browser/dist/stringify/stringifyCollection.js +122 -0
  60. package/browser/dist/stringify/stringifyComment.js +14 -0
  61. package/browser/dist/stringify/stringifyDocument.js +64 -0
  62. package/browser/dist/stringify/stringifyPair.js +111 -0
  63. package/browser/dist/stringify/stringifyString.js +53 -52
  64. package/browser/dist/visit.js +20 -1
  65. package/dist/compose/compose-collection.d.ts +4 -4
  66. package/dist/compose/compose-collection.js +12 -9
  67. package/dist/compose/compose-doc.d.ts +4 -3
  68. package/dist/compose/compose-doc.js +23 -6
  69. package/dist/compose/compose-node.d.ts +15 -7
  70. package/dist/compose/compose-node.js +27 -17
  71. package/dist/compose/compose-scalar.d.ts +4 -3
  72. package/dist/compose/compose-scalar.js +20 -22
  73. package/dist/compose/composer.d.ts +28 -23
  74. package/dist/compose/composer.js +109 -79
  75. package/dist/compose/resolve-block-map.d.ts +5 -4
  76. package/dist/compose/resolve-block-map.js +41 -29
  77. package/dist/compose/resolve-block-scalar.d.ts +5 -3
  78. package/dist/compose/resolve-block-scalar.js +14 -17
  79. package/dist/compose/resolve-block-seq.d.ts +4 -4
  80. package/dist/compose/resolve-block-seq.js +21 -17
  81. package/dist/compose/resolve-end.d.ts +3 -2
  82. package/dist/compose/resolve-end.js +7 -8
  83. package/dist/compose/resolve-flow-collection.d.ts +4 -5
  84. package/dist/compose/resolve-flow-collection.js +157 -198
  85. package/dist/compose/resolve-flow-scalar.d.ts +5 -3
  86. package/dist/compose/resolve-flow-scalar.js +62 -26
  87. package/dist/compose/resolve-props.d.ts +16 -10
  88. package/dist/compose/resolve-props.js +72 -37
  89. package/dist/compose/util-contains-newline.d.ts +1 -1
  90. package/dist/compose/util-contains-newline.js +15 -12
  91. package/dist/compose/util-empty-scalar-position.d.ts +1 -1
  92. package/dist/compose/util-map-includes.d.ts +4 -0
  93. package/dist/compose/util-map-includes.js +19 -0
  94. package/dist/doc/Document.d.ts +35 -15
  95. package/dist/doc/Document.js +72 -97
  96. package/dist/doc/anchors.d.ts +24 -0
  97. package/dist/doc/anchors.js +77 -0
  98. package/dist/doc/createNode.d.ts +10 -11
  99. package/dist/doc/createNode.js +34 -18
  100. package/dist/doc/directives.d.ts +1 -0
  101. package/dist/doc/directives.js +5 -0
  102. package/dist/errors.d.ts +11 -8
  103. package/dist/errors.js +16 -12
  104. package/dist/index.d.ts +5 -3
  105. package/dist/index.js +3 -3
  106. package/dist/nodes/Alias.d.ts +19 -9
  107. package/dist/nodes/Alias.js +51 -28
  108. package/dist/nodes/Collection.d.ts +9 -17
  109. package/dist/nodes/Collection.js +22 -91
  110. package/dist/nodes/Node.d.ts +10 -4
  111. package/dist/nodes/Node.js +9 -0
  112. package/dist/nodes/Pair.d.ts +10 -13
  113. package/dist/nodes/Pair.js +15 -230
  114. package/dist/nodes/Scalar.d.ts +6 -3
  115. package/dist/nodes/YAMLMap.d.ts +3 -3
  116. package/dist/nodes/YAMLMap.js +8 -4
  117. package/dist/nodes/YAMLSeq.d.ts +3 -3
  118. package/dist/nodes/YAMLSeq.js +7 -4
  119. package/dist/nodes/addPairToJSMap.d.ts +3 -0
  120. package/dist/nodes/addPairToJSMap.js +105 -0
  121. package/dist/nodes/toJS.d.ts +4 -5
  122. package/dist/nodes/toJS.js +12 -10
  123. package/dist/options.d.ts +41 -25
  124. package/dist/options.js +1 -2
  125. package/dist/parse/cst-scalar.d.ts +58 -0
  126. package/dist/parse/cst-scalar.js +223 -0
  127. package/dist/parse/cst-stringify.d.ts +8 -0
  128. package/dist/parse/cst-stringify.js +63 -0
  129. package/dist/parse/cst-visit.d.ts +39 -0
  130. package/dist/parse/cst-visit.js +99 -0
  131. package/dist/parse/{tokens.d.ts → cst.d.ts} +23 -7
  132. package/{browser/dist/parse/tokens.js → dist/parse/cst.js} +27 -1
  133. package/dist/parse/lexer.d.ts +7 -14
  134. package/dist/parse/lexer.js +150 -126
  135. package/dist/parse/parser.d.ts +31 -24
  136. package/dist/parse/parser.js +274 -198
  137. package/dist/public-api.d.ts +7 -7
  138. package/dist/public-api.js +11 -14
  139. package/dist/{doc → schema}/Schema.d.ts +6 -3
  140. package/dist/schema/Schema.js +30 -0
  141. package/dist/{tags/failsafe → schema/common}/map.d.ts +0 -0
  142. package/dist/{tags/failsafe → schema/common}/map.js +0 -0
  143. package/dist/schema/common/null.d.ts +4 -0
  144. package/dist/schema/common/null.js +15 -0
  145. package/dist/{tags/failsafe → schema/common}/seq.d.ts +0 -0
  146. package/dist/{tags/failsafe → schema/common}/seq.js +1 -1
  147. package/dist/{tags/failsafe → schema/common}/string.d.ts +0 -0
  148. package/dist/{tags/failsafe → schema/common}/string.js +0 -0
  149. package/dist/schema/core/bool.d.ts +4 -0
  150. package/dist/schema/core/bool.js +21 -0
  151. package/dist/schema/core/float.d.ts +4 -0
  152. package/dist/schema/core/float.js +44 -0
  153. package/dist/schema/core/int.d.ts +4 -0
  154. package/dist/schema/core/int.js +42 -0
  155. package/dist/schema/core/schema.d.ts +1 -0
  156. package/dist/schema/core/schema.js +25 -0
  157. package/dist/schema/json/schema.d.ts +2 -0
  158. package/dist/{tags/json.js → schema/json/schema.js} +5 -6
  159. package/dist/schema/tags.d.ts +41 -0
  160. package/dist/schema/tags.js +82 -0
  161. package/dist/{tags → schema}/types.d.ts +3 -7
  162. package/dist/{tags → schema}/yaml-1.1/binary.d.ts +0 -0
  163. package/dist/{tags → schema}/yaml-1.1/binary.js +0 -0
  164. package/dist/schema/yaml-1.1/bool.d.ts +7 -0
  165. package/dist/schema/yaml-1.1/bool.js +29 -0
  166. package/dist/schema/yaml-1.1/float.d.ts +4 -0
  167. package/dist/schema/yaml-1.1/float.js +47 -0
  168. package/dist/schema/yaml-1.1/int.d.ts +5 -0
  169. package/dist/schema/yaml-1.1/int.js +76 -0
  170. package/dist/{tags → schema}/yaml-1.1/omap.d.ts +0 -0
  171. package/dist/{tags → schema}/yaml-1.1/omap.js +0 -0
  172. package/dist/{tags → schema}/yaml-1.1/pairs.d.ts +3 -2
  173. package/dist/{tags → schema}/yaml-1.1/pairs.js +9 -6
  174. package/dist/schema/yaml-1.1/schema.d.ts +1 -0
  175. package/dist/schema/yaml-1.1/schema.js +39 -0
  176. package/dist/{tags → schema}/yaml-1.1/set.d.ts +1 -1
  177. package/dist/{tags → schema}/yaml-1.1/set.js +0 -0
  178. package/dist/{tags → schema}/yaml-1.1/timestamp.d.ts +0 -0
  179. package/dist/{tags → schema}/yaml-1.1/timestamp.js +0 -0
  180. package/dist/stringify/stringify.d.ts +1 -2
  181. package/dist/stringify/stringify.js +8 -6
  182. package/dist/stringify/stringifyCollection.d.ts +21 -0
  183. package/dist/stringify/stringifyCollection.js +124 -0
  184. package/dist/stringify/stringifyComment.d.ts +2 -0
  185. package/dist/stringify/stringifyComment.js +17 -0
  186. package/dist/stringify/stringifyDocument.d.ts +3 -0
  187. package/dist/stringify/stringifyDocument.js +66 -0
  188. package/dist/stringify/stringifyPair.d.ts +3 -0
  189. package/dist/stringify/stringifyPair.js +113 -0
  190. package/dist/stringify/stringifyString.js +53 -52
  191. package/dist/test-events.d.ts +1 -2
  192. package/dist/test-events.js +25 -12
  193. package/dist/util.d.ts +1 -1
  194. package/dist/visit.d.ts +10 -1
  195. package/dist/visit.js +20 -1
  196. package/package.json +9 -8
  197. package/browser/dist/doc/Anchors.js +0 -102
  198. package/browser/dist/doc/Schema.js +0 -27
  199. package/browser/dist/doc/getSchemaTags.js +0 -30
  200. package/browser/dist/stringify/addComment.js +0 -17
  201. package/browser/dist/tags/core.js +0 -109
  202. package/browser/dist/tags/failsafe/index.js +0 -7
  203. package/browser/dist/tags/index.js +0 -34
  204. package/browser/dist/tags/yaml-1.1/index.js +0 -152
  205. package/dist/doc/Anchors.d.ts +0 -36
  206. package/dist/doc/Anchors.js +0 -104
  207. package/dist/doc/Schema.js +0 -29
  208. package/dist/doc/getSchemaTags.d.ts +0 -3
  209. package/dist/doc/getSchemaTags.js +0 -32
  210. package/dist/stringify/addComment.d.ts +0 -2
  211. package/dist/stringify/addComment.js +0 -20
  212. package/dist/tags/core.d.ts +0 -14
  213. package/dist/tags/core.js +0 -119
  214. package/dist/tags/failsafe/index.d.ts +0 -1
  215. package/dist/tags/failsafe/index.js +0 -9
  216. package/dist/tags/index.d.ts +0 -31
  217. package/dist/tags/index.js +0 -37
  218. package/dist/tags/json.d.ts +0 -2
  219. package/dist/tags/yaml-1.1/index.d.ts +0 -2
  220. package/dist/tags/yaml-1.1/index.js +0 -154
@@ -0,0 +1,76 @@
1
+ 'use strict';
2
+
3
+ var stringifyNumber = require('../../stringify/stringifyNumber.js');
4
+
5
+ const intIdentify = (value) => typeof value === 'bigint' || Number.isInteger(value);
6
+ function intResolve(str, offset, radix, { intAsBigInt }) {
7
+ const sign = str[0];
8
+ if (sign === '-' || sign === '+')
9
+ offset += 1;
10
+ str = str.substring(offset).replace(/_/g, '');
11
+ if (intAsBigInt) {
12
+ switch (radix) {
13
+ case 2:
14
+ str = `0b${str}`;
15
+ break;
16
+ case 8:
17
+ str = `0o${str}`;
18
+ break;
19
+ case 16:
20
+ str = `0x${str}`;
21
+ break;
22
+ }
23
+ const n = BigInt(str);
24
+ return sign === '-' ? BigInt(-1) * n : n;
25
+ }
26
+ const n = parseInt(str, radix);
27
+ return sign === '-' ? -1 * n : n;
28
+ }
29
+ function intStringify(node, radix, prefix) {
30
+ const { value } = node;
31
+ if (intIdentify(value)) {
32
+ const str = value.toString(radix);
33
+ return value < 0 ? '-' + prefix + str.substr(1) : prefix + str;
34
+ }
35
+ return stringifyNumber.stringifyNumber(node);
36
+ }
37
+ const intBin = {
38
+ identify: intIdentify,
39
+ default: true,
40
+ tag: 'tag:yaml.org,2002:int',
41
+ format: 'BIN',
42
+ test: /^[-+]?0b[0-1_]+$/,
43
+ resolve: (str, _onError, opt) => intResolve(str, 2, 2, opt),
44
+ stringify: node => intStringify(node, 2, '0b')
45
+ };
46
+ const intOct = {
47
+ identify: intIdentify,
48
+ default: true,
49
+ tag: 'tag:yaml.org,2002:int',
50
+ format: 'OCT',
51
+ test: /^[-+]?0[0-7_]+$/,
52
+ resolve: (str, _onError, opt) => intResolve(str, 1, 8, opt),
53
+ stringify: node => intStringify(node, 8, '0')
54
+ };
55
+ const int = {
56
+ identify: intIdentify,
57
+ default: true,
58
+ tag: 'tag:yaml.org,2002:int',
59
+ test: /^[-+]?[0-9][0-9_]*$/,
60
+ resolve: (str, _onError, opt) => intResolve(str, 0, 10, opt),
61
+ stringify: stringifyNumber.stringifyNumber
62
+ };
63
+ const intHex = {
64
+ identify: intIdentify,
65
+ default: true,
66
+ tag: 'tag:yaml.org,2002:int',
67
+ format: 'HEX',
68
+ test: /^[-+]?0x[0-9a-fA-F_]+$/,
69
+ resolve: (str, _onError, opt) => intResolve(str, 2, 16, opt),
70
+ stringify: node => intStringify(node, 16, '0x')
71
+ };
72
+
73
+ exports.int = int;
74
+ exports.intBin = intBin;
75
+ exports.intHex = intHex;
76
+ exports.intOct = intOct;
File without changes
File without changes
@@ -1,9 +1,10 @@
1
1
  import type { CreateNodeContext } from '../../doc/createNode.js';
2
- import type { Schema } from '../../doc/Schema.js';
2
+ import { ParsedNode } from '../../nodes/Node.js';
3
3
  import { Pair } from '../../nodes/Pair.js';
4
4
  import { YAMLMap } from '../../nodes/YAMLMap.js';
5
5
  import { YAMLSeq } from '../../nodes/YAMLSeq.js';
6
+ import type { Schema } from '../../schema/Schema.js';
6
7
  import type { CollectionTag } from '../types.js';
7
- export declare function resolvePairs(seq: YAMLSeq | YAMLMap, onError: (message: string) => void): YAMLSeq<Pair<unknown, unknown>>;
8
+ export declare function resolvePairs(seq: YAMLSeq.Parsed<ParsedNode | Pair<ParsedNode, ParsedNode | null>> | YAMLMap.Parsed, onError: (message: string) => void): YAMLSeq.Parsed<Pair<ParsedNode, ParsedNode | null>>;
8
9
  export declare function createPairs(schema: Schema, iterable: unknown, ctx: CreateNodeContext): YAMLSeq<unknown>;
9
10
  export declare const pairs: CollectionTag;
@@ -2,6 +2,7 @@
2
2
 
3
3
  var Node = require('../../nodes/Node.js');
4
4
  var Pair = require('../../nodes/Pair.js');
5
+ var Scalar = require('../../nodes/Scalar.js');
5
6
  var YAMLSeq = require('../../nodes/YAMLSeq.js');
6
7
 
7
8
  function resolvePairs(seq, onError) {
@@ -13,15 +14,17 @@ function resolvePairs(seq, onError) {
13
14
  else if (Node.isMap(item)) {
14
15
  if (item.items.length > 1)
15
16
  onError('Each pair must have its own sequence indicator');
16
- const pair = item.items[0] || new Pair.Pair(null);
17
+ const pair = item.items[0] || new Pair.Pair(new Scalar.Scalar(null));
17
18
  if (item.commentBefore)
18
- pair.commentBefore = pair.commentBefore
19
- ? `${item.commentBefore}\n${pair.commentBefore}`
19
+ pair.key.commentBefore = pair.key.commentBefore
20
+ ? `${item.commentBefore}\n${pair.key.commentBefore}`
20
21
  : item.commentBefore;
21
- if (item.comment)
22
- pair.comment = pair.comment
23
- ? `${item.comment}\n${pair.comment}`
22
+ if (item.comment) {
23
+ const cn = pair.value || pair.key;
24
+ cn.comment = cn.comment
25
+ ? `${item.comment}\n${cn.comment}`
24
26
  : item.comment;
27
+ }
25
28
  item = pair;
26
29
  }
27
30
  seq.items[i] = Node.isPair(item) ? item : new Pair.Pair(item);
@@ -0,0 +1 @@
1
+ export declare const schema: (import("../types.js").ScalarTag | import("../types.js").CollectionTag)[];
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ var map = require('../common/map.js');
4
+ var _null = require('../common/null.js');
5
+ var seq = require('../common/seq.js');
6
+ var string = require('../common/string.js');
7
+ var binary = require('./binary.js');
8
+ var bool = require('./bool.js');
9
+ var float = require('./float.js');
10
+ var int = require('./int.js');
11
+ var omap = require('./omap.js');
12
+ var pairs = require('./pairs.js');
13
+ var set = require('./set.js');
14
+ var timestamp = require('./timestamp.js');
15
+
16
+ const schema = [
17
+ map.map,
18
+ seq.seq,
19
+ string.string,
20
+ _null.nullTag,
21
+ bool.trueTag,
22
+ bool.falseTag,
23
+ int.intBin,
24
+ int.intOct,
25
+ int.int,
26
+ int.intHex,
27
+ float.floatNaN,
28
+ float.floatExp,
29
+ float.float,
30
+ binary.binary,
31
+ omap.omap,
32
+ pairs.pairs,
33
+ set.set,
34
+ timestamp.intTime,
35
+ timestamp.floatTime,
36
+ timestamp.timestamp
37
+ ];
38
+
39
+ exports.schema = schema;
@@ -1,4 +1,4 @@
1
- import type { Schema } from '../../doc/Schema.js';
1
+ import type { Schema } from '../../schema/Schema.js';
2
2
  import { Pair } from '../../nodes/Pair.js';
3
3
  import { Scalar } from '../../nodes/Scalar.js';
4
4
  import { ToJSContext } from '../../nodes/toJS.js';
File without changes
File without changes
File without changes
@@ -1,10 +1,9 @@
1
1
  import type { Document } from '../doc/Document.js';
2
- import { Node } from '../nodes/Node.js';
3
2
  import type { ToStringOptions } from '../options.js';
4
3
  export declare type StringifyContext = {
5
4
  actualString?: boolean;
6
5
  allNullValues?: boolean;
7
- anchors: Record<string, Node>;
6
+ anchors: Set<string>;
8
7
  doc: Document;
9
8
  forceBlockIndent?: boolean;
10
9
  implicitKey?: boolean;
@@ -1,10 +1,11 @@
1
1
  'use strict';
2
2
 
3
+ var anchors = require('../doc/anchors.js');
3
4
  var Node = require('../nodes/Node.js');
4
5
  var stringifyString = require('./stringifyString.js');
5
6
 
6
7
  const createStringifyContext = (doc, options) => ({
7
- anchors: Object.create(null),
8
+ anchors: new Set(),
8
9
  doc,
9
10
  indent: '',
10
11
  indentStep: typeof options.indent === 'number' ? ' '.repeat(options.indent) : ' ',
@@ -21,7 +22,8 @@ const createStringifyContext = (doc, options) => ({
21
22
  nullStr: 'null',
22
23
  simpleKeys: false,
23
24
  singleQuote: false,
24
- trueStr: 'true'
25
+ trueStr: 'true',
26
+ verifyAliasOrder: true
25
27
  }, options)
26
28
  });
27
29
  function getTagObject(tags, item) {
@@ -50,11 +52,11 @@ function getTagObject(tags, item) {
50
52
  return tagObj;
51
53
  }
52
54
  // needs to be called before value stringifier to allow for circular anchor refs
53
- function stringifyProps(node, tagObj, { anchors, doc }) {
55
+ function stringifyProps(node, tagObj, { anchors: anchors$1, doc }) {
54
56
  const props = [];
55
- const anchor = doc.anchors.getName(node);
56
- if (anchor) {
57
- anchors[anchor] = node;
57
+ const anchor = (Node.isScalar(node) || Node.isCollection(node)) && node.anchor;
58
+ if (anchor && anchors.anchorIsValid(anchor)) {
59
+ anchors$1.add(anchor);
58
60
  props.push(`&${anchor}`);
59
61
  }
60
62
  if (node.tag) {
@@ -0,0 +1,21 @@
1
+ import { Collection } from '../nodes/Collection.js';
2
+ import { StringifyContext } from './stringify.js';
3
+ declare type StringifyNode = {
4
+ comment: boolean;
5
+ str: string;
6
+ };
7
+ interface StringifyCollectionOptions {
8
+ blockItem(node: StringifyNode): string;
9
+ flowChars: {
10
+ start: '{';
11
+ end: '}';
12
+ } | {
13
+ start: '[';
14
+ end: ']';
15
+ };
16
+ itemIndent: string;
17
+ onChompKeep?: () => void;
18
+ onComment?: () => void;
19
+ }
20
+ export declare function stringifyCollection({ comment, flow, items }: Readonly<Collection>, ctx: StringifyContext, { blockItem, flowChars, itemIndent, onChompKeep, onComment }: StringifyCollectionOptions): string;
21
+ export {};
@@ -0,0 +1,124 @@
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({ comment, flow, items }, ctx, { blockItem, flowChars, itemIndent, onChompKeep, onComment }) {
9
+ const { indent, indentStep } = ctx;
10
+ const inFlow = flow || ctx.inFlow;
11
+ if (inFlow)
12
+ itemIndent += indentStep;
13
+ ctx = Object.assign({}, ctx, { indent: itemIndent, inFlow, type: null });
14
+ let singleLineOutput = true;
15
+ let chompKeep = false; // flag for the preceding node's status
16
+ const nodes = items.reduce((nodes, item, i) => {
17
+ let comment = null;
18
+ if (Node.isNode(item)) {
19
+ if (!chompKeep && item.spaceBefore)
20
+ nodes.push({ comment: true, str: '' });
21
+ let cb = item.commentBefore;
22
+ if (cb && chompKeep)
23
+ cb = cb.replace(/^\n+/, '');
24
+ if (cb) {
25
+ if (/^\n+$/.test(cb))
26
+ cb = cb.substring(1);
27
+ // This match will always succeed on a non-empty string
28
+ for (const line of cb.match(/^.*$/gm)) {
29
+ const str = line === ' ' ? '#' : line ? `#${line}` : '';
30
+ nodes.push({ comment: true, str });
31
+ }
32
+ }
33
+ if (item.comment) {
34
+ comment = item.comment;
35
+ singleLineOutput = false;
36
+ }
37
+ }
38
+ else if (Node.isPair(item)) {
39
+ const ik = Node.isNode(item.key) ? item.key : null;
40
+ if (ik) {
41
+ if (!chompKeep && ik.spaceBefore)
42
+ nodes.push({ comment: true, str: '' });
43
+ let cb = ik.commentBefore;
44
+ if (cb && chompKeep)
45
+ cb = cb.replace(/^\n+/, '');
46
+ if (cb) {
47
+ if (/^\n+$/.test(cb))
48
+ cb = cb.substring(1);
49
+ // This match will always succeed on a non-empty string
50
+ for (const line of cb.match(/^.*$/gm)) {
51
+ const str = line === ' ' ? '#' : line ? `#${line}` : '';
52
+ nodes.push({ comment: true, str });
53
+ }
54
+ }
55
+ if (ik.comment)
56
+ singleLineOutput = false;
57
+ }
58
+ if (inFlow) {
59
+ const iv = Node.isNode(item.value) ? item.value : null;
60
+ if (iv) {
61
+ if (iv.comment)
62
+ comment = iv.comment;
63
+ if (iv.comment || iv.commentBefore)
64
+ singleLineOutput = false;
65
+ }
66
+ else if (item.value == null && ik && ik.comment) {
67
+ comment = ik.comment;
68
+ }
69
+ }
70
+ }
71
+ chompKeep = false;
72
+ let str = stringify.stringify(item, ctx, () => (comment = null), () => (chompKeep = true));
73
+ if (inFlow && i < items.length - 1)
74
+ str += ',';
75
+ str = stringifyComment.addComment(str, itemIndent, comment);
76
+ if (chompKeep && (comment || inFlow))
77
+ chompKeep = false;
78
+ nodes.push({ comment: false, str });
79
+ return nodes;
80
+ }, []);
81
+ let str;
82
+ if (nodes.length === 0) {
83
+ str = flowChars.start + flowChars.end;
84
+ }
85
+ else if (inFlow) {
86
+ const { start, end } = flowChars;
87
+ const strings = nodes.map(n => n.str);
88
+ let singleLineLength = 2;
89
+ for (const node of nodes) {
90
+ if (node.comment || node.str.includes('\n')) {
91
+ singleLineOutput = false;
92
+ break;
93
+ }
94
+ singleLineLength += node.str.length + 2;
95
+ }
96
+ if (!singleLineOutput ||
97
+ singleLineLength > Collection.Collection.maxFlowStringSingleLineLength) {
98
+ str = start;
99
+ for (const s of strings) {
100
+ str += s ? `\n${indentStep}${indent}${s}` : '\n';
101
+ }
102
+ str += `\n${indent}${end}`;
103
+ }
104
+ else {
105
+ str = `${start} ${strings.join(' ')} ${end}`;
106
+ }
107
+ }
108
+ else {
109
+ const strings = nodes.map(blockItem);
110
+ str = strings.shift() || '';
111
+ for (const s of strings)
112
+ str += s ? `\n${indent}${s}` : '\n';
113
+ }
114
+ if (comment) {
115
+ str += '\n' + stringifyComment.stringifyComment(comment, indent);
116
+ if (onComment)
117
+ onComment();
118
+ }
119
+ else if (chompKeep && onChompKeep)
120
+ onChompKeep();
121
+ return str;
122
+ }
123
+
124
+ exports.stringifyCollection = stringifyCollection;
@@ -0,0 +1,2 @@
1
+ export declare const stringifyComment: (comment: string, indent: string) => string;
2
+ export declare function addComment(str: string, indent: string, comment?: string | null): string;
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ const stringifyComment = (comment, indent) => /^\n+$/.test(comment)
4
+ ? comment.substring(1)
5
+ : comment.replace(/^(?!$)(?: $)?/gm, `${indent}#`);
6
+ function addComment(str, indent, comment) {
7
+ return !comment
8
+ ? str
9
+ : comment.includes('\n')
10
+ ? `${str}\n` + stringifyComment(comment, indent)
11
+ : str.endsWith(' ')
12
+ ? `${str}#${comment}`
13
+ : `${str} #${comment}`;
14
+ }
15
+
16
+ exports.addComment = addComment;
17
+ 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,66 @@
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) {
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
+ if (doc.commentBefore) {
22
+ if (lines.length !== 1)
23
+ lines.unshift('');
24
+ lines.unshift(stringifyComment.stringifyComment(doc.commentBefore, ''));
25
+ }
26
+ const ctx = stringify.createStringifyContext(doc, options);
27
+ let chompKeep = false;
28
+ let contentComment = null;
29
+ if (doc.contents) {
30
+ if (Node.isNode(doc.contents)) {
31
+ if (doc.contents.spaceBefore && hasDirectives)
32
+ lines.push('');
33
+ if (doc.contents.commentBefore)
34
+ lines.push(stringifyComment.stringifyComment(doc.contents.commentBefore, ''));
35
+ // top-level block scalars need to be indented if followed by a comment
36
+ ctx.forceBlockIndent = !!doc.comment;
37
+ contentComment = doc.contents.comment;
38
+ }
39
+ const onChompKeep = contentComment ? undefined : () => (chompKeep = true);
40
+ let body = stringify.stringify(doc.contents, ctx, () => (contentComment = null), onChompKeep);
41
+ if (contentComment)
42
+ body = stringifyComment.addComment(body, '', contentComment);
43
+ if ((body[0] === '|' || body[0] === '>') &&
44
+ lines[lines.length - 1] === '---') {
45
+ // Top-level block scalars with a preceding doc marker ought to use the
46
+ // same line for their header.
47
+ lines[lines.length - 1] = `--- ${body}`;
48
+ }
49
+ else
50
+ lines.push(body);
51
+ }
52
+ else {
53
+ lines.push(stringify.stringify(doc.contents, ctx));
54
+ }
55
+ let dc = doc.comment;
56
+ if (dc && chompKeep)
57
+ dc = dc.replace(/^\n+/, '');
58
+ if (dc) {
59
+ if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')
60
+ lines.push('');
61
+ lines.push(stringifyComment.stringifyComment(dc, ''));
62
+ }
63
+ return lines.join('\n') + '\n';
64
+ }
65
+
66
+ exports.stringifyDocument = stringifyDocument;
@@ -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,113 @@
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: { 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
+ if (keyCommentDone)
49
+ keyComment = null;
50
+ if (chompKeep && !keyComment && onChompKeep)
51
+ onChompKeep();
52
+ return stringifyComment.addComment(`? ${str}`, ctx.indent, keyComment);
53
+ }
54
+ if (keyCommentDone)
55
+ keyComment = null;
56
+ str = explicitKey
57
+ ? `? ${stringifyComment.addComment(str, ctx.indent, keyComment)}\n${indent}:`
58
+ : stringifyComment.addComment(`${str}:`, ctx.indent, keyComment);
59
+ let vcb = '';
60
+ let valueComment = null;
61
+ if (Node.isNode(value)) {
62
+ if (value.spaceBefore)
63
+ vcb = '\n';
64
+ if (value.commentBefore)
65
+ vcb += `\n${stringifyComment.stringifyComment(value.commentBefore, ctx.indent)}`;
66
+ valueComment = value.comment;
67
+ }
68
+ else if (value && typeof value === 'object') {
69
+ value = doc.createNode(value);
70
+ }
71
+ ctx.implicitKey = false;
72
+ if (!explicitKey && !keyComment && Node.isScalar(value))
73
+ ctx.indentAtStart = str.length + 1;
74
+ chompKeep = false;
75
+ if (!indentSeq &&
76
+ indentStep.length >= 2 &&
77
+ !ctx.inFlow &&
78
+ !explicitKey &&
79
+ Node.isSeq(value) &&
80
+ !value.flow &&
81
+ !value.tag &&
82
+ !value.anchor) {
83
+ // If indentSeq === false, consider '- ' as part of indentation where possible
84
+ ctx.indent = ctx.indent.substr(2);
85
+ }
86
+ let valueCommentDone = false;
87
+ const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));
88
+ let ws = ' ';
89
+ if (vcb || keyComment) {
90
+ ws = `${vcb}\n${ctx.indent}`;
91
+ }
92
+ else if (!explicitKey && Node.isCollection(value)) {
93
+ const flow = valueStr[0] === '[' || valueStr[0] === '{';
94
+ if (!flow || valueStr.includes('\n'))
95
+ ws = `\n${ctx.indent}`;
96
+ }
97
+ else if (valueStr[0] === '\n')
98
+ ws = '';
99
+ if (ctx.inFlow) {
100
+ if (valueCommentDone && onComment)
101
+ onComment();
102
+ return str + ws + valueStr;
103
+ }
104
+ else {
105
+ if (valueCommentDone)
106
+ valueComment = null;
107
+ if (chompKeep && !valueComment && onChompKeep)
108
+ onChompKeep();
109
+ return stringifyComment.addComment(str + ws + valueStr, ctx.indent, valueComment);
110
+ }
111
+ }
112
+
113
+ exports.stringifyPair = stringifyPair;