mirror of
https://github.com/idanoo/GoScrobble.git
synced 2024-11-29 03:45:15 +00:00
41 lines
1.3 KiB
JavaScript
41 lines
1.3 KiB
JavaScript
|
const path = require('path');
|
||
|
|
||
|
/**
|
||
|
* @callback MatchObject
|
||
|
* @param {string} [str]
|
||
|
* @returns {boolean}
|
||
|
*/
|
||
|
|
||
|
const resolvedLoader = require.resolve('../../loader');
|
||
|
|
||
|
/**
|
||
|
* Injects refresh loader to all JavaScript-like and user-specified files.
|
||
|
* @param {*} data Module factory creation data.
|
||
|
* @param {MatchObject} matchObject A function to include/exclude files to be processed.
|
||
|
* @returns {*} The injected module factory creation data.
|
||
|
*/
|
||
|
function injectRefreshLoader(data, matchObject) {
|
||
|
if (
|
||
|
// Include and exclude user-specified files
|
||
|
matchObject(data.resource) &&
|
||
|
// Skip plugin's runtime utils to prevent self-referencing -
|
||
|
// this is useful when using the plugin as a direct dependency.
|
||
|
!data.resource.includes(path.join(__dirname, '../runtime/RefreshUtils')) &&
|
||
|
// Check to prevent double injection
|
||
|
!data.loaders.find(({ loader }) => loader === resolvedLoader)
|
||
|
) {
|
||
|
// As we inject runtime code for each module,
|
||
|
// it is important to run the injected loader after everything.
|
||
|
// This way we can ensure that all code-processing have been done,
|
||
|
// and we won't risk breaking tools like Flow or ESLint.
|
||
|
data.loaders.unshift({
|
||
|
loader: resolvedLoader,
|
||
|
options: undefined,
|
||
|
});
|
||
|
}
|
||
|
|
||
|
return data;
|
||
|
}
|
||
|
|
||
|
module.exports = injectRefreshLoader;
|