UNPKG

offline-plugin

Version:
123 lines (95 loc) 4.25 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } var _webpackLibDependenciesSingleEntryDependency = require('webpack/lib/dependencies/SingleEntryDependency'); var _webpackLibDependenciesSingleEntryDependency2 = _interopRequireDefault(_webpackLibDependenciesSingleEntryDependency); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _webpack = require('webpack'); var _webpack2 = _interopRequireDefault(_webpack); var _miscGetSource = require('./misc/get-source'); var _miscGetSource2 = _interopRequireDefault(_miscGetSource); var ServiceWorker = (function () { function ServiceWorker(options) { _classCallCheck(this, ServiceWorker); this.output = options.output; this.entry = options.entry; this.ENTRY_NAME = 'serviceworker'; this.CACHE_NAME = 'webpack-offline'; this.SW_DATA_VAR = '__wpo'; } _createClass(ServiceWorker, [{ key: 'addEntry', value: function addEntry(plugin, compilation, compiler) { if (!this.entry) return Promise.resolve(); var data = JSON.stringify({ data_var_name: this.SW_DATA_VAR }); var loader = '!!' + _path2['default'].join(__dirname, 'misc/sw-loader.js') + '?' + data; var name = plugin.entryPrefix + this.ENTRY_NAME; var dep = new _webpackLibDependenciesSingleEntryDependency2['default'](loader + '!' + this.entry); dep.loc = name; return new Promise(function (resolve) { compilation.addEntry(compiler.context, dep, name, function () { resolve(); }); }); } }, { key: 'apply', value: function apply(plugin, compilation, compiler) { var minify = (compiler.options.plugins || []).some(function (plugin) { return plugin instanceof _webpack2['default'].optimize.UglifyJsPlugin; }); var source = this.getDataTemplate(plugin.caches, plugin, minify); if (this.entry) { var _name = plugin.entryPrefix + this.ENTRY_NAME; var entry = compilation.assets[_name]; if (!entry) { _name = _name + '.js'; entry = compilation.assets[_name]; } if (!entry) { compilation.errors.push(new Error('OfflinePlugin: Something went wrong with ServiceWorker entry')); return; } entry = entry.source(); delete compilation.assets[_name]; source += '\n\n' + entry; } compilation.assets[this.output] = (0, _miscGetSource2['default'])(source); } }, { key: 'getDataTemplate', value: function getDataTemplate(data, plugin, minify) { var cache = function cache(key) { return data[key] || []; }; return ('\n var ' + this.SW_DATA_VAR + ' = ' + JSON.stringify({ assets: { main: cache('main'), additional: cache('additional'), optional: cache('optional') }, strategy: plugin.strategy, version: plugin.strategy === 'all' ? plugin.version : void 0, hash: plugin.strategy !== 'all' ? plugin.hash : void 0, name: this.CACHE_NAME }, null, minify ? void 0 : ' ') + ';\n ').trim(); } }, { key: 'getConfig', value: function getConfig(plugin) { return { output: plugin.scope + this.output }; } }]); return ServiceWorker; })(); exports['default'] = ServiceWorker; module.exports = exports['default'];