projen 0.100.6 → 0.101.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/.jsii +714 -116
  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 +9 -9
  14. package/lib/awscdk/integ-runner.js +9 -3
  15. package/lib/awscdk/integration-test.js +12 -6
  16. package/lib/awscdk/lambda-extension.js +1 -1
  17. package/lib/awscdk/lambda-function.js +2 -2
  18. package/lib/build/build-workflow.js +1 -1
  19. package/lib/cdk/auto-discover-base.js +2 -2
  20. package/lib/cdk/construct-lib.js +1 -1
  21. package/lib/cdk/integration-test-base.js +1 -1
  22. package/lib/cdk/jsii-build.js +5 -5
  23. package/lib/cdk/jsii-docgen.js +3 -3
  24. package/lib/cdk/jsii-project.js +1 -1
  25. package/lib/cdk8s/auto-discover.js +2 -2
  26. package/lib/cdk8s/cdk8s-app-py.js +3 -3
  27. package/lib/cdk8s/cdk8s-app-ts.js +4 -4
  28. package/lib/cdk8s/cdk8s-construct.js +1 -1
  29. package/lib/cdk8s/cdk8s-deps-py.js +1 -1
  30. package/lib/cdk8s/cdk8s-deps.js +1 -1
  31. package/lib/cdk8s/integration-test.js +17 -10
  32. package/lib/cdktf/cdktf-construct.js +1 -1
  33. package/lib/circleci/circleci.js +1 -1
  34. package/lib/cli/cmds/run-task.js +4 -1
  35. package/lib/cli/task-runtime.js +152 -78
  36. package/lib/common.d.ts +1 -1
  37. package/lib/common.js +2 -2
  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/index.d.ts +1 -0
  72. package/lib/index.js +2 -1
  73. package/lib/ini.js +1 -1
  74. package/lib/java/java-project.js +1 -1
  75. package/lib/java/junit.js +3 -3
  76. package/lib/java/maven-compile.js +3 -3
  77. package/lib/java/maven-packaging.js +3 -3
  78. package/lib/java/maven-sample.js +1 -1
  79. package/lib/java/pom.js +2 -2
  80. package/lib/java/projenrc.js +3 -3
  81. package/lib/javascript/biome/biome.js +1 -1
  82. package/lib/javascript/bundler.js +3 -3
  83. package/lib/javascript/eslint.js +1 -1
  84. package/lib/javascript/jest.js +4 -4
  85. package/lib/javascript/license-checker.js +5 -5
  86. package/lib/javascript/node-package.js +1 -1
  87. package/lib/javascript/node-project.js +13 -4
  88. package/lib/javascript/npm-config.js +1 -1
  89. package/lib/javascript/prettier.js +1 -1
  90. package/lib/javascript/projenrc.js +3 -3
  91. package/lib/javascript/typescript-config.js +2 -2
  92. package/lib/javascript/upgrade-dependencies.js +4 -4
  93. package/lib/javascript/yarnrc.js +1 -1
  94. package/lib/json-patch.js +1 -1
  95. package/lib/json.js +1 -1
  96. package/lib/license.js +1 -1
  97. package/lib/logger.js +1 -1
  98. package/lib/makefile.js +1 -1
  99. package/lib/object-file.js +1 -1
  100. package/lib/project-build.js +1 -1
  101. package/lib/project-tree.js +1 -1
  102. package/lib/project.js +1 -1
  103. package/lib/projects.js +1 -1
  104. package/lib/projenrc-json.js +1 -1
  105. package/lib/projenrc.js +1 -1
  106. package/lib/python/pip.js +17 -5
  107. package/lib/python/poetry.js +7 -7
  108. package/lib/python/projenrc.js +3 -3
  109. package/lib/python/pyproject-toml-file.js +1 -1
  110. package/lib/python/pytest-sample.js +1 -1
  111. package/lib/python/pytest.js +1 -1
  112. package/lib/python/python-project.js +1 -1
  113. package/lib/python/python-sample.js +1 -1
  114. package/lib/python/requirements-file.js +1 -1
  115. package/lib/python/setuppy.js +1 -1
  116. package/lib/python/setuptools.js +8 -3
  117. package/lib/python/uv.js +6 -6
  118. package/lib/python/venv.js +1 -1
  119. package/lib/readme.js +1 -1
  120. package/lib/release/bump-version.d.ts +1 -1
  121. package/lib/release/bump-version.js +6 -2
  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/renovatebot.js +1 -1
  126. package/lib/run-task.cjs +141 -129
  127. package/lib/sample-file.js +2 -2
  128. package/lib/source-code.js +1 -1
  129. package/lib/task-model.d.ts +144 -4
  130. package/lib/task-model.js +1 -1
  131. package/lib/task-shell.d.ts +63 -0
  132. package/lib/task-shell.js +87 -0
  133. package/lib/task.d.ts +52 -2
  134. package/lib/task.js +71 -10
  135. package/lib/tasks.d.ts +13 -0
  136. package/lib/tasks.js +19 -2
  137. package/lib/testing.js +1 -1
  138. package/lib/textfile.js +1 -1
  139. package/lib/toml.js +1 -1
  140. package/lib/typescript/projenrc-ts.js +1 -1
  141. package/lib/typescript/projenrc.js +1 -1
  142. package/lib/typescript/typescript-typedoc.js +9 -3
  143. package/lib/typescript/typescript.js +8 -10
  144. package/lib/util/exec.d.ts +34 -70
  145. package/lib/util/exec.js +57 -51
  146. package/lib/version.d.ts +1 -1
  147. package/lib/version.js +5 -5
  148. package/lib/vscode/devcontainer.js +1 -1
  149. package/lib/vscode/extensions.js +1 -1
  150. package/lib/vscode/launch-config.js +1 -1
  151. package/lib/vscode/settings.js +1 -1
  152. package/lib/vscode/vscode.js +1 -1
  153. package/lib/web/next.js +9 -9
  154. package/lib/web/postcss.js +1 -1
  155. package/lib/web/react.js +7 -7
  156. package/lib/web/tailwind.js +1 -1
  157. package/lib/xmlfile.js +1 -1
  158. package/lib/yaml.js +1 -1
  159. package/package.json +4 -4
@@ -1,3 +1,4 @@
1
+ import type { TaskShell } from "./task-shell";
1
2
  /**
2
3
  * Schema for `tasks.json`.
3
4
  */
@@ -24,6 +25,12 @@ export interface TasksManifest {
24
25
  readonly env?: {
25
26
  [name: string]: string;
26
27
  };
28
+ /**
29
+ * The default task shell, in `tasks.json` form: a keyword (`"projen"` or
30
+ * `"system"`) or an invocation argument list. See
31
+ * {@link TaskCommonOptions.shell}.
32
+ */
33
+ readonly shell?: string | string[];
27
34
  }
28
35
  export interface TaskCommonOptions {
29
36
  /**
@@ -57,15 +64,65 @@ export interface TaskCommonOptions {
57
64
  * @default - process.cwd()
58
65
  */
59
66
  readonly cwd?: string;
67
+ /**
68
+ * The shell used to run this task's commands, including its `condition` and
69
+ * `$(...)` environment evaluation. Use {@link TaskShell} to pick a built-in
70
+ * or an explicit invocation. Set at project, task or step level; the nearest
71
+ * declared level wins.
72
+ *
73
+ * @default - inherited from the task/project, otherwise the built-in projen shell
74
+ */
75
+ readonly shell?: TaskShell;
60
76
  }
61
77
  /**
62
78
  * Specification of a single task.
79
+ *
80
+ * The `tasks.json` (manifest) form of a task. {@link TaskCommonOptions} is the
81
+ * form used to define one; they differ only in the rendered `shell` field.
63
82
  */
