You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
3.7 KiB
122 lines
3.7 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
var _path = _interopRequireDefault(require("path"));
|
|
|
|
var _schemaUtils = _interopRequireDefault(require("schema-utils"));
|
|
|
|
var _webpackLog = _interopRequireDefault(require("webpack-log"));
|
|
|
|
var _options = _interopRequireDefault(require("./options.json"));
|
|
|
|
var _preProcessPattern = _interopRequireDefault(require("./preProcessPattern"));
|
|
|
|
var _processPattern = _interopRequireDefault(require("./processPattern"));
|
|
|
|
var _postProcessPattern = _interopRequireDefault(require("./postProcessPattern"));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
class CopyPlugin {
|
|
constructor(patterns = [], options = {}) {
|
|
(0, _schemaUtils.default)(_options.default, patterns, this.constructor.name);
|
|
this.patterns = patterns;
|
|
this.options = options;
|
|
}
|
|
|
|
apply(compiler) {
|
|
const fileDependencies = new Set();
|
|
const contextDependencies = new Set();
|
|
const written = {};
|
|
let context;
|
|
|
|
if (!this.options.context) {
|
|
({
|
|
context
|
|
} = compiler.options);
|
|
} else if (!_path.default.isAbsolute(this.options.context)) {
|
|
context = _path.default.join(compiler.options.context, this.options.context);
|
|
} else {
|
|
({
|
|
context
|
|
} = this.options);
|
|
}
|
|
|
|
const logger = (0, _webpackLog.default)({
|
|
name: 'copy-webpack-plugin',
|
|
level: this.options.logLevel || 'warn'
|
|
});
|
|
const plugin = {
|
|
name: 'CopyPlugin'
|
|
};
|
|
compiler.hooks.emit.tapAsync(plugin, (compilation, callback) => {
|
|
logger.debug('starting emit');
|
|
const globalRef = {
|
|
logger,
|
|
compilation,
|
|
written,
|
|
fileDependencies,
|
|
contextDependencies,
|
|
context,
|
|
inputFileSystem: compiler.inputFileSystem,
|
|
output: compiler.options.output.path,
|
|
ignore: this.options.ignore || [],
|
|
copyUnmodified: this.options.copyUnmodified,
|
|
concurrency: this.options.concurrency
|
|
};
|
|
|
|
if (globalRef.output === '/' && compiler.options.devServer && compiler.options.devServer.outputPath) {
|
|
globalRef.output = compiler.options.devServer.outputPath;
|
|
}
|
|
|
|
const {
|
|
patterns
|
|
} = this;
|
|
Promise.all(patterns.map(pattern => Promise.resolve().then(() => (0, _preProcessPattern.default)(globalRef, pattern)) // Every source (from) is assumed to exist here
|
|
// eslint-disable-next-line no-shadow
|
|
.then(pattern => (0, _processPattern.default)(globalRef, pattern).then(files => {
|
|
if (!files) {
|
|
return Promise.resolve();
|
|
}
|
|
|
|
return Promise.all(files.filter(Boolean).map(file => (0, _postProcessPattern.default)(globalRef, pattern, file)));
|
|
})))).catch(error => {
|
|
compilation.errors.push(error);
|
|
}).then(() => {
|
|
logger.debug('finishing emit');
|
|
callback();
|
|
});
|
|
});
|
|
compiler.hooks.afterEmit.tapAsync(plugin, (compilation, callback) => {
|
|
logger.debug('starting after-emit'); // Add file dependencies
|
|
|
|
if ('addAll' in compilation.fileDependencies) {
|
|
compilation.fileDependencies.addAll(fileDependencies);
|
|
} else {
|
|
for (const fileDependency of fileDependencies) {
|
|
compilation.fileDependencies.add(fileDependency);
|
|
}
|
|
} // Add context dependencies
|
|
|
|
|
|
if ('addAll' in compilation.contextDependencies) {
|
|
compilation.contextDependencies.addAll(contextDependencies);
|
|
} else {
|
|
for (const contextDependency of contextDependencies) {
|
|
compilation.contextDependencies.add(contextDependency);
|
|
}
|
|
}
|
|
|
|
logger.debug('finishing after-emit');
|
|
callback();
|
|
});
|
|
}
|
|
|
|
}
|
|
|
|
var _default = CopyPlugin;
|
|
exports.default = _default;
|