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;
|