hard-source-webpack-plugin-fixed-hashbug
Version:
Hard cache the source of modules in webpack. Patched version fixing the hash bug
80 lines (70 loc) • 2.08 kB
JavaScript
const pluginCompat = require('./util/plugin-compat');
function freezeDependency(dependency, extra, methods) {
if (extra.schemas.map.has(dependency.constructor)) {
return extra.schemas.map
.get(dependency.constructor)
.freeze(dependency, dependency, extra, methods);
}
if (extra.schemas[dependency.constructor.name]) {
return extra.schemas[dependency.constructor.name].freeze(
dependency,
dependency,
extra,
methods,
);
}
}
function thawDependency(frozen, extra, methods) {
if (extra.schemas[frozen.type]) {
return extra.schemas[frozen.type].thaw(null, frozen, extra, methods);
}
}
class TransformBasicDependencyPlugin {
constructor(options) {
this.options = options;
}
apply(compiler) {
if (this.options.schema < 4) {
const TransformBasicDependencyPluginLegacy = require('./TransformBasicDependencyPluginLegacy');
new TransformBasicDependencyPluginLegacy(this.options).apply(compiler);
} else {
const schemas = require('./schema-4');
let methods;
pluginCompat.tap(
compiler,
'_hardSourceMethods',
'TransformBasicDependencyPlugin methods',
_methods => {
methods = _methods;
},
);
pluginCompat.tap(
compiler,
'_hardSourceFreezeDependency',
'TransformBasicDependencyPlugin freeze',
(frozen, dependency, extra) => {
extra.schemas = schemas;
const _frozen = freezeDependency(dependency, extra, methods);
if (_frozen) {
return _frozen;
}
return frozen;
},
);
pluginCompat.tap(
compiler,
'_hardSourceThawDependency',
'TransformBasicDependencyPlugin',
(dependency, frozen, extra) => {
extra.schemas = schemas;
const _thawed = thawDependency(frozen, extra, methods);
if (_thawed) {
return _thawed;
}
return dependency;
},
);
}
}
}
module.exports = TransformBasicDependencyPlugin;