Skip to content

Commit

Permalink
refactor: importItemMatcher util (#823)
Browse files Browse the repository at this point in the history
  • Loading branch information
evilebottnawi committed Nov 29, 2018
1 parent f9aa73c commit 2e62346
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 28 deletions.
23 changes: 8 additions & 15 deletions lib/loader.js
Expand Up @@ -5,7 +5,11 @@
const loaderUtils = require('loader-utils');

const processCss = require('./processCss');
const { getImportPrefix, compileExports } = require('./utils');
const {
getImportPrefix,
placeholderImportItemReplacer,
compileExports,
} = require('./utils');

module.exports = function loader(content, map) {
const callback = this.async();
Expand Down Expand Up @@ -78,20 +82,9 @@ module.exports = function loader(content, map) {
}, this)
.join('\n');

function importItemMatcher(item) {
const match = result.importItemRegExp.exec(item);
const idx = +match[1];
const importItem = result.importItems[idx];
const importUrl = importUrlPrefix + importItem.url;
return `" + require(${loaderUtils.stringifyRequest(
this,
importUrl
)}).locals[${JSON.stringify(importItem.export)}] + "`;
}

cssAsString = cssAsString.replace(
result.importItemRegExpG,
importItemMatcher.bind(this)
placeholderImportItemReplacer(this, result, importUrlPrefix)
);

// helper for ensuring valid CSS strings from requires
Expand Down Expand Up @@ -136,7 +129,7 @@ module.exports = function loader(content, map) {

let exportJs = compileExports(
result,
importItemMatcher.bind(this),
placeholderImportItemReplacer(this, result, importUrlPrefix),
options.camelCase
);
if (exportJs) {
Expand Down Expand Up @@ -170,7 +163,7 @@ module.exports = function loader(content, map) {
moduleJs = `exports.push([module.id, ${cssAsString}, ""]);`;
}

// embed runtime
// Embed runtime
return callback(
null,
`${urlEscapeHelper}exports = module.exports = require(${loaderUtils.stringifyRequest(
Expand Down
19 changes: 6 additions & 13 deletions lib/localsLoader.js
Expand Up @@ -5,7 +5,11 @@
const loaderUtils = require('loader-utils');

const processCss = require('./processCss');
const { getImportPrefix, compileExports } = require('./utils');
const {
getImportPrefix,
placeholderImportItemReplacer,
compileExports,
} = require('./utils');

module.exports = function loader(content) {
const callback = this.async();
Expand All @@ -26,20 +30,9 @@ module.exports = function loader(content) {
// for importing CSS
const importUrlPrefix = getImportPrefix(this, options);

function importItemMatcher(item) {
const match = result.importItemRegExp.exec(item);
const idx = +match[1];
const importItem = result.importItems[idx];
const importUrl = importUrlPrefix + importItem.url;
return (
`" + require(${loaderUtils.stringifyRequest(this, importUrl)})` +
`[${JSON.stringify(importItem.export)}] + "`
);
}

let exportJs = compileExports(
result,
importItemMatcher.bind(this),
placeholderImportItemReplacer(this, result, importUrlPrefix, true),
options.camelCase
);
if (exportJs) {
Expand Down
27 changes: 27 additions & 0 deletions lib/utils.js
Expand Up @@ -110,9 +110,36 @@ function getLocalIdent(loaderContext, localIdentName, localName, options) {
.replace(/^((-?[0-9])|--)/, '_$1');
}

function placeholderImportItemReplacer(
loaderContext,
result,
importUrlPrefix,
onlyLocals = false
) {
return (item) => {
const match = result.importItemRegExp.exec(item);
const idx = +match[1];
const importItem = result.importItems[idx];
const importUrl = importUrlPrefix + importItem.url;

if (onlyLocals) {
return `" + require(${loaderUtils.stringifyRequest(
loaderContext,
importUrl
)})[${JSON.stringify(importItem.export)}] + "`;
}

return `" + require(${loaderUtils.stringifyRequest(
loaderContext,
importUrl
)}).locals[${JSON.stringify(importItem.export)}] + "`;
};
}

module.exports = {
dashesCamelCase,
compileExports,
getImportPrefix,
getLocalIdent,
placeholderImportItemReplacer,
};

0 comments on commit 2e62346

Please sign in to comment.