projen 0.54.57 → 0.55.1

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 (189) hide show
  1. package/.jsii +49 -19
  2. package/changelog.md +6 -1
  3. package/docs/api/API.md +14 -1
  4. package/docs/escape-hatches.md +19 -0
  5. package/lib/awscdk/auto-discover.js +4 -4
  6. package/lib/awscdk/awscdk-app-java.js +1 -1
  7. package/lib/awscdk/awscdk-app-py.js +1 -1
  8. package/lib/awscdk/awscdk-app-ts.js +1 -1
  9. package/lib/awscdk/awscdk-construct.js +2 -2
  10. package/lib/awscdk/awscdk-deps-java.js +1 -1
  11. package/lib/awscdk/awscdk-deps-js.js +1 -1
  12. package/lib/awscdk/awscdk-deps.js +1 -1
  13. package/lib/awscdk/cdk-config.js +1 -1
  14. package/lib/awscdk/cdk-tasks.js +1 -1
  15. package/lib/awscdk/integration-test.js +1 -1
  16. package/lib/awscdk/lambda-extension.js +1 -1
  17. package/lib/awscdk/lambda-function.js +2 -2
  18. package/lib/build/build-workflow.js +1 -1
  19. package/lib/cdk/auto-discover-base.js +2 -2
  20. package/lib/cdk/construct-lib.js +1 -1
  21. package/lib/cdk/integration-test-base.js +1 -1
  22. package/lib/cdk/jsii-docgen.js +1 -1
  23. package/lib/cdk/jsii-project.js +1 -1
  24. package/lib/cdk8s/auto-discover.js +2 -2
  25. package/lib/cdk8s/cdk8s-app-ts.js +1 -1
  26. package/lib/cdk8s/cdk8s-construct.js +1 -1
  27. package/lib/cdk8s/integration-test.js +1 -1
  28. package/lib/cdktf/cdktf-construct.js +1 -1
  29. package/lib/component.js +1 -1
  30. package/lib/dependencies.js +1 -1
  31. package/lib/dev-env.js +1 -1
  32. package/lib/docker-compose.js +2 -2
  33. package/lib/file.js +1 -1
  34. package/lib/gitattributes.js +1 -1
  35. package/lib/github/auto-approve.js +1 -1
  36. package/lib/github/auto-merge.js +1 -1
  37. package/lib/github/dependabot.js +1 -1
  38. package/lib/github/github-credentials.js +1 -1
  39. package/lib/github/github-project.js +1 -1
  40. package/lib/github/github.js +1 -1
  41. package/lib/github/mergify.js +1 -1
  42. package/lib/github/pr-template.js +1 -1
  43. package/lib/github/pull-request-lint.js +1 -1
  44. package/lib/github/stale.js +1 -1
  45. package/lib/github/task-workflow.js +1 -1
  46. package/lib/github/workflows.js +1 -1
  47. package/lib/gitlab/configuration.js +1 -1
  48. package/lib/gitlab/gitlab-configuration.js +1 -1
  49. package/lib/gitlab/nested-configuration.js +1 -1
  50. package/lib/gitpod.js +1 -1
  51. package/lib/ignore-file.js +1 -1
  52. package/lib/ini.js +1 -1
  53. package/lib/java/java-project.js +1 -1
  54. package/lib/java/junit.js +1 -1
  55. package/lib/java/maven-compile.js +1 -1
  56. package/lib/java/maven-packaging.js +1 -1
  57. package/lib/java/maven-sample.js +1 -1
  58. package/lib/java/pom.js +1 -1
  59. package/lib/java/projenrc.js +1 -1
  60. package/lib/javascript/bundler.js +1 -1
  61. package/lib/javascript/eslint.js +1 -1
  62. package/lib/javascript/jest.js +1 -1
  63. package/lib/javascript/node-package.js +1 -1
  64. package/lib/javascript/node-project.js +1 -1
  65. package/lib/javascript/npm-config.js +1 -1
  66. package/lib/javascript/prettier.js +1 -1
  67. package/lib/javascript/projenrc.js +1 -1
  68. package/lib/javascript/typescript-config.js +1 -1
  69. package/lib/javascript/upgrade-dependencies.js +2 -2
  70. package/lib/json.js +1 -1
  71. package/lib/license.js +1 -1
  72. package/lib/logger.js +1 -1
  73. package/lib/makefile.js +1 -1
  74. package/lib/object-file.js +1 -1
  75. package/lib/project-build.js +1 -1
  76. package/lib/project.d.ts +10 -0
  77. package/lib/project.js +28 -2
  78. package/lib/projects.js +1 -1
  79. package/lib/projenrc-json.js +1 -1
  80. package/lib/python/pip.js +1 -1
  81. package/lib/python/poetry.js +2 -2
  82. package/lib/python/projenrc.js +1 -1
  83. package/lib/python/pytest-sample.js +1 -1
  84. package/lib/python/pytest.js +1 -1
  85. package/lib/python/python-project.js +1 -1
  86. package/lib/python/python-sample.js +1 -1
  87. package/lib/python/requirements-file.js +1 -1
  88. package/lib/python/setuppy.js +1 -1
  89. package/lib/python/setuptools.js +1 -1
  90. package/lib/python/venv.js +1 -1
  91. package/lib/readme.js +1 -1
  92. package/lib/release/publisher.js +1 -1
  93. package/lib/release/release-trigger.js +1 -1
  94. package/lib/release/release.js +1 -1
  95. package/lib/sample-file.js +2 -2
  96. package/lib/semver.js +1 -1
  97. package/lib/source-code.js +1 -1
  98. package/lib/task-runtime.js +1 -1
  99. package/lib/task.js +1 -1
  100. package/lib/tasks.js +1 -1
  101. package/lib/testing.js +1 -1
  102. package/lib/textfile.js +1 -1
  103. package/lib/toml.js +1 -1
  104. package/lib/typescript/projenrc.js +1 -1
  105. package/lib/typescript/typescript-typedoc.js +1 -1
  106. package/lib/typescript/typescript.js +5 -5
  107. package/lib/util.d.ts +1 -1
  108. package/lib/version.js +1 -1
  109. package/lib/vscode/devcontainer.js +1 -1
  110. package/lib/vscode/launch-config.js +1 -1
  111. package/lib/vscode/vscode.js +1 -1
  112. package/lib/web/next.js +3 -3
  113. package/lib/web/postcss.js +1 -1
  114. package/lib/web/react.js +4 -4
  115. package/lib/web/tailwind.js +1 -1
  116. package/lib/xmlfile.js +1 -1
  117. package/lib/yaml.js +1 -1
  118. package/node_modules/xmlbuilder2/node_modules/@types/node/README.md +1 -1
  119. package/node_modules/xmlbuilder2/node_modules/@types/node/diagnostics_channel.d.ts +18 -0
  120. package/node_modules/xmlbuilder2/node_modules/@types/node/package.json +2 -2
  121. package/node_modules/yaml/README.md +1 -1
  122. package/node_modules/yaml/browser/dist/compose/compose-doc.js +1 -1
  123. package/node_modules/yaml/browser/dist/compose/compose-scalar.js +4 -4
  124. package/node_modules/yaml/browser/dist/compose/composer.js +1 -0
  125. package/node_modules/yaml/browser/dist/compose/resolve-block-map.js +2 -2
  126. package/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +3 -1
  127. package/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +4 -3
  128. package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +2 -1
  129. package/node_modules/yaml/browser/dist/compose/resolve-props.js +1 -1
  130. package/node_modules/yaml/browser/dist/doc/Document.js +9 -5
  131. package/node_modules/yaml/browser/dist/doc/anchors.js +2 -2
  132. package/node_modules/yaml/browser/dist/doc/createNode.js +7 -4
  133. package/node_modules/yaml/browser/dist/nodes/Pair.js +2 -2
  134. package/node_modules/yaml/browser/dist/nodes/Scalar.js +1 -1
  135. package/node_modules/yaml/browser/dist/nodes/YAMLMap.js +5 -4
  136. package/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +1 -1
  137. package/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +1 -1
  138. package/node_modules/yaml/browser/dist/nodes/toJS.js +3 -1
  139. package/node_modules/yaml/browser/dist/parse/cst-visit.js +2 -2
  140. package/node_modules/yaml/browser/dist/parse/lexer.js +2 -1
  141. package/node_modules/yaml/browser/dist/parse/parser.js +50 -14
  142. package/node_modules/yaml/browser/dist/public-api.js +2 -1
  143. package/node_modules/yaml/browser/dist/schema/Schema.js +6 -2
  144. package/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +1 -1
  145. package/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +2 -1
  146. package/node_modules/yaml/browser/dist/stringify/stringify.js +8 -8
  147. package/node_modules/yaml/browser/dist/stringify/stringifyComment.js +5 -3
  148. package/node_modules/yaml/browser/dist/stringify/stringifyPair.js +4 -1
  149. package/node_modules/yaml/browser/dist/stringify/stringifyString.js +2 -2
  150. package/node_modules/yaml/dist/compose/compose-doc.js +1 -1
  151. package/node_modules/yaml/dist/compose/compose-scalar.js +4 -4
  152. package/node_modules/yaml/dist/compose/composer.js +1 -0
  153. package/node_modules/yaml/dist/compose/resolve-block-map.js +2 -2
  154. package/node_modules/yaml/dist/compose/resolve-block-scalar.js +3 -1
  155. package/node_modules/yaml/dist/compose/resolve-flow-collection.js +4 -3
  156. package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +2 -1
  157. package/node_modules/yaml/dist/compose/resolve-props.d.ts +1 -1
  158. package/node_modules/yaml/dist/compose/resolve-props.js +1 -1
  159. package/node_modules/yaml/dist/doc/Document.d.ts +1 -1
  160. package/node_modules/yaml/dist/doc/Document.js +9 -5
  161. package/node_modules/yaml/dist/doc/anchors.d.ts +2 -2
  162. package/node_modules/yaml/dist/doc/anchors.js +2 -2
  163. package/node_modules/yaml/dist/doc/createNode.d.ts +1 -1
  164. package/node_modules/yaml/dist/doc/createNode.js +7 -4
  165. package/node_modules/yaml/dist/doc/directives.d.ts +1 -1
  166. package/node_modules/yaml/dist/nodes/Pair.js +2 -2
  167. package/node_modules/yaml/dist/nodes/Scalar.js +1 -1
  168. package/node_modules/yaml/dist/nodes/YAMLMap.d.ts +3 -1
  169. package/node_modules/yaml/dist/nodes/YAMLMap.js +5 -4
  170. package/node_modules/yaml/dist/nodes/YAMLSeq.js +1 -1
  171. package/node_modules/yaml/dist/nodes/addPairToJSMap.js +1 -1
  172. package/node_modules/yaml/dist/nodes/toJS.js +3 -1
  173. package/node_modules/yaml/dist/options.d.ts +1 -1
  174. package/node_modules/yaml/dist/parse/cst-visit.js +2 -2
  175. package/node_modules/yaml/dist/parse/lexer.js +2 -1
  176. package/node_modules/yaml/dist/parse/parser.js +50 -14
  177. package/node_modules/yaml/dist/public-api.js +2 -1
  178. package/node_modules/yaml/dist/schema/Schema.js +6 -2
  179. package/node_modules/yaml/dist/schema/yaml-1.1/omap.js +1 -1
  180. package/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +2 -1
  181. package/node_modules/yaml/dist/stringify/stringify.js +8 -8
  182. package/node_modules/yaml/dist/stringify/stringifyComment.js +5 -3
  183. package/node_modules/yaml/dist/stringify/stringifyPair.js +4 -1
  184. package/node_modules/yaml/dist/stringify/stringifyString.js +2 -2
  185. package/node_modules/yaml/dist/test-events.js +1 -1
  186. package/node_modules/yaml/package.json +2 -2
  187. package/package.json +4 -4
  188. package/releasetag.txt +1 -1
  189. package/version.txt +1 -1
