@swoff/cli 0.3.15 → 0.4.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.
Files changed (55) hide show
  1. package/dist/lib/commands/generate-guide.js +3 -5
  2. package/dist/lib/commands/generate-guide.js.map +1 -1
  3. package/dist/lib/commands/generate.js +6 -5
  4. package/dist/lib/commands/generate.js.map +1 -1
  5. package/dist/lib/commands/init.js +13 -38
  6. package/dist/lib/commands/init.js.map +1 -1
  7. package/dist/lib/config/minimal-config.js +1 -1
  8. package/dist/lib/config/minimal-config.js.map +1 -1
  9. package/dist/lib/config/validator.js +24 -4
  10. package/dist/lib/config/validator.js.map +1 -1
  11. package/dist/lib/generators/file-generators/client-injector-bundle.js +1 -1
  12. package/dist/lib/generators/file-generators/client-injector-bundle.js.map +1 -1
  13. package/dist/lib/generators/file-generators/context.js +3 -2
  14. package/dist/lib/generators/file-generators/context.js.map +1 -1
  15. package/dist/lib/generators/file-generators/generate-framework-adapters.js +1 -1
  16. package/dist/lib/generators/file-generators/generate-framework-adapters.js.map +1 -1
  17. package/dist/lib/generators/file-generators/sw-generator-build.js +24 -10
  18. package/dist/lib/generators/file-generators/sw-generator-build.js.map +1 -1
  19. package/dist/lib/generators/file-generators/sw-injector.js +1 -0
  20. package/dist/lib/generators/file-generators/sw-injector.js.map +1 -1
  21. package/dist/lib/generators/sw-build-utils.js +17 -3
  22. package/dist/lib/generators/sw-build-utils.js.map +1 -1
  23. package/dist/lib/generators/sw-generator.js +5 -5
  24. package/dist/lib/generators/sw-generator.js.map +1 -1
  25. package/dist/lib/generators/sw-sections/assemble-sw.js +0 -1
  26. package/dist/lib/generators/sw-sections/assemble-sw.js.map +1 -1
  27. package/dist/lib/generators/sw-sections/background-precache.js +1 -9
  28. package/dist/lib/generators/sw-sections/background-precache.js.map +1 -1
  29. package/dist/lib/generators/sw-sections/default-template.js +7 -3
  30. package/dist/lib/generators/sw-sections/default-template.js.map +1 -1
  31. package/dist/lib/generators/sw-sections/message-handler.js +0 -1
  32. package/dist/lib/generators/sw-sections/message-handler.js.map +1 -1
  33. package/dist/lib/generators/sw-sections/shared.js +0 -2
  34. package/dist/lib/generators/sw-sections/shared.js.map +1 -1
  35. package/dist/lib/generators/swoff-files-generator.js +2 -2
  36. package/dist/lib/generators/swoff-files-generator.js.map +1 -1
  37. package/dist/lib/shared/config-types.js +3 -2
  38. package/dist/lib/shared/config-types.js.map +1 -1
  39. package/dist/lib/utils/detect-framework.js +3 -27
  40. package/dist/lib/utils/detect-framework.js.map +1 -1
  41. package/dist/runtime/client-injector-bundle.js +16 -23
  42. package/dist/runtime/client-injector-bundle.js.map +1 -1
  43. package/dist/runtime/client-injector.js +0 -2
  44. package/dist/runtime/client-injector.js.map +1 -1
  45. package/dist/runtime/sw-injector.js +6 -19
  46. package/dist/runtime/sw-injector.js.map +1 -1
  47. package/dist/runtime/type-definitions.js +0 -5
  48. package/dist/runtime/type-definitions.js.map +1 -1
  49. package/package.json +1 -1
  50. package/templates/react/usePrecacheProgress.jsx +20 -0
  51. package/templates/react/usePrecacheProgress.tsx +20 -0
  52. package/dist/lib/generators/sw-sections/install-handler.js +0 -55
  53. package/dist/lib/generators/sw-sections/install-handler.js.map +0 -1
  54. package/templates/react/useSWUpdate.jsx +0 -31
  55. package/templates/react/useSWUpdate.tsx +0 -37
