yaml 2.0.0-4 → 2.0.0-5

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 (210) 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 +20 -17
  5. package/browser/dist/compose/compose-scalar.js +20 -23
  6. package/browser/dist/compose/composer.js +105 -76
  7. package/browser/dist/compose/resolve-block-map.js +38 -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 +6 -7
  11. package/browser/dist/compose/resolve-flow-collection.js +153 -199
  12. package/browser/dist/compose/resolve-flow-scalar.js +49 -25
  13. package/browser/dist/compose/resolve-props.js +47 -35
  14. package/browser/dist/compose/util-contains-newline.js +15 -12
  15. package/browser/dist/doc/Document.js +50 -99
  16. package/browser/dist/doc/anchors.js +72 -0
  17. package/browser/dist/doc/createNode.js +27 -17
  18. package/browser/dist/errors.js +16 -12
  19. package/browser/dist/index.js +3 -3
  20. package/browser/dist/nodes/Alias.js +51 -28
  21. package/browser/dist/nodes/Collection.js +5 -83
  22. package/browser/dist/nodes/Node.js +2 -1
  23. package/browser/dist/nodes/Pair.js +9 -232
  24. package/browser/dist/nodes/YAMLMap.js +8 -4
  25. package/browser/dist/nodes/YAMLSeq.js +7 -4
  26. package/browser/dist/nodes/addPairToJSMap.js +103 -0
  27. package/browser/dist/nodes/toJS.js +12 -10
  28. package/browser/dist/options.js +0 -2
  29. package/browser/dist/parse/cst-scalar.js +219 -0
  30. package/browser/dist/parse/cst-stringify.js +61 -0
  31. package/browser/dist/parse/cst-visit.js +97 -0
  32. package/{dist/parse/tokens.js → browser/dist/parse/cst.js} +12 -7
  33. package/browser/dist/parse/lexer.js +99 -105
  34. package/browser/dist/parse/parser.js +219 -144
  35. package/browser/dist/public-api.js +11 -14
  36. package/browser/dist/schema/Schema.js +23 -0
  37. package/browser/dist/{tags/failsafe → schema/common}/map.js +0 -0
  38. package/browser/dist/schema/common/null.js +13 -0
  39. package/browser/dist/{tags/failsafe → schema/common}/seq.js +1 -1
  40. package/browser/dist/{tags/failsafe → schema/common}/string.js +0 -0
  41. package/browser/dist/schema/core/bool.js +19 -0
  42. package/browser/dist/schema/core/float.js +40 -0
  43. package/browser/dist/schema/core/int.js +38 -0
  44. package/browser/dist/schema/core/schema.js +23 -0
  45. package/browser/dist/{tags/json.js → schema/json/schema.js} +5 -6
  46. package/browser/dist/schema/tags.js +79 -0
  47. package/browser/dist/{tags → schema}/yaml-1.1/binary.js +0 -0
  48. package/browser/dist/schema/yaml-1.1/bool.js +26 -0
  49. package/browser/dist/schema/yaml-1.1/float.js +43 -0
  50. package/browser/dist/schema/yaml-1.1/int.js +71 -0
  51. package/browser/dist/{tags → schema}/yaml-1.1/omap.js +0 -0
  52. package/browser/dist/{tags → schema}/yaml-1.1/pairs.js +9 -6
  53. package/browser/dist/schema/yaml-1.1/schema.js +37 -0
  54. package/browser/dist/{tags → schema}/yaml-1.1/set.js +0 -0
  55. package/browser/dist/{tags → schema}/yaml-1.1/timestamp.js +0 -0
  56. package/browser/dist/stringify/addComment.js +1 -7
  57. package/browser/dist/stringify/stringify.js +8 -6
  58. package/browser/dist/stringify/stringifyCollection.js +108 -0
  59. package/browser/dist/stringify/stringifyDocument.js +61 -0
  60. package/browser/dist/stringify/stringifyPair.js +113 -0
  61. package/browser/dist/stringify/stringifyString.js +53 -52
  62. package/browser/dist/visit.js +20 -1
  63. package/dist/compose/compose-collection.d.ts +4 -4
  64. package/dist/compose/compose-collection.js +12 -9
  65. package/dist/compose/compose-doc.d.ts +4 -3
  66. package/dist/compose/compose-doc.js +23 -6
  67. package/dist/compose/compose-node.d.ts +15 -7
  68. package/dist/compose/compose-node.js +20 -17
  69. package/dist/compose/compose-scalar.d.ts +4 -3
  70. package/dist/compose/compose-scalar.js +19 -22
  71. package/dist/compose/composer.d.ts +28 -23
  72. package/dist/compose/composer.js +106 -77
  73. package/dist/compose/resolve-block-map.d.ts +4 -4
  74. package/dist/compose/resolve-block-map.js +38 -29
  75. package/dist/compose/resolve-block-scalar.d.ts +5 -3
  76. package/dist/compose/resolve-block-scalar.js +14 -17
  77. package/dist/compose/resolve-block-seq.d.ts +4 -4
  78. package/dist/compose/resolve-block-seq.js +21 -17
  79. package/dist/compose/resolve-end.d.ts +3 -2
  80. package/dist/compose/resolve-end.js +6 -7
  81. package/dist/compose/resolve-flow-collection.d.ts +4 -5
  82. package/dist/compose/resolve-flow-collection.js +152 -198
  83. package/dist/compose/resolve-flow-scalar.d.ts +5 -3
  84. package/dist/compose/resolve-flow-scalar.js +49 -25
  85. package/dist/compose/resolve-props.d.ts +17 -10
  86. package/dist/compose/resolve-props.js +47 -35
  87. package/dist/compose/util-contains-newline.d.ts +1 -1
  88. package/dist/compose/util-contains-newline.js +15 -12
  89. package/dist/compose/util-empty-scalar-position.d.ts +1 -1
  90. package/dist/doc/Document.d.ts +27 -15
  91. package/dist/doc/Document.js +48 -97
  92. package/dist/doc/anchors.d.ts +24 -0
  93. package/dist/doc/anchors.js +77 -0
  94. package/dist/doc/createNode.d.ts +8 -10
  95. package/dist/doc/createNode.js +26 -16
  96. package/dist/errors.d.ts +11 -8
  97. package/dist/errors.js +16 -12
  98. package/dist/index.d.ts +5 -3
  99. package/dist/index.js +3 -3
  100. package/dist/nodes/Alias.d.ts +19 -9
  101. package/dist/nodes/Alias.js +51 -28
  102. package/dist/nodes/Collection.d.ts +3 -17
  103. package/dist/nodes/Collection.js +4 -82
  104. package/dist/nodes/Node.d.ts +6 -4
  105. package/dist/nodes/Node.js +2 -0
  106. package/dist/nodes/Pair.d.ts +6 -11
  107. package/dist/nodes/Pair.js +8 -231
  108. package/dist/nodes/Scalar.d.ts +6 -3
  109. package/dist/nodes/YAMLMap.d.ts +3 -3
  110. package/dist/nodes/YAMLMap.js +8 -4
  111. package/dist/nodes/YAMLSeq.d.ts +3 -3
  112. package/dist/nodes/YAMLSeq.js +7 -4
  113. package/dist/nodes/addPairToJSMap.d.ts +3 -0
  114. package/dist/nodes/addPairToJSMap.js +105 -0
  115. package/dist/nodes/toJS.d.ts +4 -5
  116. package/dist/nodes/toJS.js +12 -10
  117. package/dist/options.d.ts +20 -26
  118. package/dist/options.js +0 -2
  119. package/dist/parse/cst-scalar.d.ts +58 -0
  120. package/dist/parse/cst-scalar.js +223 -0
  121. package/dist/parse/cst-stringify.d.ts +8 -0
  122. package/dist/parse/cst-stringify.js +63 -0
  123. package/dist/parse/cst-visit.d.ts +39 -0
  124. package/dist/parse/cst-visit.js +99 -0
  125. package/dist/parse/{tokens.d.ts → cst.d.ts} +23 -7
  126. package/{browser/dist/parse/tokens.js → dist/parse/cst.js} +27 -1
  127. package/dist/parse/lexer.d.ts +4 -13
  128. package/dist/parse/lexer.js +100 -106
  129. package/dist/parse/parser.d.ts +30 -24
  130. package/dist/parse/parser.js +221 -146
  131. package/dist/public-api.d.ts +7 -7
  132. package/dist/public-api.js +11 -14
  133. package/dist/{doc → schema}/Schema.d.ts +5 -3
  134. package/dist/schema/Schema.js +25 -0
  135. package/dist/{tags/failsafe → schema/common}/map.d.ts +0 -0
  136. package/dist/{tags/failsafe → schema/common}/map.js +0 -0
  137. package/dist/schema/common/null.d.ts +4 -0
  138. package/dist/schema/common/null.js +15 -0
  139. package/dist/{tags/failsafe → schema/common}/seq.d.ts +0 -0
  140. package/dist/{tags/failsafe → schema/common}/seq.js +1 -1
  141. package/dist/{tags/failsafe → schema/common}/string.d.ts +0 -0
  142. package/dist/{tags/failsafe → schema/common}/string.js +0 -0
  143. package/dist/schema/core/bool.d.ts +4 -0
  144. package/dist/schema/core/bool.js +21 -0
  145. package/dist/schema/core/float.d.ts +4 -0
  146. package/dist/schema/core/float.js +44 -0
  147. package/dist/schema/core/int.d.ts +4 -0
  148. package/dist/schema/core/int.js +42 -0
  149. package/dist/schema/core/schema.d.ts +1 -0
  150. package/dist/schema/core/schema.js +25 -0
  151. package/dist/schema/json/schema.d.ts +2 -0
  152. package/dist/{tags/json.js → schema/json/schema.js} +5 -6
  153. package/dist/schema/tags.d.ts +41 -0
  154. package/dist/schema/tags.js +82 -0
  155. package/dist/{tags → schema}/types.d.ts +3 -7
  156. package/dist/{tags → schema}/yaml-1.1/binary.d.ts +0 -0
  157. package/dist/{tags → schema}/yaml-1.1/binary.js +0 -0
  158. package/dist/schema/yaml-1.1/bool.d.ts +7 -0
  159. package/dist/schema/yaml-1.1/bool.js +29 -0
  160. package/dist/schema/yaml-1.1/float.d.ts +4 -0
  161. package/dist/schema/yaml-1.1/float.js +47 -0
  162. package/dist/schema/yaml-1.1/int.d.ts +5 -0
  163. package/dist/schema/yaml-1.1/int.js +76 -0
  164. package/dist/{tags → schema}/yaml-1.1/omap.d.ts +0 -0
  165. package/dist/{tags → schema}/yaml-1.1/omap.js +0 -0
  166. package/dist/{tags → schema}/yaml-1.1/pairs.d.ts +3 -2
  167. package/dist/{tags → schema}/yaml-1.1/pairs.js +9 -6
  168. package/dist/schema/yaml-1.1/schema.d.ts +1 -0
  169. package/dist/schema/yaml-1.1/schema.js +39 -0
  170. package/dist/{tags → schema}/yaml-1.1/set.d.ts +1 -1
  171. package/dist/{tags → schema}/yaml-1.1/set.js +0 -0
  172. package/dist/{tags → schema}/yaml-1.1/timestamp.d.ts +0 -0
  173. package/dist/{tags → schema}/yaml-1.1/timestamp.js +0 -0
  174. package/dist/stringify/addComment.js +0 -7
  175. package/dist/stringify/stringify.d.ts +1 -2
  176. package/dist/stringify/stringify.js +8 -6
  177. package/dist/stringify/stringifyCollection.d.ts +21 -0
  178. package/dist/stringify/stringifyCollection.js +110 -0
  179. package/dist/stringify/stringifyDocument.d.ts +3 -0
  180. package/dist/stringify/stringifyDocument.js +63 -0
  181. package/dist/stringify/stringifyPair.d.ts +3 -0
  182. package/dist/stringify/stringifyPair.js +115 -0
  183. package/dist/stringify/stringifyString.js +53 -52
  184. package/dist/test-events.d.ts +1 -2
  185. package/dist/test-events.js +25 -12
  186. package/dist/util.d.ts +1 -1
  187. package/dist/visit.d.ts +10 -1
  188. package/dist/visit.js +20 -1
  189. package/package.json +4 -3
  190. package/browser/dist/doc/Anchors.js +0 -102
  191. package/browser/dist/doc/Schema.js +0 -27
  192. package/browser/dist/doc/getSchemaTags.js +0 -30
  193. package/browser/dist/tags/core.js +0 -109
  194. package/browser/dist/tags/failsafe/index.js +0 -7
  195. package/browser/dist/tags/index.js +0 -34
  196. package/browser/dist/tags/yaml-1.1/index.js +0 -152
  197. package/dist/doc/Anchors.d.ts +0 -36
  198. package/dist/doc/Anchors.js +0 -104
  199. package/dist/doc/Schema.js +0 -29
  200. package/dist/doc/getSchemaTags.d.ts +0 -3
  201. package/dist/doc/getSchemaTags.js +0 -32
  202. package/dist/tags/core.d.ts +0 -14
  203. package/dist/tags/core.js +0 -119
  204. package/dist/tags/failsafe/index.d.ts +0 -1
  205. package/dist/tags/failsafe/index.js +0 -9
  206. package/dist/tags/index.d.ts +0 -31
  207. package/dist/tags/index.js +0 -37
  208. package/dist/tags/json.d.ts +0 -2
  209. package/dist/tags/yaml-1.1/index.d.ts +0 -2
  210. package/dist/tags/yaml-1.1/index.js +0 -154
