vite-plugin-vue-css-modules
Version:
✨ Ultimate solution for using CSS modules without any hassle. Automatic replacement for Vue templates and scripts
45 lines (44 loc) • 1.39 kB
JavaScript
import idGenerator from "./id.js";
import path from "path";
const removeExtension = (filename) => {
return filename.substring(0, filename.lastIndexOf(".")) || filename;
};
const deriveScope = (filename) => path
.relative("./src/", removeExtension(filename.split("?")[0]))
.replace(/^\.+[\\/]/, "")
.replace(/^components[\\/]/, "C")
.replace(/^views[\\/]/, "V")
.replace(/[\\/]/g, "_");
const prodNameGeneratorContext = () => {
let namesMap = {};
let generateName = idGenerator({
alphabet: "_abcdefghijklmnopqrstuvwxyz0123456789-",
});
return (name, filename) => {
let key = name.split("__", 2).length === 2
? name
: deriveScope(filename) + "__" + name;
if (namesMap[key])
return namesMap[key];
for (;;) {
let newName = generateName();
if (!/^[-\d]|(?:[-_]+|^)ad/.test(newName)) {
namesMap[key] = newName;
return newName;
}
}
};
};
const devNameGeneratorContext = () => {
return (name, filename) => {
let provided = name.split("__", 2);
if (provided.length === 2) {
return name;
}
else {
let scope = deriveScope(filename);
return scope + "__" + name;
}
};
};
export { prodNameGeneratorContext, devNameGeneratorContext };