UNPKG

2.61 kBJavaScriptView Raw
1'use strict';
2
3function _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
5var path = require('path');
6var fs = require('fs');
7var loaderUtils = require('loader-utils');
8
9var modules = ['async-waituntil.js'];
10
11module.exports = function () {};
12module.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
69function 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