squint-cli
Version:
Squint makes visual reviews of web app releases easy
63 lines (62 loc) • 1.95 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.union = exports.mkdirp = exports.evalJs = exports.promiseEachSeries = void 0;
const fs_1 = __importDefault(require("fs"));
const lodash_1 = __importDefault(require("lodash"));
// https://github.com/sindresorhus/p-each-series/blob/main/license
// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
const PROMISE_EACH_SERIES_STOP = Symbol('promiseEachSeries.stop');
async function promiseEachSeries(iterable, iterator) {
let index = 0;
for (const value of iterable) {
// eslint-disable-next-line no-await-in-loop
const returnValue = await iterator(await value, index++);
if (returnValue === PROMISE_EACH_SERIES_STOP) {
break;
}
}
return iterable;
}
exports.promiseEachSeries = promiseEachSeries;
// lodash is in scope for evaluated code
function evalJs(code, ...args) {
let result;
const codeToEval = `(() => { return ${code}; })()`;
try {
const afterEval = eval(codeToEval);
if (lodash_1.default.isFunction(afterEval)) {
result = afterEval(...args);
}
else {
result = afterEval;
}
}
catch (e) {
console.error(`Unable to \`eval\` code: ${e.message}`);
console.error('Evaluated code:');
console.error(codeToEval);
throw e;
}
return result;
}
exports.evalJs = evalJs;
async function mkdirp(dir) {
try {
await fs_1.default.promises.mkdir(dir, { recursive: true });
}
catch (e) {
// ignore
}
}
exports.mkdirp = mkdirp;
function union(setA, setB) {
const _union = new Set(setA);
for (const elem of setB) {
_union.add(elem);
}
return _union;
}
exports.union = union;