1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- // Note: this is based on https://github.com/plasticine/inject-loader,
- // patched to make istanbul work properly
- const loaderUtils = require("loader-utils");
- const QUOTE_REGEX_STRING = "['|\"]{1}";
- const hasOnlyExcludeFlags = query => Object.keys(query).filter(key => query[key] === true).length === 0;
- const escapePath = path => path.replace("/", "\\/");
- function createRequireStringRegex(query) {
- const regexArray = [];
- // if there is no query then replace everything
- if (Object.keys(query).length === 0) {
- regexArray.push("([^\\)]+)");
- } else if (hasOnlyExcludeFlags(query)) {
- // if there are only negation matches in the query then replace everything
- // except them
- Object.keys(query).forEach(key => regexArray.push(`(?!${QUOTE_REGEX_STRING}${escapePath(key)})`));
- regexArray.push("([^\\)]+)");
- } else {
- regexArray.push(`(${QUOTE_REGEX_STRING}(`);
- regexArray.push(Object.keys(query).map(key => escapePath(key)).join("|"));
- regexArray.push(`)${QUOTE_REGEX_STRING})`);
- }
- // Wrap the regex to match `require()`
- regexArray.unshift("require\\(");
- regexArray.push("\\)");
- return new RegExp(regexArray.join(""), "g");
- }
- module.exports = function inject(src) {
- if (this.cacheable) {
- this.cacheable();
- }
- const regex = createRequireStringRegex(loaderUtils.getOptions(this) || {});
- return `module.exports = function inject(injections) {
- var module = {exports: {}};
- var exports = module.exports;
- ${src.replace(regex, "(injections[$1] || /* istanbul ignore next */ $&)")}
- return module.exports;
- }\n`;
- };
|