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); }
};
/**
 * Copyright (C) 2024 Hedera Hashgraph, LLC
 *
 * Licensed under the Apache License, Version 2.0 (the ""License"");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an ""AS IS"" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
import * as constants from './constants.js';
import { ShellRunner } from './shell_runner.js';
import { Templates } from './templates.js';
import { inject, injectable } from 'tsyringe-neo';
import { patchInject } from './container_helper.js';
let Helm = class Helm extends ShellRunner {
    osPlatform;
    helmPath;
    constructor(osPlatform) {
        super();
        this.osPlatform = osPlatform;
        this.osPlatform = patchInject(osPlatform, 'osPlatform', this.constructor.name);
        this.helmPath = Templates.installationPath(constants.HELM, this.osPlatform);
    }
    /**
     * Prepare a `helm` shell command string
     * @param action - represents a helm command (e.g. create | install | get )
     * @param args - args of the command
     */
    prepareCommand(action, ...args) {
        let cmd = `${this.helmPath} ${action}`;
        args.forEach(arg => {
            cmd += ` ${arg}`;
        });
        return cmd;
    }
    /**
     * Invoke `helm install` command
     * @param args - args of the command
     * @returns console output as an array of strings
     */
    install(...args) {
        return this.run(this.prepareCommand('install', ...args), true);
    }
    /**
     * Invoke `helm uninstall` command
     * @param args - args of the command
     * @returns console output as an array of strings
     */
    uninstall(...args) {
        return this.run(this.prepareCommand('uninstall', ...args), true);
    }
    /**
     * Invoke `helm upgrade` command
     * @param args - args of the command
     * @returns console output as an array of strings
     */
    upgrade(...args) {
        return this.run(this.prepareCommand('upgrade', ...args), true);
    }
    /**
     * Invoke `helm list` command
     * @param args - args of the command
     * @returns console output as an array of strings
     */
    list(...args) {
        return this.run(this.prepareCommand('list', ...args));
    }
    /**
     * Invoke `helm dependency` command
     * @param subCommand - sub-command
     * @param args - args of the command
     * @returns console output as an array of strings
     */
    dependency(subCommand, ...args) {
        return this.run(this.prepareCommand('dependency', subCommand, ...args));
    }
    /**
     * Invoke `helm repo` command
     * @param subCommand - sub-command
     * @param args - args of the command
     * @returns console output as an array of strings
     */
    repo(subCommand, ...args) {
        return this.run(this.prepareCommand('repo', subCommand, ...args));
    }
    /** Get helm version */
    version(args = ['--short']) {
        return this.run(this.prepareCommand('version', ...args));
    }
};
Helm = __decorate([
    injectable(),
    __param(0, inject('osPlatform')),
    __metadata("design:paramtypes", [String])
], Helm);
export { Helm };
//# sourceMappingURL=helm.js.map