shellcheck
Version:
Wrapper to download shellcheck
127 lines (126 loc) • 5.27 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.requestJSON = exports.requestDownload = exports.request = void 0;
const node_fs_1 = __importDefault(require("node:fs"));
const node_https_1 = __importDefault(require("node:https"));
const global_agent_1 = require("global-agent");
const errors_1 = require("../errors");
const logger_1 = require("../logger");
// Proxy global agent
(0, global_agent_1.bootstrap)({ environmentVariableNamespace: '' });
/**
* Request.
*
* @param args - Arguments.
* @returns T.
*/
function request(args) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
const opts = {
url: args.url,
userAgent: (_a = args.userAgent) !== null && _a !== void 0 ? _a : 'Node.js',
token: args.token,
cb: args.cb
};
logger_1.logger.debug(`Request: ${JSON.stringify(opts)}`);
return new Promise((resolve, reject) => {
node_https_1.default
.get(opts.url, {
headers: Object.assign({ 'User-Agent': opts.userAgent }, (opts.token && { Authorization: `Bearer ${opts.token}` }))
}, (res) => __awaiter(this, void 0, void 0, function* () {
var _a, _b;
const statusCode = (_a = res.statusCode) !== null && _a !== void 0 ? _a : 0;
if (statusCode >= 400) {
reject(new errors_1.RequestError(`Status code '${statusCode}' and message '${(_b = res.statusMessage) !== null && _b !== void 0 ? _b : ''}'`));
}
else if (statusCode >= 300 &&
statusCode < 400 &&
res.headers.location) {
// Redirect
try {
logger_1.logger.debug(`Redirect from '${opts.url}' to '${res.headers.location}'`);
resolve(yield request(Object.assign(Object.assign({}, opts), { url: new URL(res.headers.location) })));
}
catch (err) {
reject(new errors_1.RequestError(`${err}`));
}
}
else {
res.on('error', (err) => reject(new errors_1.RequestError(`${err}`)));
try {
resolve(yield opts.cb(res));
}
catch (err) {
reject(new errors_1.RequestError(`${err}`));
}
}
}))
.on('error', (err) => reject(new errors_1.RequestError(`${err}`)));
});
});
}
exports.request = request;
/**
* Request download.
*
* @param args - Arguments.
*/
function requestDownload(args) {
return __awaiter(this, void 0, void 0, function* () {
logger_1.logger.debug(`Request download: ${JSON.stringify(args)}`);
return request(Object.assign(Object.assign({}, args), { cb: (res) => new Promise((resolve, reject) => {
const fileStream = node_fs_1.default
.createWriteStream(args.destination)
.on('error', (err) => reject(new errors_1.RequestError(`${err}`)))
.on('finish', () => {
fileStream.close((err) => {
if (err)
reject(new errors_1.RequestError(`${err}`));
else
resolve();
});
});
res.pipe(fileStream);
}) }));
});
}
exports.requestDownload = requestDownload;
/**
* Request JSON.
*
* @param args - Arguments.
* @returns T.
*/
function requestJSON(args) {
return __awaiter(this, void 0, void 0, function* () {
logger_1.logger.debug(`Request JSON: ${JSON.stringify(args)}`);
return request(Object.assign(Object.assign({}, args), { cb: (res) => new Promise((resolve, reject) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
try {
resolve(JSON.parse(data));
}
catch (err) {
reject(new errors_1.RequestError(`${err}`));
}
});
}) }));
});
}
exports.requestJSON = requestJSON;