@swoff/cli 0.3.8 → 0.3.9

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 (112) hide show
  1. package/README.md +47 -33
  2. package/dist/__tests__/assemble-sw.test.js +8 -38
  3. package/dist/__tests__/assemble-sw.test.js.map +1 -1
  4. package/dist/__tests__/cli-integration.test.js +119 -11
  5. package/dist/__tests__/cli-integration.test.js.map +1 -1
  6. package/dist/__tests__/config-types.test.js +32 -15
  7. package/dist/__tests__/config-types.test.js.map +1 -1
  8. package/dist/__tests__/file-generators.test.js +2 -2
  9. package/dist/__tests__/file-generators.test.js.map +1 -1
  10. package/dist/__tests__/glob-matcher.test.js +86 -0
  11. package/dist/__tests__/glob-matcher.test.js.map +1 -0
  12. package/dist/__tests__/invalidation-tags.test.js +207 -23
  13. package/dist/__tests__/invalidation-tags.test.js.map +1 -1
  14. package/dist/__tests__/loader.test.js +12 -12
  15. package/dist/__tests__/loader.test.js.map +1 -1
  16. package/dist/__tests__/validator.test.js +144 -97
  17. package/dist/__tests__/validator.test.js.map +1 -1
  18. package/dist/index.js +11 -10
  19. package/dist/index.js.map +1 -1
  20. package/dist/lib/cli/help.js +0 -5
  21. package/dist/lib/cli/help.js.map +1 -1
  22. package/dist/lib/commands/add.js +50 -32
  23. package/dist/lib/commands/add.js.map +1 -1
  24. package/dist/lib/commands/clean.js +1 -15
  25. package/dist/lib/commands/clean.js.map +1 -1
  26. package/dist/lib/commands/generate-guide.js +2 -2
  27. package/dist/lib/commands/generate-guide.js.map +1 -1
  28. package/dist/lib/commands/generate.js +7 -21
  29. package/dist/lib/commands/generate.js.map +1 -1
  30. package/dist/lib/commands/info.js +8 -6
  31. package/dist/lib/commands/info.js.map +1 -1
  32. package/dist/lib/commands/init.js +2 -10
  33. package/dist/lib/commands/init.js.map +1 -1
  34. package/dist/lib/commands/validate.js +3 -3
  35. package/dist/lib/commands/validate.js.map +1 -1
  36. package/dist/lib/config/loader.js +3 -6
  37. package/dist/lib/config/loader.js.map +1 -1
  38. package/dist/lib/config/validator.js +157 -88
  39. package/dist/lib/config/validator.js.map +1 -1
  40. package/dist/lib/generators/file-generators/cache.js +2 -10
  41. package/dist/lib/generators/file-generators/cache.js.map +1 -1
  42. package/dist/lib/generators/file-generators/client-injector.js +50 -11
  43. package/dist/lib/generators/file-generators/client-injector.js.map +1 -1
  44. package/dist/lib/generators/file-generators/fetch-wrapper.js +92 -64
  45. package/dist/lib/generators/file-generators/fetch-wrapper.js.map +1 -1
  46. package/dist/lib/generators/file-generators/generate-hooks.js +1 -1
  47. package/dist/lib/generators/file-generators/generate-hooks.js.map +1 -1
  48. package/dist/lib/generators/file-generators/gql-wrapper.js +1 -14
  49. package/dist/lib/generators/file-generators/gql-wrapper.js.map +1 -1
  50. package/dist/lib/generators/file-generators/guide-generator.js +6 -640
  51. package/dist/lib/generators/file-generators/guide-generator.js.map +1 -1
  52. package/dist/lib/generators/file-generators/invalidation-tags.js +206 -19
  53. package/dist/lib/generators/file-generators/invalidation-tags.js.map +1 -1
  54. package/dist/lib/generators/file-generators/manifest.js +2 -2
  55. package/dist/lib/generators/file-generators/manifest.js.map +1 -1
  56. package/dist/lib/generators/file-generators/mutation-queue.js +29 -9
  57. package/dist/lib/generators/file-generators/mutation-queue.js.map +1 -1
  58. package/dist/lib/generators/file-generators/push.js +6 -7
  59. package/dist/lib/generators/file-generators/push.js.map +1 -1
  60. package/dist/lib/generators/file-generators/quick-readme.js +8 -125
  61. package/dist/lib/generators/file-generators/quick-readme.js.map +1 -1
  62. package/dist/lib/generators/file-generators/server-push.js +11 -1
  63. package/dist/lib/generators/file-generators/server-push.js.map +1 -1
  64. package/dist/lib/generators/file-generators/sw-generator-build.js +8 -9
  65. package/dist/lib/generators/file-generators/sw-generator-build.js.map +1 -1
  66. package/dist/lib/generators/file-generators/sw-injector.js +2 -1
  67. package/dist/lib/generators/file-generators/sw-injector.js.map +1 -1
  68. package/dist/lib/generators/file-generators/type-definitions.js +0 -3
  69. package/dist/lib/generators/file-generators/type-definitions.js.map +1 -1
  70. package/dist/lib/generators/sw-generator.js +8 -18
  71. package/dist/lib/generators/sw-generator.js.map +1 -1
  72. package/dist/lib/generators/sw-sections/activate-handler.js.map +1 -1
  73. package/dist/lib/generators/sw-sections/assemble-sw.js +14 -11
  74. package/dist/lib/generators/sw-sections/assemble-sw.js.map +1 -1
  75. package/dist/lib/generators/sw-sections/background-sync-handler.js +59 -17
  76. package/dist/lib/generators/sw-sections/background-sync-handler.js.map +1 -1
  77. package/dist/lib/generators/sw-sections/config-header.js +2 -2
  78. package/dist/lib/generators/sw-sections/config-header.js.map +1 -1
  79. package/dist/lib/generators/sw-sections/fetch-handler.js +437 -136
  80. package/dist/lib/generators/sw-sections/fetch-handler.js.map +1 -1
  81. package/dist/lib/generators/sw-sections/message-handler.js +55 -15
  82. package/dist/lib/generators/sw-sections/message-handler.js.map +1 -1
  83. package/dist/lib/generators/sw-sections/sw-push.js +67 -0
  84. package/dist/lib/generators/sw-sections/sw-push.js.map +1 -0
  85. package/dist/lib/generators/sw-sections/tag-management.js +60 -20
  86. package/dist/lib/generators/sw-sections/tag-management.js.map +1 -1
  87. package/dist/lib/generators/swoff-files-generator.js +5 -15
  88. package/dist/lib/generators/swoff-files-generator.js.map +1 -1
  89. package/dist/lib/shared/config-types.js +121 -71
  90. package/dist/lib/shared/config-types.js.map +1 -1
  91. package/dist/lib/shared/glob-matcher.js +77 -0
  92. package/dist/lib/shared/glob-matcher.js.map +1 -0
  93. package/dist/lib/utils/tty-status.js +21 -0
  94. package/dist/lib/utils/tty-status.js.map +1 -0
  95. package/docs/API.md +565 -0
  96. package/docs/ARCHITECTURE.md +374 -0
  97. package/docs/CLI.md +148 -0
  98. package/docs/COMPARISON.md +192 -0
  99. package/docs/CONFIG.md +277 -0
  100. package/docs/ECOSYSTEM.md +33 -0
  101. package/package.json +2 -1
  102. package/templates/hooks/useAuth.jsx +2 -2
  103. package/templates/hooks/useAuth.tsx +2 -2
  104. package/templates/hooks/useCachedFetch.jsx +3 -28
  105. package/templates/hooks/useCachedFetch.tsx +2 -33
  106. package/templates/hooks/useMutation.tsx +13 -1
  107. package/templates/hooks/useMutationQueue.jsx +2 -1
  108. package/templates/hooks/useMutationQueue.tsx +2 -1
  109. package/templates/hooks/useMutationState.jsx +8 -22
  110. package/templates/hooks/useMutationState.tsx +8 -24
  111. package/templates/hooks/usePushSubscription.jsx +3 -3
  112. package/templates/hooks/usePushSubscription.tsx +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"guide-generator.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/guide-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guide-generator.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/guide-generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,aAAa,CAAC,GAAqB;IACjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEvC,CAAC,CAAC,2BAA2B,CAAC,CAAC;IAC/B,CAAC,CAAC,EAAE,CAAC,CAAC;IACN,CAAC,CACC,8EAA8E,CAC/E,CAAC;IACF,CAAC,CAAC,EAAE,CAAC,CAAC;IACN,CAAC,CAAC,oCAAoC,CAAC,CAAC;IACxC,CAAC,CAAC,EAAE,CAAC,CAAC;IACN,CAAC,CAAC,8CAA8C,CAAC,CAAC;IAClD,CAAC,CAAC,EAAE,CAAC,CAAC;IACN,CAAC,CAAC,uFAAuF,CAAC,CAAC;IAC3F,CAAC,CAAC,EAAE,CAAC,CAAC;IAEN,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/C,CAAC"}
