UNPKG

ng-afelio

Version:
86 lines (85 loc) 3.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GitlabConnector = void 0; const node_fetch_1 = require("node-fetch"); const fs_extra_1 = require("fs-extra"); const promises_1 = require("fs/promises"); // import { createReadStream } from 'fs'; const path_1 = require("path"); // import { Extract } from 'unzipper'; const decompress = require("decompress"); const colors = require("colors"); const connector_1 = require("./connector"); class GitlabConnector extends connector_1.PluginConnector { getReleases() { return (0, node_fetch_1.default)(`${this.url}/repository/tags`, { headers: this.buildHeader(this.token) }) .then(res => res.json()) .then((res) => { return res.map((r) => { return { versionName: r.name, commitId: r.target, config: JSON.parse(r.release.description) }; }); }) .catch(e => { if (e instanceof node_fetch_1.FetchError && e.code === 'ENOTFOUND') { console.error(`${colors.red('Repo not accessible.')} ${colors.cyan('Check your VPN ;)')}`); } else { throw e; } return []; }); } async download(release, tempPath) { (0, fs_extra_1.removeSync)(tempPath); (0, fs_extra_1.mkdirSync)(tempPath); const res = await (0, node_fetch_1.default)(`${this.url}/repository/archive.zip?sha=${release.commitId}`, { headers: this.buildHeader(this.token) }); const tmpPath = (0, path_1.join)(tempPath, 'tmp'); // await new Promise((resolve, reject) => { // if (res && res.body) { // res.body.pipe(Extract({ path: tmpPath })) // res.body.on('error', reject); // res.body.on('close', resolve); // } else { // reject('No body on response.'); // } // }); const buffer = await res.buffer(); const tempZipFilename = (0, path_1.join)(tempPath, 'tmp.zip'); await (0, promises_1.writeFile)(tempZipFilename, buffer); // await createReadStream(tempZipFilename) // .pipe(Extract({ path: tmpPath })) // .promise(); await decompress(tempZipFilename, tmpPath); (0, fs_extra_1.removeSync)(tempZipFilename); // Wait until extract is really ended // await new Promise(resolve => { setTimeout(() => resolve(null), 1000) }); const elements = (0, fs_extra_1.readdirSync)(tmpPath, { withFileTypes: true }); const tempExtractName = elements[0].name; await new Promise((resolve, reject) => { (0, fs_extra_1.copy)((0, path_1.join)(tmpPath, tempExtractName), `${tempPath}`, { recursive: true }, (error) => { if (error) { reject(error); } resolve(null); }); }); (0, fs_extra_1.removeSync)(tmpPath); } buildHeader(token) { if (token) { return { 'PRIVATE-TOKEN': token }; } return {}; } } exports.GitlabConnector = GitlabConnector;