@@ -10,6 +10,7 @@ import { mapIncludes } from './util-map-includes.js';
10
10
  const blockMsg = 'Block collections are not allowed within flow collections';
11
11
  const isBlock = (token) => token && (token.type === 'block-map' || token.type === 'block-seq');
12
12
  function resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onError) {
13
+ var _a;
13
14
  const isMap = fc.start.source === '{';
14
15
  const fcName = isMap ? 'flow map' : 'flow sequence';
15
16
  const coll = isMap
@@ -26,7 +27,7 @@ function resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onErr
26
27
  const props = resolveProps(start, {
27
28
  flow: fcName,
28
29
  indicator: 'explicit-key-ind',
29
- next: key || (sep === null || sep === void 0 ? void 0 : sep[0]),
30
+ next: key !== null && key !== void 0 ? key : sep === null || sep === void 0 ? void 0 : sep[0],
30
31
  offset,
31
32
  onError,
32
33
  startOnNewline: false
@@ -74,7 +75,7 @@ function resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onErr
74
75
  if (prevItemComment) {
75
76
  let prev = coll.items[coll.items.length - 1];
76
77
  if (isPair(prev))
77
- prev = prev.value || prev.key;
78
+ prev = (_a = prev.value) !== null && _a !== void 0 ? _a : prev.key;
78
79
  if (prev.comment)
79
80
  prev.comment += '\n' + prevItemComment;
80
81
  else
@@ -104,7 +105,7 @@ function resolveFlowCollection({ composeNode, composeEmptyNode }, ctx, fc, onErr
104
105
  if (isBlock(key))
105
106
  onError(keyNode.range, 'BLOCK_IN_FLOW', blockMsg);
106
107
  // value properties
107
- const valueProps = resolveProps(sep || [], {
108
+ const valueProps = resolveProps(sep !== null && sep !== void 0 ? sep : [], {
108
109
  flow: fcName,
109
110
  indicator: 'map-value-ind',
110
111
  next: value,
@@ -72,6 +72,7 @@ function singleQuotedValue(source, onError) {
72
72
  return foldLines(source.slice(1, -1)).replace(/''/g, "'");
73
73
  }
74
74
  function foldLines(source) {
75
+ var _a;
75
76
  /**
76
77
  * The negative lookbehind here and in the `re` RegExp is to
77
78
  * prevent causing a polynomial search time in certain cases.
@@ -111,7 +112,7 @@ function foldLines(source) {
111
112
  const last = /[ \t]*(.*)/sy;
112
113
  last.lastIndex = pos;
113
114
  match = last.exec(source);
114
- return res + sep + ((match && match[1]) || '');
115
+ return res + sep + ((_a = match === null || match === void 0 ? void 0 : match[1]) !== null && _a !== void 0 ? _a : '');
115
116
  }
116
117
  function doubleQuotedValue(source, onError) {
117
118
  let res = '';
@@ -84,7 +84,7 @@ function resolveProps(tokens, { flow, indicator, next, offset, onError, startOnN
84
84
  if (anchor || tag)
85
85
  onError(token, 'BAD_PROP_ORDER', `Anchors and tags must be after the ${token.source} indicator`);
86
86
  if (found)
87
- onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow || 'collection'}`);
87
+ onError(token, 'UNEXPECTED_TOKEN', `Unexpected ${token.source} in ${flow !== null && flow !== void 0 ? flow : 'collection'}`);
88
88
  found = token;
89
89
  atNewline = false;
90
90
  hasSpace = false;
@@ -102,6 +102,7 @@ class Document {
102
102
  if (!node.anchor) {
103
103
  const prev = anchorNames(this);
104
104
  node.anchor =
105
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
105
106
  !name || prev.has(name) ? findNewAnchor(name || 'a', prev) : name;
106
107
  }
107
108
  return new Alias(node.anchor);
@@ -123,8 +124,10 @@ class Document {
123
124
  options = replacer;
124
125
  replacer = undefined;
125
126
  }
126
- const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options || {};
127
- const { onAnchor, setAnchors, sourceObjects } = createNodeAnchors(this, anchorPrefix || 'a');
127
+ const { aliasDuplicateObjects, anchorPrefix, flow, keepUndefined, onTagObj, tag } = options !== null && options !== void 0 ? options : {};
128
+ const { onAnchor, setAnchors, sourceObjects } = createNodeAnchors(this,
129
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
130
+ anchorPrefix || 'a');
128
131
  const ctx = {
129
132
  aliasDuplicateObjects: aliasDuplicateObjects !== null && aliasDuplicateObjects !== void 0 ? aliasDuplicateObjects : true,
130
133
  keepUndefined: keepUndefined !== null && keepUndefined !== void 0 ? keepUndefined : false,
@@ -255,10 +258,11 @@ class Document {
255
258
  opt = { merge: true, resolveKnownTags: false, schema: 'yaml-1.1' };
256
259
  break;
257
260
  case '1.2':
261
+ case 'next':
258
262
  if (this.directives)
259
- this.directives.yaml.version = '1.2';
263
+ this.directives.yaml.version = version;
260
264
  else
261
- this.directives = new Directives({ version: '1.2' });
265
+ this.directives = new Directives({ version });
262
266
  opt = { merge: false, resolveKnownTags: true, schema: 'core' };
263
267
  break;
264
268
  case null:
@@ -290,7 +294,7 @@ class Document {
290
294
  maxAliasCount: typeof maxAliasCount === 'number' ? maxAliasCount : 100,
291
295
  stringify
292
296
  };
293
- const res = toJS(this.contents, jsonArg || '', ctx);
297
+ const res = toJS(this.contents, jsonArg !== null && jsonArg !== void 0 ? jsonArg : '', ctx);
294
298
  if (typeof onAnchor === 'function')
295
299
  for (const { count, res } of ctx.anchors.values())
296
300
  onAnchor(res, count);
@@ -37,7 +37,7 @@ function createNodeAnchors(doc, prefix) {
37
37
  const sourceObjects = new Map();
38
38
  let prevAnchors = null;
39
39
  return {
40
- onAnchor(source) {
40
+ onAnchor: (source) => {
41
41
  aliasObjects.push(source);
42
42
  if (!prevAnchors)
43
43
  prevAnchors = anchorNames(doc);
@@ -50,7 +50,7 @@ function createNodeAnchors(doc, prefix) {
50
50
  * of its child nodes are. This is why anchors are set only after all of
51
51
  * the nodes have been created.
52
52
  */
53
- setAnchors() {
53
+ setAnchors: () => {
54
54
  for (const source of aliasObjects) {
55
55
  const ref = sourceObjects.get(source);
56
56
  if (typeof ref === 'object' &&
@@ -4,14 +4,15 @@ import { Scalar } from '../nodes/Scalar.js';
4
4
 
5
5
  const defaultTagPrefix = 'tag:yaml.org,2002:';
6
6
  function findTagObject(value, tagName, tags) {
7
+ var _a;
7
8
  if (tagName) {
8
9
  const match = tags.filter(t => t.tag === tagName);
9
- const tagObj = match.find(t => !t.format) || match[0];
10
+ const tagObj = (_a = match.find(t => !t.format)) !== null && _a !== void 0 ? _a : match[0];
10
11
  if (!tagObj)
11
12
  throw new Error(`Tag ${tagName} not found`);
12
13
  return tagObj;
13
14
  }
14
- return tags.find(t => t.identify && t.identify(value) && !t.format);
15
+ return tags.find(t => { var _a; return ((_a = t.identify) === null || _a === void 0 ? void 0 : _a.call(t, value)) && !t.format; });
15
16
  }
16
17
  function createNode(value, tagName, ctx) {
17
18
  var _a, _b;
@@ -48,12 +49,14 @@ function createNode(value, tagName, ctx) {
48
49
  sourceObjects.set(value, ref);
49
50
  }
50
51
  }
51
- if (tagName && tagName.startsWith('!!'))
52
+ if (tagName === null || tagName === void 0 ? void 0 : tagName.startsWith('!!'))
52
53
  tagName = defaultTagPrefix + tagName.slice(2);
53
54
  let tagObj = findTagObject(value, tagName, schema.tags);
54
55
  if (!tagObj) {
55
- if (value && typeof value.toJSON === 'function')
56
+ if (value && typeof value.toJSON === 'function') {
57
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
56
58
  value = value.toJSON();
59
+ }
57
60
  if (!value || typeof value !== 'object') {
58
61
  const node = new Scalar(value);
59
62
  if (ref)
@@ -23,11 +23,11 @@ class Pair {
23
23
  return new Pair(key, value);
24
24
  }
25
25
  toJSON(_, ctx) {
26
- const pair = ctx && ctx.mapAsMap ? new Map() : {};
26
+ const pair = (ctx === null || ctx === void 0 ? void 0 : ctx.mapAsMap) ? new Map() : {};
27
27
  return addPairToJSMap(ctx, pair, this);
28
28
  }
29
29
  toString(ctx, onComment, onChompKeep) {
30
- return ctx && ctx.doc
30
+ return (ctx === null || ctx === void 0 ? void 0 : ctx.doc)
31
31
  ? stringifyPair(this, ctx, onComment, onChompKeep)
32
32
  : JSON.stringify(this);
33
33
  }
@@ -8,7 +8,7 @@ class Scalar extends NodeBase {
8
8
  this.value = value;
9
9
  }
10
10
  toJSON(arg, ctx) {
11
- return ctx && ctx.keep ? this.value : toJS(this.value, arg, ctx);
11
+ return (ctx === null || ctx === void 0 ? void 0 : ctx.keep) ? this.value : toJS(this.value, arg, ctx);
12
12
  }
13
13
  toString() {
14
14
  return String(this.value);
@@ -32,6 +32,7 @@ class YAMLMap extends Collection {
32
32
  * collection will throw. Otherwise, overwrites the previous value.
33
33
  */
34
34
  add(pair, overwrite) {
35
+ var _a;
35
36
  let _pair;
36
37
  if (isPair(pair))
37
38
  _pair = pair;
@@ -42,7 +43,7 @@ class YAMLMap extends Collection {
42
43
  else
43
44
  _pair = new Pair(pair.key, pair.value);
44
45
  const prev = findPair(this.items, _pair.key);
45
- const sortEntries = this.schema && this.schema.sortMapEntries;
46
+ const sortEntries = (_a = this.schema) === null || _a === void 0 ? void 0 : _a.sortMapEntries;
46
47
  if (prev) {
47
48
  if (!overwrite)
48
49
  throw new Error(`Key ${_pair.key} already set`);
@@ -72,7 +73,7 @@ class YAMLMap extends Collection {
72
73
  }
73
74
  get(key, keepScalar) {
74
75
  const it = findPair(this.items, key);
75
- const node = it && it.value;
76
+ const node = it === null || it === void 0 ? void 0 : it.value;
76
77
  return !keepScalar && isScalar(node) ? node.value : node;
77
78
  }
78
79
  has(key) {
@@ -87,8 +88,8 @@ class YAMLMap extends Collection {
87
88
  * @returns Instance of Type, Map, or Object
88
89
  */
89
90
  toJSON(_, ctx, Type) {
90
- const map = Type ? new Type() : ctx && ctx.mapAsMap ? new Map() : {};
91
- if (ctx && ctx.onCreate)
91
+ const map = Type ? new Type() : (ctx === null || ctx === void 0 ? void 0 : ctx.mapAsMap) ? new Map() : {};
92
+ if (ctx === null || ctx === void 0 ? void 0 : ctx.onCreate)
92
93
  ctx.onCreate(map);
93
94
  for (const item of this.items)
94
95
  addPairToJSMap(ctx, map, item);
@@ -74,7 +74,7 @@ class YAMLSeq extends Collection {
74
74
  }
75
75
  toJSON(_, ctx) {
76
76
  const seq = [];
77
- if (ctx && ctx.onCreate)
77
+ if (ctx === null || ctx === void 0 ? void 0 : ctx.onCreate)
78
78
  ctx.onCreate(seq);
79
79
  let i = 0;
80
80
  for (const item of this.items)
@@ -6,7 +6,7 @@ import { toJS } from './toJS.js';
6
6
 
7
7
  const MERGE_KEY = '<<';
8
8
  function addPairToJSMap(ctx, map, { key, value }) {
9
- if (ctx && ctx.doc.schema.merge && isMergeKey(key)) {
9
+ if ((ctx === null || ctx === void 0 ? void 0 : ctx.doc.schema.merge) && isMergeKey(key)) {
10
10
  value = isAlias(value) ? value.resolve(ctx.doc) : value;
11
11
  if (isSeq(value))
12
12
  for (const it of value.items)
@@ -11,9 +11,11 @@ import { hasAnchor } from './Node.js';
11
11
  * stringification.
12
12
  */
13
13
  function toJS(value, arg, ctx) {
14
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
14
15
  if (Array.isArray(value))
15
16
  return value.map((v, i) => toJS(v, String(i), ctx));
16
17
  if (value && typeof value.toJSON === 'function') {
18
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
17
19
  if (!ctx || !hasAnchor(value))
18
20
  return value.toJSON(arg, ctx);
19
21
  const data = { aliasCount: 0, count: 1, res: undefined };
@@ -27,7 +29,7 @@ function toJS(value, arg, ctx) {
27
29
  ctx.onCreate(res);
28
30
  return res;
29
31
  }
30
- if (typeof value === 'bigint' && !(ctx && ctx.keep))
32
+ if (typeof value === 'bigint' && !(ctx === null || ctx === void 0 ? void 0 : ctx.keep))
31
33
  return Number(value);
32
34
  return value;
33
35
  }
@@ -47,7 +47,7 @@ visit.REMOVE = REMOVE;
47
47
  visit.itemAtPath = (cst, path) => {
48
48
  let item = cst;
49
49
  for (const [field, index] of path) {
50
- const tok = item && item[field];
50
+ const tok = item === null || item === void 0 ? void 0 : item[field];
51
51
  if (tok && 'items' in tok) {
52
52
  item = tok.items[index];
53
53
  }
@@ -64,7 +64,7 @@ visit.itemAtPath = (cst, path) => {
64
64
  visit.parentCollection = (cst, path) => {
65
65
  const parent = visit.itemAtPath(cst, path.slice(0, -1));
66
66
  const field = path[path.length - 1][0];
67
- const coll = parent && parent[field];
67
+ const coll = parent === null || parent === void 0 ? void 0 : parent[field];
68
68
  if (coll && 'items' in coll)
69
69
  return coll;
70
70
  throw new Error('Parent collection not found');
@@ -148,12 +148,13 @@ class Lexer {
148
148
  * @returns A generator of lexical tokens
149
149
  */
150
150
  *lex(source, incomplete = false) {
151
+ var _a;
151
152
  if (source) {
152
153
  this.buffer = this.buffer ? this.buffer + source : source;
153
154
  this.lineEndPos = null;
154
155
  }
155
156
  this.atEnd = !incomplete;
156
- let next = this.next || 'stream';
157
+ let next = (_a = this.next) !== null && _a !== void 0 ? _a : 'stream';
157
158
  while (next && (incomplete || this.hasChars(1)))
158
159
  next = yield* this.parseNext(next);
159
160
  }
@@ -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