mrpj 0.2.9 → 0.2.11

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/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2025 Momo Kornher
1
+ Copyright (c) 2026 Momo Kornher
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
@@ -0,0 +1,37 @@
1
+ import type { IConstruct } from 'constructs';
2
+ import { Component } from 'projen';
3
+ export interface NodeVersionOptions {
4
+ /**
5
+ * The node version to use.
6
+ * Supports aliases like `lts/*`, `lts/-1`, `current`, `latest`.
7
+ * @default 'lts/*'
8
+ */
9
+ readonly versionSpec?: string;
10
+ /**
11
+ * Create a .nvmrc file.
12
+ * @default true
13
+ */
14
+ readonly dotNvmrc?: boolean;
15
+ /**
16
+ * Create a .node-version file.
17
+ * @default true
18
+ */
19
+ readonly dotNodeVersion?: boolean;
20
+ }
21
+ /**
22
+ * A component that manages Node.js version files (.nvmrc, .node-version).
23
+ */
24
+ export declare class NodeVersion extends Component {
25
+ /**
26
+ * Converts a version spec to a concrete version number.
27
+ * Supports aliases like `lts/*`, `lts/-1`, `lts/iron`, `current`, `latest`, `node`.
28
+ * @param versionSpec The version spec or alias to convert
29
+ * @returns The resolved major version number
30
+ */
31
+ static specToVersion(versionSpec: string): string;
32
+ /**
33
+ * The resolved Node.js major version
34
+ * */
35
+ readonly version: string;
36
+ constructor(scope: IConstruct, options?: NodeVersionOptions);
37
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NodeVersion = void 0;
4
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
+ const projen_1 = require("projen");
6
+ const resources_1 = require("../util/resources");
7
+ /**
8
+ * A component that manages Node.js version files (.nvmrc, .node-version).
9
+ */
10
+ class NodeVersion extends projen_1.Component {
11
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "mrpj.components.NodeVersion", version: "0.2.11" };
12
+ /**
13
+ * Converts a version spec to a concrete version number.
14
+ * Supports aliases like `lts/*`, `lts/-1`, `lts/iron`, `current`, `latest`, `node`.
15
+ * @param versionSpec The version spec or alias to convert
16
+ * @returns The resolved major version number
17
+ */
18
+ static specToVersion(versionSpec) {
19
+ return isAlias(versionSpec) ? convertAliasToVersion(versionSpec) : versionSpec;
20
+ }
21
+ /**
22
+ * The resolved Node.js major version
23
+ * */
24
+ version;
25
+ constructor(scope, options = {}) {
26
+ super(scope);
27
+ const versionSpec = options.versionSpec ?? 'lts/*';
28
+ this.version = NodeVersion.specToVersion(versionSpec);
29
+ const lines = [`v${this.version}`, ''];
30
+ if (options.dotNvmrc ?? true) {
31
+ new projen_1.TextFile(this.project, '.nvmrc', { lines });
32
+ this.project.addPackageIgnore('.nvmrc');
33
+ }
34
+ if (options.dotNodeVersion ?? true) {
35
+ new projen_1.TextFile(this.project, '.node-version', { lines });
36
+ this.project.addPackageIgnore('.node-version');
37
+ }
38
+ }
39
+ }
40
+ exports.NodeVersion = NodeVersion;
41
+ function isAlias(versionSpec) {
42
+ return versionSpec.startsWith('lts/') || ['current', 'latest', 'node'].includes(versionSpec);
43
+ }
44
+ function getVersionFromAlias(versionSpec) {
45
+ const allVersions = (0, resources_1.jsonResource)('node-versions.json');
46
+ if (['current', 'latest', 'node'].includes(versionSpec)) {
47
+ return allVersions[allVersions.length - 1]?.major;
48
+ }
49
+ const ltsVersions = Object.fromEntries(allVersions
50
+ .filter(x => x.lts && x.stable === true)
51
+ .map(x => [x.lts.toLowerCase(), x]));
52
+ const alias = versionSpec.split('lts/')[1]?.toLowerCase();
53
+ const byMajor = Object.values(ltsVersions);
54
+ if (alias === '*') {
55
+ return byMajor[byMajor.length - 1]?.major;
56
+ }
57
+ const n = Number(alias);
58
+ if (n < 0) {
59
+ return byMajor[byMajor.length - 1 + n]?.major;
60
+ }
61
+ return ltsVersions[alias]?.major;
62
+ }
63
+ function convertAliasToVersion(versionSpec) {
64
+ const version = getVersionFromAlias(versionSpec);
65
+ if (!version) {
66
+ throw new Error(`Could not find Node.js version for alias: ${versionSpec}`);
67
+ }
68
+ return version;
69
+ }
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm9kZVZlcnNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9Ob2RlVmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsbUNBQTZDO0FBRTdDLGlEQUFpRDtBQXFCakQ7O0dBRUc7QUFDSCxNQUFhLFdBQVksU0FBUSxrQkFBUzs7SUFFeEM7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQW1CO1FBQzdDLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO0lBQ2pGLENBQUM7SUFFRDs7U0FFSztJQUNXLE9BQU8sQ0FBUztJQUVoQyxZQUFtQixLQUFpQixFQUFFLFVBQThCLEVBQUU7UUFDcEUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXRELE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFdkMsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzdCLElBQUksaUJBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsY0FBYyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ25DLElBQUksaUJBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQzs7QUFqQ0gsa0NBa0NDO0FBR0QsU0FBUyxPQUFPLENBQUMsV0FBbUI7SUFDbEMsT0FBTyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDL0YsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsV0FBbUI7SUFDOUMsTUFBTSxXQUFXLEdBQUcsSUFBQSx3QkFBWSxFQUFvQixvQkFBb0IsQ0FBQyxDQUFDO0lBRTFFLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQ3hELE9BQU8sV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQ25ELENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBb0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXO1NBQ2hGLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUM7U0FDdkMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV4QyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBRTFELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDbEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDM0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNWLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUMvQyxDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQ25DLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLFdBQW1CO0lBQ2hELE1BQU0sT0FBTyxHQUFHLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IENvbXBvbmVudCwgVGV4dEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHR5cGUgeyBOb2RlVmVyc2lvblNwZWMgfSBmcm9tICcuL3ByaXZhdGUnO1xuaW1wb3J0IHsganNvblJlc291cmNlIH0gZnJvbSAnLi4vdXRpbC9yZXNvdXJjZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVWZXJzaW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbm9kZSB2ZXJzaW9uIHRvIHVzZS5cbiAgICogU3VwcG9ydHMgYWxpYXNlcyBsaWtlIGBsdHMvKmAsIGBsdHMvLTFgLCBgY3VycmVudGAsIGBsYXRlc3RgLlxuICAgKiBAZGVmYXVsdCAnbHRzLyonXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uU3BlYz86IHN0cmluZztcbiAgLyoqXG4gICAqIENyZWF0ZSBhIC5udm1yYyBmaWxlLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBkb3ROdm1yYz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDcmVhdGUgYSAubm9kZS12ZXJzaW9uIGZpbGUuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGRvdE5vZGVWZXJzaW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0aGF0IG1hbmFnZXMgTm9kZS5qcyB2ZXJzaW9uIGZpbGVzICgubnZtcmMsIC5ub2RlLXZlcnNpb24pLlxuICovXG5leHBvcnQgY2xhc3MgTm9kZVZlcnNpb24gZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIHZlcnNpb24gc3BlYyB0byBhIGNvbmNyZXRlIHZlcnNpb24gbnVtYmVyLlxuICAgKiBTdXBwb3J0cyBhbGlhc2VzIGxpa2UgYGx0cy8qYCwgYGx0cy8tMWAsIGBsdHMvaXJvbmAsIGBjdXJyZW50YCwgYGxhdGVzdGAsIGBub2RlYC5cbiAgICogQHBhcmFtIHZlcnNpb25TcGVjIFRoZSB2ZXJzaW9uIHNwZWMgb3IgYWxpYXMgdG8gY29udmVydFxuICAgKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgbWFqb3IgdmVyc2lvbiBudW1iZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3BlY1RvVmVyc2lvbih2ZXJzaW9uU3BlYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXNBbGlhcyh2ZXJzaW9uU3BlYykgPyBjb252ZXJ0QWxpYXNUb1ZlcnNpb24odmVyc2lvblNwZWMpIDogdmVyc2lvblNwZWM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlc29sdmVkIE5vZGUuanMgbWFqb3IgdmVyc2lvblxuICAgKiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogSUNvbnN0cnVjdCwgb3B0aW9uczogTm9kZVZlcnNpb25PcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihzY29wZSk7XG5cbiAgICBjb25zdCB2ZXJzaW9uU3BlYyA9IG9wdGlvbnMudmVyc2lvblNwZWMgPz8gJ2x0cy8qJztcbiAgICB0aGlzLnZlcnNpb24gPSBOb2RlVmVyc2lvbi5zcGVjVG9WZXJzaW9uKHZlcnNpb25TcGVjKTtcblxuICAgIGNvbnN0IGxpbmVzID0gW2B2JHt0aGlzLnZlcnNpb259YCwgJyddO1xuXG4gICAgaWYgKG9wdGlvbnMuZG90TnZtcmMgPz8gdHJ1ZSkge1xuICAgICAgbmV3IFRleHRGaWxlKHRoaXMucHJvamVjdCwgJy5udm1yYycsIHsgbGluZXMgfSk7XG4gICAgICB0aGlzLnByb2plY3QuYWRkUGFja2FnZUlnbm9yZSgnLm52bXJjJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmRvdE5vZGVWZXJzaW9uID8/IHRydWUpIHtcbiAgICAgIG5ldyBUZXh0RmlsZSh0aGlzLnByb2plY3QsICcubm9kZS12ZXJzaW9uJywgeyBsaW5lcyB9KTtcbiAgICAgIHRoaXMucHJvamVjdC5hZGRQYWNrYWdlSWdub3JlKCcubm9kZS12ZXJzaW9uJyk7XG4gICAgfVxuICB9XG59XG5cblxuZnVuY3Rpb24gaXNBbGlhcyh2ZXJzaW9uU3BlYzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiB2ZXJzaW9uU3BlYy5zdGFydHNXaXRoKCdsdHMvJykgfHwgWydjdXJyZW50JywgJ2xhdGVzdCcsICdub2RlJ10uaW5jbHVkZXModmVyc2lvblNwZWMpO1xufVxuXG5mdW5jdGlvbiBnZXRWZXJzaW9uRnJvbUFsaWFzKHZlcnNpb25TcGVjOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBhbGxWZXJzaW9ucyA9IGpzb25SZXNvdXJjZTxOb2RlVmVyc2lvblNwZWNbXT4oJ25vZGUtdmVyc2lvbnMuanNvbicpO1xuXG4gIGlmIChbJ2N1cnJlbnQnLCAnbGF0ZXN0JywgJ25vZGUnXS5pbmNsdWRlcyh2ZXJzaW9uU3BlYykpIHtcbiAgICByZXR1cm4gYWxsVmVyc2lvbnNbYWxsVmVyc2lvbnMubGVuZ3RoIC0xXT8ubWFqb3I7XG4gIH1cblxuICBjb25zdCBsdHNWZXJzaW9uczogUmVjb3JkPHN0cmluZywgTm9kZVZlcnNpb25TcGVjPiA9IE9iamVjdC5mcm9tRW50cmllcyhhbGxWZXJzaW9uc1xuICAgIC5maWx0ZXIoeCA9PiB4Lmx0cyAmJiB4LnN0YWJsZSA9PT0gdHJ1ZSlcbiAgICAubWFwKHggPT4gW3gubHRzIS50b0xvd2VyQ2FzZSgpLCB4XSkpO1xuXG4gIGNvbnN0IGFsaWFzID0gdmVyc2lvblNwZWMuc3BsaXQoJ2x0cy8nKVsxXT8udG9Mb3dlckNhc2UoKTtcblxuICBjb25zdCBieU1ham9yID0gT2JqZWN0LnZhbHVlcyhsdHNWZXJzaW9ucyk7XG4gIGlmIChhbGlhcyA9PT0gJyonKSB7XG4gICAgcmV0dXJuIGJ5TWFqb3JbYnlNYWpvci5sZW5ndGggLTFdPy5tYWpvcjtcbiAgfVxuXG4gIGNvbnN0IG4gPSBOdW1iZXIoYWxpYXMpO1xuICBpZiAobiA8IDApIHtcbiAgICByZXR1cm4gYnlNYWpvcltieU1ham9yLmxlbmd0aCAtMSArIG5dPy5tYWpvcjtcbiAgfVxuXG4gIHJldHVybiBsdHNWZXJzaW9uc1thbGlhc10/Lm1ham9yO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0QWxpYXNUb1ZlcnNpb24odmVyc2lvblNwZWM6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHZlcnNpb24gPSBnZXRWZXJzaW9uRnJvbUFsaWFzKHZlcnNpb25TcGVjKTtcbiAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBOb2RlLmpzIHZlcnNpb24gZm9yIGFsaWFzOiAke3ZlcnNpb25TcGVjfWApO1xuICB9XG5cbiAgcmV0dXJuIHZlcnNpb247XG59XG4iXX0=
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- var _a;
3
2
  Object.defineProperty(exports, "__esModule", { value: true });
