@codedrifters/configulator 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +19 -0
- package/README.md +4 -0
- package/lib/aws/aws-deployment-config.d.ts +141 -0
- package/lib/aws/aws-deployment-config.js +165 -0
- package/lib/aws/aws-types.d.ts +63 -0
- package/lib/aws/aws-types.js +9 -0
- package/lib/aws/index.d.ts +2 -0
- package/lib/aws/index.js +19 -0
- package/lib/git/git-types.d.ts +18 -0
- package/lib/git/git-types.js +9 -0
- package/lib/git/index.d.ts +1 -0
- package/lib/git/index.js +18 -0
- package/lib/pnpm/index.d.ts +1 -0
- package/lib/pnpm/index.js +18 -0
- package/lib/pnpm/pnpm-workspace.d.ts +5 -0
- package/lib/pnpm/pnpm-workspace.js +36 -0
- package/lib/turbo/index.d.ts +2 -0
- package/lib/turbo/index.js +19 -0
- package/lib/turbo/turbo-repo-task.d.ts +36 -0
- package/lib/turbo/turbo-repo-task.js +43 -0
- package/lib/turbo/turbo-repo.d.ts +268 -0
- package/lib/turbo/turbo-repo.js +213 -0
- package/lib/typescript/index.d.ts +1 -0
- package/lib/typescript/index.js +18 -0
- package/lib/typescript/typescript-config.d.ts +13 -0
- package/lib/typescript/typescript-config.js +40 -0
- package/lib/versions.d.ts +22 -0
- package/lib/versions.js +26 -0
- package/lib/vscode/index.d.ts +1 -0
- package/lib/vscode/index.js +18 -0
- package/lib/vscode/vscode.d.ts +10 -0
- package/lib/vscode/vscode.js +37 -0
- package/lib/workflows/build-workflow.d.ts +13 -0
- package/lib/workflows/build-workflow.js +64 -0
- package/lib/workflows/deploy-workflow.d.ts +17 -0
- package/lib/workflows/deploy-workflow.js +113 -0
- package/lib/workflows/index.d.ts +2 -0
- package/lib/workflows/index.js +19 -0
- package/lib/workflows/steps/deploy.d.ts +4 -0
- package/lib/workflows/steps/deploy.js +62 -0
- package/package.json +63 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TurboRepoTask = void 0;
|
|
4
|
+
const lib_1 = require("projen/lib");
|
|
5
|
+
class TurboRepoTask extends lib_1.Component {
|
|
6
|
+
constructor(project, options) {
|
|
7
|
+
super(project);
|
|
8
|
+
this.project = project;
|
|
9
|
+
this.name = options.name;
|
|
10
|
+
this.dependsOn = options.dependsOn ?? [];
|
|
11
|
+
this.env = options.env ?? [];
|
|
12
|
+
this.passThroughEnv = options.passThroughEnv ?? [];
|
|
13
|
+
this.outputs = options.outputs ?? [];
|
|
14
|
+
this.cache = options.cache ?? true;
|
|
15
|
+
this.inputs = [
|
|
16
|
+
...(options.inputs ?? []),
|
|
17
|
+
// rerun if projen config changes
|
|
18
|
+
".projen/**",
|
|
19
|
+
// ignore mac files
|
|
20
|
+
"!.DS_Store",
|
|
21
|
+
"!**/.DS_Store",
|
|
22
|
+
];
|
|
23
|
+
this.outputLogs = options.outputLogs ?? "new-only";
|
|
24
|
+
this.persistent = options.persistent ?? false;
|
|
25
|
+
this.interactive = options.interactive ?? false;
|
|
26
|
+
this.isActive = true;
|
|
27
|
+
}
|
|
28
|
+
taskConfig() {
|
|
29
|
+
return {
|
|
30
|
+
dependsOn: this.dependsOn,
|
|
31
|
+
env: this.env,
|
|
32
|
+
passThroughEnv: this.passThroughEnv,
|
|
33
|
+
outputs: this.outputs,
|
|
34
|
+
cache: this.cache,
|
|
35
|
+
inputs: this.inputs,
|
|
36
|
+
outputLogs: this.outputLogs,
|
|
37
|
+
persistent: this.persistent,
|
|
38
|
+
interactive: this.interactive,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.TurboRepoTask = TurboRepoTask;
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyYm8tcmVwby10YXNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R1cmJvL3R1cmJvLXJlcG8tdGFzay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvQ0FBZ0Q7QUF3QmhELE1BQWEsYUFBYyxTQUFRLGVBQVM7SUFzQjFDLFlBQ2tCLE9BQWdCLEVBQ2hDLE9BQTZCO1FBRTdCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhDLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFLaEMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1lBQ3pCLGlDQUFpQztZQUNqQyxZQUFZO1lBQ1osbUJBQW1CO1lBQ25CLFlBQVk7WUFDWixlQUFlO1NBQ2hCLENBQUM7UUFDRixJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDO1FBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7UUFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRU0sVUFBVTtRQUNmLE9BQU87WUFDTCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ25DLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQzlCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUE3REQsc0NBNkRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9qZWN0IH0gZnJvbSBcInByb2plbi9saWJcIjtcblxuLyoqXG4gKiBFYWNoIG9mIHRoZSBiZWxvdyBvcHRpb25zIGNvcnJlc3BvbmRzIHRvIGEgdGFzayBwcm9wZXJ0eSBmb3VuZCBoZXJlOlxuICogICogaHR0cHM6Ly90dXJib3JlcG8uY29tL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZGVmaW5pbmctdGFza3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUdXJib1JlcG9UYXNrT3B0aW9ucyB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZGVwZW5kc09uPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVhZG9ubHkgZW52PzogQXJyYXk8c3RyaW5nPjtcbiAgcmVhZG9ubHkgcGFzc1Rocm91Z2hFbnY/OiBBcnJheTxzdHJpbmc+O1xuICByZWFkb25seSBvdXRwdXRzPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVhZG9ubHkgY2FjaGU/OiBib29sZWFuO1xuICByZWFkb25seSBpbnB1dHM/OiBBcnJheTxzdHJpbmc+O1xuICByZWFkb25seSBvdXRwdXRMb2dzPzpcbiAgICB8IFwiZnVsbFwiXG4gICAgfCBcImhhc2gtb25seVwiXG4gICAgfCBcIm5ldy1vbmx5XCJcbiAgICB8IFwiZXJyb3JzLW9ubHlcIlxuICAgIHwgXCJub25lXCI7XG4gIHJlYWRvbmx5IHBlcnNpc3RlbnQ/OiBib29sZWFuO1xuICByZWFkb25seSBpbnRlcmFjdGl2ZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBUdXJib1JlcG9UYXNrIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHVibGljIGRlcGVuZHNPbjogQXJyYXk8c3RyaW5nPjtcbiAgcHVibGljIHJlYWRvbmx5IGVudjogQXJyYXk8c3RyaW5nPjtcbiAgcHVibGljIHJlYWRvbmx5IHBhc3NUaHJvdWdoRW52OiBBcnJheTxzdHJpbmc+O1xuICBwdWJsaWMgb3V0cHV0czogQXJyYXk8c3RyaW5nPjtcbiAgcHVibGljIGNhY2hlOiBib29sZWFuO1xuICBwdWJsaWMgaW5wdXRzOiBBcnJheTxzdHJpbmc+O1xuICBwdWJsaWMgcmVhZG9ubHkgb3V0cHV0TG9nczpcbiAgICB8IFwiZnVsbFwiXG4gICAgfCBcImhhc2gtb25seVwiXG4gICAgfCBcIm5ldy1vbmx5XCJcbiAgICB8IFwiZXJyb3JzLW9ubHlcIlxuICAgIHwgXCJub25lXCI7XG4gIHB1YmxpYyByZWFkb25seSBwZXJzaXN0ZW50OiBib29sZWFuO1xuICBwdWJsaWMgcmVhZG9ubHkgaW50ZXJhY3RpdmU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgdGhpcyB0YXNrIGluIHR1cmJvLmpzb24gb3V0cHV0P1xuICAgKi9cbiAgcHVibGljIGlzQWN0aXZlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBwcm9qZWN0OiBQcm9qZWN0LFxuICAgIG9wdGlvbnM6IFR1cmJvUmVwb1Rhc2tPcHRpb25zLFxuICApIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHRoaXMubmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICB0aGlzLmRlcGVuZHNPbiA9IG9wdGlvbnMuZGVwZW5kc09uID8/IFtdO1xuICAgIHRoaXMuZW52ID0gb3B0aW9ucy5lbnYgPz8gW107XG4gICAgdGhpcy5wYXNzVGhyb3VnaEVudiA9IG9wdGlvbnMucGFzc1Rocm91Z2hFbnYgPz8gW107XG4gICAgdGhpcy5vdXRwdXRzID0gb3B0aW9ucy5vdXRwdXRzID8/IFtdO1xuICAgIHRoaXMuY2FjaGUgPSBvcHRpb25zLmNhY2hlID8/IHRydWU7XG4gICAgdGhpcy5pbnB1dHMgPSBbXG4gICAgICAuLi4ob3B0aW9ucy5pbnB1dHMgPz8gW10pLFxuICAgICAgLy8gcmVydW4gaWYgcHJvamVuIGNvbmZpZyBjaGFuZ2VzXG4gICAgICBcIi5wcm9qZW4vKipcIixcbiAgICAgIC8vIGlnbm9yZSBtYWMgZmlsZXNcbiAgICAgIFwiIS5EU19TdG9yZVwiLFxuICAgICAgXCIhKiovLkRTX1N0b3JlXCIsXG4gICAgXTtcbiAgICB0aGlzLm91dHB1dExvZ3MgPSBvcHRpb25zLm91dHB1dExvZ3MgPz8gXCJuZXctb25seVwiO1xuICAgIHRoaXMucGVyc2lzdGVudCA9IG9wdGlvbnMucGVyc2lzdGVudCA/PyBmYWxzZTtcbiAgICB0aGlzLmludGVyYWN0aXZlID0gb3B0aW9ucy5pbnRlcmFjdGl2ZSA/PyBmYWxzZTtcbiAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyB0YXNrQ29uZmlnKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICBkZXBlbmRzT246IHRoaXMuZGVwZW5kc09uLFxuICAgICAgZW52OiB0aGlzLmVudixcbiAgICAgIHBhc3NUaHJvdWdoRW52OiB0aGlzLnBhc3NUaHJvdWdoRW52LFxuICAgICAgb3V0cHV0czogdGhpcy5vdXRwdXRzLFxuICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICBpbnB1dHM6IHRoaXMuaW5wdXRzLFxuICAgICAgb3V0cHV0TG9nczogdGhpcy5vdXRwdXRMb2dzLFxuICAgICAgcGVyc2lzdGVudDogdGhpcy5wZXJzaXN0ZW50LFxuICAgICAgaW50ZXJhY3RpdmU6IHRoaXMuaW50ZXJhY3RpdmUsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { Component, Project } from "projen/lib";
|
|
2
|
+
import { TurboRepoTask } from "./turbo-repo-task";
|
|
3
|
+
/*******************************************************************************
|
|
4
|
+
*
|
|
5
|
+
* Turbo Repo Config
|
|
6
|
+
*
|
|
7
|
+
******************************************************************************/
|
|
8
|
+
export declare const ROOT_TURBO_TASK_NAME = "turbo:build";
|
|
9
|
+
export declare const ROOT_CI_TASK_NAME = "build:all";
|
|
10
|
+
export interface TurboRepoOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Version of turborepo to use.
|
|
13
|
+
*
|
|
14
|
+
* @default: "^2.5.2"
|
|
15
|
+
*/
|
|
16
|
+
readonly turboVersion?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Extend from the root turbo.json to create specific configuration for a package using Package Configurations.
|
|
19
|
+
*
|
|
20
|
+
* The only valid value for extends is ["//"] to inherit configuration from the root turbo.json.
|
|
21
|
+
* If extends is used in the root turbo.json, it will be ignored.
|
|
22
|
+
*
|
|
23
|
+
* https://turbo.build/repo/docs/reference/configuration#extends
|
|
24
|
+
*/
|
|
25
|
+
readonly extends?: Array<string>;
|
|
26
|
+
/**
|
|
27
|
+
* A list of globs that you want to include in all task hashes. If any file matching these globs changes, all tasks will miss cache. Globs are relative to the location of turbo.json.
|
|
28
|
+
*
|
|
29
|
+
* By default, all files in source control in the Workspace root are included in the global hash.
|
|
30
|
+
*
|
|
31
|
+
* Globs must be in the repository's source control root. Globs outside of the repository aren't supported.
|
|
32
|
+
*
|
|
33
|
+
* https://turbo.build/repo/docs/reference/configuration#globaldependencies
|
|
34
|
+
*/
|
|
35
|
+
readonly globalDependencies?: Array<string>;
|
|
36
|
+
/**
|
|
37
|
+
* A list of environment variables that you want to impact the hash of all tasks. Any change to these environment variables will cause all tasks to miss cache.
|
|
38
|
+
*
|
|
39
|
+
* For more on wildcard and negation syntax, see the env section.
|
|
40
|
+
*
|
|
41
|
+
* https://turbo.build/repo/docs/reference/configuration#globalenv
|
|
42
|
+
*/
|
|
43
|
+
readonly globalEnv?: Array<string>;
|
|
44
|
+
/**
|
|
45
|
+
* A list of environment variables that you want to make available to tasks.
|
|
46
|
+
* Using this key opts all tasks into Strict
|
|
47
|
+
* Environment Variable Mode.
|
|
48
|
+
*
|
|
49
|
+
* Additionally, Turborepo has a built-in set of global passthrough variables
|
|
50
|
+
* for common cases, like operating system environment variables. This
|
|
51
|
+
* includes variables like HOME, PATH, APPDATA, SHELL, PWD, and more. The full
|
|
52
|
+
* list can be found in the source code.
|
|
53
|
+
*
|
|
54
|
+
* Passthrough values do not contribute to hashes for caching
|
|
55
|
+
*
|
|
56
|
+
* If you want changes in these variables to cause cache misses, you will need
|
|
57
|
+
* to include them in env or globalEnv.
|
|
58
|
+
*
|
|
59
|
+
* https://turbo.build/repo/docs/reference/configuration#globalpassthroughenv
|
|
60
|
+
*/
|
|
61
|
+
readonly globalPassThroughEnv?: Array<string>;
|
|
62
|
+
/**
|
|
63
|
+
* @default: "stream"
|
|
64
|
+
*
|
|
65
|
+
* Select a terminal UI for the repository.
|
|
66
|
+
*
|
|
67
|
+
* "tui" allows for viewing each log at once and interacting with the task.
|
|
68
|
+
* "stream" outputs logs as they come in and is not interactive.
|
|
69
|
+
*
|
|
70
|
+
* https://turbo.build/repo/docs/reference/configuration#ui
|
|
71
|
+
*/
|
|
72
|
+
readonly ui?: "tui" | "stream";
|
|
73
|
+
/**
|
|
74
|
+
* @default: false
|
|
75
|
+
*
|
|
76
|
+
* Turborepo uses your repository's lockfile to determine caching behavior,
|
|
77
|
+
* Package Graphs, and more. Because of this, we use the packageManager field
|
|
78
|
+
* to help you stabilize your Turborepo.
|
|
79
|
+
*
|
|
80
|
+
* To help with incremental migration or in situations where you can't use
|
|
81
|
+
* the packageManager field, you may use
|
|
82
|
+
* --dangerously-disable-package-manager-check to opt out of this check and
|
|
83
|
+
* assume the risks of unstable lockfiles producing unpredictable behavior.
|
|
84
|
+
* When disabled, Turborepo will attempt a best-effort discovery of the
|
|
85
|
+
* intended package manager meant for the repository.
|
|
86
|
+
*
|
|
87
|
+
* https://turbo.build/repo/docs/reference/configuration#dangerouslydisablepackagemanagercheck
|
|
88
|
+
*/
|
|
89
|
+
readonly dangerouslyDisablePackageManagerCheck?: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* @default: ".turbo/cache"
|
|
92
|
+
*
|
|
93
|
+
* Specify the filesystem cache directory.
|
|
94
|
+
*
|
|
95
|
+
* https://turbo.build/repo/docs/reference/configuration#cachedir
|
|
96
|
+
*/
|
|
97
|
+
readonly cacheDir?: string;
|
|
98
|
+
/**
|
|
99
|
+
* @default: true
|
|
100
|
+
*
|
|
101
|
+
* Turborepo runs a background process to pre-calculate some expensive
|
|
102
|
+
* operations. This standalone process (daemon) is a performance optimization,
|
|
103
|
+
* and not required for proper functioning of turbo.
|
|
104
|
+
*
|
|
105
|
+
* https://turbo.build/repo/docs/reference/configuration#daemon
|
|
106
|
+
*/
|
|
107
|
+
readonly daemon?: boolean;
|
|
108
|
+
/**
|
|
109
|
+
* @default: "strict"
|
|
110
|
+
*
|
|
111
|
+
* Turborepo's Environment Modes allow you to control which environment
|
|
112
|
+
* variables are available to a task at runtime:
|
|
113
|
+
*
|
|
114
|
+
*"strict": Filter environment variables to only those that are specified
|
|
115
|
+
* in the env and globalEnv keys in turbo.json.
|
|
116
|
+
*
|
|
117
|
+
* "loose": Allow all environment variables for the process to be available.
|
|
118
|
+
*
|
|
119
|
+
* https://turbo.build/repo/docs/reference/configuration#envmode
|
|
120
|
+
*/
|
|
121
|
+
readonly envMode?: string;
|
|
122
|
+
}
|
|
123
|
+
export declare class TurboRepo extends Component {
|
|
124
|
+
readonly project: Project;
|
|
125
|
+
/**
|
|
126
|
+
* Version of turborepo to use.
|
|
127
|
+
*/
|
|
128
|
+
readonly turboVersion: string;
|
|
129
|
+
/**
|
|
130
|
+
* Extend from the root turbo.json to create specific configuration for a package using Package Configurations.
|
|
131
|
+
*
|
|
132
|
+
* The only valid value for extends is ["//"] to inherit configuration from the root turbo.json.
|
|
133
|
+
* If extends is used in the root turbo.json, it will be ignored.
|
|
134
|
+
*
|
|
135
|
+
* https://turbo.build/repo/docs/reference/configuration#extends
|
|
136
|
+
*/
|
|
137
|
+
readonly extends: Array<string>;
|
|
138
|
+
/**
|
|
139
|
+
* A list of globs that you want to include in all task hashes. If any file matching these globs changes, all tasks will miss cache. Globs are relative to the location of turbo.json.
|
|
140
|
+
*
|
|
141
|
+
* By default, all files in source control in the Workspace root are included in the global hash.
|
|
142
|
+
*
|
|
143
|
+
* Globs must be in the repository's source control root. Globs outside of the repository aren't supported.
|
|
144
|
+
*
|
|
145
|
+
* https://turbo.build/repo/docs/reference/configuration#globaldependencies
|
|
146
|
+
*/
|
|
147
|
+
readonly globalDependencies: Array<string>;
|
|
148
|
+
/**
|
|
149
|
+
* A list of environment variables that you want to impact the hash of all tasks. Any change to these environment variables will cause all tasks to miss cache.
|
|
150
|
+
*
|
|
151
|
+
* For more on wildcard and negation syntax, see the env section.
|
|
152
|
+
*
|
|
153
|
+
* https://turbo.build/repo/docs/reference/configuration#globalenv
|
|
154
|
+
*/
|
|
155
|
+
readonly globalEnv: Array<string>;
|
|
156
|
+
/**
|
|
157
|
+
* A list of environment variables that you want to make available to tasks.
|
|
158
|
+
* Using this key opts all tasks into Strict
|
|
159
|
+
* Environment Variable Mode.
|
|
160
|
+
*
|
|
161
|
+
* Additionally, Turborepo has a built-in set of global passthrough variables
|
|
162
|
+
* for common cases, like operating system environment variables. This
|
|
163
|
+
* includes variables like HOME, PATH, APPDATA, SHELL, PWD, and more. The full
|
|
164
|
+
* list can be found in the source code.
|
|
165
|
+
*
|
|
166
|
+
* Passthrough values do not contribute to hashes for caching
|
|
167
|
+
*
|
|
168
|
+
* If you want changes in these variables to cause cache misses, you will need
|
|
169
|
+
* to include them in env or globalEnv.
|
|
170
|
+
*
|
|
171
|
+
* https://turbo.build/repo/docs/reference/configuration#globalpassthroughenv
|
|
172
|
+
*/
|
|
173
|
+
readonly globalPassThroughEnv: Array<string>;
|
|
174
|
+
/**
|
|
175
|
+
* @default: "stream"
|
|
176
|
+
*
|
|
177
|
+
* Select a terminal UI for the repository.
|
|
178
|
+
*
|
|
179
|
+
* "tui" allows for viewing each log at once and interacting with the task.
|
|
180
|
+
* "stream" outputs logs as they come in and is not interactive.
|
|
181
|
+
*
|
|
182
|
+
* https://turbo.build/repo/docs/reference/configuration#ui
|
|
183
|
+
*/
|
|
184
|
+
readonly ui: "tui" | "stream";
|
|
185
|
+
/**
|
|
186
|
+
* @default: false
|
|
187
|
+
*
|
|
188
|
+
* Turborepo uses your repository's lockfile to determine caching behavior,
|
|
189
|
+
* Package Graphs, and more. Because of this, we use the packageManager field
|
|
190
|
+
* to help you stabilize your Turborepo.
|
|
191
|
+
*
|
|
192
|
+
* To help with incremental migration or in situations where you can't use
|
|
193
|
+
* the packageManager field, you may use
|
|
194
|
+
* --dangerously-disable-package-manager-check to opt out of this check and
|
|
195
|
+
* assume the risks of unstable lockfiles producing unpredictable behavior.
|
|
196
|
+
* When disabled, Turborepo will attempt a best-effort discovery of the
|
|
197
|
+
* intended package manager meant for the repository.
|
|
198
|
+
*
|
|
199
|
+
* https://turbo.build/repo/docs/reference/configuration#dangerouslydisablepackagemanagercheck
|
|
200
|
+
*/
|
|
201
|
+
readonly dangerouslyDisablePackageManagerCheck: boolean;
|
|
202
|
+
/**
|
|
203
|
+
* @default: ".turbo/cache"
|
|
204
|
+
*
|
|
205
|
+
* Specify the filesystem cache directory.
|
|
206
|
+
*
|
|
207
|
+
* https://turbo.build/repo/docs/reference/configuration#cachedir
|
|
208
|
+
*/
|
|
209
|
+
readonly cacheDir: string;
|
|
210
|
+
/**
|
|
211
|
+
* @default: true
|
|
212
|
+
*
|
|
213
|
+
* Turborepo runs a background process to pre-calculate some expensive
|
|
214
|
+
* operations. This standalone process (daemon) is a performance optimization,
|
|
215
|
+
* and not required for proper functioning of turbo.
|
|
216
|
+
*
|
|
217
|
+
* https://turbo.build/repo/docs/reference/configuration#daemon
|
|
218
|
+
*/
|
|
219
|
+
readonly daemon: boolean;
|
|
220
|
+
/**
|
|
221
|
+
* @default: "strict"
|
|
222
|
+
*
|
|
223
|
+
* Turborepo's Environment Modes allow you to control which environment
|
|
224
|
+
* variables are available to a task at runtime:
|
|
225
|
+
*
|
|
226
|
+
*"strict": Filter environment variables to only those that are specified
|
|
227
|
+
* in the env and globalEnv keys in turbo.json.
|
|
228
|
+
*
|
|
229
|
+
* "loose": Allow all environment variables for the process to be available.
|
|
230
|
+
*
|
|
231
|
+
* https://turbo.build/repo/docs/reference/configuration#envmode
|
|
232
|
+
*/
|
|
233
|
+
readonly envMode: string;
|
|
234
|
+
/**
|
|
235
|
+
* is this the root project?
|
|
236
|
+
*/
|
|
237
|
+
readonly isRootProject: boolean;
|
|
238
|
+
/**
|
|
239
|
+
* Main turbo:build task
|
|
240
|
+
*/
|
|
241
|
+
readonly buildTask: TurboRepoTask;
|
|
242
|
+
/**
|
|
243
|
+
*
|
|
244
|
+
*/
|
|
245
|
+
readonly preCompileTask?: TurboRepoTask;
|
|
246
|
+
/**
|
|
247
|
+
*
|
|
248
|
+
*/
|
|
249
|
+
readonly compileTask?: TurboRepoTask;
|
|
250
|
+
/**
|
|
251
|
+
*
|
|
252
|
+
*/
|
|
253
|
+
readonly postCompileTask?: TurboRepoTask;
|
|
254
|
+
/**
|
|
255
|
+
*
|
|
256
|
+
*/
|
|
257
|
+
readonly testTask?: TurboRepoTask;
|
|
258
|
+
/**
|
|
259
|
+
*
|
|
260
|
+
*/
|
|
261
|
+
readonly packageTask?: TurboRepoTask;
|
|
262
|
+
/**
|
|
263
|
+
* Sub-Tasks to run
|
|
264
|
+
*/
|
|
265
|
+
readonly tasks: Array<TurboRepoTask>;
|
|
266
|
+
constructor(project: Project, options?: TurboRepoOptions);
|
|
267
|
+
preSynthesize(): void;
|
|
268
|
+
}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TurboRepo = exports.ROOT_CI_TASK_NAME = exports.ROOT_TURBO_TASK_NAME = void 0;
|
|
4
|
+
const lib_1 = require("projen/lib");
|
|
5
|
+
const javascript_1 = require("projen/lib/javascript");
|
|
6
|
+
const turbo_repo_task_1 = require("./turbo-repo-task");
|
|
7
|
+
/*******************************************************************************
|
|
8
|
+
*
|
|
9
|
+
* Turbo Repo Config
|
|
10
|
+
*
|
|
11
|
+
******************************************************************************/
|
|
12
|
+
exports.ROOT_TURBO_TASK_NAME = "turbo:build";
|
|
13
|
+
exports.ROOT_CI_TASK_NAME = "build:all";
|
|
14
|
+
class TurboRepo extends lib_1.Component {
|
|
15
|
+
constructor(project, options = {}) {
|
|
16
|
+
super(project);
|
|
17
|
+
this.project = project;
|
|
18
|
+
/**
|
|
19
|
+
* Sub-Tasks to run
|
|
20
|
+
*/
|
|
21
|
+
this.tasks = [];
|
|
22
|
+
if (!(project instanceof javascript_1.NodeProject)) {
|
|
23
|
+
throw new Error("TurboRepo can only be added to Node.js projects.");
|
|
24
|
+
}
|
|
25
|
+
this.turboVersion = options.turboVersion ?? "^2.0.0";
|
|
26
|
+
this.isRootProject = project === project.root;
|
|
27
|
+
/**
|
|
28
|
+
* Add turborepo package to root project.
|
|
29
|
+
*/
|
|
30
|
+
if (this.isRootProject) {
|
|
31
|
+
project.addDevDeps(`turbo@${this.turboVersion}`);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Ignore the working cache for turbo.
|
|
35
|
+
*/
|
|
36
|
+
project.gitignore.addPatterns("/.turbo");
|
|
37
|
+
/***************************************************************************
|
|
38
|
+
*
|
|
39
|
+
* Set some default options
|
|
40
|
+
*
|
|
41
|
+
**************************************************************************/
|
|
42
|
+
this.extends = options.extends ?? (this.isRootProject ? [] : ["//"]);
|
|
43
|
+
this.globalDependencies = options.globalDependencies ?? [];
|
|
44
|
+
this.globalEnv = options.globalEnv ?? [];
|
|
45
|
+
this.globalPassThroughEnv = options.globalPassThroughEnv ?? [];
|
|
46
|
+
this.ui = options.ui ?? "stream";
|
|
47
|
+
this.dangerouslyDisablePackageManagerCheck =
|
|
48
|
+
options.dangerouslyDisablePackageManagerCheck ?? false;
|
|
49
|
+
this.cacheDir = options.cacheDir ?? ".turbo/cache";
|
|
50
|
+
this.daemon = options.daemon ?? true;
|
|
51
|
+
this.envMode = options.envMode ?? "strict";
|
|
52
|
+
/***************************************************************************
|
|
53
|
+
*
|
|
54
|
+
* Turbo Build Task
|
|
55
|
+
*
|
|
56
|
+
* All turbo configs contain a turbo build task.
|
|
57
|
+
*
|
|
58
|
+
**************************************************************************/
|
|
59
|
+
/**
|
|
60
|
+
* The turbo entry point definition for the turbo:build task. This exists
|
|
61
|
+
* in each project and is written tot he turbo.json file. This task is not
|
|
62
|
+
* a projen task or a Node task.
|
|
63
|
+
*/
|
|
64
|
+
this.buildTask = new turbo_repo_task_1.TurboRepoTask(this.project, {
|
|
65
|
+
name: exports.ROOT_TURBO_TASK_NAME,
|
|
66
|
+
dependsOn: this.isRootProject ? [`^${exports.ROOT_TURBO_TASK_NAME}`] : [],
|
|
67
|
+
});
|
|
68
|
+
/***************************************************************************
|
|
69
|
+
*
|
|
70
|
+
* Turbo Build All Task
|
|
71
|
+
*
|
|
72
|
+
* The Projen entry point. This only exists in the root and is a projen
|
|
73
|
+
* task that can be run using pnpm.
|
|
74
|
+
*
|
|
75
|
+
* - Turns off telemetry
|
|
76
|
+
* - Runs root turbo task to build all sub-projects.
|
|
77
|
+
*
|
|
78
|
+
**************************************************************************/
|
|
79
|
+
if (this.isRootProject) {
|
|
80
|
+
/**
|
|
81
|
+
* Create and configure the build all task.
|
|
82
|
+
*/
|
|
83
|
+
const buildAll = this.project.tasks.addTask(exports.ROOT_CI_TASK_NAME, {
|
|
84
|
+
description: "Root build followed by sub-project builds. Mimics the CI build process in one step.",
|
|
85
|
+
});
|
|
86
|
+
buildAll.exec("turbo telemetry disable");
|
|
87
|
+
buildAll.exec(`turbo ${exports.ROOT_TURBO_TASK_NAME} --summarize --concurrency=10`);
|
|
88
|
+
/**
|
|
89
|
+
* Attach build all turbo runner to the build workflow at github.
|
|
90
|
+
*/
|
|
91
|
+
project.buildWorkflow?.addPostBuildSteps({
|
|
92
|
+
name: "Build Sub Projects",
|
|
93
|
+
run: `npx projen ${exports.ROOT_CI_TASK_NAME}`,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* SUB-PROJECT
|
|
98
|
+
*
|
|
99
|
+
* Creates tasks for the typical lifecycle for all project projects.
|
|
100
|
+
*/
|
|
101
|
+
if (!this.isRootProject) {
|
|
102
|
+
this.preCompileTask = new turbo_repo_task_1.TurboRepoTask(project, {
|
|
103
|
+
name: "pre-compile",
|
|
104
|
+
inputs: ["src/**/*", "*.json"],
|
|
105
|
+
});
|
|
106
|
+
this.compileTask = new turbo_repo_task_1.TurboRepoTask(project, { name: "compile" });
|
|
107
|
+
this.postCompileTask = new turbo_repo_task_1.TurboRepoTask(project, {
|
|
108
|
+
name: "post-compile",
|
|
109
|
+
});
|
|
110
|
+
this.testTask = new turbo_repo_task_1.TurboRepoTask(project, { name: "test" });
|
|
111
|
+
this.packageTask = new turbo_repo_task_1.TurboRepoTask(project, {
|
|
112
|
+
name: "package",
|
|
113
|
+
inputs: [".npmignore"],
|
|
114
|
+
});
|
|
115
|
+
this.tasks.push(this.preCompileTask, this.compileTask, this.postCompileTask, this.testTask, this.packageTask);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
preSynthesize() {
|
|
119
|
+
/**
|
|
120
|
+
* Add any local workspace specific deps to dependsOn so that we know
|
|
121
|
+
* compile has finished before attempting to use any distribution artifacts.
|
|
122
|
+
*
|
|
123
|
+
* Do this in presynth so that we can be sure all project dependencies have
|
|
124
|
+
* been defined first.
|
|
125
|
+
*/
|
|
126
|
+
let nextDependsOn = this.project.deps.all
|
|
127
|
+
.filter((d) => d.version === "workspace:*")
|
|
128
|
+
.map((d) => [d.name, exports.ROOT_TURBO_TASK_NAME].join("#"));
|
|
129
|
+
/**
|
|
130
|
+
* Loop over all projen tasks and their corresponding turbo task
|
|
131
|
+
* definitions. Chain them together using dependsOn, along with any outside
|
|
132
|
+
* package dependencies.
|
|
133
|
+
*/
|
|
134
|
+
if (!this.isRootProject) {
|
|
135
|
+
[
|
|
136
|
+
[this.project.preCompileTask, this.preCompileTask],
|
|
137
|
+
[this.project.compileTask, this.compileTask],
|
|
138
|
+
[this.project.postCompileTask, this.postCompileTask],
|
|
139
|
+
[this.project.testTask, this.testTask],
|
|
140
|
+
[this.project.packageTask, this.packageTask],
|
|
141
|
+
].forEach(([pjTask, turboTask]) => {
|
|
142
|
+
/**
|
|
143
|
+
* If steps exist chain using dependsOn
|
|
144
|
+
*/
|
|
145
|
+
if (pjTask && turboTask && pjTask.steps.length > 0) {
|
|
146
|
+
if (nextDependsOn.length > 0) {
|
|
147
|
+
turboTask.dependsOn.push(...nextDependsOn);
|
|
148
|
+
}
|
|
149
|
+
nextDependsOn = [turboTask.name];
|
|
150
|
+
/**
|
|
151
|
+
* Otherwise, if a task doesn't do anything, deactivate it.
|
|
152
|
+
*/
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
turboTask.isActive = false;
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
/**
|
|
159
|
+
* Main build entry point depends on whatever was last.
|
|
160
|
+
*/
|
|
161
|
+
this.buildTask.dependsOn.push(...nextDependsOn);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* The name for the turbo config file.
|
|
165
|
+
*/
|
|
166
|
+
const fileName = "turbo.json";
|
|
167
|
+
/**
|
|
168
|
+
* Ensure that turbo config doesn't end up in any package distributions.
|
|
169
|
+
*/
|
|
170
|
+
this.project.addPackageIgnore(fileName);
|
|
171
|
+
/**
|
|
172
|
+
* The content of this YAML file will be resolved at synth time. By then,
|
|
173
|
+
* any sub-projects will be defined and this will be a complete list.
|
|
174
|
+
*/
|
|
175
|
+
new lib_1.JsonFile(this.project, fileName, {
|
|
176
|
+
obj: {
|
|
177
|
+
extends: this.extends.length ? this.extends : undefined,
|
|
178
|
+
globalDependencies: this.isRootProject && this.globalDependencies.length
|
|
179
|
+
? this.globalDependencies
|
|
180
|
+
: undefined,
|
|
181
|
+
globalEnv: this.isRootProject && this.globalEnv.length
|
|
182
|
+
? this.globalEnv
|
|
183
|
+
: undefined,
|
|
184
|
+
globalPassThroughEnv: this.isRootProject && this.globalPassThroughEnv.length
|
|
185
|
+
? this.globalPassThroughEnv
|
|
186
|
+
: undefined,
|
|
187
|
+
ui: this.isRootProject ? this.ui : undefined,
|
|
188
|
+
dangerouslyDisablePackageManagerCheck: this.isRootProject
|
|
189
|
+
? this.dangerouslyDisablePackageManagerCheck
|
|
190
|
+
: undefined,
|
|
191
|
+
cacheDir: this.isRootProject ? this.cacheDir : undefined,
|
|
192
|
+
daemon: this.isRootProject ? this.daemon : undefined,
|
|
193
|
+
envMode: this.isRootProject ? this.envMode : undefined,
|
|
194
|
+
/**
|
|
195
|
+
* All tasks
|
|
196
|
+
*/
|
|
197
|
+
tasks: this.tasks
|
|
198
|
+
.filter((task) => task.isActive)
|
|
199
|
+
.reduce((acc, task) => {
|
|
200
|
+
acc[task.name] = {
|
|
201
|
+
...task.taskConfig(),
|
|
202
|
+
};
|
|
203
|
+
return acc;
|
|
204
|
+
}, {
|
|
205
|
+
[this.buildTask.name]: { ...this.buildTask.taskConfig() },
|
|
206
|
+
}),
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
super.preSynthesize();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
exports.TurboRepo = TurboRepo;
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyYm8tcmVwby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90dXJiby90dXJiby1yZXBvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9DQUFnRTtBQUNoRSxzREFBb0Q7QUFDcEQsdURBQWtEO0FBRWxEOzs7O2dGQUlnRjtBQUVuRSxRQUFBLG9CQUFvQixHQUFHLGFBQWEsQ0FBQztBQUNyQyxRQUFBLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztBQTZIN0MsTUFBYSxTQUFVLFNBQVEsZUFBUztJQStKdEMsWUFDa0IsT0FBZ0IsRUFDaEMsVUFBNEIsRUFBRTtRQUU5QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFIQyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBTmxDOztXQUVHO1FBQ2EsVUFBSyxHQUF5QixFQUFFLENBQUM7UUFRL0MsSUFBSSxDQUFDLENBQUMsT0FBTyxZQUFZLHdCQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQztRQUNyRCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBRTlDOztXQUVHO1FBQ0gsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFRDs7V0FFRztRQUNILE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpDOzs7O29GQUk0RTtRQUU1RSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENB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QXJZRCw4QkFxWUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEpzb25GaWxlLCBQcm9qZWN0LCBUYXNrIH0gZnJvbSBcInByb2plbi9saWJcIjtcbmltcG9ydCB7IE5vZGVQcm9qZWN0IH0gZnJvbSBcInByb2plbi9saWIvamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgVHVyYm9SZXBvVGFzayB9IGZyb20gXCIuL3R1cmJvLXJlcG8tdGFza1wiO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICpcbiAqIFR1cmJvIFJlcG8gQ29uZmlnXG4gKlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuZXhwb3J0IGNvbnN0IFJPT1RfVFVSQk9fVEFTS19OQU1FID0gXCJ0dXJibzpidWlsZFwiO1xuZXhwb3J0IGNvbnN0IFJPT1RfQ0lfVEFTS19OQU1FID0gXCJidWlsZDphbGxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBUdXJib1JlcG9PcHRpb25zIHtcbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdHVyYm9yZXBvIHRvIHVzZS5cbiAgICpcbiAgICogQGRlZmF1bHQ6IFwiXjIuNS4yXCJcbiAgICovXG4gIHJlYWRvbmx5IHR1cmJvVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRXh0ZW5kIGZyb20gdGhlIHJvb3QgdHVyYm8uanNvbiB0byBjcmVhdGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgYSBwYWNrYWdlIHVzaW5nIFBhY2thZ2UgQ29uZmlndXJhdGlvbnMuXG4gICAqXG4gICAqIFRoZSBvbmx5IHZhbGlkIHZhbHVlIGZvciBleHRlbmRzIGlzIFtcIi8vXCJdIHRvIGluaGVyaXQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSByb290IHR1cmJvLmpzb24uXG4gICAqIElmIGV4dGVuZHMgaXMgdXNlZCBpbiB0aGUgcm9vdCB0dXJiby5qc29uLCBpdCB3aWxsIGJlIGlnbm9yZWQuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2V4dGVuZHNcbiAgICovXG4gIHJlYWRvbmx5IGV4dGVuZHM/OiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZ2xvYnMgdGhhdCB5b3Ugd2FudCB0byBpbmNsdWRlIGluIGFsbCB0YXNrIGhhc2hlcy4gSWYgYW55IGZpbGUgbWF0Y2hpbmcgdGhlc2UgZ2xvYnMgY2hhbmdlcywgYWxsIHRhc2tzIHdpbGwgbWlzcyBjYWNoZS4gR2xvYnMgYXJlIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbiBvZiB0dXJiby5qc29uLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBhbGwgZmlsZXMgaW4gc291cmNlIGNvbnRyb2wgaW4gdGhlIFdvcmtzcGFjZSByb290IGFyZSBpbmNsdWRlZCBpbiB0aGUgZ2xvYmFsIGhhc2guXG4gICAqXG4gICAqIEdsb2JzIG11c3QgYmUgaW4gdGhlIHJlcG9zaXRvcnkncyBzb3VyY2UgY29udHJvbCByb290LiBHbG9icyBvdXRzaWRlIG9mIHRoZSByZXBvc2l0b3J5IGFyZW4ndCBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2dsb2JhbGRlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFsRGVwZW5kZW5jaWVzPzogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHlvdSB3YW50IHRvIGltcGFjdCB0aGUgaGFzaCBvZiBhbGwgdGFza3MuIEFueSBjaGFuZ2UgdG8gdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgY2F1c2UgYWxsIHRhc2tzIHRvIG1pc3MgY2FjaGUuXG4gICAqXG4gICAqIEZvciBtb3JlIG9uIHdpbGRjYXJkIGFuZCBuZWdhdGlvbiBzeW50YXgsIHNlZSB0aGUgZW52IHNlY3Rpb24uXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2dsb2JhbGVudlxuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFsRW52PzogQXJyYXk8c3RyaW5nPjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHlvdSB3YW50IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRhc2tzLlxuICAgKiBVc2luZyB0aGlzIGtleSBvcHRzIGFsbCB0YXNrcyBpbnRvIFN0cmljdFxuICAgKiBFbnZpcm9ubWVudCBWYXJpYWJsZSBNb2RlLlxuICAgKlxuICAgKiBBZGRpdGlvbmFsbHksIFR1cmJvcmVwbyBoYXMgYSBidWlsdC1pbiBzZXQgb2YgZ2xvYmFsIHBhc3N0aHJvdWdoIHZhcmlhYmxlc1xuICAgKiBmb3IgY29tbW9uIGNhc2VzLCBsaWtlIG9wZXJhdGluZyBzeXN0ZW0gZW52aXJvbm1lbnQgdmFyaWFibGVzLiBUaGlzXG4gICAqIGluY2x1ZGVzIHZhcmlhYmxlcyBsaWtlIEhPTUUsIFBBVEgsIEFQUERBVEEsIFNIRUxMLCBQV0QsIGFuZCBtb3JlLiBUaGUgZnVsbFxuICAgKiBsaXN0IGNhbiBiZSBmb3VuZCBpbiB0aGUgc291cmNlIGNvZGUuXG4gICAqXG4gICAqIFBhc3N0aHJvdWdoIHZhbHVlcyBkbyBub3QgY29udHJpYnV0ZSB0byBoYXNoZXMgZm9yIGNhY2hpbmdcbiAgICpcbiAgICogSWYgeW91IHdhbnQgY2hhbmdlcyBpbiB0aGVzZSB2YXJpYWJsZXMgdG8gY2F1c2UgY2FjaGUgbWlzc2VzLCB5b3Ugd2lsbCBuZWVkXG4gICAqIHRvIGluY2x1ZGUgdGhlbSBpbiBlbnYgb3IgZ2xvYmFsRW52LlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNnbG9iYWxwYXNzdGhyb3VnaGVudlxuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFsUGFzc1Rocm91Z2hFbnY/OiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogXCJzdHJlYW1cIlxuICAgKlxuICAgKiBTZWxlY3QgYSB0ZXJtaW5hbCBVSSBmb3IgdGhlIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIFwidHVpXCIgYWxsb3dzIGZvciB2aWV3aW5nIGVhY2ggbG9nIGF0IG9uY2UgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlIHRhc2suXG4gICAqIFwic3RyZWFtXCIgb3V0cHV0cyBsb2dzIGFzIHRoZXkgY29tZSBpbiBhbmQgaXMgbm90IGludGVyYWN0aXZlLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiN1aVxuICAgKi9cbiAgcmVhZG9ubHkgdWk/OiBcInR1aVwiIHwgXCJzdHJlYW1cIjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IGZhbHNlXG4gICAqXG4gICAqIFR1cmJvcmVwbyB1c2VzIHlvdXIgcmVwb3NpdG9yeSdzIGxvY2tmaWxlIHRvIGRldGVybWluZSBjYWNoaW5nIGJlaGF2aW9yLFxuICAgKiBQYWNrYWdlIEdyYXBocywgYW5kIG1vcmUuIEJlY2F1c2Ugb2YgdGhpcywgd2UgdXNlIHRoZSBwYWNrYWdlTWFuYWdlciBmaWVsZFxuICAgKiB0byBoZWxwIHlvdSBzdGFiaWxpemUgeW91ciBUdXJib3JlcG8uXG4gICAqXG4gICAqIFRvIGhlbHAgd2l0aCBpbmNyZW1lbnRhbCBtaWdyYXRpb24gb3IgaW4gc2l0dWF0aW9ucyB3aGVyZSB5b3UgY2FuJ3QgdXNlXG4gICAqIHRoZSBwYWNrYWdlTWFuYWdlciBmaWVsZCwgeW91IG1heSB1c2VcbiAgICogLS1kYW5nZXJvdXNseS1kaXNhYmxlLXBhY2thZ2UtbWFuYWdlci1jaGVjayB0byBvcHQgb3V0IG9mIHRoaXMgY2hlY2sgYW5kXG4gICAqIGFzc3VtZSB0aGUgcmlza3Mgb2YgdW5zdGFibGUgbG9ja2ZpbGVzIHByb2R1Y2luZyB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLlxuICAgKiBXaGVuIGRpc2FibGVkLCBUdXJib3JlcG8gd2lsbCBhdHRlbXB0IGEgYmVzdC1lZmZvcnQgZGlzY292ZXJ5IG9mIHRoZVxuICAgKiBpbnRlbmRlZCBwYWNrYWdlIG1hbmFnZXIgbWVhbnQgZm9yIHRoZSByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNkYW5nZXJvdXNseWRpc2FibGVwYWNrYWdlbWFuYWdlcmNoZWNrXG4gICAqL1xuICByZWFkb25seSBkYW5nZXJvdXNseURpc2FibGVQYWNrYWdlTWFuYWdlckNoZWNrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IFwiLnR1cmJvL2NhY2hlXCJcbiAgICpcbiAgICogU3BlY2lmeSB0aGUgZmlsZXN5c3RlbSBjYWNoZSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2NhY2hlZGlyXG4gICAqL1xuICByZWFkb25seSBjYWNoZURpcj86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IHRydWVcbiAgICpcbiAgICogVHVyYm9yZXBvIHJ1bnMgYSBiYWNrZ3JvdW5kIHByb2Nlc3MgdG8gcHJlLWNhbGN1bGF0ZSBzb21lIGV4cGVuc2l2ZVxuICAgKiBvcGVyYXRpb25zLiBUaGlzIHN0YW5kYWxvbmUgcHJvY2VzcyAoZGFlbW9uKSBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbixcbiAgICogYW5kIG5vdCByZXF1aXJlZCBmb3IgcHJvcGVyIGZ1bmN0aW9uaW5nIG9mIHR1cmJvLlxuICAgKlxuICAgKiBodHRwczovL3R1cmJvLmJ1aWxkL3JlcG8vZG9jcy9yZWZlcmVuY2UvY29uZmlndXJhdGlvbiNkYWVtb25cbiAgICovXG4gIHJlYWRvbmx5IGRhZW1vbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBcInN0cmljdFwiXG4gICAqXG4gICAqIFR1cmJvcmVwbydzIEVudmlyb25tZW50IE1vZGVzIGFsbG93IHlvdSB0byBjb250cm9sIHdoaWNoIGVudmlyb25tZW50XG4gICAqIHZhcmlhYmxlcyBhcmUgYXZhaWxhYmxlIHRvIGEgdGFzayBhdCBydW50aW1lOlxuICAgKlxuICAgKlwic3RyaWN0XCI6IEZpbHRlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gb25seSB0aG9zZSB0aGF0IGFyZSBzcGVjaWZpZWRcbiAgICogaW4gdGhlIGVudiBhbmQgZ2xvYmFsRW52IGtleXMgaW4gdHVyYm8uanNvbi5cbiAgICpcbiAgICogXCJsb29zZVwiOiBBbGxvdyBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgcHJvY2VzcyB0byBiZSBhdmFpbGFibGUuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2Vudm1vZGVcbiAgICovXG4gIHJlYWRvbmx5IGVudk1vZGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUdXJib1JlcG8gZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogVmVyc2lvbiBvZiB0dXJib3JlcG8gdG8gdXNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHR1cmJvVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeHRlbmQgZnJvbSB0aGUgcm9vdCB0dXJiby5qc29uIHRvIGNyZWF0ZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZvciBhIHBhY2thZ2UgdXNpbmcgUGFja2FnZSBDb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogVGhlIG9ubHkgdmFsaWQgdmFsdWUgZm9yIGV4dGVuZHMgaXMgW1wiLy9cIl0gdG8gaW5oZXJpdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHJvb3QgdHVyYm8uanNvbi5cbiAgICogSWYgZXh0ZW5kcyBpcyB1c2VkIGluIHRoZSByb290IHR1cmJvLmpzb24sIGl0IHdpbGwgYmUgaWdub3JlZC5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZXh0ZW5kc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4dGVuZHM6IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBnbG9icyB0aGF0IHlvdSB3YW50IHRvIGluY2x1ZGUgaW4gYWxsIHRhc2sgaGFzaGVzLiBJZiBhbnkgZmlsZSBtYXRjaGluZyB0aGVzZSBnbG9icyBjaGFuZ2VzLCBhbGwgdGFza3Mgd2lsbCBtaXNzIGNhY2hlLiBHbG9icyBhcmUgcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIG9mIHR1cmJvLmpzb24uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGFsbCBmaWxlcyBpbiBzb3VyY2UgY29udHJvbCBpbiB0aGUgV29ya3NwYWNlIHJvb3QgYXJlIGluY2x1ZGVkIGluIHRoZSBnbG9iYWwgaGFzaC5cbiAgICpcbiAgICogR2xvYnMgbXVzdCBiZSBpbiB0aGUgcmVwb3NpdG9yeSdzIHNvdXJjZSBjb250cm9sIHJvb3QuIEdsb2JzIG91dHNpZGUgb2YgdGhlIHJlcG9zaXRvcnkgYXJlbid0IHN1cHBvcnRlZC5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZ2xvYmFsZGVwZW5kZW5jaWVzXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2xvYmFsRGVwZW5kZW5jaWVzOiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgeW91IHdhbnQgdG8gaW1wYWN0IHRoZSBoYXNoIG9mIGFsbCB0YXNrcy4gQW55IGNoYW5nZSB0byB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2lsbCBjYXVzZSBhbGwgdGFza3MgdG8gbWlzcyBjYWNoZS5cbiAgICpcbiAgICogRm9yIG1vcmUgb24gd2lsZGNhcmQgYW5kIG5lZ2F0aW9uIHN5bnRheCwgc2VlIHRoZSBlbnYgc2VjdGlvbi5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZ2xvYmFsZW52XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2xvYmFsRW52OiBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgeW91IHdhbnQgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGFza3MuXG4gICAqIFVzaW5nIHRoaXMga2V5IG9wdHMgYWxsIHRhc2tzIGludG8gU3RyaWN0XG4gICAqIEVudmlyb25tZW50IFZhcmlhYmxlIE1vZGUuXG4gICAqXG4gICAqIEFkZGl0aW9uYWxseSwgVHVyYm9yZXBvIGhhcyBhIGJ1aWx0LWluIHNldCBvZiBnbG9iYWwgcGFzc3Rocm91Z2ggdmFyaWFibGVzXG4gICAqIGZvciBjb21tb24gY2FzZXMsIGxpa2Ugb3BlcmF0aW5nIHN5c3RlbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFRoaXNcbiAgICogaW5jbHVkZXMgdmFyaWFibGVzIGxpa2UgSE9NRSwgUEFUSCwgQVBQREFUQSwgU0hFTEwsIFBXRCwgYW5kIG1vcmUuIFRoZSBmdWxsXG4gICAqIGxpc3QgY2FuIGJlIGZvdW5kIGluIHRoZSBzb3VyY2UgY29kZS5cbiAgICpcbiAgICogUGFzc3Rocm91Z2ggdmFsdWVzIGRvIG5vdCBjb250cmlidXRlIHRvIGhhc2hlcyBmb3IgY2FjaGluZ1xuICAgKlxuICAgKiBJZiB5b3Ugd2FudCBjaGFuZ2VzIGluIHRoZXNlIHZhcmlhYmxlcyB0byBjYXVzZSBjYWNoZSBtaXNzZXMsIHlvdSB3aWxsIG5lZWRcbiAgICogdG8gaW5jbHVkZSB0aGVtIGluIGVudiBvciBnbG9iYWxFbnYuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2dsb2JhbHBhc3N0aHJvdWdoZW52XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2xvYmFsUGFzc1Rocm91Z2hFbnY6IEFycmF5PHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0OiBcInN0cmVhbVwiXG4gICAqXG4gICAqIFNlbGVjdCBhIHRlcm1pbmFsIFVJIGZvciB0aGUgcmVwb3NpdG9yeS5cbiAgICpcbiAgICogXCJ0dWlcIiBhbGxvd3MgZm9yIHZpZXdpbmcgZWFjaCBsb2cgYXQgb25jZSBhbmQgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgdGFzay5cbiAgICogXCJzdHJlYW1cIiBvdXRwdXRzIGxvZ3MgYXMgdGhleSBjb21lIGluIGFuZCBpcyBub3QgaW50ZXJhY3RpdmUuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI3VpXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdWk6IFwidHVpXCIgfCBcInN0cmVhbVwiO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogZmFsc2VcbiAgICpcbiAgICogVHVyYm9yZXBvIHVzZXMgeW91ciByZXBvc2l0b3J5J3MgbG9ja2ZpbGUgdG8gZGV0ZXJtaW5lIGNhY2hpbmcgYmVoYXZpb3IsXG4gICAqIFBhY2thZ2UgR3JhcGhzLCBhbmQgbW9yZS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSB1c2UgdGhlIHBhY2thZ2VNYW5hZ2VyIGZpZWxkXG4gICAqIHRvIGhlbHAgeW91IHN0YWJpbGl6ZSB5b3VyIFR1cmJvcmVwby5cbiAgICpcbiAgICogVG8gaGVscCB3aXRoIGluY3JlbWVudGFsIG1pZ3JhdGlvbiBvciBpbiBzaXR1YXRpb25zIHdoZXJlIHlvdSBjYW4ndCB1c2VcbiAgICogdGhlIHBhY2thZ2VNYW5hZ2VyIGZpZWxkLCB5b3UgbWF5IHVzZVxuICAgKiAtLWRhbmdlcm91c2x5LWRpc2FibGUtcGFja2FnZS1tYW5hZ2VyLWNoZWNrIHRvIG9wdCBvdXQgb2YgdGhpcyBjaGVjayBhbmRcbiAgICogYXNzdW1lIHRoZSByaXNrcyBvZiB1bnN0YWJsZSBsb2NrZmlsZXMgcHJvZHVjaW5nIHVucHJlZGljdGFibGUgYmVoYXZpb3IuXG4gICAqIFdoZW4gZGlzYWJsZWQsIFR1cmJvcmVwbyB3aWxsIGF0dGVtcHQgYSBiZXN0LWVmZm9ydCBkaXNjb3Zlcnkgb2YgdGhlXG4gICAqIGludGVuZGVkIHBhY2thZ2UgbWFuYWdlciBtZWFudCBmb3IgdGhlIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2Rhbmdlcm91c2x5ZGlzYWJsZXBhY2thZ2VtYW5hZ2VyY2hlY2tcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkYW5nZXJvdXNseURpc2FibGVQYWNrYWdlTWFuYWdlckNoZWNrOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogXCIudHVyYm8vY2FjaGVcIlxuICAgKlxuICAgKiBTcGVjaWZ5IHRoZSBmaWxlc3lzdGVtIGNhY2hlIGRpcmVjdG9yeS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jY2FjaGVkaXJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjYWNoZURpcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdDogdHJ1ZVxuICAgKlxuICAgKiBUdXJib3JlcG8gcnVucyBhIGJhY2tncm91bmQgcHJvY2VzcyB0byBwcmUtY2FsY3VsYXRlIHNvbWUgZXhwZW5zaXZlXG4gICAqIG9wZXJhdGlvbnMuIFRoaXMgc3RhbmRhbG9uZSBwcm9jZXNzIChkYWVtb24pIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLFxuICAgKiBhbmQgbm90IHJlcXVpcmVkIGZvciBwcm9wZXIgZnVuY3Rpb25pbmcgb2YgdHVyYm8uXG4gICAqXG4gICAqIGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL3JlZmVyZW5jZS9jb25maWd1cmF0aW9uI2RhZW1vblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRhZW1vbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlZmF1bHQ6IFwic3RyaWN0XCJcbiAgICpcbiAgICogVHVyYm9yZXBvJ3MgRW52aXJvbm1lbnQgTW9kZXMgYWxsb3cgeW91IHRvIGNvbnRyb2wgd2hpY2ggZW52aXJvbm1lbnRcbiAgICogdmFyaWFibGVzIGFyZSBhdmFpbGFibGUgdG8gYSB0YXNrIGF0IHJ1bnRpbWU6XG4gICAqXG4gICAqXCJzdHJpY3RcIjogRmlsdGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBvbmx5IHRob3NlIHRoYXQgYXJlIHNwZWNpZmllZFxuICAgKiBpbiB0aGUgZW52IGFuZCBnbG9iYWxFbnYga2V5cyBpbiB0dXJiby5qc29uLlxuICAgKlxuICAgKiBcImxvb3NlXCI6IEFsbG93IGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBwcm9jZXNzIHRvIGJlIGF2YWlsYWJsZS5cbiAgICpcbiAgICogaHR0cHM6Ly90dXJiby5idWlsZC9yZXBvL2RvY3MvcmVmZXJlbmNlL2NvbmZpZ3VyYXRpb24jZW52bW9kZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVudk1vZGU6IHN0cmluZztcblxuICAvKipcbiAgICogaXMgdGhpcyB0aGUgcm9vdCBwcm9qZWN0P1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzUm9vdFByb2plY3Q6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE1haW4gdHVyYm86YnVpbGQgdGFza1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkVGFzazogVHVyYm9SZXBvVGFzaztcblxuICAvKipcbiAgICpcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcmVDb21waWxlVGFzaz86IFR1cmJvUmVwb1Rhc2s7XG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbXBpbGVUYXNrPzogVHVyYm9SZXBvVGFzaztcblxuICAvKipcbiAgICpcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwb3N0Q29tcGlsZVRhc2s/OiBUdXJib1JlcG9UYXNrO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRlc3RUYXNrPzogVHVyYm9SZXBvVGFzaztcblxuICAvKipcbiAgICpcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYWNrYWdlVGFzaz86IFR1cmJvUmVwb1Rhc2s7XG5cbiAgLyoqXG4gICAqIFN1Yi1UYXNrcyB0byBydW5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YXNrczogQXJyYXk8VHVyYm9SZXBvVGFzaz4gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgcHJvamVjdDogUHJvamVjdCxcbiAgICBvcHRpb25zOiBUdXJib1JlcG9PcHRpb25zID0ge30sXG4gICkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgaWYgKCEocHJvamVjdCBpbnN0YW5jZW9mIE5vZGVQcm9qZWN0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHVyYm9SZXBvIGNhbiBvbmx5IGJlIGFkZGVkIHRvIE5vZGUuanMgcHJvamVjdHMuXCIpO1xuICAgIH1cblxuICAgIHRoaXMudHVyYm9WZXJzaW9uID0gb3B0aW9ucy50dXJib1ZlcnNpb24gPz8gXCJeMi4wLjBcIjtcbiAgICB0aGlzLmlzUm9vdFByb2plY3QgPSBwcm9qZWN0ID09PSBwcm9qZWN0LnJvb3Q7XG5cbiAgICAvKipcbiAgICAgKiBBZGQgdHVyYm9yZXBvIHBhY2thZ2UgdG8gcm9vdCBwcm9qZWN0LlxuICAgICAqL1xuICAgIGlmICh0aGlzLmlzUm9vdFByb2plY3QpIHtcbiAgICAgIHByb2plY3QuYWRkRGV2RGVwcyhgdHVyYm9AJHt0aGlzLnR1cmJvVmVyc2lvbn1gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZ25vcmUgdGhlIHdvcmtpbmcgY2FjaGUgZm9yIHR1cmJvLlxuICAgICAqL1xuICAgIHByb2plY3QuZ2l0aWdub3JlLmFkZFBhdHRlcm5zKFwiLy50dXJib1wiKTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIFNldCBzb21lIGRlZmF1bHQgb3B0aW9uc1xuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgdGhpcy5leHRlbmRzID0gb3B0aW9ucy5leHRlbmRzID8/ICh0aGlzLmlzUm9vdFByb2plY3QgPyBbXSA6IFtcIi8vXCJdKTtcbiAgICB0aGlzLmdsb2JhbERlcGVuZGVuY2llcyA9IG9wdGlvbnMuZ2xvYmFsRGVwZW5kZW5jaWVzID8/IFtdO1xuICAgIHRoaXMuZ2xvYmFsRW52ID0gb3B0aW9ucy5nbG9iYWxFbnYgPz8gW107XG4gICAgdGhpcy5nbG9iYWxQYXNzVGhyb3VnaEVudiA9IG9wdGlvbnMuZ2xvYmFsUGFzc1Rocm91Z2hFbnYgPz8gW107XG4gICAgdGhpcy51aSA9IG9wdGlvbnMudWkgPz8gXCJzdHJlYW1cIjtcbiAgICB0aGlzLmRhbmdlcm91c2x5RGlzYWJsZVBhY2thZ2VNYW5hZ2VyQ2hlY2sgPVxuICAgICAgb3B0aW9ucy5kYW5nZXJvdXNseURpc2FibGVQYWNrYWdlTWFuYWdlckNoZWNrID8/IGZhbHNlO1xuICAgIHRoaXMuY2FjaGVEaXIgPSBvcHRpb25zLmNhY2hlRGlyID8/IFwiLnR1cmJvL2NhY2hlXCI7XG4gICAgdGhpcy5kYWVtb24gPSBvcHRpb25zLmRhZW1vbiA/PyB0cnVlO1xuICAgIHRoaXMuZW52TW9kZSA9IG9wdGlvbnMuZW52TW9kZSA/PyBcInN0cmljdFwiO1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogVHVyYm8gQnVpbGQgVGFza1xuICAgICAqXG4gICAgICogQWxsIHR1cmJvIGNvbmZpZ3MgY29udGFpbiBhIHR1cmJvIGJ1aWxkIHRhc2suXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHVyYm8gZW50cnkgcG9pbnQgZGVmaW5pdGlvbiBmb3IgdGhlIHR1cmJvOmJ1aWxkIHRhc2suIFRoaXMgZXhpc3RzXG4gICAgICogaW4gZWFjaCBwcm9qZWN0IGFuZCBpcyB3cml0dGVuIHRvdCBoZSB0dXJiby5qc29uIGZpbGUuIFRoaXMgdGFzayBpcyBub3RcbiAgICAgKiBhIHByb2plbiB0YXNrIG9yIGEgTm9kZSB0YXNrLlxuICAgICAqL1xuICAgIHRoaXMuYnVpbGRUYXNrID0gbmV3IFR1cmJvUmVwb1Rhc2sodGhpcy5wcm9qZWN0LCB7XG4gICAgICBuYW1lOiBST09UX1RVUkJPX1RBU0tfTkFNRSxcbiAgICAgIGRlcGVuZHNPbjogdGhpcy5pc1Jvb3RQcm9qZWN0ID8gW2BeJHtST09UX1RVUkJPX1RBU0tfTkFNRX1gXSA6IFtdLFxuICAgIH0pO1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogVHVyYm8gQnVpbGQgQWxsIFRhc2tcbiAgICAgKlxuICAgICAqIFRoZSBQcm9qZW4gZW50cnkgcG9pbnQuIFRoaXMgb25seSBleGlzdHMgaW4gdGhlIHJvb3QgYW5kIGlzIGEgcHJvamVuXG4gICAgICogdGFzayB0aGF0IGNhbiBiZSBydW4gdXNpbmcgcG5wbS5cbiAgICAgKlxuICAgICAqIC0gVHVybnMgb2ZmIHRlbGVtZXRyeVxuICAgICAqIC0gUnVucyByb290IHR1cmJvIHRhc2sgdG8gYnVpbGQgYWxsIHN1Yi1wcm9qZWN0cy5cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIGlmICh0aGlzLmlzUm9vdFByb2plY3QpIHtcbiAgICAgIC8qKlxuICAgICAgICogQ3JlYXRlIGFuZCBjb25maWd1cmUgdGhlIGJ1aWxkIGFsbCB0YXNrLlxuICAgICAgICovXG4gICAgICBjb25zdCBidWlsZEFsbCA9IHRoaXMucHJvamVjdC50YXNrcy5hZGRUYXNrKFJPT1RfQ0lfVEFTS19OQU1FLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIFwiUm9vdCBidWlsZCBmb2xsb3dlZCBieSBzdWItcHJvamVjdCBidWlsZHMuIE1pbWljcyB0aGUgQ0kgYnVpbGQgcHJvY2VzcyBpbiBvbmUgc3RlcC5cIixcbiAgICAgIH0pO1xuICAgICAgYnVpbGRBbGwuZXhlYyhcInR1cmJvIHRlbGVtZXRyeSBkaXNhYmxlXCIpO1xuICAgICAgYnVpbGRBbGwuZXhlYyhcbiAgICAgICAgYHR1cmJvICR7Uk9PVF9UVVJCT19UQVNLX05BTUV9IC0tc3VtbWFyaXplIC0tY29uY3VycmVuY3k9MTBgLFxuICAgICAgKTtcblxuICAgICAgLyoqXG4gICAgICAgKiBBdHRhY2ggYnVpbGQgYWxsIHR1cmJvIHJ1bm5lciB0byB0aGUgYnVpbGQgd29ya2Zsb3cgYXQgZ2l0aHViLlxuICAgICAgICovXG4gICAgICBwcm9qZWN0LmJ1aWxkV29ya2Zsb3c/LmFkZFBvc3RCdWlsZFN0ZXBzKHtcbiAgICAgICAgbmFtZTogXCJCdWlsZCBTdWIgUHJvamVjdHNcIixcbiAgICAgICAgcnVuOiBgbnB4IHByb2plbiAke1JPT1RfQ0lfVEFTS19OQU1FfWAsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTVUItUFJPSkVDVFxuICAgICAqXG4gICAgICogQ3JlYXRlcyB0YXNrcyBmb3IgdGhlIHR5cGljYWwgbGlmZWN5Y2xlIGZvciBhbGwgcHJvamVjdCBwcm9qZWN0cy5cbiAgICAgKi9cbiAgICBpZiAoIXRoaXMuaXNSb290UHJvamVjdCkge1xuICAgICAgdGhpcy5wcmVDb21waWxlVGFzayA9IG5ldyBUdXJib1JlcG9UYXNrKHByb2plY3QsIHtcbiAgICAgICAgbmFtZTogXCJwcmUtY29tcGlsZVwiLFxuICAgICAgICBpbnB1dHM6IFtcInNyYy8qKi8qXCIsIFwiKi5qc29uXCJdLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbXBpbGVUYXNrID0gbmV3IFR1cmJvUmVwb1Rhc2socHJvamVjdCwgeyBuYW1lOiBcImNvbXBpbGVcIiB9KTtcbiAgICAgIHRoaXMucG9zdENvbXBpbGVUYXNrID0gbmV3IFR1cmJvUmVwb1Rhc2socHJvamVjdCwge1xuICAgICAgICBuYW1lOiBcInBvc3QtY29tcGlsZVwiLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnRlc3RUYXNrID0gbmV3IFR1cmJvUmVwb1Rhc2socHJvamVjdCwgeyBuYW1lOiBcInRlc3RcIiB9KTtcbiAgICAgIHRoaXMucGFja2FnZVRhc2sgPSBuZXcgVHVyYm9SZXBvVGFzayhwcm9qZWN0LCB7XG4gICAgICAgIG5hbWU6IFwicGFja2FnZVwiLFxuICAgICAgICBpbnB1dHM6IFtcIi5ucG1pZ25vcmVcIl0sXG4gICAgICB9KTtcbiAgICAgIHRoaXMudGFza3MucHVzaChcbiAgICAgICAgdGhpcy5wcmVDb21waWxlVGFzayxcbiAgICAgICAgdGhpcy5jb21waWxlVGFzayxcbiAgICAgICAgdGhpcy5wb3N0Q29tcGlsZVRhc2ssXG4gICAgICAgIHRoaXMudGVzdFRhc2ssXG4gICAgICAgIHRoaXMucGFja2FnZVRhc2ssXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByZVN5bnRoZXNpemUoKTogdm9pZCB7XG4gICAgLyoqXG4gICAgICogQWRkIGFueSBsb2NhbCB3b3Jrc3BhY2Ugc3BlY2lmaWMgZGVwcyB0byBkZXBlbmRzT24gc28gdGhhdCB3ZSBrbm93XG4gICAgICogY29tcGlsZSBoYXMgZmluaXNoZWQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXNlIGFueSBkaXN0cmlidXRpb24gYXJ0aWZhY3RzLlxuICAgICAqXG4gICAgICogRG8gdGhpcyBpbiBwcmVzeW50aCBzbyB0aGF0IHdlIGNhbiBiZSBzdXJlIGFsbCBwcm9qZWN0IGRlcGVuZGVuY2llcyBoYXZlXG4gICAgICogYmVlbiBkZWZpbmVkIGZpcnN0LlxuICAgICAqL1xuICAgIGxldCBuZXh0RGVwZW5kc09uID0gdGhpcy5wcm9qZWN0LmRlcHMuYWxsXG4gICAgICAuZmlsdGVyKChkKSA9PiBkLnZlcnNpb24gPT09IFwid29ya3NwYWNlOipcIilcbiAgICAgIC5tYXAoKGQpID0+IFtkLm5hbWUsIFJPT1RfVFVSQk9fVEFTS19OQU1FXS5qb2luKFwiI1wiKSk7XG5cbiAgICAvKipcbiAgICAgKiBMb29wIG92ZXIgYWxsIHByb2plbiB0YXNrcyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyB0dXJibyB0YXNrXG4gICAgICogZGVmaW5pdGlvbnMuIENoYWluIHRoZW0gdG9nZXRoZXIgdXNpbmcgZGVwZW5kc09uLCBhbG9uZyB3aXRoIGFueSBvdXRzaWRlXG4gICAgICogcGFja2FnZSBkZXBlbmRlbmNpZXMuXG4gICAgICovXG4gICAgaWYgKCF0aGlzLmlzUm9vdFByb2plY3QpIHtcbiAgICAgIChcbiAgICAgICAgW1xuICAgICAgICAgIFt0aGlzLnByb2plY3QucHJlQ29tcGlsZVRhc2ssIHRoaXMucHJlQ29tcGlsZVRhc2tdLFxuICAgICAgICAgIFt0aGlzLnByb2plY3QuY29tcGlsZVRhc2ssIHRoaXMuY29tcGlsZVRhc2tdLFxuICAgICAgICAgIFt0aGlzLnByb2plY3QucG9zdENvbXBpbGVUYXNrLCB0aGlzLnBvc3RDb21waWxlVGFza10sXG4gICAgICAgICAgW3RoaXMucHJvamVjdC50ZXN0VGFzaywgdGhpcy50ZXN0VGFza10sXG4gICAgICAgICAgW3RoaXMucHJvamVjdC5wYWNrYWdlVGFzaywgdGhpcy5wYWNrYWdlVGFza10sXG4gICAgICAgIF0gYXMgQXJyYXk8W1Rhc2ssIFR1cmJvUmVwb1Rhc2tdPlxuICAgICAgKS5mb3JFYWNoKChbcGpUYXNrLCB0dXJib1Rhc2tdKSA9PiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBzdGVwcyBleGlzdCBjaGFpbiB1c2luZyBkZXBlbmRzT25cbiAgICAgICAgICovXG4gICAgICAgIGlmIChwalRhc2sgJiYgdHVyYm9UYXNrICYmIHBqVGFzay5zdGVwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKG5leHREZXBlbmRzT24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdHVyYm9UYXNrLmRlcGVuZHNPbi5wdXNoKC4uLm5leHREZXBlbmRzT24pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0RGVwZW5kc09uID0gW3R1cmJvVGFzay5uYW1lXTtcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIE90aGVyd2lzZSwgaWYgYSB0YXNrIGRvZXNuJ3QgZG8gYW55dGhpbmcsIGRlYWN0aXZhdGUgaXQuXG4gICAgICAgICAgICovXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHVyYm9UYXNrLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvKipcbiAgICAgICAqIE1haW4gYnVpbGQgZW50cnkgcG9pbnQgZGVwZW5kcyBvbiB3aGF0ZXZlciB3YXMgbGFzdC5cbiAgICAgICAqL1xuICAgICAgdGhpcy5idWlsZFRhc2suZGVwZW5kc09uLnB1c2goLi4ubmV4dERlcGVuZHNPbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgZm9yIHRoZSB0dXJibyBjb25maWcgZmlsZS5cbiAgICAgKi9cbiAgICBjb25zdCBmaWxlTmFtZTogc3RyaW5nID0gXCJ0dXJiby5qc29uXCI7XG5cbiAgICAvKipcbiAgICAgKiBFbnN1cmUgdGhhdCB0dXJibyBjb25maWcgZG9lc24ndCBlbmQgdXAgaW4gYW55IHBhY2thZ2UgZGlzdHJpYnV0aW9ucy5cbiAgICAgKi9cbiAgICB0aGlzLnByb2plY3QuYWRkUGFja2FnZUlnbm9yZShmaWxlTmFtZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29udGVudCBvZiB0aGlzIFlBTUwgZmlsZSB3aWxsIGJlIHJlc29sdmVkIGF0IHN5bnRoIHRpbWUuIEJ5IHRoZW4sXG4gICAgICogYW55IHN1Yi1wcm9qZWN0cyB3aWxsIGJlIGRlZmluZWQgYW5kIHRoaXMgd2lsbCBiZSBhIGNvbXBsZXRlIGxpc3QuXG4gICAgICovXG4gICAgbmV3IEpzb25GaWxlKHRoaXMucHJvamVjdCwgZmlsZU5hbWUsIHtcbiAgICAgIG9iajoge1xuICAgICAgICBleHRlbmRzOiB0aGlzLmV4dGVuZHMubGVuZ3RoID8gdGhpcy5leHRlbmRzIDogdW5kZWZpbmVkLFxuICAgICAgICBnbG9iYWxEZXBlbmRlbmNpZXM6XG4gICAgICAgICAgdGhpcy5pc1Jvb3RQcm9qZWN0ICYmIHRoaXMuZ2xvYmFsRGVwZW5kZW5jaWVzLmxlbmd0aFxuICAgICAgICAgICAgPyB0aGlzLmdsb2JhbERlcGVuZGVuY2llc1xuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGdsb2JhbEVudjpcbiAgICAgICAgICB0aGlzLmlzUm9vdFByb2plY3QgJiYgdGhpcy5nbG9iYWxFbnYubGVuZ3RoXG4gICAgICAgICAgICA/IHRoaXMuZ2xvYmFsRW52XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZ2xvYmFsUGFzc1Rocm91Z2hFbnY6XG4gICAgICAgICAgdGhpcy5pc1Jvb3RQcm9qZWN0ICYmIHRoaXMuZ2xvYmFsUGFzc1Rocm91Z2hFbnYubGVuZ3RoXG4gICAgICAgICAgICA/IHRoaXMuZ2xvYmFsUGFzc1Rocm91Z2hFbnZcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB1aTogdGhpcy5pc1Jvb3RQcm9qZWN0ID8gdGhpcy51aSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGFuZ2Vyb3VzbHlEaXNhYmxlUGFja2FnZU1hbmFnZXJDaGVjazogdGhpcy5pc1Jvb3RQcm9qZWN0XG4gICAgICAgICAgPyB0aGlzLmRhbmdlcm91c2x5RGlzYWJsZVBhY2thZ2VNYW5hZ2VyQ2hlY2tcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgY2FjaGVEaXI6IHRoaXMuaXNSb290UHJvamVjdCA/IHRoaXMuY2FjaGVEaXIgOiB1bmRlZmluZWQsXG4gICAgICAgIGRhZW1vbjogdGhpcy5pc1Jvb3RQcm9qZWN0ID8gdGhpcy5kYWVtb24gOiB1bmRlZmluZWQsXG4gICAgICAgIGVudk1vZGU6IHRoaXMuaXNSb290UHJvamVjdCA/IHRoaXMuZW52TW9kZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFsbCB0YXNrc1xuICAgICAgICAgKi9cbiAgICAgICAgdGFza3M6IHRoaXMudGFza3NcbiAgICAgICAgICAuZmlsdGVyKCh0YXNrKSA9PiB0YXNrLmlzQWN0aXZlKVxuICAgICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCB0YXNrKSA9PiB7XG4gICAgICAgICAgICAgIGFjY1t0YXNrLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgIC4uLnRhc2sudGFza0NvbmZpZygpLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3RoaXMuYnVpbGRUYXNrLm5hbWVdOiB7IC4uLnRoaXMuYnVpbGRUYXNrLnRhc2tDb25maWcoKSB9LFxuICAgICAgICAgICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgICAgICAgICksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgc3VwZXIucHJlU3ludGhlc2l6ZSgpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./typescript-config";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./typescript-config"), exports);
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXNjcmlwdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0RBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNjcmlwdC1jb25maWdcIjtcbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Component } from "projen";
|
|
2
|
+
import { TypeScriptProject } from "projen/lib/typescript";
|
|
3
|
+
/*******************************************************************************
|
|
4
|
+
*
|
|
5
|
+
* Update / customize typescript configs for a project.
|
|
6
|
+
*
|
|
7
|
+
* Update typescript paths in tsconfig so we don't have to compile packages to
|
|
8
|
+
* dist in order to see changes.
|
|
9
|
+
*
|
|
10
|
+
******************************************************************************/
|
|
11
|
+
export declare class TypeScriptConfig extends Component {
|
|
12
|
+
constructor(project: TypeScriptProject);
|
|
13
|
+
}
|