projen
Version:
CDK for software projects
90 lines • 8.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TaskShell = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
/**
* The shell used to run a task's commands - including its `condition` and any
* `$(...)` environment-variable evaluation.
*
* Choose one of the built-in shells, or provide an explicit shell invocation:
*
* - {@link TaskShell.projen} (the default) - the built-in cross-platform shell.
* - {@link TaskShell.system} - the operating system's native shell.
* - {@link TaskShell.bash} / {@link TaskShell.sh} - common POSIX shells.
* - {@link TaskShell.command} - an arbitrary shell invocation given as an
* explicit argument list, e.g. `TaskShell.command(["npx", "-c"])`.
*
* A `shell` can be set at the project (tasks), task and step level, and the
* nearest declared level wins (it is a scalar override, not merged).
*/
class TaskShell {
value;
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.TaskShell", version: "0.103.12" };
/**
* The built-in cross-platform shell (the default). It interprets POSIX-style
* task syntax (`mkdir -p`, `&&`, `$VAR`, ...) identically on every platform,
* including Windows.
*/
static projen() {
return new TaskShell("projen");
}
/**
* The operating system's native shell (`/bin/sh` on POSIX, `cmd.exe` on
* Windows).
*
* Use this to opt out of the cross-platform shell and run commands through
* whatever shell the host provides.
*
* Steps given as an argv (`execArgs`) are spawned without a shell, so on
* Windows they cannot run `.cmd`/`.bat` shims such as npm-installed CLIs.
*/
static system() {
return new TaskShell("system");
}
/**
* Runs commands through `bash -c`.
*/
static bash() {
return new TaskShell(["bash", "-c"]);
}
/**
* Runs commands through `sh -c`.
*/
static sh() {
return new TaskShell(["sh", "-c"]);
}
/**
* An arbitrary shell invocation, given as an explicit argument list. The task
* command is appended as the final argument, so the invocation must accept
* the command as its last argument (e.g. `bash -c`, `sh -c`, `npx -c`,
* `yarn exec`).
*
*
* @example TaskShell.command(["bash", "-c"]);
* @example TaskShell.command(["npx", "-c"]);
*
* @param command The shell program followed by its arguments. Must not be
* empty.
*/
static command(command) {
if (command.length === 0) {
throw new Error("TaskShell.command() requires at least the shell program");
}
return new TaskShell([...command]);
}
constructor(value) {
this.value = value;
}
/**
* Renders the shell to its `tasks.json` representation: a built-in keyword
* string (`"projen"` or `"system"`) for the built-ins, or an explicit
* argument list for a custom shell invocation.
*
* @internal
*/
_render() {
return Array.isArray(this.value) ? [...this.value] : this.value;
}
}
exports.TaskShell = TaskShell;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1zaGVsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90YXNrLXNoZWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQWEsU0FBUztJQTREaUI7O0lBM0RyQzs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE1BQU07UUFDbEIsT0FBTyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksTUFBTSxDQUFDLE1BQU07UUFDbEIsT0FBTyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsSUFBSTtRQUNoQixPQUFPLElBQUksU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEVBQUU7UUFDZCxPQUFPLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBaUI7UUFDckMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ2IseURBQXlELENBQzFELENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsWUFBcUMsS0FBd0I7UUFBeEIsVUFBSyxHQUFMLEtBQUssQ0FBbUI7SUFBRyxDQUFDO0lBRWpFOzs7Ozs7T0FNRztJQUNJLE9BQU87UUFDWixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ2xFLENBQUM7O0FBdkVILDhCQXdFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIHNoZWxsIHVzZWQgdG8gcnVuIGEgdGFzaydzIGNvbW1hbmRzIC0gaW5jbHVkaW5nIGl0cyBgY29uZGl0aW9uYCBhbmQgYW55XG4gKiBgJCguLi4pYCBlbnZpcm9ubWVudC12YXJpYWJsZSBldmFsdWF0aW9uLlxuICpcbiAqIENob29zZSBvbmUgb2YgdGhlIGJ1aWx0LWluIHNoZWxscywgb3IgcHJvdmlkZSBhbiBleHBsaWNpdCBzaGVsbCBpbnZvY2F0aW9uOlxuICpcbiAqIC0ge0BsaW5rIFRhc2tTaGVsbC5wcm9qZW59ICh0aGUgZGVmYXVsdCkgLSB0aGUgYnVpbHQtaW4gY3Jvc3MtcGxhdGZvcm0gc2hlbGwuXG4gKiAtIHtAbGluayBUYXNrU2hlbGwuc3lzdGVtfSAtIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgbmF0aXZlIHNoZWxsLlxuICogLSB7QGxpbmsgVGFza1NoZWxsLmJhc2h9IC8ge0BsaW5rIFRhc2tTaGVsbC5zaH0gLSBjb21tb24gUE9TSVggc2hlbGxzLlxuICogLSB7QGxpbmsgVGFza1NoZWxsLmNvbW1hbmR9IC0gYW4gYXJiaXRyYXJ5IHNoZWxsIGludm9jYXRpb24gZ2l2ZW4gYXMgYW5cbiAqICAgZXhwbGljaXQgYXJndW1lbnQgbGlzdCwgZS5nLiBgVGFza1NoZWxsLmNvbW1hbmQoW1wibnB4XCIsIFwiLWNcIl0pYC5cbiAqXG4gKiBBIGBzaGVsbGAgY2FuIGJlIHNldCBhdCB0aGUgcHJvamVjdCAodGFza3MpLCB0YXNrIGFuZCBzdGVwIGxldmVsLCBhbmQgdGhlXG4gKiBuZWFyZXN0IGRlY2xhcmVkIGxldmVsIHdpbnMgKGl0IGlzIGEgc2NhbGFyIG92ZXJyaWRlLCBub3QgbWVyZ2VkKS5cbiAqL1xuZXhwb3J0IGNsYXNzIFRhc2tTaGVsbCB7XG4gIC8qKlxuICAgKiBUaGUgYnVpbHQtaW4gY3Jvc3MtcGxhdGZvcm0gc2hlbGwgKHRoZSBkZWZhdWx0KS4gSXQgaW50ZXJwcmV0cyBQT1NJWC1zdHlsZVxuICAgKiB0YXNrIHN5bnRheCAoYG1rZGlyIC1wYCwgYCYmYCwgYCRWQVJgLCAuLi4pIGlkZW50aWNhbGx5IG9uIGV2ZXJ5IHBsYXRmb3JtLFxuICAgKiBpbmNsdWRpbmcgV2luZG93cy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcHJvamVuKCk6IFRhc2tTaGVsbCB7XG4gICAgcmV0dXJuIG5ldyBUYXNrU2hlbGwoXCJwcm9qZW5cIik7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBuYXRpdmUgc2hlbGwgKGAvYmluL3NoYCBvbiBQT1NJWCwgYGNtZC5leGVgIG9uXG4gICAqIFdpbmRvd3MpLlxuICAgKlxuICAgKiBVc2UgdGhpcyB0byBvcHQgb3V0IG9mIHRoZSBjcm9zcy1wbGF0Zm9ybSBzaGVsbCBhbmQgcnVuIGNvbW1hbmRzIHRocm91Z2hcbiAgICogd2hhdGV2ZXIgc2hlbGwgdGhlIGhvc3QgcHJvdmlkZXMuXG4gICAqXG4gICAqIFN0ZXBzIGdpdmVuIGFzIGFuIGFyZ3YgKGBleGVjQXJnc2ApIGFyZSBzcGF3bmVkIHdpdGhvdXQgYSBzaGVsbCwgc28gb25cbiAgICogV2luZG93cyB0aGV5IGNhbm5vdCBydW4gYC5jbWRgL2AuYmF0YCBzaGltcyBzdWNoIGFzIG5wbS1pbnN0YWxsZWQgQ0xJcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3lzdGVtKCk6IFRhc2tTaGVsbCB7XG4gICAgcmV0dXJuIG5ldyBUYXNrU2hlbGwoXCJzeXN0ZW1cIik7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBjb21tYW5kcyB0aHJvdWdoIGBiYXNoIC1jYC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYmFzaCgpOiBUYXNrU2hlbGwge1xuICAgIHJldHVybiBuZXcgVGFza1NoZWxsKFtcImJhc2hcIiwgXCItY1wiXSk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBjb21tYW5kcyB0aHJvdWdoIGBzaCAtY2AuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNoKCk6IFRhc2tTaGVsbCB7XG4gICAgcmV0dXJuIG5ldyBUYXNrU2hlbGwoW1wic2hcIiwgXCItY1wiXSk7XG4gIH1cblxuICAvKipcbiAgICogQW4gYXJiaXRyYXJ5IHNoZWxsIGludm9jYXRpb24sIGdpdmVuIGFzIGFuIGV4cGxpY2l0IGFyZ3VtZW50IGxpc3QuIFRoZSB0YXNrXG4gICAqIGNvbW1hbmQgaXMgYXBwZW5kZWQgYXMgdGhlIGZpbmFsIGFyZ3VtZW50LCBzbyB0aGUgaW52b2NhdGlvbiBtdXN0IGFjY2VwdFxuICAgKiB0aGUgY29tbWFuZCBhcyBpdHMgbGFzdCBhcmd1bWVudCAoZS5nLiBgYmFzaCAtY2AsIGBzaCAtY2AsIGBucHggLWNgLFxuICAgKiBgeWFybiBleGVjYCkuXG4gICAqXG4gICAqXG4gICAqIEBleGFtcGxlIFRhc2tTaGVsbC5jb21tYW5kKFtcImJhc2hcIiwgXCItY1wiXSk7XG4gICAqIEBleGFtcGxlIFRhc2tTaGVsbC5jb21tYW5kKFtcIm5weFwiLCBcIi1jXCJdKTtcbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgVGhlIHNoZWxsIHByb2dyYW0gZm9sbG93ZWQgYnkgaXRzIGFyZ3VtZW50cy4gTXVzdCBub3QgYmVcbiAgICogZW1wdHkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbW1hbmQoY29tbWFuZDogc3RyaW5nW10pOiBUYXNrU2hlbGwge1xuICAgIGlmIChjb21tYW5kLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRhc2tTaGVsbC5jb21tYW5kKCkgcmVxdWlyZXMgYXQgbGVhc3QgdGhlIHNoZWxsIHByb2dyYW1cIixcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgVGFza1NoZWxsKFsuLi5jb21tYW5kXSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7fVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBzaGVsbCB0byBpdHMgYHRhc2tzLmpzb25gIHJlcHJlc2VudGF0aW9uOiBhIGJ1aWx0LWluIGtleXdvcmRcbiAgICogc3RyaW5nIChgXCJwcm9qZW5cImAgb3IgYFwic3lzdGVtXCJgKSBmb3IgdGhlIGJ1aWx0LWlucywgb3IgYW4gZXhwbGljaXRcbiAgICogYXJndW1lbnQgbGlzdCBmb3IgYSBjdXN0b20gc2hlbGwgaW52b2NhdGlvbi5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3JlbmRlcigpOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyBbLi4udGhpcy52YWx1ZV0gOiB0aGlzLnZhbHVlO1xuICB9XG59XG4iXX0=