@angular/service-worker 16.0.0-next.4 → 16.0.0-next.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/ngsw-worker.js CHANGED
@@ -19,7 +19,7 @@
19
19
  };
20
20
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
21
 
22
- // bazel-out/k8-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/named-cache-storage.mjs
22
+ // bazel-out/darwin-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/named-cache-storage.mjs
23
23
  var NamedCacheStorage = class {
24
24
  constructor(original, cacheNamePrefix) {
25
25
  this.original = original;
@@ -46,7 +46,7 @@
46
46
  }
47
47
  };
48
48
 
49
- // bazel-out/k8-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/adapter.mjs
49
+ // bazel-out/darwin-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/adapter.mjs
50
50
  var Adapter = class {
51
51
  constructor(scopeUrl, caches) {
52
52
  this.scopeUrl = scopeUrl;
@@ -84,7 +84,7 @@
84
84
  }
85
85
  };
86
86
 
87
- // bazel-out/k8-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/database.mjs
87
+ // bazel-out/darwin-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/database.mjs
88
88
  var NotFound = class {
89
89
  constructor(table, key) {
90
90
  this.table = table;
@@ -92,7 +92,7 @@
92
92
  }
93
93
  };
94
94
 
95
- // bazel-out/k8-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/db-cache.mjs
95
+ // bazel-out/darwin-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/db-cache.mjs
96
96
  var CacheDatabase = class {
97
97
  constructor(adapter2) {
98
98
  this.adapter = adapter2;
@@ -150,7 +150,7 @@
150
150
  }
151
151
  };
152
152
 
153
- // bazel-out/k8-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/api.mjs
153
+ // bazel-out/darwin-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/api.mjs
154
154
  var UpdateCacheStatus;
155
155
  (function(UpdateCacheStatus2) {
156
156
  UpdateCacheStatus2[UpdateCacheStatus2["NOT_CACHED"] = 0] = "NOT_CACHED";
@@ -158,7 +158,7 @@
158
158
  UpdateCacheStatus2[UpdateCacheStatus2["CACHED"] = 2] = "CACHED";
159
159
  })(UpdateCacheStatus || (UpdateCacheStatus = {}));
160
160
 
161
- // bazel-out/k8-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/error.mjs
161
+ // bazel-out/darwin-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/error.mjs
162
162
  var SwCriticalError = class extends Error {
163
163
  constructor() {
164
164
  super(...arguments);
@@ -180,7 +180,7 @@ ${error.stack}`;
180
180
  }
181
181
  };
182
182
 
183
- // bazel-out/k8-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/sha1.mjs
183
+ // bazel-out/darwin-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/sha1.mjs
184
184
  function sha1(str) {
185
185
  const utf8 = str;
186
186
  const words32 = stringToWords32(utf8, Endian.Big);
@@ -295,7 +295,7 @@ ${error.stack}`;
295
295
  return hex.toLowerCase();
296
296
  }
297
297
 
298
- // bazel-out/k8-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/assets.mjs
298
+ // bazel-out/darwin-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/assets.mjs
299
299
  var AssetGroup = class {
300
300
  constructor(scope2, adapter2, idle, config, hashes, db, cacheNamePrefix) {
301
301
  this.scope = scope2;
@@ -571,7 +571,7 @@ ${error.stack}`;
571
571
  }
572
572
  };
573
573
 
574
- // bazel-out/k8-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/data.mjs
574
+ // bazel-out/darwin-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/data.mjs
575
575
  var LruList = class {
576
576
  constructor(state) {
577
577
  if (state === void 0) {
@@ -865,7 +865,7 @@ ${error.stack}`;
865
865
  }
866
866
  };
867
867
 
868
- // bazel-out/k8-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/app-version.mjs
868
+ // bazel-out/darwin-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/app-version.mjs
869
869
  var BACKWARDS_COMPATIBILITY_NAVIGATION_URLS = [
870
870
  { positive: true, regex: "^/.*$" },
871
871
  { positive: false, regex: "^/.*\\.[^/]*$" },
@@ -883,8 +883,8 @@ ${error.stack}`;
883
883
  this.manifest = manifest;
884
884
  this.manifestHash = manifestHash;
885
885
  this.hashTable = /* @__PURE__ */ new Map();
886
- this.indexUrl = this.adapter.normalizeUrl(this.manifest.index);
887
886
  this._okay = true;
887
+ this.indexUrl = this.adapter.normalizeUrl(this.manifest.index);
888
888
  Object.keys(manifest.hashTable).forEach((url) => {
889
889
  this.hashTable.set(adapter2.normalizeUrl(url), manifest.hashTable[url]);
890
890
  });
@@ -1016,8 +1016,8 @@ ${error.stack}`;
1016
1016
  }
1017
1017
  };
