putout
Version:
🐊 Pluggable and configurable code transformer with built-in ESLint, Babel and support of js, jsx, typescript, flow, markdown, yaml and json
81 lines (67 loc) • 1.6 kB
JavaScript
import {tryCatch} from 'try-catch';
import {validateRulesRelations} from '@putout/engine-loader';
import {defaultOptions} from './default-options.js';
import {parseError} from './parse-error.js';
const maybeParseError = (a) => !a ? [] : parseError(a, 'loader');
export const transform = (ast, opts) => {
opts = defaultOptions(opts);
const {
plugins: pluginNames,
rules,
fix,
fixCount,
loadPlugins,
runPlugins,
progress,
} = opts;
const [validationError] = tryCatch(validateRulesRelations, {
rules,
pluginNames,
});
const plugins = loadPlugins({
pluginNames,
rules,
});
const places = runPlugins({
ast,
fix,
fixCount,
plugins,
progress,
});
return [
...maybeParseError(validationError),
...places,
];
};
export const transformAsync = async (ast, opts) => {
opts = defaultOptions(opts);
const {
plugins: pluginNames,
rules,
fix,
fixCount,
loadPluginsAsync,
runPlugins,
progress,
} = opts;
const [validationError] = tryCatch(validateRulesRelations, {
rules,
pluginNames,
});
const plugins = await loadPluginsAsync({
pluginNames,
rules,
});
const places = runPlugins({
ast,
fix,
fixCount,
plugins,
progress,
});
return [
...maybeParseError(validationError),
...places,
];
};