1 | 'use strict';
|
2 |
|
3 | var _entries = require('babel-runtime/core-js/object/entries');
|
4 |
|
5 | var _entries2 = _interopRequireDefault(_entries);
|
6 |
|
7 | var _getIterator2 = require('babel-runtime/core-js/get-iterator');
|
8 |
|
9 | var _getIterator3 = _interopRequireDefault(_getIterator2);
|
10 |
|
11 | var _stringify = require('babel-runtime/core-js/json/stringify');
|
12 |
|
13 | var _stringify2 = _interopRequireDefault(_stringify);
|
14 |
|
15 | var _keys = require('babel-runtime/core-js/object/keys');
|
16 |
|
17 | var _keys2 = _interopRequireDefault(_keys);
|
18 |
|
19 | var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
|
20 |
|
21 | var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
|
22 |
|
23 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 | var ol = require('common-tags').oneLine;
|
42 |
|
43 | var errors = require('./errors');
|
44 | var stringifyWithoutComments = require('./stringify-without-comments');
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
|
55 |
|
56 | function getOptionsString() {
|
57 | var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
58 |
|
59 | var plugins = [];
|
60 | if (options.plugins) {
|
61 |
|
62 | plugins = options.plugins.map(stringifyWithoutComments);
|
63 | delete options.plugins;
|
64 | }
|
65 |
|
66 |
|
67 |
|
68 |
|
69 | var handlerOptionKeys = ['cacheName', 'networkTimeoutSeconds', 'fetchOptions', 'matchOptions'];
|
70 | var handlerOptions = {};
|
71 | var _iteratorNormalCompletion = true;
|
72 | var _didIteratorError = false;
|
73 | var _iteratorError = undefined;
|
74 |
|
75 | try {
|
76 | for (var _iterator = (0, _getIterator3.default)(handlerOptionKeys), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
77 | var key = _step.value;
|
78 |
|
79 | if (key in options) {
|
80 | handlerOptions[key] = options[key];
|
81 | delete options[key];
|
82 | }
|
83 | }
|
84 | } catch (err) {
|
85 | _didIteratorError = true;
|
86 | _iteratorError = err;
|
87 | } finally {
|
88 | try {
|
89 | if (!_iteratorNormalCompletion && _iterator.return) {
|
90 | _iterator.return();
|
91 | }
|
92 | } finally {
|
93 | if (_didIteratorError) {
|
94 | throw _iteratorError;
|
95 | }
|
96 | }
|
97 | }
|
98 |
|
99 | var pluginsMapping = {
|
100 | backgroundSync: 'workbox.backgroundSync.Plugin',
|
101 | broadcastUpdate: 'workbox.broadcastUpdate.Plugin',
|
102 | expiration: 'workbox.expiration.Plugin',
|
103 | cacheableResponse: 'workbox.cacheableResponse.Plugin'
|
104 | };
|
105 |
|
106 | var _iteratorNormalCompletion2 = true;
|
107 | var _didIteratorError2 = false;
|
108 | var _iteratorError2 = undefined;
|
109 |
|
110 | try {
|
111 | for (var _iterator2 = (0, _getIterator3.default)((0, _entries2.default)(options)), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
112 | var _ref = _step2.value;
|
113 |
|
114 | var _ref2 = (0, _slicedToArray3.default)(_ref, 2);
|
115 |
|
116 | var pluginName = _ref2[0];
|
117 | var pluginConfig = _ref2[1];
|
118 |
|
119 |
|
120 | if ((0, _keys2.default)(pluginConfig).length === 0) {
|
121 | continue;
|
122 | }
|
123 |
|
124 | var pluginString = pluginsMapping[pluginName];
|
125 | if (!pluginString) {
|
126 | throw new Error(`${errors['bad-runtime-caching-config']} ${pluginName}`);
|
127 | }
|
128 |
|
129 | var pluginCode = void 0;
|
130 | switch (pluginName) {
|
131 |
|
132 |
|
133 | case 'backgroundSync':
|
134 | {
|
135 | var name = pluginConfig.name;
|
136 | pluginCode = `new ${pluginString}(${(0, _stringify2.default)(name)}`;
|
137 | if ('options' in pluginConfig) {
|
138 | pluginCode += `, ${(0, _stringify2.default)(pluginConfig.options)}`;
|
139 | }
|
140 | pluginCode += `)`;
|
141 |
|
142 | break;
|
143 | }
|
144 |
|
145 | case 'broadcastUpdate':
|
146 | {
|
147 | var channelName = pluginConfig.channelName;
|
148 | pluginCode = `new ${pluginString}(${(0, _stringify2.default)(channelName)}`;
|
149 | if ('options' in pluginConfig) {
|
150 | pluginCode += `, ${(0, _stringify2.default)(pluginConfig.options)}`;
|
151 | }
|
152 | pluginCode += `)`;
|
153 |
|
154 | break;
|
155 | }
|
156 |
|
157 |
|
158 |
|
159 | default:
|
160 | {
|
161 | pluginCode = `new ${pluginString}(${(0, _stringify2.default)(pluginConfig)})`;
|
162 | }
|
163 | }
|
164 |
|
165 | plugins.push(pluginCode);
|
166 | }
|
167 | } catch (err) {
|
168 | _didIteratorError2 = true;
|
169 | _iteratorError2 = err;
|
170 | } finally {
|
171 | try {
|
172 | if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
173 | _iterator2.return();
|
174 | }
|
175 | } finally {
|
176 | if (_didIteratorError2) {
|
177 | throw _iteratorError2;
|
178 | }
|
179 | }
|
180 | }
|
181 |
|
182 | if ((0, _keys2.default)(handlerOptions).length > 0 || plugins.length > 0) {
|
183 | var optionsString = (0, _stringify2.default)(handlerOptions).slice(1, -1);
|
184 | return ol`{
|
185 | ${optionsString ? optionsString + ',' : ''}
|
186 | plugins: [${plugins.join(', ')}]
|
187 | }`;
|
188 | } else {
|
189 | return '';
|
190 | }
|
191 | }
|
192 |
|
193 | module.exports = function () {
|
194 | var runtimeCaching = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
195 |
|
196 | return runtimeCaching.map(function (entry) {
|
197 | var method = entry.method || 'GET';
|
198 |
|
199 | if (!entry.urlPattern) {
|
200 | throw new Error(errors['urlPattern-is-required']);
|
201 | }
|
202 |
|
203 | if (!entry.handler) {
|
204 | throw new Error(errors['handler-is-required']);
|
205 | }
|
206 |
|
207 |
|
208 |
|
209 | if (entry.options && entry.options.networkTimeoutSeconds && entry.handler !== 'networkFirst') {
|
210 | throw new Error(errors['invalid-network-timeout-seconds']);
|
211 | }
|
212 |
|
213 |
|
214 |
|
215 |
|
216 | var matcher = typeof entry.urlPattern === 'string' ? (0, _stringify2.default)(entry.urlPattern) : entry.urlPattern;
|
217 |
|
218 | if (typeof entry.handler === 'string') {
|
219 | var optionsString = getOptionsString(entry.options || {});
|
220 |
|
221 | var strategyString = `workbox.strategies.${entry.handler}(${optionsString})`;
|
222 |
|
223 | return `workbox.routing.registerRoute(` + `${matcher}, ${strategyString}, '${method}');\n`;
|
224 | } else if (typeof entry.handler === 'function') {
|
225 | return `workbox.routing.registerRoute(` + `${matcher}, ${entry.handler}, '${method}');\n`;
|
226 | }
|
227 | }).filter(function (entry) {
|
228 | return Boolean(entry);
|
229 | });
|
230 | }; |
\ | No newline at end of file |