71 lines
1.9 KiB
JavaScript
71 lines
1.9 KiB
JavaScript
import inquirer from 'inquirer';
|
|
import {args, glob, read, replaceInFile, validClassName} from './util.js';
|
|
|
|
if (args.h || args.help) {
|
|
console.log(`
|
|
usage:
|
|
|
|
prefix.js [-p{refix}=your_great_new_prefix]
|
|
|
|
example:
|
|
|
|
prefix.js // will prompt for a prefix to replace the current one with
|
|
prefix.js -p=xyz // will replace any existing prefix with xyz
|
|
|
|
`);
|
|
process.exit(0);
|
|
}
|
|
|
|
const currentPrefix = await findExistingPrefix();
|
|
const prefix = await getPrefix();
|
|
|
|
if (currentPrefix === prefix) {
|
|
throw new Error(`already prefixed with: ${prefix}`);
|
|
}
|
|
|
|
await replacePrefix(currentPrefix, prefix);
|
|
|
|
async function findExistingPrefix() {
|
|
const data = await read('dist/css/uikit.css');
|
|
const res = data.match(new RegExp(`(${validClassName.source})(-[a-z]+)?-grid`));
|
|
return res && res[1];
|
|
}
|
|
|
|
async function getPrefix() {
|
|
|
|
const prefixFromInput = args.p || args.prefix;
|
|
|
|
if (!prefixFromInput) {
|
|
|
|
const prompt = inquirer.createPromptModule();
|
|
|
|
return (await prompt({
|
|
name: 'prefix',
|
|
message: 'enter a prefix',
|
|
validate: (val, res) => val.length && val.match(validClassName) ? !!(res.prefix = val) : 'invalid prefix'
|
|
})).prefix;
|
|
}
|
|
|
|
if (validClassName.test(prefixFromInput)) {
|
|
return prefixFromInput;
|
|
} else {
|
|
throw `illegal prefix: ${prefixFromInput}`;
|
|
}
|
|
}
|
|
|
|
async function replacePrefix(from, to) {
|
|
for (const file of await glob('dist/**/*.css')) {
|
|
await replaceInFile(file, data => data.replace(
|
|
new RegExp(`${from}-${/([a-z\d-]+)/.source}`, 'g'),
|
|
`${to}-$1`
|
|
));
|
|
}
|
|
|
|
for (const file of await glob('dist/**/*.js')) {
|
|
await replaceInFile(file, data => data
|
|
.replace(new RegExp(`${from}-`, 'g'), `${to}-`)
|
|
.replace(new RegExp(`(${from})?UIkit`, 'g'), `${to === 'uk' ? '' : to}UIkit`)
|
|
);
|
|
}
|
|
}
|