1 | 'use strict';
|
2 |
|
3 | function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }
|
4 |
|
5 | var path = require('path');
|
6 | var fs = require('fs');
|
7 | var loaderUtils = require('loader-utils');
|
8 |
|
9 | var modules = ['async-waituntil.js'];
|
10 |
|
11 | module.exports = function () {};
|
12 | module.exports.pitch = function pitch(remainingRequest, precedingRequest, data) {
|
13 | var _this = this;
|
14 |
|
15 | this.cacheable && this.cacheable();
|
16 |
|
17 | var callback = this.async();
|
18 | var templatePath = path.join(__dirname, 'sw-template.js');
|
19 | var query = loaderUtils.parseQuery(this.query);
|
20 | var params = JSON.parse(query.json);
|
21 |
|
22 | var request = loaderUtils.stringifyRequest(this, remainingRequest);
|
23 | var source = 'module.exports = require(' + request + ')';
|
24 |
|
25 | var loaders = (params.loaders || []).map(function (loader) {
|
26 | var loaderPath = path.join(__dirname, '../loaders', loader + '.js');
|
27 | var loaderRequest = loaderUtils.stringifyRequest(_this, '!!' + loaderPath);
|
28 |
|
29 | _this.addDependency(loaderPath);
|
30 |
|
31 | return JSON.stringify(loader) + ': require(' + loaderRequest + ')';
|
32 | });
|
33 |
|
34 | var cacheMaps = (params.cacheMaps || []).map(function (map) {
|
35 | return '{\n match: ' + map.match + ',\n to: ' + map.to + ',\n requestTypes: ' + JSON.stringify(map.requestTypes) + ',\n }';
|
36 | });
|
37 |
|
38 | this.addDependency(templatePath);
|
39 |
|
40 | var loadersCode = '{}';
|
41 |
|
42 | if (loaders.length) {
|
43 | loadersCode = '{\n ' + loaders.join(',\n') + '\n }';
|
44 | }
|
45 |
|
46 | var cacheMapsCode = '[]';
|
47 |
|
48 | if (cacheMaps.length) {
|
49 | cacheMapsCode = '[\n ' + cacheMaps.join(',\n') + '\n ]';
|
50 | }
|
51 |
|
52 | var navigationPreloadCode = params.navigationPreload;
|
53 |
|
54 | var helpersCode = [', {', 'loaders: ' + loadersCode + ',', 'cacheMaps: ' + cacheMapsCode + ',', 'navigationPreload: ' + navigationPreloadCode + ',', '}'];
|
55 |
|
56 | Promise.all([].concat(_toConsumableArray(modules.map(function (mod) {
|
57 | return readFile(path.join(__dirname, mod));
|
58 | })), [readFile(templatePath).then(function (template) {
|
59 | template = '\n ' + template + '\n WebpackServiceWorker(' + params.data_var_name + helpersCode.join('\n') + ');\n ' + source + '\n ';
|
60 |
|
61 | return template;
|
62 | })])).then(function (all) {
|
63 | callback(null, all.join(';'));
|
64 | })['catch'](function (err) {
|
65 | return callback(err);
|
66 | });
|
67 | };
|
68 |
|
69 | function readFile(path) {
|
70 | return new Promise(function (resolve, reject) {
|
71 | fs.readFile(path, 'utf-8', function (err, file) {
|
72 | if (err) {
|
73 | reject(err);
|
74 | return;
|
75 | }
|
76 |
|
77 | resolve(file);
|
78 | });
|
79 | });
|
80 | } |
\ | No newline at end of file |