projen 0.103.3 → 0.103.5

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 (236) hide show
  1. package/.jsii +11700 -6065
  2. package/lib/ai-instructions.js +2 -2
  3. package/lib/awscdk/auto-discover.js +6 -6
  4. package/lib/awscdk/awscdk-app-java.js +1 -1
  5. package/lib/awscdk/awscdk-app-py.js +1 -1
  6. package/lib/awscdk/awscdk-app-ts.js +1 -1
  7. package/lib/awscdk/awscdk-construct.js +1 -1
  8. package/lib/awscdk/awscdk-deps-java.js +1 -1
  9. package/lib/awscdk/awscdk-deps-js.js +1 -1
  10. package/lib/awscdk/awscdk-deps-py.js +1 -1
  11. package/lib/awscdk/awscdk-deps.js +1 -1
  12. package/lib/awscdk/cdk-config.js +3 -3
  13. package/lib/awscdk/cdk-tasks.js +1 -1
  14. package/lib/awscdk/integration-test.js +1 -1
  15. package/lib/awscdk/lambda-extension.js +1 -1
  16. package/lib/awscdk/lambda-function.js +2 -2
  17. package/lib/build/build-workflow.js +1 -1
  18. package/lib/cdk/auto-discover-base.js +2 -2
  19. package/lib/cdk/construct-lib.js +1 -1
  20. package/lib/cdk/integration-test-base.js +1 -1
  21. package/lib/cdk/jsii-build.js +1 -1
  22. package/lib/cdk/jsii-docgen.js +1 -1
  23. package/lib/cdk/jsii-project.js +1 -1
  24. package/lib/cdk8s/auto-discover.js +2 -2
  25. package/lib/cdk8s/cdk8s-app-py.js +1 -1
  26. package/lib/cdk8s/cdk8s-app-ts.js +1 -1
  27. package/lib/cdk8s/cdk8s-construct.js +1 -1
  28. package/lib/cdk8s/cdk8s-deps-py.js +1 -1
  29. package/lib/cdk8s/cdk8s-deps.js +1 -1
  30. package/lib/cdk8s/integration-test.js +1 -1
  31. package/lib/cdktf/cdktf-construct.js +1 -1
  32. package/lib/cdktn/cdktn-app-ts.js +1 -1
  33. package/lib/cdktn/cdktn-config.js +1 -1
  34. package/lib/cdktn/cdktn-construct.js +1 -1
  35. package/lib/cdktn/cdktn-deps.js +1 -1
  36. package/lib/cdktn/cdktn-tasks.js +1 -1
  37. package/lib/circleci/circleci.js +1 -1
  38. package/lib/component.js +2 -2
  39. package/lib/dependencies.js +1 -1
  40. package/lib/dev-env.js +1 -1
  41. package/lib/docker-compose/docker-compose-service.js +1 -1
  42. package/lib/docker-compose/docker-compose.js +1 -1
  43. package/lib/file.js +1 -1
  44. package/lib/gitattributes.js +1 -1
  45. package/lib/github/actions-provider.js +1 -1
  46. package/lib/github/auto-approve.js +1 -1
  47. package/lib/github/auto-merge.js +1 -1
  48. package/lib/github/auto-queue.js +1 -1
  49. package/lib/github/dependabot.js +1 -1
  50. package/lib/github/dependency-review.js +1 -1
  51. package/lib/github/github-credentials.js +1 -1
  52. package/lib/github/github-project.js +1 -1
  53. package/lib/github/github.js +1 -1
  54. package/lib/github/merge-queue.js +1 -1
  55. package/lib/github/mergify.js +1 -1
  56. package/lib/github/pr-template.js +1 -1
  57. package/lib/github/pull-request-backport.js +1 -1
  58. package/lib/github/pull-request-lint.js +1 -1
  59. package/lib/github/stale.js +1 -1
  60. package/lib/github/task-workflow-job.js +1 -1
  61. package/lib/github/task-workflow.js +1 -1
  62. package/lib/github/workflow-actions.js +1 -1
  63. package/lib/github/workflow-jobs.js +1 -1
  64. package/lib/github/workflow-steps.js +1 -1
  65. package/lib/github/workflows.js +1 -1
  66. package/lib/gitlab/configuration.js +1 -1
  67. package/lib/gitlab/gitlab-configuration.js +1 -1
  68. package/lib/gitlab/nested-configuration.js +1 -1
  69. package/lib/gitpod.js +1 -1
  70. package/lib/ignore-file.js +1 -1
  71. package/lib/index.d.ts +2 -0
  72. package/lib/index.js +4 -2
  73. package/lib/ini.js +1 -1
  74. package/lib/java/java-project.js +1 -1
  75. package/lib/java/junit.js +1 -1
  76. package/lib/java/maven-compile.js +1 -1
  77. package/lib/java/maven-packaging.js +1 -1
  78. package/lib/java/maven-sample.js +1 -1
  79. package/lib/java/pom.js +2 -2
  80. package/lib/java/projenrc.js +1 -1
  81. package/lib/javascript/biome/biome.js +1 -1
  82. package/lib/javascript/bundler.js +1 -1
  83. package/lib/javascript/eslint.js +1 -1
  84. package/lib/javascript/index.d.ts +2 -0
  85. package/lib/javascript/index.js +3 -1
  86. package/lib/javascript/jest.js +4 -4
  87. package/lib/javascript/license-checker.js +1 -1
  88. package/lib/javascript/node-config-file.d.ts +39 -0
  89. package/lib/javascript/node-config-file.js +44 -0
  90. package/lib/javascript/node-config.d.ts +1150 -0
  91. package/lib/javascript/node-config.js +266 -0
  92. package/lib/javascript/node-package.js +1 -1
  93. package/lib/javascript/node-project.js +1 -1
  94. package/lib/javascript/npm-config.js +1 -1
  95. package/lib/javascript/pnpm-workspace-config.js +2 -2
  96. package/lib/javascript/pnpm-workspace.js +1 -1
  97. package/lib/javascript/prettier.js +1 -1
  98. package/lib/javascript/projenrc.js +1 -1
  99. package/lib/javascript/typescript-config.js +2 -2
  100. package/lib/javascript/upgrade-dependencies.js +2 -2
  101. package/lib/javascript/yarnrc.js +1 -1
  102. package/lib/json-patch.js +1 -1
  103. package/lib/json.js +1 -1
  104. package/lib/license.js +1 -1
  105. package/lib/logger.js +1 -1
  106. package/lib/makefile.js +1 -1
  107. package/lib/object-file.js +1 -1
  108. package/lib/project-build.js +1 -1
  109. package/lib/project-tree.js +1 -1
  110. package/lib/project.js +1 -1
  111. package/lib/projects.js +1 -1
  112. package/lib/projenrc-json.js +1 -1
  113. package/lib/projenrc.js +1 -1
  114. package/lib/properties-file.d.ts +50 -0
  115. package/lib/properties-file.js +77 -0
  116. package/lib/python/pip.js +1 -1
  117. package/lib/python/poetry.js +2 -2
  118. package/lib/python/projenrc.js +1 -1
  119. package/lib/python/pyproject-toml-file.js +1 -1
  120. package/lib/python/pytest-sample.js +1 -1
  121. package/lib/python/pytest.js +1 -1
  122. package/lib/python/python-project.js +1 -1
  123. package/lib/python/python-sample.js +1 -1
  124. package/lib/python/requirements-file.js +1 -1
  125. package/lib/python/setuppy.js +1 -1
  126. package/lib/python/setuptools.js +1 -1
  127. package/lib/python/uv-config.js +1 -1
  128. package/lib/python/uv.js +1 -1
  129. package/lib/python/venv.js +1 -1
  130. package/lib/readme.js +1 -1
  131. package/lib/release/publisher.js +1 -1
  132. package/lib/release/release-trigger.js +1 -1
  133. package/lib/release/release.js +1 -1
  134. package/lib/renovatebot.js +1 -1
  135. package/lib/run-task.cjs +6 -2
  136. package/lib/sample-file.js +2 -2
  137. package/lib/script-runner.js +1 -1
  138. package/lib/sonarqube/index.d.ts +4 -0
  139. package/lib/sonarqube/index.js +21 -0
  140. package/lib/sonarqube/javascript.d.ts +35 -0
  141. package/lib/sonarqube/javascript.js +57 -0
  142. package/lib/sonarqube/rust.d.ts +37 -0
  143. package/lib/sonarqube/rust.js +58 -0
  144. package/lib/sonarqube/sonarqube.d.ts +439 -0
  145. package/lib/sonarqube/sonarqube.js +184 -0
  146. package/lib/sonarqube/typescript.d.ts +36 -0
  147. package/lib/sonarqube/typescript.js +61 -0
  148. package/lib/source-code.js +1 -1
  149. package/lib/task-shell.js +1 -1
  150. package/lib/task.js +1 -1
  151. package/lib/tasks.js +1 -1
  152. package/lib/testing.js +1 -1
  153. package/lib/textfile.js +1 -1
  154. package/lib/toml.js +1 -1
  155. package/lib/typescript/projenrc-ts.js +1 -1
  156. package/lib/typescript/projenrc.js +1 -1
  157. package/lib/typescript/typescript-runner.js +1 -1
  158. package/lib/typescript/typescript-typedoc.js +1 -1
  159. package/lib/typescript/typescript.js +5 -5
  160. package/lib/util.d.ts +9 -0
  161. package/lib/util.js +39 -1
  162. package/lib/version.js +2 -2
  163. package/lib/vscode/devcontainer.js +1 -1
  164. package/lib/vscode/extensions.js +1 -1
  165. package/lib/vscode/launch-config.js +1 -1
  166. package/lib/vscode/settings.js +1 -1
  167. package/lib/vscode/vscode.js +1 -1
  168. package/lib/web/next.js +3 -3
  169. package/lib/web/postcss.js +1 -1
  170. package/lib/web/react.js +3 -3
  171. package/lib/web/tailwind.js +1 -1
  172. package/lib/xmlfile.js +1 -1
  173. package/lib/yaml.js +1 -1
  174. package/node_modules/properties-file/LICENSE +21 -0
  175. package/node_modules/properties-file/README.md +253 -0
  176. package/node_modules/properties-file/dist/cjs/bundler/bun.d.ts +10 -0
  177. package/node_modules/properties-file/dist/cjs/bundler/bun.js +1 -0
  178. package/node_modules/properties-file/dist/cjs/bundler/esbuild.d.ts +11 -0
  179. package/node_modules/properties-file/dist/cjs/bundler/esbuild.js +1 -0
  180. package/node_modules/properties-file/dist/cjs/bundler/rollup.d.ts +11 -0
  181. package/node_modules/properties-file/dist/cjs/bundler/rollup.js +1 -0
  182. package/node_modules/properties-file/dist/cjs/bundler/webpack.d.ts +12 -0
  183. package/node_modules/properties-file/dist/cjs/bundler/webpack.js +1 -0
  184. package/node_modules/properties-file/dist/cjs/characters.d.ts +32 -0
  185. package/node_modules/properties-file/dist/cjs/characters.js +1 -0
  186. package/node_modules/properties-file/dist/cjs/editor/index.d.ts +181 -0
  187. package/node_modules/properties-file/dist/cjs/editor/index.js +1 -0
  188. package/node_modules/properties-file/dist/cjs/escape/index.d.ts +18 -0
  189. package/node_modules/properties-file/dist/cjs/escape/index.js +1 -0
  190. package/node_modules/properties-file/dist/cjs/index.d.ts +25 -0
  191. package/node_modules/properties-file/dist/cjs/index.js +1 -0
  192. package/node_modules/properties-file/dist/cjs/package.json +1 -0
  193. package/node_modules/properties-file/dist/cjs/parser/index.d.ts +3 -0
  194. package/node_modules/properties-file/dist/cjs/parser/index.js +1 -0
  195. package/node_modules/properties-file/dist/cjs/parser/nodes.d.ts +154 -0
  196. package/node_modules/properties-file/dist/cjs/parser/nodes.js +1 -0
  197. package/node_modules/properties-file/dist/cjs/parser/normalize.d.ts +12 -0
  198. package/node_modules/properties-file/dist/cjs/parser/normalize.js +1 -0
  199. package/node_modules/properties-file/dist/cjs/parser/parse.d.ts +23 -0
  200. package/node_modules/properties-file/dist/cjs/parser/parse.js +1 -0
  201. package/node_modules/properties-file/dist/cjs/parser/properties.d.ts +93 -0
  202. package/node_modules/properties-file/dist/cjs/parser/properties.js +1 -0
  203. package/node_modules/properties-file/dist/cjs/properties-file.d.ts +8 -0
  204. package/node_modules/properties-file/dist/cjs/unescape/index.d.ts +14 -0
  205. package/node_modules/properties-file/dist/cjs/unescape/index.js +1 -0
  206. package/node_modules/properties-file/dist/esm/bundler/bun.d.ts +10 -0
  207. package/node_modules/properties-file/dist/esm/bundler/bun.js +1 -0
  208. package/node_modules/properties-file/dist/esm/bundler/esbuild.d.ts +11 -0
  209. package/node_modules/properties-file/dist/esm/bundler/esbuild.js +1 -0
  210. package/node_modules/properties-file/dist/esm/bundler/rollup.d.ts +11 -0
  211. package/node_modules/properties-file/dist/esm/bundler/rollup.js +1 -0
  212. package/node_modules/properties-file/dist/esm/bundler/webpack.d.ts +12 -0
  213. package/node_modules/properties-file/dist/esm/bundler/webpack.js +1 -0
  214. package/node_modules/properties-file/dist/esm/characters.d.ts +32 -0
  215. package/node_modules/properties-file/dist/esm/characters.js +1 -0
  216. package/node_modules/properties-file/dist/esm/editor/index.d.ts +181 -0
  217. package/node_modules/properties-file/dist/esm/editor/index.js +1 -0
  218. package/node_modules/properties-file/dist/esm/escape/index.d.ts +18 -0
  219. package/node_modules/properties-file/dist/esm/escape/index.js +1 -0
  220. package/node_modules/properties-file/dist/esm/index.d.ts +25 -0
  221. package/node_modules/properties-file/dist/esm/index.js +1 -0
  222. package/node_modules/properties-file/dist/esm/parser/index.d.ts +3 -0
  223. package/node_modules/properties-file/dist/esm/parser/index.js +1 -0
  224. package/node_modules/properties-file/dist/esm/parser/nodes.d.ts +154 -0
  225. package/node_modules/properties-file/dist/esm/parser/nodes.js +1 -0
  226. package/node_modules/properties-file/dist/esm/parser/normalize.d.ts +12 -0
  227. package/node_modules/properties-file/dist/esm/parser/normalize.js +1 -0
  228. package/node_modules/properties-file/dist/esm/parser/parse.d.ts +23 -0
  229. package/node_modules/properties-file/dist/esm/parser/parse.js +1 -0
  230. package/node_modules/properties-file/dist/esm/parser/properties.d.ts +93 -0
  231. package/node_modules/properties-file/dist/esm/parser/properties.js +1 -0
  232. package/node_modules/properties-file/dist/esm/properties-file.d.ts +8 -0
  233. package/node_modules/properties-file/dist/esm/unescape/index.d.ts +14 -0
  234. package/node_modules/properties-file/dist/esm/unescape/index.js +1 -0
  235. package/node_modules/properties-file/package.json +190 -0
  236. package/package.json +6 -2
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SonarqubeProperties = exports.SonarqubeRegion = exports.SonarqubeLogLevel = void 0;
4
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
+ const component_1 = require("../component");
6
+ const properties_file_1 = require("../properties-file");
7
+ /**
8
+ * Log level for SonarQube analysis.
9
+ */
10
+ var SonarqubeLogLevel;
11
+ (function (SonarqubeLogLevel) {
12
+ /** Standard logging (default) */
13
+ SonarqubeLogLevel["INFO"] = "INFO";
14
+ /** Verbose logging */
15
+ SonarqubeLogLevel["DEBUG"] = "DEBUG";
16
+ /** Most verbose, includes plugin/library output */
17
+ SonarqubeLogLevel["TRACE"] = "TRACE";
18
+ })(SonarqubeLogLevel || (exports.SonarqubeLogLevel = SonarqubeLogLevel = {}));
19
+ /**
20
+ * SonarQube Cloud region.
21
+ */
22
+ var SonarqubeRegion;
23
+ (function (SonarqubeRegion) {
24
+ /** EU instance (default) */
25
+ SonarqubeRegion["EU"] = "eu";
26
+ /** US instance */
27
+ SonarqubeRegion["US"] = "us";
28
+ })(SonarqubeRegion || (exports.SonarqubeRegion = SonarqubeRegion = {}));
29
+ /**
30
+ * Manages the `sonar-project.properties` configuration file for SonarQube
31
+ * analysis.
32
+ *
33
+ * This component generates a `sonar-project.properties` file at the project
34
+ * root with the specified configuration parameters. It provides typed options
35
+ * whose structure mirrors the dot-notation property namespaces.
36
+ *
37
+ * @see https://docs.sonarsource.com/sonarqube-cloud/analyzing-source-code/analysis-parameters/parameters-not-settable-in-ui
38
+ *
39
+ * @example
40
+ * new SonarqubeProperties(project, {
41
+ * projectKey: 'my-org_my-project',
42
+ * organization: 'my-org',
43
+ * sources: 'src',
44
+ * tests: 'test',
45
+ * exclusions: ['*{@literal *}/node_modules/**'],
46
+ * coverage: { exclusions: ['*{@literal *}/test/**'] },
47
+ * javascript: { lcov: { reportPaths: ['coverage/lcov.info'] } },
48
+ * sourceEncoding: 'UTF-8',
49
+ * });
50
+ */
51
+ class SonarqubeProperties extends component_1.Component {
52
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.sonarqube.SonarqubeProperties", version: "0.103.5" };
53
+ /**
54
+ * The underlying properties file.
55
+ */
56
+ file;
57
+ constructor(scope, options) {
58
+ super(scope);
59
+ const sonar = {};
60
+ // Project identification (mandatory)
61
+ sonar.projectKey = options.projectKey;
62
+ if (options.organization) {
63
+ sonar.organization = options.organization;
64
+ }
65
+ // Server connection
66
+ if (options.region) {
67
+ sonar.region = options.region;
68
+ }
69
+ // Project information
70
+ if (options.projectName) {
71
+ sonar.projectName = options.projectName;
72
+ }
73
+ if (options.projectVersion) {
74
+ sonar.projectVersion = options.projectVersion;
75
+ }
76
+ // SCM (sonar.scm.*)
77
+ if (options.scm) {
78
+ sonar.scm = {};
79
+ if (options.scm.provider) {
80
+ sonar.scm.provider = options.scm.provider;
81
+ }
82
+ if (options.scm.exclusions?.disabled !== undefined) {
83
+ sonar.scm.exclusions = {
84
+ disabled: String(options.scm.exclusions.disabled),
85
+ };
86
+ }
87
+ }
88
+ // Analysis scope
89
+ if (options.sources) {
90
+ sonar.sources = options.sources;
91
+ }
92
+ if (options.tests) {
93
+ sonar.tests = options.tests;
94
+ }
95
+ if (options.projectBaseDir) {
96
+ sonar.projectBaseDir = options.projectBaseDir;
97
+ }
98
+ if (options.exclusions && options.exclusions.length > 0) {
99
+ sonar.exclusions = options.exclusions.join(",");
100
+ }
101
+ // Language & profile
102
+ if (options.language) {
103
+ sonar.language = options.language;
104
+ }
105
+ if (options.profile) {
106
+ sonar.profile = options.profile;
107
+ }
108
+ // Coverage (sonar.coverage.*)
109
+ if (options.coverage?.exclusions &&
110
+ options.coverage.exclusions.length > 0) {
111
+ sonar.coverage = { exclusions: options.coverage.exclusions.join(",") };
112
+ }
113
+ // JavaScript (sonar.javascript.*)
114
+ if (options.javascript?.lcov?.reportPaths &&
115
+ options.javascript.lcov.reportPaths.length > 0) {
116
+ sonar.javascript = {
117
+ lcov: { reportPaths: options.javascript.lcov.reportPaths.join(",") },
118
+ };
119
+ }
120
+ // TypeScript (sonar.typescript.*)
121
+ if (options.typescript?.tsconfigPath) {
122
+ sonar.typescript = { tsconfigPath: options.typescript.tsconfigPath };
123
+ }
124
+ // Rust (sonar.rust.*)
125
+ if (options.rust) {
126
+ sonar.rust = {};
127
+ if (options.rust.lcov?.reportPaths &&
128
+ options.rust.lcov.reportPaths.length > 0) {
129
+ sonar.rust.lcov = {
130
+ reportPaths: options.rust.lcov.reportPaths.join(","),
131
+ };
132
+ }
133
+ if (options.rust.clippy?.enabled !== undefined) {
134
+ sonar.rust.clippy = { enabled: String(options.rust.clippy.enabled) };
135
+ }
136
+ if (options.rust.clippyReport?.reportPaths &&
137
+ options.rust.clippyReport.reportPaths.length > 0) {
138
+ sonar.rust.clippyReport = {
139
+ reportPaths: options.rust.clippyReport.reportPaths.join(","),
140
+ };
141
+ }
142
+ }
143
+ // Duplication (sonar.cpd.*)
144
+ if (options.cpd?.exclusions && options.cpd.exclusions.length > 0) {
145
+ sonar.cpd = { exclusions: options.cpd.exclusions.join(",") };
146
+ }
147
+ // Encoding
148
+ if (options.sourceEncoding) {
149
+ sonar.sourceEncoding = options.sourceEncoding;
150
+ }
151
+ // Logging (sonar.log.*)
152
+ if (options.log?.level) {
153
+ sonar.log = { level: options.log.level };
154
+ }
155
+ // Quality gate (sonar.qualitygate.*)
156
+ if (options.qualitygate) {
157
+ const qg = {};
158
+ if (options.qualitygate.wait !== undefined) {
159
+ qg.wait = String(options.qualitygate.wait);
160
+ }
161
+ if (options.qualitygate.timeout !== undefined) {
162
+ qg.timeout = String(options.qualitygate.timeout);
163
+ }
164
+ if (Object.keys(qg).length > 0) {
165
+ sonar.qualitygate = qg;
166
+ }
167
+ }
168
+ this.file = new properties_file_1.PropertiesFile(this.project, "sonar-project.properties", {
169
+ obj: { sonar },
170
+ committed: options.fileOptions?.committed,
171
+ readonly: options.fileOptions?.readonly,
172
+ marker: options.fileOptions?.marker,
173
+ comment: options.fileOptions?.comment,
174
+ });
175
+ // Extra properties (user-specified arbitrary properties). Applied as
176
+ // overrides so a leaf like "sonar.coverage" replaces the whole subtree
177
+ // rather than merging with the typed options above.
178
+ for (const [key, value] of Object.entries(options.extraProperties ?? {})) {
179
+ this.file.addOverride(key, value);
180
+ }
181
+ }
182
+ }
183
+ exports.SonarqubeProperties = SonarqubeProperties;
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29uYXJxdWJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NvbmFycXViZS9zb25hcnF1YmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLDRDQUF5QztBQUN6Qyx3REFBb0Q7QUFFcEQ7O0dBRUc7QUFDSCxJQUFZLGlCQU9YO0FBUEQsV0FBWSxpQkFBaUI7SUFDM0IsaUNBQWlDO0lBQ2pDLGtDQUFhLENBQUE7SUFDYixzQkFBc0I7SUFDdEIsb0NBQWUsQ0FBQTtJQUNmLG1EQUFtRDtJQUNuRCxvQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFQVyxpQkFBaUIsaUNBQWpCLGlCQUFpQixRQU81QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxlQUtYO0FBTEQsV0FBWSxlQUFlO0lBQ3pCLDRCQUE0QjtJQUM1Qiw0QkFBUyxDQUFBO0lBQ1Qsa0JBQWtCO0lBQ2xCLDRCQUFTLENBQUE7QUFDWCxDQUFDLEVBTFcsZUFBZSwrQkFBZixlQUFlLFFBSzFCO0FBbWJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFhLG1CQUFvQixTQUFRLHFCQUFTOztJQUNoRDs7T0FFRztJQUNhLElBQUksQ0FBaUI7SUFFckMsWUFBWSxLQUFpQixFQUFFLE9BQW1DO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUViLE1BQU0sS0FBSyxHQUF3QixFQUFFLENBQUM7UUFFdEMscUNBQXFDO1FBQ3JDLEtBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUV0QyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QixLQUFLLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDNUMsQ0FBQztRQUVELG9CQUFvQjtRQUNwQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixLQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDaEMsQ0FBQztRQUVELHNCQUFzQjtRQUN0QixJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN4QixLQUFLLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzNCLEtBQUssQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsb0JBQW9CO1FBQ3BCLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLEtBQUssQ0FBQyxHQUFHLEdBQUcsRUFBeUIsQ0FBQztZQUN0QyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3pCLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQzVDLENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDbkQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUc7b0JBQ3JCLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2lCQUNsRCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxpQkFBaUI7UUFDakIsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQixLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDOUIsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzNCLEtBQUssQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hELEtBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELHFCQUFxQjtRQUNyQixJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQixLQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNsQyxDQUFDO1FBRUQsOEJBQThCO1FBQzlCLElBQ0UsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVO1lBQzVCLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ3RDLENBQUM7WUFDRCxLQUFLLENBQUMsUUFBUSxHQUFHLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3pFLENBQUM7UUFFRCxrQ0FBa0M7UUFDbEMsSUFDRSxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXO1lBQ3JDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUM5QyxDQUFDO1lBQ0QsS0FBSyxDQUFDLFVBQVUsR0FBRztnQkFDakIsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7YUFDckUsQ0FBQztRQUNKLENBQUM7UUFFRCxrQ0FBa0M7UUFDbEMsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRSxDQUFDO1lBQ3JDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2RSxDQUFDO1FBRUQsc0JBQXNCO1FBQ3RCLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztZQUN2QyxJQUNFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVc7Z0JBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN4QyxDQUFDO2dCQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHO29CQUNoQixXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7aUJBQ3JELENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQy9DLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLENBQUM7WUFDRCxJQUNFLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVc7Z0JBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNoRCxDQUFDO2dCQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHO29CQUN4QixXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7aUJBQzdELENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELDRCQUE0QjtRQUM1QixJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsVUFBVSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqRSxLQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9ELENBQUM7UUFFRCxXQUFXO1FBQ1gsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0IsS0FBSyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQ2hELENBQUM7UUFFRCx3QkFBd0I7UUFDeEIsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQyxDQUFDO1FBRUQscUNBQXFDO1FBQ3JDLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sRUFBRSxHQUF3QixFQUFFLENBQUM7WUFDbkMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDM0MsRUFBRSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QyxDQUFDO1lBQ0QsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDOUMsRUFBRSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuRCxDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsS0FBSyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksZ0NBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFO1lBQ3ZFLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRTtZQUNkLFNBQVMsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLFNBQVM7WUFDekMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUTtZQUN2QyxNQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNO1lBQ25DLE9BQU8sRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU87U0FDdEMsQ0FBQyxDQUFDO1FBRUgscUVBQXFFO1FBQ3JFLHVFQUF1RTtRQUN2RSxvREFBb0Q7UUFDcEQsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3pFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQzs7QUE1Skgsa0RBNkpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IFByb3BlcnRpZXNGaWxlIH0gZnJvbSBcIi4uL3Byb3BlcnRpZXMtZmlsZVwiO1xuXG4vKipcbiAqIExvZyBsZXZlbCBmb3IgU29uYXJRdWJlIGFuYWx5c2lzLlxuICovXG5leHBvcnQgZW51bSBTb25hcnF1YmVMb2dMZXZlbCB7XG4gIC8qKiBTdGFuZGFyZCBsb2dnaW5nIChkZWZhdWx0KSAqL1xuICBJTkZPID0gXCJJTkZPXCIsXG4gIC8qKiBWZXJib3NlIGxvZ2dpbmcgKi9cbiAgREVCVUcgPSBcIkRFQlVHXCIsXG4gIC8qKiBNb3N0IHZlcmJvc2UsIGluY2x1ZGVzIHBsdWdpbi9saWJyYXJ5IG91dHB1dCAqL1xuICBUUkFDRSA9IFwiVFJBQ0VcIixcbn1cblxuLyoqXG4gKiBTb25hclF1YmUgQ2xvdWQgcmVnaW9uLlxuICovXG5leHBvcnQgZW51bSBTb25hcnF1YmVSZWdpb24ge1xuICAvKiogRVUgaW5zdGFuY2UgKGRlZmF1bHQpICovXG4gIEVVID0gXCJldVwiLFxuICAvKiogVVMgaW5zdGFuY2UgKi9cbiAgVVMgPSBcInVzXCIsXG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTmVzdGVkIG9wdGlvbiBpbnRlcmZhY2VzIG1hdGNoaW5nIHRoZSBzb25hci4qIGRvdC1ub3RhdGlvbiBzdHJ1Y3R1cmVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBzb25hci5zY20uKmAgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb25hcnF1YmVTY21PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBTQ00gcHJvdmlkZXIgdG8gdXNlLlxuICAgKlxuICAgKiBNYXBzIHRvIGBzb25hci5zY20ucHJvdmlkZXJgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG8tZGV0ZWN0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBgc29uYXIuc2NtLmV4Y2x1c2lvbnMuKmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZXhjbHVzaW9uIG92ZXJyaWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVzaW9ucz86IFNvbmFycXViZVNjbUV4Y2x1c2lvbnNPcHRpb25zO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBzb25hci5zY20uZXhjbHVzaW9ucy4qYCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbmFycXViZVNjbUV4Y2x1c2lvbnNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSBmaWxlcyBpZ25vcmVkIGJ5IHRoZSBTQ00gKGUuZy4sIGZpbGVzIGluIC5naXRpZ25vcmUpXG4gICAqIGZyb20gYmVpbmcgZXhjbHVkZWQgZnJvbSBhbmFseXNpcy5cbiAgICpcbiAgICogTWFwcyB0byBgc29uYXIuc2NtLmV4Y2x1c2lvbnMuZGlzYWJsZWRgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBzb25hci5jb3ZlcmFnZS4qYCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbmFycXViZUNvdmVyYWdlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb21tYS1zZXBhcmF0ZWQgZmlsZSBwYXRoIHBhdHRlcm5zIHRvIGV4Y2x1ZGUgZnJvbSB0ZXN0IGNvdmVyYWdlXG4gICAqIGNhbGN1bGF0aW9ucy5cbiAgICpcbiAgICogTWFwcyB0byBgc29uYXIuY292ZXJhZ2UuZXhjbHVzaW9uc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY292ZXJhZ2UgZXhjbHVzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVzaW9ucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBzb25hci5jcGQuKmAgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb25hcnF1YmVDcGRPcHRpb25zIHtcbiAgLyoqXG4gICAqIENvbW1hLXNlcGFyYXRlZCBmaWxlIHBhdGggcGF0dGVybnMgdG8gZXhjbHVkZSBmcm9tIGNvZGVcbiAgICogZHVwbGljYXRpb24gZGV0ZWN0aW9uLlxuICAgKlxuICAgKiBNYXBzIHRvIGBzb25hci5jcGQuZXhjbHVzaW9uc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZHVwbGljYXRpb24gZXhjbHVzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVzaW9ucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBzb25hci5qYXZhc2NyaXB0LipgIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29uYXJxdWJlSmF2YXNjcmlwdE9wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9ucyBmb3IgYHNvbmFyLmphdmFzY3JpcHQubGNvdi4qYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBMQ09WIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGxjb3Y/OiBTb25hcnF1YmVMY292T3B0aW9ucztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgc29uYXIudHlwZXNjcmlwdC4qYCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbmFycXViZVR5cGVzY3JpcHRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKlxuICAgKiBNYXBzIHRvIGBzb25hci50eXBlc2NyaXB0LnRzY29uZmlnUGF0aGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNldFxuICAgKi9cbiAgcmVhZG9ubHkgdHNjb25maWdQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBzb25hci5ydXN0LipgIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29uYXJxdWJlUnVzdE9wdGlvbnMge1xuICAvKipcbiAgICogT3B0aW9ucyBmb3IgYHNvbmFyLnJ1c3QubGNvdi4qYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBSdXN0IExDT1YgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgbGNvdj86IFNvbmFycXViZUxjb3ZPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBgc29uYXIucnVzdC5jbGlwcHkuKmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY2xpcHB5IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGNsaXBweT86IFNvbmFycXViZVJ1c3RDbGlwcHlPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBgc29uYXIucnVzdC5jbGlwcHlSZXBvcnQuKmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY2xpcHB5IHJlcG9ydCBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBjbGlwcHlSZXBvcnQ/OiBTb25hcnF1YmVSdXN0Q2xpcHB5UmVwb3J0T3B0aW9ucztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBsY292IHJlcG9ydCBwYXRocyAoc2hhcmVkIGJldHdlZW4gbGFuZ3VhZ2VzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb25hcnF1YmVMY292T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb21tYS1zZXBhcmF0ZWQgcGF0aHMgdG8gTENPViBjb3ZlcmFnZSByZXBvcnQgZmlsZXMuXG4gICAqXG4gICAqIE1hcHMgdG8gYHNvbmFyLjxsYW5ndWFnZT4ubGNvdi5yZXBvcnRQYXRoc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNldFxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3J0UGF0aHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgc29uYXIucnVzdC5jbGlwcHkuKmAgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb25hcnF1YmVSdXN0Q2xpcHB5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIENsaXBweSBhbmFseXNpcyBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBNYXBzIHRvIGBzb25hci5ydXN0LmNsaXBweS5lbmFibGVkYC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYHNvbmFyLnJ1c3QuY2xpcHB5UmVwb3J0LipgIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29uYXJxdWJlUnVzdENsaXBweVJlcG9ydE9wdGlvbnMge1xuICAvKipcbiAgICogUGF0aHMgdG8gQ2xpcHB5IEpTT04gcmVwb3J0IGZpbGVzLlxuICAgKlxuICAgKiBNYXBzIHRvIGBzb25hci5ydXN0LmNsaXBweVJlcG9ydC5yZXBvcnRQYXRoc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNldFxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3J0UGF0aHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgc29uYXIubG9nLipgIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29uYXJxdWJlTG9nT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb250cm9scyB0aGUgcXVhbnRpdHkvbGV2ZWwgb2YgbG9ncyBwcm9kdWNlZCBkdXJpbmcgYW5hbHlzaXMuXG4gICAqXG4gICAqIE1hcHMgdG8gYHNvbmFyLmxvZy5sZXZlbGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IFNvbmFycXViZUxvZ0xldmVsLklORk9cbiAgICovXG4gIHJlYWRvbmx5IGxldmVsPzogU29uYXJxdWJlTG9nTGV2ZWw7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYHNvbmFyLnF1YWxpdHlnYXRlLipgIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU29uYXJxdWJlUXVhbGl0eUdhdGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEZvcmNlcyB0aGUgYW5hbHlzaXMgc3RlcCB0byBwb2xsIHRoZSBzZXJ2ZXIgYW5kIHdhaXQgZm9yIHRoZVxuICAgKiBRdWFsaXR5IEdhdGUgc3RhdHVzLiBXaWxsIGZhaWwgdGhlIHBpcGVsaW5lIGlmIHRoZSBxdWFsaXR5IGdhdGUgZmFpbHMuXG4gICAqXG4gICAqIE1hcHMgdG8gYHNvbmFyLnF1YWxpdHlnYXRlLndhaXRgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgd2FpdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0aGF0IHRoZSBzY2FubmVyIHNob3VsZCB3YWl0IGZvciBhIHJlcG9ydFxuICAgKiB0byBiZSBwcm9jZXNzZWQuXG4gICAqXG4gICAqIE1hcHMgdG8gYHNvbmFyLnF1YWxpdHlnYXRlLnRpbWVvdXRgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAzMDBcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYFNvbmFycXViZVByb3BlcnRpZXNgLlxuICpcbiAqIFRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIG1pcnJvcnMgdGhlIGBzb25hci4qYCBkb3Qtbm90YXRpb24gdXNlZCBpblxuICogYHNvbmFyLXByb2plY3QucHJvcGVydGllc2AuIE5lc3RlZCBpbnRlcmZhY2VzIG1hcCB0byBuZXN0ZWQgcHJvcGVydHlcbiAqIG5hbWVzcGFjZXMuIEZvciBleGFtcGxlLCBgc2NtLnByb3ZpZGVyYCBtYXBzIHRvIGBzb25hci5zY20ucHJvdmlkZXJgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbmFycXViZVByb3BlcnRpZXNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0J3MgdW5pcXVlIGtleS5cbiAgICpcbiAgICogQ2FuIGluY2x1ZGUgdXAgdG8gNDAwIGNoYXJhY3RlcnMuIEFsbG93ZWQgY2hhcmFjdGVyczpcbiAgICogbGV0dGVycywgZGlnaXRzLCBkYXNoLCB1bmRlcnNjb3JlLCBwZXJpb2RzLCBhbmQgY29sb25zLlxuICAgKlxuICAgKiBNYXBzIHRvIGBzb25hci5wcm9qZWN0S2V5YC4gVGhpcyBwYXJhbWV0ZXIgaXMgbWFuZGF0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdEtleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUga2V5IG9mIHRoZSBvcmdhbml6YXRpb24gdG8gd2hpY2ggdGhlIHByb2plY3QgYmVsb25ncy5cbiAgICpcbiAgICogTWFwcyB0byBgc29uYXIub3JnYW5pemF0aW9uYC4gTWFuZGF0b3J5IGZvciBTb25hclF1YmUgQ2xvdWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gb3JnYW5pemF0aW9uXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHByb2plY3QgZGlzcGxheWVkIG9uIHRoZSB3ZWIgaW50ZXJmYWNlLlxuICAgKlxuICAgKiBNYXBzIHRvIGBzb25hci5wcm9qZWN0TmFtZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm90IHNldFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0IHZlcnNpb24uXG4gICAqXG4gICAqIE1hcHMgdG8gYHNvbmFyLnByb2plY3RWZXJzaW9uYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub3Qgc2V0XG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0VmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQ29tbWEtc2VwYXJhdGVkIHBhdGhzIHRvIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgbWFpbiBzb3VyY2UgY29kZVxuICAgKiAobm9uLXRlc3QgY29kZSkuXG4gICAqXG4gICAqIE1hcHMgdG8gYHNvbmFyLnNvdXJjZXNgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBwcm9qZWN0IGJhc2UgZGlyZWN0b3J5XG4gICAqL1xuICByZWFkb25seSBzb3VyY2VzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb21tYS1zZXBhcmF0ZWQgcGF0aHMgdG8gZGlyZWN0b3JpZXMgY29udGFpbmluZyB0ZXN0IGNvZGUuXG4gICAqXG4gICAqIE1hcHMgdG8gYHNvbmFyLnRlc3RzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB0ZXN0IGNvZGUgYW5hbHl6ZWRcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvamVjdCdzIGJhc2UgZGlyZWN0b3J5IHdoZW4gdGhlIGFuYWx5c2lzIG5lZWRzIHRvIHRha2UgcGxhY2VcbiAgICogaW4gYSBkaXJlY3Rvcnkgb3RoZXIgdGhhbiB0aGUgb25lIGZyb20gd2hpY2ggaXQgd2FzIHN0YXJ0ZWQuXG4gICAqXG4gICAqIE1hcHMgdG8gYHNvbmFyLnByb2plY3RCYXNlRGlyYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggdGhlIGFuYWx5c2lzIHdhcyBzdGFydGVkXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0QmFzZURpcj86IHN0cmluZztcblxuICAvKipcbiAgICogRW5jb2Rpbmcgb2YgdGhlIHNvdXJjZSBmaWxlcy5cbiAgICpcbiAgICogTWFwcyB0byBgc29uYXIuc291cmNlRW5jb2RpbmdgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHN5c3RlbSBlbmNvZGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlRW5jb2Rpbmc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbW1hLXNlcGFyYXRlZCBmaWxlIHBhdGggcGF0dGVybnMgdG8gZXhjbHVkZSBmcm9tIHRoZSBhbmFseXNpcyBzY29wZS5cbiAgICpcbiAgICogTWFwcyB0byBgc29uYXIuZXhjbHVzaW9uc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZXhjbHVzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVzaW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFuZ3VhZ2UgZm9yIGFuYWx5c2lzLlxuICAgKlxuICAgKiBNYXBzIHRvIGBzb25hci5sYW5ndWFnZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXV0by1kZXRlY3RlZFxuICAgKi9cbiAgcmVhZG9ubHkgbGFuZ3VhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBxdWFsaXR5IHByb2ZpbGUgbmFtZS5cbiAgICpcbiAgICogTWFwcyB0byBgc29uYXIucHJvZmlsZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdXNlcyB0aGUgZGVmYXVsdCBwcm9maWxlIGNvbmZpZ3VyZWQgb24gdGhlIHNlcnZlclxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFNvbmFyUXViZSBDbG91ZCBpbnN0YW5jZSdzIHJlZ2lvbi5cbiAgICpcbiAgICogTWFwcyB0byBgc29uYXIucmVnaW9uYC5cbiAgICpcbiAgICogQGRlZmF1bHQgU29uYXJxdWJlUmVnaW9uLkVVXG4gICAqL1xuICByZWFkb25seSByZWdpb24/OiBTb25hcnF1YmVSZWdpb247XG5cbiAgLyoqXG4gICAqIFNDTS1yZWxhdGVkIG9wdGlvbnMgKGBzb25hci5zY20uKmApLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIFNDTSBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBzY20/OiBTb25hcnF1YmVTY21PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBDb3ZlcmFnZS1yZWxhdGVkIG9wdGlvbnMgKGBzb25hci5jb3ZlcmFnZS4qYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY292ZXJhZ2UgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY292ZXJhZ2U/OiBTb25hcnF1YmVDb3ZlcmFnZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIER1cGxpY2F0aW9uIGRldGVjdGlvbiBvcHRpb25zIChgc29uYXIuY3BkLipgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBDUEQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY3BkPzogU29uYXJxdWJlQ3BkT3B0aW9ucztcblxuICAvKipcbiAgICogSmF2YVNjcmlwdC1zcGVjaWZpYyBvcHRpb25zIChgc29uYXIuamF2YXNjcmlwdC4qYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gSmF2YVNjcmlwdCBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBqYXZhc2NyaXB0PzogU29uYXJxdWJlSmF2YXNjcmlwdE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQtc3BlY2lmaWMgb3B0aW9ucyAoYHNvbmFyLnR5cGVzY3JpcHQuKmApLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXNjcmlwdD86IFNvbmFycXViZVR5cGVzY3JpcHRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdXN0LXNwZWNpZmljIG9wdGlvbnMgKGBzb25hci5ydXN0LipgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBSdXN0IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHJ1c3Q/OiBTb25hcnF1YmVSdXN0T3B0aW9ucztcblxuICAvKipcbiAgICogTG9nZ2luZyBvcHRpb25zIChgc29uYXIubG9nLipgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJTkZPIGxldmVsXG4gICAqL1xuICByZWFkb25seSBsb2c/OiBTb25hcnF1YmVMb2dPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBRdWFsaXR5IGdhdGUgb3B0aW9ucyAoYHNvbmFyLnF1YWxpdHlnYXRlLipgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBxdWFsaXR5IGdhdGUgbm90IGF3YWl0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHF1YWxpdHlnYXRlPzogU29uYXJxdWJlUXVhbGl0eUdhdGVPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGFyYml0cmFyeSBwcm9wZXJ0aWVzIHRvIGluY2x1ZGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIFVzZSB0aGlzIGZvciBwcm9wZXJ0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoZSB0eXBlZCBvcHRpb25zLlxuICAgKiBLZXlzIHVzZSBkb3Qtbm90YXRpb24gKGUuZy4sIGBzb25hci5qYXZhLmJpbmFyaWVzYCkuXG4gICAqXG4gICAqIFRoZXNlIGFyZSBhcHBsaWVkIGFzIG92ZXJyaWRlcyBhZnRlciB0aGUgdHlwZWQgb3B0aW9ucyBhYm92ZSwgc28gYSBrZXlcbiAgICogdGhhdCBpcyBhIHByZWZpeCBvZiBhIHR5cGVkIG9wdGlvbiAoZS5nLiBgXCJzb25hci5jb3ZlcmFnZVwiYCkgcmVwbGFjZXNcbiAgICogdGhhdCBlbnRpcmUgc3VidHJlZSByYXRoZXIgdGhhbiBtZXJnaW5nIHdpdGggaXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYWRkaXRpb25hbCBwcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSBleHRyYVByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciB0aGUgZ2VuZXJhdGVkIHByb3BlcnRpZXMgZmlsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IGZpbGUgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZmlsZU9wdGlvbnM/OiBTb25hcnF1YmVGaWxlT3B0aW9ucztcbn1cblxuLyoqXG4gKiBGaWxlIG9wdGlvbnMgZm9yIHRoZSBnZW5lcmF0ZWQgYHNvbmFyLXByb2plY3QucHJvcGVydGllc2AgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb25hcnF1YmVGaWxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBnZW5lcmF0ZWQgZmlsZSBzaG91bGQgYmUgY29tbWl0dGVkIHRvIGdpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWl0dGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ2VuZXJhdGVkIGZpbGUgc2hvdWxkIGJlIHJlYWRvbmx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSByZWFkb25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFkZHMgdGhlIHByb2plbiBtYXJrZXIgdG8gdGhlIGZpbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbWFya2VyIHdpbGwgYmUgaW5jbHVkZWQgYXMgbG9uZyBhcyB0aGUgcHJvamVjdCBpcyBub3QgZWplY3RlZFxuICAgKi9cbiAgcmVhZG9ubHkgbWFya2VyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBjb21tZW50IHRvIGluY2x1ZGUgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGNvbW1lbnRcbiAgICovXG4gIHJlYWRvbmx5IGNvbW1lbnQ/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBNYW5hZ2VzIHRoZSBgc29uYXItcHJvamVjdC5wcm9wZXJ0aWVzYCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIFNvbmFyUXViZVxuICogYW5hbHlzaXMuXG4gKlxuICogVGhpcyBjb21wb25lbnQgZ2VuZXJhdGVzIGEgYHNvbmFyLXByb2plY3QucHJvcGVydGllc2AgZmlsZSBhdCB0aGUgcHJvamVjdFxuICogcm9vdCB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBJdCBwcm92aWRlcyB0eXBlZCBvcHRpb25zXG4gKiB3aG9zZSBzdHJ1Y3R1cmUgbWlycm9ycyB0aGUgZG90LW5vdGF0aW9uIHByb3BlcnR5IG5hbWVzcGFjZXMuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3Muc29uYXJzb3VyY2UuY29tL3NvbmFycXViZS1jbG91ZC9hbmFseXppbmctc291cmNlLWNvZGUvYW5hbHlzaXMtcGFyYW1ldGVycy9wYXJhbWV0ZXJzLW5vdC1zZXR0YWJsZS1pbi11aVxuICpcbiAqIEBleGFtcGxlXG4gKiBuZXcgU29uYXJxdWJlUHJvcGVydGllcyhwcm9qZWN0LCB7XG4gKiAgIHByb2plY3RLZXk6ICdteS1vcmdfbXktcHJvamVjdCcsXG4gKiAgIG9yZ2FuaXphdGlvbjogJ215LW9yZycsXG4gKiAgIHNvdXJjZXM6ICdzcmMnLFxuICogICB0ZXN0czogJ3Rlc3QnLFxuICogICBleGNsdXNpb25zOiBbJyp7QGxpdGVyYWwgKn0vbm9kZV9tb2R1bGVzLyoqJ10sXG4gKiAgIGNvdmVyYWdlOiB7IGV4Y2x1c2lvbnM6IFsnKntAbGl0ZXJhbCAqfS90ZXN0LyoqJ10gfSxcbiAqICAgamF2YXNjcmlwdDogeyBsY292OiB7IHJlcG9ydFBhdGhzOiBbJ2NvdmVyYWdlL2xjb3YuaW5mbyddIH0gfSxcbiAqICAgc291cmNlRW5jb2Rpbmc6ICdVVEYtOCcsXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGNsYXNzIFNvbmFycXViZVByb3BlcnRpZXMgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogVGhlIHVuZGVybHlpbmcgcHJvcGVydGllcyBmaWxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZpbGU6IFByb3BlcnRpZXNGaWxlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBJQ29uc3RydWN0LCBvcHRpb25zOiBTb25hcnF1YmVQcm9wZXJ0aWVzT3B0aW9ucykge1xuICAgIHN1cGVyKHNjb3BlKTtcblxuICAgIGNvbnN0IHNvbmFyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICAvLyBQcm9qZWN0IGlkZW50aWZpY2F0aW9uIChtYW5kYXRvcnkpXG4gICAgc29uYXIucHJvamVjdEtleSA9IG9wdGlvbnMucHJvamVjdEtleTtcblxuICAgIGlmIChvcHRpb25zLm9yZ2FuaXphdGlvbikge1xuICAgICAgc29uYXIub3JnYW5pemF0aW9uID0gb3B0aW9ucy5vcmdhbml6YXRpb247XG4gICAgfVxuXG4gICAgLy8gU2VydmVyIGNvbm5lY3Rpb25cbiAgICBpZiAob3B0aW9ucy5yZWdpb24pIHtcbiAgICAgIHNvbmFyLnJlZ2lvbiA9IG9wdGlvbnMucmVnaW9uO1xuICAgIH1cblxuICAgIC8vIFByb2plY3QgaW5mb3JtYXRpb25cbiAgICBpZiAob3B0aW9ucy5wcm9qZWN0TmFtZSkge1xuICAgICAgc29uYXIucHJvamVjdE5hbWUgPSBvcHRpb25zLnByb2plY3ROYW1lO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5wcm9qZWN0VmVyc2lvbikge1xuICAgICAgc29uYXIucHJvamVjdFZlcnNpb24gPSBvcHRpb25zLnByb2plY3RWZXJzaW9uO1xuICAgIH1cblxuICAgIC8vIFNDTSAoc29uYXIuc2NtLiopXG4gICAgaWYgKG9wdGlvbnMuc2NtKSB7XG4gICAgICBzb25hci5zY20gPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgICAgaWYgKG9wdGlvbnMuc2NtLnByb3ZpZGVyKSB7XG4gICAgICAgIHNvbmFyLnNjbS5wcm92aWRlciA9IG9wdGlvbnMuc2NtLnByb3ZpZGVyO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuc2NtLmV4Y2x1c2lvbnM/LmRpc2FibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc29uYXIuc2NtLmV4Y2x1c2lvbnMgPSB7XG4gICAgICAgICAgZGlzYWJsZWQ6IFN0cmluZyhvcHRpb25zLnNjbS5leGNsdXNpb25zLmRpc2FibGVkKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBbmFseXNpcyBzY29wZVxuICAgIGlmIChvcHRpb25zLnNvdXJjZXMpIHtcbiAgICAgIHNvbmFyLnNvdXJjZXMgPSBvcHRpb25zLnNvdXJjZXM7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRlc3RzKSB7XG4gICAgICBzb25hci50ZXN0cyA9IG9wdGlvbnMudGVzdHM7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnByb2plY3RCYXNlRGlyKSB7XG4gICAgICBzb25hci5wcm9qZWN0QmFzZURpciA9IG9wdGlvbnMucHJvamVjdEJhc2VEaXI7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmV4Y2x1c2lvbnMgJiYgb3B0aW9ucy5leGNsdXNpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHNvbmFyLmV4Y2x1c2lvbnMgPSBvcHRpb25zLmV4Y2x1c2lvbnMuam9pbihcIixcIik7XG4gICAgfVxuXG4gICAgLy8gTGFuZ3VhZ2UgJiBwcm9maWxlXG4gICAgaWYgKG9wdGlvbnMubGFuZ3VhZ2UpIHtcbiAgICAgIHNvbmFyLmxhbmd1YWdlID0gb3B0aW9ucy5sYW5ndWFnZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucHJvZmlsZSkge1xuICAgICAgc29uYXIucHJvZmlsZSA9IG9wdGlvbnMucHJvZmlsZTtcbiAgICB9XG5cbiAgICAvLyBDb3ZlcmFnZSAoc29uYXIuY292ZXJhZ2UuKilcbiAgICBpZiAoXG4gICAgICBvcHRpb25zLmNvdmVyYWdlPy5leGNsdXNpb25zICYmXG4gICAgICBvcHRpb25zLmNvdmVyYWdlLmV4Y2x1c2lvbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgc29uYXIuY292ZXJhZ2UgPSB7IGV4Y2x1c2lvbnM6IG9wdGlvbnMuY292ZXJhZ2UuZXhjbHVzaW9ucy5qb2luKFwiLFwiKSB9O1xuICAgIH1cblxuICAgIC8vIEphdmFTY3JpcHQgKHNvbmFyLmphdmFzY3JpcHQuKilcbiAgICBpZiAoXG4gICAgICBvcHRpb25zLmphdmFzY3JpcHQ/Lmxjb3Y/LnJlcG9ydFBhdGhzICYmXG4gICAgICBvcHRpb25zLmphdmFzY3JpcHQubGNvdi5yZXBvcnRQYXRocy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBzb25hci5qYXZhc2NyaXB0ID0ge1xuICAgICAgICBsY292OiB7IHJlcG9ydFBhdGhzOiBvcHRpb25zLmphdmFzY3JpcHQubGNvdi5yZXBvcnRQYXRocy5qb2luKFwiLFwiKSB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBUeXBlU2NyaXB0IChzb25hci50eXBlc2NyaXB0LiopXG4gICAgaWYgKG9wdGlvbnMudHlwZXNjcmlwdD8udHNjb25maWdQYXRoKSB7XG4gICAgICBzb25hci50eXBlc2NyaXB0ID0geyB0c2NvbmZpZ1BhdGg6IG9wdGlvbnMudHlwZXNjcmlwdC50c2NvbmZpZ1BhdGggfTtcbiAgICB9XG5cbiAgICAvLyBSdXN0IChzb25hci5ydXN0LiopXG4gICAgaWYgKG9wdGlvbnMucnVzdCkge1xuICAgICAgc29uYXIucnVzdCA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMucnVzdC5sY292Py5yZXBvcnRQYXRocyAmJlxuICAgICAgICBvcHRpb25zLnJ1c3QubGNvdi5yZXBvcnRQYXRocy5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgc29uYXIucnVzdC5sY292ID0ge1xuICAgICAgICAgIHJlcG9ydFBhdGhzOiBvcHRpb25zLnJ1c3QubGNvdi5yZXBvcnRQYXRocy5qb2luKFwiLFwiKSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnJ1c3QuY2xpcHB5Py5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc29uYXIucnVzdC5jbGlwcHkgPSB7IGVuYWJsZWQ6IFN0cmluZyhvcHRpb25zLnJ1c3QuY2xpcHB5LmVuYWJsZWQpIH07XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMucnVzdC5jbGlwcHlSZXBvcnQ/LnJlcG9ydFBhdGhzICYmXG4gICAgICAgIG9wdGlvbnMucnVzdC5jbGlwcHlSZXBvcnQucmVwb3J0UGF0aHMubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIHNvbmFyLnJ1c3QuY2xpcHB5UmVwb3J0ID0ge1xuICAgICAgICAgIHJlcG9ydFBhdGhzOiBvcHRpb25zLnJ1c3QuY2xpcHB5UmVwb3J0LnJlcG9ydFBhdGhzLmpvaW4oXCIsXCIpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIER1cGxpY2F0aW9uIChzb25hci5jcGQuKilcbiAgICBpZiAob3B0aW9ucy5jcGQ/LmV4Y2x1c2lvbnMgJiYgb3B0aW9ucy5jcGQuZXhjbHVzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBzb25hci5jcGQgPSB7IGV4Y2x1c2lvbnM6IG9wdGlvbnMuY3BkLmV4Y2x1c2lvbnMuam9pbihcIixcIikgfTtcbiAgICB9XG5cbiAgICAvLyBFbmNvZGluZ1xuICAgIGlmIChvcHRpb25zLnNvdXJjZUVuY29kaW5nKSB7XG4gICAgICBzb25hci5zb3VyY2VFbmNvZGluZyA9IG9wdGlvbnMuc291cmNlRW5jb2Rpbmc7XG4gICAgfVxuXG4gICAgLy8gTG9nZ2luZyAoc29uYXIubG9nLiopXG4gICAgaWYgKG9wdGlvbnMubG9nPy5sZXZlbCkge1xuICAgICAgc29uYXIubG9nID0geyBsZXZlbDogb3B0aW9ucy5sb2cubGV2ZWwgfTtcbiAgICB9XG5cbiAgICAvLyBRdWFsaXR5IGdhdGUgKHNvbmFyLnF1YWxpdHlnYXRlLiopXG4gICAgaWYgKG9wdGlvbnMucXVhbGl0eWdhdGUpIHtcbiAgICAgIGNvbnN0IHFnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICBpZiAob3B0aW9ucy5xdWFsaXR5Z2F0ZS53YWl0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcWcud2FpdCA9IFN0cmluZyhvcHRpb25zLnF1YWxpdHlnYXRlLndhaXQpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMucXVhbGl0eWdhdGUudGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHFnLnRpbWVvdXQgPSBTdHJpbmcob3B0aW9ucy5xdWFsaXR5Z2F0ZS50aW1lb3V0KTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3Qua2V5cyhxZykubGVuZ3RoID4gMCkge1xuICAgICAgICBzb25hci5xdWFsaXR5Z2F0ZSA9IHFnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZmlsZSA9IG5ldyBQcm9wZXJ0aWVzRmlsZSh0aGlzLnByb2plY3QsIFwic29uYXItcHJvamVjdC5wcm9wZXJ0aWVzXCIsIHtcbiAgICAgIG9iajogeyBzb25hciB9LFxuICAgICAgY29tbWl0dGVkOiBvcHRpb25zLmZpbGVPcHRpb25zPy5jb21taXR0ZWQsXG4gICAgICByZWFkb25seTogb3B0aW9ucy5maWxlT3B0aW9ucz8ucmVhZG9ubHksXG4gICAgICBtYXJrZXI6IG9wdGlvbnMuZmlsZU9wdGlvbnM/Lm1hcmtlcixcbiAgICAgIGNvbW1lbnQ6IG9wdGlvbnMuZmlsZU9wdGlvbnM/LmNvbW1lbnQsXG4gICAgfSk7XG5cbiAgICAvLyBFeHRyYSBwcm9wZXJ0aWVzICh1c2VyLXNwZWNpZmllZCBhcmJpdHJhcnkgcHJvcGVydGllcykuIEFwcGxpZWQgYXNcbiAgICAvLyBvdmVycmlkZXMgc28gYSBsZWFmIGxpa2UgXCJzb25hci5jb3ZlcmFnZVwiIHJlcGxhY2VzIHRoZSB3aG9sZSBzdWJ0cmVlXG4gICAgLy8gcmF0aGVyIHRoYW4gbWVyZ2luZyB3aXRoIHRoZSB0eXBlZCBvcHRpb25zIGFib3ZlLlxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuZXh0cmFQcm9wZXJ0aWVzID8/IHt9KSkge1xuICAgICAgdGhpcy5maWxlLmFkZE92ZXJyaWRlKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,36 @@
1
+ import type { IConstruct } from "constructs";
2
+ import { SonarqubeProperties } from "./sonarqube";
3
+ import type { SonarqubePropertiesOptions } from "./sonarqube";
4
+ /**
5
+ * Options for `SonarqubeTypescriptProperties`.
6
+ *
7
+ * Extends base options with TypeScript-specific defaults.
8
+ */
9
+ export interface SonarqubeTypescriptPropertiesOptions extends SonarqubePropertiesOptions {
10
+ }
11
+ /**
12
+ * A SonarQube configuration preset for TypeScript projects.
13
+ *
14
+ * Provides sensible defaults for TypeScript analysis:
15
+ * - `sonar.language` = `ts`
16
+ * - `sonar.sources` = `src`
17
+ * - `sonar.tests` = `test`
18
+ * - `sonar.sourceEncoding` = `UTF-8`
19
+ * - `sonar.profile` = `Sonar Way`
20
+ * - `sonar.scm.provider` = `git`
21
+ * - `sonar.typescript.tsconfigPath` = `tsconfig.json`
22
+ * - Typical exclusions for `node_modules`, `coverage`, test files
23
+ * - `sonar.javascript.lcov.reportPaths` = `coverage/lcov.info`
24
+ *
25
+ * All defaults can be overridden via options. Nested options (e.g. `coverage`,
26
+ * `javascript`) are deep-merged with the defaults, so overriding one nested
27
+ * field does not drop the other defaults in that subtree.
28
+ *
29
+ * @example
30
+ * new SonarqubeTypescriptProperties(project, {
31
+ * projectKey: 'my-org_my-ts-project',
32
+ * });
33
+ */
34
+ export declare class SonarqubeTypescriptProperties extends SonarqubeProperties {
35
+ constructor(scope: IConstruct, options: SonarqubeTypescriptPropertiesOptions);
36
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SonarqubeTypescriptProperties = void 0;
4
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
+ const sonarqube_1 = require("./sonarqube");
6
+ const util_1 = require("../util");
7
+ /**
8
+ * A SonarQube configuration preset for TypeScript projects.
9
+ *
10
+ * Provides sensible defaults for TypeScript analysis:
11
+ * - `sonar.language` = `ts`
12
+ * - `sonar.sources` = `src`
13
+ * - `sonar.tests` = `test`
14
+ * - `sonar.sourceEncoding` = `UTF-8`
15
+ * - `sonar.profile` = `Sonar Way`
16
+ * - `sonar.scm.provider` = `git`
17
+ * - `sonar.typescript.tsconfigPath` = `tsconfig.json`
18
+ * - Typical exclusions for `node_modules`, `coverage`, test files
19
+ * - `sonar.javascript.lcov.reportPaths` = `coverage/lcov.info`
20
+ *
21
+ * All defaults can be overridden via options. Nested options (e.g. `coverage`,
22
+ * `javascript`) are deep-merged with the defaults, so overriding one nested
23
+ * field does not drop the other defaults in that subtree.
24
+ *
25
+ * @example
26
+ * new SonarqubeTypescriptProperties(project, {
27
+ * projectKey: 'my-org_my-ts-project',
28
+ * });
29
+ */
30
+ class SonarqubeTypescriptProperties extends sonarqube_1.SonarqubeProperties {
31
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.sonarqube.SonarqubeTypescriptProperties", version: "0.103.5" };
32
+ constructor(scope, options) {
33
+ super(scope, (0, util_1.deepMerge)([
34
+ {
35
+ language: "ts",
36
+ sources: "src",
37
+ tests: "test",
38
+ sourceEncoding: "UTF-8",
39
+ profile: "Sonar Way",
40
+ scm: { provider: "git" },
41
+ exclusions: [
42
+ "**/node_modules/**",
43
+ "**/coverage/**",
44
+ "**/test/**",
45
+ "**/__tests__/**",
46
+ "**/*.test.ts",
47
+ "**/*.spec.ts",
48
+ "**/dist/**",
49
+ "**/build/**",
50
+ ],
51
+ coverage: { exclusions: ["**/test/**", "**/__tests__/**"] },
52
+ cpd: { exclusions: ["**/test/**/*.json", "**/__tests__/**/*.json"] },
53
+ javascript: { lcov: { reportPaths: ["coverage/lcov.info"] } },
54
+ typescript: { tsconfigPath: "tsconfig.json" },
55
+ },
56
+ options,
57
+ ]));
58
+ }
59
+ }
60
+ exports.SonarqubeTypescriptProperties = SonarqubeTypescriptProperties;
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zb25hcnF1YmUvdHlwZXNjcmlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsMkNBQWtEO0FBRWxELGtDQUFvQztBQVNwQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQWEsNkJBQThCLFNBQVEsK0JBQW1COztJQUNwRSxZQUNFLEtBQWlCLEVBQ2pCLE9BQTZDO1FBRTdDLEtBQUssQ0FDSCxLQUFLLEVBQ0wsSUFBQSxnQkFBUyxFQUFDO1lBQ1I7Z0JBQ0UsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsY0FBYyxFQUFFLE9BQU87Z0JBQ3ZCLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO2dCQUN4QixVQUFVLEVBQUU7b0JBQ1Ysb0JBQW9CO29CQUNwQixnQkFBZ0I7b0JBQ2hCLFlBQVk7b0JBQ1osaUJBQWlCO29CQUNqQixjQUFjO29CQUNkLGNBQWM7b0JBQ2QsWUFBWTtvQkFDWixhQUFhO2lCQUNkO2dCQUNELFFBQVEsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxFQUFFO2dCQUMzRCxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSx3QkFBd0IsQ0FBQyxFQUFFO2dCQUNwRSxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdELFVBQVUsRUFBRSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUU7YUFDOUM7WUFDRCxPQUFPO1NBQ1IsQ0FBeUMsQ0FDM0MsQ0FBQztJQUNKLENBQUM7O0FBakNILHNFQWtDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBTb25hcnF1YmVQcm9wZXJ0aWVzIH0gZnJvbSBcIi4vc29uYXJxdWJlXCI7XG5pbXBvcnQgdHlwZSB7IFNvbmFycXViZVByb3BlcnRpZXNPcHRpb25zIH0gZnJvbSBcIi4vc29uYXJxdWJlXCI7XG5pbXBvcnQgeyBkZWVwTWVyZ2UgfSBmcm9tIFwiLi4vdXRpbFwiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBTb25hcnF1YmVUeXBlc2NyaXB0UHJvcGVydGllc2AuXG4gKlxuICogRXh0ZW5kcyBiYXNlIG9wdGlvbnMgd2l0aCBUeXBlU2NyaXB0LXNwZWNpZmljIGRlZmF1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbmFycXViZVR5cGVzY3JpcHRQcm9wZXJ0aWVzT3B0aW9ucyBleHRlbmRzIFNvbmFycXViZVByb3BlcnRpZXNPcHRpb25zIHt9XG5cbi8qKlxuICogQSBTb25hclF1YmUgY29uZmlndXJhdGlvbiBwcmVzZXQgZm9yIFR5cGVTY3JpcHQgcHJvamVjdHMuXG4gKlxuICogUHJvdmlkZXMgc2Vuc2libGUgZGVmYXVsdHMgZm9yIFR5cGVTY3JpcHQgYW5hbHlzaXM6XG4gKiAtIGBzb25hci5sYW5ndWFnZWAgPSBgdHNgXG4gKiAtIGBzb25hci5zb3VyY2VzYCA9IGBzcmNgXG4gKiAtIGBzb25hci50ZXN0c2AgPSBgdGVzdGBcbiAqIC0gYHNvbmFyLnNvdXJjZUVuY29kaW5nYCA9IGBVVEYtOGBcbiAqIC0gYHNvbmFyLnByb2ZpbGVgID0gYFNvbmFyIFdheWBcbiAqIC0gYHNvbmFyLnNjbS5wcm92aWRlcmAgPSBgZ2l0YFxuICogLSBgc29uYXIudHlwZXNjcmlwdC50c2NvbmZpZ1BhdGhgID0gYHRzY29uZmlnLmpzb25gXG4gKiAtIFR5cGljYWwgZXhjbHVzaW9ucyBmb3IgYG5vZGVfbW9kdWxlc2AsIGBjb3ZlcmFnZWAsIHRlc3QgZmlsZXNcbiAqIC0gYHNvbmFyLmphdmFzY3JpcHQubGNvdi5yZXBvcnRQYXRoc2AgPSBgY292ZXJhZ2UvbGNvdi5pbmZvYFxuICpcbiAqIEFsbCBkZWZhdWx0cyBjYW4gYmUgb3ZlcnJpZGRlbiB2aWEgb3B0aW9ucy4gTmVzdGVkIG9wdGlvbnMgKGUuZy4gYGNvdmVyYWdlYCxcbiAqIGBqYXZhc2NyaXB0YCkgYXJlIGRlZXAtbWVyZ2VkIHdpdGggdGhlIGRlZmF1bHRzLCBzbyBvdmVycmlkaW5nIG9uZSBuZXN0ZWRcbiAqIGZpZWxkIGRvZXMgbm90IGRyb3AgdGhlIG90aGVyIGRlZmF1bHRzIGluIHRoYXQgc3VidHJlZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogbmV3IFNvbmFycXViZVR5cGVzY3JpcHRQcm9wZXJ0aWVzKHByb2plY3QsIHtcbiAqICAgcHJvamVjdEtleTogJ215LW9yZ19teS10cy1wcm9qZWN0JyxcbiAqIH0pO1xuICovXG5leHBvcnQgY2xhc3MgU29uYXJxdWJlVHlwZXNjcmlwdFByb3BlcnRpZXMgZXh0ZW5kcyBTb25hcnF1YmVQcm9wZXJ0aWVzIHtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IElDb25zdHJ1Y3QsXG4gICAgb3B0aW9uczogU29uYXJxdWJlVHlwZXNjcmlwdFByb3BlcnRpZXNPcHRpb25zLFxuICApIHtcbiAgICBzdXBlcihcbiAgICAgIHNjb3BlLFxuICAgICAgZGVlcE1lcmdlKFtcbiAgICAgICAge1xuICAgICAgICAgIGxhbmd1YWdlOiBcInRzXCIsXG4gICAgICAgICAgc291cmNlczogXCJzcmNcIixcbiAgICAgICAgICB0ZXN0czogXCJ0ZXN0XCIsXG4gICAgICAgICAgc291cmNlRW5jb2Rpbmc6IFwiVVRGLThcIixcbiAgICAgICAgICBwcm9maWxlOiBcIlNvbmFyIFdheVwiLFxuICAgICAgICAgIHNjbTogeyBwcm92aWRlcjogXCJnaXRcIiB9LFxuICAgICAgICAgIGV4Y2x1c2lvbnM6IFtcbiAgICAgICAgICAgIFwiKiovbm9kZV9tb2R1bGVzLyoqXCIsXG4gICAgICAgICAgICBcIioqL2NvdmVyYWdlLyoqXCIsXG4gICAgICAgICAgICBcIioqL3Rlc3QvKipcIixcbiAgICAgICAgICAgIFwiKiovX190ZXN0c19fLyoqXCIsXG4gICAgICAgICAgICBcIioqLyoudGVzdC50c1wiLFxuICAgICAgICAgICAgXCIqKi8qLnNwZWMudHNcIixcbiAgICAgICAgICAgIFwiKiovZGlzdC8qKlwiLFxuICAgICAgICAgICAgXCIqKi9idWlsZC8qKlwiLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY292ZXJhZ2U6IHsgZXhjbHVzaW9uczogW1wiKiovdGVzdC8qKlwiLCBcIioqL19fdGVzdHNfXy8qKlwiXSB9LFxuICAgICAgICAgIGNwZDogeyBleGNsdXNpb25zOiBbXCIqKi90ZXN0LyoqLyouanNvblwiLCBcIioqL19fdGVzdHNfXy8qKi8qLmpzb25cIl0gfSxcbiAgICAgICAgICBqYXZhc2NyaXB0OiB7IGxjb3Y6IHsgcmVwb3J0UGF0aHM6IFtcImNvdmVyYWdlL2xjb3YuaW5mb1wiXSB9IH0sXG4gICAgICAgICAgdHlwZXNjcmlwdDogeyB0c2NvbmZpZ1BhdGg6IFwidHNjb25maWcuanNvblwiIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICBdKSBhcyBTb25hcnF1YmVUeXBlc2NyaXB0UHJvcGVydGllc09wdGlvbnMsXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -9,7 +9,7 @@ const textfile_1 = require("./textfile");
9
9
  */
10
10
  class SourceCode extends component_1.Component {
11
11
  filePath;
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SourceCode", version: "0.103.3" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SourceCode", version: "0.103.5" };
13
13
  file;
14
14
  indentLevel = 0;
15
15
  indent;
package/lib/task-shell.js CHANGED
@@ -19,7 +19,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
19
19
  */
20
20
  class TaskShell {
21
21
  value;
22
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.TaskShell", version: "0.103.3" };
22
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.TaskShell", version: "0.103.5" };
23
23
  /**
24
24
  * The built-in cross-platform shell (the default). It interprets POSIX-style
25
25
  * task syntax (`mkdir -p`, `&&`, `$VAR`, ...) identically on every platform,
package/lib/task.js CHANGED
@@ -8,7 +8,7 @@ const logging_1 = require("./logging");
8
8
  * commands and subtasks.
9
9
  */
10
10
  class Task {
11
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Task", version: "0.103.3" };
11
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Task", version: "0.103.5" };
12
12
  /**
13
13
  * Task name.
14
14
  */
package/lib/tasks.js CHANGED
@@ -48,7 +48,7 @@ const task_runner_1 = require("./task-runner");
48
48
  * synthesized into `.projen/tasks.json`.
49
49
  */
50
50
  class Tasks extends component_1.Component {
51
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Tasks", version: "0.103.3" };
51
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Tasks", version: "0.103.5" };
52
52
  _tasks;
53
53
  _env;
54
54
  _shell;
package/lib/testing.js CHANGED
@@ -10,7 +10,7 @@ const synth_1 = require("./util/synth");
10
10
  * @example `expect(Testing.synth(someProject)).toMatchSnapshot()`
11
11
  */
12
12
  class Testing {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Testing", version: "0.103.3" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Testing", version: "0.103.5" };
14
14
  /**
15
15
  * Produces a simple JS object that represents the contents of the projects with field names being file paths.
16
16
  * @param project the project to produce a snapshot for
package/lib/textfile.js CHANGED
@@ -7,7 +7,7 @@ const file_1 = require("./file");
7
7
  * A text file.
8
8
  */
9
9
  class TextFile extends file_1.FileBase {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.TextFile", version: "0.103.3" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.TextFile", version: "0.103.5" };
11
11
  lines;
12
12
  /**
13
13
  * Defines a text file.
package/lib/toml.js CHANGED
@@ -41,7 +41,7 @@ const object_file_1 = require("./object-file");
41
41
  * Represents a TOML file.
42
42
  */
43
43
  class TomlFile extends object_file_1.ObjectFile {
44
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.TomlFile", version: "0.103.3" };
44
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.TomlFile", version: "0.103.5" };
45
45
  constructor(scope, filePath, options) {
46
46
  super(scope, filePath, options);
47
47
  }
@@ -16,7 +16,7 @@ const DEFAULT_FILENAME = ".projenrc.ts";
16
16
  * and has no expectations around the project's main language.
17
17
  */
18
18
  class ProjenrcTs extends projenrc_1.ProjenrcFile {
19
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.ProjenrcTs", version: "0.103.3" };
19
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.ProjenrcTs", version: "0.103.5" };
20
20
  /**
21
21
  * TypeScript configuration file used to compile projen source files
22
22
  */
@@ -15,7 +15,7 @@ const DEFAULT_FILENAME = ".projenrc.ts";
15
15
  * This component is used within TypeScriptProject.
16
16
  */
17
17
  class Projenrc extends projenrc_1.ProjenrcFile {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.Projenrc", version: "0.103.3" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.Projenrc", version: "0.103.5" };
19
19
  filePath;
20
20
  tsconfig;
21
21
  _projenCodeDir;
@@ -13,7 +13,7 @@ const recreate_1 = require("../util/recreate");
13
13
  * adjusted options.
14
14
  */
15
15
  class TypeScriptRunner extends script_runner_1.ScriptRunner {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TypeScriptRunner", version: "0.103.3" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TypeScriptRunner", version: "0.103.5" };
17
17
  /**
18
18
  * Use ts-node to execute TypeScript files.
19
19
  */
@@ -6,7 +6,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  Adds a simple Typescript documentation generator
7
7
  */
8
8
  class TypedocDocgen {
9
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TypedocDocgen", version: "0.103.3" };
9
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TypedocDocgen", version: "0.103.5" };
10
10
  constructor(project) {
11
11
  project.addDevDeps("typedoc");
12
12
  const docgen = project.addTask("docgen", {
@@ -52,7 +52,7 @@ const util_2 = require("../util");
52
52
  */
53
53
  class TsJestBabelConfig {
54
54
  config;
55
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TsJestBabelConfig", version: "0.103.3" };
55
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TsJestBabelConfig", version: "0.103.5" };
56
56
  /**
57
57
  * Disables the use of Babel
58
58
  */
@@ -99,7 +99,7 @@ exports.TsJestBabelConfig = TsJestBabelConfig;
99
99
  */
100
100
  class TsJestDiagnostics {
101
101
  config;
102
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TsJestDiagnostics", version: "0.103.3" };
102
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TsJestDiagnostics", version: "0.103.5" };
103
103
  /**
104
104
  * Enable all diagnostics.
105
105
  */
@@ -137,7 +137,7 @@ exports.TsJestDiagnostics = TsJestDiagnostics;
137
137
  */
138
138
  class TsJestTsconfig {
139
139
  config;
140
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TsJestTsconfig", version: "0.103.3" };
140
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TsJestTsconfig", version: "0.103.5" };
141
141
  /**
142
142
  * Uses `tsconfig.json` if found, or the built-in default TypeScript compiler options.
143
143
  */
@@ -183,7 +183,7 @@ exports.TsJestTsconfig = TsJestTsconfig;
183
183
  * @pjid typescript
184
184
  */
185
185
  class TypeScriptProject extends javascript_1.NodeProject {
186
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TypeScriptProject", version: "0.103.3" };
186
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TypeScriptProject", version: "0.103.5" };
187
187
  static DEFAULT_TS_JEST_TRANFORM_PATTERN = "^.+\\.[t]sx?$";
188
188
  docgen;
189
189
  docsDirectory;
@@ -620,7 +620,7 @@ class SampleCode extends component_1.Component {
620
620
  * @pjid typescript-app
621
621
  */
622
622
  class TypeScriptAppProject extends TypeScriptProject {
623
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TypeScriptAppProject", version: "0.103.3" };
623
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TypeScriptAppProject", version: "0.103.5" };
624
624
  constructor(options) {
625
625
  // Releasing and packaging are coupled. If one is disabled, disable the other by default.
626
626
  const shouldRelease = options.release ?? false;
package/lib/util.d.ts CHANGED
@@ -42,6 +42,15 @@ export interface DecamelizeRecursivelyOptions {
42
42
  path?: string[];
43
43
  }
44
44
  export declare function decamelizeKeysRecursively(input: any, opt?: DecamelizeRecursivelyOptions): any;
45
+ /**
46
+ * Recursively flattens a nested object into dot-separated key/value pairs.
47
+ *
48
+ * For example, `{ sonar: { sources: "src" } }` becomes `[["sonar.sources", "src"]]`.
49
+ * Leaf values (strings, numbers, booleans) are emitted as entries.
50
+ * Null/undefined values are skipped. Arrays of scalars are joined with a
51
+ * comma; arrays containing non-scalar elements throw.
52
+ */
53
+ export declare function flattenToDotNotation(obj: Record<string, any>, prefix?: string): Array<[string, string]>;
45
54
  /**
46
55
  * Returns false if value is unset or a falsey value, and true otherwise.
47
56
  * @param value an environment variable