UNPKG

@jahed/terraform

Version:

A wrapper which downloads and runs Terraform locally via npm.

66 lines (65 loc) 2.78 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.extractArchive = void 0; const promises_1 = require("@jahed/promises"); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const yauzl_1 = __importDefault(require("yauzl")); const debug_1 = require("./debug"); const extractArchive = ({ outputs, buffer, outdir }) => { (0, debug_1.debug)("extracting", { outdir }); return (0, promises_1.eventually)((resolve, reject) => { yauzl_1.default.fromBuffer(buffer, { lazyEntries: true }, (err, archive) => { if (err) { reject(err); return; } if (!archive) { // bad @types/yauzl reject(new Error("failed to read archive and no reason was given.")); return; } archive.on("error", (error) => reject(error)); archive.on("entry", (entry) => { if (entry.fileName !== outputs.originalFilename) { // ignore LICENSE.txt and any other additional files archive.readEntry(); return; } archive.openReadStream(entry, (err, readStream) => { if (err) { reject(err); return; } if (!readStream) { // bad @types/yauzl reject(new Error("failed to read archive entry and no reason was given.")); return; } const filePath = path_1.default.resolve(outdir, outputs.versionedFilename); const fileStream = fs_1.default.createWriteStream(filePath); readStream.on("error", (error) => reject(error)); readStream.on("end", () => { archive.close(); fileStream.close((error) => { if (error) { reject(error); return; } resolve(filePath); }); }); readStream.pipe(fileStream); }); }); archive.on("end", () => { reject((0, promises_1.reason)(`expected zip to contain a terraform executable. (${outputs.originalFilename})`)); }); archive.readEntry(); }); }); }; exports.extractArchive = extractArchive;