123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = loader;
- exports.pitch = pitch;
- var _options = require('./options.json');
- var _options2 = _interopRequireDefault(_options);
- var _loaderUtils = require('loader-utils');
- var _loaderUtils2 = _interopRequireDefault(_loaderUtils);
- var _schemaUtils = require('schema-utils');
- var _schemaUtils2 = _interopRequireDefault(_schemaUtils);
- var _NodeTargetPlugin = require('webpack/lib/node/NodeTargetPlugin');
- var _NodeTargetPlugin2 = _interopRequireDefault(_NodeTargetPlugin);
- var _SingleEntryPlugin = require('webpack/lib/SingleEntryPlugin');
- var _SingleEntryPlugin2 = _interopRequireDefault(_SingleEntryPlugin);
- var _WebWorkerTemplatePlugin = require('webpack/lib/webworker/WebWorkerTemplatePlugin');
- var _WebWorkerTemplatePlugin2 = _interopRequireDefault(_WebWorkerTemplatePlugin);
- var _workers = require('./workers/');
- var _workers2 = _interopRequireDefault(_workers);
- var _Error = require('./Error');
- var _Error2 = _interopRequireDefault(_Error);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- /* eslint-disable
- import/first,
- import/order,
- comma-dangle,
- linebreak-style,
- no-param-reassign,
- no-underscore-dangle,
- prefer-destructuring
- */
- function loader() {}
- function pitch(request) {
- const options = _loaderUtils2.default.getOptions(this) || {};
- (0, _schemaUtils2.default)(_options2.default, options, 'Worker Loader');
- if (!this.webpack) {
- throw new _Error2.default({
- name: 'Worker Loader',
- message: 'This loader is only usable with webpack'
- });
- }
- this.cacheable(false);
- const cb = this.async();
- const filename = _loaderUtils2.default.interpolateName(this, options.name || '[hash].worker.js', {
- context: options.context || this.rootContext || this.options.context,
- regExp: options.regExp
- });
- const worker = {};
- worker.options = {
- filename,
- chunkFilename: `[id].${filename}`,
- namedChunkFilename: null
- };
- worker.compiler = this._compilation.createChildCompiler('worker', worker.options);
- // Tapable.apply is deprecated in tapable@1.0.0-x.
- // The plugins should now call apply themselves.
- new _WebWorkerTemplatePlugin2.default(worker.options).apply(worker.compiler);
- if (this.target !== 'webworker' && this.target !== 'web') {
- new _NodeTargetPlugin2.default().apply(worker.compiler);
- }
- new _SingleEntryPlugin2.default(this.context, `!!${request}`, 'main').apply(worker.compiler);
- const subCache = `subcache ${__dirname} ${request}`;
- worker.compilation = compilation => {
- if (compilation.cache) {
- if (!compilation.cache[subCache]) {
- compilation.cache[subCache] = {};
- }
- compilation.cache = compilation.cache[subCache];
- }
- };
- if (worker.compiler.hooks) {
- const plugin = { name: 'WorkerLoader' };
- worker.compiler.hooks.compilation.tap(plugin, worker.compilation);
- } else {
- worker.compiler.plugin('compilation', worker.compilation);
- }
- worker.compiler.runAsChild((err, entries, compilation) => {
- if (err) return cb(err);
- if (entries[0]) {
- worker.file = entries[0].files[0];
- worker.factory = (0, _workers2.default)(worker.file, compilation.assets[worker.file].source(), options);
- if (options.fallback === false) {
- delete this._compilation.assets[worker.file];
- }
- return cb(null, `module.exports = function() {\n return ${worker.factory};\n};`);
- }
- return cb(null, null);
- });
- }
|