UNPKG

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
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 };