64
- export interface TaskSpec extends TaskCommonOptions {
83
+ export interface TaskSpec {
65
84
  /**
66
85
  * Task name.
67
86
  */
68
87
  readonly name: string;
88
+ /**
89
+ * The description of this build command.
90
+ * @default - the task name
91
+ */
92
+ readonly description?: string;
93
+ /**
94
+ * Defines environment variables for the execution of this task.
95
+ * Values in this map will be evaluated in a shell, so you can do stuff like `$(echo "foo")`.
96
+ * @default {}
97
+ */
98
+ readonly env?: {
99
+ [name: string]: string;
100
+ };
101
+ /**
102
+ * A set of environment variables that must be defined in order to execute
103
+ * this task. Task execution will fail if one of these is not defined.
104
+ */
105
+ readonly requiredEnv?: string[];
106
+ /**
107
+ * A shell command which determines if the this task should be executed. If
108
+ * the program exits with a zero exit code, steps will be executed. A non-zero
109
+ * code means that task will be skipped.
110
+ */
111
+ readonly condition?: string;
112
+ /**
113
+ * The working directory for all steps in this task (unless overridden by the
114
+ * step).
115
+ *
116
+ * @default - process.cwd()
117
+ */
118
+ readonly cwd?: string;
119
+ /**
120
+ * The task shell in `tasks.json` form: a keyword (`"projen"` or `"system"`)
121
+ * or an invocation argument list.
122
+ *
123
+ * @default - the built-in projen shell
124
+ */
125
+ readonly shell?: string | string[];
69
126
  /**
70
127
  * Task steps.
71
128
  */
@@ -99,7 +156,7 @@ export interface TaskStepOptions {
99
156
  * If `true`, args are passed through at the end of the `exec` shell command.\
100
157
  * The position of the args can be changed by including the marker `$@` inside the command string.
101
158
  *
102
- * If the marker is explicitly double-quoted ("$@") arguments will be wrapped in single quotes, approximating
159
+ * If the marker is explicitly double-quoted ("$@") arguments will be wrapped in double quotes, approximating
103
160
  * the whitespace preserving behavior of bash variable expansion.
104
161
  *
105
162
  * If the step spawns a subtask, args are passed to the subtask.
@@ -142,18 +199,101 @@ export interface TaskStepOptions {
142
199
  readonly env?: {
143
200
  [name: string]: string;
144
201
  };
202
+ /**
203
+ * The shell used to run this step, overriding the task/project shell.
204
+ *
205
+ * @see {@link TaskCommonOptions.shell}
206
+ * @default - the task's (or project's) shell
207
+ */
208
+ readonly shell?: TaskShell;
145
209
  }
146
210
  /**
147
211
  * A single step within a task. The step could either be the execution of a
148
212
  * shell command or execution of a sub-task, by name.
213
+ *
214
+ * The `tasks.json` (manifest) form of a step. {@link TaskStepOptions} is the
215
+ * form used to define steps (via `task.exec()` etc.); they differ only in the
216
+ * rendered `shell` field.
149
217
  */
150
- export interface TaskStep extends TaskStepOptions {
218
+ export interface TaskStep {
219
+ /**
220
+ * Step name
221
+ *
222
+ * @default - no name
223
+ */
224
+ readonly name?: string;
225
+ /**
226
+ * The working directory for this step.
227
+ *
228
+ * @default - determined by the task
229
+ */
230
+ readonly cwd?: string;
231
+ /**
232
+ * A shell command which determines if the this step should be executed. If
233
+ * the program exits with a zero exit code, the step will be executed. A non-zero
234
+ * code means the step will be skipped (subsequent task steps will still be evaluated/executed).
235
+ */
236
+ readonly condition?: string;
237
+ /**
238
+ * Should this step receive args passed to the task.
239
+ *
240
+ * @see {@link TaskStepOptions.receiveArgs}
241
+ * @default false
242
+ */
243
+ readonly receiveArgs?: boolean;
244
+ /**
245
+ * A list of fixed arguments always passed to the step.
246
+ *
247
+ * @see {@link TaskStepOptions.args}
248
+ * @default - no arguments are passed to the step
249
+ */
250
+ readonly args?: string[];
251
+ /**
252
+ * Defines environment variables for the execution of this step (`exec` and `builtin` only).
253
+ *
254
+ * @see {@link TaskStepOptions.env}
255
+ * @default - no environment variables defined in step
256
+ */
257
+ readonly env?: {
258
+ [name: string]: string;
259
+ };
151
260
  /**
152
- * Shell command to execute
261
+ * The step shell in `tasks.json` form: a keyword (`"projen"` or `"system"`)
262
+ * or an invocation argument list.
263
+ *
264
+ * @default - the task's (or project's) shell
265
+ */
266
+ readonly shell?: string | string[];
267
+ /**
268
+ * Shell command to execute.
269
+ *
270
+ * The whole command is a single shell string. To pass arguments as a list
271
+ * instead - without having to quote spaces or other characters yourself -
272
+ * use `execArgs`.
153
273
  *
154
274
  * @default - don't execute a shell command
155
275
  */
156
276
  readonly exec?: string;
277
+ /**
278
+ * Shell command to execute, provided as a list of the program followed by
279
+ * its arguments (an "argv").
280
+ *
281
+ * Often more convenient than `exec`: each element is passed to the
282
+ * program as-is, so arguments with spaces or special characters don't need
283
+ * quoting. Fixed (`args`) or received (`receiveArgs`) arguments are inserted
284
+ * wherever a `$@` element appears, or appended at the end if there is none.
285
+ *
286
+ * The elements are not run through a shell, so environment variables (`$FOO`)
287
+ * are not expanded and other shell features are unavailable. Use `exec`
288
+ * if you need them.
289
+ *
290
+ * Mutually exclusive with `exec`.
291
+ *
292
+ * @example { execArgs: ["echo", "hello world"] }
293
+ *
294
+ * @default - don't execute a shell command
295
+ */
296
+ readonly execArgs?: string[];
157
297
  /**
158
298
  * Subtask to execute
159
299
  *
package/lib/task-model.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90YXNrLW1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNjaGVtYSBmb3IgYHRhc2tzLmpzb25gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tzTWFuaWZlc3Qge1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIHRhc2tzIG1hbmlmZXN0IHNjaGVtYS5cbiAgICpcbiAgICogVXNlZCBieSB0aGUgdGFzayBydW50aW1lIHRvIGRldGVjdCBtYW5pZmVzdHMgcHJvZHVjZWQgYnkgYSBuZXdlciB2ZXJzaW9uXG4gICAqIG9mIHByb2plbi4gTWFuaWZlc3RzIGdlbmVyYXRlZCBieSBvbGRlciB2ZXJzaW9ucyBvZiBwcm9qZW4gb21pdCB0aGlzIGZpZWxkXG4gICAqIGFuZCBhcmUgdHJlYXRlZCBhcyBcImxlZ2FjeVwiIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgbWFuaWZlc3QgaXMgdHJlYXRlZCBhcyBhIGxlZ2FjeSAodW52ZXJzaW9uZWQpIG1hbmlmZXN0XG4gICAqL1xuICByZWFkb25seSBtYW5pZmVzdFZlcnNpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEFsbCB0YXNrcyBhdmFpbGFibGUgZm9yIHRoaXMgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHRhc2tzPzogeyBbbmFtZTogc3RyaW5nXTogVGFza1NwZWMgfTtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgZm9yIGFsbCB0YXNrcy5cbiAgICovXG4gIHJlYWRvbmx5IGVudj86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tDb21tb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGlzIGJ1aWxkIGNvbW1hbmQuXG4gICAqIEBkZWZhdWx0IC0gdGhlIHRhc2sgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgdGFzay5cbiAgICogVmFsdWVzIGluIHRoaXMgbWFwIHdpbGwgYmUgZXZhbHVhdGVkIGluIGEgc2hlbGwsIHNvIHlvdSBjYW4gZG8gc3R1ZmYgbGlrZSBgJChlY2hvIFwiZm9vXCIpYC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHJlYWRvbmx5IGVudj86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gZXhlY3V0ZVxuICAgKiB0aGlzIHRhc2suIFRhc2sgZXhlY3V0aW9uIHdpbGwgZmFpbCBpZiBvbmUgb2YgdGhlc2UgaXMgbm90IGRlZmluZWQuXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlZEVudj86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBIHNoZWxsIGNvbW1hbmQgd2hpY2ggZGV0ZXJtaW5lcyBpZiB0aGUgdGhpcyB0YXNrIHNob3VsZCBiZSBleGVjdXRlZC4gSWZcbiAgICogdGhlIHByb2dyYW0gZXhpdHMgd2l0aCBhIHplcm8gZXhpdCBjb2RlLCBzdGVwcyB3aWxsIGJlIGV4ZWN1dGVkLiBBIG5vbi16ZXJvXG4gICAqIGNvZGUgbWVhbnMgdGhhdCB0YXNrIHdpbGwgYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbmRpdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciBhbGwgc3RlcHMgaW4gdGhpcyB0YXNrICh1bmxlc3Mgb3ZlcnJpZGRlbiBieSB0aGVcbiAgICogc3RlcCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvY2Vzcy5jd2QoKVxuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNwZWNpZmljYXRpb24gb2YgYSBzaW5nbGUgdGFzay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXNrU3BlYyBleHRlbmRzIFRhc2tDb21tb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRhc2sgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGFzayBzdGVwcy5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZXBzPzogVGFza1N0ZXBbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0YXNrIHN0ZXBzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tTdGVwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTdGVwIG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgZm9yIHRoaXMgc3RlcC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXRlcm1pbmVkIGJ5IHRoZSB0YXNrXG4gICAqL1xuICByZWFkb25seSBjd2Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc2hlbGwgY29tbWFuZCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoZSB0aGlzIHN0ZXAgc2hvdWxkIGJlIGV4ZWN1dGVkLiBJZlxuICAgKiB0aGUgcHJvZ3JhbSBleGl0cyB3aXRoIGEgemVybyBleGl0IGNvZGUsIHRoZSBzdGVwIHdpbGwgYmUgZXhlY3V0ZWQuIEEgbm9uLXplcm9cbiAgICogY29kZSBtZWFucyB0aGUgc3RlcCB3aWxsIGJlIHNraXBwZWQgKHN1YnNlcXVlbnQgdGFzayBzdGVwcyB3aWxsIHN0aWxsIGJlIGV2YWx1YXRlZC9leGVjdXRlZCkuXG4gICAqL1xuICByZWFkb25seSBjb25kaXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNob3VsZCB0aGlzIHN0ZXAgcmVjZWl2ZSBhcmdzIHBhc3NlZCB0byB0aGUgdGFzay5cbiAgICpcbiAgICogSWYgYHRydWVgLCBhcmdzIGFyZSBwYXNzZWQgdGhyb3VnaCBhdCB0aGUgZW5kIG9mIHRoZSBgZXhlY2Agc2hlbGwgY29tbWFuZC5cXFxuICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGFyZ3MgY2FuIGJlIGNoYW5nZWQgYnkgaW5jbHVkaW5nIHRoZSBtYXJrZXIgYCRAYCBpbnNpZGUgdGhlIGNvbW1hbmQgc3RyaW5nLlxuICAgKlxuICAgKiBJZiB0aGUgbWFya2VyIGlzIGV4cGxpY2l0bHkgZG91YmxlLXF1b3RlZCAoXCIkQFwiKSBhcmd1bWVudHMgd2lsbCBiZSB3cmFwcGVkIGluIHNpbmdsZSBxdW90ZXMsIGFwcHJveGltYXRpbmdcbiAgICogdGhlIHdoaXRlc3BhY2UgcHJlc2VydmluZyBiZWhhdmlvciBvZiBiYXNoIHZhcmlhYmxlIGV4cGFuc2lvbi5cbiAgICpcbiAgICogSWYgdGhlIHN0ZXAgc3Bhd25zIGEgc3VidGFzaywgYXJncyBhcmUgcGFzc2VkIHRvIHRoZSBzdWJ0YXNrLlxuICAgKiBUaGUgc3VidGFzayBtdXN0IGRlZmluZSBzdGVwcyByZWNlaXZpbmcgYXJncyBmb3IgdGhpcyB0byBoYXZlIGFueSBlZmZlY3QuXG4gICAqXG4gICAqIEBleGFtcGxlIHRhc2suZXhlYyhcImVjaG8gSGVsbG8gJEAgV29ybGQhXCIsIHsgcmVjZWl2ZUFyZ3M6IHRydWUgfSk7XG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZWNlaXZlQXJncz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBmaXhlZCBhcmd1bWVudHMgYWx3YXlzIHBhc3NlZCB0byB0aGUgc3RlcC5cbiAgICpcbiAgICogVXNlZnVsIHRvIHJlLXVzZSBleGlzdGluZyB0YXNrcyB3aXRob3V0IGhhdmluZyB0byByZS1kZWZpbmUgdGhlIHdob2xlIHRhc2suXFxcbiAgICogRml4ZWQgYXJncyBhcmUgYWx3YXlzIHBhc3NlZCB0byB0aGUgc3RlcCwgZXZlbiBpZiBgcmVjZWl2ZUFyZ3NgIGlzIGBmYWxzZWBcbiAgICogYW5kIGFyZSBhbHdheXMgcGFzc2VkIGJlZm9yZSBhbnkgYXJncyB0aGUgdGFzayBpcyBjYWxsZWQgd2l0aC5cbiAgICpcbiAgICogSWYgdGhlIHN0ZXAgZXhlY3V0ZXMgYSBzaGVsbCBjb21tYW5kcywgYXJncyBhcmUgcGFzc2VkIHRocm91Z2ggYXQgdGhlIGVuZCBvZiB0aGUgYGV4ZWNgIHNoZWxsIGNvbW1hbmQuXFxcbiAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBhcmdzIGNhbiBiZSBjaGFuZ2VkIGJ5IGluY2x1ZGluZyB0aGUgbWFya2VyIGAkQGAgaW5zaWRlIHRoZSBjb21tYW5kIHN0cmluZy5cbiAgICpcbiAgICogSWYgdGhlIHN0ZXAgc3Bhd25zIGEgc3VidGFzaywgYXJncyBhcmUgcGFzc2VkIHRvIHRoZSBzdWJ0YXNrLlxuICAgKiBUaGUgc3VidGFzayBtdXN0IGRlZmluZSBzdGVwcyByZWNlaXZpbmcgYXJncyBmb3IgdGhpcyB0byBoYXZlIGFueSBlZmZlY3QuXG4gICAqXG4gICAqIElmIHRoZSBzdGVwIGNhbGxzIGEgYnVpbHRpbiBzY3JpcHQsIGFyZ3MgYXJlIHBhc3NlZCB0byB0aGUgc2NyaXB0LlxuICAgKiBJdCBpcyB1cCB0byB0aGUgc2NyaXB0IHRvIHVzZSBvciBkaXNjYXJkIHRoZSBhcmd1bWVudHMuXG4gICAqXG4gICAqIEBleGFtcGxlIHRhc2suc3Bhd24oXCJkZXBsb3lcIiwgeyBhcmdzOiBbXCItLWZvcmNlXCJdIH0pO1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZSBzdGVwXG4gICAqL1xuICByZWFkb25seSBhcmdzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERlZmluZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgc3RlcCAoYGV4ZWNgIGFuZCBgYnVpbHRpbmAgb25seSkuXG4gICAqIFZhbHVlcyBpbiB0aGlzIG1hcCBjYW4gYmUgc2ltcGxlLCBsaXRlcmFsIHZhbHVlcyBvciBzaGVsbCBleHByZXNzaW9ucyB0aGF0IHdpbGwgYmUgZXZhbHVhdGVkIGF0IHJ1bnRpbWUgZS5nLiBgJChlY2hvIFwiZm9vXCIpYC5cbiAgICpcbiAgICogQGV4YW1wbGUgeyBcImZvb1wiOiBcImJhclwiLCBcImJvb1wiOiBcIiQoZWNobyBiYXopXCIgfVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGVudmlyb25tZW50IHZhcmlhYmxlcyBkZWZpbmVkIGluIHN0ZXBcbiAgICovXG4gIHJlYWRvbmx5IGVudj86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIHN0ZXAgd2l0aGluIGEgdGFzay4gVGhlIHN0ZXAgY291bGQgZWl0aGVyIGJlICB0aGUgZXhlY3V0aW9uIG9mIGFcbiAqIHNoZWxsIGNvbW1hbmQgb3IgZXhlY3V0aW9uIG9mIGEgc3ViLXRhc2ssIGJ5IG5hbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFza1N0ZXAgZXh0ZW5kcyBUYXNrU3RlcE9wdGlvbnMge1xuICAvKipcbiAgICogU2hlbGwgY29tbWFuZCB0byBleGVjdXRlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZG9uJ3QgZXhlY3V0ZSBhIHNoZWxsIGNvbW1hbmRcbiAgICovXG4gIHJlYWRvbmx5IGV4ZWM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN1YnRhc2sgdG8gZXhlY3V0ZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRvbid0IHNwYXduIGEgc3VidGFza1xuICAgKi9cbiAgcmVhZG9ubHkgc3Bhd24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByaW50IGEgbWVzc2FnZS5cbiAgICogQGRlZmF1bHQgLSBkb24ndCBzYXkgYW55dGhpbmdcbiAgICovXG4gIHJlYWRvbmx5IHNheT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgYSBidWlsdC1pbiB0YXNrIHRvIGV4ZWN1dGUuXG4gICAqXG4gICAqIEJ1aWx0LWluIHRhc2tzIGFyZSBub2RlLmpzIHByb2dyYW1zIGJha2VkIGludG8gdGhlIHByb2plbiBtb2R1bGUgYW5kIGFzXG4gICAqIGNvbXBvbmVudCBydW50aW1lIGhlbHBlcnMuXG4gICAqXG4gICAqIFRoZSBuYW1lIGlzIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgcHJvamVuIGxpYi8gZGlyZWN0b3J5ICh3aXRob3V0IHRoZSAudGFzay5qcyBleHRlbnNpb24pLlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgeW91ciBidWlsdCBpbiBidWlsdGluIHRhc2sgaXMgdW5kZXIgYHNyYy9yZWxlYXNlL3Jlc29sdmUtdmVyc2lvbi50YXNrLnRzYCxcbiAgICogdGhlbiB0aGlzIHdvdWxkIGJlIGByZWxlYXNlL3Jlc29sdmUtdmVyc2lvbmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZG8gbm90IGV4ZWN1dGUgYSBidWlsdGluIHRhc2tcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWx0aW4/OiBzdHJpbmc7XG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90YXNrLW1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFRhc2tTaGVsbCB9IGZyb20gXCIuL3Rhc2stc2hlbGxcIjtcblxuLyoqXG4gKiBTY2hlbWEgZm9yIGB0YXNrcy5qc29uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXNrc01hbmlmZXN0IHtcbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSB0YXNrcyBtYW5pZmVzdCBzY2hlbWEuXG4gICAqXG4gICAqIFVzZWQgYnkgdGhlIHRhc2sgcnVudGltZSB0byBkZXRlY3QgbWFuaWZlc3RzIHByb2R1Y2VkIGJ5IGEgbmV3ZXIgdmVyc2lvblxuICAgKiBvZiBwcm9qZW4uIE1hbmlmZXN0cyBnZW5lcmF0ZWQgYnkgb2xkZXIgdmVyc2lvbnMgb2YgcHJvamVuIG9taXQgdGhpcyBmaWVsZFxuICAgKiBhbmQgYXJlIHRyZWF0ZWQgYXMgXCJsZWdhY3lcIiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIG1hbmlmZXN0IGlzIHRyZWF0ZWQgYXMgYSBsZWdhY3kgKHVudmVyc2lvbmVkKSBtYW5pZmVzdFxuICAgKi9cbiAgcmVhZG9ubHkgbWFuaWZlc3RWZXJzaW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbGwgdGFza3MgYXZhaWxhYmxlIGZvciB0aGlzIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSB0YXNrcz86IHsgW25hbWU6IHN0cmluZ106IFRhc2tTcGVjIH07XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IGZvciBhbGwgdGFza3MuXG4gICAqL1xuICByZWFkb25seSBlbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdGFzayBzaGVsbCwgaW4gYHRhc2tzLmpzb25gIGZvcm06IGEga2V5d29yZCAoYFwicHJvamVuXCJgIG9yXG4gICAqIGBcInN5c3RlbVwiYCkgb3IgYW4gaW52b2NhdGlvbiBhcmd1bWVudCBsaXN0LiBTZWVcbiAgICoge0BsaW5rIFRhc2tDb21tb25PcHRpb25zLnNoZWxsfS5cbiAgICovXG4gIHJlYWRvbmx5IHNoZWxsPzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFza0NvbW1vbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoaXMgYnVpbGQgY29tbWFuZC5cbiAgICogQGRlZmF1bHQgLSB0aGUgdGFzayBuYW1lXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRGVmaW5lcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhpcyB0YXNrLlxuICAgKiBWYWx1ZXMgaW4gdGhpcyBtYXAgd2lsbCBiZSBldmFsdWF0ZWQgaW4gYSBzaGVsbCwgc28geW91IGNhbiBkbyBzdHVmZiBsaWtlIGAkKGVjaG8gXCJmb29cIilgLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgcmVhZG9ubHkgZW52PzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byBleGVjdXRlXG4gICAqIHRoaXMgdGFzay4gVGFzayBleGVjdXRpb24gd2lsbCBmYWlsIGlmIG9uZSBvZiB0aGVzZSBpcyBub3QgZGVmaW5lZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkRW52Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEEgc2hlbGwgY29tbWFuZCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoZSB0aGlzIHRhc2sgc2hvdWxkIGJlIGV4ZWN1dGVkLiBJZlxuICAgKiB0aGUgcHJvZ3JhbSBleGl0cyB3aXRoIGEgemVybyBleGl0IGNvZGUsIHN0ZXBzIHdpbGwgYmUgZXhlY3V0ZWQuIEEgbm9uLXplcm9cbiAgICogY29kZSBtZWFucyB0aGF0IHRhc2sgd2lsbCBiZSBza2lwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZGl0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgZm9yIGFsbCBzdGVwcyBpbiB0aGlzIHRhc2sgKHVubGVzcyBvdmVycmlkZGVuIGJ5IHRoZVxuICAgKiBzdGVwKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm9jZXNzLmN3ZCgpXG4gICAqL1xuICByZWFkb25seSBjd2Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzaGVsbCB1c2VkIHRvIHJ1biB0aGlzIHRhc2sncyBjb21tYW5kcywgaW5jbHVkaW5nIGl0cyBgY29uZGl0aW9uYCBhbmRcbiAgICogYCQoLi4uKWAgZW52aXJvbm1lbnQgZXZhbHVhdGlvbi4gVXNlIHtAbGluayBUYXNrU2hlbGx9IHRvIHBpY2sgYSBidWlsdC1pblxuICAgKiBvciBhbiBleHBsaWNpdCBpbnZvY2F0aW9uLiBTZXQgYXQgcHJvamVjdCwgdGFzayBvciBzdGVwIGxldmVsOyB0aGUgbmVhcmVzdFxuICAgKiBkZWNsYXJlZCBsZXZlbCB3aW5zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGluaGVyaXRlZCBmcm9tIHRoZSB0YXNrL3Byb2plY3QsIG90aGVyd2lzZSB0aGUgYnVpbHQtaW4gcHJvamVuIHNoZWxsXG4gICAqL1xuICByZWFkb25seSBzaGVsbD86IFRhc2tTaGVsbDtcbn1cblxuLyoqXG4gKiBTcGVjaWZpY2F0aW9uIG9mIGEgc2luZ2xlIHRhc2suXG4gKlxuICogVGhlIGB0YXNrcy5qc29uYCAobWFuaWZlc3QpIGZvcm0gb2YgYSB0YXNrLiB7QGxpbmsgVGFza0NvbW1vbk9wdGlvbnN9IGlzIHRoZVxuICogZm9ybSB1c2VkIHRvIGRlZmluZSBvbmU7IHRoZXkgZGlmZmVyIG9ubHkgaW4gdGhlIHJlbmRlcmVkIGBzaGVsbGAgZmllbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFza1NwZWMge1xuICAvKipcbiAgICogVGFzayBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhpcyBidWlsZCBjb21tYW5kLlxuICAgKiBAZGVmYXVsdCAtIHRoZSB0YXNrIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIHRhc2suXG4gICAqIFZhbHVlcyBpbiB0aGlzIG1hcCB3aWxsIGJlIGV2YWx1YXRlZCBpbiBhIHNoZWxsLCBzbyB5b3UgY2FuIGRvIHN0dWZmIGxpa2UgYCQoZWNobyBcImZvb1wiKWAuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICByZWFkb25seSBlbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQSBzZXQgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvIGV4ZWN1dGVcbiAgICogdGhpcyB0YXNrLiBUYXNrIGV4ZWN1dGlvbiB3aWxsIGZhaWwgaWYgb25lIG9mIHRoZXNlIGlzIG5vdCBkZWZpbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWRFbnY/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBzaGVsbCBjb21tYW5kIHdoaWNoIGRldGVybWluZXMgaWYgdGhlIHRoaXMgdGFzayBzaG91bGQgYmUgZXhlY3V0ZWQuIElmXG4gICAqIHRoZSBwcm9ncmFtIGV4aXRzIHdpdGggYSB6ZXJvIGV4aXQgY29kZSwgc3RlcHMgd2lsbCBiZSBleGVjdXRlZC4gQSBub24temVyb1xuICAgKiBjb2RlIG1lYW5zIHRoYXQgdGFzayB3aWxsIGJlIHNraXBwZWQuXG4gICAqL1xuICByZWFkb25seSBjb25kaXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBmb3IgYWxsIHN0ZXBzIGluIHRoaXMgdGFzayAodW5sZXNzIG92ZXJyaWRkZW4gYnkgdGhlXG4gICAqIHN0ZXApLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByb2Nlc3MuY3dkKClcbiAgICovXG4gIHJlYWRvbmx5IGN3ZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRhc2sgc2hlbGwgaW4gYHRhc2tzLmpzb25gIGZvcm06IGEga2V5d29yZCAoYFwicHJvamVuXCJgIG9yIGBcInN5c3RlbVwiYClcbiAgICogb3IgYW4gaW52b2NhdGlvbiBhcmd1bWVudCBsaXN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBidWlsdC1pbiBwcm9qZW4gc2hlbGxcbiAgICovXG4gIHJlYWRvbmx5IHNoZWxsPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRhc2sgc3RlcHMuXG4gICAqL1xuICByZWFkb25seSBzdGVwcz86IFRhc2tTdGVwW107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGFzayBzdGVwcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXNrU3RlcE9wdGlvbnMge1xuICAvKipcbiAgICogU3RlcCBuYW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGlzIHN0ZXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGV0ZXJtaW5lZCBieSB0aGUgdGFza1xuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHNoZWxsIGNvbW1hbmQgd2hpY2ggZGV0ZXJtaW5lcyBpZiB0aGUgdGhpcyBzdGVwIHNob3VsZCBiZSBleGVjdXRlZC4gSWZcbiAgICogdGhlIHByb2dyYW0gZXhpdHMgd2l0aCBhIHplcm8gZXhpdCBjb2RlLCB0aGUgc3RlcCB3aWxsIGJlIGV4ZWN1dGVkLiBBIG5vbi16ZXJvXG4gICAqIGNvZGUgbWVhbnMgdGhlIHN0ZXAgd2lsbCBiZSBza2lwcGVkIChzdWJzZXF1ZW50IHRhc2sgc3RlcHMgd2lsbCBzdGlsbCBiZSBldmFsdWF0ZWQvZXhlY3V0ZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZGl0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgdGhpcyBzdGVwIHJlY2VpdmUgYXJncyBwYXNzZWQgdG8gdGhlIHRhc2suXG4gICAqXG4gICAqIElmIGB0cnVlYCwgYXJncyBhcmUgcGFzc2VkIHRocm91Z2ggYXQgdGhlIGVuZCBvZiB0aGUgYGV4ZWNgIHNoZWxsIGNvbW1hbmQuXFxcbiAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBhcmdzIGNhbiBiZSBjaGFuZ2VkIGJ5IGluY2x1ZGluZyB0aGUgbWFya2VyIGAkQGAgaW5zaWRlIHRoZSBjb21tYW5kIHN0cmluZy5cbiAgICpcbiAgICogSWYgdGhlIG1hcmtlciBpcyBleHBsaWNpdGx5IGRvdWJsZS1xdW90ZWQgKFwiJEBcIikgYXJndW1lbnRzIHdpbGwgYmUgd3JhcHBlZCBpbiBkb3VibGUgcXVvdGVzLCBhcHByb3hpbWF0aW5nXG4gICAqIHRoZSB3aGl0ZXNwYWNlIHByZXNlcnZpbmcgYmVoYXZpb3Igb2YgYmFzaCB2YXJpYWJsZSBleHBhbnNpb24uXG4gICAqXG4gICAqIElmIHRoZSBzdGVwIHNwYXducyBhIHN1YnRhc2ssIGFyZ3MgYXJlIHBhc3NlZCB0byB0aGUgc3VidGFzay5cbiAgICogVGhlIHN1YnRhc2sgbXVzdCBkZWZpbmUgc3RlcHMgcmVjZWl2aW5nIGFyZ3MgZm9yIHRoaXMgdG8gaGF2ZSBhbnkgZWZmZWN0LlxuICAgKlxuICAgKiBAZXhhbXBsZSB0YXNrLmV4ZWMoXCJlY2hvIEhlbGxvICRAIFdvcmxkIVwiLCB7IHJlY2VpdmVBcmdzOiB0cnVlIH0pO1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVjZWl2ZUFyZ3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZml4ZWQgYXJndW1lbnRzIGFsd2F5cyBwYXNzZWQgdG8gdGhlIHN0ZXAuXG4gICAqXG4gICAqIFVzZWZ1bCB0byByZS11c2UgZXhpc3RpbmcgdGFza3Mgd2l0aG91dCBoYXZpbmcgdG8gcmUtZGVmaW5lIHRoZSB3aG9sZSB0YXNrLlxcXG4gICAqIEZpeGVkIGFyZ3MgYXJlIGFsd2F5cyBwYXNzZWQgdG8gdGhlIHN0ZXAsIGV2ZW4gaWYgYHJlY2VpdmVBcmdzYCBpcyBgZmFsc2VgXG4gICAqIGFuZCBhcmUgYWx3YXlzIHBhc3NlZCBiZWZvcmUgYW55IGFyZ3MgdGhlIHRhc2sgaXMgY2FsbGVkIHdpdGguXG4gICAqXG4gICAqIElmIHRoZSBzdGVwIGV4ZWN1dGVzIGEgc2hlbGwgY29tbWFuZHMsIGFyZ3MgYXJlIHBhc3NlZCB0aHJvdWdoIGF0IHRoZSBlbmQgb2YgdGhlIGBleGVjYCBzaGVsbCBjb21tYW5kLlxcXG4gICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgYXJncyBjYW4gYmUgY2hhbmdlZCBieSBpbmNsdWRpbmcgdGhlIG1hcmtlciBgJEBgIGluc2lkZSB0aGUgY29tbWFuZCBzdHJpbmcuXG4gICAqXG4gICAqIElmIHRoZSBzdGVwIHNwYXducyBhIHN1YnRhc2ssIGFyZ3MgYXJlIHBhc3NlZCB0byB0aGUgc3VidGFzay5cbiAgICogVGhlIHN1YnRhc2sgbXVzdCBkZWZpbmUgc3RlcHMgcmVjZWl2aW5nIGFyZ3MgZm9yIHRoaXMgdG8gaGF2ZSBhbnkgZWZmZWN0LlxuICAgKlxuICAgKiBJZiB0aGUgc3RlcCBjYWxscyBhIGJ1aWx0aW4gc2NyaXB0LCBhcmdzIGFyZSBwYXNzZWQgdG8gdGhlIHNjcmlwdC5cbiAgICogSXQgaXMgdXAgdG8gdGhlIHNjcmlwdCB0byB1c2Ugb3IgZGlzY2FyZCB0aGUgYXJndW1lbnRzLlxuICAgKlxuICAgKiBAZXhhbXBsZSB0YXNrLnNwYXduKFwiZGVwbG95XCIsIHsgYXJnczogW1wiLS1mb3JjZVwiXSB9KTtcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUgc3RlcFxuICAgKi9cbiAgcmVhZG9ubHkgYXJncz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIHN0ZXAgKGBleGVjYCBhbmQgYGJ1aWx0aW5gIG9ubHkpLlxuICAgKiBWYWx1ZXMgaW4gdGhpcyBtYXAgY2FuIGJlIHNpbXBsZSwgbGl0ZXJhbCB2YWx1ZXMgb3Igc2hlbGwgZXhwcmVzc2lvbnMgdGhhdCB3aWxsIGJlIGV2YWx1YXRlZCBhdCBydW50aW1lIGUuZy4gYCQoZWNobyBcImZvb1wiKWAuXG4gICAqXG4gICAqIEBleGFtcGxlIHsgXCJmb29cIjogXCJiYXJcIiwgXCJib29cIjogXCIkKGVjaG8gYmF6KVwiIH1cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGVmaW5lZCBpbiBzdGVwXG4gICAqL1xuICByZWFkb25seSBlbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogVGhlIHNoZWxsIHVzZWQgdG8gcnVuIHRoaXMgc3RlcCwgb3ZlcnJpZGluZyB0aGUgdGFzay9wcm9qZWN0IHNoZWxsLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBUYXNrQ29tbW9uT3B0aW9ucy5zaGVsbH1cbiAgICogQGRlZmF1bHQgLSB0aGUgdGFzaydzIChvciBwcm9qZWN0J3MpIHNoZWxsXG4gICAqL1xuICByZWFkb25seSBzaGVsbD86IFRhc2tTaGVsbDtcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBzdGVwIHdpdGhpbiBhIHRhc2suIFRoZSBzdGVwIGNvdWxkIGVpdGhlciBiZSAgdGhlIGV4ZWN1dGlvbiBvZiBhXG4gKiBzaGVsbCBjb21tYW5kIG9yIGV4ZWN1dGlvbiBvZiBhIHN1Yi10YXNrLCBieSBuYW1lLlxuICpcbiAqIFRoZSBgdGFza3MuanNvbmAgKG1hbmlmZXN0KSBmb3JtIG9mIGEgc3RlcC4ge0BsaW5rIFRhc2tTdGVwT3B0aW9uc30gaXMgdGhlXG4gKiBmb3JtIHVzZWQgdG8gZGVmaW5lIHN0ZXBzICh2aWEgYHRhc2suZXhlYygpYCBldGMuKTsgdGhleSBkaWZmZXIgb25seSBpbiB0aGVcbiAqIHJlbmRlcmVkIGBzaGVsbGAgZmllbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFza1N0ZXAge1xuICAvKipcbiAgICogU3RlcCBuYW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGlzIHN0ZXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGV0ZXJtaW5lZCBieSB0aGUgdGFza1xuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHNoZWxsIGNvbW1hbmQgd2hpY2ggZGV0ZXJtaW5lcyBpZiB0aGUgdGhpcyBzdGVwIHNob3VsZCBiZSBleGVjdXRlZC4gSWZcbiAgICogdGhlIHByb2dyYW0gZXhpdHMgd2l0aCBhIHplcm8gZXhpdCBjb2RlLCB0aGUgc3RlcCB3aWxsIGJlIGV4ZWN1dGVkLiBBIG5vbi16ZXJvXG4gICAqIGNvZGUgbWVhbnMgdGhlIHN0ZXAgd2lsbCBiZSBza2lwcGVkIChzdWJzZXF1ZW50IHRhc2sgc3RlcHMgd2lsbCBzdGlsbCBiZSBldmFsdWF0ZWQvZXhlY3V0ZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZGl0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgdGhpcyBzdGVwIHJlY2VpdmUgYXJncyBwYXNzZWQgdG8gdGhlIHRhc2suXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIFRhc2tTdGVwT3B0aW9ucy5yZWNlaXZlQXJnc31cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlY2VpdmVBcmdzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGZpeGVkIGFyZ3VtZW50cyBhbHdheXMgcGFzc2VkIHRvIHRoZSBzdGVwLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBUYXNrU3RlcE9wdGlvbnMuYXJnc31cbiAgICogQGRlZmF1bHQgLSBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUgc3RlcFxuICAgKi9cbiAgcmVhZG9ubHkgYXJncz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIHN0ZXAgKGBleGVjYCBhbmQgYGJ1aWx0aW5gIG9ubHkpLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBUYXNrU3RlcE9wdGlvbnMuZW52fVxuICAgKiBAZGVmYXVsdCAtIG5vIGVudmlyb25tZW50IHZhcmlhYmxlcyBkZWZpbmVkIGluIHN0ZXBcbiAgICovXG4gIHJlYWRvbmx5IGVudj86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBUaGUgc3RlcCBzaGVsbCBpbiBgdGFza3MuanNvbmAgZm9ybTogYSBrZXl3b3JkIChgXCJwcm9qZW5cImAgb3IgYFwic3lzdGVtXCJgKVxuICAgKiBvciBhbiBpbnZvY2F0aW9uIGFyZ3VtZW50IGxpc3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIHRhc2sncyAob3IgcHJvamVjdCdzKSBzaGVsbFxuICAgKi9cbiAgcmVhZG9ubHkgc2hlbGw/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU2hlbGwgY29tbWFuZCB0byBleGVjdXRlLlxuICAgKlxuICAgKiBUaGUgd2hvbGUgY29tbWFuZCBpcyBhIHNpbmdsZSBzaGVsbCBzdHJpbmcuIFRvIHBhc3MgYXJndW1lbnRzIGFzIGEgbGlzdFxuICAgKiBpbnN0ZWFkIC0gd2l0aG91dCBoYXZpbmcgdG8gcXVvdGUgc3BhY2VzIG9yIG90aGVyIGNoYXJhY3RlcnMgeW91cnNlbGYgLVxuICAgKiB1c2UgYGV4ZWNBcmdzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkb24ndCBleGVjdXRlIGEgc2hlbGwgY29tbWFuZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhlYz86IHN0cmluZztcblxuICAvKipcbiAgICogU2hlbGwgY29tbWFuZCB0byBleGVjdXRlLCBwcm92aWRlZCBhcyBhIGxpc3Qgb2YgdGhlIHByb2dyYW0gZm9sbG93ZWQgYnlcbiAgICogaXRzIGFyZ3VtZW50cyAoYW4gXCJhcmd2XCIpLlxuICAgKlxuICAgKiBPZnRlbiBtb3JlIGNvbnZlbmllbnQgdGhhbiBgZXhlY2A6IGVhY2ggZWxlbWVudCBpcyBwYXNzZWQgdG8gdGhlXG4gICAqIHByb2dyYW0gYXMtaXMsIHNvIGFyZ3VtZW50cyB3aXRoIHNwYWNlcyBvciBzcGVjaWFsIGNoYXJhY3RlcnMgZG9uJ3QgbmVlZFxuICAgKiBxdW90aW5nLiBGaXhlZCAoYGFyZ3NgKSBvciByZWNlaXZlZCAoYHJlY2VpdmVBcmdzYCkgYXJndW1lbnRzIGFyZSBpbnNlcnRlZFxuICAgKiB3aGVyZXZlciBhIGAkQGAgZWxlbWVudCBhcHBlYXJzLCBvciBhcHBlbmRlZCBhdCB0aGUgZW5kIGlmIHRoZXJlIGlzIG5vbmUuXG4gICAqXG4gICAqIFRoZSBlbGVtZW50cyBhcmUgbm90IHJ1biB0aHJvdWdoIGEgc2hlbGwsIHNvIGVudmlyb25tZW50IHZhcmlhYmxlcyAoYCRGT09gKVxuICAgKiBhcmUgbm90IGV4cGFuZGVkIGFuZCBvdGhlciBzaGVsbCBmZWF0dXJlcyBhcmUgdW5hdmFpbGFibGUuIFVzZSBgZXhlY2BcbiAgICogaWYgeW91IG5lZWQgdGhlbS5cbiAgICpcbiAgICogTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYGV4ZWNgLlxuICAgKlxuICAgKiBAZXhhbXBsZSB7IGV4ZWNBcmdzOiBbXCJlY2hvXCIsIFwiaGVsbG8gd29ybGRcIl0gfVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRvbid0IGV4ZWN1dGUgYSBzaGVsbCBjb21tYW5kXG4gICAqL1xuICByZWFkb25seSBleGVjQXJncz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTdWJ0YXNrIHRvIGV4ZWN1dGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkb24ndCBzcGF3biBhIHN1YnRhc2tcbiAgICovXG4gIHJlYWRvbmx5IHNwYXduPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcmludCBhIG1lc3NhZ2UuXG4gICAqIEBkZWZhdWx0IC0gZG9uJ3Qgc2F5IGFueXRoaW5nXG4gICAqL1xuICByZWFkb25seSBzYXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIGEgYnVpbHQtaW4gdGFzayB0byBleGVjdXRlLlxuICAgKlxuICAgKiBCdWlsdC1pbiB0YXNrcyBhcmUgbm9kZS5qcyBwcm9ncmFtcyBiYWtlZCBpbnRvIHRoZSBwcm9qZW4gbW9kdWxlIGFuZCBhc1xuICAgKiBjb21wb25lbnQgcnVudGltZSBoZWxwZXJzLlxuICAgKlxuICAgKiBUaGUgbmFtZSBpcyBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIHByb2plbiBsaWIvIGRpcmVjdG9yeSAod2l0aG91dCB0aGUgLnRhc2suanMgZXh0ZW5zaW9uKS5cbiAgICogRm9yIGV4YW1wbGUsIGlmIHlvdXIgYnVpbHQgaW4gYnVpbHRpbiB0YXNrIGlzIHVuZGVyIGBzcmMvcmVsZWFzZS9yZXNvbHZlLXZlcnNpb24udGFzay50c2AsXG4gICAqIHRoZW4gdGhpcyB3b3VsZCBiZSBgcmVsZWFzZS9yZXNvbHZlLXZlcnNpb25gLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRvIG5vdCBleGVjdXRlIGEgYnVpbHRpbiB0YXNrXG4gICAqL1xuICByZWFkb25seSBidWlsdGluPzogc3RyaW5nO1xufVxuIl19
@@ -0,0 +1,63 @@
1
+ /**
2
+ * The shell used to run a task's commands - including its `condition` and any
3
+ * `$(...)` environment-variable evaluation.
4
+ *
5
+ * Choose one of the built-in shells, or provide an explicit shell invocation:
6
+ *
7
+ * - {@link TaskShell.projen} (the default) - the built-in cross-platform shell.
8
+ * - {@link TaskShell.system} - the operating system's native shell.
9
+ * - {@link TaskShell.bash} / {@link TaskShell.sh} - common POSIX shells.
10
+ * - {@link TaskShell.command} - an arbitrary shell invocation given as an
11
+ * explicit argument list, e.g. `TaskShell.command(["npx", "-c"])`.
12
+ *
13
+ * A `shell` can be set at the project (tasks), task and step level, and the
14
+ * nearest declared level wins (it is a scalar override, not merged).
15
+ */
16
+ export declare class TaskShell {
17
+ private readonly value;
18
+ /**
19
+ * The built-in cross-platform shell (the default). It interprets POSIX-style
20
+ * task syntax (`mkdir -p`, `&&`, `$VAR`, ...) identically on every platform,
21
+ * including Windows.
22
+ */
23
+ static projen(): TaskShell;
24
+ /**
25
+ * The operating system's native shell (`/bin/sh` on POSIX, `cmd.exe` on
26
+ * Windows).
27
+ *
28
+ * Use this to opt out of the cross-platform shell and run commands through
29
+ * whatever shell the host provides.
30
+ */
31
+ static system(): TaskShell;
32
+ /**
33
+ * Runs commands through `bash -c`.
34
+ */
35
+ static bash(): TaskShell;
36
+ /**
37
+ * Runs commands through `sh -c`.
38
+ */
39
+ static sh(): TaskShell;
40
+ /**
41
+ * An arbitrary shell invocation, given as an explicit argument list. The task
42
+ * command is appended as the final argument, so the invocation must accept
43
+ * the command as its last argument (e.g. `bash -c`, `sh -c`, `npx -c`,
44
+ * `yarn exec`).
45
+ *
46
+ *
47
+ * @example TaskShell.command(["bash", "-c"]);
48
+ * @example TaskShell.command(["npx", "-c"]);
49
+ *
50
+ * @param command The shell program followed by its arguments. Must not be
51
+ * empty.
52
+ */
53
+ static command(command: string[]): TaskShell;
54
+ private constructor();
55
+ /**
56
+ * Renders the shell to its `tasks.json` representation: a built-in keyword
57
+ * string (`"projen"` or `"system"`) for the built-ins, or an explicit
58
+ * argument list for a custom shell invocation.
59
+ *
60
+ * @internal
61
+ */
62
+ _render(): string | string[];
63
+ }
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TaskShell = void 0;
4
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
+ /**
6
+ * The shell used to run a task's commands - including its `condition` and any
7
+ * `$(...)` environment-variable evaluation.
8
+ *
9
+ * Choose one of the built-in shells, or provide an explicit shell invocation:
10
+ *
11
+ * - {@link TaskShell.projen} (the default) - the built-in cross-platform shell.
12
+ * - {@link TaskShell.system} - the operating system's native shell.
13
+ * - {@link TaskShell.bash} / {@link TaskShell.sh} - common POSIX shells.
14
+ * - {@link TaskShell.command} - an arbitrary shell invocation given as an
15
+ * explicit argument list, e.g. `TaskShell.command(["npx", "-c"])`.
16
+ *
17
+ * A `shell` can be set at the project (tasks), task and step level, and the
18
+ * nearest declared level wins (it is a scalar override, not merged).
19
+ */
20
+ class TaskShell {
21
+ value;
22
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.TaskShell", version: "0.101.0" };
23
+ /**
24
+ * The built-in cross-platform shell (the default). It interprets POSIX-style
25
+ * task syntax (`mkdir -p`, `&&`, `$VAR`, ...) identically on every platform,
26
+ * including Windows.
27
+ */
28
+ static projen() {
29
+ return new TaskShell("projen");
30
+ }
31
+ /**
32
+ * The operating system's native shell (`/bin/sh` on POSIX, `cmd.exe` on
33
+ * Windows).
34
+ *
35
+ * Use this to opt out of the cross-platform shell and run commands through
36
+ * whatever shell the host provides.
37
+ */
38
+ static system() {
39
+ return new TaskShell("system");
40
+ }
41
+ /**
42
+ * Runs commands through `bash -c`.
43
+ */
44
+ static bash() {
45
+ return new TaskShell(["bash", "-c"]);
46
+ }
47
+ /**
48
+ * Runs commands through `sh -c`.
49
+ */
50
+ static sh() {
51
+ return new TaskShell(["sh", "-c"]);
52
+ }
53
+ /**
54
+ * An arbitrary shell invocation, given as an explicit argument list. The task
55
+ * command is appended as the final argument, so the invocation must accept
56
+ * the command as its last argument (e.g. `bash -c`, `sh -c`, `npx -c`,
57
+ * `yarn exec`).
58
+ *
59
+ *
60
+ * @example TaskShell.command(["bash", "-c"]);
61
+ * @example TaskShell.command(["npx", "-c"]);
62
+ *
63
+ * @param command The shell program followed by its arguments. Must not be
64
+ * empty.
65
+ */
66
+ static command(command) {
67
+ if (command.length === 0) {
68
+ throw new Error("TaskShell.command() requires at least the shell program");
69
+ }
70
+ return new TaskShell([...command]);
71
+ }
72
+ constructor(value) {
73
+ this.value = value;
74
+ }
75
+ /**
76
+ * Renders the shell to its `tasks.json` representation: a built-in keyword
77
+ * string (`"projen"` or `"system"`) for the built-ins, or an explicit
78
+ * argument list for a custom shell invocation.
79
+ *
80
+ * @internal
81
+ */
82
+ _render() {
83
+ return Array.isArray(this.value) ? [...this.value] : this.value;
84
+ }
85
+ }
86
+ exports.TaskShell = TaskShell;
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1zaGVsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90YXNrLXNoZWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQWEsU0FBUztJQXlEaUI7O0lBeERyQzs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE1BQU07UUFDbEIsT0FBTyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLE1BQU07UUFDbEIsT0FBTyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsSUFBSTtRQUNoQixPQUFPLElBQUksU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEVBQUU7UUFDZCxPQUFPLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBaUI7UUFDckMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ2IseURBQXlELENBQzFELENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsWUFBcUMsS0FBd0I7UUFBeEIsVUFBSyxHQUFMLEtBQUssQ0FBbUI7SUFBRyxDQUFDO0lBRWpFOzs7Ozs7T0FNRztJQUNJLE9BQU87UUFDWixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ2xFLENBQUM7O0FBcEVILDhCQXFFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIHNoZWxsIHVzZWQgdG8gcnVuIGEgdGFzaydzIGNvbW1hbmRzIC0gaW5jbHVkaW5nIGl0cyBgY29uZGl0aW9uYCBhbmQgYW55XG4gKiBgJCguLi4pYCBlbnZpcm9ubWVudC12YXJpYWJsZSBldmFsdWF0aW9uLlxuICpcbiAqIENob29zZSBvbmUgb2YgdGhlIGJ1aWx0LWluIHNoZWxscywgb3IgcHJvdmlkZSBhbiBleHBsaWNpdCBzaGVsbCBpbnZvY2F0aW9uOlxuICpcbiAqIC0ge0BsaW5rIFRhc2tTaGVsbC5wcm9qZW59ICh0aGUgZGVmYXVsdCkgLSB0aGUgYnVpbHQtaW4gY3Jvc3MtcGxhdGZvcm0gc2hlbGwuXG4gKiAtIHtAbGluayBUYXNrU2hlbGwuc3lzdGVtfSAtIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgbmF0aXZlIHNoZWxsLlxuICogLSB7QGxpbmsgVGFza1NoZWxsLmJhc2h9IC8ge0BsaW5rIFRhc2tTaGVsbC5zaH0gLSBjb21tb24gUE9TSVggc2hlbGxzLlxuICogLSB7QGxpbmsgVGFza1NoZWxsLmNvbW1hbmR9IC0gYW4gYXJiaXRyYXJ5IHNoZWxsIGludm9jYXRpb24gZ2l2ZW4gYXMgYW5cbiAqICAgZXhwbGljaXQgYXJndW1lbnQgbGlzdCwgZS5nLiBgVGFza1NoZWxsLmNvbW1hbmQoW1wibnB4XCIsIFwiLWNcIl0pYC5cbiAqXG4gKiBBIGBzaGVsbGAgY2FuIGJlIHNldCBhdCB0aGUgcHJvamVjdCAodGFza3MpLCB0YXNrIGFuZCBzdGVwIGxldmVsLCBhbmQgdGhlXG4gKiBuZWFyZXN0IGRlY2xhcmVkIGxldmVsIHdpbnMgKGl0IGlzIGEgc2NhbGFyIG92ZXJyaWRlLCBub3QgbWVyZ2VkKS5cbiAqL1xuZXhwb3J0IGNsYXNzIFRhc2tTaGVsbCB7XG4gIC8qKlxuICAgKiBUaGUgYnVpbHQtaW4gY3Jvc3MtcGxhdGZvcm0gc2hlbGwgKHRoZSBkZWZhdWx0KS4gSXQgaW50ZXJwcmV0cyBQT1NJWC1zdHlsZVxuICAgKiB0YXNrIHN5bnRheCAoYG1rZGlyIC1wYCwgYCYmYCwgYCRWQVJgLCAuLi4pIGlkZW50aWNhbGx5IG9uIGV2ZXJ5IHBsYXRmb3JtLFxuICAgKiBpbmNsdWRpbmcgV2luZG93cy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcHJvamVuKCk6IFRhc2tTaGVsbCB7XG4gICAgcmV0dXJuIG5ldyBUYXNrU2hlbGwoXCJwcm9qZW5cIik7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBuYXRpdmUgc2hlbGwgKGAvYmluL3NoYCBvbiBQT1NJWCwgYGNtZC5leGVgIG9uXG4gICAqIFdpbmRvd3MpLlxuICAgKlxuICAgKiBVc2UgdGhpcyB0byBvcHQgb3V0IG9mIHRoZSBjcm9zcy1wbGF0Zm9ybSBzaGVsbCBhbmQgcnVuIGNvbW1hbmRzIHRocm91Z2hcbiAgICogd2hhdGV2ZXIgc2hlbGwgdGhlIGhvc3QgcHJvdmlkZXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHN5c3RlbSgpOiBUYXNrU2hlbGwge1xuICAgIHJldHVybiBuZXcgVGFza1NoZWxsKFwic3lzdGVtXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgY29tbWFuZHMgdGhyb3VnaCBgYmFzaCAtY2AuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGJhc2goKTogVGFza1NoZWxsIHtcbiAgICByZXR1cm4gbmV3IFRhc2tTaGVsbChbXCJiYXNoXCIsIFwiLWNcIl0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgY29tbWFuZHMgdGhyb3VnaCBgc2ggLWNgLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzaCgpOiBUYXNrU2hlbGwge1xuICAgIHJldHVybiBuZXcgVGFza1NoZWxsKFtcInNoXCIsIFwiLWNcIl0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGFyYml0cmFyeSBzaGVsbCBpbnZvY2F0aW9uLCBnaXZlbiBhcyBhbiBleHBsaWNpdCBhcmd1bWVudCBsaXN0LiBUaGUgdGFza1xuICAgKiBjb21tYW5kIGlzIGFwcGVuZGVkIGFzIHRoZSBmaW5hbCBhcmd1bWVudCwgc28gdGhlIGludm9jYXRpb24gbXVzdCBhY2NlcHRcbiAgICogdGhlIGNvbW1hbmQgYXMgaXRzIGxhc3QgYXJndW1lbnQgKGUuZy4gYGJhc2ggLWNgLCBgc2ggLWNgLCBgbnB4IC1jYCxcbiAgICogYHlhcm4gZXhlY2ApLlxuICAgKlxuICAgKlxuICAgKiBAZXhhbXBsZSBUYXNrU2hlbGwuY29tbWFuZChbXCJiYXNoXCIsIFwiLWNcIl0pO1xuICAgKiBAZXhhbXBsZSBUYXNrU2hlbGwuY29tbWFuZChbXCJucHhcIiwgXCItY1wiXSk7XG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIFRoZSBzaGVsbCBwcm9ncmFtIGZvbGxvd2VkIGJ5IGl0cyBhcmd1bWVudHMuIE11c3Qgbm90IGJlXG4gICAqIGVtcHR5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb21tYW5kKGNvbW1hbmQ6IHN0cmluZ1tdKTogVGFza1NoZWxsIHtcbiAgICBpZiAoY29tbWFuZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUYXNrU2hlbGwuY29tbWFuZCgpIHJlcXVpcmVzIGF0IGxlYXN0IHRoZSBzaGVsbCBwcm9ncmFtXCIsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRhc2tTaGVsbChbLi4uY29tbWFuZF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSkge31cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgc2hlbGwgdG8gaXRzIGB0YXNrcy5qc29uYCByZXByZXNlbnRhdGlvbjogYSBidWlsdC1pbiBrZXl3b3JkXG4gICAqIHN0cmluZyAoYFwicHJvamVuXCJgIG9yIGBcInN5c3RlbVwiYCkgZm9yIHRoZSBidWlsdC1pbnMsIG9yIGFuIGV4cGxpY2l0XG4gICAqIGFyZ3VtZW50IGxpc3QgZm9yIGEgY3VzdG9tIHNoZWxsIGludm9jYXRpb24uXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9yZW5kZXIoKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpID8gWy4uLnRoaXMudmFsdWVdIDogdGhpcy52YWx1ZTtcbiAgfVxufVxuIl19
package/lib/task.d.ts CHANGED
@@ -1,10 +1,29 @@
1
1
  import type { TaskCommonOptions, TaskSpec, TaskStep, TaskStepOptions } from "./task-model";
2
+ import type { TaskShell } from "./task-shell";
2
3
  export interface TaskOptions extends TaskCommonOptions {
3
4
  /**
4
5
  * Shell command to execute as the first command of the task.
6
+ *
7
+ * Mutually exclusive with `execArgs`.
8
+ *
5
9
  * @default - add steps using `task.exec(command)` or `task.spawn(subtask)`
6
10
  */
7
11
  readonly exec?: string;
12
+ /**
13
+ * Shell command to execute as the first command of the task, provided as a
14
+ * list of the program followed by its arguments (an "argv").
15
+ *
16
+ * A convenient alternative to `exec`: arguments with spaces or special
17
+ * characters are passed through as-is, with no quoting needed. The elements
18
+ * are not run through a shell, so environment variables (`$FOO`) are not
19
+ * expanded and other shell features are unavailable.
20
+ * @see TaskStep.execArgs
21
+ *
22
+ * Mutually exclusive with `exec`.
23
+ *
24
+ * @default - add steps using `task.execArgs(args)`, `task.exec(command)` or `task.spawn(subtask)`
25
+ */
26
+ readonly execArgs?: string[];
8
27
  /**
9
28
  * List of task steps to run.
10
29
  */
@@ -37,6 +56,7 @@ export declare class Task {
37
56
  private readonly _steps;
38
57
  private readonly _env;
39
58
  private _cwd?;
59
+ private _shell?;
40
60
  private readonly requiredEnv?;
41
61
  private _locked;
42
62
  private _description?;
@@ -53,6 +73,16 @@ export declare class Task {
53
73
  * Sets the working directory for this task.
54
74
  */
55
75
  set cwd(cwd: string | undefined);
76
+ /**
77
+ * The shell used to run this task's commands, or `undefined` when inheriting
78
+ * the built-in default shell.
79
+ * @see {@link TaskCommonOptions.shell}
80
+ */
81
+ get shell(): TaskShell | undefined;
82
+ /**
83
+ * Sets the shell used to run this task's commands.
84
+ */
85
+ set shell(shell: TaskShell | undefined);
56
86
  /**
57
87
  * Returns the description of this task.
58
88
  */
@@ -92,6 +122,21 @@ export declare class Task {
92
122
  * @param options Options
93
123
  */
94
124
  exec(command: string, options?: TaskStepOptions): void;
125
+ /**
126
+ * Executes a command provided as a list of the program followed by its
127
+ * arguments (an "argv").
128
+ *
129
+ * A convenient alternative to `Task.exec`: arguments with spaces or
130
+ * special characters are passed through as-is, with no quoting needed. The
131
+ * elements are not run through a shell, so environment variables (`$FOO`) are
132
+ * not expanded and other shell features are unavailable.
133
+ *
134
+ * @example task.execArgs(["echo", "hello world"]);
135
+ *
136
+ * @param command The program followed by its arguments.
137
+ * @param options Options
138
+ */
139
+ execArgs(command: string[], options?: TaskStepOptions): void;
95
140
  /**
96
141
  * Execute a builtin task.
97
142
  *
@@ -123,9 +168,9 @@ export declare class Task {
123
168
  prependSteps(...steps: TaskStep[]): void;
124
169
  /**
125
170
  * Adds a command at the beginning of the task.
126
- * @param shell The command to add.
171
+ * @param command The command to add.
127
172
  */
128
- prependExec(shell: string, options?: TaskStepOptions): void;
173
+ prependExec(command: string, options?: TaskStepOptions): void;
129
174
  /**
130
175
  * Adds a spawn instruction at the beginning of the task.
131
176
  * @param subtask The subtask to execute.
@@ -136,6 +181,11 @@ export declare class Task {
136
181
  * @param message Your message
137
182
  */
138
183
  prependSay(message: string, options?: TaskStepOptions): void;
184
+ /**
185
+ * Renders step options (with a {@link TaskShell}) to the manifest
186
+ * {@link TaskStep} form, where `shell` is its `string | string[]` rendering.
187
+ */
188
+ private renderStep;
139
189
  private _pushSteps;
140
190
  private _unshiftSteps;
141
191
  /**