UNPKG

1.84 kBJavaScriptView Raw
1'use strict';
2
3var path = require('path');
4var fs = require('fs');
5var loaderUtils = require('loader-utils');
6
7module.exports = function () {};
8module.exports.pitch = function pitch(remainingRequest, precedingRequest, data) {
9 var _this = this;
10
11 this.cacheable && this.cacheable();
12
13 var callback = this.async();
14 var templatePath = path.join(__dirname, 'sw-template.js');
15 var query = loaderUtils.parseQuery(this.query);
16 var params = JSON.parse(query.json);
17
18 var request = loaderUtils.stringifyRequest(this, remainingRequest);
19 var source = 'module.exports = require(' + request + ')';
20
21 var loaders = (params.loaders || []).map(function (loader) {
22 var loaderPath = path.join(__dirname, '../loaders', loader + '.js');
23 var loaderRequest = loaderUtils.stringifyRequest(_this, '!!' + loaderPath);
24
25 _this.addDependency(loaderPath);
26
27 return JSON.stringify(loader) + ': require(' + loaderRequest + ')';
28 });
29
30 var cacheMaps = (params.cacheMaps || []).map(function (map) {
31 return '{\n match: ' + map.match + ',\n to: ' + map.to + ',\n requestTypes: ' + JSON.stringify(map.requestTypes) + ',\n }';
32 });
33
34 this.addDependency(templatePath);
35
36 var loadersCode = '{}';
37
38 if (loaders.length) {
39 loadersCode = '{\n ' + loaders.join(',\n') + '\n }';
40 }
41
42 var cacheMapsCode = '[]';
43
44 if (cacheMaps.length) {
45 cacheMapsCode = '[\n ' + cacheMaps.join(',\n') + '\n ]';
46 }
47
48 var helpersCode = [', {', 'loaders: ' + loadersCode + ',', 'cacheMaps: ' + cacheMapsCode + ',', '}'];
49
50 fs.readFile(templatePath, 'utf-8', function (err, template) {
51 if (err) return callback(err);
52
53 template = '\n ' + template + '\n WebpackServiceWorker(' + params.data_var_name + helpersCode.join('\n') + ');\n ' + source + '\n ';
54
55 callback(null, template);
56 });
57};
\No newline at end of file