projen 0.54.56 → 0.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/.jsii +3 -3
  2. package/changelog.md +5 -3
  3. package/lib/awscdk/auto-discover.js +4 -4
  4. package/lib/awscdk/awscdk-app-java.js +1 -1
  5. package/lib/awscdk/awscdk-app-py.js +1 -1
  6. package/lib/awscdk/awscdk-app-ts.js +1 -1
  7. package/lib/awscdk/awscdk-construct.js +2 -2
  8. package/lib/awscdk/awscdk-deps-java.js +1 -1
  9. package/lib/awscdk/awscdk-deps-js.js +1 -1
  10. package/lib/awscdk/awscdk-deps.js +1 -1
  11. package/lib/awscdk/cdk-config.js +1 -1
  12. package/lib/awscdk/cdk-tasks.js +1 -1
  13. package/lib/awscdk/integration-test.js +1 -1
  14. package/lib/awscdk/lambda-extension.js +1 -1
  15. package/lib/awscdk/lambda-function.js +2 -2
  16. package/lib/build/build-workflow.js +1 -1
  17. package/lib/cdk/auto-discover-base.js +2 -2
  18. package/lib/cdk/construct-lib.js +1 -1
  19. package/lib/cdk/integration-test-base.js +1 -1
  20. package/lib/cdk/jsii-docgen.js +1 -1
  21. package/lib/cdk/jsii-project.js +1 -1
  22. package/lib/cdk8s/auto-discover.js +2 -2
  23. package/lib/cdk8s/cdk8s-app-ts.js +1 -1
  24. package/lib/cdk8s/cdk8s-construct.js +1 -1
  25. package/lib/cdk8s/integration-test.js +1 -1
  26. package/lib/cdktf/cdktf-construct.js +1 -1
  27. package/lib/component.js +1 -1
  28. package/lib/dependencies.js +1 -1
  29. package/lib/dev-env.js +1 -1
  30. package/lib/docker-compose.js +2 -2
  31. package/lib/file.js +1 -1
  32. package/lib/gitattributes.js +1 -1
  33. package/lib/github/auto-approve.js +1 -1
  34. package/lib/github/auto-merge.js +1 -1
  35. package/lib/github/dependabot.js +1 -1
  36. package/lib/github/github-credentials.js +1 -1
  37. package/lib/github/github-project.js +1 -1
  38. package/lib/github/github.js +1 -1
  39. package/lib/github/mergify.js +1 -1
  40. package/lib/github/pr-template.js +1 -1
  41. package/lib/github/pull-request-lint.js +1 -1
  42. package/lib/github/stale.js +1 -1
  43. package/lib/github/task-workflow.js +1 -1
  44. package/lib/github/workflows.js +1 -1
  45. package/lib/gitlab/configuration.js +1 -1
  46. package/lib/gitlab/gitlab-configuration.js +1 -1
  47. package/lib/gitlab/nested-configuration.js +1 -1
  48. package/lib/gitpod.js +1 -1
  49. package/lib/ignore-file.js +1 -1
  50. package/lib/ini.js +1 -1
  51. package/lib/java/java-project.js +1 -1
  52. package/lib/java/junit.js +1 -1
  53. package/lib/java/maven-compile.js +1 -1
  54. package/lib/java/maven-packaging.js +1 -1
  55. package/lib/java/maven-sample.js +1 -1
  56. package/lib/java/pom.js +1 -1
  57. package/lib/java/projenrc.js +1 -1
  58. package/lib/javascript/bundler.js +1 -1
  59. package/lib/javascript/eslint.js +1 -1
  60. package/lib/javascript/jest.js +1 -1
  61. package/lib/javascript/node-package.js +1 -1
  62. package/lib/javascript/node-project.js +1 -1
  63. package/lib/javascript/npm-config.js +1 -1
  64. package/lib/javascript/prettier.js +1 -1
  65. package/lib/javascript/projenrc.js +1 -1
  66. package/lib/javascript/typescript-config.js +1 -1
  67. package/lib/javascript/upgrade-dependencies.js +2 -2
  68. package/lib/json.js +1 -1
  69. package/lib/license.js +1 -1
  70. package/lib/logger.js +1 -1
  71. package/lib/makefile.js +1 -1
  72. package/lib/object-file.js +1 -1
  73. package/lib/project-build.js +1 -1
  74. package/lib/project.js +1 -1
  75. package/lib/projects.js +1 -1
  76. package/lib/projenrc-json.js +1 -1
  77. package/lib/python/pip.js +1 -1
  78. package/lib/python/poetry.js +2 -2
  79. package/lib/python/projenrc.js +1 -1
  80. package/lib/python/pytest-sample.js +1 -1
  81. package/lib/python/pytest.js +1 -1
  82. package/lib/python/python-project.js +1 -1
  83. package/lib/python/python-sample.js +1 -1
  84. package/lib/python/requirements-file.js +1 -1
  85. package/lib/python/setuppy.js +1 -1
  86. package/lib/python/setuptools.js +1 -1
  87. package/lib/python/venv.js +1 -1
  88. package/lib/readme.js +1 -1
  89. package/lib/release/publisher.js +1 -1
  90. package/lib/release/release-trigger.js +1 -1
  91. package/lib/release/release.js +1 -1
  92. package/lib/run-task.js +1813 -0
  93. package/lib/sample-file.js +2 -2
  94. package/lib/semver.js +1 -1
  95. package/lib/source-code.js +1 -1
  96. package/lib/task-runtime.js +1 -1
  97. package/lib/task.js +1 -1
  98. package/lib/tasks.js +1 -1
  99. package/lib/testing.js +1 -1
  100. package/lib/textfile.js +1 -1
  101. package/lib/toml.js +1 -1
  102. package/lib/typescript/projenrc.js +1 -1
  103. package/lib/typescript/typescript-typedoc.js +1 -1
  104. package/lib/typescript/typescript.js +5 -5
  105. package/lib/util.d.ts +1 -1
  106. package/lib/version.js +1 -1
  107. package/lib/vscode/devcontainer.js +1 -1
  108. package/lib/vscode/launch-config.js +1 -1
  109. package/lib/vscode/vscode.js +1 -1
  110. package/lib/web/next.js +3 -3
  111. package/lib/web/postcss.js +1 -1
  112. package/lib/web/react.js +4 -4
  113. package/lib/web/tailwind.js +1 -1
  114. package/lib/xmlfile.js +1 -1
  115. package/lib/yaml.js +1 -1
  116. package/node_modules/xmlbuilder2/node_modules/@types/node/README.md +1 -1
  117. package/node_modules/xmlbuilder2/node_modules/@types/node/diagnostics_channel.d.ts +18 -0
  118. package/node_modules/xmlbuilder2/node_modules/@types/node/package.json +2 -2
  119. package/node_modules/yaml/README.md +1 -1
  120. package/node_modules/yaml/browser/dist/compose/compose-doc.js +1 -1
  121. package/node_modules/yaml/browser/dist/compose/compose-scalar.js +4 -4
  122. package/node_modules/yaml/browser/dist/compose/composer.js +1 -0
  123. package/node_modules/yaml/browser/dist/compose/resolve-block-map.js +2 -2
  124. package/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +3 -1
  125. package/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +4 -3
  126. package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +2 -1
  127. package/node_modules/yaml/browser/dist/compose/resolve-props.js +1 -1
  128. package/node_modules/yaml/browser/dist/doc/Document.js +9 -5
  129. package/node_modules/yaml/browser/dist/doc/anchors.js +2 -2
  130. package/node_modules/yaml/browser/dist/doc/createNode.js +7 -4
  131. package/node_modules/yaml/browser/dist/nodes/Pair.js +2 -2
  132. package/node_modules/yaml/browser/dist/nodes/Scalar.js +1 -1
  133. package/node_modules/yaml/browser/dist/nodes/YAMLMap.js +5 -4
  134. package/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +1 -1
  135. package/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +1 -1
  136. package/node_modules/yaml/browser/dist/nodes/toJS.js +3 -1
  137. package/node_modules/yaml/browser/dist/parse/cst-visit.js +2 -2
  138. package/node_modules/yaml/browser/dist/parse/lexer.js +2 -1
  139. package/node_modules/yaml/browser/dist/parse/parser.js +50 -14
  140. package/node_modules/yaml/browser/dist/public-api.js +2 -1
  141. package/node_modules/yaml/browser/dist/schema/Schema.js +6 -2
  142. package/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +1 -1
  143. package/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +2 -1
  144. package/node_modules/yaml/browser/dist/stringify/stringify.js +8 -8
  145. package/node_modules/yaml/browser/dist/stringify/stringifyComment.js +5 -3
  146. package/node_modules/yaml/browser/dist/stringify/stringifyPair.js +4 -1
  147. package/node_modules/yaml/browser/dist/stringify/stringifyString.js +2 -2
  148. package/node_modules/yaml/dist/compose/compose-doc.js +1 -1
  149. package/node_modules/yaml/dist/compose/compose-scalar.js +4 -4
  150. package/node_modules/yaml/dist/compose/composer.js +1 -0
  151. package/node_modules/yaml/dist/compose/resolve-block-map.js +2 -2
  152. package/node_modules/yaml/dist/compose/resolve-block-scalar.js +3 -1
  153. package/node_modules/yaml/dist/compose/resolve-flow-collection.js +4 -3
  154. package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +2 -1
  155. package/node_modules/yaml/dist/compose/resolve-props.d.ts +1 -1
  156. package/node_modules/yaml/dist/compose/resolve-props.js +1 -1
  157. package/node_modules/yaml/dist/doc/Document.d.ts +1 -1
  158. package/node_modules/yaml/dist/doc/Document.js +9 -5
  159. package/node_modules/yaml/dist/doc/anchors.d.ts +2 -2
  160. package/node_modules/yaml/dist/doc/anchors.js +2 -2
  161. package/node_modules/yaml/dist/doc/createNode.d.ts +1 -1
  162. package/node_modules/yaml/dist/doc/createNode.js +7 -4
  163. package/node_modules/yaml/dist/doc/directives.d.ts +1 -1
  164. package/node_modules/yaml/dist/nodes/Pair.js +2 -2
  165. package/node_modules/yaml/dist/nodes/Scalar.js +1 -1
  166. package/node_modules/yaml/dist/nodes/YAMLMap.d.ts +3 -1
  167. package/node_modules/yaml/dist/nodes/YAMLMap.js +5 -4
  168. package/node_modules/yaml/dist/nodes/YAMLSeq.js +1 -1
  169. package/node_modules/yaml/dist/nodes/addPairToJSMap.js +1 -1
  170. package/node_modules/yaml/dist/nodes/toJS.js +3 -1
  171. package/node_modules/yaml/dist/options.d.ts +1 -1
  172. package/node_modules/yaml/dist/parse/cst-visit.js +2 -2
  173. package/node_modules/yaml/dist/parse/lexer.js +2 -1
  174. package/node_modules/yaml/dist/parse/parser.js +50 -14
  175. package/node_modules/yaml/dist/public-api.js +2 -1
  176. package/node_modules/yaml/dist/schema/Schema.js +6 -2
  177. package/node_modules/yaml/dist/schema/yaml-1.1/omap.js +1 -1
  178. package/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +2 -1
  179. package/node_modules/yaml/dist/stringify/stringify.js +8 -8
  180. package/node_modules/yaml/dist/stringify/stringifyComment.js +5 -3
  181. package/node_modules/yaml/dist/stringify/stringifyPair.js +4 -1
  182. package/node_modules/yaml/dist/stringify/stringifyString.js +2 -2
  183. package/node_modules/yaml/dist/test-events.js +1 -1
  184. package/node_modules/yaml/package.json +2 -2
  185. package/package.json +4 -4
  186. package/releasetag.txt +1 -1
  187. package/version.txt +1 -1
