@hashgraph/solo
Version:
An opinionated CLI tool to deploy and manage private Hedera Networks.
192 lines • 6.93 kB
JavaScript
// SPDX-License-Identifier: Apache-2.0
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
var KindExecutionBuilder_1;
import { KindExecution } from './kind-execution.js';
import { InjectTokens } from '../../../core/dependency-injection/inject-tokens.js';
import { patchInject } from '../../../core/dependency-injection/container-helper.js';
import { inject, injectable } from 'tsyringe-neo';
import { ExecutionBuilder } from '../../execution-builder.js';
/**
* A builder for creating a kind command execution.
*/
let KindExecutionBuilder = class KindExecutionBuilder extends ExecutionBuilder {
static { KindExecutionBuilder_1 = this; }
kindInstallationDirectory;
static NAME_MUST_NOT_BE_NULL = 'name must not be null';
static VALUE_MUST_NOT_BE_NULL = 'value must not be null';
/**
* The path to the kind executable.
*/
kindExecutable;
/**
* The list of subcommands to be used when execute the kind command.
*/
_subcommands = [];
/**
* The arguments to be passed to the kind command.
*/
_arguments = new Map();
/**
* The list of options and a list of their one or more values.
*/
_optionsWithMultipleValues = [];
/**
* The flags to be passed to the kind command.
*/
_flags = [];
/**
* The positional arguments to be passed to the kind command.
*/
_positionals = [];
/**
* The environment variables to be set when executing the kind command.
*/
_environmentVariables = new Map();
/**
* Creates a new KindExecutionBuilder instance.
*/
constructor(kindInstallationDirectory) {
super();
this.kindInstallationDirectory = kindInstallationDirectory;
this.kindInstallationDirectory = patchInject(kindInstallationDirectory, InjectTokens.KindInstallationDirectory, KindExecutionBuilder_1.name);
}
executable(kindExecutable) {
if (!kindExecutable) {
throw new Error('kindExecutable must not be null');
}
this.kindExecutable = kindExecutable;
return this;
}
/**
* Adds the list of subcommands to the kind execution.
* @param commands the list of subcommands to be added
* @returns this builder
*/
subcommands(...commands) {
if (!commands || commands.length === 0) {
throw new Error('commands must not be null');
}
this._subcommands.push(...commands);
return this;
}
/**
* Adds an argument to the kind execution.
* @param name the name of the argument
* @param value the value of the argument
* @returns this builder
*/
argument(name, value) {
if (!name) {
throw new Error(KindExecutionBuilder_1.NAME_MUST_NOT_BE_NULL);
}
if (!value) {
throw new Error(KindExecutionBuilder_1.VALUE_MUST_NOT_BE_NULL);
}
this._arguments.set(name, value);
return this;
}
/**
* Adds an option with multiple values to the kind execution.
* @param name the name of the option
* @param value the list of values for the option
* @returns this builder
*/
optionsWithMultipleValues(name, value) {
if (!name) {
throw new Error(KindExecutionBuilder_1.NAME_MUST_NOT_BE_NULL);
}
if (!value) {
throw new Error(KindExecutionBuilder_1.VALUE_MUST_NOT_BE_NULL);
}
this._optionsWithMultipleValues.push({ key: name, value });
return this;
}
/**
* Adds a positional argument to the kind execution.
* @param value the value of the positional argument
* @returns this builder
*/
positional(value) {
if (!value) {
throw new Error(KindExecutionBuilder_1.VALUE_MUST_NOT_BE_NULL);
}
this._positionals.push(value);
return this;
}
/**
* Adds an environment variable to the kind execution.
* @param name the name of the environment variable
* @param value the value of the environment variable
* @returns this builder
*/
environmentVariable(name, value) {
if (!name) {
throw new Error(KindExecutionBuilder_1.NAME_MUST_NOT_BE_NULL);
}
if (!value) {
throw new Error(KindExecutionBuilder_1.VALUE_MUST_NOT_BE_NULL);
}
this._environmentVariables.set(name, value);
return this;
}
/**
* Adds a flag to the kind execution.
* @param flag the flag to be added
* @returns this builder
*/
flag(flag) {
if (!flag) {
throw new Error('flag must not be null');
}
this._flags.push(flag);
return this;
}
/**
* Builds the KindExecution instance.
* @returns the KindExecution instance
*/
build() {
const command = this.buildCommand();
const environment = { ...process.env };
for (const [key, value] of this._environmentVariables.entries()) {
environment[key] = value;
}
this.prefixPath(environment, this.kindInstallationDirectory);
return new KindExecution(command, environment);
}
/**
* Builds the command array for the kind execution.
* @returns the command array
*/
buildCommand() {
const command = [`${this.kindExecutable}`, ...this._subcommands, ...this._flags];
for (const [key, value] of this._arguments.entries()) {
command.push(`--${key}`, value);
}
for (const entry of this._optionsWithMultipleValues) {
for (const value of entry.value) {
command.push(`--${entry.key}`, value);
}
}
command.push(...this._positionals);
return command;
}
};
KindExecutionBuilder = KindExecutionBuilder_1 = __decorate([
injectable(),
__param(0, inject(InjectTokens.KindInstallationDirectory)),
__metadata("design:paramtypes", [String])
], KindExecutionBuilder);
export { KindExecutionBuilder };
//# sourceMappingURL=kind-execution-builder.js.map