You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.2 KiB
97 lines
3.2 KiB
"use strict"; |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.getImportPrefix = getImportPrefix; |
|
exports.getLocalIdent = getLocalIdent; |
|
exports.camelCase = camelCase; |
|
exports.dashesCamelCase = dashesCamelCase; |
|
exports.getFilter = getFilter; |
|
exports.placholderRegExps = void 0; |
|
|
|
var _path = _interopRequireDefault(require("path")); |
|
|
|
var _camelcase = _interopRequireDefault(require("camelcase")); |
|
|
|
var _loaderUtils = _interopRequireDefault(require("loader-utils")); |
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
|
|
|
/* |
|
MIT License http://www.opensource.org/licenses/mit-license.php |
|
Author Tobias Koppers @sokra |
|
*/ |
|
|
|
/* eslint-disable line-comment-position */ |
|
const placholderRegExps = { |
|
importItemG: /___CSS_LOADER_IMPORT___([0-9]+)___/g, |
|
importItem: /___CSS_LOADER_IMPORT___([0-9]+)___/ |
|
}; |
|
exports.placholderRegExps = placholderRegExps; |
|
|
|
function getImportPrefix(loaderContext, importLoaders) { |
|
if (importLoaders === false) { |
|
return ''; |
|
} |
|
|
|
const numberImportedLoaders = parseInt(importLoaders, 10) || 0; |
|
const loadersRequest = loaderContext.loaders.slice(loaderContext.loaderIndex, loaderContext.loaderIndex + 1 + numberImportedLoaders).map(x => x.request).join('!'); |
|
return `-!${loadersRequest}!`; |
|
} |
|
|
|
function camelCase(str) { |
|
return (0, _camelcase.default)(str); |
|
} |
|
|
|
function dashesCamelCase(str) { |
|
return str.replace(/-+(\w)/g, (match, firstLetter) => firstLetter.toUpperCase()); |
|
} |
|
|
|
const whitespace = '[\\x20\\t\\r\\n\\f]'; |
|
const unescapeRegExp = new RegExp(`\\\\([\\da-f]{1,6}${whitespace}?|(${whitespace})|.)`, 'ig'); |
|
|
|
function unescape(str) { |
|
return str.replace(unescapeRegExp, (_, escaped, escapedWhitespace) => { |
|
const high = `0x${escaped}` - 0x10000; // NaN means non-codepoint |
|
// Workaround erroneous numeric interpretation of +"0x" |
|
// eslint-disable-next-line no-self-compare |
|
|
|
return high !== high || escapedWhitespace ? escaped : high < 0 ? // BMP codepoint |
|
String.fromCharCode(high + 0x10000) : // Supplemental Plane codepoint (surrogate pair) |
|
// eslint-disable-next-line no-bitwise |
|
String.fromCharCode(high >> 10 | 0xd800, high & 0x3ff | 0xdc00); |
|
}); |
|
} |
|
|
|
function getLocalIdent(loaderContext, localIdentName, localName, options) { |
|
if (!options.context) { |
|
// eslint-disable-next-line no-param-reassign |
|
options.context = loaderContext.rootContext; |
|
} |
|
|
|
const request = _path.default.relative(options.context, loaderContext.resourcePath).replace(/\\/g, '/'); // eslint-disable-next-line no-param-reassign |
|
|
|
|
|
options.content = `${options.hashPrefix + request}+${unescape(localName)}`; // eslint-disable-next-line no-param-reassign |
|
|
|
localIdentName = localIdentName.replace(/\[local\]/gi, localName); |
|
|
|
const hash = _loaderUtils.default.interpolateName(loaderContext, localIdentName, options); |
|
|
|
return hash.replace(new RegExp('[^a-zA-Z0-9\\-_\u00A0-\uFFFF]', 'g'), '-').replace(/^((-?[0-9])|--)/, '_$1'); |
|
} |
|
|
|
function getFilter(filter, resourcePath, defaultFilter = null) { |
|
return content => { |
|
if (defaultFilter && !defaultFilter(content)) { |
|
return false; |
|
} |
|
|
|
if (typeof filter === 'function') { |
|
return !filter(content, resourcePath); |
|
} |
|
|
|
return true; |
|
}; |
|
} |