1018
1018
 
1019
- // bazel-out/k8-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/debug.mjs
1020
- var SW_VERSION = "16.0.0-next.4";
1019
+ // bazel-out/darwin-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/debug.mjs
1020
+ var SW_VERSION = "16.0.0-next.6";
1021
1021
  var DEBUG_LOG_BUFFER_SIZE = 100;
1022
1022
  var DebugHandler = class {
1023
1023
  constructor(driver, adapter2) {
@@ -1090,7 +1090,7 @@ ${msgIdle}`, { headers: this.adapter.newHeaders({ "Content-Type": "text/plain" }
1090
1090
  }
1091
1091
  };
1092
1092
 
1093
- // bazel-out/k8-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/idle.mjs
1093
+ // bazel-out/darwin-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/idle.mjs
1094
1094
  var IdleScheduler = class {
1095
1095
  constructor(adapter2, delay, maxDelay, debug) {
1096
1096
  this.adapter = adapter2;
@@ -1168,12 +1168,12 @@ ${msgIdle}`, { headers: this.adapter.newHeaders({ "Content-Type": "text/plain" }
1168
1168
  }
1169
1169
  };
1170
1170
 
1171
- // bazel-out/k8-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/manifest.mjs
1171
+ // bazel-out/darwin-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/manifest.mjs
1172
1172
  function hashManifest(manifest) {
1173
1173
  return sha1(JSON.stringify(manifest));
1174
1174
  }
1175
1175
 
1176
- // bazel-out/k8-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/msg.mjs
1176
+ // bazel-out/darwin-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/msg.mjs
1177
1177
  function isMsgCheckForUpdates(msg) {
1178
1178
  return msg.action === "CHECK_FOR_UPDATES";
1179
1179
  }
@@ -1181,7 +1181,7 @@ ${msgIdle}`, { headers: this.adapter.newHeaders({ "Content-Type": "text/plain" }
1181
1181
  return msg.action === "ACTIVATE_UPDATE";
1182
1182
  }
1183
1183
 
1184
- // bazel-out/k8-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/driver.mjs
1184
+ // bazel-out/darwin-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/src/driver.mjs
1185
1185
  var IDLE_DELAY = 5e3;
1186
1186
  var MAX_IDLE_DELAY = 3e4;
1187
1187
  var SUPPORTED_CONFIG_VERSION = 1;
@@ -1222,8 +1222,8 @@ ${msgIdle}`, { headers: this.adapter.newHeaders({ "Content-Type": "text/plain" }
1222
1222
  this.lastUpdateCheck = null;
1223
1223
  this.scheduledNavUpdateCheck = false;
1224
1224
  this.loggedInvalidOnlyIfCachedRequest = false;
1225
- this.ngswStatePath = this.adapter.parseUrl("ngsw/state", this.scope.registration.scope).path;
1226
1225
  this.controlTable = this.db.open("control");
1226
+ this.ngswStatePath = this.adapter.parseUrl("ngsw/state", this.scope.registration.scope).path;
1227
1227
  this.scope.addEventListener("install", (event) => {
1228
1228
  event.waitUntil(this.scope.skipWaiting());
1229
1229
  });
@@ -1838,7 +1838,7 @@ ${msgIdle}`, { headers: this.adapter.newHeaders({ "Content-Type": "text/plain" }
1838
1838
  }
1839
1839
  };
1840
1840
 
1841
- // bazel-out/k8-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/main.mjs
1841
+ // bazel-out/darwin-fastbuild-ST-2e5f3376adb5/bin/packages/service-worker/worker/main.mjs
1842
1842
  var scope = self;
1843
1843
  var adapter = new Adapter(scope.registration.scope, self.caches);
1844
1844
  new Driver(scope, adapter, new CacheDatabase(adapter));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular/service-worker",
3
- "version": "16.0.0-next.4",
3
+ "version": "16.0.0-next.6",
4
4
  "description": "Angular - service worker tooling!",
5
5
  "author": "angular",
6
6
  "license": "MIT",
@@ -22,27 +22,23 @@
22
22
  },
23
23
  ".": {
24
24
  "types": "./index.d.ts",
25
- "esm2020": "./esm2020/service-worker.mjs",
26
- "es2020": "./fesm2020/service-worker.mjs",
27
- "es2015": "./fesm2015/service-worker.mjs",
28
- "node": "./fesm2015/service-worker.mjs",
29
- "default": "./fesm2020/service-worker.mjs"
25
+ "esm2022": "./esm2022/service-worker.mjs",
26
+ "esm": "./esm2022/service-worker.mjs",
27
+ "default": "./fesm2022/service-worker.mjs"
30
28
  },
31
29
  "./config": {
32
30
  "types": "./config/index.d.ts",
33
- "esm2020": "./esm2020/config/config.mjs",
34
- "es2020": "./fesm2020/config.mjs",
35
- "es2015": "./fesm2015/config.mjs",
36
- "node": "./fesm2015/config.mjs",
37
- "default": "./fesm2020/config.mjs"
31
+ "esm2022": "./esm2022/config/config.mjs",
32
+ "esm": "./esm2022/config/config.mjs",
33
+ "default": "./fesm2022/config.mjs"
38
34
  }
39
35
  },
40
36
  "dependencies": {
41
37
  "tslib": "^2.3.0"
42
38
  },
43
39
  "peerDependencies": {
44
- "@angular/core": "16.0.0-next.4",
45
- "@angular/common": "16.0.0-next.4"
40
+ "@angular/core": "16.0.0-next.6",
41
+ "@angular/common": "16.0.0-next.6"
46
42
  },
47
43
  "repository": {
48
44
  "type": "git",
@@ -73,11 +69,7 @@
73
69
  ]
74
70
  },
75
71
  "sideEffects": false,
76
- "fesm2020": "./fesm2020/service-worker.mjs",
77
- "fesm2015": "./fesm2015/service-worker.mjs",
78
- "esm2020": "./esm2020/service-worker.mjs",
72
+ "module": "./fesm2022/service-worker.mjs",
79
73
  "typings": "./index.d.ts",
80
- "module": "./fesm2015/service-worker.mjs",
81
- "es2020": "./fesm2020/service-worker.mjs",
82
74
  "type": "module"
83
75
  }
@@ -1,251 +0,0 @@
1
- /**
2
- * @license Angular v16.0.0-next.4
3
- * (c) 2010-2022 Google LLC. https://angular.io/
4
- * License: MIT
5
- */
6
-
7
- import { __awaiter } from 'tslib';
8
-
9
- const PARSE_TO_PAIRS = /([0-9]+[^0-9]+)/g;
10
- const PAIR_SPLIT = /^([0-9]+)([dhmsu]+)$/;
11
- function parseDurationToMs(duration) {
12
- const matches = [];
13
- let array;
14
- while ((array = PARSE_TO_PAIRS.exec(duration)) !== null) {
15
- matches.push(array[0]);
16
- }
17
- return matches
18
- .map(match => {
19
- const res = PAIR_SPLIT.exec(match);
20
- if (res === null) {
21
- throw new Error(`Not a valid duration: ${match}`);
22
- }
23
- let factor = 0;
24
- switch (res[2]) {
25
- case 'd':
26
- factor = 86400000;
27
- break;
28
- case 'h':
29
- factor = 3600000;
30
- break;
31
- case 'm':
32
- factor = 60000;
33
- break;
34
- case 's':
35
- factor = 1000;
36
- break;
37
- case 'u':
38
- factor = 1;
39
- break;
40
- default:
41
- throw new Error(`Not a valid duration unit: ${res[2]}`);
42
- }
43
- return parseInt(res[1]) * factor;
44
- })
45
- .reduce((total, value) => total + value, 0);
46
- }
47
-
48
- const QUESTION_MARK = '[^/]';
49
- const WILD_SINGLE = '[^/]*';
50
- const WILD_OPEN = '(?:.+\\/)?';
51
- const TO_ESCAPE_BASE = [
52
- { replace: /\./g, with: '\\.' },
53
- { replace: /\+/g, with: '\\+' },
54
- { replace: /\*/g, with: WILD_SINGLE },
55
- ];
56
- const TO_ESCAPE_WILDCARD_QM = [
57
- ...TO_ESCAPE_BASE,
58
- { replace: /\?/g, with: QUESTION_MARK },
59
- ];
60
- const TO_ESCAPE_LITERAL_QM = [
61
- ...TO_ESCAPE_BASE,
62
- { replace: /\?/g, with: '\\?' },
63
- ];
64
- function globToRegex(glob, literalQuestionMark = false) {
65
- const toEscape = literalQuestionMark ? TO_ESCAPE_LITERAL_QM : TO_ESCAPE_WILDCARD_QM;
66
- const segments = glob.split('/').reverse();
67
- let regex = '';
68
- while (segments.length > 0) {
69
- const segment = segments.pop();
70
- if (segment === '**') {
71
- if (segments.length > 0) {
72
- regex += WILD_OPEN;
73
- }
74
- else {
75
- regex += '.*';
76
- }
77
- }
78
- else {
79
- const processed = toEscape.reduce((segment, escape) => segment.replace(escape.replace, escape.with), segment);
80
- regex += processed;
81
- if (segments.length > 0) {
82
- regex += '\\/';
83
- }
84
- }
85
- }
86
- return regex;
87
- }
88
-
89
- const DEFAULT_NAVIGATION_URLS = [
90
- '/**',
91
- '!/**/*.*',
92
- '!/**/*__*',
93
- '!/**/*__*/**', // Exclude URLs containing `__` in any other segment.
94
- ];
95
- /**
96
- * Consumes service worker configuration files and processes them into control files.
97
- *
98
- * @publicApi
99
- */
100
- class Generator {
101
- constructor(fs, baseHref) {
102
- this.fs = fs;
103
- this.baseHref = baseHref;
104
- }
105
- process(config) {
106
- var _a;
107
- return __awaiter(this, void 0, void 0, function* () {
108
- const unorderedHashTable = {};
109
- const assetGroups = yield this.processAssetGroups(config, unorderedHashTable);
110
- return {
111
- configVersion: 1,
112
- timestamp: Date.now(),
113
- appData: config.appData,
114
- index: joinUrls(this.baseHref, config.index),
115
- assetGroups,
116
- dataGroups: this.processDataGroups(config),
117
- hashTable: withOrderedKeys(unorderedHashTable),
118
- navigationUrls: processNavigationUrls(this.baseHref, config.navigationUrls),
119
- navigationRequestStrategy: (_a = config.navigationRequestStrategy) !== null && _a !== void 0 ? _a : 'performance',
120
- };
121
- });
122
- }
123
- processAssetGroups(config, hashTable) {
124
- return __awaiter(this, void 0, void 0, function* () {
125
- // Retrieve all files of the build.
126
- const allFiles = yield this.fs.list('/');
127
- const seenMap = new Set();
128
- const filesPerGroup = new Map();
129
- // Computed which files belong to each asset-group.
130
- for (const group of (config.assetGroups || [])) {
131
- if (group.resources.versionedFiles) {
132
- throw new Error(`Asset-group '${group.name}' in 'ngsw-config.json' uses the 'versionedFiles' option, ` +
133
- 'which is no longer supported. Use \'files\' instead.');
134
- }
135
- const fileMatcher = globListToMatcher(group.resources.files || []);
136
- const matchedFiles = allFiles.filter(fileMatcher).filter(file => !seenMap.has(file)).sort();
137
- matchedFiles.forEach(file => seenMap.add(file));
138
- filesPerGroup.set(group, matchedFiles);
139
- }
140
- // Compute hashes for all matched files and add them to the hash-table.
141
- const allMatchedFiles = [].concat(...Array.from(filesPerGroup.values())).sort();
142
- const allMatchedHashes = yield processInBatches(allMatchedFiles, 500, file => this.fs.hash(file));
143
- allMatchedFiles.forEach((file, idx) => {
144
- hashTable[joinUrls(this.baseHref, file)] = allMatchedHashes[idx];
145
- });
146
- // Generate and return the processed asset-groups.
147
- return Array.from(filesPerGroup.entries())
148
- .map(([group, matchedFiles]) => ({
149
- name: group.name,
150
- installMode: group.installMode || 'prefetch',
151
- updateMode: group.updateMode || group.installMode || 'prefetch',
152
- cacheQueryOptions: buildCacheQueryOptions(group.cacheQueryOptions),
153
- urls: matchedFiles.map(url => joinUrls(this.baseHref, url)),
154
- patterns: (group.resources.urls || []).map(url => urlToRegex(url, this.baseHref, true)),
155
- }));
156
- });
157
- }
158
- processDataGroups(config) {
159
- return (config.dataGroups || []).map(group => {
160
- return {
161
- name: group.name,
162
- patterns: group.urls.map(url => urlToRegex(url, this.baseHref, true)),
163
- strategy: group.cacheConfig.strategy || 'performance',
164
- maxSize: group.cacheConfig.maxSize,
165
- maxAge: parseDurationToMs(group.cacheConfig.maxAge),
166
- timeoutMs: group.cacheConfig.timeout && parseDurationToMs(group.cacheConfig.timeout),
167
- cacheOpaqueResponses: group.cacheConfig.cacheOpaqueResponses,
168
- cacheQueryOptions: buildCacheQueryOptions(group.cacheQueryOptions),
169
- version: group.version !== undefined ? group.version : 1,
170
- };
171
- });
172
- }
173
- }
174
- function processNavigationUrls(baseHref, urls = DEFAULT_NAVIGATION_URLS) {
175
- return urls.map(url => {
176
- const positive = !url.startsWith('!');
177
- url = positive ? url : url.slice(1);
178
- return { positive, regex: `^${urlToRegex(url, baseHref)}$` };
179
- });
180
- }
181
- function processInBatches(items, batchSize, processFn) {
182
- return __awaiter(this, void 0, void 0, function* () {
183
- const batches = [];
184
- for (let i = 0; i < items.length; i += batchSize) {
185
- batches.push(items.slice(i, i + batchSize));
186
- }
187
- return batches.reduce((prev, batch) => __awaiter(this, void 0, void 0, function* () { return (yield prev).concat(yield Promise.all(batch.map(item => processFn(item)))); }), Promise.resolve([]));
188
- });
189
- }
190
- function globListToMatcher(globs) {
191
- const patterns = globs.map(pattern => {
192
- if (pattern.startsWith('!')) {
193
- return {
194
- positive: false,
195
- regex: new RegExp('^' + globToRegex(pattern.slice(1)) + '$'),
196
- };
197
- }
198
- else {
199
- return {
200
- positive: true,
201
- regex: new RegExp('^' + globToRegex(pattern) + '$'),
202
- };
203
- }
204
- });
205
- return (file) => matches(file, patterns);
206
- }
207
- function matches(file, patterns) {
208
- return patterns.reduce((isMatch, pattern) => {
209
- if (pattern.positive) {
210
- return isMatch || pattern.regex.test(file);
211
- }
212
- else {
213
- return isMatch && !pattern.regex.test(file);
214
- }
215
- }, false);
216
- }
217
- function urlToRegex(url, baseHref, literalQuestionMark) {
218
- if (!url.startsWith('/') && url.indexOf('://') === -1) {
219
- // Prefix relative URLs with `baseHref`.
220
- // Strip a leading `.` from a relative `baseHref` (e.g. `./foo/`), since it would result in an
221
- // incorrect regex (matching a literal `.`).
222
- url = joinUrls(baseHref.replace(/^\.(?=\/)/, ''), url);
223
- }
224
- return globToRegex(url, literalQuestionMark);
225
- }
226
- function joinUrls(a, b) {
227
- if (a.endsWith('/') && b.startsWith('/')) {
228
- return a + b.slice(1);
229
- }
230
- else if (!a.endsWith('/') && !b.startsWith('/')) {
231
- return a + '/' + b;
232
- }
233
- return a + b;
234
- }
235
- function withOrderedKeys(unorderedObj) {
236
- const orderedObj = {};
237
- Object.keys(unorderedObj).sort().forEach(key => orderedObj[key] = unorderedObj[key]);
238
- return orderedObj;
239
- }
240
- function buildCacheQueryOptions(inOptions) {
241
- return Object.assign({ ignoreVary: true }, inOptions);
242
- }
243
-
244
- // This file is not used to build this module. It is only used during editing
245
-
246
- /**
247
- * Generated bundle index. Do not edit.
248
- */
249
-
250
- export { Generator };
251
- //# sourceMappingURL=config.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.mjs","sources":["../../../../../../packages/service-worker/config/src/duration.ts","../../../../../../packages/service-worker/config/src/glob.ts","../../../../../../packages/service-worker/config/src/generator.ts","../../../../../../packages/service-worker/config/index.ts","../../../../../../packages/service-worker/config/config.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nconst PARSE_TO_PAIRS = /([0-9]+[^0-9]+)/g;\nconst PAIR_SPLIT = /^([0-9]+)([dhmsu]+)$/;\n\nexport function parseDurationToMs(duration: string): number {\n const matches: string[] = [];\n\n let array: RegExpExecArray|null;\n while ((array = PARSE_TO_PAIRS.exec(duration)) !== null) {\n matches.push(array[0]);\n }\n return matches\n .map(match => {\n const res = PAIR_SPLIT.exec(match);\n if (res === null) {\n throw new Error(`Not a valid duration: ${match}`);\n }\n let factor: number = 0;\n switch (res[2]) {\n case 'd':\n factor = 86400000;\n break;\n case 'h':\n factor = 3600000;\n break;\n case 'm':\n factor = 60000;\n break;\n case 's':\n factor = 1000;\n break;\n case 'u':\n factor = 1;\n break;\n default:\n throw new Error(`Not a valid duration unit: ${res[2]}`);\n }\n return parseInt(res[1]) * factor;\n })\n .reduce((total, value) => total + value, 0);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nconst QUESTION_MARK = '[^/]';\nconst WILD_SINGLE = '[^/]*';\nconst WILD_OPEN = '(?:.+\\\\/)?';\n\nconst TO_ESCAPE_BASE = [\n {replace: /\\./g, with: '\\\\.'},\n {replace: /\\+/g, with: '\\\\+'},\n {replace: /\\*/g, with: WILD_SINGLE},\n];\nconst TO_ESCAPE_WILDCARD_QM = [\n ...TO_ESCAPE_BASE,\n {replace: /\\?/g, with: QUESTION_MARK},\n];\nconst TO_ESCAPE_LITERAL_QM = [\n ...TO_ESCAPE_BASE,\n {replace: /\\?/g, with: '\\\\?'},\n];\n\nexport function globToRegex(glob: string, literalQuestionMark = false): string {\n const toEscape = literalQuestionMark ? TO_ESCAPE_LITERAL_QM : TO_ESCAPE_WILDCARD_QM;\n const segments = glob.split('/').reverse();\n let regex: string = '';\n while (segments.length > 0) {\n const segment = segments.pop()!;\n if (segment === '**') {\n if (segments.length > 0) {\n regex += WILD_OPEN;\n } else {\n regex += '.*';\n }\n } else {\n const processed = toEscape.reduce(\n (segment, escape) => segment.replace(escape.replace, escape.with), segment);\n regex += processed;\n if (segments.length > 0) {\n regex += '\\\\/';\n }\n }\n }\n return regex;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {parseDurationToMs} from './duration';\nimport {Filesystem} from './filesystem';\nimport {globToRegex} from './glob';\nimport {AssetGroup, Config} from './in';\n\nconst DEFAULT_NAVIGATION_URLS = [\n '/**', // Include all URLs.\n '!/**/*.*', // Exclude URLs to files (containing a file extension in the last segment).\n '!/**/*__*', // Exclude URLs containing `__` in the last segment.\n '!/**/*__*/**', // Exclude URLs containing `__` in any other segment.\n];\n\n/**\n * Consumes service worker configuration files and processes them into control files.\n *\n * @publicApi\n */\nexport class Generator {\n constructor(readonly fs: Filesystem, private baseHref: string) {}\n\n async process(config: Config): Promise<Object> {\n const unorderedHashTable = {};\n const assetGroups = await this.processAssetGroups(config, unorderedHashTable);\n\n return {\n configVersion: 1,\n timestamp: Date.now(),\n appData: config.appData,\n index: joinUrls(this.baseHref, config.index),\n assetGroups,\n dataGroups: this.processDataGroups(config),\n hashTable: withOrderedKeys(unorderedHashTable),\n navigationUrls: processNavigationUrls(this.baseHref, config.navigationUrls),\n navigationRequestStrategy: config.navigationRequestStrategy ?? 'performance',\n };\n }\n\n private async processAssetGroups(config: Config, hashTable: {[file: string]: string|undefined}):\n Promise<Object[]> {\n // Retrieve all files of the build.\n const allFiles = await this.fs.list('/');\n const seenMap = new Set<string>();\n const filesPerGroup = new Map<AssetGroup, string[]>();\n\n // Computed which files belong to each asset-group.\n for (const group of (config.assetGroups || [])) {\n if ((group.resources as any).versionedFiles) {\n throw new Error(\n `Asset-group '${group.name}' in 'ngsw-config.json' uses the 'versionedFiles' option, ` +\n 'which is no longer supported. Use \\'files\\' instead.');\n }\n\n const fileMatcher = globListToMatcher(group.resources.files || []);\n const matchedFiles = allFiles.filter(fileMatcher).filter(file => !seenMap.has(file)).sort();\n\n matchedFiles.forEach(file => seenMap.add(file));\n filesPerGroup.set(group, matchedFiles);\n }\n\n // Compute hashes for all matched files and add them to the hash-table.\n const allMatchedFiles = ([] as string[]).concat(...Array.from(filesPerGroup.values())).sort();\n const allMatchedHashes =\n await processInBatches(allMatchedFiles, 500, file => this.fs.hash(file));\n allMatchedFiles.forEach((file, idx) => {\n hashTable[joinUrls(this.baseHref, file)] = allMatchedHashes[idx];\n });\n\n // Generate and return the processed asset-groups.\n return Array.from(filesPerGroup.entries())\n .map(([group, matchedFiles]) => ({\n name: group.name,\n installMode: group.installMode || 'prefetch',\n updateMode: group.updateMode || group.installMode || 'prefetch',\n cacheQueryOptions: buildCacheQueryOptions(group.cacheQueryOptions),\n urls: matchedFiles.map(url => joinUrls(this.baseHref, url)),\n patterns:\n (group.resources.urls || []).map(url => urlToRegex(url, this.baseHref, true)),\n }));\n }\n\n private processDataGroups(config: Config): Object[] {\n return (config.dataGroups || []).map(group => {\n return {\n name: group.name,\n patterns: group.urls.map(url => urlToRegex(url, this.baseHref, true)),\n strategy: group.cacheConfig.strategy || 'performance',\n maxSize: group.cacheConfig.maxSize,\n maxAge: parseDurationToMs(group.cacheConfig.maxAge),\n timeoutMs: group.cacheConfig.timeout && parseDurationToMs(group.cacheConfig.timeout),\n cacheOpaqueResponses: group.cacheConfig.cacheOpaqueResponses,\n cacheQueryOptions: buildCacheQueryOptions(group.cacheQueryOptions),\n version: group.version !== undefined ? group.version : 1,\n };\n });\n }\n}\n\nexport function processNavigationUrls(\n baseHref: string, urls = DEFAULT_NAVIGATION_URLS): {positive: boolean, regex: string}[] {\n return urls.map(url => {\n const positive = !url.startsWith('!');\n url = positive ? url : url.slice(1);\n return {positive, regex: `^${urlToRegex(url, baseHref)}$`};\n });\n}\n\nasync function processInBatches<I, O>(\n items: I[], batchSize: number, processFn: (item: I) => O | Promise<O>): Promise<O[]> {\n const batches = [];\n\n for (let i = 0; i < items.length; i += batchSize) {\n batches.push(items.slice(i, i + batchSize));\n }\n\n return batches.reduce(\n async (prev, batch) =>\n (await prev).concat(await Promise.all(batch.map(item => processFn(item)))),\n Promise.resolve<O[]>([]));\n}\n\nfunction globListToMatcher(globs: string[]): (file: string) => boolean {\n const patterns = globs.map(pattern => {\n if (pattern.startsWith('!')) {\n return {\n positive: false,\n regex: new RegExp('^' + globToRegex(pattern.slice(1)) + '$'),\n };\n } else {\n return {\n positive: true,\n regex: new RegExp('^' + globToRegex(pattern) + '$'),\n };\n }\n });\n return (file: string) => matches(file, patterns);\n}\n\nfunction matches(file: string, patterns: {positive: boolean, regex: RegExp}[]): boolean {\n return patterns.reduce((isMatch, pattern) => {\n if (pattern.positive) {\n return isMatch || pattern.regex.test(file);\n } else {\n return isMatch && !pattern.regex.test(file);\n }\n }, false);\n}\n\nfunction urlToRegex(url: string, baseHref: string, literalQuestionMark?: boolean): string {\n if (!url.startsWith('/') && url.indexOf('://') === -1) {\n // Prefix relative URLs with `baseHref`.\n // Strip a leading `.` from a relative `baseHref` (e.g. `./foo/`), since it would result in an\n // incorrect regex (matching a literal `.`).\n url = joinUrls(baseHref.replace(/^\\.(?=\\/)/, ''), url);\n }\n\n return globToRegex(url, literalQuestionMark);\n}\n\nfunction joinUrls(a: string, b: string): string {\n if (a.endsWith('/') && b.startsWith('/')) {\n return a + b.slice(1);\n } else if (!a.endsWith('/') && !b.startsWith('/')) {\n return a + '/' + b;\n }\n return a + b;\n}\n\nfunction withOrderedKeys<T extends {[key: string]: any}>(unorderedObj: T): T {\n const orderedObj = {} as {[key: string]: any};\n Object.keys(unorderedObj).sort().forEach(key => orderedObj[key] = unorderedObj[key]);\n return orderedObj as T;\n}\n\nfunction buildCacheQueryOptions(inOptions?: Pick<CacheQueryOptions, 'ignoreSearch'>):\n CacheQueryOptions {\n return {\n ignoreVary: true,\n ...inOptions,\n };\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n// This file is not used to build this module. It is only used during editing\n// by the TypeScript language service and during build for verification. `ngc`\n// replaces this file with production index.ts when it rewrites private symbol\n// names.\n\nexport * from './public_api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}