just-scripts
Version:
Just Stack Scripts
51 lines • 2.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.prettierCheckTask = exports.prettierTask = void 0;
const just_task_1 = require("just-task");
const utils_1 = require("../utils");
const splitArrayIntoChunks_1 = require("../arrayUtils/splitArrayIntoChunks");
const path = require("path");
const arrayify_1 = require("../arrayUtils/arrayify");
function prettierTask(options = {}) {
// check v2 or v3 path
const prettierBin = (0, just_task_1.resolve)('prettier/bin-prettier.js') || (0, just_task_1.resolve)('prettier/bin/prettier.cjs');
if (prettierBin) {
return function prettier() {
return runPrettierAsync({
prettierBin,
...{ configPath: options.configPath || undefined },
...{ ignorePath: options.ignorePath || undefined },
...{
files: (0, arrayify_1.arrayify)(options.files || path.resolve(process.cwd(), '**', '*.{ts,tsx,js,jsx,json,scss,html,yml,md}')),
},
check: !!options.check,
});
};
}
// undertaker apparently requires returning a promise, async function, or function that calls done()
return async () => {
just_task_1.logger.warn('Prettier is not available, ignoring this task');
};
}
exports.prettierTask = prettierTask;
function prettierCheckTask(options = {}) {
return prettierTask({ ...options, check: true });
}
exports.prettierCheckTask = prettierCheckTask;
function runPrettierAsync(context) {
const MaxFileEntriesPerChunk = 20;
const { prettierBin, configPath, ignorePath, files, check } = context;
const chunks = (0, splitArrayIntoChunks_1.splitArrayIntoChunks)(files, MaxFileEntriesPerChunk);
return chunks.reduce((finishPromise, chunk) => {
const prettierArgs = [
prettierBin,
...(configPath ? ['--config', configPath] : []),
...(ignorePath ? ['--ignore-path', ignorePath] : []),
...(check ? ['--check'] : ['--write']),
...chunk,
];
(0, utils_1.logNodeCommand)(prettierArgs);
return finishPromise.then(() => (0, utils_1.spawn)(process.execPath, prettierArgs, { stdio: 'inherit' }));
}, Promise.resolve());
}
//# sourceMappingURL=prettierTask.js.map