@nikovirtala/projen-constructs 0.0.2 → 0.0.4
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 +4114 -18
- package/API.md +257 -257
- package/README.md +137 -23
- package/lib/components/bundle-lambda-function-code.d.ts +62 -0
- package/lib/components/bundle-lambda-function-code.js +175 -0
- package/lib/components/colima.d.ts +5 -0
- package/lib/components/colima.js +22 -0
- package/lib/components/homebrew.d.ts +12 -0
- package/lib/components/homebrew.js +42 -0
- package/lib/components/index.d.ts +7 -0
- package/lib/components/index.js +24 -0
- package/lib/components/lambda-function-construct-generator.d.ts +30 -0
- package/lib/components/lambda-function-construct-generator.js +195 -0
- package/lib/components/localstack.d.ts +11 -0
- package/lib/components/localstack.js +42 -0
- package/lib/components/typedoc-config.d.ts +78 -0
- package/lib/components/typedoc-config.js +93 -0
- package/lib/components/typedoc.d.ts +18 -0
- package/lib/components/typedoc.js +58 -0
- package/lib/components/vitest-bundled-define-config.d.ts +1 -0
- package/lib/components/vitest-bundled-define-config.js +6 -0
- package/lib/components/vitest.d.ts +87 -0
- package/lib/components/vitest.js +204 -0
- package/lib/config.d.ts +61 -76
- package/lib/config.js +28 -7
- package/lib/index.d.ts +1 -4
- package/lib/index.js +2 -5
- package/lib/projects/awscdk-app.js +38 -0
- package/lib/{awscdk-construct-project.d.ts → projects/awscdk-construct.d.ts} +1 -1
- package/lib/projects/awscdk-construct.js +38 -0
- package/lib/projects/index.d.ts +4 -0
- package/lib/projects/index.js +21 -0
- package/lib/projects/jsii.js +38 -0
- package/lib/projects/typescript.js +39 -0
- package/node_modules/case/LICENSE +22 -0
- package/node_modules/case/README.md +139 -0
- package/node_modules/case/case.d.ts +43 -0
- package/node_modules/case/dist/Case.js +171 -0
- package/node_modules/case/dist/Case.min.js +5 -0
- package/node_modules/case/dist/Case.min.js.map +1 -0
- package/node_modules/case/dist/Case.plus.js +189 -0
- package/node_modules/case/dist/Case.plus.min.js +5 -0
- package/node_modules/case/dist/Case.plus.min.js.map +1 -0
- package/node_modules/case/package.json +58 -0
- package/package.json +10 -2
- package/lib/awscdk-app-project.js +0 -38
- package/lib/awscdk-construct-project.js +0 -38
- package/lib/jsii-project.js +0 -38
- package/lib/typescript-project.js +0 -39
- /package/lib/{awscdk-app-project.d.ts → projects/awscdk-app.d.ts} +0 -0
- /package/lib/{jsii-project.d.ts → projects/jsii.d.ts} +0 -0
- /package/lib/{typescript-project.d.ts → projects/typescript.d.ts} +0 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Component } from "projen/lib/component";
|
|
2
|
+
import { type NodeProject } from "projen/lib/javascript";
|
|
3
|
+
export declare enum Environment {
|
|
4
|
+
EDGE_RUNTIME = "edge-runtime",
|
|
5
|
+
HAPPY_DOM = "happy-dom",
|
|
6
|
+
JSDOM = "jsdom",
|
|
7
|
+
NODE = "node"
|
|
8
|
+
}
|
|
9
|
+
export declare enum Pool {
|
|
10
|
+
FORKS = "forks",
|
|
11
|
+
THREADS = "threads",
|
|
12
|
+
VMFORKS = "vmforks",
|
|
13
|
+
VMTHREADS = "vmthreads"
|
|
14
|
+
}
|
|
15
|
+
export declare enum CoverageProvider {
|
|
16
|
+
ISTANBUL = "istanbul",
|
|
17
|
+
V8 = "v8"
|
|
18
|
+
}
|
|
19
|
+
export declare enum CoverageReporter {
|
|
20
|
+
CLOVER = "clover",
|
|
21
|
+
HTML = "html",
|
|
22
|
+
JSON = "json",
|
|
23
|
+
LCOV = "lcov",
|
|
24
|
+
TEXT = "text"
|
|
25
|
+
}
|
|
26
|
+
export interface VitestConfigOptions {
|
|
27
|
+
readonly include?: Array<string>;
|
|
28
|
+
readonly exclude?: Array<string>;
|
|
29
|
+
readonly environment?: Environment;
|
|
30
|
+
readonly isolate?: boolean;
|
|
31
|
+
readonly pool?: Pool;
|
|
32
|
+
readonly globals?: boolean;
|
|
33
|
+
readonly coverageEnabled?: boolean;
|
|
34
|
+
readonly coverageProvider?: CoverageProvider;
|
|
35
|
+
readonly coverageReporters?: Array<CoverageReporter>;
|
|
36
|
+
readonly coverageDirectory?: string;
|
|
37
|
+
readonly typecheckEnabled?: boolean;
|
|
38
|
+
readonly typecheckChecker?: string;
|
|
39
|
+
readonly typecheckTsconfig?: string;
|
|
40
|
+
readonly passWithNoTests?: boolean;
|
|
41
|
+
readonly bail?: number;
|
|
42
|
+
readonly updateSnapshots?: boolean;
|
|
43
|
+
readonly printConsoleTrace?: boolean;
|
|
44
|
+
readonly slowTestThreshold?: number;
|
|
45
|
+
}
|
|
46
|
+
export interface VitestOptions {
|
|
47
|
+
readonly configFilePath?: string;
|
|
48
|
+
readonly config?: VitestConfigOptions;
|
|
49
|
+
readonly vitestVersion?: string;
|
|
50
|
+
}
|
|
51
|
+
export declare class Vitest extends Component {
|
|
52
|
+
static of(project: NodeProject): Vitest | undefined;
|
|
53
|
+
private readonly configFilePath;
|
|
54
|
+
private readonly include;
|
|
55
|
+
private readonly exclude;
|
|
56
|
+
private readonly isolate;
|
|
57
|
+
private readonly pool;
|
|
58
|
+
private readonly coverageEnabled;
|
|
59
|
+
private readonly typecheckEnabled;
|
|
60
|
+
private readonly typecheckChecker;
|
|
61
|
+
private readonly typecheckTsconfig;
|
|
62
|
+
private readonly passWithNoTests;
|
|
63
|
+
private readonly bail;
|
|
64
|
+
private readonly updateSnapshots;
|
|
65
|
+
private environment;
|
|
66
|
+
private globals;
|
|
67
|
+
private coverageProvider;
|
|
68
|
+
private coverageReporters;
|
|
69
|
+
private coverageDirectory;
|
|
70
|
+
private version;
|
|
71
|
+
private readonly printConsoleTrace;
|
|
72
|
+
private readonly slowTestThreshold;
|
|
73
|
+
constructor(project: NodeProject, options?: VitestOptions);
|
|
74
|
+
preSynthesize(): void;
|
|
75
|
+
addInclude(pattern: string): void;
|
|
76
|
+
addExclude(pattern: string): void;
|
|
77
|
+
configureEnvironment(environment: Environment): void;
|
|
78
|
+
configureCoverageProvider(provider: CoverageProvider): void;
|
|
79
|
+
configureCoverageReporters(reporters: Array<CoverageReporter>): void;
|
|
80
|
+
configureGlobals(): void;
|
|
81
|
+
private updateTsConfig;
|
|
82
|
+
private isTypescriptProject;
|
|
83
|
+
private addTestCommand;
|
|
84
|
+
private synthesizeConfig;
|
|
85
|
+
private renderConfig;
|
|
86
|
+
private renderTestOptions;
|
|
87
|
+
}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Vitest = exports.CoverageReporter = exports.CoverageProvider = exports.Pool = exports.Environment = void 0;
|
|
4
|
+
const path = require("node:path");
|
|
5
|
+
const component_1 = require("projen/lib/component");
|
|
6
|
+
const dependencies_1 = require("projen/lib/dependencies");
|
|
7
|
+
const javascript_1 = require("projen/lib/javascript");
|
|
8
|
+
const textfile_1 = require("projen/lib/textfile");
|
|
9
|
+
var Environment;
|
|
10
|
+
(function (Environment) {
|
|
11
|
+
Environment["EDGE_RUNTIME"] = "edge-runtime";
|
|
12
|
+
Environment["HAPPY_DOM"] = "happy-dom";
|
|
13
|
+
Environment["JSDOM"] = "jsdom";
|
|
14
|
+
Environment["NODE"] = "node";
|
|
15
|
+
})(Environment || (exports.Environment = Environment = {}));
|
|
16
|
+
var Pool;
|
|
17
|
+
(function (Pool) {
|
|
18
|
+
Pool["FORKS"] = "forks";
|
|
19
|
+
Pool["THREADS"] = "threads";
|
|
20
|
+
Pool["VMFORKS"] = "vmforks";
|
|
21
|
+
Pool["VMTHREADS"] = "vmthreads";
|
|
22
|
+
})(Pool || (exports.Pool = Pool = {}));
|
|
23
|
+
var CoverageProvider;
|
|
24
|
+
(function (CoverageProvider) {
|
|
25
|
+
CoverageProvider["ISTANBUL"] = "istanbul";
|
|
26
|
+
CoverageProvider["V8"] = "v8";
|
|
27
|
+
})(CoverageProvider || (exports.CoverageProvider = CoverageProvider = {}));
|
|
28
|
+
var CoverageReporter;
|
|
29
|
+
(function (CoverageReporter) {
|
|
30
|
+
CoverageReporter["CLOVER"] = "clover";
|
|
31
|
+
CoverageReporter["HTML"] = "html";
|
|
32
|
+
CoverageReporter["JSON"] = "json";
|
|
33
|
+
CoverageReporter["LCOV"] = "lcov";
|
|
34
|
+
CoverageReporter["TEXT"] = "text";
|
|
35
|
+
})(CoverageReporter || (exports.CoverageReporter = CoverageReporter = {}));
|
|
36
|
+
class Vitest extends component_1.Component {
|
|
37
|
+
static of(project) {
|
|
38
|
+
const isVitest = (c) => c instanceof Vitest;
|
|
39
|
+
return project.components.find(isVitest);
|
|
40
|
+
}
|
|
41
|
+
constructor(project, options = {}) {
|
|
42
|
+
super(project);
|
|
43
|
+
this.configFilePath = options.configFilePath ?? "vitest.config.ts";
|
|
44
|
+
this.include = new Set(options.config?.include ?? ["**/*.{test,spec}.?(c|m)[jt]s?(x)"]);
|
|
45
|
+
this.exclude = new Set(options.config?.exclude ?? [
|
|
46
|
+
"**/node_modules/**",
|
|
47
|
+
"**/dist/**",
|
|
48
|
+
"**/cypress/**",
|
|
49
|
+
"**/.{idea,git,cache,output,temp}/**",
|
|
50
|
+
"**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.*",
|
|
51
|
+
]);
|
|
52
|
+
this.isolate = options.config?.isolate ?? true;
|
|
53
|
+
this.pool = options.config?.pool ?? Pool.FORKS;
|
|
54
|
+
this.coverageEnabled = options.config?.coverageEnabled ?? true;
|
|
55
|
+
this.typecheckEnabled = options.config?.typecheckEnabled ?? this.isTypescriptProject();
|
|
56
|
+
this.typecheckChecker = options.config?.typecheckChecker ?? "tsc --noEmit";
|
|
57
|
+
this.typecheckTsconfig = options.config?.typecheckTsconfig ?? "tsconfig.dev.json";
|
|
58
|
+
this.passWithNoTests = options.config?.passWithNoTests ?? true;
|
|
59
|
+
this.bail = options.config?.bail ?? 0;
|
|
60
|
+
this.environment = options.config?.environment ?? Environment.NODE;
|
|
61
|
+
this.globals = options.config?.globals ?? false;
|
|
62
|
+
this.coverageProvider = options.config?.coverageProvider ?? CoverageProvider.V8;
|
|
63
|
+
this.coverageReporters = options.config?.coverageReporters ?? [CoverageReporter.TEXT, CoverageReporter.LCOV];
|
|
64
|
+
this.coverageDirectory = options.config?.coverageDirectory ?? "coverage";
|
|
65
|
+
this.version = options.vitestVersion ?? "^4";
|
|
66
|
+
this.updateSnapshots = options.config?.updateSnapshots ?? true;
|
|
67
|
+
this.printConsoleTrace = options.config?.printConsoleTrace ?? true;
|
|
68
|
+
this.slowTestThreshold = options.config?.slowTestThreshold ?? 300;
|
|
69
|
+
project.addDevDeps(`vitest@${this.version}`);
|
|
70
|
+
this.configureCoverageProvider(this.coverageProvider);
|
|
71
|
+
if (this.globals && this.isTypescriptProject() && this.project.tryFindObjectFile(this.typecheckTsconfig)) {
|
|
72
|
+
this.configureGlobals();
|
|
73
|
+
}
|
|
74
|
+
const coverageDirectoryPath = path.posix.join("/", this.coverageDirectory, "/");
|
|
75
|
+
project.npmignore?.exclude(coverageDirectoryPath);
|
|
76
|
+
project.gitignore.exclude(coverageDirectoryPath);
|
|
77
|
+
this.addTestCommand();
|
|
78
|
+
this.synthesizeConfig();
|
|
79
|
+
}
|
|
80
|
+
preSynthesize() {
|
|
81
|
+
super.preSynthesize();
|
|
82
|
+
for (const component of this.project.components) {
|
|
83
|
+
if (component instanceof javascript_1.Jest) {
|
|
84
|
+
throw new Error("vitest cannot be used together with jest");
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
addInclude(pattern) {
|
|
89
|
+
this.include.add(pattern);
|
|
90
|
+
this.synthesizeConfig();
|
|
91
|
+
}
|
|
92
|
+
addExclude(pattern) {
|
|
93
|
+
this.exclude.add(pattern);
|
|
94
|
+
this.synthesizeConfig();
|
|
95
|
+
}
|
|
96
|
+
configureEnvironment(environment) {
|
|
97
|
+
this.environment = environment;
|
|
98
|
+
this.synthesizeConfig();
|
|
99
|
+
}
|
|
100
|
+
configureCoverageProvider(provider) {
|
|
101
|
+
const providerPackages = {
|
|
102
|
+
[CoverageProvider.V8]: `@vitest/coverage-v8@${this.version}`,
|
|
103
|
+
[CoverageProvider.ISTANBUL]: `@vitest/coverage-istanbul@${this.version}`,
|
|
104
|
+
};
|
|
105
|
+
for (const providerPackage of Object.values(providerPackages)) {
|
|
106
|
+
try {
|
|
107
|
+
this.project.deps.removeDependency(providerPackage);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// ignore
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
this.project.deps.addDependency(providerPackages[provider], dependencies_1.DependencyType.DEVENV);
|
|
114
|
+
this.coverageProvider = provider;
|
|
115
|
+
this.synthesizeConfig();
|
|
116
|
+
}
|
|
117
|
+
configureCoverageReporters(reporters) {
|
|
118
|
+
this.coverageReporters = reporters;
|
|
119
|
+
this.synthesizeConfig();
|
|
120
|
+
}
|
|
121
|
+
configureGlobals() {
|
|
122
|
+
this.updateTsConfig();
|
|
123
|
+
this.synthesizeConfig();
|
|
124
|
+
}
|
|
125
|
+
updateTsConfig() {
|
|
126
|
+
const tsconfig = this.project.tryFindObjectFile(this.typecheckTsconfig);
|
|
127
|
+
if (!tsconfig) {
|
|
128
|
+
throw new Error("unable to find tsconfig");
|
|
129
|
+
}
|
|
130
|
+
tsconfig.addToArray("compilerOptions.types", "vitest/globals");
|
|
131
|
+
}
|
|
132
|
+
isTypescriptProject() {
|
|
133
|
+
return this.project.deps.tryGetDependency("typescript") !== undefined;
|
|
134
|
+
}
|
|
135
|
+
addTestCommand() {
|
|
136
|
+
this.project.testTask.exec("vitest run", {
|
|
137
|
+
receiveArgs: true,
|
|
138
|
+
});
|
|
139
|
+
const testWatch = this.project.tasks.tryFind("test:watch");
|
|
140
|
+
if (!testWatch) {
|
|
141
|
+
this.project.addTask("test:watch", {
|
|
142
|
+
exec: "vitest watch",
|
|
143
|
+
receiveArgs: true,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
const testUpdateSnapshots = this.project.tasks.tryFind("test:update");
|
|
147
|
+
if (!testUpdateSnapshots) {
|
|
148
|
+
this.project.addTask("test:update", {
|
|
149
|
+
exec: "vitest --update",
|
|
150
|
+
receiveArgs: true,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
synthesizeConfig() {
|
|
155
|
+
this.project.tryRemoveFile(this.configFilePath);
|
|
156
|
+
new textfile_1.TextFile(this, this.configFilePath, {
|
|
157
|
+
lines: this.renderConfig(),
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
renderConfig() {
|
|
161
|
+
const project = this.project;
|
|
162
|
+
const packageName = project.package.packageName;
|
|
163
|
+
const defineConfigImport = packageName === "@nikovirtala/projen-vitest"
|
|
164
|
+
? 'import { defineConfig } from "vitest/config";'
|
|
165
|
+
: 'import { defineConfig } from "@nikovirtala/projen-vitest/lib/bundled-define-config";';
|
|
166
|
+
return [
|
|
167
|
+
defineConfigImport,
|
|
168
|
+
"",
|
|
169
|
+
"export default defineConfig({",
|
|
170
|
+
" test: {",
|
|
171
|
+
...this.renderTestOptions(),
|
|
172
|
+
" },",
|
|
173
|
+
"});",
|
|
174
|
+
];
|
|
175
|
+
}
|
|
176
|
+
renderTestOptions() {
|
|
177
|
+
const lines = [];
|
|
178
|
+
lines.push(` bail: ${this.bail},`);
|
|
179
|
+
lines.push(" coverage: {");
|
|
180
|
+
lines.push(` enabled: ${this.coverageEnabled},`);
|
|
181
|
+
lines.push(` provider: "${this.coverageProvider}",`);
|
|
182
|
+
lines.push(` reporter: ${JSON.stringify(this.coverageReporters)},`);
|
|
183
|
+
lines.push(` reportsDirectory: "${this.coverageDirectory}",`);
|
|
184
|
+
lines.push(" },");
|
|
185
|
+
lines.push(` environment: "${this.environment}",`);
|
|
186
|
+
lines.push(` exclude: ${JSON.stringify(Array.from(this.exclude))},`);
|
|
187
|
+
lines.push(` globals: ${this.globals},`);
|
|
188
|
+
lines.push(` include: ${JSON.stringify(Array.from(this.include))},`);
|
|
189
|
+
lines.push(` isolate: ${this.isolate},`);
|
|
190
|
+
lines.push(` passWithNoTests: ${this.passWithNoTests},`);
|
|
191
|
+
lines.push(` printConsoleTrace: ${this.printConsoleTrace},`);
|
|
192
|
+
lines.push(` pool: "${this.pool}",`);
|
|
193
|
+
lines.push(` slowTestThreshold: ${this.slowTestThreshold},`);
|
|
194
|
+
lines.push(" typecheck: {");
|
|
195
|
+
lines.push(` enabled: ${this.typecheckEnabled},`);
|
|
196
|
+
lines.push(` checker: "${this.typecheckChecker}",`);
|
|
197
|
+
lines.push(` tsconfig: "${this.typecheckTsconfig}",`);
|
|
198
|
+
lines.push(" },");
|
|
199
|
+
lines.push(` update: ${this.updateSnapshots},`);
|
|
200
|
+
return lines;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
exports.Vitest = Vitest;
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvdml0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGtDQUFrQztBQUNsQyxvREFBaUQ7QUFDakQsMERBQXlEO0FBQ3pELHNEQUErRDtBQUMvRCxrREFBK0M7QUFFL0MsSUFBWSxXQUtYO0FBTEQsV0FBWSxXQUFXO0lBQ25CLDRDQUE2QixDQUFBO0lBQzdCLHNDQUF1QixDQUFBO0lBQ3ZCLDhCQUFlLENBQUE7SUFDZiw0QkFBYSxDQUFBO0FBQ2pCLENBQUMsRUFMVyxXQUFXLDJCQUFYLFdBQVcsUUFLdEI7QUFFRCxJQUFZLElBS1g7QUFMRCxXQUFZLElBQUk7SUFDWix1QkFBZSxDQUFBO0lBQ2YsMkJBQW1CLENBQUE7SUFDbkIsMkJBQW1CLENBQUE7SUFDbkIsK0JBQXVCLENBQUE7QUFDM0IsQ0FBQyxFQUxXLElBQUksb0JBQUosSUFBSSxRQUtmO0FBRUQsSUFBWSxnQkFHWDtBQUhELFdBQVksZ0JBQWdCO0lBQ3hCLHlDQUFxQixDQUFBO0lBQ3JCLDZCQUFTLENBQUE7QUFDYixDQUFDLEVBSFcsZ0JBQWdCLGdDQUFoQixnQkFBZ0IsUUFHM0I7QUFFRCxJQUFZLGdCQU1YO0FBTkQsV0FBWSxnQkFBZ0I7SUFDeEIscUNBQWlCLENBQUE7SUFDakIsaUNBQWEsQ0FBQTtJQUNiLGlDQUFhLENBQUE7SUFDYixpQ0FBYSxDQUFBO0lBQ2IsaUNBQWEsQ0FBQTtBQUNqQixDQUFDLEVBTlcsZ0JBQWdCLGdDQUFoQixnQkFBZ0IsUUFNM0I7QUE2QkQsTUFBYSxNQUFPLFNBQVEscUJBQVM7SUFDMUIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFvQjtRQUNqQyxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQVksRUFBZSxFQUFFLENBQUMsQ0FBQyxZQUFZLE1BQU0sQ0FBQztRQUNwRSxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FB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QyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckIsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO1FBRW5ELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSjtBQTNORCx3QkEyTkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJwcm9qZW4vbGliL2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgRGVwZW5kZW5jeVR5cGUgfSBmcm9tIFwicHJvamVuL2xpYi9kZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB7IEplc3QsIHR5cGUgTm9kZVByb2plY3QgfSBmcm9tIFwicHJvamVuL2xpYi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBUZXh0RmlsZSB9IGZyb20gXCJwcm9qZW4vbGliL3RleHRmaWxlXCI7XG5cbmV4cG9ydCBlbnVtIEVudmlyb25tZW50IHtcbiAgICBFREdFX1JVTlRJTUUgPSBcImVkZ2UtcnVudGltZVwiLFxuICAgIEhBUFBZX0RPTSA9IFwiaGFwcHktZG9tXCIsXG4gICAgSlNET00gPSBcImpzZG9tXCIsXG4gICAgTk9ERSA9IFwibm9kZVwiLFxufVxuXG5leHBvcnQgZW51bSBQb29sIHtcbiAgICBGT1JLUyA9IFwiZm9ya3NcIixcbiAgICBUSFJFQURTID0gXCJ0aHJlYWRzXCIsXG4gICAgVk1GT1JLUyA9IFwidm1mb3Jrc1wiLFxuICAgIFZNVEhSRUFEUyA9IFwidm10aHJlYWRzXCIsXG59XG5cbmV4cG9ydCBlbnVtIENvdmVyYWdlUHJvdmlkZXIge1xuICAgIElTVEFOQlVMID0gXCJpc3RhbmJ1bFwiLFxuICAgIFY4ID0gXCJ2OFwiLFxufVxuXG5leHBvcnQgZW51bSBDb3ZlcmFnZVJlcG9ydGVyIHtcbiAgICBDTE9WRVIgPSBcImNsb3ZlclwiLFxuICAgIEhUTUwgPSBcImh0bWxcIixcbiAgICBKU09OID0gXCJqc29uXCIsXG4gICAgTENPViA9IFwibGNvdlwiLFxuICAgIFRFWFQgPSBcInRleHRcIixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaXRlc3RDb25maWdPcHRpb25zIHtcbiAgICByZWFkb25seSBpbmNsdWRlPzogQXJyYXk8c3RyaW5nPjtcbiAgICByZWFkb25seSBleGNsdWRlPzogQXJyYXk8c3RyaW5nPjtcbiAgICByZWFkb25seSBlbnZpcm9ubWVudD86IEVudmlyb25tZW50O1xuICAgIHJlYWRvbmx5IGlzb2xhdGU/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHBvb2w/OiBQb29sO1xuICAgIHJlYWRvbmx5IGdsb2JhbHM/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGNvdmVyYWdlRW5hYmxlZD86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgY292ZXJhZ2VQcm92aWRlcj86IENvdmVyYWdlUHJvdmlkZXI7XG4gICAgcmVhZG9ubHkgY292ZXJhZ2VSZXBvcnRlcnM/OiBBcnJheTxDb3ZlcmFnZVJlcG9ydGVyPjtcbiAgICByZWFkb25seSBjb3ZlcmFnZURpcmVjdG9yeT86IHN0cmluZztcbiAgICByZWFkb25seSB0eXBlY2hlY2tFbmFibGVkPzogYm9vbGVhbjtcbiAgICByZWFkb25seSB0eXBlY2hlY2tDaGVja2VyPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHR5cGVjaGVja1RzY29uZmlnPzogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHBhc3NXaXRoTm9UZXN0cz86IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgYmFpbD86IG51bWJlcjtcbiAgICByZWFkb25seSB1cGRhdGVTbmFwc2hvdHM/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IHByaW50Q29uc29sZVRyYWNlPzogYm9vbGVhbjtcbiAgICByZWFkb25seSBzbG93VGVzdFRocmVzaG9sZD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaXRlc3RPcHRpb25zIHtcbiAgICByZWFkb25seSBjb25maWdGaWxlUGF0aD86IHN0cmluZztcbiAgICByZWFkb25seSBjb25maWc/OiBWaXRlc3RDb25maWdPcHRpb25zO1xuICAgIHJlYWRvbmx5IHZpdGVzdFZlcnNpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBWaXRlc3QgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHB1YmxpYyBzdGF0aWMgb2YocHJvamVjdDogTm9kZVByb2plY3QpOiBWaXRlc3QgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBpc1ZpdGVzdCA9IChjOiBDb21wb25lbnQpOiBjIGlzIFZpdGVzdCA9PiBjIGluc3RhbmNlb2YgVml0ZXN0O1xuICAgICAgICByZXR1cm4gcHJvamVjdC5jb21wb25lbnRzLmZpbmQoaXNWaXRlc3QpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnRmlsZVBhdGg6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluY2x1ZGU6IFNldDxzdHJpbmc+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhjbHVkZTogU2V0PHN0cmluZz47XG4gICAgcHJpdmF0ZSByZWFkb25seSBpc29sYXRlOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcG9vbDogUG9vbDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvdmVyYWdlRW5hYmxlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHR5cGVjaGVja0VuYWJsZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSB0eXBlY2hlY2tDaGVja2VyOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0eXBlY2hlY2tUc2NvbmZpZzogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFzc1dpdGhOb1Rlc3RzOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYmFpbDogbnVtYmVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXBkYXRlU25hcHNob3RzOiBib29sZWFuO1xuICAgIHByaXZhdGUgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgICBwcml2YXRlIGdsb2JhbHM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBjb3ZlcmFnZVByb3ZpZGVyOiBDb3ZlcmFnZVByb3ZpZGVyO1xuICAgIHByaXZhdGUgY292ZXJhZ2VSZXBvcnRlcnM6IEFycmF5PENvdmVyYWdlUmVwb3J0ZXI+O1xuICAgIHByaXZhdGUgY292ZXJhZ2VEaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIHZlcnNpb246IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByaW50Q29uc29sZVRyYWNlOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2xvd1Rlc3RUaHJlc2hvbGQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHByb2plY3Q6IE5vZGVQcm9qZWN0LCBvcHRpb25zOiBWaXRlc3RPcHRpb25zID0ge30pIHtcbiAgICAgICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICAgICAgdGhpcy5jb25maWdGaWxlUGF0aCA9IG9wdGlvbnMuY29uZmlnRmlsZVBhdGggPz8gXCJ2aXRlc3QuY29uZmlnLnRzXCI7XG4gICAgICAgIHRoaXMuaW5jbHVkZSA9IG5ldyBTZXQob3B0aW9ucy5jb25maWc/LmluY2x1ZGUgPz8gW1wiKiovKi57dGVzdCxzcGVjfS4/KGN8bSlbanRdcz8oeClcIl0pO1xuICAgICAgICB0aGlzLmV4Y2x1ZGUgPSBuZXcgU2V0KFxuICAgICAgICAgICAgb3B0aW9ucy5jb25maWc/LmV4Y2x1ZGUgPz8gW1xuICAgICAgICAgICAgICAgIFwiKiovbm9kZV9tb2R1bGVzLyoqXCIsXG4gICAgICAgICAgICAgICAgXCIqKi9kaXN0LyoqXCIsXG4gICAgICAgICAgICAgICAgXCIqKi9jeXByZXNzLyoqXCIsXG4gICAgICAgICAgICAgICAgXCIqKi8ue2lkZWEsZ2l0LGNhY2hlLG91dHB1dCx0ZW1wfS8qKlwiLFxuICAgICAgICAgICAgICAgIFwiKiove2thcm1hLHJvbGx1cCx3ZWJwYWNrLHZpdGUsdml0ZXN0LGplc3QsYXZhLGJhYmVsLG55YyxjeXByZXNzLHRzdXAsYnVpbGQsZXNsaW50LHByZXR0aWVyfS5jb25maWcuKlwiLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pc29sYXRlID0gb3B0aW9ucy5jb25maWc/Lmlzb2xhdGUgPz8gdHJ1ZTtcbiAgICAgICAgdGhpcy5wb29sID0gb3B0aW9ucy5jb25maWc/LnBvb2wgPz8gUG9vbC5GT1JLUztcbiAgICAgICAgdGhpcy5jb3ZlcmFnZUVuYWJsZWQgPSBvcHRpb25zLmNvbmZpZz8uY292ZXJhZ2VFbmFibGVkID8/IHRydWU7XG4gICAgICAgIHRoaXMudHlwZWNoZWNrRW5hYmxlZCA9IG9wdGlvbnMuY29uZmlnPy50eXBlY2hlY2tFbmFibGVkID8/IHRoaXMuaXNUeXBlc2NyaXB0UHJvamVjdCgpO1xuICAgICAgICB0aGlzLnR5cGVjaGVja0NoZWNrZXIgPSBvcHRpb25zLmNvbmZpZz8udHlwZWNoZWNrQ2hlY2tlciA/PyBcInRzYyAtLW5vRW1pdFwiO1xuICAgICAgICB0aGlzLnR5cGVjaGVja1RzY29uZmlnID0gb3B0aW9ucy5jb25maWc/LnR5cGVjaGVja1RzY29uZmlnID8/IFwidHNjb25maWcuZGV2Lmpzb25cIjtcbiAgICAgICAgdGhpcy5wYXNzV2l0aE5vVGVzdHMgPSBvcHRpb25zLmNvbmZpZz8ucGFzc1dpdGhOb1Rlc3RzID8/IHRydWU7XG4gICAgICAgIHRoaXMuYmFpbCA9IG9wdGlvbnMuY29uZmlnPy5iYWlsID8/IDA7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBvcHRpb25zLmNvbmZpZz8uZW52aXJvbm1lbnQgPz8gRW52aXJvbm1lbnQuTk9ERTtcbiAgICAgICAgdGhpcy5nbG9iYWxzID0gb3B0aW9ucy5jb25maWc/Lmdsb2JhbHMgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMuY292ZXJhZ2VQcm92aWRlciA9IG9wdGlvbnMuY29uZmlnPy5jb3ZlcmFnZVByb3ZpZGVyID8/IENvdmVyYWdlUHJvdmlkZXIuVjg7XG4gICAgICAgIHRoaXMuY292ZXJhZ2VSZXBvcnRlcnMgPSBvcHRpb25zLmNvbmZpZz8uY292ZXJhZ2VSZXBvcnRlcnMgPz8gW0NvdmVyYWdlUmVwb3J0ZXIuVEVYVCwgQ292ZXJhZ2VSZXBvcnRlci5MQ09WXTtcbiAgICAgICAgdGhpcy5jb3ZlcmFnZURpcmVjdG9yeSA9IG9wdGlvbnMuY29uZmlnPy5jb3ZlcmFnZURpcmVjdG9yeSA/PyBcImNvdmVyYWdlXCI7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IG9wdGlvbnMudml0ZXN0VmVyc2lvbiA/PyBcIl40XCI7XG4gICAgICAgIHRoaXMudXBkYXRlU25hcHNob3RzID0gb3B0aW9ucy5jb25maWc/LnVwZGF0ZVNuYXBzaG90cyA/PyB0cnVlO1xuICAgICAgICB0aGlzLnByaW50Q29uc29sZVRyYWNlID0gb3B0aW9ucy5jb25maWc/LnByaW50Q29uc29sZVRyYWNlID8/IHRydWU7XG4gICAgICAgIHRoaXMuc2xvd1Rlc3RUaHJlc2hvbGQgPSBvcHRpb25zLmNvbmZpZz8uc2xvd1Rlc3RUaHJlc2hvbGQgPz8gMzAwO1xuXG4gICAgICAgIHByb2plY3QuYWRkRGV2RGVwcyhgdml0ZXN0QCR7dGhpcy52ZXJzaW9ufWApO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZUNvdmVyYWdlUHJvdmlkZXIodGhpcy5jb3ZlcmFnZVByb3ZpZGVyKTtcblxuICAgICAgICBpZiAodGhpcy5nbG9iYWxzICYmIHRoaXMuaXNUeXBlc2NyaXB0UHJvamVjdCgpICYmIHRoaXMucHJvamVjdC50cnlGaW5kT2JqZWN0RmlsZSh0aGlzLnR5cGVjaGVja1RzY29uZmlnKSkge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmVHbG9iYWxzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb3ZlcmFnZURpcmVjdG9yeVBhdGggPSBwYXRoLnBvc2l4LmpvaW4oXCIvXCIsIHRoaXMuY292ZXJhZ2VEaXJlY3RvcnksIFwiL1wiKTtcbiAgICAgICAgcHJvamVjdC5ucG1pZ25vcmU/LmV4Y2x1ZGUoY292ZXJhZ2VEaXJlY3RvcnlQYXRoKTtcbiAgICAgICAgcHJvamVjdC5naXRpZ25vcmUuZXhjbHVkZShjb3ZlcmFnZURpcmVjdG9yeVBhdGgpO1xuXG4gICAgICAgIHRoaXMuYWRkVGVzdENvbW1hbmQoKTtcbiAgICAgICAgdGhpcy5zeW50aGVzaXplQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHByZVN5bnRoZXNpemUoKSB7XG4gICAgICAgIHN1cGVyLnByZVN5bnRoZXNpemUoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLnByb2plY3QuY29tcG9uZW50cykge1xuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIEplc3QpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ2aXRlc3QgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBqZXN0XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEluY2x1ZGUocGF0dGVybjogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5jbHVkZS5hZGQocGF0dGVybik7XG4gICAgICAgIHRoaXMuc3ludGhlc2l6ZUNvbmZpZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRFeGNsdWRlKHBhdHRlcm46IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmV4Y2x1ZGUuYWRkKHBhdHRlcm4pO1xuICAgICAgICB0aGlzLnN5bnRoZXNpemVDb25maWcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29uZmlndXJlRW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IEVudmlyb25tZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICAgICAgdGhpcy5zeW50aGVzaXplQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbmZpZ3VyZUNvdmVyYWdlUHJvdmlkZXIocHJvdmlkZXI6IENvdmVyYWdlUHJvdmlkZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXJQYWNrYWdlcyA9IHtcbiAgICAgICAgICAgIFtDb3ZlcmFnZVByb3ZpZGVyLlY4XTogYEB2aXRlc3QvY292ZXJhZ2UtdjhAJHt0aGlzLnZlcnNpb259YCxcbiAgICAgICAgICAgIFtDb3ZlcmFnZVByb3ZpZGVyLklTVEFOQlVMXTogYEB2aXRlc3QvY292ZXJhZ2UtaXN0YW5idWxAJHt0aGlzLnZlcnNpb259YCxcbiAgICAgICAgfTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3ZpZGVyUGFja2FnZSBvZiBPYmplY3QudmFsdWVzKHByb3ZpZGVyUGFja2FnZXMpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvamVjdC5kZXBzLnJlbW92ZURlcGVuZGVuY3kocHJvdmlkZXJQYWNrYWdlKTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShwcm92aWRlclBhY2thZ2VzW3Byb3ZpZGVyXSwgRGVwZW5kZW5jeVR5cGUuREVWRU5WKTtcbiAgICAgICAgdGhpcy5jb3ZlcmFnZVByb3ZpZGVyID0gcHJvdmlkZXI7XG4gICAgICAgIHRoaXMuc3ludGhlc2l6ZUNvbmZpZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25maWd1cmVDb3ZlcmFnZVJlcG9ydGVycyhyZXBvcnRlcnM6IEFycmF5PENvdmVyYWdlUmVwb3J0ZXI+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY292ZXJhZ2VSZXBvcnRlcnMgPSByZXBvcnRlcnM7XG4gICAgICAgIHRoaXMuc3ludGhlc2l6ZUNvbmZpZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb25maWd1cmVHbG9iYWxzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZVRzQ29uZmlnKCk7XG4gICAgICAgIHRoaXMuc3ludGhlc2l6ZUNvbmZpZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVHNDb25maWcoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRzY29uZmlnID0gdGhpcy5wcm9qZWN0LnRyeUZpbmRPYmplY3RGaWxlKHRoaXMudHlwZWNoZWNrVHNjb25maWcpO1xuXG4gICAgICAgIGlmICghdHNjb25maWcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byBmaW5kIHRzY29uZmlnXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHNjb25maWcuYWRkVG9BcnJheShcImNvbXBpbGVyT3B0aW9ucy50eXBlc1wiLCBcInZpdGVzdC9nbG9iYWxzXCIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNUeXBlc2NyaXB0UHJvamVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvamVjdC5kZXBzLnRyeUdldERlcGVuZGVuY3koXCJ0eXBlc2NyaXB0XCIpICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRUZXN0Q29tbWFuZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0LnRlc3RUYXNrLmV4ZWMoXCJ2aXRlc3QgcnVuXCIsIHtcbiAgICAgICAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0ZXN0V2F0Y2ggPSB0aGlzLnByb2plY3QudGFza3MudHJ5RmluZChcInRlc3Q6d2F0Y2hcIik7XG4gICAgICAgIGlmICghdGVzdFdhdGNoKSB7XG4gICAgICAgICAgICB0aGlzLnByb2plY3QuYWRkVGFzayhcInRlc3Q6d2F0Y2hcIiwge1xuICAgICAgICAgICAgICAgIGV4ZWM6IFwidml0ZXN0IHdhdGNoXCIsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRlc3RVcGRhdGVTbmFwc2hvdHMgPSB0aGlzLnByb2plY3QudGFza3MudHJ5RmluZChcInRlc3Q6dXBkYXRlXCIpO1xuICAgICAgICBpZiAoIXRlc3RVcGRhdGVTbmFwc2hvdHMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKFwidGVzdDp1cGRhdGVcIiwge1xuICAgICAgICAgICAgICAgIGV4ZWM6IFwidml0ZXN0IC0tdXBkYXRlXCIsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3ludGhlc2l6ZUNvbmZpZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0LnRyeVJlbW92ZUZpbGUodGhpcy5jb25maWdGaWxlUGF0aCk7XG5cbiAgICAgICAgbmV3IFRleHRGaWxlKHRoaXMsIHRoaXMuY29uZmlnRmlsZVBhdGgsIHtcbiAgICAgICAgICAgIGxpbmVzOiB0aGlzLnJlbmRlckNvbmZpZygpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNvbmZpZygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcHJvamVjdCA9IHRoaXMucHJvamVjdCBhcyBOb2RlUHJvamVjdDtcbiAgICAgICAgY29uc3QgcGFja2FnZU5hbWUgPSBwcm9qZWN0LnBhY2thZ2UucGFja2FnZU5hbWU7XG4gICAgICAgIGNvbnN0IGRlZmluZUNvbmZpZ0ltcG9ydCA9XG4gICAgICAgICAgICBwYWNrYWdlTmFtZSA9PT0gXCJAbmlrb3ZpcnRhbGEvcHJvamVuLXZpdGVzdFwiXG4gICAgICAgICAgICAgICAgPyAnaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVzdC9jb25maWdcIjsnXG4gICAgICAgICAgICAgICAgOiAnaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcIkBuaWtvdmlydGFsYS9wcm9qZW4tdml0ZXN0L2xpYi9idW5kbGVkLWRlZmluZS1jb25maWdcIjsnO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBkZWZpbmVDb25maWdJbXBvcnQsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgXCJleHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoe1wiLFxuICAgICAgICAgICAgXCIgIHRlc3Q6IHtcIixcbiAgICAgICAgICAgIC4uLnRoaXMucmVuZGVyVGVzdE9wdGlvbnMoKSxcbiAgICAgICAgICAgIFwiICB9LFwiLFxuICAgICAgICAgICAgXCJ9KTtcIixcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlclRlc3RPcHRpb25zKCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICBjb25zdCBsaW5lczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gICAgICAgIGxpbmVzLnB1c2goYCAgICBiYWlsOiAke3RoaXMuYmFpbH0sYCk7XG4gICAgICAgIGxpbmVzLnB1c2goXCIgICAgY292ZXJhZ2U6IHtcIik7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICAgIGVuYWJsZWQ6ICR7dGhpcy5jb3ZlcmFnZUVuYWJsZWR9LGApO1xuICAgICAgICBsaW5lcy5wdXNoKGAgICAgICBwcm92aWRlcjogXCIke3RoaXMuY292ZXJhZ2VQcm92aWRlcn1cIixgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgICAgcmVwb3J0ZXI6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5jb3ZlcmFnZVJlcG9ydGVycyl9LGApO1xuICAgICAgICBsaW5lcy5wdXNoKGAgICAgICByZXBvcnRzRGlyZWN0b3J5OiBcIiR7dGhpcy5jb3ZlcmFnZURpcmVjdG9yeX1cIixgKTtcbiAgICAgICAgbGluZXMucHVzaChcIiAgICB9LFwiKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgIGVudmlyb25tZW50OiBcIiR7dGhpcy5lbnZpcm9ubWVudH1cIixgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgIGV4Y2x1ZGU6ICR7SlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbSh0aGlzLmV4Y2x1ZGUpKX0sYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICBnbG9iYWxzOiAke3RoaXMuZ2xvYmFsc30sYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICBpbmNsdWRlOiAke0pTT04uc3RyaW5naWZ5KEFycmF5LmZyb20odGhpcy5pbmNsdWRlKSl9LGApO1xuICAgICAgICBsaW5lcy5wdXNoKGAgICAgaXNvbGF0ZTogJHt0aGlzLmlzb2xhdGV9LGApO1xuICAgICAgICBsaW5lcy5wdXNoKGAgICAgcGFzc1dpdGhOb1Rlc3RzOiAke3RoaXMucGFzc1dpdGhOb1Rlc3RzfSxgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgIHByaW50Q29uc29sZVRyYWNlOiAke3RoaXMucHJpbnRDb25zb2xlVHJhY2V9LGApO1xuICAgICAgICBsaW5lcy5wdXNoKGAgICAgcG9vbDogXCIke3RoaXMucG9vbH1cIixgKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgIHNsb3dUZXN0VGhyZXNob2xkOiAke3RoaXMuc2xvd1Rlc3RUaHJlc2hvbGR9LGApO1xuICAgICAgICBsaW5lcy5wdXNoKFwiICAgIHR5cGVjaGVjazoge1wiKTtcbiAgICAgICAgbGluZXMucHVzaChgICAgICAgZW5hYmxlZDogJHt0aGlzLnR5cGVjaGVja0VuYWJsZWR9LGApO1xuICAgICAgICBsaW5lcy5wdXNoKGAgICAgICBjaGVja2VyOiBcIiR7dGhpcy50eXBlY2hlY2tDaGVja2VyfVwiLGApO1xuICAgICAgICBsaW5lcy5wdXNoKGAgICAgICB0c2NvbmZpZzogXCIke3RoaXMudHlwZWNoZWNrVHNjb25maWd9XCIsYCk7XG4gICAgICAgIGxpbmVzLnB1c2goXCIgICAgfSxcIik7XG4gICAgICAgIGxpbmVzLnB1c2goYCAgICB1cGRhdGU6ICR7dGhpcy51cGRhdGVTbmFwc2hvdHN9LGApO1xuXG4gICAgICAgIHJldHVybiBsaW5lcztcbiAgICB9XG59XG4iXX0=
|
package/lib/config.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { awscdk, cdk, javascript,
|
|
1
|
+
import { awscdk, cdk, javascript, typescript } from "projen";
|
|
2
2
|
export declare const DEFAULT_AUTHOR = "Niko Virtala";
|
|
3
3
|
export declare const DEFAULT_AUTHOR_ADDRESS = "niko.virtala@hey.com";
|
|
4
4
|
export declare const DEFAULT_CDK_VERSION = "2.223.0";
|
|
@@ -46,7 +46,6 @@ export declare const PROJECT_DEFAULT_OPTIONS: {
|
|
|
46
46
|
typescriptVersion: string;
|
|
47
47
|
tsconfig: {
|
|
48
48
|
compilerOptions: {
|
|
49
|
-
allowImportingTsExtensions: boolean;
|
|
50
49
|
allowSyntheticDefaultImports: boolean;
|
|
51
50
|
alwaysStrict: boolean;
|
|
52
51
|
declaration: boolean;
|
|
@@ -55,9 +54,39 @@ export declare const PROJECT_DEFAULT_OPTIONS: {
|
|
|
55
54
|
inlineSourceMap: boolean;
|
|
56
55
|
inlineSources: boolean;
|
|
57
56
|
isolatedModules: boolean;
|
|
57
|
+
noEmit: boolean;
|
|
58
|
+
noEmitOnError: boolean;
|
|
59
|
+
noFallthroughCasesInSwitch: boolean;
|
|
60
|
+
noImplicitAny: boolean;
|
|
61
|
+
noImplicitOverride: boolean;
|
|
62
|
+
noImplicitReturns: boolean;
|
|
63
|
+
noImplicitThis: boolean;
|
|
64
|
+
noUnusedLocals: boolean;
|
|
65
|
+
noUnusedParameters: boolean;
|
|
66
|
+
resolveJsonModule: boolean;
|
|
67
|
+
strict: boolean;
|
|
68
|
+
strictNullChecks: boolean;
|
|
69
|
+
strictPropertyInitialization: boolean;
|
|
70
|
+
stripInternal: boolean;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
export declare const TYPESCRIPT_PROJECT_DEFAULT_OPTIONS: {
|
|
75
|
+
tsconfig: {
|
|
76
|
+
compilerOptions: {
|
|
77
|
+
allowImportingTsExtensions: boolean;
|
|
58
78
|
lib: string[];
|
|
59
79
|
module: string;
|
|
60
80
|
moduleResolution: javascript.TypeScriptModuleResolution;
|
|
81
|
+
target: string;
|
|
82
|
+
allowSyntheticDefaultImports: boolean;
|
|
83
|
+
alwaysStrict: boolean;
|
|
84
|
+
declaration: boolean;
|
|
85
|
+
esModuleInterop: boolean;
|
|
86
|
+
experimentalDecorators: boolean;
|
|
87
|
+
inlineSourceMap: boolean;
|
|
88
|
+
inlineSources: boolean;
|
|
89
|
+
isolatedModules: boolean;
|
|
61
90
|
noEmit: boolean;
|
|
62
91
|
noEmitOnError: boolean;
|
|
63
92
|
noFallthroughCasesInSwitch: boolean;
|
|
@@ -72,11 +101,8 @@ export declare const PROJECT_DEFAULT_OPTIONS: {
|
|
|
72
101
|
strictNullChecks: boolean;
|
|
73
102
|
strictPropertyInitialization: boolean;
|
|
74
103
|
stripInternal: boolean;
|
|
75
|
-
target: string;
|
|
76
104
|
};
|
|
77
105
|
};
|
|
78
|
-
};
|
|
79
|
-
export declare const TYPESCRIPT_PROJECT_DEFAULT_OPTIONS: {
|
|
80
106
|
author: string;
|
|
81
107
|
authorAddress: string;
|
|
82
108
|
defaultReleaseBranch: string;
|
|
@@ -114,37 +140,6 @@ export declare const TYPESCRIPT_PROJECT_DEFAULT_OPTIONS: {
|
|
|
114
140
|
pnpmVersion: string;
|
|
115
141
|
projenrcTs: boolean;
|
|
116
142
|
typescriptVersion: string;
|
|
117
|
-
tsconfig: {
|
|
118
|
-
compilerOptions: {
|
|
119
|
-
allowImportingTsExtensions: boolean;
|
|
120
|
-
allowSyntheticDefaultImports: boolean;
|
|
121
|
-
alwaysStrict: boolean;
|
|
122
|
-
declaration: boolean;
|
|
123
|
-
esModuleInterop: boolean;
|
|
124
|
-
experimentalDecorators: boolean;
|
|
125
|
-
inlineSourceMap: boolean;
|
|
126
|
-
inlineSources: boolean;
|
|
127
|
-
isolatedModules: boolean;
|
|
128
|
-
lib: string[];
|
|
129
|
-
module: string;
|
|
130
|
-
moduleResolution: javascript.TypeScriptModuleResolution;
|
|
131
|
-
noEmit: boolean;
|
|
132
|
-
noEmitOnError: boolean;
|
|
133
|
-
noFallthroughCasesInSwitch: boolean;
|
|
134
|
-
noImplicitAny: boolean;
|
|
135
|
-
noImplicitOverride: boolean;
|
|
136
|
-
noImplicitReturns: boolean;
|
|
137
|
-
noImplicitThis: boolean;
|
|
138
|
-
noUnusedLocals: boolean;
|
|
139
|
-
noUnusedParameters: boolean;
|
|
140
|
-
resolveJsonModule: boolean;
|
|
141
|
-
strict: boolean;
|
|
142
|
-
strictNullChecks: boolean;
|
|
143
|
-
strictPropertyInitialization: boolean;
|
|
144
|
-
stripInternal: boolean;
|
|
145
|
-
target: string;
|
|
146
|
-
};
|
|
147
|
-
};
|
|
148
143
|
};
|
|
149
144
|
export declare const JSII_PROJECT_DEFAULT_OPTIONS: {
|
|
150
145
|
jsiiVersion: string;
|
|
@@ -188,7 +183,6 @@ export declare const JSII_PROJECT_DEFAULT_OPTIONS: {
|
|
|
188
183
|
typescriptVersion: string;
|
|
189
184
|
tsconfig: {
|
|
190
185
|
compilerOptions: {
|
|
191
|
-
allowImportingTsExtensions: boolean;
|
|
192
186
|
allowSyntheticDefaultImports: boolean;
|
|
193
187
|
alwaysStrict: boolean;
|
|
194
188
|
declaration: boolean;
|
|
@@ -197,9 +191,39 @@ export declare const JSII_PROJECT_DEFAULT_OPTIONS: {
|
|
|
197
191
|
inlineSourceMap: boolean;
|
|
198
192
|
inlineSources: boolean;
|
|
199
193
|
isolatedModules: boolean;
|
|
194
|
+
noEmit: boolean;
|
|
195
|
+
noEmitOnError: boolean;
|
|
196
|
+
noFallthroughCasesInSwitch: boolean;
|
|
197
|
+
noImplicitAny: boolean;
|
|
198
|
+
noImplicitOverride: boolean;
|
|
199
|
+
noImplicitReturns: boolean;
|
|
200
|
+
noImplicitThis: boolean;
|
|
201
|
+
noUnusedLocals: boolean;
|
|
202
|
+
noUnusedParameters: boolean;
|
|
203
|
+
resolveJsonModule: boolean;
|
|
204
|
+
strict: boolean;
|
|
205
|
+
strictNullChecks: boolean;
|
|
206
|
+
strictPropertyInitialization: boolean;
|
|
207
|
+
stripInternal: boolean;
|
|
208
|
+
};
|
|
209
|
+
};
|
|
210
|
+
};
|
|
211
|
+
export declare const CDK_APP_DEFAULT_OPTIONS: {
|
|
212
|
+
tsconfig: {
|
|
213
|
+
compilerOptions: {
|
|
214
|
+
allowImportingTsExtensions: boolean;
|
|
200
215
|
lib: string[];
|
|
201
216
|
module: string;
|
|
202
217
|
moduleResolution: javascript.TypeScriptModuleResolution;
|
|
218
|
+
target: string;
|
|
219
|
+
allowSyntheticDefaultImports: boolean;
|
|
220
|
+
alwaysStrict: boolean;
|
|
221
|
+
declaration: boolean;
|
|
222
|
+
esModuleInterop: boolean;
|
|
223
|
+
experimentalDecorators: boolean;
|
|
224
|
+
inlineSourceMap: boolean;
|
|
225
|
+
inlineSources: boolean;
|
|
226
|
+
isolatedModules: boolean;
|
|
203
227
|
noEmit: boolean;
|
|
204
228
|
noEmitOnError: boolean;
|
|
205
229
|
noFallthroughCasesInSwitch: boolean;
|
|
@@ -214,11 +238,8 @@ export declare const JSII_PROJECT_DEFAULT_OPTIONS: {
|
|
|
214
238
|
strictNullChecks: boolean;
|
|
215
239
|
strictPropertyInitialization: boolean;
|
|
216
240
|
stripInternal: boolean;
|
|
217
|
-
target: string;
|
|
218
241
|
};
|
|
219
242
|
};
|
|
220
|
-
};
|
|
221
|
-
export declare const CDK_APP_DEFAULT_OPTIONS: {
|
|
222
243
|
cdkVersion: string;
|
|
223
244
|
author: string;
|
|
224
245
|
authorAddress: string;
|
|
@@ -257,37 +278,6 @@ export declare const CDK_APP_DEFAULT_OPTIONS: {
|
|
|
257
278
|
pnpmVersion: string;
|
|
258
279
|
projenrcTs: boolean;
|
|
259
280
|
typescriptVersion: string;
|
|
260
|
-
tsconfig: {
|
|
261
|
-
compilerOptions: {
|
|
262
|
-
allowImportingTsExtensions: boolean;
|
|
263
|
-
allowSyntheticDefaultImports: boolean;
|
|
264
|
-
alwaysStrict: boolean;
|
|
265
|
-
declaration: boolean;
|
|
266
|
-
esModuleInterop: boolean;
|
|
267
|
-
experimentalDecorators: boolean;
|
|
268
|
-
inlineSourceMap: boolean;
|
|
269
|
-
inlineSources: boolean;
|
|
270
|
-
isolatedModules: boolean;
|
|
271
|
-
lib: string[];
|
|
272
|
-
module: string;
|
|
273
|
-
moduleResolution: javascript.TypeScriptModuleResolution;
|
|
274
|
-
noEmit: boolean;
|
|
275
|
-
noEmitOnError: boolean;
|
|
276
|
-
noFallthroughCasesInSwitch: boolean;
|
|
277
|
-
noImplicitAny: boolean;
|
|
278
|
-
noImplicitOverride: boolean;
|
|
279
|
-
noImplicitReturns: boolean;
|
|
280
|
-
noImplicitThis: boolean;
|
|
281
|
-
noUnusedLocals: boolean;
|
|
282
|
-
noUnusedParameters: boolean;
|
|
283
|
-
resolveJsonModule: boolean;
|
|
284
|
-
strict: boolean;
|
|
285
|
-
strictNullChecks: boolean;
|
|
286
|
-
strictPropertyInitialization: boolean;
|
|
287
|
-
stripInternal: boolean;
|
|
288
|
-
target: string;
|
|
289
|
-
};
|
|
290
|
-
};
|
|
291
281
|
};
|
|
292
282
|
export declare const CDK_CONSTRUCT_DEFAULT_OPTIONS: {
|
|
293
283
|
cdkVersion: string;
|
|
@@ -331,7 +321,6 @@ export declare const CDK_CONSTRUCT_DEFAULT_OPTIONS: {
|
|
|
331
321
|
typescriptVersion: string;
|
|
332
322
|
tsconfig: {
|
|
333
323
|
compilerOptions: {
|
|
334
|
-
allowImportingTsExtensions: boolean;
|
|
335
324
|
allowSyntheticDefaultImports: boolean;
|
|
336
325
|
alwaysStrict: boolean;
|
|
337
326
|
declaration: boolean;
|
|
@@ -340,9 +329,6 @@ export declare const CDK_CONSTRUCT_DEFAULT_OPTIONS: {
|
|
|
340
329
|
inlineSourceMap: boolean;
|
|
341
330
|
inlineSources: boolean;
|
|
342
331
|
isolatedModules: boolean;
|
|
343
|
-
lib: string[];
|
|
344
|
-
module: string;
|
|
345
|
-
moduleResolution: javascript.TypeScriptModuleResolution;
|
|
346
332
|
noEmit: boolean;
|
|
347
333
|
noEmitOnError: boolean;
|
|
348
334
|
noFallthroughCasesInSwitch: boolean;
|
|
@@ -357,7 +343,6 @@ export declare const CDK_CONSTRUCT_DEFAULT_OPTIONS: {
|
|
|
357
343
|
strictNullChecks: boolean;
|
|
358
344
|
strictPropertyInitialization: boolean;
|
|
359
345
|
stripInternal: boolean;
|
|
360
|
-
target: string;
|
|
361
346
|
};
|
|
362
347
|
};
|
|
363
348
|
};
|