@@ -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,11 +1,5 @@
1
1
  'use strict';
2
2
 
3
- function addCommentBefore(str, indent, comment) {
4
- if (!comment)
5
- return str;
6
- const cc = comment.replace(/[\s\S]^/gm, `$&${indent}#`);
7
- return `#${cc}\n${indent}${str}`;
8
- }
9
3
  function addComment(str, indent, comment) {
10
4
  return !comment
11
5
  ? str
@@ -17,4 +11,3 @@ function addComment(str, indent, comment) {
17
11
  }
18
12
 
19
13
  exports.addComment = addComment;
20
- exports.addCommentBefore = addCommentBefore;
@@ -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/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,110 @@
1
+ 'use strict';
2
+
3
+ var Collection = require('../nodes/Collection.js');
4
+ var addComment = require('./addComment.js');
5
+ var stringify = require('./stringify.js');
6
+ var Node = require('../nodes/Node.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
+ if (item.commentBefore) {
22
+ // This match will always succeed on a non-empty string
23
+ for (const line of item.commentBefore.match(/^.*$/gm))
24
+ nodes.push({ comment: true, str: `#${line}` });
25
+ }
26
+ if (item.comment) {
27
+ comment = item.comment;
28
+ singleLineOutput = false;
29
+ }
30
+ }
31
+ else if (Node.isPair(item)) {
32
+ const ik = Node.isNode(item.key) ? item.key : null;
33
+ if (ik) {
34
+ if (!chompKeep && ik.spaceBefore)
35
+ nodes.push({ comment: true, str: '' });
36
+ if (ik.commentBefore) {
37
+ // This match will always succeed on a non-empty string
38
+ for (const line of ik.commentBefore.match(/^.*$/gm))
39
+ nodes.push({ comment: true, str: `#${line}` });
40
+ }
41
+ if (ik.comment)
42
+ singleLineOutput = false;
43
+ }
44
+ if (inFlow) {
45
+ const iv = Node.isNode(item.value) ? item.value : null;
46
+ if (iv) {
47
+ if (iv.comment)
48
+ comment = iv.comment;
49
+ if (iv.comment || iv.commentBefore)
50
+ singleLineOutput = false;
51
+ }
52
+ else if (item.value == null && ik && ik.comment) {
53
+ comment = ik.comment;
54
+ }
55
+ }
56
+ }
57
+ chompKeep = false;
58
+ let str = stringify.stringify(item, ctx, () => (comment = null), () => (chompKeep = true));
59
+ if (inFlow && i < items.length - 1)
60
+ str += ',';
61
+ str = addComment.addComment(str, itemIndent, comment);
62
+ if (chompKeep && (comment || inFlow))
63
+ chompKeep = false;
64
+ nodes.push({ comment: false, str });
65
+ return nodes;
66
+ }, []);
67
+ let str;
68
+ if (nodes.length === 0) {
69
+ str = flowChars.start + flowChars.end;
70
+ }
71
+ else if (inFlow) {
72
+ const { start, end } = flowChars;
73
+ const strings = nodes.map(n => n.str);
74
+ let singleLineLength = 2;
75
+ for (const node of nodes) {
76
+ if (node.comment || node.str.includes('\n')) {
77
+ singleLineOutput = false;
78
+ break;
79
+ }
80
+ singleLineLength += node.str.length + 2;
81
+ }
82
+ if (!singleLineOutput ||
83
+ singleLineLength > Collection.Collection.maxFlowStringSingleLineLength) {
84
+ str = start;
85
+ for (const s of strings) {
86
+ str += s ? `\n${indentStep}${indent}${s}` : '\n';
87
+ }
88
+ str += `\n${indent}${end}`;
89
+ }
90
+ else {
91
+ str = `${start} ${strings.join(' ')} ${end}`;
92
+ }
93
+ }
94
+ else {
95
+ const strings = nodes.map(blockItem);
96
+ str = strings.shift() || '';
97
+ for (const s of strings)
98
+ str += s ? `\n${indent}${s}` : '\n';
99
+ }
100
+ if (comment) {
101
+ str += '\n' + comment.replace(/^/gm, `${indent}#`);
102
+ if (onComment)
103
+ onComment();
104
+ }
105
+ else if (chompKeep && onChompKeep)
106
+ onChompKeep();
107
+ return str;
108
+ }
109
+
110
+ exports.stringifyCollection = stringifyCollection;
@@ -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,63 @@
1
+ 'use strict';
2
+
3
+ var Node = require('../nodes/Node.js');
4
+ var addComment = require('./addComment.js');
5
+ var stringify = require('./stringify.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(doc.commentBefore.replace(/^/gm, '#'));
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(doc.contents.commentBefore.replace(/^/gm, '#'));
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 = addComment.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
+ if (doc.comment) {
56
+ if ((!chompKeep || contentComment) && lines[lines.length - 1] !== '')
57
+ lines.push('');
58
+ lines.push(doc.comment.replace(/^/gm, '#'));
59
+ }
60
+ return lines.join('\n') + '\n';
61
+ }
62
+
63
+ 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,115 @@
1
+ 'use strict';
2
+
3
+ var Node = require('../nodes/Node.js');
4
+ var Scalar = require('../nodes/Scalar.js');
5
+ var addComment = require('./addComment.js');
6
+ var stringify = require('./stringify.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 addComment.addComment(`? ${str}`, ctx.indent, keyComment);
53
+ }
54
+ if (keyCommentDone)
55
+ keyComment = null;
56
+ str = explicitKey
57
+ ? `? ${addComment.addComment(str, ctx.indent, keyComment)}\n${indent}:`
58
+ : addComment.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
+ const cs = value.commentBefore.replace(/^/gm, `${ctx.indent}#`);
66
+ vcb += `\n${cs}`;
67
+ }
68
+ valueComment = value.comment;
69
+ }
70
+ else if (value && typeof value === 'object') {
71
+ value = doc.createNode(value);
72
+ }
73
+ ctx.implicitKey = false;
74
+ if (!explicitKey && !keyComment && Node.isScalar(value))
75
+ ctx.indentAtStart = str.length + 1;
76
+ chompKeep = false;
77
+ if (!indentSeq &&
78
+ indentStep.length >= 2 &&
79
+ !ctx.inFlow &&
80
+ !explicitKey &&
81
+ Node.isSeq(value) &&
82
+ !value.flow &&
83
+ !value.tag &&
84
+ !value.anchor) {
85
+ // If indentSeq === false, consider '- ' as part of indentation where possible
86
+ ctx.indent = ctx.indent.substr(2);
87
+ }
88
+ let valueCommentDone = false;
89
+ const valueStr = stringify.stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));
90
+ let ws = ' ';
91
+ if (vcb || keyComment) {
92
+ ws = `${vcb}\n${ctx.indent}`;
93
+ }
94
+ else if (!explicitKey && Node.isCollection(value)) {
95
+ const flow = valueStr[0] === '[' || valueStr[0] === '{';
96
+ if (!flow || valueStr.includes('\n'))
97
+ ws = `\n${ctx.indent}`;
98
+ }
99
+ else if (valueStr[0] === '\n')
100
+ ws = '';
101
+ if (ctx.inFlow) {
102
+ if (valueCommentDone && onComment)
103
+ onComment();
104
+ return str + ws + valueStr;
105
+ }
106
+ else {
107
+ if (valueCommentDone)
108
+ valueComment = null;
109
+ if (chompKeep && !valueComment && onChompKeep)
110
+ onChompKeep();
111
+ return addComment.addComment(str + ws + valueStr, ctx.indent, valueComment);
112
+ }
113
+ }
114
+
115
+ exports.stringifyPair = stringifyPair;
@@ -1,7 +1,6 @@
1
1
  'use strict';
