cobolget
Version:
COBOL Package Manager
172 lines (171 loc) • 7.37 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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.tableView = exports.wordTrim = exports.downloadZip = exports.validateManifest = exports.getPackages = exports.getPackage = exports.indexPackage = exports.graph = exports.MANIFEST_INIT = exports.MANIFEST_SCHEMA = exports.LIBRARY_NAME = exports.COPYBOOK_NAME = exports.LOCK_NAME = exports.MANIFEST_NAME = exports.MODULES_DIR = exports.API_AGENT = void 0;
const rc = require("typed-rest-client/HttpClient");
const BASE_URL = 'https://cobolget.com';
exports.API_AGENT = 'cobolget';
exports.MODULES_DIR = 'modules';
exports.MANIFEST_NAME = 'modules.json';
exports.LOCK_NAME = 'modules-lock.json';
exports.COPYBOOK_NAME = 'modules.cpy';
exports.LIBRARY_NAME = 'modules.cbl';
exports.MANIFEST_SCHEMA = BASE_URL + '/schema.json';
exports.MANIFEST_INIT = {
"$schema": exports.MANIFEST_SCHEMA,
"name": "package-name",
"description": "Short description",
"modules": [],
"dialect": "gnucobol",
"licenses": ["MIT"],
"authors": ["Author"],
"dependencies": {},
"dependencies-debug": {},
"scripts": {}
};
const client = new rc.HttpClient(exports.API_AGENT);
function graph(name, packages = {}) {
return __awaiter(this, void 0, void 0, function* () {
if (name in packages) {
return packages[name];
}
const response = yield client.get(`${BASE_URL}/api/packages/${encodeURIComponent(name)}`);
if (response.message.statusCode !== 200) {
const error = JSON.parse(yield response.readBody());
throw Error(error.message);
}
const pkg = JSON.parse(yield response.readBody());
packages[name] = {};
for (let version of pkg.versions) {
packages[name][version.tag] = {};
for (let dependency of version.dependencies) {
if (!dependency.isDebug) {
yield graph(dependency.package, packages);
packages[name][version.tag][dependency.package] = dependency.satisfies;
}
}
}
return packages;
});
}
exports.graph = graph;
function indexPackage(nameOrUrl, token = null, name = null) {
return __awaiter(this, void 0, void 0, function* () {
if (token && !name) {
throw new Error(`Organization name is required`);
}
const url = name ?
`${BASE_URL}/api/organizations/${encodeURIComponent(name)}/packages/${encodeURIComponent(nameOrUrl)}` :
`${BASE_URL}/api/packages/${encodeURIComponent(nameOrUrl)}`;
const response = yield client.post(url, token);
const body = JSON.parse(yield response.readBody());
if (response.message.statusCode === 200) {
return body;
}
if (response.message.statusCode === 400) {
throw new Error(body.message);
}
throw new Error(`HTTP ${response.message.statusCode}`);
});
}
exports.indexPackage = indexPackage;
function getPackage(name) {
return __awaiter(this, void 0, void 0, function* () {
const response = yield client.get(`${BASE_URL}/api/packages/${encodeURIComponent(name)}`);
const body = JSON.parse(yield response.readBody());
if (response.message.statusCode === 200) {
return body;
}
if (response.message.statusCode === 400) {
throw new Error(body.message);
}
throw new Error(`HTTP ${response.message.statusCode}`);
});
}
exports.getPackage = getPackage;
function getPackages(keyword) {
return __awaiter(this, void 0, void 0, function* () {
const response = yield client.get(`${BASE_URL}/api/packages?q=${encodeURIComponent(keyword)}`);
const body = JSON.parse(yield response.readBody());
if (response.message.statusCode === 200) {
return body;
}
if (response.message.statusCode === 400) {
throw new Error(body.message);
}
throw new Error(`HTTP ${response.message.statusCode}`);
});
}
exports.getPackages = getPackages;
function validateManifest(manifest) {
return __awaiter(this, void 0, void 0, function* () {
const response = yield client.post(`${BASE_URL}/api/schema/validate`, manifest);
const body = JSON.parse(yield response.readBody());
if (response.message.statusCode === 200) {
return manifest;
}
if (response.message.statusCode === 400) {
throw new Error(body.message);
}
throw new Error(`HTTP ${response.message.statusCode}`);
});
}
exports.validateManifest = validateManifest;
function downloadZip(name, version, token = null) {
return __awaiter(this, void 0, void 0, function* () {
let response = yield client.put(`${BASE_URL}/api/packages/${encodeURIComponent(name)}/${encodeURIComponent(version)}/download`, token);
if (response.message.statusCode === 302) {
const redirect = JSON.parse(yield response.readBody());
response = yield client.get(redirect.url);
}
if (response.message.statusCode === 200) {
return yield new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
let chunks = [];
response.message.on('data', (chunk) => {
chunks.push(chunk);
});
response.message.on('end', () => {
resolve(Buffer.concat(chunks));
});
response.message.on('error', (error) => {
reject(error);
});
}));
}
if (response.message.statusCode === 400) {
const body = JSON.parse(yield response.readBody());
throw new Error(body.message);
}
throw new Error(`HTTP ${response.message.statusCode}`);
});
}
exports.downloadZip = downloadZip;
const columns = process.stdout.columns ? process.stdout.columns : 80;
function wordTrim(text, width = columns, indicator = '...') {
if (text.length > width) {
return text.substr(0, width - indicator.length) + indicator;
}
return text;
}
exports.wordTrim = wordTrim;
function repeatString(text, count) {
let result = '';
for (let i = 0; i < count; i++) {
result += text;
}
return result;
}
function tableView(table, spacing = 2) {
const maxLen = {};
table.forEach(row => row.forEach((cell, i) => maxLen[i] = Math.max(maxLen[i] || 0, cell.length)));
return table.map(row => row.map((cell, i) => `${cell}${repeatString(' ', maxLen[i] - cell.length + spacing)}`).join(''));
}
exports.tableView = tableView;