|
- "use strict";
-
- var interpolateName = require("loader-utils/lib/interpolateName");
- var path = require("path");
-
- /**
- * @param {string} pattern
- * @param {object} options
- * @param {string} options.context
- * @param {string} options.hashPrefix
- * @return {function}
- */
- module.exports = function createGenerator(pattern, options) {
- options = options || {};
- var context =
- options && typeof options.context === "string"
- ? options.context
- : process.cwd();
- var hashPrefix =
- options && typeof options.hashPrefix === "string" ? options.hashPrefix : "";
-
- /**
- * @param {string} localName Usually a class name
- * @param {string} filepath Absolute path
- * @return {string}
- */
- return function generate(localName, filepath) {
- var name = pattern.replace(/\[local\]/gi, localName);
- var loaderContext = {
- resourcePath: filepath,
- };
-
- var loaderOptions = {
- content:
- hashPrefix +
- path.relative(context, filepath).replace(/\\/g, "/") +
- "\x00" +
- localName,
- context: context,
- };
-
- var genericName = interpolateName(loaderContext, name, loaderOptions);
- return genericName
- .replace(new RegExp("[^a-zA-Z0-9\\-_\u00A0-\uFFFF]", "g"), "-")
- .replace(/^((-?[0-9])|--)/, "_$1");
- };
- };
|