projen 0.100.3 → 0.100.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 (160) hide show
  1. package/.jsii +175 -114
  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 +4 -4
  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/circleci/circleci.js +1 -1
  33. package/lib/cli/cmds/new.js +28 -21
  34. package/lib/cli/macros.js +5 -4
  35. package/lib/cli/task-runtime.js +8 -13
  36. package/lib/cli/util.d.ts +4 -4
  37. package/lib/cli/util.js +19 -10
  38. package/lib/component.js +1 -1
  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/ini.js +1 -1
  72. package/lib/java/java-project.js +1 -1
  73. package/lib/java/junit.js +1 -1
  74. package/lib/java/maven-compile.js +1 -1
  75. package/lib/java/maven-packaging.js +1 -1
  76. package/lib/java/maven-sample.js +1 -1
  77. package/lib/java/pom.js +2 -2
  78. package/lib/java/projenrc.js +1 -1
  79. package/lib/javascript/biome/biome.js +1 -1
  80. package/lib/javascript/bundler.js +1 -1
  81. package/lib/javascript/eslint.d.ts +36 -0
  82. package/lib/javascript/eslint.js +40 -3
  83. package/lib/javascript/jest.js +4 -4
  84. package/lib/javascript/license-checker.js +1 -1
  85. package/lib/javascript/node-package.js +1 -1
  86. package/lib/javascript/node-project.js +1 -1
  87. package/lib/javascript/npm-config.js +1 -1
  88. package/lib/javascript/prettier.js +1 -1
  89. package/lib/javascript/projenrc.js +1 -1
  90. package/lib/javascript/typescript-config.js +2 -2
  91. package/lib/javascript/upgrade-dependencies.js +2 -2
  92. package/lib/javascript/yarnrc.js +1 -1
  93. package/lib/json-patch.js +1 -1
  94. package/lib/json.js +1 -1
  95. package/lib/license.js +1 -1
  96. package/lib/logger.js +1 -1
  97. package/lib/makefile.js +1 -1
  98. package/lib/object-file.js +1 -1
  99. package/lib/project-build.js +1 -1
  100. package/lib/project-tree.js +1 -1
  101. package/lib/project.js +1 -1
  102. package/lib/projects.js +1 -1
  103. package/lib/projenrc-json.js +1 -1
  104. package/lib/projenrc.js +1 -1
  105. package/lib/python/pip.js +1 -1
  106. package/lib/python/poetry.js +10 -7
  107. package/lib/python/projenrc.js +1 -1
  108. package/lib/python/pyproject-toml-file.js +1 -1
  109. package/lib/python/pytest-sample.js +1 -1
  110. package/lib/python/pytest.js +1 -1
  111. package/lib/python/python-project.js +1 -1
  112. package/lib/python/python-sample.js +1 -1
  113. package/lib/python/requirements-file.js +1 -1
  114. package/lib/python/setuppy.js +1 -1
  115. package/lib/python/setuptools.js +1 -1
  116. package/lib/python/uv.d.ts +3 -3
  117. package/lib/python/uv.js +6 -6
  118. package/lib/python/venv.js +4 -4
  119. package/lib/readme.js +1 -1
  120. package/lib/release/bump-version.js +16 -19
  121. package/lib/release/commit-tag-version.d.ts +2 -1
  122. package/lib/release/commit-tag-version.js +23 -17
  123. package/lib/release/publisher.js +1 -1
  124. package/lib/release/release-trigger.js +1 -1
  125. package/lib/release/release.js +1 -1
  126. package/lib/release/tag-version.js +3 -3
  127. package/lib/release/update-changelog.js +4 -2
  128. package/lib/renovatebot.js +1 -1
  129. package/lib/run-task.cjs +163 -21
  130. package/lib/sample-file.js +2 -2
  131. package/lib/source-code.js +1 -1
  132. package/lib/task-runner.js +16 -10
  133. package/lib/task.js +1 -1
  134. package/lib/tasks.js +1 -1
  135. package/lib/testing.js +1 -1
  136. package/lib/textfile.js +1 -1
  137. package/lib/toml.js +1 -1
  138. package/lib/typescript/projenrc-ts.js +1 -1
  139. package/lib/typescript/projenrc.d.ts +2 -0
  140. package/lib/typescript/projenrc.js +27 -6
  141. package/lib/typescript/typescript-typedoc.js +1 -1
  142. package/lib/typescript/typescript.d.ts +27 -3
  143. package/lib/typescript/typescript.js +87 -28
  144. package/lib/util/exec.d.ts +183 -0
  145. package/lib/util/exec.js +238 -0
  146. package/lib/util.d.ts +0 -22
  147. package/lib/util.js +1 -57
  148. package/lib/version.js +2 -2
  149. package/lib/vscode/devcontainer.js +1 -1
  150. package/lib/vscode/extensions.js +1 -1
  151. package/lib/vscode/launch-config.js +1 -1
  152. package/lib/vscode/settings.js +1 -1
  153. package/lib/vscode/vscode.js +1 -1
  154. package/lib/web/next.js +3 -3
  155. package/lib/web/postcss.js +1 -1
  156. package/lib/web/react.js +3 -3
  157. package/lib/web/tailwind.js +1 -1
  158. package/lib/xmlfile.js +1 -1
  159. package/lib/yaml.js +1 -1
  160. package/package.json +2 -2
