@swoff/cli 0.0.1 → 0.1.0
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/bin/swoff +14 -12
- package/dist/index.js +659 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/generators/sw-generator.js +621 -0
- package/dist/lib/generators/sw-generator.js.map +1 -0
- package/dist/lib/generators/swoff-files-generator.js +1387 -0
- package/dist/lib/generators/swoff-files-generator.js.map +1 -0
- package/package.json +9 -7
- package/src/lib/templates/sw-template.js +23 -6
- package/src/index.ts +0 -475
- package/src/lib/generators/sw-generator.ts +0 -367
- package/src/lib/generators/swoff-files-generator.ts +0 -461
- package/src/lib/schema/swoff-config.schema.json +0 -171
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,621 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swoff Service Worker Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates a service worker based on swoff.config.json configuration.
|
|
5
|
+
* Can be run as CLI or imported as a module.
|
|
6
|
+
*
|
|
7
|
+
* CLI Usage:
|
|
8
|
+
* node sw-generator.js [--project-root <path>] [--package-dir <path>] [--config-path <path>]
|
|
9
|
+
*
|
|
10
|
+
* Module Usage:
|
|
11
|
+
* import { generate } from './sw-generator.js';
|
|
12
|
+
* generate({ projectRoot: '/path/to/project' });
|
|
13
|
+
*/
|
|
14
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
|
|
15
|
+
import { fileURLToPath } from "url";
|
|
16
|
+
import { join, dirname } from "path";
|
|
17
|
+
const args = process.argv.slice(2);
|
|
18
|
+
const projectRootArg = args.findIndex((arg) => arg === "--project-root");
|
|
19
|
+
const packageDirArg = args.findIndex((arg) => arg === "--package-dir");
|
|
20
|
+
const configPathArg = args.findIndex((arg) => arg === "--config-path");
|
|
21
|
+
const passedProjectRoot = projectRootArg !== -1 ? args[projectRootArg + 1] : null;
|
|
22
|
+
const passedPackageDir = packageDirArg !== -1 ? args[packageDirArg + 1] : null;
|
|
23
|
+
const passedConfigPath = configPathArg !== -1 ? args[configPathArg + 1] : null;
|
|
24
|
+
const scriptDir = dirname(fileURLToPath(import.meta.url));
|
|
25
|
+
const packageDir = passedPackageDir || join(scriptDir, "..");
|
|
26
|
+
const projectRoot = passedProjectRoot || process.cwd();
|
|
27
|
+
const defaultConfig = {
|
|
28
|
+
enabled: true,
|
|
29
|
+
version: "from-package",
|
|
30
|
+
minSupportedVersion: "0.0.0",
|
|
31
|
+
serviceWorker: {
|
|
32
|
+
autoRegister: true,
|
|
33
|
+
autoUpdate: false,
|
|
34
|
+
defaultStrategy: "cache-first",
|
|
35
|
+
strategies: {},
|
|
36
|
+
},
|
|
37
|
+
features: {
|
|
38
|
+
versionedSw: true,
|
|
39
|
+
offlineReads: true,
|
|
40
|
+
mutationQueue: false,
|
|
41
|
+
backgroundSync: false,
|
|
42
|
+
pwa: true,
|
|
43
|
+
auth: false,
|
|
44
|
+
crossTabSync: true,
|
|
45
|
+
tagInvalidation: true,
|
|
46
|
+
clientRegistration: true,
|
|
47
|
+
indexeddb: false,
|
|
48
|
+
},
|
|
49
|
+
build: {
|
|
50
|
+
outputDir: "dist",
|
|
51
|
+
swFilename: "sw",
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
export async function generate(options = {}) {
|
|
55
|
+
const optProjectRoot = options.projectRoot || projectRoot;
|
|
56
|
+
const optPackageDir = options.packageDir || packageDir;
|
|
57
|
+
const optConfigPath = options.configPath || passedConfigPath;
|
|
58
|
+
const pkgPath = join(optProjectRoot, "package.json");
|
|
59
|
+
let pkg = { version: "1.0.0" };
|
|
60
|
+
if (existsSync(pkgPath)) {
|
|
61
|
+
try {
|
|
62
|
+
pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
console.warn("Could not read package.json, using default version");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const templatePath = join(optPackageDir, "src/lib/templates/sw-template.js");
|
|
69
|
+
let template;
|
|
70
|
+
if (existsSync(templatePath)) {
|
|
71
|
+
template = readFileSync(templatePath, "utf8");
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
template = getDefaultTemplate();
|
|
75
|
+
}
|
|
76
|
+
let userConfig = {};
|
|
77
|
+
let configSource = "defaults";
|
|
78
|
+
const resolvedConfigPath = optConfigPath || join(optProjectRoot, "swoff.config.json");
|
|
79
|
+
if (existsSync(resolvedConfigPath)) {
|
|
80
|
+
try {
|
|
81
|
+
userConfig = JSON.parse(readFileSync(resolvedConfigPath, "utf8"));
|
|
82
|
+
configSource = "JSON";
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
console.warn("Could not parse swoff.config.json, using defaults");
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
const jsConfigPath = join(optProjectRoot, "swoff.config.js");
|
|
90
|
+
if (existsSync(jsConfigPath)) {
|
|
91
|
+
try {
|
|
92
|
+
const mod = await import(jsConfigPath);
|
|
93
|
+
userConfig = (mod.default || mod);
|
|
94
|
+
configSource = "JavaScript";
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
console.warn("Could not load swoff.config.js, using defaults");
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const config = { ...defaultConfig, ...userConfig };
|
|
102
|
+
if (!config.enabled) {
|
|
103
|
+
console.log("Swoff config generation disabled. Using custom code mode.");
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const version = config.version === "from-package" ? pkg.version || "1.0.0" : config.version;
|
|
107
|
+
const sw = generateServiceWorker(config, version);
|
|
108
|
+
const outputDir = join(optProjectRoot, config.build.outputDir);
|
|
109
|
+
const swFilename = config.build.swFilename;
|
|
110
|
+
if (!existsSync(outputDir)) {
|
|
111
|
+
mkdirSync(outputDir, { recursive: true });
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
writeFileSync(join(outputDir, `${swFilename}-v${version}.js`), sw);
|
|
115
|
+
writeFileSync(join(outputDir, "version.json"), JSON.stringify({
|
|
116
|
+
version: version,
|
|
117
|
+
minSupportedVersion: config.minSupportedVersion,
|
|
118
|
+
generatedAt: new Date().toISOString(),
|
|
119
|
+
configEnabled: config.enabled,
|
|
120
|
+
configSource: configSource,
|
|
121
|
+
}, null, 2));
|
|
122
|
+
console.log(`Service worker generated successfully.`);
|
|
123
|
+
console.log(`Output: ${outputDir}/${swFilename}-v${version}.js`);
|
|
124
|
+
console.log(`Version info: ${outputDir}/version.json`);
|
|
125
|
+
console.log(`Configuration source: ${configSource}`);
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
console.error(`Error writing files: ${err instanceof Error ? err.message : String(err)}`);
|
|
129
|
+
console.log("Make sure the output directory exists:");
|
|
130
|
+
console.log(` mkdir -p ${outputDir}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function generateServiceWorker(config, version) {
|
|
134
|
+
const { serviceWorker, features } = config;
|
|
135
|
+
const baseAssets = ["/", "/index.html"];
|
|
136
|
+
const pwaAssets = features.pwa ? ["/manifest.json"] : [];
|
|
137
|
+
const assetsToCache = [...baseAssets, ...pwaAssets];
|
|
138
|
+
let sw = getDefaultTemplate();
|
|
139
|
+
sw = sw.replace("// [[CACHE_NAME]]", `CACHE_NAME = 'sw-v${version}'`);
|
|
140
|
+
sw = sw.replace("// [[ASSETS_LIST]]", `ASSETS_TO_CACHE = ${JSON.stringify(assetsToCache.map((url) => ({ url, options: {} })), null, 2)}`);
|
|
141
|
+
sw = sw.replace("// [[AUTO_SKIP_WAITING]]", `const AUTO_SKIP_WAITING = ${config.serviceWorker.autoUpdate};`);
|
|
142
|
+
sw = sw.replace("// [[FETCH_HANDLER]]", generateFetchHandler(serviceWorker, features));
|
|
143
|
+
sw = sw.replace("// [[ACTIVATE_HANDLER]]", generateActivateHandler(features.versionedSw));
|
|
144
|
+
sw = sw.replace("// [[INSTALL_HANDLER]]", generateInstallHandler(features));
|
|
145
|
+
sw = sw.replace("// [[MESSAGE_HANDLER]]", generateMessageHandler(features));
|
|
146
|
+
if (features.tagInvalidation) {
|
|
147
|
+
sw = sw.replace("// [[TAG_MANAGEMENT]]", generateTagManagement());
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
sw = sw.replace("// [[TAG_MANAGEMENT]]", "");
|
|
151
|
+
}
|
|
152
|
+
sw = `// [[CONFIG_HEADER]]\n\n${sw}`;
|
|
153
|
+
sw = sw.replace("// [[CONFIG_HEADER]]", generateConfigHeader(config));
|
|
154
|
+
if (features.backgroundSync) {
|
|
155
|
+
sw += `\n\n${generateBackgroundSyncHandler()}`;
|
|
156
|
+
}
|
|
157
|
+
return sw;
|
|
158
|
+
}
|
|
159
|
+
function generateFetchHandler(swConfig, features) {
|
|
160
|
+
const { defaultStrategy, strategies } = swConfig;
|
|
161
|
+
const tagInvalidationCode = features.tagInvalidation ? `
|
|
162
|
+
const tagsHeader = event.request.headers.get("X-SW-Cache-Tags");
|
|
163
|
+
if (tagsHeader) {
|
|
164
|
+
const url = new URL(event.request.url).href;
|
|
165
|
+
const tags = tagsHeader.split(",").map((t) => t.trim());
|
|
166
|
+
await cacheTagUrl(url, tags);
|
|
167
|
+
}` : "";
|
|
168
|
+
const staleTagCode = features.tagInvalidation ? `
|
|
169
|
+
const tagsHeader = request.headers.get("X-SW-Cache-Tags");
|
|
170
|
+
if (tagsHeader) {
|
|
171
|
+
const url = new URL(request.url).href;
|
|
172
|
+
const tags = tagsHeader.split(",").map((t) => t.trim());
|
|
173
|
+
await cacheTagUrl(url, tags);
|
|
174
|
+
}` : "";
|
|
175
|
+
return `
|
|
176
|
+
function isReadRequest(request) {
|
|
177
|
+
const strategy = request.headers.get("X-SW-Cache-Strategy");
|
|
178
|
+
if (strategy === "read") return true;
|
|
179
|
+
if (strategy === "mutation") return false;
|
|
180
|
+
return request.method === "GET" || request.method === "HEAD";
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function determineCacheStrategy(request, customStrategies, defaultStrategy) {
|
|
184
|
+
const url = request.url;
|
|
185
|
+
for (const [pattern, strategy] of Object.entries(customStrategies)) {
|
|
186
|
+
if (url.includes(pattern.replace("*", ""))) return strategy;
|
|
187
|
+
}
|
|
188
|
+
return defaultStrategy;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
self.addEventListener("fetch", (event) => {
|
|
192
|
+
if (!isReadRequest(event.request)) return;
|
|
193
|
+
|
|
194
|
+
const strategy = determineCacheStrategy(event.request, ${JSON.stringify(strategies)}, "${defaultStrategy}");
|
|
195
|
+
|
|
196
|
+
if (strategy === "stale-while-revalidate" || event.request.headers.get("X-SW-Stale") === "true") {
|
|
197
|
+
event.respondWith(staleWhileRevalidate(event, event.request));
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
if (strategy === "network-first") {
|
|
202
|
+
event.respondWith(networkFirst(event, event.request));
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
if (strategy === "cache-only") {
|
|
207
|
+
event.respondWith(cacheOnly(event, event.request));
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
if (strategy === "network-only") {
|
|
212
|
+
event.respondWith(networkOnly(event, event.request));
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// cache-first (default)
|
|
217
|
+
event.respondWith(cacheFirst(event, event.request));
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
async function cacheFirst(event, request) {
|
|
221
|
+
const cache = await caches.open(CACHE_NAME);
|
|
222
|
+
const runtimeCache = await caches.open(CACHE_NAME_RUNTIME);
|
|
223
|
+
const url = new URL(request.url);
|
|
224
|
+
|
|
225
|
+
const byPath = await cache.match(url.pathname);
|
|
226
|
+
if (byPath) return byPath;
|
|
227
|
+
|
|
228
|
+
const byRequest = await runtimeCache.match(request);
|
|
229
|
+
if (byRequest) return byRequest;
|
|
230
|
+
|
|
231
|
+
if (request.mode === "navigate") {
|
|
232
|
+
const spa = await cache.match("/index.html");
|
|
233
|
+
if (spa) return spa;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
try {
|
|
237
|
+
const response = await fetch(request);
|
|
238
|
+
if (response.ok) {
|
|
239
|
+
const cloned = response.clone();
|
|
240
|
+
event.waitUntil(
|
|
241
|
+
(async () => {
|
|
242
|
+
await runtimeCache.put(request, cloned);${tagInvalidationCode}
|
|
243
|
+
})(),
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
return response;
|
|
247
|
+
} catch {
|
|
248
|
+
return new Response("Offline: content not available", { status: 503 });
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
async function networkFirst(event, request) {
|
|
253
|
+
const runtimeCache = await caches.open(CACHE_NAME_RUNTIME);
|
|
254
|
+
|
|
255
|
+
try {
|
|
256
|
+
const response = await fetch(request);
|
|
257
|
+
if (response.ok) {
|
|
258
|
+
const cloned = response.clone();
|
|
259
|
+
event.waitUntil(
|
|
260
|
+
(async () => {
|
|
261
|
+
await runtimeCache.put(request, cloned);${tagInvalidationCode}
|
|
262
|
+
})(),
|
|
263
|
+
);
|
|
264
|
+
}
|
|
265
|
+
return response;
|
|
266
|
+
} catch {
|
|
267
|
+
const cached = await runtimeCache.match(request);
|
|
268
|
+
if (cached) return cached;
|
|
269
|
+
|
|
270
|
+
if (request.mode === "navigate") {
|
|
271
|
+
const cache = await caches.open(CACHE_NAME);
|
|
272
|
+
const spa = await cache.match("/index.html");
|
|
273
|
+
if (spa) return spa;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return new Response("Offline: content not available", { status: 503 });
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
async function staleWhileRevalidate(event, request) {
|
|
281
|
+
const runtimeCache = await caches.open(CACHE_NAME_RUNTIME);
|
|
282
|
+
const cached = await runtimeCache.match(request);
|
|
283
|
+
|
|
284
|
+
if (cached) {
|
|
285
|
+
event.waitUntil(refreshCache(runtimeCache, request));
|
|
286
|
+
return cached;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
try {
|
|
290
|
+
const response = await fetch(request);
|
|
291
|
+
if (response.ok) {
|
|
292
|
+
await runtimeCache.put(request, response.clone());${staleTagCode}
|
|
293
|
+
}
|
|
294
|
+
return response;
|
|
295
|
+
} catch {
|
|
296
|
+
return new Response("Offline: content not available", { status: 503 });
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
async function refreshCache(cache, request) {
|
|
301
|
+
try {
|
|
302
|
+
const response = await fetch(request);
|
|
303
|
+
if (response.ok) {
|
|
304
|
+
await cache.put(request, response.clone());
|
|
305
|
+
}
|
|
306
|
+
} catch {
|
|
307
|
+
// Background refresh failed - stale cache remains usable
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
async function cacheOnly(event, request) {
|
|
312
|
+
const cache = await caches.open(CACHE_NAME);
|
|
313
|
+
const runtimeCache = await caches.open(CACHE_NAME_RUNTIME);
|
|
314
|
+
|
|
315
|
+
const byPath = await cache.match(new URL(request.url).pathname);
|
|
316
|
+
if (byPath) return byPath;
|
|
317
|
+
|
|
318
|
+
const byRequest = await runtimeCache.match(request);
|
|
319
|
+
if (byRequest) return byRequest;
|
|
320
|
+
|
|
321
|
+
return new Response("Not in cache", { status: 404 });
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
async function networkOnly(event, request) {
|
|
325
|
+
try {
|
|
326
|
+
return await fetch(request);
|
|
327
|
+
} catch {
|
|
328
|
+
return new Response("Network error", { status: 503 });
|
|
329
|
+
}
|
|
330
|
+
}`;
|
|
331
|
+
}
|
|
332
|
+
function generateActivateHandler(versionedSw) {
|
|
333
|
+
return `
|
|
334
|
+
self.addEventListener("activate", (event) => {
|
|
335
|
+
event.waitUntil(
|
|
336
|
+
caches.keys().then((keys) =>
|
|
337
|
+
Promise.all(
|
|
338
|
+
keys.filter((key) => key !== CACHE_NAME && key !== CACHE_NAME_RUNTIME).map((key) => caches.delete(key))
|
|
339
|
+
)
|
|
340
|
+
)
|
|
341
|
+
);
|
|
342
|
+
});`;
|
|
343
|
+
}
|
|
344
|
+
function generateInstallHandler(features) {
|
|
345
|
+
return `
|
|
346
|
+
self.addEventListener("install", (event) => {
|
|
347
|
+
event.waitUntil(
|
|
348
|
+
(async () => {
|
|
349
|
+
const cache = await caches.open(CACHE_NAME);
|
|
350
|
+
let downloaded = 0;
|
|
351
|
+
for (const asset of ASSETS_TO_CACHE) {
|
|
352
|
+
try {
|
|
353
|
+
const request = new Request(asset.url, asset.options);
|
|
354
|
+
await cache.add(request);
|
|
355
|
+
downloaded++;
|
|
356
|
+
const percent = Math.round((downloaded / ASSETS_TO_CACHE.length) * 100);
|
|
357
|
+
const clients = await self.clients.matchAll({ includeUncontrolled: true });
|
|
358
|
+
clients.forEach((client) => {
|
|
359
|
+
client.postMessage({
|
|
360
|
+
type: "SW_PROGRESS",
|
|
361
|
+
percent,
|
|
362
|
+
downloaded,
|
|
363
|
+
total: ASSETS_TO_CACHE.length,
|
|
364
|
+
});
|
|
365
|
+
});
|
|
366
|
+
} catch (err) {
|
|
367
|
+
console.error(\`Failed to cache \${asset.url}:\`, err);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
if (AUTO_SKIP_WAITING) self.skipWaiting();
|
|
371
|
+
})(),
|
|
372
|
+
);
|
|
373
|
+
});`;
|
|
374
|
+
}
|
|
375
|
+
function generateMessageHandler(features) {
|
|
376
|
+
let code = `
|
|
377
|
+
self.addEventListener("message", (event) => {
|
|
378
|
+
if (event.data.type === "SKIP_WAITING") {
|
|
379
|
+
self.skipWaiting();
|
|
380
|
+
}`;
|
|
381
|
+
if (features.tagInvalidation) {
|
|
382
|
+
code += `
|
|
383
|
+
if (event.data.type === "INVALIDATE_TAG" && event.data.tag) {
|
|
384
|
+
event.waitUntil(invalidateByTag(event.data.tag));
|
|
385
|
+
}`;
|
|
386
|
+
}
|
|
387
|
+
code += `
|
|
388
|
+
});`;
|
|
389
|
+
return code;
|
|
390
|
+
}
|
|
391
|
+
function generateTagManagement() {
|
|
392
|
+
return `
|
|
393
|
+
const TAG_DB_NAME = "swoff-cache-tags";
|
|
394
|
+
const TAG_STORE_NAME = "tags";
|
|
395
|
+
|
|
396
|
+
function openTagDB() {
|
|
397
|
+
return new Promise((resolve, reject) => {
|
|
398
|
+
const request = indexedDB.open(TAG_DB_NAME, 1);
|
|
399
|
+
request.onupgradeneeded = (e) => {
|
|
400
|
+
const db = e.target.result;
|
|
401
|
+
if (!db.objectStoreNames.contains(TAG_STORE_NAME)) {
|
|
402
|
+
const store = db.createObjectStore(TAG_STORE_NAME, { keyPath: "url" });
|
|
403
|
+
store.createIndex("by-tag", "tags", { multiEntry: true });
|
|
404
|
+
}
|
|
405
|
+
};
|
|
406
|
+
request.onsuccess = (e) => resolve(e.target.result);
|
|
407
|
+
request.onerror = (e) => reject(e.target.error);
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
async function cacheTagUrl(url, tags) {
|
|
412
|
+
const db = await openTagDB();
|
|
413
|
+
const tx = db.transaction(TAG_STORE_NAME, "readwrite");
|
|
414
|
+
const store = tx.objectStore(TAG_STORE_NAME);
|
|
415
|
+
store.put({ url, tags });
|
|
416
|
+
await new Promise((resolve, reject) => {
|
|
417
|
+
tx.oncomplete = () => resolve();
|
|
418
|
+
tx.onerror = () => reject(tx.error);
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
async function invalidateByTag(tag) {
|
|
423
|
+
const db = await openTagDB();
|
|
424
|
+
const tx = db.transaction(TAG_STORE_NAME, "readonly");
|
|
425
|
+
const store = tx.objectStore(TAG_STORE_NAME);
|
|
426
|
+
const index = store.index("by-tag");
|
|
427
|
+
const entries = await new Promise((resolve, reject) => {
|
|
428
|
+
const request = index.getAll(tag);
|
|
429
|
+
request.onsuccess = () => resolve(request.result);
|
|
430
|
+
request.onerror = () => reject(request.error);
|
|
431
|
+
});
|
|
432
|
+
await db.close();
|
|
433
|
+
|
|
434
|
+
const runtimeCache = await caches.open(CACHE_NAME_RUNTIME);
|
|
435
|
+
for (const entry of entries) {
|
|
436
|
+
await runtimeCache.delete(entry.url);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
const writeDb = await openTagDB();
|
|
440
|
+
const writeTx = writeDb.transaction(TAG_STORE_NAME, "readwrite");
|
|
441
|
+
const writeStore = writeTx.objectStore(TAG_STORE_NAME);
|
|
442
|
+
for (const entry of entries) {
|
|
443
|
+
writeStore.delete(entry.url);
|
|
444
|
+
}
|
|
445
|
+
await new Promise((resolve, reject) => {
|
|
446
|
+
writeTx.oncomplete = () => resolve();
|
|
447
|
+
writeTx.onerror = () => reject(writeTx.error);
|
|
448
|
+
});
|
|
449
|
+
|
|
450
|
+
const clients = await self.clients.matchAll();
|
|
451
|
+
clients.forEach((client) => {
|
|
452
|
+
client.postMessage({ type: "TAG_INVALIDATED", tag });
|
|
453
|
+
});
|
|
454
|
+
}`;
|
|
455
|
+
}
|
|
456
|
+
function generateBackgroundSyncHandler() {
|
|
457
|
+
return `
|
|
458
|
+
self.addEventListener("sync", (event) => {
|
|
459
|
+
if (event.tag === "sync-mutations") {
|
|
460
|
+
event.waitUntil(processMutationQueueInSW());
|
|
461
|
+
}
|
|
462
|
+
});
|
|
463
|
+
|
|
464
|
+
async function processMutationQueueInSW() {
|
|
465
|
+
const SW_DB_NAME = "swoff-queue";
|
|
466
|
+
const SW_STORE_NAME = "mutations";
|
|
467
|
+
const SW_MAX_RETRIES = 5;
|
|
468
|
+
|
|
469
|
+
let succeeded = 0;
|
|
470
|
+
let failed = 0;
|
|
471
|
+
const tagsToInvalidate = new Set();
|
|
472
|
+
|
|
473
|
+
try {
|
|
474
|
+
const db = await new Promise((resolve, reject) => {
|
|
475
|
+
const request = indexedDB.open(SW_DB_NAME, 1);
|
|
476
|
+
request.onupgradeneeded = (e) => {
|
|
477
|
+
const db = e.target.result;
|
|
478
|
+
if (!db.objectStoreNames.contains(SW_STORE_NAME)) {
|
|
479
|
+
const store = db.createObjectStore(SW_STORE_NAME, { keyPath: "id" });
|
|
480
|
+
store.createIndex("by-timestamp", "timestamp");
|
|
481
|
+
}
|
|
482
|
+
};
|
|
483
|
+
request.onsuccess = (e) => resolve(e.target.result);
|
|
484
|
+
request.onerror = (e) => reject(e.target.error);
|
|
485
|
+
});
|
|
486
|
+
|
|
487
|
+
const tx = db.transaction(SW_STORE_NAME, "readonly");
|
|
488
|
+
const store = tx.objectStore(SW_STORE_NAME);
|
|
489
|
+
const index = store.index("by-timestamp");
|
|
490
|
+
const queue = await new Promise((resolve, reject) => {
|
|
491
|
+
const request = index.getAll();
|
|
492
|
+
request.onsuccess = () => resolve(request.result);
|
|
493
|
+
request.onerror = () => reject(request.error);
|
|
494
|
+
});
|
|
495
|
+
|
|
496
|
+
for (const item of queue) {
|
|
497
|
+
if (item.retryCount >= SW_MAX_RETRIES) {
|
|
498
|
+
await removeFromSWQueue(db, item.id);
|
|
499
|
+
failed++;
|
|
500
|
+
continue;
|
|
501
|
+
}
|
|
502
|
+
try {
|
|
503
|
+
const response = await fetch(item.url, {
|
|
504
|
+
method: item.method,
|
|
505
|
+
headers: { "Content-Type": "application/json", ...item.headers },
|
|
506
|
+
body: JSON.stringify(item.body),
|
|
507
|
+
});
|
|
508
|
+
if (!response.ok) throw new Error(\`HTTP \${response.status}\`);
|
|
509
|
+
|
|
510
|
+
if (item.tags) {
|
|
511
|
+
item.tags.forEach((tag) => tagsToInvalidate.add(tag));
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
await removeFromSWQueue(db, item.id);
|
|
515
|
+
succeeded++;
|
|
516
|
+
} catch {
|
|
517
|
+
item.retryCount++;
|
|
518
|
+
await updateInSWQueue(db, item);
|
|
519
|
+
failed++;
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
} catch (err) {
|
|
523
|
+
console.error("Background sync failed:", err);
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
for (const tag of tagsToInvalidate) {
|
|
527
|
+
await invalidateByTag(tag);
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
const clients = await self.clients.matchAll();
|
|
531
|
+
for (const client of clients) {
|
|
532
|
+
client.postMessage({
|
|
533
|
+
type: "BACKGROUND_SYNC_COMPLETE",
|
|
534
|
+
detail: { succeeded, failed, tags: [...tagsToInvalidate] },
|
|
535
|
+
});
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
async function removeFromSWQueue(db, id) {
|
|
540
|
+
const tx = db.transaction(SW_STORE_NAME, "readwrite");
|
|
541
|
+
tx.objectStore(SW_STORE_NAME).delete(id);
|
|
542
|
+
await new Promise((resolve, reject) => {
|
|
543
|
+
tx.oncomplete = () => resolve();
|
|
544
|
+
tx.onerror = () => reject(tx.error);
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
async function updateInSWQueue(db, item) {
|
|
549
|
+
const tx = db.transaction(SW_STORE_NAME, "readwrite");
|
|
550
|
+
tx.objectStore(SW_STORE_NAME).put(item);
|
|
551
|
+
await new Promise((resolve, reject) => {
|
|
552
|
+
tx.oncomplete = () => resolve();
|
|
553
|
+
tx.onerror = () => reject(tx.error);
|
|
554
|
+
});
|
|
555
|
+
}`;
|
|
556
|
+
}
|
|
557
|
+
function generateConfigHeader(config) {
|
|
558
|
+
return `/**
|
|
559
|
+
* Swoff Service Worker - Auto-Generated
|
|
560
|
+
* Generated from swoff.config.json
|
|
561
|
+
* DO NOT EDIT MANUALLY
|
|
562
|
+
* Version: ${config.version}
|
|
563
|
+
* Features: versionedSw=${config.features.versionedSw}, offlineReads=${config.features.offlineReads}, mutationQueue=${config.features.mutationQueue}, backgroundSync=${config.features.backgroundSync}, tagInvalidation=${config.features.tagInvalidation}
|
|
564
|
+
* Default Strategy: ${config.serviceWorker.defaultStrategy}
|
|
565
|
+
* See: https://swoff.netlify.app/docs
|
|
566
|
+
*/`;
|
|
567
|
+
}
|
|
568
|
+
function getDefaultTemplate() {
|
|
569
|
+
return `let CACHE_NAME = "";
|
|
570
|
+
let ASSETS_TO_CACHE = [];
|
|
571
|
+
|
|
572
|
+
// [[CACHE_NAME]]
|
|
573
|
+
// [[ASSETS_LIST]]
|
|
574
|
+
// [[AUTO_SKIP_WAITING]]
|
|
575
|
+
|
|
576
|
+
const CACHE_NAME_RUNTIME = "swoff-runtime";
|
|
577
|
+
|
|
578
|
+
// [[INSTALL_HANDLER]]
|
|
579
|
+
// [[ACTIVATE_HANDLER]]
|
|
580
|
+
// [[MESSAGE_HANDLER]]
|
|
581
|
+
// [[FETCH_HANDLER]]
|
|
582
|
+
// [[TAG_MANAGEMENT]]
|
|
583
|
+
|
|
584
|
+
const SWOFF = {
|
|
585
|
+
cache: {
|
|
586
|
+
async get(key) {
|
|
587
|
+
const cache = await caches.open(CACHE_NAME);
|
|
588
|
+
return cache.match(key);
|
|
589
|
+
},
|
|
590
|
+
async put(request, response) {
|
|
591
|
+
const cache = await caches.open(CACHE_NAME);
|
|
592
|
+
await cache.put(request, response);
|
|
593
|
+
},
|
|
594
|
+
async delete(request) {
|
|
595
|
+
const cache = await caches.open(CACHE_NAME);
|
|
596
|
+
return cache.delete(request);
|
|
597
|
+
}
|
|
598
|
+
},
|
|
599
|
+
network: {
|
|
600
|
+
async fetch(request, options = {}) {
|
|
601
|
+
try {
|
|
602
|
+
return await fetch(request, options);
|
|
603
|
+
} catch (error) {
|
|
604
|
+
throw new Error(\`Network request failed: \${error.message}\`);
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
};
|
|
609
|
+
|
|
610
|
+
if (typeof self !== 'undefined') {
|
|
611
|
+
self.SWOFF = SWOFF;
|
|
612
|
+
}`;
|
|
613
|
+
}
|
|
614
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
615
|
+
generate().catch((err) => {
|
|
616
|
+
console.error(err);
|
|
617
|
+
process.exit(1);
|
|
618
|
+
});
|
|
619
|
+
}
|
|
620
|
+
export default { generate };
|
|
621
|
+
//# sourceMappingURL=sw-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sw-generator.js","sourceRoot":"","sources":["../../../src/lib/generators/sw-generator.ts"],"names":[],"mappings":"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"}
|