vtex
Version:
The platform for e-commerce apps
72 lines (71 loc) • 3.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sortObject = exports.hasDevDependenciesInstalled = exports.getRootPackageJson = exports.checkIfTarGzIsEmpty = exports.prettierrcEditor = exports.eslintIgnoreEditor = exports.tsconfigEditor = exports.eslintrcEditor = exports.packageJsonEditor = void 0;
const tslib_1 = require("tslib");
const util_1 = tslib_1.__importDefault(require("util"));
const stream_1 = require("stream");
const axios_1 = tslib_1.__importDefault(require("axios"));
const tar_1 = tslib_1.__importDefault(require("tar"));
const logger_1 = tslib_1.__importDefault(require("../../api/logger"));
const FileReaderWriter_1 = require("./includes/FileReaderWriter");
const SessionManager_1 = require("../../api/session/SessionManager");
exports.packageJsonEditor = new FileReaderWriter_1.FileReaderWriter('packageJson');
exports.eslintrcEditor = new FileReaderWriter_1.FileReaderWriter('eslintrc');
exports.tsconfigEditor = new FileReaderWriter_1.FileReaderWriter('tsconfig');
exports.eslintIgnoreEditor = new FileReaderWriter_1.FileReaderWriter('eslintIgnore', false);
exports.prettierrcEditor = new FileReaderWriter_1.FileReaderWriter('prettierrc');
exports.checkIfTarGzIsEmpty = (url) => {
// eslint-disable-next-line no-async-promise-executor
return new Promise(async (resolve, reject) => {
try {
const res = await axios_1.default.get(url, {
responseType: 'stream',
headers: { Authorization: SessionManager_1.SessionManager.getSingleton().token },
});
let fileCount = 0;
const fileEmitter = tar_1.default.list();
fileEmitter.on('entry', () => (fileCount += 1));
await util_1.default.promisify(stream_1.pipeline)([res.data, fileEmitter]);
resolve(fileCount === 0);
}
catch (err) {
reject(err);
}
});
};
/**
* Reads and parses the root package.json file
*
* @export
* @returns The package.json object
*/
function getRootPackageJson() {
try {
return exports.packageJsonEditor.read('.');
}
catch (err) {
if (err.code !== 'ENOENT') {
logger_1.default.error(err);
}
}
return null;
}
exports.getRootPackageJson = getRootPackageJson;
/**
* Checks if every dev dependency of a dependency map is installed in a package.json
* @param {{ deps: Record<string, string>; pkg: PackageJSON }} { deps, pkg }
* @returns {boolean}
*/
function hasDevDependenciesInstalled({ deps, pkg }) {
return Object.keys(deps).every(p => p in pkg.devDependencies);
}
exports.hasDevDependenciesInstalled = hasDevDependenciesInstalled;
/**
* Sort the given object. Useful for sorting the `package.json` dependencies
*/
function sortObject(obj) {
return Object.keys(obj)
.sort((strA, strB) => strA.localeCompare(strB))
.reduce((sortedObject, key) => ({ ...sortedObject, [key]: obj[key] }), {});
}
exports.sortObject = sortObject;