projen 0.100.4 → 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 (157) hide show
  1. package/.jsii +41 -41
  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/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.js +1 -1
  82. package/lib/javascript/jest.js +4 -4
  83. package/lib/javascript/license-checker.js +1 -1
  84. package/lib/javascript/node-package.js +1 -1
  85. package/lib/javascript/node-project.js +1 -1
  86. package/lib/javascript/npm-config.js +1 -1
  87. package/lib/javascript/prettier.js +1 -1
  88. package/lib/javascript/projenrc.js +1 -1
  89. package/lib/javascript/typescript-config.js +2 -2
  90. package/lib/javascript/upgrade-dependencies.js +2 -2
  91. package/lib/javascript/yarnrc.js +1 -1
  92. package/lib/json-patch.js +1 -1
  93. package/lib/json.js +1 -1
  94. package/lib/license.js +1 -1
  95. package/lib/logger.js +1 -1
  96. package/lib/makefile.js +1 -1
  97. package/lib/object-file.js +1 -1
  98. package/lib/project-build.js +1 -1
  99. package/lib/project-tree.js +1 -1
  100. package/lib/project.js +1 -1
  101. package/lib/projects.js +1 -1
  102. package/lib/projenrc-json.js +1 -1
  103. package/lib/projenrc.js +1 -1
  104. package/lib/python/pip.js +1 -1
  105. package/lib/python/poetry.js +10 -7
  106. package/lib/python/projenrc.js +1 -1
  107. package/lib/python/pyproject-toml-file.js +1 -1
  108. package/lib/python/pytest-sample.js +1 -1
  109. package/lib/python/pytest.js +1 -1
  110. package/lib/python/python-project.js +1 -1
  111. package/lib/python/python-sample.js +1 -1
  112. package/lib/python/requirements-file.js +1 -1
  113. package/lib/python/setuppy.js +1 -1
  114. package/lib/python/setuptools.js +1 -1
  115. package/lib/python/uv.d.ts +3 -3
  116. package/lib/python/uv.js +6 -6
  117. package/lib/python/venv.js +4 -4
  118. package/lib/readme.js +1 -1
  119. package/lib/release/bump-version.js +16 -19
  120. package/lib/release/commit-tag-version.d.ts +2 -1
  121. package/lib/release/commit-tag-version.js +23 -17
  122. package/lib/release/publisher.js +1 -1
  123. package/lib/release/release-trigger.js +1 -1
  124. package/lib/release/release.js +1 -1
  125. package/lib/release/tag-version.js +3 -3
  126. package/lib/release/update-changelog.js +4 -2
  127. package/lib/renovatebot.js +1 -1
  128. package/lib/run-task.cjs +162 -20
  129. package/lib/sample-file.js +2 -2
  130. package/lib/source-code.js +1 -1
  131. package/lib/task-runner.js +16 -10
  132. package/lib/task.js +1 -1
  133. package/lib/tasks.js +1 -1
  134. package/lib/testing.js +1 -1
  135. package/lib/textfile.js +1 -1
  136. package/lib/toml.js +1 -1
  137. package/lib/typescript/projenrc-ts.js +1 -1
  138. package/lib/typescript/projenrc.js +1 -1
  139. package/lib/typescript/typescript-typedoc.js +1 -1
  140. package/lib/typescript/typescript.js +5 -5
  141. package/lib/util/exec.d.ts +183 -0
  142. package/lib/util/exec.js +238 -0
  143. package/lib/util.d.ts +0 -22
  144. package/lib/util.js +1 -57
  145. package/lib/version.js +2 -2
  146. package/lib/vscode/devcontainer.js +1 -1
  147. package/lib/vscode/extensions.js +1 -1
  148. package/lib/vscode/launch-config.js +1 -1
  149. package/lib/vscode/settings.js +1 -1
  150. package/lib/vscode/vscode.js +1 -1
  151. package/lib/web/next.js +3 -3
  152. package/lib/web/postcss.js +1 -1
  153. package/lib/web/react.js +3 -3
  154. package/lib/web/tailwind.js +1 -1
  155. package/lib/xmlfile.js +1 -1
  156. package/lib/yaml.js +1 -1
  157. package/package.json +1 -1
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.4",
1736
+ version: "0.100.5",
1737
1737
  jest: {
1738
1738
  coverageProvider: "v8",
1739
1739
  coverageReporters: [
@@ -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.4" };
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.4" };
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.4" };
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.4" };
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.4" };
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.4" };
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.4" };
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.4" };
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.4" };
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
  */
@@ -12,7 +12,7 @@ const DEFAULT_FILENAME = ".projenrc.ts";
12
12
  * Sets up a typescript project to use TypeScript for projenrc.
13
13
  */
14
14
  class Projenrc extends projenrc_1.ProjenrcFile {
15
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.Projenrc", version: "0.100.4" };
15
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.Projenrc", version: "0.100.5" };
16
16
  filePath;
17
17
  tsconfig;
18
18
  _projenCodeDir;
@@ -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.4" };
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", {
@@ -52,7 +52,7 @@ const util_2 = require("../util");
52
52
  */
53
53
  class TsJestBabelConfig {
54
54
  config;
55
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TsJestBabelConfig", version: "0.100.4" };
55
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TsJestBabelConfig", version: "0.100.5" };
56
56
  /**
57
57
  * Disables the use of Babel
58
58
  */
@@ -99,7 +99,7 @@ exports.TsJestBabelConfig = TsJestBabelConfig;
99
99
  */
100
100
  class TsJestDiagnostics {
101
101
  config;
102
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TsJestDiagnostics", version: "0.100.4" };
102
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TsJestDiagnostics", version: "0.100.5" };
103
103
  /**
104
104
  * Enable all diagnostics.
105
105
  */
@@ -137,7 +137,7 @@ exports.TsJestDiagnostics = TsJestDiagnostics;
137
137
  */
138
138
  class TsJestTsconfig {
139
139
  config;
140
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TsJestTsconfig", version: "0.100.4" };
140
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TsJestTsconfig", version: "0.100.5" };
141
141
  /**
142
142
  * Uses `tsconfig.json` if found, or the built-in default TypeScript compiler options.
143
143
  */
@@ -183,7 +183,7 @@ exports.TsJestTsconfig = TsJestTsconfig;
183
183
  * @pjid typescript
184
184
  */
185
185
  class TypeScriptProject extends javascript_1.NodeProject {
186
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TypeScriptProject", version: "0.100.4" };
186
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TypeScriptProject", version: "0.100.5" };
187
187
  static DEFAULT_TS_JEST_TRANFORM_PATTERN = "^.+\\.[t]sx?$";
188
188
  docgen;
189
189
  docsDirectory;
@@ -616,7 +616,7 @@ class SampleCode extends component_1.Component {
616
616
  * @pjid typescript-app
617
617
  */
618
618
  class TypeScriptAppProject extends TypeScriptProject {
619
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TypeScriptAppProject", version: "0.100.4" };
619
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.typescript.TypeScriptAppProject", version: "0.100.5" };
620
620
  constructor(options) {
621
621
  // Releasing and packaging are coupled. If one is disabled, disable the other by default.
622
622
  const shouldRelease = options.release ?? false;
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Options for shell-free command execution.
3
+ */
4
+ export interface ExecFileOptions {
5
+ /**
6
+ * Working directory for the command.
7
+ */
8
+ readonly cwd: string;
9
+ /**
10
+ * Additional environment variables, merged on top of `process.env`.
11
+ */
12
+ readonly env?: Record<string, string>;
13
+ }
14
+ /**
15
+ * Options for {@link Tool.run}.
16
+ */
17
+ export interface RunOptions extends ExecFileOptions {
18
+ /**
19
+ * Stream the child's stdout and stderr straight to the parent's stdout and
20
+ * stderr (full inheritance), instead of redirecting stdout to stderr and
21
+ * capturing stderr (the default).
22
+ *
23
+ * Use this when launching a child process whose stdout is meaningful and
24
+ * whose output should stream live to the user (e.g. the projen CLI).
25
+ *
26
+ * @default false
27
+ */
28
+ readonly inheritStdio?: boolean;
29
+ }
30
+ /**
31
+ * A shell-free handle for invoking a single program by name or path.
32
+ *
33
+ * Each argument is passed to the program verbatim (no shell parsing), so there
34
+ * is no quoting to get right for values such as tags, versions, branch names
35
+ * or file paths.
36
+ *
37
+ * Note: the program is executed directly, without a shell. On Windows this
38
+ * means it must be a real executable - `.cmd`/`.bat` shims (such as
39
+ * npm-installed CLIs like npm/npx/yarn/pnpm) cannot be invoked this way.
40
+ */
41
+ export interface Tool {
42
+ /**
43
+ * Runs `<tool> <args>`, inheriting stdout. Throws on non-zero exit.
44
+ */
45
+ run(args: string[], options: RunOptions): void;
46
+ /**
47
+ * Runs `<tool> <args>` and returns its trimmed STDOUT. Throws on non-zero exit.
48
+ */
49
+ capture(args: string[], options: ExecFileOptions): string;
50
+ /**
51
+ * Runs `<tool> <args>` and returns its trimmed STDOUT, or `undefined` if the
52
+ * command failed or produced no output.
53
+ */
54
+ tryCapture(args: string[], options: ExecFileOptions): string | undefined;
55
+ }
56
+ /**
57
+ * Creates a shell-free {@link Tool} for the given program.
58
+ *
59
+ * @example const git = tool("git"); git.run(["tag", "--delete", tag], { cwd });
60
+ */
61
+ export declare function tool(file: string): Tool;
62
+ /**
63
+ * Shell-free helper for invoking `git`.
64
+ *
65
+ * @example git.run(["tag", "--delete", tag], { cwd });
66
+ */
67
+ export declare const git: Tool;
68
+ /**
69
+ * Shell-free helper for invoking `uv` (ships as a native binary on all
70
+ * platforms).
71
+ */
72
+ export declare const uv: Tool;
73
+ /**
74
+ * Shell-free helper for invoking `poetry`.
75
+ */
76
+ export declare const poetry: Tool;
77
+ /**
78
+ * Shell-free helper for invoking the current Node.js executable
79
+ * (`process.execPath`).
80
+ */
81
+ export declare const node: Tool;
82
+ /**
83
+ * Async, dax-backed equivalent of {@link Tool} for programs that may be a
84
+ * Windows `.cmd`/`.bat` shim (e.g. `npx`, `npm`).
85
+ */
86
+ export interface AsyncTool {
87
+ /**
88
+ * Runs `<tool> <args>`, inheriting stdout. Rejects on non-zero exit.
89
+ */
90
+ run(args: string[], options: ExecFileOptions): Promise<void>;
91
+ /**
92
+ * Runs `<tool> <args>` and resolves its trimmed STDOUT. Rejects on non-zero
93
+ * exit.
94
+ */
95
+ capture(args: string[], options: ExecFileOptions): Promise<string>;
96
+ }
97
+ /**
98
+ * Cross-platform helper for `npm` (a Windows `.cmd` shim).
99
+ */
100
+ export declare const npm: AsyncTool;
101
+ /**
102
+ * Cross-platform helper for `npx` (a Windows `.cmd` shim).
103
+ */
104
+ export declare const npx: AsyncTool;
105
+ /**
106
+ * Normalized result of running a command through the system shell. This is a
107
+ * subset of node's `SpawnSyncReturns` shape.
108
+ */
109
+ export interface RawShellResult {
110
+ /**
111
+ * The exit code, or `null` if the process was terminated by a signal or
112
+ * never spawned.
113
+ */
114
+ readonly status: number | null;
115
+ /**
116
+ * Captured stdout, or `null` when stdout was inherited (not captured).
117
+ */
118
+ readonly stdout: Buffer | null;
119
+ /**
120
+ * Captured stderr, or `null` when stderr was inherited (not captured).
121
+ */
122
+ readonly stderr: Buffer | null;
123
+ /**
124
+ * An error raised while attempting to spawn the command (not a non-zero
125
+ * exit, which is reported via `status`).
126
+ */
127
+ readonly error?: Error;
128
+ }
129
+ /**
130
+ * Options for {@link rawShell.exec}.
131
+ */
132
+ export interface RawShellExecOptions {
133
+ /**
134
+ * Working directory for the command.
135
+ */
136
+ readonly cwd: string;
137
+ /**
138
+ * The full environment for the command. Passed through to the shell as-is
139
+ * (it is *not* merged with `process.env`), so callers that want to inherit
140
+ * the parent environment must include it themselves.
141
+ */
142
+ readonly env?: NodeJS.ProcessEnv;
143
+ /**
144
+ * Capture stdout/stderr (so the caller can read them from the result)
145
+ * instead of inheriting the parent's streams.
146
+ *
147
+ * @default false
148
+ */
149
+ readonly capture?: boolean;
150
+ }
151
+ /**
152
+ * Options for {@link rawShell.capture} / {@link rawShell.tryCapture}.
153
+ */
154
+ export interface RawShellCaptureOptions {
155
+ /**
156
+ * Working directory for the command.
157
+ */
158
+ readonly cwd: string;
159
+ /**
160
+ * Additional environment variables, merged on top of `process.env`.
161
+ */
162
+ readonly env?: Record<string, string>;
163
+ }
164
+ export declare const rawShell: {
165
+ /**
166
+ * Runs a command line through the system shell and returns a normalized
167
+ * result. Never throws for a non-zero exit (that is reported via `status`);
168
+ * a spawn failure is reported via `error`.
169
+ *
170
+ * The caller is responsible for supplying the full `env`.
171
+ */
172
+ exec(command: string, options: RawShellExecOptions): RawShellResult;
173
+ /**
174
+ * Runs a user-supplied shell command line and resolves its trimmed STDOUT.
175
+ * Rejects if the command exits non-zero.
176
+ */
177
+ capture: (command: string, options: RawShellCaptureOptions) => Promise<string>;
178
+ /**
179
+ * Runs a user-supplied shell command line and resolves its trimmed STDOUT,
180
+ * or `undefined` if the command failed or produced no output.
181
+ */
182
+ tryCapture: (command: string, options: RawShellCaptureOptions) => Promise<string | undefined>;
183
+ };