@best-shot/core
Version:
Create 'best-shot' config chain
54 lines (44 loc) • 1.23 kB
JavaScript
const allowPresets = ['babel', 'style', 'asset', 'react', 'vue', 'web', 'mini'];
function sortPresets(data) {
const io = [...new Set(data)];
io.sort((next, prev) => {
const P = allowPresets.indexOf(prev);
const N = allowPresets.indexOf(next);
return P === -1 && N === -1
? 0
: P === -1
? -1
: N === -1
? 1
: N < P
? -1
: 1;
});
return io;
}
function checkPresets(presets) {
if (presets.includes('vue') && presets.includes('react')) {
throw new Error("Don't use React and Vue at the same time");
}
if (presets.includes('vue') && presets.includes('mini')) {
throw new Error("Don't use Mini and Vue at the same time");
}
if (presets.includes('web') && presets.includes('mini')) {
throw new Error("Don't use Web and Mini at the same time");
}
}
export function importPresets(presets) {
checkPresets(presets);
try {
const sorted = sortPresets(presets);
return sorted.map((preset) => () => {
return import(
/* webpackIgnore: true */
`@best-shot/preset-${preset}`
);
});
} catch (error) {
console.error(error);
throw new Error('Import presets fail.');
}
}