projen 0.103.4 → 0.103.6

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 (231) hide show
  1. package/.jsii +1565 -36
  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/jest.js +4 -4
  85. package/lib/javascript/license-checker.js +1 -1
  86. package/lib/javascript/node-config-file.js +1 -1
  87. package/lib/javascript/node-package.js +9 -2
  88. package/lib/javascript/node-project.js +1 -1
  89. package/lib/javascript/npm-config.js +1 -1
  90. package/lib/javascript/pnpm-workspace-config.js +2 -2
  91. package/lib/javascript/pnpm-workspace.js +1 -1
  92. package/lib/javascript/prettier.js +1 -1
  93. package/lib/javascript/projenrc.js +1 -1
  94. package/lib/javascript/typescript-config.js +2 -2
  95. package/lib/javascript/upgrade-dependencies.js +2 -2
  96. package/lib/javascript/yarnrc.js +1 -1
  97. package/lib/json-patch.js +1 -1
  98. package/lib/json.js +1 -1
  99. package/lib/license.js +1 -1
  100. package/lib/logger.js +1 -1
  101. package/lib/makefile.js +1 -1
  102. package/lib/object-file.js +1 -1
  103. package/lib/project-build.js +1 -1
  104. package/lib/project-tree.js +1 -1
  105. package/lib/project.js +1 -1
  106. package/lib/projects.js +1 -1
  107. package/lib/projenrc-json.js +1 -1
  108. package/lib/projenrc.js +1 -1
  109. package/lib/properties-file.d.ts +50 -0
  110. package/lib/properties-file.js +77 -0
  111. package/lib/python/pip.js +1 -1
  112. package/lib/python/poetry.js +2 -2
  113. package/lib/python/projenrc.js +1 -1
  114. package/lib/python/pyproject-toml-file.js +1 -1
  115. package/lib/python/pytest-sample.js +1 -1
  116. package/lib/python/pytest.js +1 -1
  117. package/lib/python/python-project.js +1 -1
  118. package/lib/python/python-sample.js +1 -1
  119. package/lib/python/requirements-file.js +1 -1
  120. package/lib/python/setuppy.js +1 -1
  121. package/lib/python/setuptools.js +1 -1
  122. package/lib/python/uv-config.js +1 -1
  123. package/lib/python/uv.js +1 -1
  124. package/lib/python/venv.js +1 -1
  125. package/lib/readme.js +1 -1
  126. package/lib/release/publisher.js +1 -1
  127. package/lib/release/release-trigger.js +1 -1
  128. package/lib/release/release.js +1 -1
  129. package/lib/renovatebot.js +1 -1
  130. package/lib/run-task.cjs +7 -5
  131. package/lib/sample-file.js +2 -2
  132. package/lib/script-runner.js +1 -1
  133. package/lib/sonarqube/index.d.ts +4 -0
  134. package/lib/sonarqube/index.js +21 -0
  135. package/lib/sonarqube/javascript.d.ts +35 -0
  136. package/lib/sonarqube/javascript.js +57 -0
  137. package/lib/sonarqube/rust.d.ts +37 -0
  138. package/lib/sonarqube/rust.js +58 -0
  139. package/lib/sonarqube/sonarqube.d.ts +439 -0
  140. package/lib/sonarqube/sonarqube.js +184 -0
  141. package/lib/sonarqube/typescript.d.ts +36 -0
  142. package/lib/sonarqube/typescript.js +61 -0
  143. package/lib/source-code.js +1 -1
  144. package/lib/task-shell.js +1 -1
  145. package/lib/task.js +1 -1
  146. package/lib/tasks.js +1 -1
  147. package/lib/testing.js +1 -1
  148. package/lib/textfile.js +1 -1
  149. package/lib/toml.js +1 -1
  150. package/lib/typescript/projenrc-ts.js +1 -1
  151. package/lib/typescript/projenrc.js +1 -1
  152. package/lib/typescript/typescript-runner.js +1 -1
  153. package/lib/typescript/typescript-typedoc.js +1 -1
  154. package/lib/typescript/typescript.js +5 -5
  155. package/lib/util.d.ts +9 -0
  156. package/lib/util.js +39 -1
  157. package/lib/version.js +2 -2
  158. package/lib/vscode/devcontainer.js +1 -1
  159. package/lib/vscode/extensions.js +1 -1
  160. package/lib/vscode/launch-config.js +1 -1
  161. package/lib/vscode/settings.js +1 -1
  162. package/lib/vscode/vscode.js +1 -1
  163. package/lib/web/next.js +3 -3
  164. package/lib/web/postcss.js +1 -1
  165. package/lib/web/react.js +3 -3
  166. package/lib/web/tailwind.js +1 -1
  167. package/lib/xmlfile.js +1 -1
  168. package/lib/yaml.js +1 -1
  169. package/node_modules/properties-file/LICENSE +21 -0
  170. package/node_modules/properties-file/README.md +253 -0
  171. package/node_modules/properties-file/dist/cjs/bundler/bun.d.ts +10 -0
  172. package/node_modules/properties-file/dist/cjs/bundler/bun.js +1 -0
  173. package/node_modules/properties-file/dist/cjs/bundler/esbuild.d.ts +11 -0
  174. package/node_modules/properties-file/dist/cjs/bundler/esbuild.js +1 -0
  175. package/node_modules/properties-file/dist/cjs/bundler/rollup.d.ts +11 -0
  176. package/node_modules/properties-file/dist/cjs/bundler/rollup.js +1 -0
  177. package/node_modules/properties-file/dist/cjs/bundler/webpack.d.ts +12 -0
  178. package/node_modules/properties-file/dist/cjs/bundler/webpack.js +1 -0
  179. package/node_modules/properties-file/dist/cjs/characters.d.ts +32 -0
  180. package/node_modules/properties-file/dist/cjs/characters.js +1 -0
  181. package/node_modules/properties-file/dist/cjs/editor/index.d.ts +181 -0
  182. package/node_modules/properties-file/dist/cjs/editor/index.js +1 -0
  183. package/node_modules/properties-file/dist/cjs/escape/index.d.ts +18 -0
  184. package/node_modules/properties-file/dist/cjs/escape/index.js +1 -0
  185. package/node_modules/properties-file/dist/cjs/index.d.ts +25 -0
  186. package/node_modules/properties-file/dist/cjs/index.js +1 -0
  187. package/node_modules/properties-file/dist/cjs/package.json +1 -0
  188. package/node_modules/properties-file/dist/cjs/parser/index.d.ts +3 -0
  189. package/node_modules/properties-file/dist/cjs/parser/index.js +1 -0
  190. package/node_modules/properties-file/dist/cjs/parser/nodes.d.ts +154 -0
  191. package/node_modules/properties-file/dist/cjs/parser/nodes.js +1 -0
  192. package/node_modules/properties-file/dist/cjs/parser/normalize.d.ts +12 -0
  193. package/node_modules/properties-file/dist/cjs/parser/normalize.js +1 -0
  194. package/node_modules/properties-file/dist/cjs/parser/parse.d.ts +23 -0
  195. package/node_modules/properties-file/dist/cjs/parser/parse.js +1 -0
  196. package/node_modules/properties-file/dist/cjs/parser/properties.d.ts +93 -0
  197. package/node_modules/properties-file/dist/cjs/parser/properties.js +1 -0
  198. package/node_modules/properties-file/dist/cjs/properties-file.d.ts +8 -0
  199. package/node_modules/properties-file/dist/cjs/unescape/index.d.ts +14 -0
  200. package/node_modules/properties-file/dist/cjs/unescape/index.js +1 -0
  201. package/node_modules/properties-file/dist/esm/bundler/bun.d.ts +10 -0
  202. package/node_modules/properties-file/dist/esm/bundler/bun.js +1 -0
  203. package/node_modules/properties-file/dist/esm/bundler/esbuild.d.ts +11 -0
  204. package/node_modules/properties-file/dist/esm/bundler/esbuild.js +1 -0
  205. package/node_modules/properties-file/dist/esm/bundler/rollup.d.ts +11 -0
  206. package/node_modules/properties-file/dist/esm/bundler/rollup.js +1 -0
  207. package/node_modules/properties-file/dist/esm/bundler/webpack.d.ts +12 -0
  208. package/node_modules/properties-file/dist/esm/bundler/webpack.js +1 -0
  209. package/node_modules/properties-file/dist/esm/characters.d.ts +32 -0
  210. package/node_modules/properties-file/dist/esm/characters.js +1 -0
  211. package/node_modules/properties-file/dist/esm/editor/index.d.ts +181 -0
  212. package/node_modules/properties-file/dist/esm/editor/index.js +1 -0
  213. package/node_modules/properties-file/dist/esm/escape/index.d.ts +18 -0
  214. package/node_modules/properties-file/dist/esm/escape/index.js +1 -0
  215. package/node_modules/properties-file/dist/esm/index.d.ts +25 -0
  216. package/node_modules/properties-file/dist/esm/index.js +1 -0
  217. package/node_modules/properties-file/dist/esm/parser/index.d.ts +3 -0
  218. package/node_modules/properties-file/dist/esm/parser/index.js +1 -0
  219. package/node_modules/properties-file/dist/esm/parser/nodes.d.ts +154 -0
  220. package/node_modules/properties-file/dist/esm/parser/nodes.js +1 -0
  221. package/node_modules/properties-file/dist/esm/parser/normalize.d.ts +12 -0
  222. package/node_modules/properties-file/dist/esm/parser/normalize.js +1 -0
  223. package/node_modules/properties-file/dist/esm/parser/parse.d.ts +23 -0
  224. package/node_modules/properties-file/dist/esm/parser/parse.js +1 -0
  225. package/node_modules/properties-file/dist/esm/parser/properties.d.ts +93 -0
  226. package/node_modules/properties-file/dist/esm/parser/properties.js +1 -0
  227. package/node_modules/properties-file/dist/esm/properties-file.d.ts +8 -0
  228. package/node_modules/properties-file/dist/esm/unescape/index.d.ts +14 -0
  229. package/node_modules/properties-file/dist/esm/unescape/index.js +1 -0
  230. package/node_modules/properties-file/package.json +190 -0
  231. package/package.json +7 -5
