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.
- package/.jsii +49 -19
- package/changelog.md +6 -1
- package/docs/api/API.md +14 -1
- package/docs/escape-hatches.md +19 -0
- package/lib/awscdk/auto-discover.js +4 -4
- package/lib/awscdk/awscdk-app-java.js +1 -1
- package/lib/awscdk/awscdk-app-py.js +1 -1
- package/lib/awscdk/awscdk-app-ts.js +1 -1
- package/lib/awscdk/awscdk-construct.js +2 -2
- package/lib/awscdk/awscdk-deps-java.js +1 -1
- package/lib/awscdk/awscdk-deps-js.js +1 -1
- package/lib/awscdk/awscdk-deps.js +1 -1
- package/lib/awscdk/cdk-config.js +1 -1
- package/lib/awscdk/cdk-tasks.js +1 -1
- package/lib/awscdk/integration-test.js +1 -1
- package/lib/awscdk/lambda-extension.js +1 -1
- package/lib/awscdk/lambda-function.js +2 -2
- package/lib/build/build-workflow.js +1 -1
- package/lib/cdk/auto-discover-base.js +2 -2
- package/lib/cdk/construct-lib.js +1 -1
- package/lib/cdk/integration-test-base.js +1 -1
- package/lib/cdk/jsii-docgen.js +1 -1
- package/lib/cdk/jsii-project.js +1 -1
- package/lib/cdk8s/auto-discover.js +2 -2
- package/lib/cdk8s/cdk8s-app-ts.js +1 -1
- package/lib/cdk8s/cdk8s-construct.js +1 -1
- package/lib/cdk8s/integration-test.js +1 -1
- package/lib/cdktf/cdktf-construct.js +1 -1
- package/lib/component.js +1 -1
- package/lib/dependencies.js +1 -1
- package/lib/dev-env.js +1 -1
- package/lib/docker-compose.js +2 -2
- package/lib/file.js +1 -1
- package/lib/gitattributes.js +1 -1
- package/lib/github/auto-approve.js +1 -1
- package/lib/github/auto-merge.js +1 -1
- package/lib/github/dependabot.js +1 -1
- package/lib/github/github-credentials.js +1 -1
- package/lib/github/github-project.js +1 -1
- package/lib/github/github.js +1 -1
- package/lib/github/mergify.js +1 -1
- package/lib/github/pr-template.js +1 -1
- package/lib/github/pull-request-lint.js +1 -1
- package/lib/github/stale.js +1 -1
- package/lib/github/task-workflow.js +1 -1
- package/lib/github/workflows.js +1 -1
- package/lib/gitlab/configuration.js +1 -1
- package/lib/gitlab/gitlab-configuration.js +1 -1
- package/lib/gitlab/nested-configuration.js +1 -1
- package/lib/gitpod.js +1 -1
- package/lib/ignore-file.js +1 -1
- package/lib/ini.js +1 -1
- package/lib/java/java-project.js +1 -1
- package/lib/java/junit.js +1 -1
- package/lib/java/maven-compile.js +1 -1
- package/lib/java/maven-packaging.js +1 -1
- package/lib/java/maven-sample.js +1 -1
- package/lib/java/pom.js +1 -1
- package/lib/java/projenrc.js +1 -1
- package/lib/javascript/bundler.js +1 -1
- package/lib/javascript/eslint.js +1 -1
- package/lib/javascript/jest.js +1 -1
- package/lib/javascript/node-package.js +1 -1
- package/lib/javascript/node-project.js +1 -1
- package/lib/javascript/npm-config.js +1 -1
- package/lib/javascript/prettier.js +1 -1
- package/lib/javascript/projenrc.js +1 -1
- package/lib/javascript/typescript-config.js +1 -1
- package/lib/javascript/upgrade-dependencies.js +2 -2
- package/lib/json.js +1 -1
- package/lib/license.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/makefile.js +1 -1
- package/lib/object-file.js +1 -1
- package/lib/project-build.js +1 -1
- package/lib/project.d.ts +10 -0
- package/lib/project.js +28 -2
- package/lib/projects.js +1 -1
- package/lib/projenrc-json.js +1 -1
- package/lib/python/pip.js +1 -1
- package/lib/python/poetry.js +2 -2
- package/lib/python/projenrc.js +1 -1
- package/lib/python/pytest-sample.js +1 -1
- package/lib/python/pytest.js +1 -1
- package/lib/python/python-project.js +1 -1
- package/lib/python/python-sample.js +1 -1
- package/lib/python/requirements-file.js +1 -1
- package/lib/python/setuppy.js +1 -1
- package/lib/python/setuptools.js +1 -1
- package/lib/python/venv.js +1 -1
- package/lib/readme.js +1 -1
- package/lib/release/publisher.js +1 -1
- package/lib/release/release-trigger.js +1 -1
- package/lib/release/release.js +1 -1
- package/lib/sample-file.js +2 -2
- package/lib/semver.js +1 -1
- package/lib/source-code.js +1 -1
- package/lib/task-runtime.js +1 -1
- package/lib/task.js +1 -1
- package/lib/tasks.js +1 -1
- package/lib/testing.js +1 -1
- package/lib/textfile.js +1 -1
- package/lib/toml.js +1 -1
- package/lib/typescript/projenrc.js +1 -1
- package/lib/typescript/typescript-typedoc.js +1 -1
- package/lib/typescript/typescript.js +5 -5
- package/lib/util.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/vscode/devcontainer.js +1 -1
- package/lib/vscode/launch-config.js +1 -1
- package/lib/vscode/vscode.js +1 -1
- package/lib/web/next.js +3 -3
- package/lib/web/postcss.js +1 -1
- package/lib/web/react.js +4 -4
- package/lib/web/tailwind.js +1 -1
- package/lib/xmlfile.js +1 -1
- package/lib/yaml.js +1 -1
- package/node_modules/xmlbuilder2/node_modules/@types/node/README.md +1 -1
- package/node_modules/xmlbuilder2/node_modules/@types/node/diagnostics_channel.d.ts +18 -0
- package/node_modules/xmlbuilder2/node_modules/@types/node/package.json +2 -2
- package/node_modules/yaml/README.md +1 -1
- package/node_modules/yaml/browser/dist/compose/compose-doc.js +1 -1
- package/node_modules/yaml/browser/dist/compose/compose-scalar.js +4 -4
- package/node_modules/yaml/browser/dist/compose/composer.js +1 -0
- package/node_modules/yaml/browser/dist/compose/resolve-block-map.js +2 -2
- package/node_modules/yaml/browser/dist/compose/resolve-block-scalar.js +3 -1
- package/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +4 -3
- package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +2 -1
- package/node_modules/yaml/browser/dist/compose/resolve-props.js +1 -1
- package/node_modules/yaml/browser/dist/doc/Document.js +9 -5
- package/node_modules/yaml/browser/dist/doc/anchors.js +2 -2
- package/node_modules/yaml/browser/dist/doc/createNode.js +7 -4
- package/node_modules/yaml/browser/dist/nodes/Pair.js +2 -2
- package/node_modules/yaml/browser/dist/nodes/Scalar.js +1 -1
- package/node_modules/yaml/browser/dist/nodes/YAMLMap.js +5 -4
- package/node_modules/yaml/browser/dist/nodes/YAMLSeq.js +1 -1
- package/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +1 -1
- package/node_modules/yaml/browser/dist/nodes/toJS.js +3 -1
- package/node_modules/yaml/browser/dist/parse/cst-visit.js +2 -2
- package/node_modules/yaml/browser/dist/parse/lexer.js +2 -1
- package/node_modules/yaml/browser/dist/parse/parser.js +50 -14
- package/node_modules/yaml/browser/dist/public-api.js +2 -1
- package/node_modules/yaml/browser/dist/schema/Schema.js +6 -2
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/omap.js +1 -1
- package/node_modules/yaml/browser/dist/schema/yaml-1.1/pairs.js +2 -1
- package/node_modules/yaml/browser/dist/stringify/stringify.js +8 -8
- package/node_modules/yaml/browser/dist/stringify/stringifyComment.js +5 -3
- package/node_modules/yaml/browser/dist/stringify/stringifyPair.js +4 -1
- package/node_modules/yaml/browser/dist/stringify/stringifyString.js +2 -2
- package/node_modules/yaml/dist/compose/compose-doc.js +1 -1
- package/node_modules/yaml/dist/compose/compose-scalar.js +4 -4
- package/node_modules/yaml/dist/compose/composer.js +1 -0
- package/node_modules/yaml/dist/compose/resolve-block-map.js +2 -2
- package/node_modules/yaml/dist/compose/resolve-block-scalar.js +3 -1
- package/node_modules/yaml/dist/compose/resolve-flow-collection.js +4 -3
- package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +2 -1
- package/node_modules/yaml/dist/compose/resolve-props.d.ts +1 -1
- package/node_modules/yaml/dist/compose/resolve-props.js +1 -1
- package/node_modules/yaml/dist/doc/Document.d.ts +1 -1
- package/node_modules/yaml/dist/doc/Document.js +9 -5
- package/node_modules/yaml/dist/doc/anchors.d.ts +2 -2
- package/node_modules/yaml/dist/doc/anchors.js +2 -2
- package/node_modules/yaml/dist/doc/createNode.d.ts +1 -1
- package/node_modules/yaml/dist/doc/createNode.js +7 -4
- package/node_modules/yaml/dist/doc/directives.d.ts +1 -1
- package/node_modules/yaml/dist/nodes/Pair.js +2 -2
- package/node_modules/yaml/dist/nodes/Scalar.js +1 -1
- package/node_modules/yaml/dist/nodes/YAMLMap.d.ts +3 -1
- package/node_modules/yaml/dist/nodes/YAMLMap.js +5 -4
- package/node_modules/yaml/dist/nodes/YAMLSeq.js +1 -1
- package/node_modules/yaml/dist/nodes/addPairToJSMap.js +1 -1
- package/node_modules/yaml/dist/nodes/toJS.js +3 -1
- package/node_modules/yaml/dist/options.d.ts +1 -1
- package/node_modules/yaml/dist/parse/cst-visit.js +2 -2
- package/node_modules/yaml/dist/parse/lexer.js +2 -1
- package/node_modules/yaml/dist/parse/parser.js +50 -14
- package/node_modules/yaml/dist/public-api.js +2 -1
- package/node_modules/yaml/dist/schema/Schema.js +6 -2
- package/node_modules/yaml/dist/schema/yaml-1.1/omap.js +1 -1
- package/node_modules/yaml/dist/schema/yaml-1.1/pairs.js +2 -1
- package/node_modules/yaml/dist/stringify/stringify.js +8 -8
- package/node_modules/yaml/dist/stringify/stringifyComment.js +5 -3
- package/node_modules/yaml/dist/stringify/stringifyPair.js +4 -1
- package/node_modules/yaml/dist/stringify/stringifyString.js +2 -2
- package/node_modules/yaml/dist/test-events.js +1 -1
- package/node_modules/yaml/package.json +2 -2
- package/package.json +4 -4
- package/releasetag.txt +1 -1
- 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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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 =
|
|
263
|
+
this.directives.yaml.version = version;
|
|
260
264
|
else
|
|
261
|
-
this.directives = new Directives({ version
|
|
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
|
|
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)
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
91
|
-
if (ctx
|
|
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);
|
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
533
|
-
|
|
534
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 ===
|
|
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
|
|
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
|
|
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)
|
|
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
|
|
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)
|
|
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
|
-
|
|
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
|
|
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
|
|
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) =>
|
|
15
|
-
?
|
|
16
|
-
:
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
|
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
|