4
3
  exports.SelfMutationOnForks = void 0;
5
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
@@ -20,6 +19,7 @@ const projen_1 = require("projen");
20
19
  * This enables automated fixes for common projen-related issues on fork PRs.
21
20
  */
22
21
  class SelfMutationOnForks {
22
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "mrpj.components.SelfMutationOnForks", version: "0.2.11" };
23
23
  constructor(project, options = {}) {
24
24
  const cicd = projen_1.github.GitHub.of(project);
25
25
  if (!cicd)
@@ -93,9 +93,7 @@ class SelfMutationOnForks {
93
93
  }
94
94
  }
95
95
  exports.SelfMutationOnForks = SelfMutationOnForks;
96
- _a = JSII_RTTI_SYMBOL_1;
97
- SelfMutationOnForks[_a] = { fqn: "mrpj.components.SelfMutationOnForks", version: "0.2.9" };
98
96
  function conditionalSteps(cond, ...steps) {
99
97
  return steps.flatMap(s => s).map(s => ({ ...s, if: s.if ?? cond }));
100
98
  }
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsZk11dGF0aW9uT25Gb3Jrcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL1NlbGZNdXRhdGlvbk9uRm9ya3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxtQ0FBMkM7QUFhM0M7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFhLG1CQUFtQjtJQUM5QixZQUFZLE9BQWdCLEVBQUUsVUFBc0MsRUFBRTtRQUNwRSxNQUFNLElBQUksR0FBRyxlQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFFbEIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFFM0IsK0NBQStDO1FBQy9DLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUN2QixrQkFBUyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUN4QyxDQUFDO1FBRUYsb0VBQW9FO1FBQ3BFLCtEQUErRDtRQUMvRCxNQUFNLFlBQVksR0FBRyxJQUFJLEVBQUUsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hELFlBQVksRUFBRSxFQUFFLENBQUM7WUFDZixXQUFXLEVBQUU7Z0JBQ1gsU0FBUyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztnQkFDL0IsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDO2FBQ3JCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsWUFBWSxFQUFFLE1BQU0sQ0FBQyxlQUFlLEVBQUU7WUFDcEMsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDO1lBQ3pCLEVBQUUsRUFBRSx3R0FBd0c7WUFDNUcsV0FBVyxFQUFFO2dCQUNYLFFBQVEsRUFBRSxlQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJO2FBQzlDO1lBQ0QsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQ2hDLEtBQUssRUFBRTtnQkFDTDtvQkFDRSxJQUFJLEVBQUUsZ0JBQWdCO29CQUN0QixFQUFFLEVBQUUsZ0JBQWdCO29CQUNwQixlQUFlLEVBQUUsSUFBSTtvQkFDckIsSUFBSSxFQUFFLDJFQUEyRTtvQkFDakYsSUFBSSxFQUFFO3dCQUNKLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLElBQUksRUFBRSxZQUFZO3dCQUNsQixJQUFJLEVBQUUsb0JBQW9CO3FCQUMzQjtpQkFDRjtnQkFDRCxHQUFHLGdCQUFnQixDQUNqQiw2Q0FBNkMsRUFDN0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFDakMsZUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7b0JBQzVCLElBQUksRUFBRSxhQUFhO29CQUNuQixJQUFJLEVBQUU7d0JBQ0osVUFBVSxFQUFFLDREQUE0RDt3QkFDeEUsR0FBRyxFQUFFLDhDQUE4Qzt3QkFDbkQsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRO3FCQUN2QztpQkFDRixDQUFDLEVBQ0Y7b0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjtvQkFDekIsR0FBRyxFQUFFO3dCQUNILFFBQVE7d0JBQ1IsbURBQW1EO3dCQUNuRCwrQkFBK0I7d0JBQy9CLFVBQVU7d0JBQ1YsSUFBSTt3QkFDSiw0Q0FBNEM7d0JBQzVDLHNFQUFzRTt3QkFDdEUsNERBQTREO3dCQUM1RCwwQ0FBMEM7d0JBQzFDLFVBQVU7d0JBQ1YsSUFBSTt3QkFDSix5Q0FBeUM7d0JBQ3pDLDZDQUE2Qzt3QkFDN0MsK0JBQStCO3dCQUMvQixVQUFVO3dCQUNWLElBQUk7d0JBQ0osV0FBVzt3QkFDWCx5Q0FBeUM7d0JBQ3pDLFVBQVU7cUJBQ1gsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2lCQUNiLENBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBaEZILGtEQWlGQzs7O0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsR0FBRyxLQUFtRTtJQUM1RyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb2plY3QgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgSnNvblBhdGNoLCBnaXRodWIgfSBmcm9tICdwcm9qZW4nO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHNlbGYtbXV0YXRpb24gYmVoYXZpb3Igb24gZm9ya3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxmTXV0YXRpb25PbkZvcmtzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCBuYW1lIHRvIHVzZSBmb3IgdGhlIHdvcmtmbG93XG4gICAqIEBkZWZhdWx0IC0gbm8gZW52aXJvbm1lbnQgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIEdpdEh1YiB3b3JrZmxvd3MgdG8gZW5hYmxlIHNlbGYtbXV0YXRpb24gb24gZm9yayBwdWxsIHJlcXVlc3RzLlxuICpcbiAqIFRoaXMgY2xhc3Mgc2V0cyB1cCBhIHdvcmtmbG93IHRoYXQgd2lsbCBhdXRvbWF0aWNhbGx5IGFwcGx5IHByb2plbi1nZW5lcmF0ZWQgY2hhbmdlc1xuICogd2hlbiBhIGJ1aWxkIGZhaWxzIGR1ZSB0byBvdXRkYXRlZCBnZW5lcmF0ZWQgZmlsZXMuIFRoZSB3b3JrZmxvdzpcbiAqXG4gKiAxLiBSdW5zIHdoZW4gdGhlIGJ1aWxkIHdvcmtmbG93IGZhaWxzIG9uIGEgUFJcbiAqIDIuIERvd25sb2FkcyBhbnkgcGF0Y2ggZmlsZSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBmYWlsZWQgYnVpbGRcbiAqIDMuIEF1dGhlbnRpY2F0ZXMgdXNpbmcgR2l0SHViIEFwcCBjcmVkZW50aWFsc1xuICogNC4gQ2hlY2tzIG91dCB0aGUgUFIgYnJhbmNoXG4gKiA1LiBBcHBsaWVzIHRoZSBwYXRjaCBpZiBpdCBleGlzdHMgYW5kIGNhbiBiZSBhcHBsaWVkIGNsZWFubHlcbiAqIDYuIENvbW1pdHMgYW5kIHB1c2hlcyB0aGUgY2hhbmdlcyBiYWNrIHRvIHRoZSBQUlxuICpcbiAqIFRoaXMgZW5hYmxlcyBhdXRvbWF0ZWQgZml4ZXMgZm9yIGNvbW1vbiBwcm9qZW4tcmVsYXRlZCBpc3N1ZXMgb24gZm9yayBQUnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWxmTXV0YXRpb25PbkZvcmtzIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogU2VsZk11dGF0aW9uT25Gb3Jrc09wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGNpY2QgPSBnaXRodWIuR2l0SHViLm9mKHByb2plY3QpO1xuICAgIGlmICghY2ljZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgYnVpbGRXb3JrZmxvdyA9IGNpY2QudHJ5RmluZFdvcmtmbG93KCdidWlsZCcpO1xuICAgIGlmICghYnVpbGRXb3JrZmxvdykgcmV0dXJuO1xuXG4gICAgLy8gVXBkYXRlIGNvbmRpdGlvbiB0byBydW4gb24gYWxsIHB1bGwgcmVxdWVzdHNcbiAgICBidWlsZFdvcmtmbG93LmZpbGU/LnBhdGNoKFxuICAgICAgSnNvblBhdGNoLnJlbW92ZSgnL2pvYnMvc2VsZi1tdXRhdGlvbicpLFxuICAgICk7XG5cbiAgICAvLyBBZGQgYSBuZXcgc2VsZiBtdXRhdGlvbiB3b3JrZmxvdyB0aGF0IHJ1bnMgb24gY29tcGxldGlvbiBvZiBidWlsZFxuICAgIC8vIGFuZCBpZiB0aGUgYnVpbGQgZmFpbGVkIGFuZCB0aGVyZSBpcyBhIHBhdGNoLCB1cGRhdGVzIHRoZSBQUlxuICAgIGNvbnN0IHNlbGZNdXRhdGlvbiA9IGNpY2Q/LmFkZFdvcmtmbG93KCdzZWxmLW11dGF0aW9uJyk7XG4gICAgc2VsZk11dGF0aW9uPy5vbih7XG4gICAgICB3b3JrZmxvd1J1bjoge1xuICAgICAgICB3b3JrZmxvd3M6IFtidWlsZFdvcmtmbG93Lm5hbWVdLFxuICAgICAgICB0eXBlczogWydjb21wbGV0ZWQnXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBzZWxmTXV0YXRpb24/LmFkZEpvYignc2VsZi1tdXRhdGlvbicsIHtcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBpZjogXCJnaXRodWIuZXZlbnQud29ya2Zsb3dfcnVuLmNvbmNsdXNpb24gPT0gJ2ZhaWx1cmUnICYmIGdpdGh1Yi5ldmVudC53b3JrZmxvd19ydW4uZXZlbnQgPT0gJ3B1bGxfcmVxdWVzdCdcIixcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBnaXRodWIud29ya2Zsb3dzLkpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRG93bmxvYWQgcGF0Y2gnLFxuICAgICAgICAgIGlkOiAnZG93bmxvYWRfcGF0Y2gnLFxuICAgICAgICAgIGNvbnRpbnVlT25FcnJvcjogdHJ1ZSxcbiAgICAgICAgICB1c2VzOiAnZGF3aWRkNi9hY3Rpb24tZG93bmxvYWQtYXJ0aWZhY3RAYWM2NmI0M2YwZTZhMzQ2MjM0ZGQ2NWQ0ZDBjOGZiYjMxY2IzMTZlNScsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgcnVuX2lkOiAnJHt7IGdpdGh1Yi5ldmVudC53b3JrZmxvd19ydW4uaWQgfX0nLFxuICAgICAgICAgICAgbmFtZTogJ3JlcG8ucGF0Y2gnLFxuICAgICAgICAgICAgcGF0aDogJyR7eyBydW5uZXIudGVtcCB9fScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uY29uZGl0aW9uYWxTdGVwcyhcbiAgICAgICAgICAnc3RlcHMuZG93bmxvYWRfcGF0Y2gub3V0Y29tZSA9PSBcXCdzdWNjZXNzXFwnJyxcbiAgICAgICAgICBjaWNkLnByb2plbkNyZWRlbnRpYWxzLnNldHVwU3RlcHMsXG4gICAgICAgICAgZ2l0aHViLldvcmtmbG93U3RlcHMuY2hlY2tvdXQoe1xuICAgICAgICAgICAgbmFtZTogJ0NoZWNrb3V0IFBSJyxcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgcmVwb3NpdG9yeTogJyR7eyBnaXRodWIuZXZlbnQud29ya2Zsb3dfcnVuLmhlYWRfcmVwb3NpdG9yeS5mdWxsX25hbWUgfX0nLFxuICAgICAgICAgICAgICByZWY6ICcke3sgZ2l0aHViLmV2ZW50LndvcmtmbG93X3J1bi5oZWFkX2JyYW5jaCB9fScsXG4gICAgICAgICAgICAgIHRva2VuOiBjaWNkLnByb2plbkNyZWRlbnRpYWxzLnRva2VuUmVmLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnQXBwbHkgcGF0Y2ggdG8gUFInLFxuICAgICAgICAgICAgcnVuOiBbXG4gICAgICAgICAgICAgICdzZXQgLWUnLFxuICAgICAgICAgICAgICAnaWYgWyAhIC1mIFwiJHt7IHJ1bm5lci50ZW1wIH19L3JlcG8ucGF0Y2hcIiBdOyB0aGVuJyxcbiAgICAgICAgICAgICAgJyAgZWNobyBcIlBhdGNoIGZpbGUgbm90IGZvdW5kXCInLFxuICAgICAgICAgICAgICAnICBleGl0IDEnLFxuICAgICAgICAgICAgICAnZmknLFxuICAgICAgICAgICAgICAnZ2l0IGNvbmZpZyB1c2VyLm5hbWUgXCJnaXRodWItYWN0aW9uc1tib3RdXCInLFxuICAgICAgICAgICAgICAnZ2l0IGNvbmZpZyB1c2VyLmVtYWlsIFwiZ2l0aHViLWFjdGlvbnNbYm90XUB1c2Vycy5ub3JlcGx5LmdpdGh1Yi5jb21cIicsXG4gICAgICAgICAgICAgICdpZiAhIGdpdCBhcHBseSAtLWNoZWNrICR7eyBydW5uZXIudGVtcCB9fS9yZXBvLnBhdGNoOyB0aGVuJyxcbiAgICAgICAgICAgICAgJyAgZWNobyBcIlBhdGNoIGNhbm5vdCBiZSBhcHBsaWVkIGNsZWFubHlcIicsXG4gICAgICAgICAgICAgICcgIGV4aXQgMScsXG4gICAgICAgICAgICAgICdmaScsXG4gICAgICAgICAgICAgICdnaXQgYXBwbHkgJHt7IHJ1bm5lci50ZW1wIH19L3JlcG8ucGF0Y2gnLFxuICAgICAgICAgICAgICAnaWYgWyAteiBcIiQoZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbilcIiBdOyB0aGVuJyxcbiAgICAgICAgICAgICAgJyAgZWNobyBcIk5vIGNoYW5nZXMgdG8gY29tbWl0XCInLFxuICAgICAgICAgICAgICAnICBleGl0IDAnLFxuICAgICAgICAgICAgICAnZmknLFxuICAgICAgICAgICAgICAnZ2l0IGFkZCAuJyxcbiAgICAgICAgICAgICAgJ2dpdCBjb21taXQgLXMgLW0gXCJjaG9yZTogc2VsZiBtdXRhdGlvblwiJyxcbiAgICAgICAgICAgICAgJ2dpdCBwdXNoJyxcbiAgICAgICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29uZGl0aW9uYWxTdGVwcyhjb25kOiBzdHJpbmcsIC4uLnN0ZXBzOiBBcnJheTxnaXRodWIud29ya2Zsb3dzLkpvYlN0ZXAgfCBnaXRodWIud29ya2Zsb3dzLkpvYlN0ZXBbXT4pOiBnaXRodWIud29ya2Zsb3dzLkpvYlN0ZXBbXSB7XG4gIHJldHVybiBzdGVwcy5mbGF0TWFwKHMgPT4gcykubWFwKHMgPT4gKHsgLi4ucywgaWY6IHMuaWYgPz8gY29uZCB9KSk7XG59XG4iXX0=
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsZk11dGF0aW9uT25Gb3Jrcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL1NlbGZNdXRhdGlvbk9uRm9ya3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLG1DQUEyQztBQWEzQzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQWEsbUJBQW1COztJQUM5QixZQUFZLE9BQWdCLEVBQUUsVUFBc0MsRUFBRTtRQUNwRSxNQUFNLElBQUksR0FBRyxlQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFFbEIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFFM0IsK0NBQStDO1FBQy9DLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUN2QixrQkFBUyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUN4QyxDQUFDO1FBRUYsb0VBQW9FO1FBQ3BFLCtEQUErRDtRQUMvRCxNQUFNLFlBQVksR0FBRyxJQUFJLEVBQUUsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hELFlBQVksRUFBRSxFQUFFLENBQUM7WUFDZixXQUFXLEVBQUU7Z0JBQ1gsU0FBUyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztnQkFDL0IsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDO2FBQ3JCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsWUFBWSxFQUFFLE1BQU0sQ0FBQyxlQUFlLEVBQUU7WUFDcEMsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDO1lBQ3pCLEVBQUUsRUFBRSx3R0FBd0c7WUFDNUcsV0FBVyxFQUFFO2dCQUNYLFFBQVEsRUFBRSxlQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJO2FBQzlDO1lBQ0QsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQ2hDLEtBQUssRUFBRTtnQkFDTDtvQkFDRSxJQUFJLEVBQUUsZ0JBQWdCO29CQUN0QixFQUFFLEVBQUUsZ0JBQWdCO29CQUNwQixlQUFlLEVBQUUsSUFBSTtvQkFDckIsSUFBSSxFQUFFLDJFQUEyRTtvQkFDakYsSUFBSSxFQUFFO3dCQUNKLE1BQU0sRUFBRSxxQ0FBcUM7d0JBQzdDLElBQUksRUFBRSxZQUFZO3dCQUNsQixJQUFJLEVBQUUsb0JBQW9CO3FCQUMzQjtpQkFDRjtnQkFDRCxHQUFHLGdCQUFnQixDQUNqQiw2Q0FBNkMsRUFDN0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFDakMsZUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7b0JBQzVCLElBQUksRUFBRSxhQUFhO29CQUNuQixJQUFJLEVBQUU7d0JBQ0osVUFBVSxFQUFFLDREQUE0RDt3QkFDeEUsR0FBRyxFQUFFLDhDQUE4Qzt3QkFDbkQsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRO3FCQUN2QztpQkFDRixDQUFDLEVBQ0Y7b0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjtvQkFDekIsR0FBRyxFQUFFO3dCQUNILFFBQVE7d0JBQ1IsbURBQW1EO3dCQUNuRCwrQkFBK0I7d0JBQy9CLFVBQVU7d0JBQ1YsSUFBSTt3QkFDSiw0Q0FBNEM7d0JBQzVDLHNFQUFzRTt3QkFDdEUsNERBQTREO3dCQUM1RCwwQ0FBMEM7d0JBQzFDLFVBQVU7d0JBQ1YsSUFBSTt3QkFDSix5Q0FBeUM7d0JBQ3pDLDZDQUE2Qzt3QkFDN0MsK0JBQStCO3dCQUMvQixVQUFVO3dCQUNWLElBQUk7d0JBQ0osV0FBVzt3QkFDWCx5Q0FBeUM7d0JBQ3pDLFVBQVU7cUJBQ1gsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2lCQUNiLENBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBaEZILGtEQWlGQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsSUFBWSxFQUFFLEdBQUcsS0FBbUU7SUFDNUcsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEpzb25QYXRjaCwgZ2l0aHViIH0gZnJvbSAncHJvamVuJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBzZWxmLW11dGF0aW9uIGJlaGF2aW9yIG9uIGZvcmtzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZk11dGF0aW9uT25Gb3Jrc09wdGlvbnMge1xuICAvKipcbiAgICogRW52aXJvbm1lbnQgbmFtZSB0byB1c2UgZm9yIHRoZSB3b3JrZmxvd1xuICAgKiBAZGVmYXVsdCAtIG5vIGVudmlyb25tZW50IHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJlcyBHaXRIdWIgd29ya2Zsb3dzIHRvIGVuYWJsZSBzZWxmLW11dGF0aW9uIG9uIGZvcmsgcHVsbCByZXF1ZXN0cy5cbiAqXG4gKiBUaGlzIGNsYXNzIHNldHMgdXAgYSB3b3JrZmxvdyB0aGF0IHdpbGwgYXV0b21hdGljYWxseSBhcHBseSBwcm9qZW4tZ2VuZXJhdGVkIGNoYW5nZXNcbiAqIHdoZW4gYSBidWlsZCBmYWlscyBkdWUgdG8gb3V0ZGF0ZWQgZ2VuZXJhdGVkIGZpbGVzLiBUaGUgd29ya2Zsb3c6XG4gKlxuICogMS4gUnVucyB3aGVuIHRoZSBidWlsZCB3b3JrZmxvdyBmYWlscyBvbiBhIFBSXG4gKiAyLiBEb3dubG9hZHMgYW55IHBhdGNoIGZpbGUgZ2VuZXJhdGVkIGR1cmluZyB0aGUgZmFpbGVkIGJ1aWxkXG4gKiAzLiBBdXRoZW50aWNhdGVzIHVzaW5nIEdpdEh1YiBBcHAgY3JlZGVudGlhbHNcbiAqIDQuIENoZWNrcyBvdXQgdGhlIFBSIGJyYW5jaFxuICogNS4gQXBwbGllcyB0aGUgcGF0Y2ggaWYgaXQgZXhpc3RzIGFuZCBjYW4gYmUgYXBwbGllZCBjbGVhbmx5XG4gKiA2LiBDb21taXRzIGFuZCBwdXNoZXMgdGhlIGNoYW5nZXMgYmFjayB0byB0aGUgUFJcbiAqXG4gKiBUaGlzIGVuYWJsZXMgYXV0b21hdGVkIGZpeGVzIGZvciBjb21tb24gcHJvamVuLXJlbGF0ZWQgaXNzdWVzIG9uIGZvcmsgUFJzLlxuICovXG5leHBvcnQgY2xhc3MgU2VsZk11dGF0aW9uT25Gb3JrcyB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IFNlbGZNdXRhdGlvbk9uRm9ya3NPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBjaWNkID0gZ2l0aHViLkdpdEh1Yi5vZihwcm9qZWN0KTtcbiAgICBpZiAoIWNpY2QpIHJldHVybjtcblxuICAgIGNvbnN0IGJ1aWxkV29ya2Zsb3cgPSBjaWNkLnRyeUZpbmRXb3JrZmxvdygnYnVpbGQnKTtcbiAgICBpZiAoIWJ1aWxkV29ya2Zsb3cpIHJldHVybjtcblxuICAgIC8vIFVwZGF0ZSBjb25kaXRpb24gdG8gcnVuIG9uIGFsbCBwdWxsIHJlcXVlc3RzXG4gICAgYnVpbGRXb3JrZmxvdy5maWxlPy5wYXRjaChcbiAgICAgIEpzb25QYXRjaC5yZW1vdmUoJy9qb2JzL3NlbGYtbXV0YXRpb24nKSxcbiAgICApO1xuXG4gICAgLy8gQWRkIGEgbmV3IHNlbGYgbXV0YXRpb24gd29ya2Zsb3cgdGhhdCBydW5zIG9uIGNvbXBsZXRpb24gb2YgYnVpbGRcbiAgICAvLyBhbmQgaWYgdGhlIGJ1aWxkIGZhaWxlZCBhbmQgdGhlcmUgaXMgYSBwYXRjaCwgdXBkYXRlcyB0aGUgUFJcbiAgICBjb25zdCBzZWxmTXV0YXRpb24gPSBjaWNkPy5hZGRXb3JrZmxvdygnc2VsZi1tdXRhdGlvbicpO1xuICAgIHNlbGZNdXRhdGlvbj8ub24oe1xuICAgICAgd29ya2Zsb3dSdW46IHtcbiAgICAgICAgd29ya2Zsb3dzOiBbYnVpbGRXb3JrZmxvdy5uYW1lXSxcbiAgICAgICAgdHlwZXM6IFsnY29tcGxldGVkJ10sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgc2VsZk11dGF0aW9uPy5hZGRKb2IoJ3NlbGYtbXV0YXRpb24nLCB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgaWY6IFwiZ2l0aHViLmV2ZW50LndvcmtmbG93X3J1bi5jb25jbHVzaW9uID09ICdmYWlsdXJlJyAmJiBnaXRodWIuZXZlbnQud29ya2Zsb3dfcnVuLmV2ZW50ID09ICdwdWxsX3JlcXVlc3QnXCIsXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBjb250ZW50czogZ2l0aHViLndvcmtmbG93cy5Kb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICBzdGVwczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0Rvd25sb2FkIHBhdGNoJyxcbiAgICAgICAgICBpZDogJ2Rvd25sb2FkX3BhdGNoJyxcbiAgICAgICAgICBjb250aW51ZU9uRXJyb3I6IHRydWUsXG4gICAgICAgICAgdXNlczogJ2Rhd2lkZDYvYWN0aW9uLWRvd25sb2FkLWFydGlmYWN0QGFjNjZiNDNmMGU2YTM0NjIzNGRkNjVkNGQwYzhmYmIzMWNiMzE2ZTUnLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgIHJ1bl9pZDogJyR7eyBnaXRodWIuZXZlbnQud29ya2Zsb3dfcnVuLmlkIH19JyxcbiAgICAgICAgICAgIG5hbWU6ICdyZXBvLnBhdGNoJyxcbiAgICAgICAgICAgIHBhdGg6ICcke3sgcnVubmVyLnRlbXAgfX0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmNvbmRpdGlvbmFsU3RlcHMoXG4gICAgICAgICAgJ3N0ZXBzLmRvd25sb2FkX3BhdGNoLm91dGNvbWUgPT0gXFwnc3VjY2Vzc1xcJycsXG4gICAgICAgICAgY2ljZC5wcm9qZW5DcmVkZW50aWFscy5zZXR1cFN0ZXBzLFxuICAgICAgICAgIGdpdGh1Yi5Xb3JrZmxvd1N0ZXBzLmNoZWNrb3V0KHtcbiAgICAgICAgICAgIG5hbWU6ICdDaGVja291dCBQUicsXG4gICAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICAgIHJlcG9zaXRvcnk6ICcke3sgZ2l0aHViLmV2ZW50LndvcmtmbG93X3J1bi5oZWFkX3JlcG9zaXRvcnkuZnVsbF9uYW1lIH19JyxcbiAgICAgICAgICAgICAgcmVmOiAnJHt7IGdpdGh1Yi5ldmVudC53b3JrZmxvd19ydW4uaGVhZF9icmFuY2ggfX0nLFxuICAgICAgICAgICAgICB0b2tlbjogY2ljZC5wcm9qZW5DcmVkZW50aWFscy50b2tlblJlZixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ0FwcGx5IHBhdGNoIHRvIFBSJyxcbiAgICAgICAgICAgIHJ1bjogW1xuICAgICAgICAgICAgICAnc2V0IC1lJyxcbiAgICAgICAgICAgICAgJ2lmIFsgISAtZiBcIiR7eyBydW5uZXIudGVtcCB9fS9yZXBvLnBhdGNoXCIgXTsgdGhlbicsXG4gICAgICAgICAgICAgICcgIGVjaG8gXCJQYXRjaCBmaWxlIG5vdCBmb3VuZFwiJyxcbiAgICAgICAgICAgICAgJyAgZXhpdCAxJyxcbiAgICAgICAgICAgICAgJ2ZpJyxcbiAgICAgICAgICAgICAgJ2dpdCBjb25maWcgdXNlci5uYW1lIFwiZ2l0aHViLWFjdGlvbnNbYm90XVwiJyxcbiAgICAgICAgICAgICAgJ2dpdCBjb25maWcgdXNlci5lbWFpbCBcImdpdGh1Yi1hY3Rpb25zW2JvdF1AdXNlcnMubm9yZXBseS5naXRodWIuY29tXCInLFxuICAgICAgICAgICAgICAnaWYgISBnaXQgYXBwbHkgLS1jaGVjayAke3sgcnVubmVyLnRlbXAgfX0vcmVwby5wYXRjaDsgdGhlbicsXG4gICAgICAgICAgICAgICcgIGVjaG8gXCJQYXRjaCBjYW5ub3QgYmUgYXBwbGllZCBjbGVhbmx5XCInLFxuICAgICAgICAgICAgICAnICBleGl0IDEnLFxuICAgICAgICAgICAgICAnZmknLFxuICAgICAgICAgICAgICAnZ2l0IGFwcGx5ICR7eyBydW5uZXIudGVtcCB9fS9yZXBvLnBhdGNoJyxcbiAgICAgICAgICAgICAgJ2lmIFsgLXogXCIkKGdpdCBzdGF0dXMgLS1wb3JjZWxhaW4pXCIgXTsgdGhlbicsXG4gICAgICAgICAgICAgICcgIGVjaG8gXCJObyBjaGFuZ2VzIHRvIGNvbW1pdFwiJyxcbiAgICAgICAgICAgICAgJyAgZXhpdCAwJyxcbiAgICAgICAgICAgICAgJ2ZpJyxcbiAgICAgICAgICAgICAgJ2dpdCBhZGQgLicsXG4gICAgICAgICAgICAgICdnaXQgY29tbWl0IC1zIC1tIFwiY2hvcmU6IHNlbGYgbXV0YXRpb25cIicsXG4gICAgICAgICAgICAgICdnaXQgcHVzaCcsXG4gICAgICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbmRpdGlvbmFsU3RlcHMoY29uZDogc3RyaW5nLCAuLi5zdGVwczogQXJyYXk8Z2l0aHViLndvcmtmbG93cy5Kb2JTdGVwIHwgZ2l0aHViLndvcmtmbG93cy5Kb2JTdGVwW10+KTogZ2l0aHViLndvcmtmbG93cy5Kb2JTdGVwW10ge1xuICByZXR1cm4gc3RlcHMuZmxhdE1hcChzID0+IHMpLm1hcChzID0+ICh7IC4uLnMsIGlmOiBzLmlmID8/IGNvbmQgfSkpO1xufVxuIl19
@@ -1 +1,2 @@
1
+ export * from './NodeVersion';
1
2
  export * from './SelfMutationOnForks';