@@ -33,12 +33,13 @@ function isFlowToken(token) {
33
33
  }
34
34
  }
35
35
  function getPrevProps(parent) {
36
+ var _a;
36
37
  switch (parent.type) {
37
38
  case 'document':
38
39
  return parent.start;
39
40
  case 'block-map': {
40
41
  const it = parent.items[parent.items.length - 1];
41
- return it.sep || it.start;
42
+ return (_a = it.sep) !== null && _a !== void 0 ? _a : it.start;
42
43
  }
43
44
  case 'block-seq':
44
45
  return parent.items[parent.items.length - 1].start;
@@ -265,7 +266,7 @@ class Parser {
265
266
  return this.stack[this.stack.length - n];
266
267
  }
267
268
  *pop(error) {
268
- const token = error || this.stack.pop();
269
+ const token = error !== null && error !== void 0 ? error : this.stack.pop();
269
270
  /* istanbul ignore if should not happen */
270
271
  if (!token) {
271
272
  const message = 'Tried to pop an empty stack';
@@ -514,30 +515,60 @@ class Parser {
514
515
  const atNextItem = !this.onKeyLine &&
515
516
  this.indent === map.indent &&
516
517
  (it.sep || includesNonEmpty(it.start));
518
+ // For empty nodes, assign newline-separated not indented empty tokens to following node
519
+ let start = [];
520
+ if (atNextItem && it.sep && !it.value) {
521
+ const nl = [];
522
+ for (let i = 0; i < it.sep.length; ++i) {
523
+ const st = it.sep[i];
524
+ switch (st.type) {
525
+ case 'newline':
526
+ nl.push(i);
527
+ break;
528
+ case 'space':
529
+ break;
530
+ case 'comment':
531
+ if (st.indent > map.indent)
532
+ nl.length = 0;
533
+ break;
534
+ default:
535
+ nl.length = 0;
536
+ }
537
+ }
538
+ if (nl.length >= 2)
539
+ start = it.sep.splice(nl[1]);
540
+ }
517
541
  switch (this.type) {
518
542
  case 'anchor':
519
543
  case 'tag':
520
544
  if (atNextItem || it.value) {
521
- map.items.push({ start: [this.sourceToken] });
545
+ start.push(this.sourceToken);
546
+ map.items.push({ start });
522
547
  this.onKeyLine = true;
523
548
  }
524
- else if (it.sep)
549
+ else if (it.sep) {
525
550
  it.sep.push(this.sourceToken);
526
- else
551
+ }
552
+ else {
527
553
  it.start.push(this.sourceToken);
554
+ }
528
555
  return;
529
556
  case 'explicit-key-ind':
530
- if (!it.sep && !includesToken(it.start, 'explicit-key-ind'))
557
+ if (!it.sep && !includesToken(it.start, 'explicit-key-ind')) {
531
558
  it.start.push(this.sourceToken);
532
- else if (atNextItem || it.value)
533
- map.items.push({ start: [this.sourceToken] });
534
- else
559
+ }
560
+ else if (atNextItem || it.value) {
561
+ start.push(this.sourceToken);
562
+ map.items.push({ start });
563
+ }
564
+ else {
535
565
  this.stack.push({
536
566
  type: 'block-map',
537
567
  offset: this.offset,
538
568
  indent: this.indent,
539
569
  items: [{ start: [this.sourceToken] }]
540
570
  });
571
+ }
541
572
  this.onKeyLine = true;
542
573
  return;
543
574
  case 'map-value-ind':
@@ -564,7 +595,7 @@ class Parser {
564
595
  type: 'block-map',
565
596
  offset: this.offset,
566
597
  indent: this.indent,
567
- items: [{ start: [], key: null, sep: [this.sourceToken] }]
598
+ items: [{ start, key: null, sep: [this.sourceToken] }]
568
599
  });
569
600
  }
570
601
  else if (isFlowToken(it.key) &&
@@ -582,6 +613,10 @@ class Parser {
582
613
  items: [{ start, key, sep }]
583
614
  });
584
615
  }
616
+ else if (start.length > 0) {
617
+ // Not actually at next item
618
+ it.sep = it.sep.concat(start, this.sourceToken);
619
+ }
585
620
  else {
586
621
  it.sep.push(this.sourceToken);
587
622
  }
@@ -591,7 +626,7 @@ class Parser {
591
626
  Object.assign(it, { key: null, sep: [this.sourceToken] });
592
627
  }
593
628
  else if (it.value || atNextItem) {
594
- map.items.push({ start: [], key: null, sep: [this.sourceToken] });
629
+ map.items.push({ start, key: null, sep: [this.sourceToken] });
595
630
  }
596
631
  else if (includesToken(it.sep, 'map-value-ind')) {
597
632
  this.stack.push({
@@ -613,7 +648,7 @@ class Parser {
613
648
  case 'double-quoted-scalar': {
614
649
  const fs = this.flowScalar(this.type);
615
650
  if (atNextItem || it.value) {
616
- map.items.push({ start: [], key: fs, sep: [] });
651
+ map.items.push({ start, key: fs, sep: [] });
617
652
  this.onKeyLine = true;
618
653
  }
619
654
  else if (it.sep) {
@@ -630,8 +665,9 @@ class Parser {
630
665
  if (bv) {
631
666
  if (atNextItem &&
632
667
  bv.type !== 'block-seq' &&
633
- includesToken(it.start, 'explicit-key-ind'))
634
- map.items.push({ start: [] });
668
+ includesToken(it.start, 'explicit-key-ind')) {
669
+ map.items.push({ start });
670
+ }
635
671
  this.stack.push(bv);
636
672
  return;
637
673
  }
@@ -75,6 +75,7 @@ function parse(src, reviver, options) {
75
75
  return doc.toJS(Object.assign({ reviver: _reviver }, options));
76
76
  }
77
77
  function stringify(value, replacer, options) {
78
+ var _a;
78
79
  let _replacer = null;
79
80
  if (typeof replacer === 'function' || Array.isArray(replacer)) {
80
81
  _replacer = replacer;
@@ -89,7 +90,7 @@ function stringify(value, replacer, options) {
89
90
  options = indent < 1 ? undefined : indent > 8 ? { indent: 8 } : { indent };
90
91
  }
91
92
  if (value === undefined) {
92
- const { keepUndefined } = options || replacer || {};
93
+ const { keepUndefined } = (_a = options !== null && options !== void 0 ? options : replacer) !== null && _a !== void 0 ? _a : {};
93
94
  if (!keepUndefined)
94
95
  return undefined;
95
96
  }
@@ -16,13 +16,17 @@ class Schema {
16
16
  this.name = (typeof schema === 'string' && schema) || 'core';
17
17
  this.knownTags = resolveKnownTags ? coreKnownTags : {};
18
18
  this.tags = getTags(customTags, this.name);
19
- this.toStringOptions = toStringDefaults || null;
19
+ this.toStringOptions = toStringDefaults !== null && toStringDefaults !== void 0 ? toStringDefaults : null;
20
20
  Object.defineProperty(this, MAP, { value: map });
21
21
  Object.defineProperty(this, SCALAR, { value: string });
22
22
  Object.defineProperty(this, SEQ, { value: seq });
23
23
  // Used by createMap()
24
24
  this.sortMapEntries =
25
- sortMapEntries === true ? sortMapEntriesByKey : sortMapEntries || null;
25
+ typeof sortMapEntries === 'function'
26
+ ? sortMapEntries
27
+ : sortMapEntries === true
28
+ ? sortMapEntriesByKey
29
+ : null;
26
30
  }
27
31
  clone() {
28
32
  const copy = Object.create(Schema.prototype, Object.getOwnPropertyDescriptors(this));
@@ -22,7 +22,7 @@ class YAMLOMap extends YAMLSeq {
22
22
  if (!ctx)
23
23
  return super.toJSON(_);
24
24
  const map = new Map();
25
- if (ctx && ctx.onCreate)
25
+ if (ctx === null || ctx === void 0 ? void 0 : ctx.onCreate)
26
26
  ctx.onCreate(map);
27
27
  for (const pair of this.items) {
28
28
  let key, value;
@@ -4,6 +4,7 @@ import { Scalar } from '../../nodes/Scalar.js';
4
4
  import { YAMLSeq } from '../../nodes/YAMLSeq.js';
5
5
 
6
6
  function resolvePairs(seq, onError) {
7
+ var _a;
7
8
  if (isSeq(seq)) {
8
9
  for (let i = 0; i < seq.items.length; ++i) {
9
10
  let item = seq.items[i];
@@ -18,7 +19,7 @@ function resolvePairs(seq, onError) {
18
19
  ? `${item.commentBefore}\n${pair.key.commentBefore}`
19
20
  : item.commentBefore;
20
21
  if (item.comment) {
21
- const cn = pair.value || pair.key;
22
+ const cn = (_a = pair.value) !== null && _a !== void 0 ? _a : pair.key;
22
23
  cn.comment = cn.comment
23
24
  ? `${item.comment}\n${cn.comment}`
24
25
  : item.comment;
@@ -43,26 +43,26 @@ function createStringifyContext(doc, options) {
43
43
  };
44
44
  }
45
45
  function getTagObject(tags, item) {
46
+ var _a, _b, _c, _d;
46
47
  if (item.tag) {
47
48
  const match = tags.filter(t => t.tag === item.tag);
48
49
  if (match.length > 0)
49
- return match.find(t => t.format === item.format) || match[0];
50
+ return (_a = match.find(t => t.format === item.format)) !== null && _a !== void 0 ? _a : match[0];
50
51
  }
51
52
  let tagObj = undefined;
52
53
  let obj;
53
54
  if (isScalar(item)) {
54
55
  obj = item.value;
55
- const match = tags.filter(t => t.identify && t.identify(obj));
56
+ const match = tags.filter(t => { var _a; return (_a = t.identify) === null || _a === void 0 ? void 0 : _a.call(t, obj); });
56
57
  tagObj =
57
- match.find(t => t.format === item.format) || match.find(t => !t.format);
58
+ (_b = match.find(t => t.format === item.format)) !== null && _b !== void 0 ? _b : match.find(t => !t.format);
58
59
  }
59
60
  else {
60
61
  obj = item;
61
62
  tagObj = tags.find(t => t.nodeClass && obj instanceof t.nodeClass);
62
63
  }
63
64
  if (!tagObj) {
64
- // @ts-ignore
65
- const name = obj && obj.constructor ? obj.constructor.name : typeof obj;
65
+ const name = (_d = (_c = obj === null || obj === void 0 ? void 0 : obj.constructor) === null || _c === void 0 ? void 0 : _c.name) !== null && _d !== void 0 ? _d : typeof obj;
66
66
  throw new Error(`Tag not resolved for ${name} value`);
67
67
  }
68
68
  return tagObj;
@@ -77,13 +77,13 @@ function stringifyProps(node, tagObj, { anchors, doc }) {
77
77
  anchors.add(anchor);
78
78
  props.push(`&${anchor}`);
79
79
  }
80
- const tag = node.tag || (tagObj.default ? null : tagObj.tag);
80
+ const tag = node.tag ? node.tag : tagObj.default ? null : tagObj.tag;
81
81
  if (tag)
82
82
  props.push(doc.directives.tagString(tag));
83
83
  return props.join(' ');
84
84
  }
85
85
  function stringify(item, ctx, onComment, onChompKeep) {
86
- var _a;
86
+ var _a, _b;
87
87
  if (isPair(item))
88
88
  return item.toString(ctx, onComment, onChompKeep);
89
89
  if (isAlias(item)) {
@@ -108,7 +108,7 @@ function stringify(item, ctx, onComment, onChompKeep) {
108
108
  tagObj = getTagObject(ctx.doc.schema.tags, node);
109
109
  const props = stringifyProps(node, tagObj, ctx);
110
110
  if (props.length > 0)
111
- ctx.indentAtStart = (ctx.indentAtStart || 0) + props.length + 1;
111
+ ctx.indentAtStart = ((_b = ctx.indentAtStart) !== null && _b !== void 0 ? _b : 0) + props.length + 1;
112
112
  const str = typeof tagObj.stringify === 'function'
113
113
  ? tagObj.stringify(node, ctx, onComment, onChompKeep)
114
114
  : isScalar(node)
@@ -11,8 +11,10 @@ function indentComment(comment, indent) {
11
11
  return comment.substring(1);
12
12
  return indent ? comment.replace(/^(?! *$)/gm, indent) : comment;
13
13
  }
14
- const lineComment = (str, indent, comment) => comment.includes('\n')
15
- ? '\n' + indentComment(comment, indent)
16
- : (str.endsWith(' ') ? '' : ' ') + comment;
14
+ const lineComment = (str, indent, comment) => str.endsWith('\n')
15
+ ? indentComment(comment, indent)
16
+ : comment.includes('\n')
17
+ ? '\n' + indentComment(comment, indent)
18
+ : (str.endsWith(' ') ? '' : ' ') + comment;
17
19
 
18
20
  export { indentComment, lineComment, stringifyComment };
@@ -96,7 +96,10 @@ function stringifyPair({ key, value }, ctx, onComment, onChompKeep) {
96
96
  const valueStr = stringify(value, ctx, () => (valueCommentDone = true), () => (chompKeep = true));
97
97
  let ws = ' ';
98
98
  if (vcb || keyComment) {
99
- ws = valueStr === '' && !ctx.inFlow ? vcb : `${vcb}\n${ctx.indent}`;
99
+ if (valueStr === '' && !ctx.inFlow)
100
+ ws = vcb === '\n' ? '\n\n' : vcb;
101
+ else
102
+ ws = `${vcb}\n${ctx.indent}`;
100
103
  }
101
104
  else if (!explicitKey && isCollection(value)) {
102
105
  const flow = valueStr[0] === '[' || valueStr[0] === '{';
@@ -243,14 +243,14 @@ function plainString(item, ctx, onComment, onChompKeep) {
243
243
  // - '\n ', ': ' or ' \n' anywhere
244
244
  // - '#' not preceded by a non-space char
245
245
  // - end with ' ' or ':'
246
- return implicitKey || inFlow || value.indexOf('\n') === -1
246
+ return implicitKey || inFlow || !value.includes('\n')
247
247
  ? quotedString(value, ctx)
248
248
  : blockString(item, ctx, onComment, onChompKeep);
249
249
  }
250
250
  if (!implicitKey &&
251
251
  !inFlow &&
252
252
  type !== Scalar.PLAIN &&
253
- value.indexOf('\n') !== -1) {
253
+ value.includes('\n')) {
254
254
  // Where allowed & type not set explicitly, prefer block style for multiline strings
255
255
  return blockString(item, ctx, onComment, onChompKeep);
256
256
  }
@@ -16,7 +16,7 @@ function composeDoc(options, directives, { offset, start, value, end }, onError)
16
16
  };
17
17
  const props = resolveProps.resolveProps(start, {
18
18
  indicator: 'doc-start',
19
- next: value || (end === null || end === void 0 ? void 0 : end[0]),
19
+ next: value !== null && value !== void 0 ? value : end === null || end === void 0 ? void 0 : end[0],
20
20
  offset,
21
21
  onError,
22
22
  startOnNewline: true
@@ -19,12 +19,12 @@ function composeScalar(ctx, token, tagToken, onError) {
19
19
  : ctx.schema[Node.SCALAR];
20
20
  let scalar;
21
21
  try {
22
- const res = tag.resolve(value, msg => onError(tagToken || token, 'TAG_RESOLVE_FAILED', msg), ctx.options);
22
+ const res = tag.resolve(value, msg => onError(tagToken !== null && tagToken !== void 0 ? tagToken : token, 'TAG_RESOLVE_FAILED', msg), ctx.options);
23
23
  scalar = Node.isScalar(res) ? res : new Scalar.Scalar(res);
24
24
  }
25
25
  catch (error) {
26
26
  const msg = error instanceof Error ? error.message : String(error);
27
- onError(tagToken || token, 'TAG_RESOLVE_FAILED', msg);
27
+ onError(tagToken !== null && tagToken !== void 0 ? tagToken : token, 'TAG_RESOLVE_FAILED', msg);
28
28
  scalar = new Scalar.Scalar(value);
29
29
  }
30
30
  scalar.range = range;
@@ -66,10 +66,10 @@ function findScalarTagByName(schema, value, tagName, tagToken, onError) {
66
66
  return schema[Node.SCALAR];
67
67
  }
68
68
  function findScalarTagByTest({ directives, schema }, value, token, onError) {
69
+ var _a;
69
70
  const tag = schema.tags.find(tag => { var _a; return tag.default && ((_a = tag.test) === null || _a === void 0 ? void 0 : _a.test(value)); }) || schema[Node.SCALAR];
70
71
  if (schema.compat) {
71
- const compat = schema.compat.find(tag => { var _a; return tag.default && ((_a = tag.test) === null || _a === void 0 ? void 0 : _a.test(value)); }) ||
72
- schema[Node.SCALAR];
72
+ const compat = (_a = schema.compat.find(tag => { var _a; return tag.default && ((_a = tag.test) === null || _a === void 0 ? void 0 : _a.test(value)); })) !== null && _a !== void 0 ? _a : schema[Node.SCALAR];
73
73
  if (tag.tag !== compat.tag) {
74
74
  const ts = directives.tagString(tag.tag);
75
75
  const cs = directives.tagString(compat.tag);
@@ -69,6 +69,7 @@ class Composer {
69
69
  else
70
70
  this.errors.push(new errors.YAMLParseError(pos, code, message));
71
71
  };
72
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
72
73
  this.directives = new directives.Directives({ version: options.version || '1.2' });
73
74
  this.options = options;
74
75
  }
@@ -19,7 +19,7 @@ function resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError) {
19
19
  // key properties
20
20
  const keyProps = resolveProps.resolveProps(start, {
21
21
  indicator: 'explicit-key-ind',
22
- next: key || (sep === null || sep === void 0 ? void 0 : sep[0]),
22
+ next: key !== null && key !== void 0 ? key : sep === null || sep === void 0 ? void 0 : sep[0],
23
23
  offset,
24
24
  onError,
25
25
  startOnNewline: true
@@ -58,7 +58,7 @@ function resolveBlockMap({ composeNode, composeEmptyNode }, ctx, bm, onError) {
58
58
  if (utilMapIncludes.mapIncludes(ctx, map.items, keyNode))
59
59
  onError(keyStart, 'DUPLICATE_KEY', 'Map keys must be unique');
60
60
  // value properties
61
- const valueProps = resolveProps.resolveProps(sep || [], {
61
+ const valueProps = resolveProps.resolveProps(sep !== null && sep !== void 0 ? sep : [], {
62
62
  indicator: 'map-value-ind',
63
63
  next: value,
64
64
  offset: keyNode.range[2],
@@ -184,7 +184,9 @@ function splitLines(source) {
184
184
  const split = source.split(/\n( *)/);
185
185
  const first = split[0];
186
186
  const m = first.match(/^( *)/);
187
- const line0 = m && m[1] ? [m[1], first.slice(m[1].length)] : ['', first];
187
+ const line0 = (m === null || m === void 0 ? void 0 : m[1])
188
+ ? [m[1], first.slice(m[1].length)]
189
+ : ['', first];
188
190
  const lines = [line0];
189
191
  for (let i = 1; i < split.length; i += 2)
190
192
  lines.push([split[i], split[i + 1]]);
@@ -12,6 +12,7 @@ var utilMapIncludes = require('./util-map-includes.js');
12
12
  const blockMsg = 'Block collections are not allowed within flow collections';
13
13
  const isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');
14
14
  function resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError) {
15
+ var _a;
15
16
  const isMap = fc.start.source === '{';
16
17
  const fcName = isMap ? 'flow map' : 'flow sequence';
17
18
  const coll = isMap
@@ -28,7 +29,7 @@ function resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onErr
28
29
  const props = resolveProps.resolveProps(start, {
29
30
  flow: fcName,
30
31
  indicator: 'explicit-key-ind',
31
- next: key || (sep === null || sep === void 0 ? void 0 : sep[0]),
32
+ next: key !== null && key !== void 0 ? key : sep === null || sep === void 0 ? void 0 : sep[0],
32
33
  offset,
33
34
  onError,
34
35
  startOnNewline: false
@@ -76,7 +77,7 @@ function resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onErr
76
77
  if (prevItemComment) {
77
78
  let prev = coll.items[coll.items.length - 1];
78
79
  if (Node.isPair(prev))
79
- prev = prev.value || prev.key;
80
+ prev = (_a = prev.value) !== null && _a !== void 0 ? _a : prev.key;
80
81
  if (prev.comment)
81
82
  prev.comment += '\n' + prevItemComment;
82
83
  else
@@ -106,7 +107,7 @@ function resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onErr
106
107
  if (isBlock(key))
107
108
  onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);
108
109
  // value properties
109
- const valueProps = resolveProps.resolveProps(sep || [], {
110
+ const valueProps = resolveProps.resolveProps(sep !== null && sep !== void 0 ? sep : [], {
110
111
  flow: fcName,
111
112
  indicator: 'map-value-ind',
112
113
  next: value,
@@ -74,6 +74,7 @@ function singleQuotedValue(source, onError) {
74
74
  return foldLines(source.slice(1, -1)).replace(/''/g, "'");
75
75
  }
76
76
  function foldLines(source) {
77
+ var _a;
77
78
  /**
78
79
  * The negative lookbehind here and in the `re` RegExp is to
79
80
  * prevent causing a polynomial search time in certain cases.
@@ -113,7 +114,7 @@ function foldLines(source) {
113
114
  const last = /[ \t]*(.*)/sy;
114
115
  last.lastIndex = pos;
115
116
  match = last.exec(source);
116
- return res + sep + ((match && match[1]) || '');
117
+ return res + sep + ((_a = match === null || match === void 0 ? void 0 : match[1]) !== null && _a !== void 0 ? _a : '');
117
118
  }
118
119
  function doubleQuotedValue(source, onError) {
119
120
  let res = '';
@@ -1,7 +1,7 @@
1
1
  import type { SourceToken, Token } from '../parse/cst.js';
2
2
  import type { ComposeErrorHandler } from './composer.js';
3
3
  export interface ResolvePropsArg {
4
- flow?: string;
4
+ flow?: 'flow map' | 'flow sequence';
5
5
  indicator: 'doc-start' | 'explicit-key-ind' | 'map-value-ind' | 'seq-item-ind';
6
6
  next: Token | null | undefined;
7
7
  offset: number;
@@ -86,7 +86,7 @@ function resolveProps(tokens, { flow, indicator, next, offset, onError, startOnN
86
86
  if (anchor || tag)
87
87
  onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);
88
88
  if (found)
89
- onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow || 'collection'}`);
89
+ onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow !== null && flow !== void 0 ? flow : 'collection'}`);
90
90
  found = token;
91
91
  atNewline = false;
92
92
  hasSpace = false;
@@ -122,7 +122,7 @@ export declare class Document<T = unknown> {
122
122
  *
123
123
  * Overrides all previously set schema options.
124
124
  */
125
- setSchema(version: '1.1' | '1.2' | null, options?: SchemaOptions): void;
125
+ setSchema(version: '1.1' | '1.2' | 'next' | null, options?: SchemaOptions): void;
126
126
  /** A plain JavaScript representation of the document `contents`. */
127
127
  toJS(opt?: ToJSOptions & {
128
128
  [ignored: string]: unknown;
@@ -104,6 +104,7 @@ class Document {
104
104
  if (!node.anchor) {
105
105
  const prev = anchors.anchorNames(this);
106
106
  node.anchor =
107
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
107
108
  !name || prev.has(name) ? anchors.findNewAnchor(name || 'a', prev) : name;
108
109
  }
109
110
  return new Alias.Alias(node.anchor);
@@ -125,8 +126,10 @@ class Document {
125
126
  options = replacer;
126
127
  replacer = undefined;
127
128
  }
128
- const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options || {};
129
- const { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors(this, anchorPrefix || 'a');
129
+ const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options !== null && options !== void 0 ? options : {};
130
+ const { onAnchor, setAnchors, sourceObjects } = anchors.createNodeAnchors(this,
131
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
132
+ anchorPrefix || 'a');
130
133
  const ctx = {
131
134
  aliasDuplicateObjects: aliasDuplicateObjects !== null && aliasDuplicateObjects !== void 0 ? aliasDuplicateObjects : true,
132
135
  keepUndefined: keepUndefined !== null && keepUndefined !== void 0 ? keepUndefined : false,
@@ -257,10 +260,11 @@ class Document {
257
260
  opt = { merge: true, resolveKnownTags: false, schema: 'yaml-1.1' };
258
261
  break;
259
262
  case '1.2':
263
+ case 'next':
260
264
  if (this.directives)
261
- this.directives.yaml.version = '1.2';
265
+ this.directives.yaml.version = version;
262
266
  else
263
- this.directives = new directives.Directives({ version: '1.2' });
267
+ this.directives = new directives.Directives({ version });
264
268
  opt = { merge: false, resolveKnownTags: true, schema: 'core' };
265
269
  break;
266
270
  case null:
@@ -292,7 +296,7 @@ class Document {
292
296
  maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100,
293
297
  stringify: stringify.stringify
294
298
  };
295
- const res = toJS.toJS(this.contents, jsonArg || '', ctx);
299
+ const res = toJS.toJS(this.contents, jsonArg !== null && jsonArg !== void 0 ? jsonArg : '', ctx);
296
300
  if (typeof onAnchor === 'function')
297
301
  for (const { count, res } of ctx.anchors.values())
298
302
  onAnchor(res, count);
@@ -10,13 +10,13 @@ export declare function anchorNames(root: Document | Node): Set<string>;
10
10
  /** Find a new anchor name with the given `prefix` and a one-indexed suffix. */
11
11
  export declare function findNewAnchor(prefix: string, exclude: Set<string>): string;
12
12
  export declare function createNodeAnchors(doc: Document, prefix: string): {
13
- onAnchor(source: unknown): string;
13
+ onAnchor: (source: unknown) => string;
14
14
  /**
15
15
  * With circular references, the source node is only resolved after all
16
16
  * of its child nodes are. This is why anchors are set only after all of
17
17
  * the nodes have been created.
18
18
  */
19
- setAnchors(): void;
19
+ setAnchors: () => void;
20
20
  sourceObjects: Map<unknown, {
21
21
  anchor: string | null;
22
22
  node: Node | null;
@@ -39,7 +39,7 @@ function createNodeAnchors(doc, prefix) {
39
39
  const sourceObjects = new Map();
40
40
  let prevAnchors = null;
41
41
  return {
42
- onAnchor(source) {
42
+ onAnchor: (source) => {
43
43
  aliasObjects.push(source);
44
44
  if (!prevAnchors)
45
45
  prevAnchors = anchorNames(doc);
@@ -52,7 +52,7 @@ function createNodeAnchors(doc, prefix) {
52
52
  * of its child nodes are. This is why anchors are set only after all of
53
53
  * the nodes have been created.
54
54
  */
55
- setAnchors() {
55
+ setAnchors: () => {
56
56
  for (const source of aliasObjects) {
57
57
  const ref = sourceObjects.get(source);
58
58
  if (typeof ref === 'object' &&
@@ -5,7 +5,7 @@ import type { Replacer } from './Document.js';
5
5
  export interface CreateNodeContext {
6
6
  aliasDuplicateObjects: boolean;
7
7
  keepUndefined: boolean;
8
- onAnchor(source: unknown): string;
8
+ onAnchor: (source: unknown) => string;
9
9
  onTagObj?: (tagObj: ScalarTag | CollectionTag) => void;
10
10
  sourceObjects: Map<unknown, {
11
11
  anchor: string | null;
@@ -6,14 +6,15 @@ var Scalar = require('../nodes/Scalar.js');
6
6
 
7
7
  const defaultTagPrefix = 'tag:yaml.org,2002:';
8
8
  function findTagObject(value, tagName, tags) {
9
+ var _a;
9
10
  if (tagName) {
10
11
  const match = tags.filter(t => t.tag === tagName);
11
- const tagObj = match.find(t => !t.format) || match[0];
12
+ const tagObj = (_a = match.find(t => !t.format)) !== null && _a !== void 0 ? _a : match[0];
12
13
  if (!tagObj)
13
14
  throw new Error(`Tag ${tagName} not found`);
14
15
  return tagObj;
15
16
  }
16
- return tags.find(t => t.identify && t.identify(value) && !t.format);
17
+ return tags.find(t => { var _a; return ((_a = t.identify) === null || _a === void 0 ? void 0 : _a.call(t, value)) && !t.format; });
17
18
  }
18
19
  function createNode(value, tagName, ctx) {
19
20
  var _a, _b;
@@ -50,12 +51,14 @@ function createNode(value, tagName, ctx) {
50
51
  sourceObjects.set(value, ref);
51
52
  }
52
53
  }
53
- if (tagName && tagName.startsWith('!!'))
54
+ if (tagName === null || tagName === void 0 ? void 0 : tagName.startsWith('!!'))
54
55
  tagName = defaultTagPrefix + tagName.slice(2);
55
56
  let tagObj = findTagObject(value, tagName, schema.tags);
56
57
  if (!tagObj) {
57
- if (value && typeof value.toJSON === 'function')
58
+ if (value && typeof value.toJSON === 'function') {
59
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
58
60
  value = value.toJSON();
61
+ }
59
62
  if (!value || typeof value !== 'object') {
60
63
  const node = new Scalar.Scalar(value);
61
64
  if (ref)
@@ -3,7 +3,7 @@ export declare class Directives {
3
3
  static defaultYaml: Directives['yaml'];
4
4
  static defaultTags: Directives['tags'];
5
5
  yaml: {
6
- version: '1.1' | '1.2';
6
+ version: '1.1' | '1.2' | 'next';
7
7
  explicit?: boolean;
8
8
  };
9
9
  tags: Record<string, string>;
@@ -25,11 +25,11 @@ class Pair {
25
25
  return new Pair(key, value);
26
26
  }
27
27
  toJSON(_, ctx) {
28
- const pair = ctx && ctx.mapAsMap ? new Map() : {};
28
+ const pair = (ctx === null || ctx === void 0 ? void 0 : ctx.mapAsMap) ? new Map() : {};
29
29
  return addPairToJSMap.addPairToJSMap(ctx, pair, this);
30
30
  }
31
31
  toString(ctx, onComment, onChompKeep) {
32
- return ctx && ctx.doc
32
+ return (ctx === null || ctx === void 0 ? void 0 : ctx.doc)
33
33
  ? stringifyPair.stringifyPair(this, ctx, onComment, onChompKeep)
34
34
  : JSON.stringify(this);
35
35
  }
@@ -10,7 +10,7 @@ class Scalar extends Node.NodeBase {
10
10
  this.value = value;
11
11
  }
12
12
  toJSON(arg, ctx) {
13
- return ctx && ctx.keep ? this.value : toJS.toJS(this.value, arg, ctx);
13
+ return (ctx === null || ctx === void 0 ? void 0 : ctx.keep) ? this.value : toJS.toJS(this.value, arg, ctx);
14
14
  }
15
15
  toString() {
16
16
  return String(this.value);