@jahed/terraform
Version:
A wrapper which downloads and runs Terraform locally via npm.
34 lines (33 loc) • 1.58 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.downloadTerraformToMemory = void 0;
const promises_1 = require("@jahed/promises");
const crypto_1 = __importDefault(require("crypto"));
const download_1 = require("./download");
const getArchitecture_1 = require("./getArchitecture");
const getDownloadUrl_1 = require("./getDownloadUrl");
const getExpectedHash_1 = require("./getExpectedHash");
const getPlatform_1 = require("./getPlatform");
const getVersion_1 = require("./getVersion");
const downloadTerraformToMemory = (0, promises_1.waterfall)((outputs) => {
return (0, promises_1.every)({
version: (0, getVersion_1.getVersion)(outputs),
platform: (0, getPlatform_1.getPlatform)(),
architecture: (0, getArchitecture_1.getArchitecture)(),
});
}, (args) => {
return (0, promises_1.every)({
buffer: (0, promises_1.waterfall)(() => (0, getDownloadUrl_1.getDownloadUrl)(args), (url) => (0, download_1.download)({ url }))(""),
expectedHash: (0, getExpectedHash_1.getExpectedHash)(args),
});
}, ({ buffer, expectedHash }) => {
const hash = crypto_1.default.createHash("sha256").update(buffer).digest("hex");
if (hash !== expectedHash) {
return (0, promises_1.rejected)((0, promises_1.reason)("downloaded archive hash did not match expected hash"));
}
return buffer;
});
exports.downloadTerraformToMemory = downloadTerraformToMemory;