@lcap/builder
Version:
lcap builder utils
35 lines (34 loc) • 1.58 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createGenScopedName = void 0;
const path_1 = __importDefault(require("path"));
const loader_utils_1 = require("loader-utils");
function createGenScopedName(prefix, rp = './') {
return (name, filename) => {
const rootPath = path_1.default.resolve(__dirname, rp);
const request = path_1.default.relative(rootPath, filename.replace(/\.vue[\\/].*$/, ''));
const tmpPath = filename
.substring(0, filename.indexOf('?'))
.replace(/\.vue[\\/]/g, '_')
.replace(/\.(vue|css)$/g, '')
.replace(/_(module|index)$/, '');
let vueName = path_1.default.basename(tmpPath);
if (vueName === 'index') {
vueName = path_1.default.basename(path_1.default.resolve(tmpPath, '../'));
}
const content = [prefix, request].join('+');
const hash = (0, loader_utils_1.getHashDigest)(content, 'md5', 'base64', 8);
let scopedName = vueName;
if (name !== 'root') {
scopedName = `${scopedName}_${name}`;
}
// eslint-disable-next-line prefer-regex-literals
const regex = new RegExp('[^a-zA-Z0-9\\-_\u00A0-\uFFFF]', 'g');
scopedName = `${scopedName}___${hash}`.replace(regex, '-').replace(/^((-?[0-9])|--)/, '_$1');
return scopedName;
};
}
exports.createGenScopedName = createGenScopedName;