package/lib/run-task.cjs CHANGED
@@ -889,10 +889,10 @@ var require_route = __commonJS({
889
889
  const adjacents = Object.keys(conversions[current]);
890
890
  for (let len = adjacents.length, i = 0; i < len; i++) {
891
891
  const adjacent = adjacents[i];
892
- const node = graph[adjacent];
893
- if (node.distance === -1) {
894
- node.distance = graph[current].distance + 1;
895
- node.parent = current;
892
+ const node2 = graph[adjacent];
893
+ if (node2.distance === -1) {
894
+ node2.distance = graph[current].distance + 1;
895
+ node2.parent = current;
896
896
  queue.unshift(adjacent);
897
897
  }
898
898
  }
@@ -922,8 +922,8 @@ var require_route = __commonJS({
922
922
  const models = Object.keys(graph);
923
923
  for (let len = models.length, i = 0; i < len; i++) {
924
924
  const toModel = models[i];
925
- const node = graph[toModel];
926
- if (node.parent === null) {
925
+ const node2 = graph[toModel];
926
+ if (node2.parent === null) {
927
927
  continue;
928
928
  }
929
929
  conversion[toModel] = wrapConversion(toModel, graph);
@@ -1733,7 +1733,7 @@ var require_package = __commonJS({
1733
1733
  publishConfig: {
1734
1734
  access: "public"
1735
1735
  },
1736
- version: "0.100.3",
1736
+ version: "0.100.5",
1737
1737
  jest: {
1738
1738
  coverageProvider: "v8",
1739
1739
  coverageReporters: [
@@ -1786,7 +1786,7 @@ var require_package = __commonJS({
1786
1786
  "^.+\\.[t]sx?$": [
1787
1787
  "ts-jest",
1788
1788
  {
1789
- tsconfig: "tsconfig.dev.json"
1789
+ tsconfig: "test/tsconfig.json"
1790
1790
  }
1791
1791
  ]
1792
1792
  }
@@ -2269,7 +2269,6 @@ __export(task_runtime_exports, {
2269
2269
  TaskRuntime: () => TaskRuntime
2270
2270
  });
2271
2271
  module.exports = __toCommonJS(task_runtime_exports);
2272
- var import_child_process = require("child_process");
2273
2272
  var import_fs = require("fs");
2274
2273
  var import_path = require("path");
2275
2274
  var path6 = __toESM(require("path"));
@@ -14325,6 +14324,156 @@ function warn(...text) {
14325
14324
  log(false, import_chalk.default.yellow, ...text);
14326
14325
  }
14327
14326
 
14327
+ // src/util/exec.ts
14328
+ var child_process = __toESM(require("child_process"));
14329
+ var MAX_BUFFER = 10 * 1024 * 1024;
14330
+ function spawnOpts(options) {
14331
+ return {
14332
+ maxBuffer: MAX_BUFFER,
14333
+ cwd: options.cwd,
14334
+ env: options.env ? { ...process.env, ...options.env } : void 0,
14335
+ // run the program directly, without going through a shell
14336
+ shell: false
14337
+ };
14338
+ }
14339
+ function run2(file, args, options) {
14340
+ debug(`${file} ${args.join(" ")} (cwd: ${options.cwd})`);
14341
+ child_process.execFileSync(file, args, {
14342
+ ...spawnOpts(options),
14343
+ // By default the child's stdout is redirected to STDERR (to keep the
14344
+ // parent's STDOUT clean) and its STDERR is piped so it surfaces in
14345
+ // exceptions. `inheritStdio` instead streams both straight to the parent.
14346
+ stdio: options.inheritStdio ? "inherit" : ["inherit", 2, "pipe"]
14347
+ });
14348
+ }
14349
+ function capture(file, args, options) {
14350
+ debug(`${file} ${args.join(" ")} (cwd: ${options.cwd})`);
14351
+ return child_process.execFileSync(file, args, {
14352
+ ...spawnOpts(options),
14353
+ stdio: ["inherit", "pipe", "pipe"]
14354
+ // "pipe" for STDERR means it appears in exceptions
14355
+ }).toString("utf-8").trim();
14356
+ }
14357
+ function tryCapture(file, args, options) {
14358
+ debug(`${file} ${args.join(" ")} (cwd: ${options.cwd})`);
14359
+ try {
14360
+ const value = child_process.execFileSync(file, args, {
14361
+ ...spawnOpts(options),
14362
+ stdio: ["inherit", "pipe", "pipe"]
14363
+ // "pipe" for STDERR means it appears in exceptions
14364
+ }).toString("utf-8").trim();
14365
+ return value || void 0;
14366
+ } catch {
14367
+ return void 0;
14368
+ }
14369
+ }
14370
+ function tool(file) {
14371
+ return {
14372
+ run: (args, options) => run2(file, args, options),
14373
+ capture: (args, options) => capture(file, args, options),
14374
+ tryCapture: (args, options) => tryCapture(file, args, options)
14375
+ };
14376
+ }
14377
+ var git = tool("git");
14378
+ var uv = tool("uv");
14379
+ var poetry = tool("poetry");
14380
+ var node = tool(process.execPath);
14381
+ function shimTool(file) {
14382
+ const build = (args, options) => {
14383
+ const cmd = $2`${file} ${args}`.cwd(options.cwd).stderr("piped").noThrow();
14384
+ return options.env ? cmd.env(options.env) : cmd;
14385
+ };
14386
+ const ensureOk = (args, result) => {
14387
+ if (result.code !== 0) {
14388
+ const error = new Error(
14389
+ `Command failed (exit code ${result.code}): ${file} ${args.join(" ")}`
14390
+ );
14391
+ error.status = result.code;
14392
+ error.stderr = Buffer.from(result.stderr);
14393
+ throw error;
14394
+ }
14395
+ };
14396
+ return {
14397
+ run: async (args, options) => {
14398
+ debug(`${file} ${args.join(" ")} (cwd: ${options.cwd})`);
14399
+ ensureOk(args, await build(args, options));
14400
+ },
14401
+ capture: async (args, options) => {
14402
+ debug(`${file} ${args.join(" ")} (cwd: ${options.cwd})`);
14403
+ const result = await build(args, options).stdout("piped");
14404
+ ensureOk(args, result);
14405
+ return result.stdout.trim();
14406
+ }
14407
+ };
14408
+ }
14409
+ var npm = shimTool("npm");
14410
+ var npx = shimTool("npx");
14411
+ var rawShell = {
14412
+ /**
14413
+ * Runs a command line through the system shell and returns a normalized
14414
+ * result. Never throws for a non-zero exit (that is reported via `status`);
14415
+ * a spawn failure is reported via `error`.
14416
+ *
14417
+ * The caller is responsible for supplying the full `env`.
14418
+ */
14419
+ exec(command, options) {
14420
+ debug(`${command} (cwd: ${options.cwd})`);
14421
+ const result = child_process.spawnSync(command, {
14422
+ cwd: options.cwd,
14423
+ shell: true,
14424
+ maxBuffer: MAX_BUFFER,
14425
+ env: options.env,
14426
+ // "pipe" for STDERR (when capturing) means it appears in exceptions.
14427
+ stdio: options.capture ? ["inherit", "pipe", "pipe"] : "inherit"
14428
+ });
14429
+ return {
14430
+ status: result.status,
14431
+ stdout: result.stdout ?? null,
14432
+ stderr: result.stderr ?? null,
14433
+ error: result.error
14434
+ };
14435
+ },
14436
+ /**
14437
+ * Runs a user-supplied shell command line and resolves its trimmed STDOUT.
14438
+ * Rejects if the command exits non-zero.
14439
+ */
14440
+ capture: async (command, options) => {
14441
+ const result = rawShell.exec(command, {
14442
+ cwd: options.cwd,
14443
+ env: { ...process.env, ...options.env },
14444
+ capture: true
14445
+ });
14446
+ if (result.error) {
14447
+ throw result.error;
14448
+ }
14449
+ if (result.status !== 0) {
14450
+ const error = new Error(
14451
+ `Command failed (exit code ${result.status}): ${command}`
14452
+ );
14453
+ error.status = result.status;
14454
+ error.stderr = result.stderr;
14455
+ throw error;
14456
+ }
14457
+ return (result.stdout?.toString("utf-8") ?? "").trim();
14458
+ },
14459
+ /**
14460
+ * Runs a user-supplied shell command line and resolves its trimmed STDOUT,
14461
+ * or `undefined` if the command failed or produced no output.
14462
+ */
14463
+ tryCapture: async (command, options) => {
14464
+ const result = rawShell.exec(command, {
14465
+ cwd: options.cwd,
14466
+ env: { ...process.env, ...options.env },
14467
+ capture: true
14468
+ });
14469
+ if (result.error || result.status !== 0) {
14470
+ return void 0;
14471
+ }
14472
+ const out = (result.stdout?.toString("utf-8") ?? "").trim();
14473
+ return out || void 0;
14474
+ }
14475
+ };
14476
+
14328
14477
  // src/cli/task-runtime.ts
14329
14478
  var parseConflictJSONModule = require_lib2();
14330
14479
  var parseConflictJSON = parseConflictJSONModule?.default ?? parseConflictJSONModule;
@@ -14683,23 +14832,16 @@ var RunTask = class {
14683
14832
  ...this.env,
14684
14833
  ...options.extraEnv
14685
14834
  };
14835
+ const capture2 = Array.isArray(options.spawnOptions?.stdio);
14686
14836
  if (process.platform === "win32") {
14687
- const capture = Array.isArray(options.spawnOptions?.stdio);
14688
- const result = await $2.raw`${options.command}`.cwd(cwd2).env(env).stdout(capture ? "piped" : "inherit").stderr(capture ? "piped" : "inherit").noThrow();
14837
+ const result = await $2.raw`${options.command}`.cwd(cwd2).env(env).stdout(capture2 ? "piped" : "inherit").stderr(capture2 ? "piped" : "inherit").noThrow();
14689
14838
  return {
14690
14839
  status: result.code,
14691
- stdout: capture ? Buffer.from(result.stdoutBytes) : null,
14692
- stderr: capture ? Buffer.from(result.stderrBytes) : null
14840
+ stdout: capture2 ? Buffer.from(result.stdoutBytes) : null,
14841
+ stderr: capture2 ? Buffer.from(result.stderrBytes) : null
14693
14842
  };
14694
14843
  }
14695
- return (0, import_child_process.spawnSync)(options.command, {
14696
- ...options,
14697
- cwd: cwd2,
14698
- shell: true,
14699
- stdio: "inherit",
14700
- env,
14701
- ...options.spawnOptions
14702
- });
14844
+ return rawShell.exec(options.command, { cwd: cwd2, env, capture: capture2 });
14703
14845
  }
14704
14846
  async shellEval(options) {
14705
14847
  return this.shell({
@@ -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.100.3" };
48
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleFile", version: "0.100.5" };
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.100.3" };
99
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleDir", version: "0.100.5" };
100
100
  dir;
101
101
  options;
102
102
  /**
@@ -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.100.3" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SourceCode", version: "0.100.5" };
13
13
  file;
14
14
  indentLevel = 0;
15
15
  indent;
@@ -34,12 +34,12 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.ProjenTaskRunner = void 0;
37
- const node_child_process_1 = require("node:child_process");
38
37
  const path = __importStar(require("node:path"));
39
38
  const _resolve_1 = require("./_resolve");
40
39
  const common_1 = require("./common");
41
40
  const component_1 = require("./component");
42
41
  const json_1 = require("./json");
42
+ const exec_1 = require("./util/exec");
43
43
  class ProjenTaskRunner extends component_1.Component {
44
44
  /**
45
45
  * The project-relative path of the tasks manifest file.
@@ -70,15 +70,21 @@ class ProjenTaskRunner extends component_1.Component {
70
70
  const moduleRoot = path.dirname(require.resolve("../package.json"));
71
71
  const cli = path.join(moduleRoot, "lib", "cli", "index.js");
72
72
  const argv = [cli, task.name, ...(args ?? []).map((a) => a.toString())];
73
- const result = (0, node_child_process_1.spawnSync)(process.execPath, argv, {
74
- cwd: this.project.outdir,
75
- stdio: "inherit",
76
- });
77
- if (result.error) {
78
- throw result.error;
73
+ try {
74
+ exec_1.node.run(argv, {
75
+ cwd: this.project.outdir,
76
+ inheritStdio: true,
77
+ });
79
78
  }
80
- if (result.status !== 0) {
81
- throw new Error(`Task "${task.name}" failed (exit code ${result.status ?? "unknown"}).`);
79
+ catch (e) {
80
+ // `node.run` (execFileSync) throws on a non-zero exit (with a numeric
81
+ // `.status`) or on a spawn failure. Translate a non-zero exit into a
82
+ // task-friendly error; re-throw spawn errors as-is. The child's stderr
83
+ // was already streamed live (inheritStdio), so it need not be re-surfaced.
84
+ if (typeof e?.status === "number") {
85
+ throw new Error(`Task "${task.name}" failed (exit code ${e.status}).`);
86
+ }
87
+ throw e;
82
88
  }
83
89
  }
84
90
  get tasksManifest() {
@@ -97,4 +103,4 @@ class ProjenTaskRunner extends component_1.Component {
97
103
  }
98
104
  }
99
105
  exports.ProjenTaskRunner = ProjenTaskRunner;
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdGFzay1ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkRBQStDO0FBQy9DLGdEQUFrQztBQUVsQyx5Q0FBcUM7QUFDckMscUNBQThEO0FBQzlELDJDQUF3QztBQUV4QyxpQ0FBa0M7QUFhbEMsTUFBYSxnQkFBaUIsU0FBUSxxQkFBUztJQUM3Qzs7T0FFRztJQUNJLE1BQU0sQ0FBVSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ3BELG1CQUFVLEVBQ1YsWUFBWSxDQUNiLENBQUM7SUFFRixZQUFZLEtBQWlCLEVBQUUsRUFBVztRQUN4QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLG9FQUFvRTtRQUNwRSxFQUFFO1FBQ0YsdUVBQXVFO1FBQ3ZFLHlFQUF5RTtRQUN6RSw0RUFBNEU7UUFDNUUseUVBQXlFO1FBQ3pFLElBQUksZUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsYUFBYSxFQUFFO1lBQ3pELFNBQVMsRUFBRSxJQUFJO1lBQ2YsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBUTtTQUN2QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTyxDQUFDLElBQVUsRUFBRSxJQUE2QjtRQUN0RCx3RUFBd0U7UUFDeEUsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSxxRUFBcUU7UUFDckUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUNwRSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEUsTUFBTSxNQUFNLEdBQUcsSUFBQSw4QkFBUyxFQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFO1lBQy9DLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDeEIsS0FBSyxFQUFFLFNBQVM7U0FDakIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FDYixTQUFTLElBQUksQ0FBQyxJQUFJLHVCQUF1QixNQUFNLENBQUMsTUFBTSxJQUFJLFNBQVMsSUFBSSxDQUN4RSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxJQUFjLGFBQWE7UUFDekIsTUFBTSxRQUFRLEdBQWM7WUFDMUIsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBQSxrQkFBTyxFQUFDLEdBQUcsRUFBRSxPQUFPLENBQUM7U0FDakQsQ0FBQztRQUVGLHdFQUF3RTtRQUN4RSw0RUFBNEU7UUFDNUUsMEVBQTBFO1FBQzFFLHFCQUFxQjtRQUNyQixNQUFNLFFBQVEsR0FDWixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFMUQsT0FBTztZQUNMLGVBQWUsRUFBRSwrQkFBc0I7WUFDdkMsR0FBRyxRQUFRO1NBQ1osQ0FBQztJQUNKLENBQUM7O0FBcEVILDRDQXFFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduU3luYyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwiLi9fcmVzb2x2ZVwiO1xuaW1wb3J0IHsgUFJPSkVOX0RJUiwgVEFTS1NfTUFOSUZFU1RfVkVSU0lPTiB9IGZyb20gXCIuL2NvbW1vblwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IElSZXNvbHZlciB9IGZyb20gXCIuL2ZpbGVcIjtcbmltcG9ydCB7IEpzb25GaWxlIH0gZnJvbSBcIi4vanNvblwiO1xuaW1wb3J0IHR5cGUgeyBUYXNrIH0gZnJvbSBcIi4vdGFza1wiO1xuaW1wb3J0IHR5cGUgeyBUYXNrc01hbmlmZXN0IH0gZnJvbSBcIi4vdGFzay1tb2RlbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElUYXNrUnVubmVyIHtcbiAgLyoqXG4gICAqIFJ1bnMgYSB0YXNrLlxuICAgKiBAcGFyYW0gdGFzayBUaGUgdGFzayB0byBydW4uXG4gICAqIEBwYXJhbSBhcmdzIExpc3Qgb2YgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgdGFzaywgaWYgc3VwcG9ydGVkLlxuICAgKi9cbiAgcnVuVGFzayh0YXNrOiBUYXNrLCBhcmdzPzogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPik6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9qZW5UYXNrUnVubmVyIGV4dGVuZHMgQ29tcG9uZW50IGltcGxlbWVudHMgSVRhc2tSdW5uZXIge1xuICAvKipcbiAgICogVGhlIHByb2plY3QtcmVsYXRpdmUgcGF0aCBvZiB0aGUgdGFza3MgbWFuaWZlc3QgZmlsZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFOSUZFU1RfRklMRSA9IHBhdGgucG9zaXguam9pbihcbiAgICBQUk9KRU5fRElSLFxuICAgIFwidGFza3MuanNvblwiLFxuICApO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBJQ29uc3RydWN0LCBpZD86IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBUaGUgcnVubmVyIG93bnMgdGhlIHByb2plbiB0YXNrcyBtYW5pZmVzdCAoYC5wcm9qZW4vdGFza3MuanNvbmApLlxuICAgIC8vXG4gICAgLy8gVGhlIGZpbGUgaXMgY3JlYXRlZCBoZXJlLCBpbiB0aGUgY29uc3RydWN0b3IsIHdpdGggKmxhenkqIGNvbnRlbnQgc29cbiAgICAvLyB0aGF0IHRhc2tzIGFkZGVkIHRvIHRoZSBwcm9qZWN0IGxhdGVyIGFyZSBzdGlsbCBpbmNsdWRlZC4gSXQgY2Fubm90IGJlXG4gICAgLy8gY3JlYXRlZCBpbiBgc3ludGhlc2l6ZSgpYCBiZWNhdXNlIGNvbXBvbmVudHMgY3JlYXRlZCBkdXJpbmcgdGhlIHN5bnRoZXNpc1xuICAgIC8vIGxvb3AgYXJlIG5vdCB0aGVtc2VsdmVzIHN5bnRoZXNpemVkICh0aGUgZmlsZSB3b3VsZCBuZXZlciBiZSB3cml0dGVuKS5cbiAgICBuZXcgSnNvbkZpbGUodGhpcy5wcm9qZWN0LCBQcm9qZW5UYXNrUnVubmVyLk1BTklGRVNUX0ZJTEUsIHtcbiAgICAgIG9taXRFbXB0eTogdHJ1ZSxcbiAgICAgIG9iajogKCgpID0+IHRoaXMudGFza3NNYW5pZmVzdCkgYXMgYW55LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSB0YXNrIGJ5IHNoZWxsaW5nIG91dCB0byB0aGUgcHJvamVuIENMSS4gVGhlIENMSSBvd25zIHRoZSB0YXNrXG4gICAqIHJ1bnRpbWUsIHdoaWNoIGtlZXBzIGBzcmMvYCBkZWNvdXBsZWQgZnJvbSBgc3JjL2NsaS9gLlxuICAgKi9cbiAgcHVibGljIHJ1blRhc2sodGFzazogVGFzaywgYXJncz86IEFycmF5PHN0cmluZyB8IG51bWJlcj4pOiB2b2lkIHtcbiAgICAvLyBSZXNvbHZlIHRoZSBjb21waWxlZCBDTEkgZW50cnlwb2ludCByZWxhdGl2ZSB0byB0aGUgcGFja2FnZSByb290ICh0aGVcbiAgICAvLyBzYW1lIGFwcHJvYWNoIHVzZWQgYnkgVGFza1J1bnRpbWUgZm9yIGJ1aWx0aW4gdGFza3MpLiBUaGlzIHdvcmtzIGJvdGhcbiAgICAvLyBmcm9tIHRoZSBjb21waWxlZCBgbGliL2Agb3V0cHV0IGFuZCB3aGVuIHJ1bm5pbmcgZnJvbSBgc3JjL2AgdW5kZXJcbiAgICAvLyB0cy1qZXN0LCB3aGVyZSBhIG1vZHVsZS1yZWxhdGl2ZSBgLi9jbGkvaW5kZXguanNgIHdvdWxkIG5vdCBleGlzdC5cbiAgICBjb25zdCBtb2R1bGVSb290ID0gcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcIi4uL3BhY2thZ2UuanNvblwiKSk7XG4gICAgY29uc3QgY2xpID0gcGF0aC5qb2luKG1vZHVsZVJvb3QsIFwibGliXCIsIFwiY2xpXCIsIFwiaW5kZXguanNcIik7XG4gICAgY29uc3QgYXJndiA9IFtjbGksIHRhc2submFtZSwgLi4uKGFyZ3MgPz8gW10pLm1hcCgoYSkgPT4gYS50b1N0cmluZygpKV07XG4gICAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKHByb2Nlc3MuZXhlY1BhdGgsIGFyZ3YsIHtcbiAgICAgIGN3ZDogdGhpcy5wcm9qZWN0Lm91dGRpcixcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICB9KTtcblxuICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRocm93IHJlc3VsdC5lcnJvcjtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGFzayBcIiR7dGFzay5uYW1lfVwiIGZhaWxlZCAoZXhpdCBjb2RlICR7cmVzdWx0LnN0YXR1cyA/PyBcInVua25vd25cIn0pLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdGFza3NNYW5pZmVzdCgpOiBUYXNrc01hbmlmZXN0IHtcbiAgICBjb25zdCByZXNvbHZlcjogSVJlc29sdmVyID0ge1xuICAgICAgcmVzb2x2ZTogKG9iaiwgb3B0aW9ucykgPT4gcmVzb2x2ZShvYmosIG9wdGlvbnMpLFxuICAgIH07XG5cbiAgICAvLyBUaGUgcnVubmVyIG93bnMgdGhlIG9uLWRpc2sgbWFuaWZlc3QsIHNvIGl0IHN0YW1wcyB0aGUgc2NoZW1hIHZlcnNpb25cbiAgICAvLyBvbnRvIHRoZSBsb2dpY2FsIHRhc2tzL2VudiBwcm9kdWNlZCBieSBgVGFza3NgLiBUaGUgdmVyc2lvbiBsZXRzIHRoZSB0YXNrXG4gICAgLy8gcnVudGltZSBkZXRlY3QgbWFuaWZlc3RzIHByb2R1Y2VkIGJ5IGEgbmV3ZXIgKHBvdGVudGlhbGx5IGluY29tcGF0aWJsZSlcbiAgICAvLyB2ZXJzaW9uIG9mIHByb2plbi5cbiAgICBjb25zdCByZXNvbHZlZDogVGFza3NNYW5pZmVzdCA9XG4gICAgICB0aGlzLnByb2plY3QudGFza3MucmVzb2x2ZVRhc2tzTWFuaWZlc3QocmVzb2x2ZXIpID8/IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1hbmlmZXN0VmVyc2lvbjogVEFTS1NfTUFOSUZFU1RfVkVSU0lPTixcbiAgICAgIC4uLnJlc29sdmVkLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdGFzay1ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQWtDO0FBRWxDLHlDQUFxQztBQUNyQyxxQ0FBOEQ7QUFDOUQsMkNBQXdDO0FBRXhDLGlDQUFrQztBQUdsQyxzQ0FBbUM7QUFXbkMsTUFBYSxnQkFBaUIsU0FBUSxxQkFBUztJQUM3Qzs7T0FFRztJQUNJLE1BQU0sQ0FBVSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ3BELG1CQUFVLEVBQ1YsWUFBWSxDQUNiLENBQUM7SUFFRixZQUFZLEtBQWlCLEVBQUUsRUFBVztRQUN4QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLG9FQUFvRTtRQUNwRSxFQUFFO1FBQ0YsdUVBQXVFO1FBQ3ZFLHlFQUF5RTtRQUN6RSw0RUFBNEU7UUFDNUUseUVBQXlFO1FBQ3pFLElBQUksZUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsYUFBYSxFQUFFO1lBQ3pELFNBQVMsRUFBRSxJQUFJO1lBQ2YsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBUTtTQUN2QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTyxDQUFDLElBQVUsRUFBRSxJQUE2QjtRQUN0RCx3RUFBd0U7UUFDeEUsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSxxRUFBcUU7UUFDckUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUNwRSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDO1lBQ0gsV0FBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2IsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtnQkFDeEIsWUFBWSxFQUFFLElBQUk7YUFDbkIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsc0VBQXNFO1lBQ3RFLHFFQUFxRTtZQUNyRSx1RUFBdUU7WUFDdkUsMkVBQTJFO1lBQzNFLElBQUksT0FBTyxDQUFDLEVBQUUsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksdUJBQXVCLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1lBQ3pFLENBQUM7WUFDRCxNQUFNLENBQUMsQ0FBQztRQUNWLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBYyxhQUFhO1FBQ3pCLE1BQU0sUUFBUSxHQUFjO1lBQzFCLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUEsa0JBQU8sRUFBQyxHQUFHLEVBQUUsT0FBTyxDQUFDO1NBQ2pELENBQUM7UUFFRix3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLDBFQUEwRTtRQUMxRSxxQkFBcUI7UUFDckIsTUFBTSxRQUFRLEdBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTFELE9BQU87WUFDTCxlQUFlLEVBQUUsK0JBQXNCO1lBQ3ZDLEdBQUcsUUFBUTtTQUNaLENBQUM7SUFDSixDQUFDOztBQXJFSCw0Q0FzRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSBcIi4vX3Jlc29sdmVcIjtcbmltcG9ydCB7IFBST0pFTl9ESVIsIFRBU0tTX01BTklGRVNUX1ZFUlNJT04gfSBmcm9tIFwiLi9jb21tb25cIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBJUmVzb2x2ZXIgfSBmcm9tIFwiLi9maWxlXCI7XG5pbXBvcnQgeyBKc29uRmlsZSB9IGZyb20gXCIuL2pzb25cIjtcbmltcG9ydCB0eXBlIHsgVGFzayB9IGZyb20gXCIuL3Rhc2tcIjtcbmltcG9ydCB0eXBlIHsgVGFza3NNYW5pZmVzdCB9IGZyb20gXCIuL3Rhc2stbW9kZWxcIjtcbmltcG9ydCB7IG5vZGUgfSBmcm9tIFwiLi91dGlsL2V4ZWNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJVGFza1J1bm5lciB7XG4gIC8qKlxuICAgKiBSdW5zIGEgdGFzay5cbiAgICogQHBhcmFtIHRhc2sgVGhlIHRhc2sgdG8gcnVuLlxuICAgKiBAcGFyYW0gYXJncyBMaXN0IG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHRhc2ssIGlmIHN1cHBvcnRlZC5cbiAgICovXG4gIHJ1blRhc2sodGFzazogVGFzaywgYXJncz86IEFycmF5PHN0cmluZyB8IG51bWJlcj4pOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgUHJvamVuVGFza1J1bm5lciBleHRlbmRzIENvbXBvbmVudCBpbXBsZW1lbnRzIElUYXNrUnVubmVyIHtcbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0LXJlbGF0aXZlIHBhdGggb2YgdGhlIHRhc2tzIG1hbmlmZXN0IGZpbGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BTklGRVNUX0ZJTEUgPSBwYXRoLnBvc2l4LmpvaW4oXG4gICAgUFJPSkVOX0RJUixcbiAgICBcInRhc2tzLmpzb25cIixcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogSUNvbnN0cnVjdCwgaWQ/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gVGhlIHJ1bm5lciBvd25zIHRoZSBwcm9qZW4gdGFza3MgbWFuaWZlc3QgKGAucHJvamVuL3Rhc2tzLmpzb25gKS5cbiAgICAvL1xuICAgIC8vIFRoZSBmaWxlIGlzIGNyZWF0ZWQgaGVyZSwgaW4gdGhlIGNvbnN0cnVjdG9yLCB3aXRoICpsYXp5KiBjb250ZW50IHNvXG4gICAgLy8gdGhhdCB0YXNrcyBhZGRlZCB0byB0aGUgcHJvamVjdCBsYXRlciBhcmUgc3RpbGwgaW5jbHVkZWQuIEl0IGNhbm5vdCBiZVxuICAgIC8vIGNyZWF0ZWQgaW4gYHN5bnRoZXNpemUoKWAgYmVjYXVzZSBjb21wb25lbnRzIGNyZWF0ZWQgZHVyaW5nIHRoZSBzeW50aGVzaXNcbiAgICAvLyBsb29wIGFyZSBub3QgdGhlbXNlbHZlcyBzeW50aGVzaXplZCAodGhlIGZpbGUgd291bGQgbmV2ZXIgYmUgd3JpdHRlbikuXG4gICAgbmV3IEpzb25GaWxlKHRoaXMucHJvamVjdCwgUHJvamVuVGFza1J1bm5lci5NQU5JRkVTVF9GSUxFLCB7XG4gICAgICBvbWl0RW1wdHk6IHRydWUsXG4gICAgICBvYmo6ICgoKSA9PiB0aGlzLnRhc2tzTWFuaWZlc3QpIGFzIGFueSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGEgdGFzayBieSBzaGVsbGluZyBvdXQgdG8gdGhlIHByb2plbiBDTEkuIFRoZSBDTEkgb3ducyB0aGUgdGFza1xuICAgKiBydW50aW1lLCB3aGljaCBrZWVwcyBgc3JjL2AgZGVjb3VwbGVkIGZyb20gYHNyYy9jbGkvYC5cbiAgICovXG4gIHB1YmxpYyBydW5UYXNrKHRhc2s6IFRhc2ssIGFyZ3M/OiBBcnJheTxzdHJpbmcgfCBudW1iZXI+KTogdm9pZCB7XG4gICAgLy8gUmVzb2x2ZSB0aGUgY29tcGlsZWQgQ0xJIGVudHJ5cG9pbnQgcmVsYXRpdmUgdG8gdGhlIHBhY2thZ2Ugcm9vdCAodGhlXG4gICAgLy8gc2FtZSBhcHByb2FjaCB1c2VkIGJ5IFRhc2tSdW50aW1lIGZvciBidWlsdGluIHRhc2tzKS4gVGhpcyB3b3JrcyBib3RoXG4gICAgLy8gZnJvbSB0aGUgY29tcGlsZWQgYGxpYi9gIG91dHB1dCBhbmQgd2hlbiBydW5uaW5nIGZyb20gYHNyYy9gIHVuZGVyXG4gICAgLy8gdHMtamVzdCwgd2hlcmUgYSBtb2R1bGUtcmVsYXRpdmUgYC4vY2xpL2luZGV4LmpzYCB3b3VsZCBub3QgZXhpc3QuXG4gICAgY29uc3QgbW9kdWxlUm9vdCA9IHBhdGguZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCIuLi9wYWNrYWdlLmpzb25cIikpO1xuICAgIGNvbnN0IGNsaSA9IHBhdGguam9pbihtb2R1bGVSb290LCBcImxpYlwiLCBcImNsaVwiLCBcImluZGV4LmpzXCIpO1xuICAgIGNvbnN0IGFyZ3YgPSBbY2xpLCB0YXNrLm5hbWUsIC4uLihhcmdzID8/IFtdKS5tYXAoKGEpID0+IGEudG9TdHJpbmcoKSldO1xuICAgIHRyeSB7XG4gICAgICBub2RlLnJ1bihhcmd2LCB7XG4gICAgICAgIGN3ZDogdGhpcy5wcm9qZWN0Lm91dGRpcixcbiAgICAgICAgaW5oZXJpdFN0ZGlvOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBgbm9kZS5ydW5gIChleGVjRmlsZVN5bmMpIHRocm93cyBvbiBhIG5vbi16ZXJvIGV4aXQgKHdpdGggYSBudW1lcmljXG4gICAgICAvLyBgLnN0YXR1c2ApIG9yIG9uIGEgc3Bhd24gZmFpbHVyZS4gVHJhbnNsYXRlIGEgbm9uLXplcm8gZXhpdCBpbnRvIGFcbiAgICAgIC8vIHRhc2stZnJpZW5kbHkgZXJyb3I7IHJlLXRocm93IHNwYXduIGVycm9ycyBhcy1pcy4gVGhlIGNoaWxkJ3Mgc3RkZXJyXG4gICAgICAvLyB3YXMgYWxyZWFkeSBzdHJlYW1lZCBsaXZlIChpbmhlcml0U3RkaW8pLCBzbyBpdCBuZWVkIG5vdCBiZSByZS1zdXJmYWNlZC5cbiAgICAgIGlmICh0eXBlb2YgZT8uc3RhdHVzID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGFzayBcIiR7dGFzay5uYW1lfVwiIGZhaWxlZCAoZXhpdCBjb2RlICR7ZS5zdGF0dXN9KS5gKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0YXNrc01hbmlmZXN0KCk6IFRhc2tzTWFuaWZlc3Qge1xuICAgIGNvbnN0IHJlc29sdmVyOiBJUmVzb2x2ZXIgPSB7XG4gICAgICByZXNvbHZlOiAob2JqLCBvcHRpb25zKSA9PiByZXNvbHZlKG9iaiwgb3B0aW9ucyksXG4gICAgfTtcblxuICAgIC8vIFRoZSBydW5uZXIgb3ducyB0aGUgb24tZGlzayBtYW5pZmVzdCwgc28gaXQgc3RhbXBzIHRoZSBzY2hlbWEgdmVyc2lvblxuICAgIC8vIG9udG8gdGhlIGxvZ2ljYWwgdGFza3MvZW52IHByb2R1Y2VkIGJ5IGBUYXNrc2AuIFRoZSB2ZXJzaW9uIGxldHMgdGhlIHRhc2tcbiAgICAvLyBydW50aW1lIGRldGVjdCBtYW5pZmVzdHMgcHJvZHVjZWQgYnkgYSBuZXdlciAocG90ZW50aWFsbHkgaW5jb21wYXRpYmxlKVxuICAgIC8vIHZlcnNpb24gb2YgcHJvamVuLlxuICAgIGNvbnN0IHJlc29sdmVkOiBUYXNrc01hbmlmZXN0ID1cbiAgICAgIHRoaXMucHJvamVjdC50YXNrcy5yZXNvbHZlVGFza3NNYW5pZmVzdChyZXNvbHZlcikgPz8ge307XG5cbiAgICByZXR1cm4ge1xuICAgICAgbWFuaWZlc3RWZXJzaW9uOiBUQVNLU19NQU5JRkVTVF9WRVJTSU9OLFxuICAgICAgLi4ucmVzb2x2ZWQsXG4gICAgfTtcbiAgfVxufVxuIl19
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.100.3" };
11
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Task", version: "0.100.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.100.3" };
51
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Tasks", version: "0.100.5" };
52
52
  _tasks;
53
53
  _env;
54
54
  _runner;
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.100.3" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Testing", version: "0.100.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.100.3" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.TextFile", version: "0.100.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.100.3" };
44
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.TomlFile", version: "0.100.5" };
45
45
  constructor(scope, filePath, options) {
46
46
  super(scope, filePath, options);
47
47
  }
@@ -17,7 +17,7 @@ const DEFAULT_FILENAME = ".projenrc.ts";
17
17
  * Requires that `npx` is available.
18
18
  */
19
19
  class ProjenrcTs extends projenrc_1.ProjenrcFile {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.ProjenrcTs", version: "0.100.3" };
20
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.ProjenrcTs", version: "0.100.5" };
21
21
  /**
22
22
  * TypeScript configuration file used to compile projen source files
23
23
  */
@@ -1,3 +1,4 @@
1
+ import { TypescriptConfig } from "../javascript";
1
2
  import { ProjenrcFile } from "../projenrc";
2
3
  import type { TypeScriptProject } from "../typescript";
3
4
  export interface ProjenrcOptions {
@@ -25,6 +26,7 @@ export interface ProjenrcOptions {
25
26
  */
26
27
  export declare class Projenrc extends ProjenrcFile {
27
28
  readonly filePath: string;
29
+ readonly tsconfig: TypescriptConfig;
28
30
  private readonly _projenCodeDir;
29
31
  private readonly _tsProject;
30
32
  private readonly _swc;
@@ -4,6 +4,7 @@ exports.Projenrc = void 0;
4
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  const fs_1 = require("fs");
6
6
  const path_1 = require("path");
7
+ const javascript_1 = require("../javascript");
7
8
  const render_options_1 = require("../javascript/render-options");
8
9
  const projenrc_1 = require("../projenrc");
9
10
  const DEFAULT_FILENAME = ".projenrc.ts";
@@ -11,8 +12,9 @@ const DEFAULT_FILENAME = ".projenrc.ts";
11
12
  * Sets up a typescript project to use TypeScript for projenrc.
12
13
  */
13
14
  class Projenrc extends projenrc_1.ProjenrcFile {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.Projenrc", version: "0.100.3" };
15
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.Projenrc", version: "0.100.5" };
15
16
  filePath;
17
+ tsconfig;
16
18
  _projenCodeDir;
17
19
  _tsProject;
18
20
  _swc;
@@ -22,6 +24,21 @@ class Projenrc extends projenrc_1.ProjenrcFile {
22
24
  this.filePath = options.filename ?? DEFAULT_FILENAME;
23
25
  this._projenCodeDir = options.projenCodeDir ?? "projenrc";
24
26
  this._swc = options.swc ?? false;
27
+ // Give the projenrc source tree its own `tsconfig.json` so the eslint
28
+ // project service (and editors) resolve it as the nearest config for those
29
+ // files. This avoids listing the whole tree under `allowDefaultProject`,
30
+ // which only permits a small number of loose files (and rejects `**`
31
+ // globs). It extends the root config and is type-check only.
32
+ const baseTsconfig = project.tsconfig ?? project.tsconfigDev;
33
+ this.tsconfig = new javascript_1.TypescriptConfig(project, {
34
+ fileName: `${this._projenCodeDir}/tsconfig.json`,
35
+ include: ["**/*.ts"],
36
+ extends: javascript_1.TypescriptConfigExtends.fromTypescriptConfigs([baseTsconfig]),
37
+ compilerOptions: {
38
+ noEmit: true,
39
+ rootDir: path_1.posix.relative(this._projenCodeDir, ".") || ".",
40
+ },
41
+ });
25
42
  this.addDefaultTask();
26
43
  this.generateProjenrc();
27
44
  }
@@ -35,16 +52,20 @@ class Projenrc extends projenrc_1.ProjenrcFile {
35
52
  // running "node .projenrc.js").
36
53
  this._tsProject.addDevDeps(...deps);
37
54
  const tsNode = this._swc ? "ts-node --swc" : "ts-node";
38
- // we use "tsconfig.dev.json" here to allow projen source files to reside
39
- // anywhere in the project tree.
55
+ // ts-node compiles the entrypoint and its imports on demand using the dev
56
+ // tsconfig's compiler options, so projen source files may reside anywhere
57
+ // in the project tree regardless of the config's `include`.
40
58
  this._tsProject.defaultTask?.exec(`${tsNode} --project ${this._tsProject.tsconfigDev.fileName} ${this.filePath}`);
41
59
  }
42
60
  preSynthesize() {
43
61
  super.preSynthesize();
44
62
  this._tsProject.addPackageIgnore(`/${this.filePath}`);
45
63
  this._tsProject.addPackageIgnore(`/${this._projenCodeDir}`);
46
- this._tsProject.tsconfigDev.addInclude(this.filePath);
47
- this._tsProject.tsconfigDev.addInclude(`${this._projenCodeDir}/**/*.ts`);
64
+ // The projenrc entrypoint lives at the repository root and is not covered
65
+ // by any `tsconfig.json`. Register only this single file with the eslint
66
+ // project service's default project (the projenrc source tree is covered
67
+ // by its own tsconfig). `allowDefaultProject` does not permit `**` globs.
68
+ this._tsProject.eslint?.allowDefaultProjectFiles(this.filePath);
48
69
  this._tsProject.eslint?.addLintPattern(this._projenCodeDir);
49
70
  this._tsProject.eslint?.addLintPattern(this.filePath);
50
71
  this._tsProject.eslint?.allowDevDeps(this.filePath);
@@ -97,4 +118,4 @@ class Projenrc extends projenrc_1.ProjenrcFile {
97
118
  }
98
119
  }
99
120
  exports.Projenrc = Projenrc;
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVucmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXNjcmlwdC9wcm9qZW5yYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkJBQTBEO0FBQzFELCtCQUF3QztBQUV4QyxpRUFBdUU7QUFDdkUsMENBQTJDO0FBMEIzQyxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQztBQUV4Qzs7R0FFRztBQUNILE1BQWEsUUFBUyxTQUFRLHVCQUFZOztJQUN4QixRQUFRLENBQVM7SUFDaEIsY0FBYyxDQUFTO0lBQ3ZCLFVBQVUsQ0FBb0I7SUFDOUIsSUFBSSxDQUFVO0lBRS9CLFlBQVksT0FBMEIsRUFBRSxVQUEyQixFQUFFO1FBQ25FLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDO1FBRTFCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxnQkFBZ0IsQ0FBQztRQUNyRCxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksVUFBVSxDQUFDO1FBQzFELElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7UUFFakMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxjQUFjO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFFRCxtRUFBbUU7UUFDbkUsbUVBQW1FO1FBQ25FLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBRXBDLE1BQU0s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LENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN0QiwwQ0FBMEMsTUFBTSxFQUFFLENBQ25ELENBQUM7SUFDSixDQUFDOztBQWhISCw0QkFpSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jLCB3cml0ZUZpbGVTeW5jLCBta2RpclN5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBJbnZlbnRvcnlQcm9qZWN0VHlwZSB9IGZyb20gXCIuLi9pbnZlbnRvcnlcIjtcbmltcG9ydCB7IHJlbmRlckphdmFTY3JpcHRPcHRpb25zIH0gZnJvbSBcIi4uL2phdmFzY3JpcHQvcmVuZGVyLW9wdGlvbnNcIjtcbmltcG9ydCB7IFByb2plbnJjRmlsZSB9IGZyb20gXCIuLi9wcm9qZW5yY1wiO1xuaW1wb3J0IHR5cGUgeyBUeXBlU2NyaXB0UHJvamVjdCB9IGZyb20gXCIuLi90eXBlc2NyaXB0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvamVucmNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9qZW5yYyBmaWxlLlxuICAgKiBAZGVmYXVsdCBcIi5wcm9qZW5yYy50c1wiXG4gICAqL1xuICByZWFkb25seSBmaWxlbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBkaXJlY3RvcnkgdHJlZSB0aGF0IG1heSBjb250YWluICoudHMgZmlsZXMgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZCBmcm9tXG4gICAqIHlvdXIgcHJvamVucmMgdHlwZXNjcmlwdCBmaWxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcInByb2plbnJjXCJcbiAgICovXG4gIHJlYWRvbmx5IHByb2plbkNvZGVEaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdXNlIGBTV0NgIGZvciB0cy1ub2RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc3djPzogYm9vbGVhbjtcbn1cblxuY29uc3QgREVGQVVMVF9GSUxFTkFNRSA9IFwiLnByb2plbnJjLnRzXCI7XG5cbi8qKlxuICogU2V0cyB1cCBhIHR5cGVzY3JpcHQgcHJvamVjdCB0byB1c2UgVHlwZVNjcmlwdCBmb3IgcHJvamVucmMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9qZW5yYyBleHRlbmRzIFByb2plbnJjRmlsZSB7XG4gIHB1YmxpYyByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wcm9qZW5Db2RlRGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RzUHJvamVjdDogVHlwZVNjcmlwdFByb2plY3Q7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N3YzogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBUeXBlU2NyaXB0UHJvamVjdCwgb3B0aW9uczogUHJvamVucmNPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcbiAgICB0aGlzLl90c1Byb2plY3QgPSBwcm9qZWN0O1xuXG4gICAgdGhpcy5maWxlUGF0aCA9IG9wdGlvbnMuZmlsZW5hbWUgPz8gREVGQVVMVF9GSUxFTkFNRTtcbiAgICB0aGlzLl9wcm9qZW5Db2RlRGlyID0gb3B0aW9ucy5wcm9qZW5Db2RlRGlyID8/IFwicHJvamVucmNcIjtcbiAgICB0aGlzLl9zd2MgPSBvcHRpb25zLnN3YyA/PyBmYWxzZTtcblxuICAgIHRoaXMuYWRkRGVmYXVsdFRhc2soKTtcblxuICAgIHRoaXMuZ2VuZXJhdGVQcm9qZW5yYygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREZWZhdWx0VGFzaygpIHtcbiAgICBjb25zdCBkZXBzID0gW1widHMtbm9kZVwiXTtcbiAgICBpZiAodGhpcy5fc3djKSB7XG4gICAgICBkZXBzLnB1c2goXCJAc3djL2NvcmVcIik7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBpcyB0aGUgdGFzayBwcm9qZW4gZXhlY3V0ZXMgd2hlbiBydW5uaW5nIGBwcm9qZW5gIHdpdGhvdXQgYVxuICAgIC8vIHNwZWNpZmljIHRhc2sgKGlmIHRoaXMgdGFzayBpcyBub3QgZGVmaW5lZCwgcHJvamVuIGZhbGxzIGJhY2sgdG9cbiAgICAvLyBydW5uaW5nIFwibm9kZSAucHJvamVucmMuanNcIikuXG4gICAgdGhpcy5fdHNQcm9qZWN0LmFkZERldkRlcHMoLi4uZGVwcyk7XG5cbiAgICBjb25zdCB0c05vZGUgPSB0aGlzLl9zd2MgPyBcInRzLW5vZGUgLS1zd2NcIiA6IFwidHMtbm9kZVwiO1xuXG4gICAgLy8gd2UgdXNlIFwidHNjb25maWcuZGV2Lmpzb25cIiBoZXJlIHRvIGFsbG93IHByb2plbiBzb3VyY2UgZmlsZXMgdG8gcmVzaWRlXG4gICAgLy8gYW55d2hlcmUgaW4gdGhlIHByb2plY3QgdHJlZS5cbiAgICB0aGlzLl90c1Byb2plY3QuZGVmYXVsdFRhc2s/LmV4ZWMoXG4gICAgICBgJHt0c05vZGV9IC0tcHJvamVjdCAke3RoaXMuX3RzUHJvamVjdC50c2NvbmZpZ0Rldi5maWxlTmFtZX0gJHt0aGlzLmZpbGVQYXRofWAsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBwcmVTeW50aGVzaXplKCk6IHZvaWQge1xuICAgIHN1cGVyLnByZVN5bnRoZXNpemUoKTtcblxuICAgIHRoaXMuX3RzUHJvamVjdC5hZGRQYWNrYWdlSWdub3JlKGAvJHt0aGlzLmZpbGVQYXRofWApO1xuICAgIHRoaXMuX3RzUHJvamVjdC5hZGRQYWNrYWdlSWdub3JlKGAvJHt0aGlzLl9wcm9qZW5Db2RlRGlyfWApO1xuXG4gICAgdGhpcy5fdHNQcm9qZWN0LnRzY29uZmlnRGV2LmFkZEluY2x1ZGUodGhpcy5maWxlUGF0aCk7XG4gICAgdGhpcy5fdHNQcm9qZWN0LnRzY29uZmlnRGV2LmFkZEluY2x1ZGUoYCR7dGhpcy5fcHJvamVuQ29kZURpcn0vKiovKi50c2ApO1xuXG4gICAgdGhpcy5fdHNQcm9qZWN0LmVzbGludD8uYWRkTGludFBhdHRlcm4odGhpcy5fcHJvamVuQ29kZURpcik7XG4gICAgdGhpcy5fdHNQcm9qZWN0LmVzbGludD8uYWRkTGludFBhdHRlcm4odGhpcy5maWxlUGF0aCk7XG4gICAgdGhpcy5fdHNQcm9qZWN0LmVzbGludD8uYWxsb3dEZXZEZXBzKHRoaXMuZmlsZVBhdGgpO1xuICAgIHRoaXMuX3RzUHJvamVjdC5lc2xpbnQ/LmFsbG93RGV2RGVwcyhgJHt0aGlzLl9wcm9qZW5Db2RlRGlyfS8qKi8qLnRzYCk7XG4gICAgdGhpcy5fdHNQcm9qZWN0LmVzbGludD8uYWRkSWdub3JlUGF0dGVybihgISR7dGhpcy5maWxlUGF0aH1gKTtcbiAgICB0aGlzLl90c1Byb2plY3QuZXNsaW50Py5hZGRJZ25vcmVQYXR0ZXJuKGAhJHt0aGlzLl9wcm9qZW5Db2RlRGlyfS8qKi8qLnRzYCk7XG5cbiAgICB0aGlzLl90c1Byb2plY3QuZXNsaW50Py5hZGRPdmVycmlkZSh7XG4gICAgICBmaWxlczogW3RoaXMuZmlsZVBhdGhdLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXCI6IFwib2ZmXCIsXG4gICAgICAgIFwiaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXCI6IFwib2ZmXCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdHNQcm9qZWN0LmJpb21lPy5hZGRGaWxlUGF0dGVybih0aGlzLmZpbGVQYXRoKTtcbiAgICB0aGlzLl90c1Byb2plY3QuYmlvbWU/LmFkZEZpbGVQYXR0ZXJuKGAke3RoaXMuX3Byb2plbkNvZGVEaXJ9LyoqYCk7XG5cbiAgICB0aGlzLl90c1Byb2plY3QuamVzdD8uZGlzY292ZXJUZXN0TWF0Y2hQYXR0ZXJuc0ZvckRpcnMoXG4gICAgICBbdGhpcy5fcHJvamVuQ29kZURpcl0sXG4gICAgICB7XG4gICAgICAgIGZpbGVFeHRlbnNpb25QYXR0ZXJuOiB0aGlzLl90c1Byb2plY3QudHNjb25maWc/LmNvbXBpbGVyT3B0aW9ucz8uYWxsb3dKc1xuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiBcInRzPyh4KVwiLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVByb2plbnJjKCkge1xuICAgIGNvbnN0IHJjZmlsZSA9IHJlc29sdmUodGhpcy5wcm9qZWN0Lm91dGRpciwgdGhpcy5maWxlUGF0aCk7XG4gICAgaWYgKGV4aXN0c1N5bmMocmNmaWxlKSkge1xuICAgICAgcmV0dXJuOyAvLyBhbHJlYWR5IGV4aXN0c1xuICAgIH1cblxuICAgIGNvbnN0IGJvb3RzdHJhcCA9IHRoaXMucHJvamVjdC5pbml0UHJvamVjdDtcbiAgICBpZiAoIWJvb3RzdHJhcCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRzID0gYm9vdHN0cmFwLmZxbi5zcGxpdChcIi5cIik7XG4gICAgY29uc3QgbW9kdWxlTmFtZSA9IHBhcnRzWzBdO1xuICAgIGNvbnN0IGltcG9ydE5hbWUgPSBwYXJ0c1sxXTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBwYXJ0cy5zbGljZSgxKS5qb2luKFwiLlwiKTtcblxuICAgIGNvbnN0IHsgcmVuZGVyZWRPcHRpb25zLCBpbXBvcnRzIH0gPSByZW5kZXJKYXZhU2NyaXB0T3B0aW9ucyh7XG4gICAgICBhcmdzOiBib290c3RyYXAuYXJncyxcbiAgICAgIHR5cGU6IGJvb3RzdHJhcC50eXBlIGFzIEludmVudG9yeVByb2plY3RUeXBlLFxuICAgICAgY29tbWVudHM6IGJvb3RzdHJhcC5jb21tZW50cyxcbiAgICB9KTtcblxuICAgIGltcG9ydHMuYWRkKG1vZHVsZU5hbWUsIGltcG9ydE5hbWUpO1xuXG4gICAgY29uc3QgbGluZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGxpbmVzLnB1c2goLi4uaW1wb3J0cy5hc0VzbUltcG9ydHMoKSk7XG4gICAgbGluZXMucHVzaCgpO1xuICAgIGxpbmVzLnB1c2goYGNvbnN0IHByb2plY3QgPSBuZXcgJHtjbGFzc05hbWV9KCR7cmVuZGVyZWRPcHRpb25zfSk7YCk7XG4gICAgbGluZXMucHVzaCgpO1xuICAgIGxpbmVzLnB1c2goXCJwcm9qZWN0LnN5bnRoKCk7XCIpO1xuXG4gICAgbWtkaXJTeW5jKGRpcm5hbWUocmNmaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgd3JpdGVGaWxlU3luYyhyY2ZpbGUsIGxpbmVzLmpvaW4oXCJcXG5cIikpO1xuICAgIHRoaXMucHJvamVjdC5sb2dnZXIuaW5mbyhcbiAgICAgIGBQcm9qZWN0IGRlZmluaXRpb24gZmlsZSB3YXMgY3JlYXRlZCBhdCAke3JjZmlsZX1gLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVucmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXNjcmlwdC9wcm9qZW5yYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsMkJBQTBEO0FBQzFELCtCQUErQztBQUUvQyw4Q0FBMEU7QUFDMUUsaUVBQXVFO0FBQ3ZFLDBDQUEyQztBQTBCM0MsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjLENBQUM7QUFFeEM7O0dBRUc7QUFDSCxNQUFhLFFBQVMsU0FBUSx1QkFBWTs7SUFDeEIsUUFBUSxDQUFTO0lBQ2pCLFFBQVEsQ0FBbUI7SUFFMUIsY0FBYyxDQUFTO0lBQ3ZCLFVBQVUsQ0FBb0I7SUFDOUIsSUFBSSxDQUFVO0lBRS9CLFlBQVksT0FBMEIsRUFBRSxVQUEyQixFQUFFO1FBQ25FLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDO1FBRTFCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxnQkFBZ0IsQ0FBQztRQUNyRCxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksVUFBVSxDQUFDO1FBQzFELElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7UUFFakMsc0VBQXNFO1FBQ3RFLDJFQUEyRTtRQUMzRSx5RUFBeUU7UUFDekUscUVBQXFFO1FBQ3JFLDZEQUE2RDtRQUM3RCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDN0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLDZCQUFnQixDQUFDLE9BQU8sRUFBRTtZQUM1QyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxnQkFBZ0I7WUFDaEQsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxvQ0FBdUIsQ0FBQyxxQkFBcUIs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LFFBQVE7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFcEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQUNsQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDdEMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsU0FBUyxJQUFJLGVBQWUsSUFBSSxDQUFDLENBQUM7UUFDcEUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRS9CLElBQUEsY0FBUyxFQUFDLElBQUEsY0FBTyxFQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBQSxrQkFBYSxFQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN0QiwwQ0FBMEMsTUFBTSxFQUFFLENBQ25ELENBQUM7SUFDSixDQUFDOztBQXRJSCw0QkF1SUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jLCB3cml0ZUZpbGVTeW5jLCBta2RpclN5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIHBvc2l4LCByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB0eXBlIHsgSW52ZW50b3J5UHJvamVjdFR5cGUgfSBmcm9tIFwiLi4vaW52ZW50b3J5XCI7XG5pbXBvcnQgeyBUeXBlc2NyaXB0Q29uZmlnLCBUeXBlc2NyaXB0Q29uZmlnRXh0ZW5kcyB9IGZyb20gXCIuLi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyByZW5kZXJKYXZhU2NyaXB0T3B0aW9ucyB9IGZyb20gXCIuLi9qYXZhc2NyaXB0L3JlbmRlci1vcHRpb25zXCI7XG5pbXBvcnQgeyBQcm9qZW5yY0ZpbGUgfSBmcm9tIFwiLi4vcHJvamVucmNcIjtcbmltcG9ydCB0eXBlIHsgVHlwZVNjcmlwdFByb2plY3QgfSBmcm9tIFwiLi4vdHlwZXNjcmlwdFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb2plbnJjT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvamVucmMgZmlsZS5cbiAgICogQGRlZmF1bHQgXCIucHJvamVucmMudHNcIlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZW5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZGlyZWN0b3J5IHRyZWUgdGhhdCBtYXkgY29udGFpbiAqLnRzIGZpbGVzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZnJvbVxuICAgKiB5b3VyIHByb2plbnJjIHR5cGVzY3JpcHQgZmlsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJwcm9qZW5yY1wiXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5Db2RlRGlyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVzZSBgU1dDYCBmb3IgdHMtbm9kZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHN3Yz86IGJvb2xlYW47XG59XG5cbmNvbnN0IERFRkFVTFRfRklMRU5BTUUgPSBcIi5wcm9qZW5yYy50c1wiO1xuXG4vKipcbiAqIFNldHMgdXAgYSB0eXBlc2NyaXB0IHByb2plY3QgdG8gdXNlIFR5cGVTY3JpcHQgZm9yIHByb2plbnJjLlxuICovXG5leHBvcnQgY2xhc3MgUHJvamVucmMgZXh0ZW5kcyBQcm9qZW5yY0ZpbGUge1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZVBhdGg6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHRzY29uZmlnOiBUeXBlc2NyaXB0Q29uZmlnO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Byb2plbkNvZGVEaXI6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdHNQcm9qZWN0OiBUeXBlU2NyaXB0UHJvamVjdDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3djOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFR5cGVTY3JpcHRQcm9qZWN0LCBvcHRpb25zOiBQcm9qZW5yY09wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuICAgIHRoaXMuX3RzUHJvamVjdCA9IHByb2plY3Q7XG5cbiAgICB0aGlzLmZpbGVQYXRoID0gb3B0aW9ucy5maWxlbmFtZSA/PyBERUZBVUxUX0ZJTEVOQU1FO1xuICAgIHRoaXMuX3Byb2plbkNvZGVEaXIgPSBvcHRpb25zLnByb2plbkNvZGVEaXIgPz8gXCJwcm9qZW5yY1wiO1xuICAgIHRoaXMuX3N3YyA9IG9wdGlvbnMuc3djID8/IGZhbHNlO1xuXG4gICAgLy8gR2l2ZSB0aGUgcHJvamVucmMgc291cmNlIHRyZWUgaXRzIG93biBgdHNjb25maWcuanNvbmAgc28gdGhlIGVzbGludFxuICAgIC8vIHByb2plY3Qgc2VydmljZSAoYW5kIGVkaXRvcnMpIHJlc29sdmUgaXQgYXMgdGhlIG5lYXJlc3QgY29uZmlnIGZvciB0aG9zZVxuICAgIC8vIGZpbGVzLiBUaGlzIGF2b2lkcyBsaXN0aW5nIHRoZSB3aG9sZSB0cmVlIHVuZGVyIGBhbGxvd0RlZmF1bHRQcm9qZWN0YCxcbiAgICAvLyB3aGljaCBvbmx5IHBlcm1pdHMgYSBzbWFsbCBudW1iZXIgb2YgbG9vc2UgZmlsZXMgKGFuZCByZWplY3RzIGAqKmBcbiAgICAvLyBnbG9icykuIEl0IGV4dGVuZHMgdGhlIHJvb3QgY29uZmlnIGFuZCBpcyB0eXBlLWNoZWNrIG9ubHkuXG4gICAgY29uc3QgYmFzZVRzY29uZmlnID0gcHJvamVjdC50c2NvbmZpZyA/PyBwcm9qZWN0LnRzY29uZmlnRGV2O1xuICAgIHRoaXMudHNjb25maWcgPSBuZXcgVHlwZXNjcmlwdENvbmZpZyhwcm9qZWN0LCB7XG4gICAgICBmaWxlTmFtZTogYCR7dGhpcy5fcHJvamVuQ29kZURpcn0vdHNjb25maWcuanNvbmAsXG4gICAgICBpbmNsdWRlOiBbXCIqKi8qLnRzXCJdLFxuICAgICAgZXh0ZW5kczogVHlwZXNjcmlwdENvbmZpZ0V4dGVuZHMuZnJvbVR5cGVzY3JpcHRDb25maWdzKFtiYXNlVHNjb25maWddKSxcbiAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICBub0VtaXQ6IHRydWUsXG4gICAgICAgIHJvb3REaXI6IHBvc2l4LnJlbGF0aXZlKHRoaXMuX3Byb2plbkNvZGVEaXIsIFwiLlwiKSB8fCBcIi5cIixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRUYXNrKCk7XG5cbiAgICB0aGlzLmdlbmVyYXRlUHJvamVucmMoKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRGVmYXVsdFRhc2soKSB7XG4gICAgY29uc3QgZGVwcyA9IFtcInRzLW5vZGVcIl07XG4gICAgaWYgKHRoaXMuX3N3Yykge1xuICAgICAgZGVwcy5wdXNoKFwiQHN3Yy9jb3JlXCIpO1xuICAgIH1cblxuICAgIC8vIHRoaXMgaXMgdGhlIHRhc2sgcHJvamVuIGV4ZWN1dGVzIHdoZW4gcnVubmluZyBgcHJvamVuYCB3aXRob3V0IGFcbiAgICAvLyBzcGVjaWZpYyB0YXNrIChpZiB0aGlzIHRhc2sgaXMgbm90IGRlZmluZWQsIHByb2plbiBmYWxscyBiYWNrIHRvXG4gICAgLy8gcnVubmluZyBcIm5vZGUgLnByb2plbnJjLmpzXCIpLlxuICAgIHRoaXMuX3RzUHJvamVjdC5hZGREZXZEZXBzKC4uLmRlcHMpO1xuXG4gICAgY29uc3QgdHNOb2RlID0gdGhpcy5fc3djID8gXCJ0cy1ub2RlIC0tc3djXCIgOiBcInRzLW5vZGVcIjtcblxuICAgIC8vIHRzLW5vZGUgY29tcGlsZXMgdGhlIGVudHJ5cG9pbnQgYW5kIGl0cyBpbXBvcnRzIG9uIGRlbWFuZCB1c2luZyB0aGUgZGV2XG4gICAgLy8gdHNjb25maWcncyBjb21waWxlciBvcHRpb25zLCBzbyBwcm9qZW4gc291cmNlIGZpbGVzIG1heSByZXNpZGUgYW55d2hlcmVcbiAgICAvLyBpbiB0aGUgcHJvamVjdCB0cmVlIHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbmZpZydzIGBpbmNsdWRlYC5cbiAgICB0aGlzLl90c1Byb2plY3QuZGVmYXVsdFRhc2s/LmV4ZWMoXG4gICAgICBgJHt0c05vZGV9IC0tcHJvamVjdCAke3RoaXMuX3RzUHJvamVjdC50c2NvbmZpZ0Rldi5maWxlTmFtZX0gJHt0aGlzLmZpbGVQYXRofWAsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBwcmVTeW50aGVzaXplKCk6IHZvaWQge1xuICAgIHN1cGVyLnByZVN5bnRoZXNpemUoKTtcblxuICAgIHRoaXMuX3RzUHJvamVjdC5hZGRQYWNrYWdlSWdub3JlKGAvJHt0aGlzLmZpbGVQYXRofWApO1xuICAgIHRoaXMuX3RzUHJvamVjdC5hZGRQYWNrYWdlSWdub3JlKGAvJHt0aGlzLl9wcm9qZW5Db2RlRGlyfWApO1xuXG4gICAgLy8gVGhlIHByb2plbnJjIGVudHJ5cG9pbnQgbGl2ZXMgYXQgdGhlIHJlcG9zaXRvcnkgcm9vdCBhbmQgaXMgbm90IGNvdmVyZWRcbiAgICAvLyBieSBhbnkgYHRzY29uZmlnLmpzb25gLiBSZWdpc3RlciBvbmx5IHRoaXMgc2luZ2xlIGZpbGUgd2l0aCB0aGUgZXNsaW50XG4gICAgLy8gcHJvamVjdCBzZXJ2aWNlJ3MgZGVmYXVsdCBwcm9qZWN0ICh0aGUgcHJvamVucmMgc291cmNlIHRyZWUgaXMgY292ZXJlZFxuICAgIC8vIGJ5IGl0cyBvd24gdHNjb25maWcpLiBgYWxsb3dEZWZhdWx0UHJvamVjdGAgZG9lcyBub3QgcGVybWl0IGAqKmAgZ2xvYnMuXG4gICAgdGhpcy5fdHNQcm9qZWN0LmVzbGludD8uYWxsb3dEZWZhdWx0UHJvamVjdEZpbGVzKHRoaXMuZmlsZVBhdGgpO1xuXG4gICAgdGhpcy5fdHNQcm9qZWN0LmVzbGludD8uYWRkTGludFBhdHRlcm4odGhpcy5fcHJvamVuQ29kZURpcik7XG4gICAgdGhpcy5fdHNQcm9qZWN0LmVzbGludD8uYWRkTGludFBhdHRlcm4odGhpcy5maWxlUGF0aCk7XG4gICAgdGhpcy5fdHNQcm9qZWN0LmVzbGludD8uYWxsb3dEZXZEZXBzKHRoaXMuZmlsZVBhdGgpO1xuICAgIHRoaXMuX3RzUHJvamVjdC5lc2xpbnQ/LmFsbG93RGV2RGVwcyhgJHt0aGlzLl9wcm9qZW5Db2RlRGlyfS8qKi8qLnRzYCk7XG4gICAgdGhpcy5fdHNQcm9qZWN0LmVzbGludD8uYWRkSWdub3JlUGF0dGVybihgISR7dGhpcy5maWxlUGF0aH1gKTtcbiAgICB0aGlzLl90c1Byb2plY3QuZXNsaW50Py5hZGRJZ25vcmVQYXR0ZXJuKGAhJHt0aGlzLl9wcm9qZW5Db2RlRGlyfS8qKi8qLnRzYCk7XG5cbiAgICB0aGlzLl90c1Byb2plY3QuZXNsaW50Py5hZGRPdmVycmlkZSh7XG4gICAgICBmaWxlczogW3RoaXMuZmlsZVBhdGhdLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgXCJAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXCI6IFwib2ZmXCIsXG4gICAgICAgIFwiaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXCI6IFwib2ZmXCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdHNQcm9qZWN0LmJpb21lPy5hZGRGaWxlUGF0dGVybih0aGlzLmZpbGVQYXRoKTtcbiAgICB0aGlzLl90c1Byb2plY3QuYmlvbWU/LmFkZEZpbGVQYXR0ZXJuKGAke3RoaXMuX3Byb2plbkNvZGVEaXJ9LyoqYCk7XG5cbiAgICB0aGlzLl90c1Byb2plY3QuamVzdD8uZGlzY292ZXJUZXN0TWF0Y2hQYXR0ZXJuc0ZvckRpcnMoXG4gICAgICBbdGhpcy5fcHJvamVuQ29kZURpcl0sXG4gICAgICB7XG4gICAgICAgIGZpbGVFeHRlbnNpb25QYXR0ZXJuOiB0aGlzLl90c1Byb2plY3QudHNjb25maWc/LmNvbXBpbGVyT3B0aW9ucz8uYWxsb3dKc1xuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiBcInRzPyh4KVwiLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVByb2plbnJjKCkge1xuICAgIGNvbnN0IHJjZmlsZSA9IHJlc29sdmUodGhpcy5wcm9qZWN0Lm91dGRpciwgdGhpcy5maWxlUGF0aCk7XG4gICAgaWYgKGV4aXN0c1N5bmMocmNmaWxlKSkge1xuICAgICAgcmV0dXJuOyAvLyBhbHJlYWR5IGV4aXN0c1xuICAgIH1cblxuICAgIGNvbnN0IGJvb3RzdHJhcCA9IHRoaXMucHJvamVjdC5pbml0UHJvamVjdDtcbiAgICBpZiAoIWJvb3RzdHJhcCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRzID0gYm9vdHN0cmFwLmZxbi5zcGxpdChcIi5cIik7XG4gICAgY29uc3QgbW9kdWxlTmFtZSA9IHBhcnRzWzBdO1xuICAgIGNvbnN0IGltcG9ydE5hbWUgPSBwYXJ0c1sxXTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBwYXJ0cy5zbGljZSgxKS5qb2luKFwiLlwiKTtcblxuICAgIGNvbnN0IHsgcmVuZGVyZWRPcHRpb25zLCBpbXBvcnRzIH0gPSByZW5kZXJKYXZhU2NyaXB0T3B0aW9ucyh7XG4gICAgICBhcmdzOiBib290c3RyYXAuYXJncyxcbiAgICAgIHR5cGU6IGJvb3RzdHJhcC50eXBlIGFzIEludmVudG9yeVByb2plY3RUeXBlLFxuICAgICAgY29tbWVudHM6IGJvb3RzdHJhcC5jb21tZW50cyxcbiAgICB9KTtcblxuICAgIGltcG9ydHMuYWRkKG1vZHVsZU5hbWUsIGltcG9ydE5hbWUpO1xuXG4gICAgY29uc3QgbGluZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGxpbmVzLnB1c2goLi4uaW1wb3J0cy5hc0VzbUltcG9ydHMoKSk7XG4gICAgbGluZXMucHVzaCgpO1xuICAgIGxpbmVzLnB1c2goYGNvbnN0IHByb2plY3QgPSBuZXcgJHtjbGFzc05hbWV9KCR7cmVuZGVyZWRPcHRpb25zfSk7YCk7XG4gICAgbGluZXMucHVzaCgpO1xuICAgIGxpbmVzLnB1c2goXCJwcm9qZWN0LnN5bnRoKCk7XCIpO1xuXG4gICAgbWtkaXJTeW5jKGRpcm5hbWUocmNmaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgd3JpdGVGaWxlU3luYyhyY2ZpbGUsIGxpbmVzLmpvaW4oXCJcXG5cIikpO1xuICAgIHRoaXMucHJvamVjdC5sb2dnZXIuaW5mbyhcbiAgICAgIGBQcm9qZWN0IGRlZmluaXRpb24gZmlsZSB3YXMgY3JlYXRlZCBhdCAke3JjZmlsZX1gLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -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.100.3" };
9
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TypedocDocgen", version: "0.100.5" };
10
10
  constructor(project) {
11
11
  project.addDevDeps("typedoc");
12
12
  const docgen = project.addTask("docgen", {
@@ -230,9 +230,13 @@ export interface TypeScriptProjectOptions extends NodeProjectOptions {
230
230
  */
231
231
  readonly tsconfigDev?: TypescriptConfigOptions;
232
232
  /**
233
- * The name of the development tsconfig.json file.
233
+ * The name (and path) of the development tsconfig file.
234
234
  *
235
- * @default "tsconfig.dev.json"
235
+ * By default this lives inside the test directory (e.g. `test/tsconfig.json`)
236
+ * so that the TypeScript language service resolves it as the nearest config
237
+ * for test files.
238
+ *
239
+ * @default - "{testdir}/tsconfig.json"
236
240
  */
237
241
  readonly tsconfigDevFile?: string;
238
242
  /**
@@ -243,7 +247,7 @@ export interface TypeScriptProjectOptions extends NodeProjectOptions {
243
247
  */
244
248
  readonly disableTsconfig?: boolean;
245
249
  /**
246
- * Do not generate a `tsconfig.dev.json` file.
250
+ * Do not generate a development tsconfig file.
247
251
  *
248
252
  * @default false
249
253
  */
@@ -306,6 +310,26 @@ export declare class TypeScriptProject extends NodeProject {
306
310
  */
307
311
  readonly watchTask: Task;
308
312
  constructor(options: TypeScriptProjectOptions);
313
+ /**
314
+ * The main `tsconfig.json` used to compile the project (src -> lib).
315
+ */
316
+ private makeTsconfig;
317
+ /**
318
+ * The development/test tsconfig, placed inside the test directory so that the
319
+ * TypeScript language service picks it up for test files. `tsserver` (and
320
+ * editors like VS Code >= 1.114, which bundle TypeScript 6) resolve the
321
+ * nearest `tsconfig.json` starting from the source file and no longer
322
+ * discover a differently-named config (e.g. `tsconfig.dev.json`) at the root.
323
+ *
324
+ * It extends the root tsconfig and is type-check only (`noEmit`), so it never
325
+ * participates in the build.
326
+ */
327
+ private makeDevTsconfig;
328
+ /**
329
+ * A self-contained development tsconfig at the repository root, used when
330
+ * there is no root tsconfig to extend (e.g. `disableTsconfig`).
331
+ */
332
+ private makeStandaloneDevTsconfig;
309
333
  /**
310
334
  * Projen default Typescript compiler options.
311
335
  */