package/lib/run-task.cjs CHANGED
@@ -1646,7 +1646,7 @@ var require_package = __commonJS({
1646
1646
  },
1647
1647
  devDependencies: {
1648
1648
  "@biomejs/biome": "^2.5",
1649
- "@jsii/check-node": "^1.139.0",
1649
+ "@jsii/check-node": "^1.140.0",
1650
1650
  "@types/conventional-changelog-config-spec": "^2.1.5",
1651
1651
  "@types/ini": "^1.3.34",
1652
1652
  "@types/jest": "^30",
@@ -1661,15 +1661,15 @@ var require_package = __commonJS({
1661
1661
  esbuild: "^0.28.2",
1662
1662
  eslint: "^9",
1663
1663
  "eslint-config-prettier": "^10.1.8",
1664
- "eslint-import-resolver-typescript": "^2.7.1",
1664
+ "eslint-import-resolver-typescript": "^4.4.5",
1665
1665
  "eslint-plugin-import": "^2.32.0",
1666
1666
  "eslint-plugin-prettier": "^5.5.6",
1667
1667
  jest: "^30",
1668
1668
  "jest-junit": "^17",
1669
1669
  jsii: "6.0.x",
1670
- "jsii-diff": "^1.139.0",
1670
+ "jsii-diff": "^1.140.0",
1671
1671
  "jsii-docgen": "^10.5.0",
1672
- "jsii-pacmak": "^1.139.0",
1672
+ "jsii-pacmak": "^1.140.0",
1673
1673
  "jsii-rosetta": "6.0.x",
1674
1674
  json2jsii: "^0.5.19",
1675
1675
  "license-checker": "^25.0.1",
@@ -1694,6 +1694,7 @@ var require_package = __commonJS({
1694
1694
  "fast-json-patch": "^3.1.1",
1695
1695
  ini: "^2.0.0",
1696
1696
  "parse-conflict-json": "^4.0.0",
1697
+ "properties-file": "^5.0.6",
1697
1698
  semver: "^7.8.5",
1698
1699
  xmlbuilder2: "^4.0.3",
1699
1700
  yaml: "^2.2.2",
@@ -1710,6 +1711,7 @@ var require_package = __commonJS({
1710
1711
  "fast-json-patch",
1711
1712
  "ini",
1712
1713
  "parse-conflict-json",
1714
+ "properties-file",
1713
1715
  "semver",
1714
1716
  "xmlbuilder2",
1715
1717
  "yaml",
@@ -1743,7 +1745,7 @@ var require_package = __commonJS({
1743
1745
  fsevents: true,
1744
1746
  "unrs-resolver": true
1745
1747
  },
1746
- version: "0.103.4",
1748
+ version: "0.103.6",
1747
1749
  jest: {
1748
1750
  coverageProvider: "v8",
1749
1751
  coverageReporters: [
@@ -45,7 +45,7 @@ const util_1 = require("./util");
45
45
  * Use this for creating example code files or other resources.
46
46
  */
47
47
  class SampleFile extends component_1.Component {
48
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleFile", version: "0.103.4" };
48
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleFile", version: "0.103.6" };
49
49
  filePath;
50
50
  options;
51
51
  /**
@@ -96,7 +96,7 @@ exports.SampleFile = SampleFile;
96
96
  * Renders the given files into the directory if the directory does not exist. Use this to create sample code files
97
97
  */
98
98
  class SampleDir extends component_1.Component {
99
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleDir", version: "0.103.4" };
99
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleDir", version: "0.103.6" };
100
100
  dir;
101
101
  options;
102
102
  /**
@@ -10,7 +10,7 @@ const component_1 = require("./component");
10
10
  * `.projenrc.ts`) and is attached to a project by whoever consumes it.
11
11
  */
12
12
  class ScriptRunner extends component_1.FutureComponent {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.ScriptRunner", version: "0.103.4" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.ScriptRunner", version: "0.103.6" };
14
14
  configFor(entrypoint) {
15
15
  return {
16
16
  dependencies: [],
@@ -0,0 +1,4 @@
1
+ export * from "./sonarqube";
2
+ export * from "./javascript";
3
+ export * from "./typescript";
4
+ export * from "./rust";
@@ -0,0 +1,21 @@
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("./sonarqube"), exports);
18
+ __exportStar(require("./javascript"), exports);
19
+ __exportStar(require("./typescript"), exports);
20
+ __exportStar(require("./rust"), exports);
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc29uYXJxdWJlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBNEI7QUFDNUIsK0NBQTZCO0FBQzdCLCtDQUE2QjtBQUM3Qix5Q0FBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9zb25hcnF1YmVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2phdmFzY3JpcHRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzY3JpcHRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3J1c3RcIjtcbiJdfQ==
@@ -0,0 +1,35 @@
1
+ import type { IConstruct } from "constructs";
2
+ import { SonarqubeProperties } from "./sonarqube";
3
+ import type { SonarqubePropertiesOptions } from "./sonarqube";
4
+ /**
5
+ * Options for `SonarqubeJavascriptProperties`.
6
+ *
7
+ * Extends base options with JavaScript-specific defaults.
8
+ */
9
+ export interface SonarqubeJavascriptPropertiesOptions extends SonarqubePropertiesOptions {
10
+ }
11
+ /**
12
+ * A SonarQube configuration preset for JavaScript projects.
13
+ *
14
+ * Provides sensible defaults for JavaScript analysis:
15
+ * - `sonar.language` = `js`
16
+ * - `sonar.sources` = `src`
17
+ * - `sonar.tests` = `test`
18
+ * - `sonar.sourceEncoding` = `UTF-8`
19
+ * - `sonar.profile` = `Sonar Way`
20
+ * - `sonar.scm.provider` = `git`
21
+ * - Typical exclusions for `node_modules`, `coverage`, and test files
22
+ * - `sonar.javascript.lcov.reportPaths` = `coverage/lcov.info`
23
+ *
24
+ * All defaults can be overridden via options. Nested options (e.g. `coverage`,
25
+ * `javascript`) are deep-merged with the defaults, so overriding one nested
26
+ * field does not drop the other defaults in that subtree.
27
+ *
28
+ * @example
29
+ * new SonarqubeJavascriptProperties(project, {
30
+ * projectKey: 'my-org_my-js-project',
31
+ * });
32
+ */
33
+ export declare class SonarqubeJavascriptProperties extends SonarqubeProperties {
34
+ constructor(scope: IConstruct, options: SonarqubeJavascriptPropertiesOptions);
35
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SonarqubeJavascriptProperties = 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 JavaScript projects.
9
+ *
10
+ * Provides sensible defaults for JavaScript analysis:
11
+ * - `sonar.language` = `js`
12
+ * - `sonar.sources` = `src`
13
+ * - `sonar.tests` = `test`
14
+ * - `sonar.sourceEncoding` = `UTF-8`
15
+ * - `sonar.profile` = `Sonar Way`
16
+ * - `sonar.scm.provider` = `git`
17
+ * - Typical exclusions for `node_modules`, `coverage`, and test files
18
+ * - `sonar.javascript.lcov.reportPaths` = `coverage/lcov.info`
19
+ *
20
+ * All defaults can be overridden via options. Nested options (e.g. `coverage`,
21
+ * `javascript`) are deep-merged with the defaults, so overriding one nested
22
+ * field does not drop the other defaults in that subtree.
23
+ *
24
+ * @example
25
+ * new SonarqubeJavascriptProperties(project, {
26
+ * projectKey: 'my-org_my-js-project',
27
+ * });
28
+ */
29
+ class SonarqubeJavascriptProperties extends sonarqube_1.SonarqubeProperties {
30
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.sonarqube.SonarqubeJavascriptProperties", version: "0.103.6" };
31
+ constructor(scope, options) {
32
+ super(scope, (0, util_1.deepMerge)([
33
+ {
34
+ language: "js",
35
+ sources: "src",
36
+ tests: "test",
37
+ sourceEncoding: "UTF-8",
38
+ profile: "Sonar Way",
39
+ scm: { provider: "git" },
40
+ exclusions: [
41
+ "**/node_modules/**",
42
+ "**/coverage/**",
43
+ "**/test/**",
44
+ "**/__tests__/**",
45
+ "**/*.test.ts",
46
+ "**/*.spec.ts",
47
+ ],
48
+ coverage: { exclusions: ["**/test/**", "**/__tests__/**"] },
49
+ cpd: { exclusions: ["**/test/**/*.json", "**/__tests__/**/*.json"] },
50
+ javascript: { lcov: { reportPaths: ["coverage/lcov.info"] } },
51
+ },
52
+ options,
53
+ ]));
54
+ }
55
+ }
56
+ exports.SonarqubeJavascriptProperties = SonarqubeJavascriptProperties;
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zb25hcnF1YmUvamF2YXNjcmlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsMkNBQWtEO0FBRWxELGtDQUFvQztBQVNwQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBYSw2QkFBOEIsU0FBUSwrQkFBbUI7O0lBQ3BFLFlBQ0UsS0FBaUIsRUFDakIsT0FBNkM7UUFFN0MsS0FBSyxDQUNILEtBQUssRUFDTCxJQUFBLGdCQUFTLEVBQUM7WUFDUjtnQkFDRSxRQUFRLEVBQUUsSUFBSTtnQkFDZCxPQUFPLEVBQUUsS0FBSztnQkFDZCxLQUFLLEVBQUUsTUFBTTtnQkFDYixjQUFjLEVBQUUsT0FBTztnQkFDdkIsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7Z0JBQ3hCLFVBQVUsRUFBRTtvQkFDVixvQkFBb0I7b0JBQ3BCLGdCQUFnQjtvQkFDaEIsWUFBWTtvQkFDWixpQkFBaUI7b0JBQ2pCLGNBQWM7b0JBQ2QsY0FBYztpQkFDZjtnQkFDRCxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLENBQUMsRUFBRTtnQkFDM0QsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsbUJBQW1CLEVBQUUsd0JBQXdCLENBQUMsRUFBRTtnQkFDcEUsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFO2FBQzlEO1lBQ0QsT0FBTztTQUNSLENBQXlDLENBQzNDLENBQUM7SUFDSixDQUFDOztBQTlCSCxzRUErQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgU29uYXJxdWJlUHJvcGVydGllcyB9IGZyb20gXCIuL3NvbmFycXViZVwiO1xuaW1wb3J0IHR5cGUgeyBTb25hcnF1YmVQcm9wZXJ0aWVzT3B0aW9ucyB9IGZyb20gXCIuL3NvbmFycXViZVwiO1xuaW1wb3J0IHsgZGVlcE1lcmdlIH0gZnJvbSBcIi4uL3V0aWxcIjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBgU29uYXJxdWJlSmF2YXNjcmlwdFByb3BlcnRpZXNgLlxuICpcbiAqIEV4dGVuZHMgYmFzZSBvcHRpb25zIHdpdGggSmF2YVNjcmlwdC1zcGVjaWZpYyBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb25hcnF1YmVKYXZhc2NyaXB0UHJvcGVydGllc09wdGlvbnMgZXh0ZW5kcyBTb25hcnF1YmVQcm9wZXJ0aWVzT3B0aW9ucyB7fVxuXG4vKipcbiAqIEEgU29uYXJRdWJlIGNvbmZpZ3VyYXRpb24gcHJlc2V0IGZvciBKYXZhU2NyaXB0IHByb2plY3RzLlxuICpcbiAqIFByb3ZpZGVzIHNlbnNpYmxlIGRlZmF1bHRzIGZvciBKYXZhU2NyaXB0IGFuYWx5c2lzOlxuICogLSBgc29uYXIubGFuZ3VhZ2VgID0gYGpzYFxuICogLSBgc29uYXIuc291cmNlc2AgPSBgc3JjYFxuICogLSBgc29uYXIudGVzdHNgID0gYHRlc3RgXG4gKiAtIGBzb25hci5zb3VyY2VFbmNvZGluZ2AgPSBgVVRGLThgXG4gKiAtIGBzb25hci5wcm9maWxlYCA9IGBTb25hciBXYXlgXG4gKiAtIGBzb25hci5zY20ucHJvdmlkZXJgID0gYGdpdGBcbiAqIC0gVHlwaWNhbCBleGNsdXNpb25zIGZvciBgbm9kZV9tb2R1bGVzYCwgYGNvdmVyYWdlYCwgYW5kIHRlc3QgZmlsZXNcbiAqIC0gYHNvbmFyLmphdmFzY3JpcHQubGNvdi5yZXBvcnRQYXRoc2AgPSBgY292ZXJhZ2UvbGNvdi5pbmZvYFxuICpcbiAqIEFsbCBkZWZhdWx0cyBjYW4gYmUgb3ZlcnJpZGRlbiB2aWEgb3B0aW9ucy4gTmVzdGVkIG9wdGlvbnMgKGUuZy4gYGNvdmVyYWdlYCxcbiAqIGBqYXZhc2NyaXB0YCkgYXJlIGRlZXAtbWVyZ2VkIHdpdGggdGhlIGRlZmF1bHRzLCBzbyBvdmVycmlkaW5nIG9uZSBuZXN0ZWRcbiAqIGZpZWxkIGRvZXMgbm90IGRyb3AgdGhlIG90aGVyIGRlZmF1bHRzIGluIHRoYXQgc3VidHJlZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogbmV3IFNvbmFycXViZUphdmFzY3JpcHRQcm9wZXJ0aWVzKHByb2plY3QsIHtcbiAqICAgcHJvamVjdEtleTogJ215LW9yZ19teS1qcy1wcm9qZWN0JyxcbiAqIH0pO1xuICovXG5leHBvcnQgY2xhc3MgU29uYXJxdWJlSmF2YXNjcmlwdFByb3BlcnRpZXMgZXh0ZW5kcyBTb25hcnF1YmVQcm9wZXJ0aWVzIHtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IElDb25zdHJ1Y3QsXG4gICAgb3B0aW9uczogU29uYXJxdWJlSmF2YXNjcmlwdFByb3BlcnRpZXNPcHRpb25zLFxuICApIHtcbiAgICBzdXBlcihcbiAgICAgIHNjb3BlLFxuICAgICAgZGVlcE1lcmdlKFtcbiAgICAgICAge1xuICAgICAgICAgIGxhbmd1YWdlOiBcImpzXCIsXG4gICAgICAgICAgc291cmNlczogXCJzcmNcIixcbiAgICAgICAgICB0ZXN0czogXCJ0ZXN0XCIsXG4gICAgICAgICAgc291cmNlRW5jb2Rpbmc6IFwiVVRGLThcIixcbiAgICAgICAgICBwcm9maWxlOiBcIlNvbmFyIFdheVwiLFxuICAgICAgICAgIHNjbTogeyBwcm92aWRlcjogXCJnaXRcIiB9LFxuICAgICAgICAgIGV4Y2x1c2lvbnM6IFtcbiAgICAgICAgICAgIFwiKiovbm9kZV9tb2R1bGVzLyoqXCIsXG4gICAgICAgICAgICBcIioqL2NvdmVyYWdlLyoqXCIsXG4gICAgICAgICAgICBcIioqL3Rlc3QvKipcIixcbiAgICAgICAgICAgIFwiKiovX190ZXN0c19fLyoqXCIsXG4gICAgICAgICAgICBcIioqLyoudGVzdC50c1wiLFxuICAgICAgICAgICAgXCIqKi8qLnNwZWMudHNcIixcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNvdmVyYWdlOiB7IGV4Y2x1c2lvbnM6IFtcIioqL3Rlc3QvKipcIiwgXCIqKi9fX3Rlc3RzX18vKipcIl0gfSxcbiAgICAgICAgICBjcGQ6IHsgZXhjbHVzaW9uczogW1wiKiovdGVzdC8qKi8qLmpzb25cIiwgXCIqKi9fX3Rlc3RzX18vKiovKi5qc29uXCJdIH0sXG4gICAgICAgICAgamF2YXNjcmlwdDogeyBsY292OiB7IHJlcG9ydFBhdGhzOiBbXCJjb3ZlcmFnZS9sY292LmluZm9cIl0gfSB9LFxuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zLFxuICAgICAgXSkgYXMgU29uYXJxdWJlSmF2YXNjcmlwdFByb3BlcnRpZXNPcHRpb25zLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,37 @@
1
+ import type { IConstruct } from "constructs";
2
+ import { SonarqubeProperties } from "./sonarqube";
3
+ import type { SonarqubePropertiesOptions } from "./sonarqube";
4
+ /**
5
+ * Options for `SonarqubeRustProperties`.
6
+ *
7
+ * Extends base options with Rust-specific defaults.
8
+ */
9
+ export interface SonarqubeRustPropertiesOptions extends SonarqubePropertiesOptions {
10
+ }
11
+ /**
12
+ * A SonarQube configuration preset for Rust projects.
13
+ *
14
+ * Provides sensible defaults for Rust analysis:
15
+ * - `sonar.language` = `rust`
16
+ * - `sonar.sources` = `src`
17
+ * - `sonar.tests` = `tests`
18
+ * - `sonar.sourceEncoding` = `UTF-8`
19
+ * - `sonar.profile` = `Sonar Way`
20
+ * - `sonar.scm.provider` = `git`
21
+ * - Typical exclusions for `coverage`, test, and `target` dirs
22
+ * - `sonar.rust.lcov.reportPaths` = `target/lcov.info`
23
+ * - `sonar.rust.clippy.enabled` = `false`
24
+ * - `sonar.rust.clippyReport.reportPaths` = `target/clippy.json`
25
+ *
26
+ * All defaults can be overridden via options. Nested options (e.g. `coverage`,
27
+ * `rust`) are deep-merged with the defaults, so overriding one nested field
28
+ * does not drop the other defaults in that subtree.
29
+ *
30
+ * @example
31
+ * new SonarqubeRustProperties(project, {
32
+ * projectKey: 'my-org_my-rust-project',
33
+ * });
34
+ */
35
+ export declare class SonarqubeRustProperties extends SonarqubeProperties {
36
+ constructor(scope: IConstruct, options: SonarqubeRustPropertiesOptions);
37
+ }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SonarqubeRustProperties = 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 Rust projects.
9
+ *
10
+ * Provides sensible defaults for Rust analysis:
11
+ * - `sonar.language` = `rust`
12
+ * - `sonar.sources` = `src`
13
+ * - `sonar.tests` = `tests`
14
+ * - `sonar.sourceEncoding` = `UTF-8`
15
+ * - `sonar.profile` = `Sonar Way`
16
+ * - `sonar.scm.provider` = `git`
17
+ * - Typical exclusions for `coverage`, test, and `target` dirs
18
+ * - `sonar.rust.lcov.reportPaths` = `target/lcov.info`
19
+ * - `sonar.rust.clippy.enabled` = `false`
20
+ * - `sonar.rust.clippyReport.reportPaths` = `target/clippy.json`
21
+ *
22
+ * All defaults can be overridden via options. Nested options (e.g. `coverage`,
23
+ * `rust`) are deep-merged with the defaults, so overriding one nested field
24
+ * does not drop the other defaults in that subtree.
25
+ *
26
+ * @example
27
+ * new SonarqubeRustProperties(project, {
28
+ * projectKey: 'my-org_my-rust-project',
29
+ * });
30
+ */
31
+ class SonarqubeRustProperties extends sonarqube_1.SonarqubeProperties {
32
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.sonarqube.SonarqubeRustProperties", version: "0.103.6" };
33
+ constructor(scope, options) {
34
+ super(scope, (0, util_1.deepMerge)([
35
+ {
36
+ language: "rust",
37
+ sources: "src",
38
+ tests: "tests",
39
+ sourceEncoding: "UTF-8",
40
+ profile: "Sonar Way",
41
+ scm: { provider: "git" },
42
+ exclusions: ["**/coverage/**", "**/tests/**", "**/target/**"],
43
+ coverage: {
44
+ exclusions: ["**/tests/**", "**/target/**"],
45
+ },
46
+ cpd: { exclusions: ["**/tests/**/*.json"] },
47
+ rust: {
48
+ lcov: { reportPaths: ["target/lcov.info"] },
49
+ clippy: { enabled: false },
50
+ clippyReport: { reportPaths: ["target/clippy.json"] },
51
+ },
52
+ },
53
+ options,
54
+ ]));
55
+ }
56
+ }
57
+ exports.SonarqubeRustProperties = SonarqubeRustProperties;
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zb25hcnF1YmUvcnVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsMkNBQWtEO0FBRWxELGtDQUFvQztBQVNwQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFhLHVCQUF3QixTQUFRLCtCQUFtQjs7SUFDOUQsWUFBWSxLQUFpQixFQUFFLE9BQXVDO1FBQ3BFLEtBQUssQ0FDSCxLQUFLLEVBQ0wsSUFBQSxnQkFBUyxFQUFDO1lBQ1I7Z0JBQ0UsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLEtBQUssRUFBRSxPQUFPO2dCQUNkLGNBQWMsRUFBRSxPQUFPO2dCQUN2QixPQUFPLEVBQUUsV0FBVztnQkFDcEIsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtnQkFDeEIsVUFBVSxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQztnQkFDN0QsUUFBUSxFQUFFO29CQUNSLFVBQVUsRUFBRSxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUM7aUJBQzVDO2dCQUNELEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUU7Z0JBQzNDLElBQUksRUFBRTtvQkFDSixJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO29CQUMzQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO29CQUMxQixZQUFZLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO2lCQUN0RDthQUNGO1lBQ0QsT0FBTztTQUNSLENBQW1DLENBQ3JDLENBQUM7SUFDSixDQUFDOztBQTFCSCwwREEyQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgU29uYXJxdWJlUHJvcGVydGllcyB9IGZyb20gXCIuL3NvbmFycXViZVwiO1xuaW1wb3J0IHR5cGUgeyBTb25hcnF1YmVQcm9wZXJ0aWVzT3B0aW9ucyB9IGZyb20gXCIuL3NvbmFycXViZVwiO1xuaW1wb3J0IHsgZGVlcE1lcmdlIH0gZnJvbSBcIi4uL3V0aWxcIjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBgU29uYXJxdWJlUnVzdFByb3BlcnRpZXNgLlxuICpcbiAqIEV4dGVuZHMgYmFzZSBvcHRpb25zIHdpdGggUnVzdC1zcGVjaWZpYyBkZWZhdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb25hcnF1YmVSdXN0UHJvcGVydGllc09wdGlvbnMgZXh0ZW5kcyBTb25hcnF1YmVQcm9wZXJ0aWVzT3B0aW9ucyB7fVxuXG4vKipcbiAqIEEgU29uYXJRdWJlIGNvbmZpZ3VyYXRpb24gcHJlc2V0IGZvciBSdXN0IHByb2plY3RzLlxuICpcbiAqIFByb3ZpZGVzIHNlbnNpYmxlIGRlZmF1bHRzIGZvciBSdXN0IGFuYWx5c2lzOlxuICogLSBgc29uYXIubGFuZ3VhZ2VgID0gYHJ1c3RgXG4gKiAtIGBzb25hci5zb3VyY2VzYCA9IGBzcmNgXG4gKiAtIGBzb25hci50ZXN0c2AgPSBgdGVzdHNgXG4gKiAtIGBzb25hci5zb3VyY2VFbmNvZGluZ2AgPSBgVVRGLThgXG4gKiAtIGBzb25hci5wcm9maWxlYCA9IGBTb25hciBXYXlgXG4gKiAtIGBzb25hci5zY20ucHJvdmlkZXJgID0gYGdpdGBcbiAqIC0gVHlwaWNhbCBleGNsdXNpb25zIGZvciBgY292ZXJhZ2VgLCB0ZXN0LCBhbmQgYHRhcmdldGAgZGlyc1xuICogLSBgc29uYXIucnVzdC5sY292LnJlcG9ydFBhdGhzYCA9IGB0YXJnZXQvbGNvdi5pbmZvYFxuICogLSBgc29uYXIucnVzdC5jbGlwcHkuZW5hYmxlZGAgPSBgZmFsc2VgXG4gKiAtIGBzb25hci5ydXN0LmNsaXBweVJlcG9ydC5yZXBvcnRQYXRoc2AgPSBgdGFyZ2V0L2NsaXBweS5qc29uYFxuICpcbiAqIEFsbCBkZWZhdWx0cyBjYW4gYmUgb3ZlcnJpZGRlbiB2aWEgb3B0aW9ucy4gTmVzdGVkIG9wdGlvbnMgKGUuZy4gYGNvdmVyYWdlYCxcbiAqIGBydXN0YCkgYXJlIGRlZXAtbWVyZ2VkIHdpdGggdGhlIGRlZmF1bHRzLCBzbyBvdmVycmlkaW5nIG9uZSBuZXN0ZWQgZmllbGRcbiAqIGRvZXMgbm90IGRyb3AgdGhlIG90aGVyIGRlZmF1bHRzIGluIHRoYXQgc3VidHJlZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogbmV3IFNvbmFycXViZVJ1c3RQcm9wZXJ0aWVzKHByb2plY3QsIHtcbiAqICAgcHJvamVjdEtleTogJ215LW9yZ19teS1ydXN0LXByb2plY3QnLFxuICogfSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBTb25hcnF1YmVSdXN0UHJvcGVydGllcyBleHRlbmRzIFNvbmFycXViZVByb3BlcnRpZXMge1xuICBjb25zdHJ1Y3RvcihzY29wZTogSUNvbnN0cnVjdCwgb3B0aW9uczogU29uYXJxdWJlUnVzdFByb3BlcnRpZXNPcHRpb25zKSB7XG4gICAgc3VwZXIoXG4gICAgICBzY29wZSxcbiAgICAgIGRlZXBNZXJnZShbXG4gICAgICAgIHtcbiAgICAgICAgICBsYW5ndWFnZTogXCJydXN0XCIsXG4gICAgICAgICAgc291cmNlczogXCJzcmNcIixcbiAgICAgICAgICB0ZXN0czogXCJ0ZXN0c1wiLFxuICAgICAgICAgIHNvdXJjZUVuY29kaW5nOiBcIlVURi04XCIsXG4gICAgICAgICAgcHJvZmlsZTogXCJTb25hciBXYXlcIixcbiAgICAgICAgICBzY206IHsgcHJvdmlkZXI6IFwiZ2l0XCIgfSxcbiAgICAgICAgICBleGNsdXNpb25zOiBbXCIqKi9jb3ZlcmFnZS8qKlwiLCBcIioqL3Rlc3RzLyoqXCIsIFwiKiovdGFyZ2V0LyoqXCJdLFxuICAgICAgICAgIGNvdmVyYWdlOiB7XG4gICAgICAgICAgICBleGNsdXNpb25zOiBbXCIqKi90ZXN0cy8qKlwiLCBcIioqL3RhcmdldC8qKlwiXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNwZDogeyBleGNsdXNpb25zOiBbXCIqKi90ZXN0cy8qKi8qLmpzb25cIl0gfSxcbiAgICAgICAgICBydXN0OiB7XG4gICAgICAgICAgICBsY292OiB7IHJlcG9ydFBhdGhzOiBbXCJ0YXJnZXQvbGNvdi5pbmZvXCJdIH0sXG4gICAgICAgICAgICBjbGlwcHk6IHsgZW5hYmxlZDogZmFsc2UgfSxcbiAgICAgICAgICAgIGNsaXBweVJlcG9ydDogeyByZXBvcnRQYXRoczogW1widGFyZ2V0L2NsaXBweS5qc29uXCJdIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgIF0pIGFzIFNvbmFycXViZVJ1c3RQcm9wZXJ0aWVzT3B0aW9ucyxcbiAgICApO1xuICB9XG59XG4iXX0=