@@ -14,5 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./NodeVersion"), exports);
17
18
  __exportStar(require("./SelfMutationOnForks"), exports);
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0RBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9TZWxmTXV0YXRpb25PbkZvcmtzJztcbiJdfQ==
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQThCO0FBQzlCLHdEQUFzQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vTm9kZVZlcnNpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9TZWxmTXV0YXRpb25PbkZvcmtzJztcbiJdfQ==
@@ -0,0 +1,10 @@
1
+ export interface NodeVersionSpec {
2
+ /** The major version number */
3
+ readonly major: string;
4
+ /** The full version string */
5
+ readonly version: string;
6
+ /** Whether this version is stable */
7
+ readonly stable?: boolean;
8
+ /** The LTS codename, if applicable */
9
+ readonly lts?: string;
10
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3ByaXZhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgTm9kZVZlcnNpb25TcGVjIHtcbiAgLyoqIFRoZSBtYWpvciB2ZXJzaW9uIG51bWJlciAqL1xuICByZWFkb25seSBtYWpvcjogc3RyaW5nO1xuICAvKiogVGhlIGZ1bGwgdmVyc2lvbiBzdHJpbmcgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGlzIHZlcnNpb24gaXMgc3RhYmxlICovXG4gIHJlYWRvbmx5IHN0YWJsZT86IGJvb2xlYW47XG4gIC8qKiBUaGUgTFRTIGNvZGVuYW1lLCBpZiBhcHBsaWNhYmxlICovXG4gIHJlYWRvbmx5IGx0cz86IHN0cmluZztcbn1cbiJdfQ==
@@ -3,6 +3,12 @@ import type { awscdk, cdk, github, GitOptions, GroupRunnerOptions, IgnoreFileOpt
3
3
  * ConstructProjectOptions
4
4
  */
5
5
  export interface ConstructProjectOptions {
6
+ /**
7
+ * Automatically adds an `awscdk.SingletonFunction` for each `.singleton-lambda.ts` handler in your source tree. If this is disabled, you can manually add an `awscdk.AutoDiscover` component to your project.
8
+ * @default true
9
+ * @stability stable
10
+ */
11
+ readonly singletonLambdaAutoDiscover?: boolean;
6
12
  /**
7
13
  * Common options for all AWS Lambda functions.
8
14
  * @default - default options
@@ -42,7 +48,7 @@ export interface ConstructProjectOptions {
42
48
  /**
43
49
  * Minimum version of the `constructs` library to depend on.
44
50
  * @default - for CDK 1.x the default is "3.2.27", for CDK 2.x the default is
45
- "10.0.5".
51
+ "10.5.1".
46
52
  * @stability stable
47
53
  */
48
54
  readonly constructsVersion?: string;
@@ -63,17 +69,9 @@ export interface ConstructProjectOptions {
63
69
  * @stability stable
64
70
  */
65
71
  readonly cdkCliVersion?: string;
66
- /**
67
- * Install the assertions library?
68
- * Only needed for CDK 1.x. If using CDK 2.x then
69
- * assertions is already included in 'aws-cdk-lib'
70
- * @default - will be included by default for AWS CDK >= 1.111.0 < 2.0.0
71
- * @stability stable
72
- */
73
- readonly cdkAssertions?: boolean;
74
72
  /**
75
73
  * Minimum version of the AWS CDK to depend on.
76
- * @default "2.1.0"
74
+ * @default "2.189.1"
77
75
  * @stability stable
78
76
  */
79
77
  readonly cdkVersion: string;
@@ -91,6 +89,14 @@ export interface ConstructProjectOptions {
91
89
  * @stability stable
92
90
  */
93
91
  readonly catalog?: cdk.Catalog;
92
+ /**
93
+ * Level of tsconfig validation jsii should perform on the user-provided tsconfig.
94
+ * Only relevant when the project synthesizes its own tsconfig
95
+ * (i.e. `disableTsconfig` is not set on the TypeScriptProject).
96
+ * @default ValidateTsconfig.STRICT
97
+ * @stability stable
98
+ */
99
+ readonly validateTsconfig?: cdk.ValidateTsconfig;
94
100
  /**
95
101
  * @default "."
96
102
  * @stability stable
@@ -128,9 +134,9 @@ export interface ConstructProjectOptions {
128
134
  * NOTE: The jsii compiler releases since 5.0.0 are not semantically versioned
129
135
  * and should remain on the same minor, so we recommend using a `~` dependency
130
136
  * (e.g. `~5.0.0`).
131
- * @default "~5.8.0"
137
+ * @default "~5.9.0"
132
138
  * @stability stable
133
- * @pjnew "~5.9.0"
139
+ * @pjnew "~6.0.0"
134
140
  */
135
141
  readonly jsiiVersion?: string;
136
142
  /**
@@ -428,7 +434,7 @@ export interface ConstructProjectOptions {
428
434
  /**
429
435
  * Use tasks and github workflows to handle dependency upgrades.
430
436
  * Cannot be used in conjunction with `dependabot`.
431
- * @default true
437
+ * @default - `true` for root projects, `false` for subprojects
432
438
  * @stability stable
433
439
  */
434
440
  readonly depsUpgrade?: boolean;
@@ -445,6 +451,13 @@ export interface ConstructProjectOptions {
445
451
  * @stability stable
446
452
  */
447
453
  readonly dependabot?: boolean;
454
+ /**
455
+ * The name of the main release branch.
456
+ * @default "main"
457
+ * @stability stable
458
+ * @featured true
459
+ */
460
+ readonly defaultReleaseBranch?: string;
448
461
  /**
449
462
  * The copyright years to put in the LICENSE file.
450
463
  * @default - current year
@@ -505,7 +518,7 @@ export interface ConstructProjectOptions {
505
518
  */
506
519
  readonly biome?: boolean;
507
520
  /**
508
- * Automatically approve deps upgrade PRs, allowing them to be merged by mergify (if configued).
521
+ * Automatically approve deps upgrade PRs, allowing them to be merged by mergify (if configured).
509
522
  * Throw if set to true but `autoApproveOptions` are not defined.
510
523
  * @default - true
511
524
  * @stability stable
@@ -532,12 +545,6 @@ export interface ConstructProjectOptions {
532
545
  * @stability stable
533
546
  */
534
547
  readonly artifactsDirectory?: string;
535
- /**
536
- * The name of the main release branch.
537
- * @default "main"
538
- * @stability stable
539
- */
540
- readonly defaultReleaseBranch: string;
541
548
  /**
542
549
  * Github Runner Group selection options.
543
550
  * @stability stable
@@ -761,7 +768,7 @@ export interface ConstructProjectOptions {
761
768
  readonly repository?: string;
762
769
  /**
763
770
  * The version of PNPM to use if using PNPM as a package manager.
764
- * @default "9"
771
+ * @default "10.33.0"
765
772
  * @stability stable
766
773
  */
767
774
  readonly pnpmVersion?: string;
@@ -798,8 +805,9 @@ export interface ConstructProjectOptions {
798
805
  readonly packageName?: string;
799
806
  /**
800
807
  * The Node Package Manager used to execute scripts.
801
- * @default NodePackageManager.YARN_CLASSIC
808
+ * @default - Detected from the calling process or `YARN_CLASSIC` if detection fails.
802
809
  * @stability stable
810
+ * @pjnew $PACKAGE_MANAGER
803
811
  */
804
812
  readonly packageManager?: javascript.NodePackageManager;
805
813
  /**
@@ -897,6 +905,14 @@ export interface ConstructProjectOptions {
897
905
  * @stability stable
898
906
  */
899
907
  readonly entrypoint?: string;
908
+ /**
909
+ * Configure the `devEngines` field in `package.json`.
910
+ * The `devEngines.packageManager` field is automatically populated based on
911
+ * the resolved `packageManager` value. Any fields provided here are merged
912
+ * with the auto-populated `packageManager` entry.
913
+ * @stability stable
914
+ */
915
+ readonly devEngines?: javascript.DevEngines;
900
916
  /**
901
917
  * Build dependencies for this module.
902
918
  * These dependencies will only be
@@ -904,11 +920,11 @@ export interface ConstructProjectOptions {
904
920
  * module is consumed.
905
921
  *
906
922
  * The recommendation is to only specify the module name here (e.g.
907
- * `express`). This will behave similar to `yarn add` or `npm install` in the
923
+ * `express`). This will behave similar to `pnpm add` or `npm install` in the
908
924
  * sense that it will add the module as a dependency to your `package.json`
909
925
  * file with the latest version (`^`). You can specify semver requirements in
910
- * the same syntax passed to `npm i` or `yarn add` (e.g. `express@^2`) and
911
- * this will be what you `package.json` will eventually include.
926
+ * the same syntax passed to `pnpm add` or `npm i` (e.g. `express@^2`) and
927
+ * this will be what your `package.json` will eventually include.
912
928
  * @default []
913
929
  * @stability stable
914
930
  * @featured true
@@ -925,16 +941,26 @@ export interface ConstructProjectOptions {
925
941
  /**
926
942
  * Runtime dependencies of this module.
927
943
  * The recommendation is to only specify the module name here (e.g.
928
- * `express`). This will behave similar to `yarn add` or `npm install` in the
944
+ * `express`). This will behave similar to `pnpm add` or `npm install` in the
929
945
  * sense that it will add the module as a dependency to your `package.json`
930
946
  * file with the latest version (`^`). You can specify semver requirements in
931
- * the same syntax passed to `npm i` or `yarn add` (e.g. `express@^2`) and
932
- * this will be what you `package.json` will eventually include.
947
+ * the same syntax passed to `pnpm add` or `npm i` (e.g. `express@^2`) and
948
+ * this will be what your `package.json` will eventually include.
933
949
  * @default []
934
950
  * @stability stable
935
951
  * @featured true
936
952
  */
937
953
  readonly deps?: Array<string>;
954
+ /**
955
+ * Automatically delete lockfiles from package managers that are not the active one.
956
+ * Only triggered when the lockfile for the configured package
957
+ * manager already exists.
958
+ *
959
+ * This is useful when migrating between package managers to avoid conflicts.
960
+ * @default true
961
+ * @stability stable
962
+ */
963
+ readonly deleteOrphanedLockFiles?: boolean;
938
964
  /**
939
965
  * Options for npm packages using AWS CodeArtifact.
940
966
  * This is required if publishing packages to, or installing scoped packages from AWS CodeArtifact
@@ -955,11 +981,11 @@ export interface ConstructProjectOptions {
955
981
  * your `package.json`.
956
982
  *
957
983
  * The recommendation is to only specify the module name here (e.g.
958
- * `express`). This will behave similar to `yarn add` or `npm install` in the
984
+ * `express`). This will behave similar to `pnpm add` or `npm install` in the
959
985
  * sense that it will add the module as a dependency to your `package.json`
960
986
  * file with the latest version (`^`). You can specify semver requirements in
961
- * the same syntax passed to `npm i` or `yarn add` (e.g. `express@^2`) and
962
- * this will be what you `package.json` will eventually include.
987
+ * the same syntax passed to `pnpm add` or `npm i` (e.g. `express@^2`) and
988
+ * this will be what your `package.json` will eventually include.
963
989
  * @stability stable
964
990
  */
965
991
  readonly bundledDeps?: Array<string>;
@@ -1015,6 +1041,12 @@ export interface ConstructProjectOptions {
1015
1041
  * @stability stable
1016
1042
  */
1017
1043
  readonly allowLibraryDependencies?: boolean;
1044
+ /**
1045
+ * Automatically add the resolved `packageManager` to `devEngines.packageManager` in `package.json`, setting `onFail` to `ignore`.
1046
+ * @default true
1047
+ * @stability stable
1048
+ */
1049
+ readonly addPackageManagerToDevEngines?: boolean;
1018
1050
  /**
1019
1051
  * Enable VSCode integration.
1020
1052
  * Enabled by default for root projects. Disabled for non-root projects.
@@ -1132,6 +1164,12 @@ export interface ConstructProjectOptions {
1132
1164
  * @stability stable
1133
1165
  */
1134
1166
  readonly projenCommand?: string;
1167
+ /**
1168
+ * Generate a project tree file (`.projen/tree.json`) that shows all components and their relationships. Useful for understanding your project structure and debugging.
1169
+ * @default false
1170
+ * @stability stable
1171
+ */
1172
+ readonly projectTree?: boolean;
1135
1173
  /**
1136
1174
  * The parent project, if this project is part of a bigger project.
1137
1175
  * @stability stable