2
2
 
3
3
  var Scalar = require('../nodes/Scalar.js');
4
- var addComment = require('./addComment.js');
5
4
  var foldFlowLines = require('./foldFlowLines.js');
6
5
 
7
6
  const getFoldOptions = (ctx) => ({
@@ -144,70 +143,80 @@ function blockString({ comment, type, value }, ctx, onComment, onChompKeep) {
144
143
  }
145
144
  const indent = ctx.indent ||
146
145
  (ctx.forceBlockIndent || containsDocumentMarker(value) ? ' ' : '');
147
- const indentSize = indent ? '2' : '1'; // root is at -1
148
146
  const literal = type === Scalar.Scalar.BLOCK_FOLDED
149
147
  ? false
150
148
  : type === Scalar.Scalar.BLOCK_LITERAL
151
149
  ? true
152
150
  : !lineLengthOverLimit(value, ctx.options.lineWidth, indent.length);
153
- let header = literal ? '|' : '>';
154
151
  if (!value)
155
- return header + '\n';
156
- let wsStart = '';
157
- let wsEnd = '';
158
- value = value
159
- .replace(/[\n\t ]*$/, ws => {
160
- const n = ws.indexOf('\n');
161
- if (n === -1) {
162
- header += '-'; // strip
163
- }
164
- else if (value === ws || n !== ws.length - 1) {
165
- header += '+'; // keep
166
- if (onChompKeep)
167
- onChompKeep();
168
- }
169
- wsEnd = ws.replace(/\n$/, '');
170
- return '';
171
- })
172
- .replace(/^[\n ]*/, ws => {
173
- if (ws.indexOf(' ') !== -1)
174
- header += indentSize;
175
- const m = ws.match(/ +$/);
176
- if (m) {
177
- wsStart = ws.slice(0, -m[0].length);
178
- return m[0];
179
- }
180
- else {
181
- wsStart = ws;
182
- return '';
183
- }
184
- });
185
- if (wsEnd)
186
- wsEnd = wsEnd.replace(/\n+(?!\n|$)/g, `$&${indent}`);
187
- if (wsStart)
188
- wsStart = wsStart.replace(/\n+/g, `$&${indent}`);
152
+ return literal ? '|\n' : '>\n';
153
+ // determine chomping from whitespace at value end
154
+ let chomp;
155
+ let endStart;
156
+ for (endStart = value.length; endStart > 0; --endStart) {
157
+ const ch = value[endStart - 1];
158
+ if (ch !== '\n' && ch !== '\t' && ch !== ' ')
159
+ break;
160
+ }
161
+ let end = value.substring(endStart);
162
+ const endNlPos = end.indexOf('\n');
163
+ if (endNlPos === -1) {
164
+ chomp = '-'; // strip
165
+ }
166
+ else if (value === end || endNlPos !== end.length - 1) {
167
+ chomp = '+'; // keep
168
+ if (onChompKeep)
169
+ onChompKeep();
170
+ }
171
+ else {
172
+ chomp = ''; // clip
173
+ }
174
+ if (end) {
175
+ value = value.slice(0, -end.length);
176
+ if (end[end.length - 1] === '\n')
177
+ end = end.slice(0, -1);
178
+ end = end.replace(/\n+(?!\n|$)/g, `$&${indent}`);
179
+ }
180
+ // determine indent indicator from whitespace at value start
181
+ let startWithSpace = false;
182
+ let startEnd;
183
+ let startNlPos = -1;
184
+ for (startEnd = 0; startEnd < value.length; ++startEnd) {
185
+ const ch = value[startEnd];
186
+ if (ch === ' ')
187
+ startWithSpace = true;
188
+ else if (ch === '\n')
189
+ startNlPos = startEnd;
190
+ else
191
+ break;
192
+ }
193
+ let start = value.substring(0, startNlPos < startEnd ? startNlPos + 1 : startEnd);
194
+ if (start) {
195
+ value = value.substring(start.length);
196
+ start = start.replace(/\n+/g, `$&${indent}`);
197
+ }
198
+ const indentSize = indent ? '2' : '1'; // root is at -1
199
+ let header = (literal ? '|' : '>') + (startWithSpace ? indentSize : '') + chomp;
189
200
  if (comment) {
190
201
  header += ' #' + comment.replace(/ ?[\r\n]+/g, ' ');
191
202
  if (onComment)
192
203
  onComment();
193
204
  }
194
- if (!value)
195
- return `${header}${indentSize}\n${indent}${wsEnd}`;
196
205
  if (literal) {
197
206
  value = value.replace(/\n+/g, `$&${indent}`);
198
- return `${header}\n${indent}${wsStart}${value}${wsEnd}`;
207
+ return `${header}\n${indent}${start}${value}${end}`;
199
208
  }
200
209
  value = value
201
210
  .replace(/\n+/g, '\n$&')
202
211
  .replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g, '$1$2') // more-indented lines aren't folded
203
- // ^ ind.line ^ empty ^ capture next empty lines only at end of indent
212
+ // ^ more-ind. ^ empty ^ capture next empty lines only at end of indent
204
213
  .replace(/\n+/g, `$&${indent}`);
205
- const body = foldFlowLines.foldFlowLines(`${wsStart}${value}${wsEnd}`, indent, foldFlowLines.FOLD_BLOCK, getFoldOptions(ctx));
214
+ const body = foldFlowLines.foldFlowLines(`${start}${value}${end}`, indent, foldFlowLines.FOLD_BLOCK, getFoldOptions(ctx));
206
215
  return `${header}\n${indent}${body}`;
207
216
  }