@@ -1,15 +1,114 @@
1
1
  /**
2
- * Generates invalidation-tags.js - URL-based tag generation helper.
2
+ * Generates invalidation-tags.{js|ts} pattern-based tag generation with
3
+ * configurable glob patterns, prefix skipping, singularization, and cascading.
3
4
  */
4
5
  import { writeFile } from "./context.js";
6
+ function escapeRegex(str) {
7
+ return str.replace(/[.+^${}()|[\]\\]/g, "\\$&");
8
+ }
9
+ function compilePatternEntry(rawPattern, tagTemplates) {
10
+ const rawParts = rawPattern.split("/");
11
+ const parts = rawParts.filter((p) => p !== "");
12
+ const paramNames = [];
13
+ const regexParts = [];
14
+ for (let i = 0; i < parts.length; i++) {
15
+ const part = parts[i];
16
+ if (part === "**") {
17
+ regexParts.push("(?:\\/[^/]+)*");
18
+ continue;
19
+ }
20
+ if (regexParts.length > 0) {
21
+ regexParts.push("\\/");
22
+ }
23
+ if (part === "*") {
24
+ regexParts.push("[^/]+");
25
+ }
26
+ else if (part.startsWith(":")) {
27
+ paramNames.push(part.slice(1));
28
+ regexParts.push("([^/]+)");
29
+ }
30
+ else if (part.includes("{")) {
31
+ const close = part.indexOf("}");
32
+ if (close !== -1) {
33
+ const inner = part.slice(part.indexOf("{") + 1, close);
34
+ const alternatives = inner.split(",").map((s) => escapeRegex(s.trim()));
35
+ regexParts.push("(?:" + alternatives.join("|") + ")");
36
+ }
37
+ else {
38
+ regexParts.push(escapeRegex(part));
39
+ }
40
+ }
41
+ else {
42
+ regexParts.push(escapeRegex(part));
43
+ }
44
+ }
45
+ if (regexParts.length === 0)
46
+ return null;
47
+ const hasLeadingSlash = rawPattern.startsWith("/");
48
+ const regex = (hasLeadingSlash ? "^\\/" : "^") + regexParts.join("") + "$";
49
+ // Validate template params match captured params
50
+ const templatePlaceholders = new Set();
51
+ for (const tmpl of tagTemplates) {
52
+ const matches = tmpl.match(/\{(\w+)\}/g);
53
+ if (matches) {
54
+ for (const m of matches) {
55
+ templatePlaceholders.add(m.slice(1, -1));
56
+ }
57
+ }
58
+ }
59
+ for (const ph of templatePlaceholders) {
60
+ if (!paramNames.includes(ph)) {
61
+ return null;
62
+ }
63
+ }
64
+ return { regex, params: paramNames, templates: tagTemplates };
65
+ }
66
+ function generatePatternCode(patterns) {
67
+ const entries = [];
68
+ for (const [pattern, templates] of Object.entries(patterns)) {
69
+ const compiled = compilePatternEntry(pattern, templates);
70
+ if (compiled) {
71
+ entries.push(` { re: new RegExp("${compiled.regex.replace(/\\/g, "\\\\")}"), params: ${JSON.stringify(compiled.params)}, templates: ${JSON.stringify(compiled.templates)} }`);
72
+ }
73
+ }
74
+ return "[\n" + entries.join(",\n") + "\n]";
75
+ }
76
+ function generateSingularizationCode(singularization) {
77
+ if (!singularization || Object.keys(singularization).length === 0)
78
+ return "null";
79
+ return JSON.stringify(singularization);
80
+ }
81
+ function generateCascadingCode(cascading) {
82
+ if (!cascading || Object.keys(cascading).length === 0)
83
+ return "null";
84
+ return JSON.stringify(cascading);
85
+ }
5
86
  export function generateInvalidationTags(ctx) {
6
87
  const ext = ctx.ext;
7
88
  const ts = ext === "ts";
8
89
  const T = (type) => (ts ? `: ${type}` : "");
9
90
  const R = (type) => (ts ? `: ${type} ` : " ");
91
+ const tiConfig = ctx.config.features.tagInvalidation;
92
+ const prefixes = tiConfig.prefixes ?? [
93
+ "api",
94
+ "v1",
95
+ "v2",
96
+ "v3",
97
+ "rest",
98
+ "graphql",
99
+ "gql",
100
+ ];
101
+ const patterns = tiConfig.patterns ?? {};
102
+ const singularization = tiConfig.singularization ?? {};
103
+ const cascading = tiConfig.cascading ?? {};
104
+ const patternCode = generatePatternCode(patterns);
105
+ const singularizationCode = generateSingularizationCode(singularization);
106
+ const cascadingCode = generateCascadingCode(cascading);
107
+ const prefixesCode = JSON.stringify(prefixes);
10
108
  const code = `/**
11
109
  * Swoff Invalidation Tags Helper
12
- * URL-based tag generation from REST endpoints for automatic cache invalidation.
110
+ * Pattern-based tag generation from URLs with configurable glob patterns,
111
+ * prefix skipping, singularization, and cascading invalidation.
13
112
  *
14
113
  * Usage:
15
114
  * import { generateTags, invalidateUrl } from './swoff/invalidation-tags.${ext}';
@@ -17,7 +116,6 @@ export function generateInvalidationTags(ctx) {
17
116
  * // Generate tags from URL
18
117
  * generateTags("/api/todos"); // ["todos"]
19
118
  * generateTags("/api/todos/42"); // ["todos", "todo:42"]
20
- * generateTags("/api/todos/42/comments"); // ["todos", "todo:42", "comments"]
21
119
  *
22
120
  * // Use with fetch wrapper
23
121
  * const data = await fetchWithCache("/api/todos", {
@@ -29,17 +127,50 @@ export function generateInvalidationTags(ctx) {
29
127
  */
30
128
 
31
129
  import { invalidateByTags } from "./cache.${ext}";
130
+ ${ts ? `
131
+ interface TagPattern {
132
+ re: RegExp;
133
+ params: string[];
134
+ templates: string[];
135
+ }
136
+ ` : ""}
137
+ // Pattern entries compiled from swoff.config.json
138
+ const TAG_PATTERNS${T("TagPattern[]")} = ${patternCode};
139
+
140
+ // URL path prefixes to skip during tag generation
141
+ const SKIP_PREFIXES = ${prefixesCode};
142
+
143
+ // Custom singularization map (plural → singular)
144
+ const SINGULARIZATION${T("Record<string, string> | null")} = ${singularizationCode};
32
145
 
33
- /** Generate cache invalidation tags from a URL path. e.g. /api/todos/42 ["todos", "todo:42"]. Used with fetchWithCache's tags option. */
146
+ // Cascading invalidation map (tagdependent tags)
147
+ const CASCADING${T("Record<string, string[]> | null")} = ${cascadingCode};
148
+
149
+ /** Generate cache invalidation tags from a URL path. Tries configured patterns first, falls back to segment-based generation. */
34
150
  export function generateTags(url${T("string | URL")})${R("string[]")}{
35
151
  const parsed = typeof url === "string" ? new URL(url, window.location.origin) : url;
36
- const segments = parsed.pathname.split("/").filter(Boolean);
152
+ const path = parsed.pathname;
153
+
154
+ // Try configured patterns first
155
+ for (const entry of TAG_PATTERNS) {
156
+ const match = path.match(entry.re);
157
+ if (match) {
158
+ const params${T("Record<string, string>")} = {};
159
+ for (let i = 0; i < entry.params.length; i++) {
160
+ params[entry.params[i]] = match[i + 1];
161
+ }
162
+ return entry.templates.map((tmpl) => {
163
+ return tmpl.replace(/\\{(\\w+)\\}/g, (_, key) => params[key] ?? "");
164
+ });
165
+ }
166
+ }
37
167
 
168
+ // Fallback: segment-based generation
169
+ const segments = path.split("/").filter(Boolean);
38
170
  if (segments.length === 0) return ["root"];
39
171
 
40
- const skipPrefixes = ["api", "v1", "v2", "v3", "rest", "graphql", "gql"];
41
172
  let startIdx = 0;
42
- while (startIdx < segments.length && skipPrefixes.includes(segments[startIdx])) {
173
+ while (startIdx < segments.length && SKIP_PREFIXES.includes(segments[startIdx])) {
43
174
  startIdx++;
44
175
  }
45
176
 
@@ -47,13 +178,14 @@ export function generateTags(url${T("string | URL")})${R("string[]")}{
47
178
  if (resourceSegments.length === 0) return ["root"];
48
179
 
49
180
  const tags = [];
50
-
51
181
  tags.push(resourceSegments[0]);
52
182
 
53
183
  if (resourceSegments.length >= 2 && !isNaN(Number(resourceSegments[1]))) {
54
184
  const collection = resourceSegments[0];
55
185
  const id = resourceSegments[1];
56
- const singular = collection.replace(/s$/, "");
186
+ const singular = SINGULARIZATION && SINGULARIZATION[collection] !== undefined
187
+ ? SINGULARIZATION[collection]
188
+ : collection.replace(/s$/, "");
57
189
  tags.push(\`\${singular}:\${id}\`);
58
190
  }
59
191
 
@@ -66,27 +198,82 @@ export function generateTags(url${T("string | URL")})${R("string[]")}{
66
198
  return tags;
67
199
  }
68
200
 
69
- /** Generate tags prefixed by HTTP method. e.g. POST /api/todos → ["post-todos"]. Useful for invalidating only mutation-tagged caches. */
201
+ /** Generate tags prefixed by HTTP method. e.g. POST /api/todos → ["post-todos"]. */
70
202
  export function generateTagsFromMethod(method${T("string")}, url${T("string | URL")})${R("string[]")}{
71
203
  const tags = generateTags(url);
72
-
73
- if (method === "GET" || method === "HEAD") {
74
- return tags;
75
- }
76
-
204
+ if (method === "GET" || method === "HEAD") return tags;
77
205
  return tags.map((tag) => \`\${method.toLowerCase()}-\${tag}\`);
78
206
  }
79
207
 
80
- /** Invalidate cached responses related to a URL (extracts tags from the URL then calls invalidateByTags). */
208
+ /** Invalidate cached responses related to a URL, including cascading dependencies. */
81
209
  export async function invalidateUrl(url${T("string | URL")})${R("Promise<void>")}{
82
210
  const tags = generateTags(url);
83
- await invalidateByTags(tags);
211
+ const allTags = CASCADING ? expandCascading(tags) : tags;
212
+ await invalidateByTags(allTags);
84
213
  }
85
214
 
86
- /** Invalidate cached responses tagged with method-prefixed tags from a URL. */
215
+ /** Invalidate cached responses tagged with method-prefixed tags, including cascading dependencies. */
87
216
  export async function invalidateByMethod(method${T("string")}, url${T("string | URL")})${R("Promise<void>")}{
88
217
  const tags = generateTagsFromMethod(method, url);
89
- await invalidateByTags(tags);
218
+ const allTags = CASCADING ? expandCascading(tags) : tags;
219
+ await invalidateByTags(allTags);
220
+ }
221
+
222
+ /** Expand tags with their cascading dependencies, deduplicated. */
223
+ export function expandCascading(tags${T("string[]")})${R("string[]")}{
224
+ if (!CASCADING) return [...tags];
225
+ const result = new Set(tags);
226
+ for (const tag of tags) {
227
+ const deps = CASCADING[tag];
228
+ if (deps) {
229
+ for (const dep of deps) {
230
+ result.add(dep);
231
+ }
232
+ }
233
+ }
234
+ return [...result];
235
+ }
236
+
237
+ /** Introspect: get all URLs cached under a given tag. */
238
+ export async function getUrlsForTag(tag${T("string")})${R("Promise<{ url: string; actualUrl: string }[]>")}{
239
+ const controller = navigator.serviceWorker?.controller;
240
+ if (!controller) return [];
241
+ return new Promise((resolve) => {
242
+ const channel = new MessageChannel();
243
+ channel.port1.onmessage = (event) => {
244
+ resolve(event.data.urls || []);
245
+ };
246
+ controller.postMessage(
247
+ { type: "GET_URLS_FOR_TAG", tag },
248
+ [channel.port2],
249
+ );
250
+ });
251
+ }
252
+
253
+ /** Introspect: get all tags associated with a given URL. */
254
+ export async function getTagsForUrl(url${T("string")})${R("Promise<string[]>")}{
255
+ const controller = navigator.serviceWorker?.controller;
256
+ if (!controller) return [];
257
+ return new Promise((resolve) => {
258
+ const channel = new MessageChannel();
259
+ channel.port1.onmessage = (event) => {
260
+ resolve(event.data.tags || []);
261
+ };
262
+ controller.postMessage(
263
+ { type: "GET_TAGS_FOR_URL", url },
264
+ [channel.port2],
265
+ );
266
+ });
267
+ }
268
+
269
+ /** Invalidate all cached responses whose URL matches the given glob pattern. */
270
+ export async function invalidateMatching(glob${T("string")})${R("Promise<void>")}{
271
+ const controller = navigator.serviceWorker?.controller;
272
+ if (!controller) return;
273
+ controller.postMessage({
274
+ type: "INVALIDATE_MATCHING",
275
+ glob,
276
+ });
90
277
  }
91
278
  `;
92
279
  writeFile(ctx, `invalidation-tags.${ext}`, code);
@@ -1 +1 @@
1
- {"version":3,"file":"invalidation-tags.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/invalidation-tags.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,wBAAwB,CAAC,GAAqB;IAC5D,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IACpB,MAAM,EAAE,GAAG,GAAG,KAAK,IAAI,CAAC;IACxB,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAEtD,MAAM,IAAI,GAAG;;;;;8EAK+D,GAAG;;;;;;;;;;;;;;;;4CAgBrC,GAAG;;;kCAGb,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+CAoCrB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;;;;;;;;;;;yCAW3D,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC;;;;;;iDAM/B,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC;;;;CAI1G,CAAC;IAEA,SAAS,CAAC,GAAG,EAAE,qBAAqB,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"invalidation-tags.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/invalidation-tags.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  /**
2
2
  * Generates manifest.json - PWA web app manifest.
3
3
  */
4
+ import { ensureDir } from "./context.js";
4
5
  import { existsSync, writeFileSync } from "fs";
5
6
  import { join } from "path";
6
7
  export function generateManifest(ctx) {
7
8
  const outputDir = join(ctx.projectRoot, "public");
8
- if (!existsSync(outputDir))
9
- return;
9
+ ensureDir(outputDir);
10
10
  const manifestPath = join(outputDir, "manifest.json");
11
11
  if (existsSync(manifestPath))
12
12
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/manifest.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,gBAAgB,CAAC,GAAqB;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO;IAEnC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACtD,IAAI,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO;IAErC,MAAM,QAAQ,GAAG;QACf,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,OAAO;QACnB,WAAW,EAAE,+BAA+B;QAC5C,SAAS,EAAE,GAAG;QACd,OAAO,EAAE,YAAY;QACrB,gBAAgB,EAAE,SAAS;QAC3B,WAAW,EAAE,SAAS;QACtB,WAAW,EAAE,kBAAkB;QAC/B,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC;QAChC,2BAA2B,EAAE,KAAK;QAClC,gBAAgB,EAAE,CAAC,yBAAyB,EAAE,YAAY,EAAE,SAAS,CAAC;QACtE,KAAK,EAAE;YACL,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE;YAC7E,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE;SACvF;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;IAEF,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/manifest.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,gBAAgB,CAAC,GAAqB;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAClD,SAAS,CAAC,SAAS,CAAC,CAAC;IAErB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACtD,IAAI,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO;IAErC,MAAM,QAAQ,GAAG;QACf,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,OAAO;QACnB,WAAW,EAAE,+BAA+B;QAC5C,SAAS,EAAE,GAAG;QACd,OAAO,EAAE,YAAY;QACrB,gBAAgB,EAAE,SAAS;QAC3B,WAAW,EAAE,SAAS;QACtB,WAAW,EAAE,kBAAkB;QAC/B,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC;QAChC,2BAA2B,EAAE,KAAK;QAClC,gBAAgB,EAAE,CAAC,yBAAyB,EAAE,YAAY,EAAE,SAAS,CAAC;QACtE,KAAK,EAAE;YACL,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE;YAC7E,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE;SACvF;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;IAEF,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAClD,CAAC"}
@@ -7,6 +7,7 @@ export function generateMutationQueue(ctx) {
7
7
  const PT = (type) => (ts ? `<${type}>` : "");
8
8
  const AS = (type) => (ts ? ` as ${type}` : "");
9
9
  const authEnabled = ctx.config.features.auth.enabled;
10
+ const tagInvalidation = ctx.config.features.tagInvalidation.enabled;
10
11
  const mqConfig = ctx.config.features.mutationQueue;
11
12
  const batchSize = mqConfig.batchSize;
12
13
  const batchDelayMs = mqConfig.batchDelayMs;
@@ -16,8 +17,11 @@ export function generateMutationQueue(ctx) {
16
17
  ? `import { getAuth } from "./auth/store.${ext}";
17
18
  `
18
19
  : "";
19
- const additionalImports = `import { invalidateByTags } from "./cache.${ext}";
20
- ${ts
20
+ const invalidateImport = tagInvalidation
21
+ ? `import { invalidateByTags } from "./cache.${ext}";
22
+ `
23
+ : "";
24
+ const additionalImports = `${invalidateImport}${ts
21
25
  ? `import type { MutationQueueItem } from "./swoff.d.ts";
22
26
  `
23
27
  : ""}`;
@@ -102,13 +106,18 @@ export async function queueMutation(mutation${T("Partial<MutationQueueItem>")})$
102
106
  bodyType = "buffer";
103
107
  }
104
108
 
109
+ // Strip auth headers before storing — tokens must never persist in IDB
110
+ const safeHeaders${T("Record<string, string>")} = { ...(mutation.headers || {}) };
111
+ delete safeHeaders["authorization"];
112
+ delete safeHeaders["Authorization"];
113
+
105
114
  store.add({
106
115
  id: crypto.randomUUID(),
107
116
  method: mutation.method,
108
117
  url: mutation.url,
109
118
  body,
110
119
  bodyType,
111
- headers: mutation.headers || {},
120
+ headers: safeHeaders,
112
121
  timestamp: Date.now(),
113
122
  retryCount: 0,
114
123
  nextRetryAt: 0,
@@ -146,15 +155,15 @@ ${authReplayHeaders} let replayBody${T("BodyInit | null")}${ts ? " = null" :
146
155
  method: item.method,
147
156
  headers: {
148
157
  ...(contentType ? { "Content-Type": contentType } : {}),
149
- ${authHeaderSpread} ...item.headers,
150
- },
158
+ ...item.headers,
159
+ ${authHeaderSpread} },
151
160
  body: replayBody,
152
161
  });
153
162
 
154
163
  if (!response.ok) throw new Error(\`HTTP \${response.status}\`);
155
164
 
156
165
  if (item.tags && item.tags.length > 0) {
157
- await invalidateByTags(item.tags);
166
+ ${tagInvalidation ? "await invalidateByTags(item.tags);" : "// tagInvalidation disabled — skipping cache invalidation"}
158
167
  }
159
168
 
160
169
  await removeFromQueue(item.id);
@@ -167,9 +176,9 @@ ${authHeaderSpread} ...item.headers,
167
176
  }
168
177
  }
169
178
 
170
- /** Process all queued mutations in order. Sends them to the server. Runs automatically on the online event. Respects batchSize for progress reporting and batchDelayMs for rate limiting. */
179
+ /** Process all queued mutations in order. Sends them to the server. Runs automatically when mutations are queued or on reconnection. Respects batchSize for progress reporting and batchDelayMs for rate limiting. */
171
180
  export async function processMutationQueue()${R("Promise<void>")}{
172
- if (!navigator.onLine || isSyncing) return;
181
+ if (isSyncing) return;
173
182
  isSyncing = true;
174
183
 
175
184
  try {
@@ -183,9 +192,12 @@ export async function processMutationQueue()${R("Promise<void>")}{
183
192
  request.onerror = () => reject(request.error);
184
193
  });
185
194
 
195
+ if (queue.length === 0) return;
196
+
186
197
  let succeeded = 0;
187
198
  let failed = 0;
188
199
  const total = queue.length;
200
+ let earliestRetry = Infinity;
189
201
 
190
202
  for (const item of queue) {
191
203
  if (item.retryCount >= MAX_RETRIES) {
@@ -196,6 +208,7 @@ export async function processMutationQueue()${R("Promise<void>")}{
196
208
 
197
209
  // Skip items whose backoff delay hasn't elapsed yet
198
210
  if (item.nextRetryAt && Date.now() < item.nextRetryAt) {
211
+ if (item.nextRetryAt < earliestRetry) earliestRetry = item.nextRetryAt;
199
212
  continue;
200
213
  }
201
214
 
@@ -207,7 +220,7 @@ export async function processMutationQueue()${R("Promise<void>")}{
207
220
  }
208
221
 
209
222
  // Rate limiting delay between mutations
210
- if (BATCH_DELAY_MS > 0 && succeeded + (failed - succeeded) < total) {
223
+ if (BATCH_DELAY_MS > 0 && succeeded + failed < total) {
211
224
  await sleep(BATCH_DELAY_MS);
212
225
  }
213
226
 
@@ -226,6 +239,13 @@ export async function processMutationQueue()${R("Promise<void>")}{
226
239
  detail: { succeeded, failed, total },
227
240
  })
228
241
  );
242
+
243
+ // Schedule retry when the earliest backoff timer expires
244
+ if (earliestRetry < Infinity && earliestRetry > Date.now()) {
245
+ setTimeout(() => {
246
+ if (!isSyncing) processMutationQueue();
247
+ }, earliestRetry - Date.now());
248
+ }
229
249
  } finally {
230
250
  isSyncing = false;
231
251
  window.dispatchEvent(new CustomEvent("mutation-queue-changed"));
@@ -1 +1 @@
1
- {"version":3,"file":"mutation-queue.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/mutation-queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mutation-queue.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/mutation-queue.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,3 @@
1
- /**
2
- * Generates push.{js|ts} - push notification subscription management.
3
- */
4
1
  import { writeFile } from "./context.js";
5
2
  export function generatePush(ctx) {
6
3
  const ext = ctx.ext;
@@ -9,6 +6,7 @@ export function generatePush(ctx) {
9
6
  const R = (type) => (ts ? `: ${type} ` : " ");
10
7
  const PT = (type) => (ts ? `<${type}>` : "");
11
8
  const AS = (type) => (ts ? ` as ${type}` : "");
9
+ const vapidKey = ctx.config.features.pushNotifications?.vapidPublicKey ?? "";
12
10
  const code = `/**
13
11
  * Swoff Push Notifications
14
12
  * Push subscription management with IndexedDB persistence.
@@ -17,7 +15,7 @@ export function generatePush(ctx) {
17
15
  * import { subscribeToPush, unsubscribeFromPush, isSubscribed } from './swoff/push.${ext}';
18
16
  *
19
17
  * // Enable (triggers permission prompt)
20
- * const subscription = await subscribeToPush("YOUR_VAPID_PUBLIC_KEY");
18
+ * const subscription = await subscribeToPush();
21
19
  * await fetch("/api/push/subscribe", {
22
20
  * method: "POST",
23
21
  * body: JSON.stringify(subscription.toJSON()),
@@ -33,6 +31,7 @@ export function generatePush(ctx) {
33
31
 
34
32
  const SUBSCRIPTION_DB = "swoff-push";
35
33
  const SUBSCRIPTION_STORE = "subscription";
34
+ const VAPID_PUBLIC_KEY = ${JSON.stringify(vapidKey)};
36
35
 
37
36
  let permissionState = Notification.permission;
38
37
 
@@ -73,15 +72,15 @@ export async function getPushSubscription()${R("Promise<PushSubscription | null>
73
72
  }
74
73
  }
75
74
 
76
- /** Subscribe to push notifications. Returns the subscription or null if permission denied. */
77
- export async function subscribeToPush(vapidPublicKey${T("string")})${R("Promise<PushSubscription | null>")}{
75
+ /** Subscribe to push notifications. Returns the subscription or null if permission denied. Uses the VAPID public key from your swoff.config.json. */
76
+ export async function subscribeToPush()${R("Promise<PushSubscription | null>")}{
78
77
  const granted = await requestNotificationPermission();
79
78
  if (!granted) return null;
80
79
 
81
80
  const registration = await navigator.serviceWorker.ready;
82
81
  const subscription = await registration.pushManager.subscribe({
83
82
  userVisibleOnly: true,
84
- applicationServerKey: urlBase64ToUint8Array(vapidPublicKey)${AS("BufferSource")},
83
+ applicationServerKey: urlBase64ToUint8Array(VAPID_PUBLIC_KEY)${AS("BufferSource")},
85
84
  });
86
85
 
87
86
  const db = await openPushDB();
@@ -1 +1 @@
1
- {"version":3,"file":"push.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/push.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,YAAY,CAAC,GAAqB;IAChD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IACpB,MAAM,EAAE,GAAG,GAAG,KAAK,IAAI,CAAC;IACxB,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,EAAE,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAEvD,MAAM,IAAI,GAAG;;;;;wFAKyE,GAAG;;;;;;;;;;;;;;;;;;;;;;uBAsBpE,CAAC,CAAC,sBAAsB,CAAC;sBAC1B,EAAE,CAAC,aAAa,CAAC;;;4BAGX,EAAE,CAAC,kBAAkB,CAAC;;;;;kDAKA,EAAE,CAAC,kBAAkB,CAAC;+CACzB,EAAE,CAAC,YAAY,CAAC;;;;;uDAKR,CAAC,CAAC,kBAAkB,CAAC;;;;;;;;;;;;;6CAa/B,CAAC,CAAC,kCAAkC,CAAC;;;;;;;;;;sDAU5B,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,kCAAkC,CAAC;;;;;;;iEAOzC,EAAE,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;;;;6CAwBtC,CAAC,CAAC,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;sCAoBzB,CAAC,CAAC,kBAAkB,CAAC;;;;;;6CAMd,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;;;;;;CAM1E,CAAC;IAEA,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,YAAY,CAAC,GAAqB;IAChD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IACpB,MAAM,EAAE,GAAG,GAAG,KAAK,IAAI,CAAC;IACxB,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,EAAE,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,cAAc,IAAI,EAAE,CAAC;IAE7E,MAAM,IAAI,GAAG;;;;;wFAKyE,GAAG;;;;;;;;;;;;;;;;;;;2BAmBhE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;;;;uBAI5B,CAAC,CAAC,sBAAsB,CAAC;sBAC1B,EAAE,CAAC,aAAa,CAAC;;;4BAGX,EAAE,CAAC,kBAAkB,CAAC;;;;;kDAKA,EAAE,CAAC,kBAAkB,CAAC;+CACzB,EAAE,CAAC,YAAY,CAAC;;;;;uDAKR,CAAC,CAAC,kBAAkB,CAAC;;;;;;;;;;;;;6CAa/B,CAAC,CAAC,kCAAkC,CAAC;;;;;;;;;;yCAUzC,CAAC,CAAC,kCAAkC,CAAC;;;;;;;mEAOX,EAAE,CAAC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;;;;6CAwBxC,CAAC,CAAC,eAAe,CAAC;;;;;;;;;;;;;;;;;;;;sCAoBzB,CAAC,CAAC,kBAAkB,CAAC;;;;;;6CAMd,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;;;;;;CAM1E,CAAC;IAEA,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC"}