@@ -1 +1 @@
1
- {"version":3,"file":"sw-injector.js","sourceRoot":"","sources":["../../src/runtime/sw-injector.ts"],"names":[],"mappings":"AACA,OAAO,EAAK,CAAC,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,UAAU,sBAAsB,CACpC,GAAmE;IAEnE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;IAElD,OAAO;;;;;8DAKqD,GAAG;;;;;;;;wBAQzC,YAAY;;oCAEA,CAAC,CAAC,EAAE,EAAE,eAAe,CAAC;;;;;;;;;;;;;;;2CAef,CAAC,CAAC,EAAE,EAAE,eAAe,CAAC;;;;;;;oEAOG,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCA4BzC,CAAC,CAAC,EAAE,EAAE,eAAe,CAAC;;;;;;CAM1D,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"sw-injector.js","sourceRoot":"","sources":["../../src/runtime/sw-injector.ts"],"names":[],"mappings":"AACA,OAAO,EAAK,CAAC,EAAE,MAAM,YAAY,CAAC;AAElC,MAAM,UAAU,sBAAsB,CACpC,GAAmF;IAEnF,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;IAEzD,OAAO;;;;;8DAKqD,GAAG;;;;;;wBAMzC,YAAY;;oCAEA,CAAC,CAAC,EAAE,EAAE,eAAe,CAAC;;;;;;;;;;;;;;;2CAef,CAAC,CAAC,EAAE,EAAE,eAAe,CAAC;;;;;;;mEAOE,KAAK,IAAI,GAAG,GAAG,UAAU,GAAG,KAAK;;;;;;;;;;;;;;;;;qCAiB/D,CAAC,CAAC,EAAE,EAAE,eAAe,CAAC;;;;;;CAM1D,CAAC;AACF,CAAC"}
@@ -39,9 +39,6 @@ declare global {
39
39
  interface WindowEventMap {
40
40
  beforeinstallprompt: BeforeInstallPromptEvent;
41
41
  "sw-progress": CustomEvent<{ percent: number; downloaded: number; total: number }>;
42
- "sw-ready": CustomEvent;
43
- "sw-error": CustomEvent;
44
- "sw-version-detected": CustomEvent;
45
42
  "sw-auth-state-change": CustomEvent;
46
43
  "mutation-sync-complete": CustomEvent<{ succeeded: number; failed: number }>;
47
44
  "mutation-queue-changed": CustomEvent;
@@ -67,8 +64,6 @@ declare global {
67
64
  pwaInstallable?: boolean;
68
65
  latestSWVersion?: string;
69
66
  currentSWVersion?: string;
70
- swReady?: boolean;
71
- swError?: boolean;
72
67
  swAuthState?: "authenticated" | "unauthenticated" | "loading";
73
68
  SyncManager?: { new(): SyncManager };
74
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"type-definitions.js","sourceRoot":"","sources":["../../src/runtime/type-definitions.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,2BAA2B;IACzC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuIR,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"type-definitions.js","sourceRoot":"","sources":["../../src/runtime/type-definitions.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,2BAA2B;IACzC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkIR,CAAC;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swoff/cli",
3
- "version": "0.3.15",
3
+ "version": "0.4.0",
4
4
  "type": "module",
5
5
  "description": "CLI for Swoff - Offline Infrastructure Platform",
6
6
  "bin": {
@@ -0,0 +1,20 @@
1
+ import { useState, useEffect } from "react";
2
+
3
+ export function usePrecacheProgress() {
4
+ const [state, setState] = useState(() => ({
5
+ status: "idle",
6
+ progress: 0,
7
+ }));
8
+
9
+ useEffect(() => {
10
+ const onProgress = (e) =>
11
+ setState({ status: "installing", progress: e.detail.percent });
12
+
13
+ window.addEventListener("sw-progress", onProgress);
14
+ return () => {
15
+ window.removeEventListener("sw-progress", onProgress);
16
+ };
17
+ }, []);
18
+
19
+ return state;
20
+ }
@@ -0,0 +1,20 @@
1
+ import { useState, useEffect } from "react";
2
+
3
+ export function usePrecacheProgress() {
4
+ const [state, setState] = useState(() => ({
5
+ status: "idle" as "idle" | "installing",
6
+ progress: 0,
7
+ }));
8
+
9
+ useEffect(() => {
10
+ const onProgress = (e: WindowEventMap["sw-progress"]) =>
11
+ setState({ status: "installing", progress: e.detail.percent });
12
+
13
+ window.addEventListener("sw-progress", onProgress);
14
+ return () => {
15
+ window.removeEventListener("sw-progress", onProgress);
16
+ };
17
+ }, []);
18
+
19
+ return state;
20
+ }
@@ -1,55 +0,0 @@
1
- /**
2
- * Generates the SW install event handler (asset pre-caching with progress).
3
- * Also exports a reusable precacheAssets() function used by both install and
4
- * the RESET_CACHE message handler.
5
- */
6
- export function generateInstallHandler() {
7
- return `
8
- async function precacheAssets() {
9
- const cache = await caches.open("precache");
10
- const stale = await cache.keys();
11
- await Promise.all(stale.map(function(req) { return cache.delete(req); }));
12
- let downloaded = 0;
13
- let attempted = 0;
14
- const total = PRECACHE_FALLBACKS.length;
15
- if (total === 0) return;
16
- const allClients = await self.clients.matchAll({ includeUncontrolled: true });
17
- for (const url of PRECACHE_FALLBACKS) {
18
- attempted++;
19
- try {
20
- const request = new Request(url);
21
- await cache.add(request);
22
- downloaded++;
23
- } catch (err) {
24
- console.error(\`Failed to cache \${url}:\`, err);
25
- allClients.forEach((client) => {
26
- client.postMessage({
27
- type: "SW_NOTIFICATION",
28
- level: "warn",
29
- code: "PRECACHE_FAILED",
30
- message: \`Failed to precache \${url}\`,
31
- });
32
- });
33
- }
34
- const percent = Math.round((attempted / total) * 100);
35
- allClients.forEach((client) => {
36
- client.postMessage({
37
- type: "SW_PROGRESS",
38
- percent,
39
- downloaded,
40
- total,
41
- });
42
- });
43
- }
44
- }
45
-
46
- self.addEventListener("install", (event) => {
47
- event.waitUntil(
48
- (async () => {
49
- await precacheAssets();
50
- if (AUTO_SKIP_WAITING) self.skipWaiting();
51
- })(),
52
- );
53
- });`;
54
- }
55
- //# sourceMappingURL=install-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"install-handler.js","sourceRoot":"","sources":["../../../../src/lib/generators/sw-sections/install-handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,UAAU,sBAAsB;IACpC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8CL,CAAC;AACL,CAAC"}
@@ -1,31 +0,0 @@
1
- import { useState, useEffect } from "react";
2
-
3
- export function useSWUpdate() {
4
- const [state, setState] = useState(() => ({
5
- status: "idle",
6
- progress: 0,
7
- error: null,
8
- }));
9
-
10
- useEffect(() => {
11
- const onProgress = (e) =>
12
- setState((s) => ({ ...s, status: "installing", progress: e.detail.percent }));
13
-
14
- const onReady = () =>
15
- setState({ status: "idle", progress: 0, error: null });
16
-
17
- const onError = () =>
18
- setState({ status: "idle", progress: 0, error: "SW registration failed" });
19
-
20
- window.addEventListener("sw-progress", onProgress);
21
- window.addEventListener("sw-ready", onReady);
22
- window.addEventListener("sw-error", onError);
23
- return () => {
24
- window.removeEventListener("sw-progress", onProgress);
25
- window.removeEventListener("sw-ready", onReady);
26
- window.removeEventListener("sw-error", onError);
27
- };
28
- }, []);
29
-
30
- return state;
31
- }
@@ -1,37 +0,0 @@
1
- import { useState, useEffect } from "react";
2
-
3
- type UpdateStatus = "idle" | "installing";
4
-
5
- export function useSWUpdate() {
6
- const [state, setState] = useState(() => ({
7
- status: "idle" as UpdateStatus,
8
- progress: 0,
9
- error: null as string | null,
10
- }));
11
-
12
- useEffect(() => {
13
- const onProgress = (e: WindowEventMap["sw-progress"]) =>
14
- setState((s) => ({
15
- ...s,
16
- status: "installing",
17
- progress: e.detail.percent,
18
- }));
19
-
20
- const onReady = () =>
21
- setState({ status: "idle", progress: 0, error: null });
22
-
23
- const onError = () =>
24
- setState({ status: "idle", progress: 0, error: "SW registration failed" });
25
-
26
- window.addEventListener("sw-progress", onProgress);
27
- window.addEventListener("sw-ready", onReady);
28
- window.addEventListener("sw-error", onError);
29
- return () => {
30
- window.removeEventListener("sw-progress", onProgress);
31
- window.removeEventListener("sw-ready", onReady);
32
- window.removeEventListener("sw-error", onError);
33
- };
34
- }, []);
35
-
36
- return state;
37
- }