208
217
  function plainString(item, ctx, onComment, onChompKeep) {
209
218
  var _a;
210
- const { comment, type, value } = item;
219
+ const { type, value } = item;
211
220
  const { actualString, implicitKey, indent, inFlow } = ctx;
212
221
  if ((implicitKey && /[\n[\]{},]/.test(value)) ||
213
222
  (inFlow && /[[\]{},]/.test(value))) {
@@ -263,17 +272,9 @@ function plainString(item, ctx, onComment, onChompKeep) {
263
272
  return doubleQuotedString(value, ctx);
264
273
  }
265
274
  }
266
- const body = implicitKey
275
+ return implicitKey
267
276
  ? str
268
277
  : foldFlowLines.foldFlowLines(str, indent, foldFlowLines.FOLD_FLOW, getFoldOptions(ctx));
269
- if (comment &&
270
- !inFlow &&
271
- (body.indexOf('\n') !== -1 || comment.indexOf('\n') !== -1)) {
272
- if (onComment)
273
- onComment();
274
- return addComment.addCommentBefore(body, indent, comment);
275
- }
276
- return body;
277
278
  }
278
279
  function stringifyString(item, ctx, onComment, onChompKeep) {
279
280
  const { implicitKey, inFlow } = ctx;
@@ -1,5 +1,4 @@
1
- import type { Options } from './options.js';
2
- export declare function testEvents(src: string, options?: Options): {
1
+ export declare function testEvents(src: string): {
3
2
  events: string[];
4
3
  error: any;
5
4
  };