@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.
Files changed (41) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +4 -0
  3. package/lib/aws/aws-deployment-config.d.ts +141 -0
  4. package/lib/aws/aws-deployment-config.js +165 -0
  5. package/lib/aws/aws-types.d.ts +63 -0
  6. package/lib/aws/aws-types.js +9 -0
  7. package/lib/aws/index.d.ts +2 -0
  8. package/lib/aws/index.js +19 -0
  9. package/lib/git/git-types.d.ts +18 -0
  10. package/lib/git/git-types.js +9 -0
  11. package/lib/git/index.d.ts +1 -0
  12. package/lib/git/index.js +18 -0
  13. package/lib/pnpm/index.d.ts +1 -0
  14. package/lib/pnpm/index.js +18 -0
  15. package/lib/pnpm/pnpm-workspace.d.ts +5 -0
  16. package/lib/pnpm/pnpm-workspace.js +36 -0
  17. package/lib/turbo/index.d.ts +2 -0
  18. package/lib/turbo/index.js +19 -0
  19. package/lib/turbo/turbo-repo-task.d.ts +36 -0
  20. package/lib/turbo/turbo-repo-task.js +43 -0
  21. package/lib/turbo/turbo-repo.d.ts +268 -0
  22. package/lib/turbo/turbo-repo.js +213 -0
  23. package/lib/typescript/index.d.ts +1 -0
  24. package/lib/typescript/index.js +18 -0
  25. package/lib/typescript/typescript-config.d.ts +13 -0
  26. package/lib/typescript/typescript-config.js +40 -0
  27. package/lib/versions.d.ts +22 -0
  28. package/lib/versions.js +26 -0
  29. package/lib/vscode/index.d.ts +1 -0
  30. package/lib/vscode/index.js +18 -0
  31. package/lib/vscode/vscode.d.ts +10 -0
  32. package/lib/vscode/vscode.js +37 -0
  33. package/lib/workflows/build-workflow.d.ts +13 -0
  34. package/lib/workflows/build-workflow.js +64 -0
  35. package/lib/workflows/deploy-workflow.d.ts +17 -0
  36. package/lib/workflows/deploy-workflow.js +113 -0
  37. package/lib/workflows/index.d.ts +2 -0
  38. package/lib/workflows/index.js +19 -0
  39. package/lib/workflows/steps/deploy.d.ts +4 -0
  40. package/lib/workflows/steps/deploy.js +62 -0
  41. 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
+ }