30 lines
1.0 KiB
JavaScript
30 lines
1.0 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
/**
|
||
|
* Creates new custom importers that use the given `resourcePath` if libsass calls the custom importer with `prev`
|
||
|
* being 'stdin'.
|
||
|
*
|
||
|
* Why do we need this? We have to use the `data` option of node-sass in order to compile our sass because
|
||
|
* the `resourcePath` might not be an actual file on disk. When using the `data` option, libsass uses the string
|
||
|
* 'stdin' instead of a filename.
|
||
|
*
|
||
|
* We have to fix this behavior in order to provide a consistent experience to the webpack user.
|
||
|
*
|
||
|
* @param {function|Array<function>} importer
|
||
|
* @param {string} resourcePath
|
||
|
* @returns {Array<function>}
|
||
|
*/
|
||
|
function proxyCustomImporters(importer, resourcePath) {
|
||
|
return [].concat(importer).map((importer) => {
|
||
|
return function (url, prev, done) {
|
||
|
return importer.apply(
|
||
|
this, // eslint-disable-line no-invalid-this
|
||
|
Array.from(arguments)
|
||
|
.map((arg, i) => i === 1 && arg === "stdin" ? resourcePath : arg)
|
||
|
);
|
||
|
};
|
||
|
});
|
||
|
}
|
||
|
|
||
|
module.exports = proxyCustomImporters;
|