@swoff/cli 0.3.7 → 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.
- package/README.md +53 -606
- package/dist/__tests__/assemble-sw.test.js +8 -38
- package/dist/__tests__/assemble-sw.test.js.map +1 -1
- package/dist/__tests__/cli-integration.test.js +119 -11
- package/dist/__tests__/cli-integration.test.js.map +1 -1
- package/dist/__tests__/config-types.test.js +38 -18
- package/dist/__tests__/config-types.test.js.map +1 -1
- package/dist/__tests__/file-generators.test.js +2 -2
- package/dist/__tests__/file-generators.test.js.map +1 -1
- package/dist/__tests__/glob-matcher.test.js +86 -0
- package/dist/__tests__/glob-matcher.test.js.map +1 -0
- package/dist/__tests__/invalidation-tags.test.js +207 -23
- package/dist/__tests__/invalidation-tags.test.js.map +1 -1
- package/dist/__tests__/loader.test.js +12 -12
- package/dist/__tests__/loader.test.js.map +1 -1
- package/dist/__tests__/validator.test.js +170 -74
- package/dist/__tests__/validator.test.js.map +1 -1
- package/dist/index.js +12 -11
- package/dist/index.js.map +1 -1
- package/dist/lib/cli/help.js +0 -5
- package/dist/lib/cli/help.js.map +1 -1
- package/dist/lib/commands/add.js +52 -33
- package/dist/lib/commands/add.js.map +1 -1
- package/dist/lib/commands/clean.js +1 -15
- package/dist/lib/commands/clean.js.map +1 -1
- package/dist/lib/commands/generate-guide.js +5 -5
- package/dist/lib/commands/generate-guide.js.map +1 -1
- package/dist/lib/commands/generate.js +7 -21
- package/dist/lib/commands/generate.js.map +1 -1
- package/dist/lib/commands/info.js +37 -12
- package/dist/lib/commands/info.js.map +1 -1
- package/dist/lib/commands/init.js +2 -10
- package/dist/lib/commands/init.js.map +1 -1
- package/dist/lib/commands/validate.js +3 -3
- package/dist/lib/commands/validate.js.map +1 -1
- package/dist/lib/config/loader.js +3 -6
- package/dist/lib/config/loader.js.map +1 -1
- package/dist/lib/config/validator.js +192 -42
- package/dist/lib/config/validator.js.map +1 -1
- package/dist/lib/generators/file-generators/cache.js +2 -10
- package/dist/lib/generators/file-generators/cache.js.map +1 -1
- package/dist/lib/generators/file-generators/client-injector.js +51 -12
- package/dist/lib/generators/file-generators/client-injector.js.map +1 -1
- package/dist/lib/generators/file-generators/fetch-wrapper.js +127 -58
- package/dist/lib/generators/file-generators/fetch-wrapper.js.map +1 -1
- package/dist/lib/generators/file-generators/generate-hooks.js +6 -2
- package/dist/lib/generators/file-generators/generate-hooks.js.map +1 -1
- package/dist/lib/generators/file-generators/gql-wrapper.js +139 -0
- package/dist/lib/generators/file-generators/gql-wrapper.js.map +1 -0
- package/dist/lib/generators/file-generators/guide-generator.js +6 -436
- package/dist/lib/generators/file-generators/guide-generator.js.map +1 -1
- package/dist/lib/generators/file-generators/invalidation-tags.js +206 -19
- package/dist/lib/generators/file-generators/invalidation-tags.js.map +1 -1
- package/dist/lib/generators/file-generators/manifest.js +2 -2
- package/dist/lib/generators/file-generators/manifest.js.map +1 -1
- package/dist/lib/generators/file-generators/mutation-queue.js +140 -52
- package/dist/lib/generators/file-generators/mutation-queue.js.map +1 -1
- package/dist/lib/generators/file-generators/mutation-state.js +126 -0
- package/dist/lib/generators/file-generators/mutation-state.js.map +1 -0
- package/dist/lib/generators/file-generators/push.js +6 -7
- package/dist/lib/generators/file-generators/push.js.map +1 -1
- package/dist/lib/generators/file-generators/quick-readme.js +8 -75
- package/dist/lib/generators/file-generators/quick-readme.js.map +1 -1
- package/dist/lib/generators/file-generators/server-push.js +146 -0
- package/dist/lib/generators/file-generators/server-push.js.map +1 -0
- package/dist/lib/generators/file-generators/sw-generator-build.js +8 -9
- package/dist/lib/generators/file-generators/sw-generator-build.js.map +1 -1
- package/dist/lib/generators/file-generators/sw-injector.js +2 -1
- package/dist/lib/generators/file-generators/sw-injector.js.map +1 -1
- package/dist/lib/generators/file-generators/type-definitions.js +26 -1
- package/dist/lib/generators/file-generators/type-definitions.js.map +1 -1
- package/dist/lib/generators/sw-generator.js +8 -18
- package/dist/lib/generators/sw-generator.js.map +1 -1
- package/dist/lib/generators/sw-sections/activate-handler.js.map +1 -1
- package/dist/lib/generators/sw-sections/assemble-sw.js +19 -11
- package/dist/lib/generators/sw-sections/assemble-sw.js.map +1 -1
- package/dist/lib/generators/sw-sections/background-sync-handler.js +80 -24
- package/dist/lib/generators/sw-sections/background-sync-handler.js.map +1 -1
- package/dist/lib/generators/sw-sections/config-header.js +2 -2
- package/dist/lib/generators/sw-sections/config-header.js.map +1 -1
- package/dist/lib/generators/sw-sections/default-template.js +2 -1
- package/dist/lib/generators/sw-sections/default-template.js.map +1 -1
- package/dist/lib/generators/sw-sections/fetch-handler.js +461 -121
- package/dist/lib/generators/sw-sections/fetch-handler.js.map +1 -1
- package/dist/lib/generators/sw-sections/message-handler.js +55 -15
- package/dist/lib/generators/sw-sections/message-handler.js.map +1 -1
- package/dist/lib/generators/sw-sections/server-push-handler.js +114 -0
- package/dist/lib/generators/sw-sections/server-push-handler.js.map +1 -0
- package/dist/lib/generators/sw-sections/sw-push.js +67 -0
- package/dist/lib/generators/sw-sections/sw-push.js.map +1 -0
- package/dist/lib/generators/sw-sections/tag-management.js +62 -21
- package/dist/lib/generators/sw-sections/tag-management.js.map +1 -1
- package/dist/lib/generators/swoff-files-generator.js +12 -16
- package/dist/lib/generators/swoff-files-generator.js.map +1 -1
- package/dist/lib/shared/config-types.js +133 -45
- package/dist/lib/shared/config-types.js.map +1 -1
- package/dist/lib/shared/glob-matcher.js +77 -0
- package/dist/lib/shared/glob-matcher.js.map +1 -0
- package/dist/lib/utils/tty-status.js +21 -0
- package/dist/lib/utils/tty-status.js.map +1 -0
- package/docs/API.md +565 -0
- package/docs/ARCHITECTURE.md +374 -0
- package/docs/CLI.md +148 -0
- package/docs/COMPARISON.md +192 -0
- package/docs/CONFIG.md +277 -0
- package/docs/ECOSYSTEM.md +33 -0
- package/package.json +2 -1
- package/templates/hooks/useAuth.jsx +2 -2
- package/templates/hooks/useAuth.tsx +2 -2
- package/templates/hooks/useCachedFetch.jsx +21 -7
- package/templates/hooks/useCachedFetch.tsx +23 -11
- package/templates/hooks/useMutation.jsx +76 -0
- package/templates/hooks/useMutation.tsx +109 -0
- package/templates/hooks/useMutationQueue.jsx +20 -11
- package/templates/hooks/useMutationQueue.tsx +31 -15
- package/templates/hooks/useMutationState.jsx +13 -0
- package/templates/hooks/useMutationState.tsx +25 -0
- package/templates/hooks/usePrefetch.jsx +10 -0
- package/templates/hooks/usePrefetch.tsx +25 -0
- package/templates/hooks/usePushSubscription.jsx +3 -3
- package/templates/hooks/usePushSubscription.tsx +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { KNOWN_FEATURES, OBJECT_FEATURES, VALID_STRATEGIES } from "../shared/config-types.js";
|
|
1
|
+
import { KNOWN_FEATURES, OBJECT_FEATURES, VALID_STRATEGIES, REACTIVE_FIELDS } from "../shared/config-types.js";
|
|
2
2
|
export function validateConfig(config) {
|
|
3
3
|
const errors = [];
|
|
4
4
|
const requiredFields = ["enabled", "features", "build"];
|
|
@@ -15,12 +15,14 @@ export function validateConfig(config) {
|
|
|
15
15
|
continue;
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
-
else if (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
else if (key !== "backgroundSync" && key !== "crossTabSync") {
|
|
19
|
+
if (!KNOWN_FEATURES.includes(key)) {
|
|
20
|
+
errors.push(`Unknown feature "${key}"`);
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
if (typeof value !== "boolean") {
|
|
24
|
+
errors.push(`Feature "${key}" must be a boolean, got ${typeof value}`);
|
|
25
|
+
}
|
|
24
26
|
}
|
|
25
27
|
}
|
|
26
28
|
const pwa = features.pwa;
|
|
@@ -34,63 +36,178 @@ export function validateConfig(config) {
|
|
|
34
36
|
}
|
|
35
37
|
const sw = features.serviceWorker;
|
|
36
38
|
if (sw) {
|
|
39
|
+
const ver = sw.version;
|
|
40
|
+
if (ver !== false && typeof ver !== "string") {
|
|
41
|
+
errors.push('features.serviceWorker.version must be a string or false');
|
|
42
|
+
}
|
|
43
|
+
if (typeof ver === "string") {
|
|
44
|
+
const isSemver = /^\d+\.\d+\.\d+$/.test(ver);
|
|
45
|
+
const isPackage = ver === "package";
|
|
46
|
+
const isHash = ver === "hash";
|
|
47
|
+
if (!isSemver && !isPackage && !isHash) {
|
|
48
|
+
errors.push(`features.serviceWorker.version must be "package", "hash", a semver string (e.g. "1.0.0"), or false`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (sw.minSupportedVersion !== undefined && typeof sw.minSupportedVersion === "string") {
|
|
52
|
+
if (!/^\d+\.\d+\.\d+$/.test(sw.minSupportedVersion)) {
|
|
53
|
+
errors.push(`Invalid minSupportedVersion "${sw.minSupportedVersion}". Must be semver (e.g., "1.0.0")`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
37
56
|
if (sw.autoUpdate !== undefined && typeof sw.autoUpdate !== "boolean") {
|
|
38
57
|
errors.push("features.serviceWorker.autoUpdate must be a boolean");
|
|
39
58
|
}
|
|
40
59
|
if (sw.autoActivate !== undefined && typeof sw.autoActivate !== "boolean") {
|
|
41
60
|
errors.push("features.serviceWorker.autoActivate must be a boolean");
|
|
42
61
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
62
|
+
const strategy = sw.strategy;
|
|
63
|
+
if (strategy && typeof strategy === "object") {
|
|
64
|
+
if (strategy.default && !VALID_STRATEGIES.includes(strategy.default)) {
|
|
65
|
+
errors.push(`Invalid features.serviceWorker.strategy.default "${strategy.default}". Must be one of: ${VALID_STRATEGIES.join(", ")}`);
|
|
66
|
+
}
|
|
67
|
+
const patterns = strategy.patterns;
|
|
68
|
+
if (patterns && typeof patterns === "object") {
|
|
69
|
+
for (const [pattern, entry] of Object.entries(patterns)) {
|
|
70
|
+
if (typeof entry === "string") {
|
|
71
|
+
if (!VALID_STRATEGIES.includes(entry)) {
|
|
72
|
+
errors.push(`Invalid strategy "${entry}" for pattern "${pattern}". Must be one of: ${VALID_STRATEGIES.join(", ")}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else if (typeof entry === "object" && entry !== null) {
|
|
76
|
+
const obj = entry;
|
|
77
|
+
const strat = obj.strategy || "";
|
|
78
|
+
if (strat && !VALID_STRATEGIES.includes(strat)) {
|
|
79
|
+
errors.push(`Invalid strategy "${strat}" for pattern "${pattern}". Must be one of: ${VALID_STRATEGIES.join(", ")}`);
|
|
80
|
+
}
|
|
81
|
+
if (strat !== "reactive") {
|
|
82
|
+
for (const field of REACTIVE_FIELDS) {
|
|
83
|
+
if (obj[field] !== undefined) {
|
|
84
|
+
errors.push(`features.serviceWorker.strategy.patterns["${pattern}"].${field} is only valid with "reactive" strategy`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
if (obj.staleTime !== undefined && (typeof obj.staleTime !== "number" || obj.staleTime < 0)) {
|
|
90
|
+
errors.push(`features.serviceWorker.strategy.patterns["${pattern}"].staleTime must be a non-negative number`);
|
|
91
|
+
}
|
|
92
|
+
if (obj.refetchInterval !== undefined && (typeof obj.refetchInterval !== "number" || obj.refetchInterval < 0)) {
|
|
93
|
+
errors.push(`features.serviceWorker.strategy.patterns["${pattern}"].refetchInterval must be a non-negative number`);
|
|
94
|
+
}
|
|
95
|
+
if (obj.refetchOnReconnect !== undefined && typeof obj.refetchOnReconnect !== "boolean") {
|
|
96
|
+
errors.push(`features.serviceWorker.strategy.patterns["${pattern}"].refetchOnReconnect must be a boolean`);
|
|
97
|
+
}
|
|
98
|
+
if (obj.refetchOnFocus !== undefined && typeof obj.refetchOnFocus !== "boolean") {
|
|
99
|
+
errors.push(`features.serviceWorker.strategy.patterns["${pattern}"].refetchOnFocus must be a boolean`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
errors.push(`features.serviceWorker.strategy.patterns["${pattern}"] must be a string or an object`);
|
|
105
|
+
}
|
|
51
106
|
}
|
|
52
107
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
errors.push("features.serviceWorker.clearRuntimeOnUpdate must be a boolean");
|
|
56
|
-
}
|
|
57
|
-
if (sw.navigationMode !== undefined && !["spa", "default"].includes(sw.navigationMode)) {
|
|
58
|
-
errors.push('features.serviceWorker.navigationMode must be "spa" or "default"');
|
|
59
|
-
}
|
|
60
|
-
if (sw.spaEntry !== undefined && typeof sw.spaEntry !== "string") {
|
|
61
|
-
errors.push("features.serviceWorker.spaEntry must be a string");
|
|
62
|
-
}
|
|
63
|
-
const ver = sw.version;
|
|
64
|
-
if (ver) {
|
|
65
|
-
if (ver.enabled !== undefined && typeof ver.enabled !== "boolean") {
|
|
66
|
-
errors.push("features.serviceWorker.version.enabled must be a boolean");
|
|
108
|
+
if (strategy.clearRuntimeOnUpdate !== undefined && typeof strategy.clearRuntimeOnUpdate !== "boolean") {
|
|
109
|
+
errors.push("features.serviceWorker.strategy.clearRuntimeOnUpdate must be a boolean");
|
|
67
110
|
}
|
|
68
|
-
if (
|
|
69
|
-
errors.push('features.serviceWorker.
|
|
111
|
+
if (strategy.mode !== undefined && !["all", "explicit-only"].includes(strategy.mode)) {
|
|
112
|
+
errors.push('features.serviceWorker.strategy.mode must be "all" or "explicit-only"');
|
|
70
113
|
}
|
|
71
|
-
if (
|
|
72
|
-
errors.push("features.serviceWorker.
|
|
114
|
+
if (strategy.normalizeKey !== undefined && typeof strategy.normalizeKey !== "boolean") {
|
|
115
|
+
errors.push("features.serviceWorker.strategy.normalizeKey must be a boolean");
|
|
73
116
|
}
|
|
74
|
-
if (
|
|
75
|
-
|
|
76
|
-
errors.push(`Invalid version value "${ver.value}". Must be semver (e.g., "1.0.0")`);
|
|
77
|
-
}
|
|
117
|
+
if (strategy.ignoreQueryParams !== undefined && (!Array.isArray(strategy.ignoreQueryParams) || !strategy.ignoreQueryParams.every((p) => typeof p === "string"))) {
|
|
118
|
+
errors.push("features.serviceWorker.strategy.ignoreQueryParams must be an array of strings");
|
|
78
119
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
120
|
+
const reactive = strategy.reactive;
|
|
121
|
+
if (reactive && typeof reactive === "object") {
|
|
122
|
+
const defaults = reactive.defaults;
|
|
123
|
+
if (defaults && typeof defaults === "object") {
|
|
124
|
+
if (defaults.staleTime !== undefined && (typeof defaults.staleTime !== "number" || defaults.staleTime < 0)) {
|
|
125
|
+
errors.push("features.serviceWorker.strategy.reactive.defaults.staleTime must be a non-negative number");
|
|
126
|
+
}
|
|
127
|
+
if (defaults.refetchInterval !== undefined && (typeof defaults.refetchInterval !== "number" || defaults.refetchInterval < 0 || !Number.isInteger(defaults.refetchInterval))) {
|
|
128
|
+
errors.push("features.serviceWorker.strategy.reactive.defaults.refetchInterval must be a non-negative integer");
|
|
129
|
+
}
|
|
130
|
+
if (defaults.refetchOnReconnect !== undefined && typeof defaults.refetchOnReconnect !== "boolean") {
|
|
131
|
+
errors.push("features.serviceWorker.strategy.reactive.defaults.refetchOnReconnect must be a boolean");
|
|
132
|
+
}
|
|
133
|
+
if (defaults.refetchOnFocus !== undefined && typeof defaults.refetchOnFocus !== "boolean") {
|
|
134
|
+
errors.push("features.serviceWorker.strategy.reactive.defaults.refetchOnFocus must be a boolean");
|
|
135
|
+
}
|
|
82
136
|
}
|
|
83
137
|
}
|
|
84
138
|
}
|
|
139
|
+
const navigation = sw.navigation;
|
|
140
|
+
if (navigation && typeof navigation === "object") {
|
|
141
|
+
if (navigation.mode !== undefined && !["spa", "default"].includes(navigation.mode)) {
|
|
142
|
+
errors.push('features.serviceWorker.navigation.mode must be "spa" or "default"');
|
|
143
|
+
}
|
|
144
|
+
if (navigation.fallback !== undefined && typeof navigation.fallback !== "string") {
|
|
145
|
+
errors.push("features.serviceWorker.navigation.fallback must be a string");
|
|
146
|
+
}
|
|
147
|
+
if (navigation.preload !== undefined && typeof navigation.preload !== "boolean") {
|
|
148
|
+
errors.push("features.serviceWorker.navigation.preload must be a boolean");
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const refetchQueue = features.refetchQueue;
|
|
153
|
+
if (refetchQueue && typeof refetchQueue === "object") {
|
|
154
|
+
if (refetchQueue.batchSize !== undefined && (typeof refetchQueue.batchSize !== "number" || refetchQueue.batchSize < 1 || !Number.isInteger(refetchQueue.batchSize))) {
|
|
155
|
+
errors.push("features.refetchQueue.batchSize must be a positive integer");
|
|
156
|
+
}
|
|
157
|
+
if (refetchQueue.batchDelayMs !== undefined && (typeof refetchQueue.batchDelayMs !== "number" || refetchQueue.batchDelayMs < 0 || !Number.isInteger(refetchQueue.batchDelayMs))) {
|
|
158
|
+
errors.push("features.refetchQueue.batchDelayMs must be a non-negative integer");
|
|
159
|
+
}
|
|
160
|
+
if (refetchQueue.maxRetries !== undefined && (typeof refetchQueue.maxRetries !== "number" || refetchQueue.maxRetries < 0 || !Number.isInteger(refetchQueue.maxRetries))) {
|
|
161
|
+
errors.push("features.refetchQueue.maxRetries must be a non-negative integer");
|
|
162
|
+
}
|
|
163
|
+
if (refetchQueue.retryDelayMs !== undefined && (typeof refetchQueue.retryDelayMs !== "number" || refetchQueue.retryDelayMs < 0 || !Number.isInteger(refetchQueue.retryDelayMs))) {
|
|
164
|
+
errors.push("features.refetchQueue.retryDelayMs must be a non-negative integer");
|
|
165
|
+
}
|
|
85
166
|
}
|
|
86
167
|
const tagInvalidationVal = features.tagInvalidation;
|
|
168
|
+
if (tagInvalidationVal && typeof tagInvalidationVal === "object") {
|
|
169
|
+
const ti = tagInvalidationVal;
|
|
170
|
+
if (ti.prefixes !== undefined && (!Array.isArray(ti.prefixes) || !ti.prefixes.every((p) => typeof p === "string"))) {
|
|
171
|
+
errors.push("features.tagInvalidation.prefixes must be an array of strings");
|
|
172
|
+
}
|
|
173
|
+
if (ti.patterns !== undefined && (typeof ti.patterns !== "object" || ti.patterns === null)) {
|
|
174
|
+
errors.push("features.tagInvalidation.patterns must be an object");
|
|
175
|
+
}
|
|
176
|
+
if (ti.singularization !== undefined && (typeof ti.singularization !== "object" || ti.singularization === null)) {
|
|
177
|
+
errors.push("features.tagInvalidation.singularization must be an object");
|
|
178
|
+
}
|
|
179
|
+
if (ti.cascading !== undefined && (typeof ti.cascading !== "object" || ti.cascading === null)) {
|
|
180
|
+
errors.push("features.tagInvalidation.cascading must be an object");
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const tagInvalidationObj = features.tagInvalidation;
|
|
184
|
+
const tagInvalidationEnabled = tagInvalidationObj?.enabled === true;
|
|
87
185
|
const crossTabSyncVal = features.crossTabSync;
|
|
88
|
-
if (crossTabSyncVal === true &&
|
|
186
|
+
if (crossTabSyncVal === true && !tagInvalidationEnabled) {
|
|
89
187
|
errors.push("crossTabSync requires tagInvalidation to be enabled");
|
|
90
188
|
}
|
|
91
189
|
const backgroundSyncVal = features.backgroundSync;
|
|
92
190
|
const mutationQueueVal = features.mutationQueue;
|
|
93
|
-
if (
|
|
191
|
+
if (mutationQueueVal && typeof mutationQueueVal === "object") {
|
|
192
|
+
const mq = mutationQueueVal;
|
|
193
|
+
if (mq.enabled !== undefined && typeof mq.enabled !== "boolean") {
|
|
194
|
+
errors.push("features.mutationQueue.enabled must be a boolean");
|
|
195
|
+
}
|
|
196
|
+
if (mq.batchSize !== undefined && (typeof mq.batchSize !== "number" || mq.batchSize < 1 || !Number.isInteger(mq.batchSize))) {
|
|
197
|
+
errors.push("features.mutationQueue.batchSize must be a positive integer");
|
|
198
|
+
}
|
|
199
|
+
if (mq.batchDelayMs !== undefined && (typeof mq.batchDelayMs !== "number" || mq.batchDelayMs < 0 || !Number.isInteger(mq.batchDelayMs))) {
|
|
200
|
+
errors.push("features.mutationQueue.batchDelayMs must be a non-negative integer");
|
|
201
|
+
}
|
|
202
|
+
if (mq.maxRetries !== undefined && (typeof mq.maxRetries !== "number" || mq.maxRetries < 1 || !Number.isInteger(mq.maxRetries))) {
|
|
203
|
+
errors.push("features.mutationQueue.maxRetries must be a positive integer");
|
|
204
|
+
}
|
|
205
|
+
if (mq.retryBackoffMs !== undefined && (typeof mq.retryBackoffMs !== "number" || mq.retryBackoffMs < 0 || !Number.isInteger(mq.retryBackoffMs))) {
|
|
206
|
+
errors.push("features.mutationQueue.retryBackoffMs must be a non-negative integer");
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
const mqEnabled = mutationQueueVal?.enabled === true;
|
|
210
|
+
if (backgroundSyncVal === true && !mqEnabled) {
|
|
94
211
|
errors.push("backgroundSync requires mutationQueue to be enabled");
|
|
95
212
|
}
|
|
96
213
|
const auth = features.auth;
|
|
@@ -108,6 +225,39 @@ export function validateConfig(config) {
|
|
|
108
225
|
errors.push("features.auth.userEndpoint must be a string");
|
|
109
226
|
}
|
|
110
227
|
}
|
|
228
|
+
const graphql = features.graphql;
|
|
229
|
+
if (graphql && typeof graphql === "object") {
|
|
230
|
+
if (graphql.enabled !== undefined && typeof graphql.enabled !== "boolean") {
|
|
231
|
+
errors.push("features.graphql.enabled must be a boolean");
|
|
232
|
+
}
|
|
233
|
+
if (graphql.endpoint !== undefined && typeof graphql.endpoint !== "string") {
|
|
234
|
+
errors.push("features.graphql.endpoint must be a string");
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
const serverPush = features.serverPush;
|
|
238
|
+
if (serverPush && typeof serverPush === "object") {
|
|
239
|
+
if (serverPush.enabled !== undefined && typeof serverPush.enabled !== "boolean") {
|
|
240
|
+
errors.push("features.serverPush.enabled must be a boolean");
|
|
241
|
+
}
|
|
242
|
+
if (serverPush.type !== undefined && !["sse", "websocket"].includes(serverPush.type)) {
|
|
243
|
+
errors.push('features.serverPush.type must be "sse" or "websocket"');
|
|
244
|
+
}
|
|
245
|
+
if (serverPush.endpoint !== undefined && typeof serverPush.endpoint !== "string") {
|
|
246
|
+
errors.push("features.serverPush.endpoint must be a string");
|
|
247
|
+
}
|
|
248
|
+
if (serverPush.reconnectDelayMs !== undefined && (typeof serverPush.reconnectDelayMs !== "number" || serverPush.reconnectDelayMs < 0)) {
|
|
249
|
+
errors.push("features.serverPush.reconnectDelayMs must be a non-negative number");
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
const pushNotifications = features.pushNotifications;
|
|
253
|
+
if (pushNotifications && typeof pushNotifications === "object") {
|
|
254
|
+
if (pushNotifications.enabled !== undefined && typeof pushNotifications.enabled !== "boolean") {
|
|
255
|
+
errors.push("features.pushNotifications.enabled must be a boolean");
|
|
256
|
+
}
|
|
257
|
+
if (pushNotifications.vapidPublicKey !== undefined && typeof pushNotifications.vapidPublicKey !== "string") {
|
|
258
|
+
errors.push("features.pushNotifications.vapidPublicKey must be a string");
|
|
259
|
+
}
|
|
260
|
+
}
|
|
111
261
|
}
|
|
112
262
|
const fw = config.framework;
|
|
113
263
|
if (fw !== undefined && typeof fw === "string" && !["react", "vue", "svelte", "vanilla"].includes(fw)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/lib/config/validator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/lib/config/validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generates cache.{js|ts} - cache tag invalidation utilities.
|
|
3
|
-
*/
|
|
4
1
|
import { writeFile } from "./context.js";
|
|
5
2
|
export function generateCache(ctx) {
|
|
6
3
|
const ext = ctx.ext;
|
|
@@ -12,24 +9,19 @@ export function generateCache(ctx) {
|
|
|
12
9
|
* Framework-agnostic cache tag invalidation.
|
|
13
10
|
*
|
|
14
11
|
* Usage:
|
|
15
|
-
* import { invalidateByTag } from './swoff/cache.${ext}';
|
|
12
|
+
* import { invalidateByTag, invalidateByTags } from './swoff/cache.${ext}';
|
|
16
13
|
*
|
|
17
14
|
* // After a mutation, invalidate related cache
|
|
18
15
|
* await invalidateByTag("todos");
|
|
19
16
|
*/
|
|
20
17
|
|
|
21
|
-
/** Invalidate all cached responses tagged with the given tag.
|
|
18
|
+
/** Invalidate all cached responses tagged with the given tag. Sends INVALIDATE_TAG to the SW; the client-injector dispatches cache-invalidated on SW confirmation. */
|
|
22
19
|
export async function invalidateByTag(tag${T("string")})${R("Promise<void>")}{
|
|
23
20
|
if (!navigator.serviceWorker?.controller) return;
|
|
24
|
-
|
|
25
21
|
navigator.serviceWorker.controller.postMessage({
|
|
26
22
|
type: "INVALIDATE_TAG",
|
|
27
23
|
tag,
|
|
28
24
|
});
|
|
29
|
-
|
|
30
|
-
window.dispatchEvent(
|
|
31
|
-
new CustomEvent("cache-invalidated", { detail: { tags: [tag] } })
|
|
32
|
-
);
|
|
33
25
|
}
|
|
34
26
|
|
|
35
27
|
/** Invalidate all cached responses matching any of the given tags. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/cache.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,aAAa,CAAC,GAAqB;IACjD,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;;;;;wEAKyD,GAAG;;;;;;;2CAOhC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC;;;;;;;;;6CAS/B,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC;;;CAG/E,CAAC;IAEA,SAAS,CAAC,GAAG,EAAE,SAAS,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -6,8 +6,8 @@ export function generateClientInjector(ctx) {
|
|
|
6
6
|
const ext = ctx.ext;
|
|
7
7
|
const ts = ext === "ts";
|
|
8
8
|
const pwaEnabled = ctx.config.features.pwa.enabled;
|
|
9
|
-
const mutationQueueEnabled = ctx.config.features.mutationQueue;
|
|
10
|
-
const
|
|
9
|
+
const mutationQueueEnabled = ctx.config.features.mutationQueue.enabled;
|
|
10
|
+
const tagInvalidation = ctx.config.features.tagInvalidation.enabled;
|
|
11
11
|
const pwaImport = pwaEnabled
|
|
12
12
|
? `import { setupPwaInstall } from "./pwa/install.${ext}";
|
|
13
13
|
`
|
|
@@ -23,7 +23,28 @@ export function generateClientInjector(ctx) {
|
|
|
23
23
|
window.addEventListener("online", processMutationQueue);
|
|
24
24
|
`
|
|
25
25
|
: "";
|
|
26
|
-
const
|
|
26
|
+
const onlineRefetchListener = `
|
|
27
|
+
// --- Online Refetch Listener ---
|
|
28
|
+
// When connectivity returns, the SW checks stale cache entries and refetches them.
|
|
29
|
+
window.addEventListener("online", () => {
|
|
30
|
+
if (navigator.serviceWorker.controller) {
|
|
31
|
+
navigator.serviceWorker.controller.postMessage({ type: "ONLINE" });
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
`;
|
|
35
|
+
const focusListener = `
|
|
36
|
+
// --- Focus Listener for Reactive Strategy ---
|
|
37
|
+
// Notifies the SW when the tab gains focus so it can refresh stale reactive entries.
|
|
38
|
+
// Uses visibilitychange only (covers tab switch, window refocus, alt-tab) — single source avoids duplicate FOCUS messages.
|
|
39
|
+
if (typeof document !== "undefined") {
|
|
40
|
+
document.addEventListener("visibilitychange", () => {
|
|
41
|
+
if (document.visibilityState === "visible" && navigator.serviceWorker.controller) {
|
|
42
|
+
navigator.serviceWorker.controller.postMessage({ type: "FOCUS" });
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
`;
|
|
47
|
+
const invalidationHandler = tagInvalidation
|
|
27
48
|
? `
|
|
28
49
|
if (event.data.type === "TAG_INVALIDATED" && event.data.tag) {
|
|
29
50
|
window.dispatchEvent(
|
|
@@ -46,27 +67,35 @@ window.addEventListener("online", processMutationQueue);
|
|
|
46
67
|
* initServiceWorker();
|
|
47
68
|
*
|
|
48
69
|
* Window events (dispatched by this module):
|
|
49
|
-
* sw-progress
|
|
50
|
-
* sw-ready
|
|
51
|
-
* sw-error
|
|
52
|
-
* cache-invalidated
|
|
53
|
-
*
|
|
54
|
-
* mutation-
|
|
70
|
+
* sw-progress - Download progress (detail: { percent, downloaded, total })
|
|
71
|
+
* sw-ready - SW active and controlling page
|
|
72
|
+
* sw-error - SW registration failed
|
|
73
|
+
* cache-invalidated - Cache entries cleared on SW confirmation (detail: { tags })
|
|
74
|
+
* swoff:cache-updated - Background refresh completed (detail: { url })
|
|
75
|
+
* mutation-sync-complete - Queued mutations synced (detail: { succeeded, failed })
|
|
76
|
+
* mutation-sync-progress - Batch progress during sync (detail: { succeeded, failed, total, current })
|
|
77
|
+
* mutation-queue-changed - Queue modified
|
|
55
78
|
*
|
|
56
79
|
* Window events (dispatched by feature modules):
|
|
57
80
|
* pwa-installable - PWA can be installed (detail: { isInstallable: true })
|
|
58
81
|
* pwa-installed - User accepted install (detail: { outcome: 'accepted' })
|
|
59
82
|
* sw-auth-unauthorized - 401 response received
|
|
60
83
|
* sw-auth-state-change - Login or logout (detail: { authenticated: boolean })
|
|
61
|
-
* mutation-rollback - Mutation exhausted retries
|
|
62
84
|
* sw-update-available - New version ready (detail: { version })
|
|
63
85
|
* sw-version-detected - Version info available
|
|
64
86
|
*/
|
|
65
87
|
${pwaImport}${mutationImport}${swImport}
|
|
66
|
-
${pwaCall}${mutationOnlineListener}
|
|
88
|
+
${pwaCall}${mutationOnlineListener}${onlineRefetchListener}${focusListener}
|
|
67
89
|
// --- SW Message Listener ---
|
|
68
90
|
if (typeof window !== "undefined" && "serviceWorker" in navigator) {
|
|
69
91
|
navigator.serviceWorker.addEventListener("message", (event) => {
|
|
92
|
+
if (event.data.type === "CACHE_UPDATED") {
|
|
93
|
+
window.dispatchEvent(
|
|
94
|
+
new CustomEvent("swoff:cache-updated", {
|
|
95
|
+
detail: { url: event.data.url },
|
|
96
|
+
})
|
|
97
|
+
);
|
|
98
|
+
}
|
|
70
99
|
if (event.data.type === "SW_PROGRESS") {
|
|
71
100
|
const { percent, downloaded, total } = event.data;
|
|
72
101
|
window.dispatchEvent(
|
|
@@ -75,6 +104,13 @@ if (typeof window !== "undefined" && "serviceWorker" in navigator) {
|
|
|
75
104
|
})
|
|
76
105
|
);
|
|
77
106
|
}
|
|
107
|
+
if (event.data.type === "BACKGROUND_SYNC_PROGRESS") {
|
|
108
|
+
window.dispatchEvent(
|
|
109
|
+
new CustomEvent("mutation-sync-progress", {
|
|
110
|
+
detail: event.data.detail,
|
|
111
|
+
})
|
|
112
|
+
);
|
|
113
|
+
}
|
|
78
114
|
if (event.data.type === "BACKGROUND_SYNC_COMPLETE") {
|
|
79
115
|
const { succeeded, failed, tags } = event.data.detail;
|
|
80
116
|
window.dispatchEvent(
|
|
@@ -88,7 +124,10 @@ if (typeof window !== "undefined" && "serviceWorker" in navigator) {
|
|
|
88
124
|
);
|
|
89
125
|
}
|
|
90
126
|
window.dispatchEvent(new CustomEvent("mutation-queue-changed"));
|
|
91
|
-
}
|
|
127
|
+
}
|
|
128
|
+
if (event.data.type === "MUTATION_STORED") {
|
|
129
|
+
processMutationQueue();
|
|
130
|
+
}${invalidationHandler} });
|
|
92
131
|
}
|
|
93
132
|
|
|
94
133
|
/** Initialize SW registration and all client-side features (PWA install, mutation queue, cross-tab sync). Call once at app startup. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-injector.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/client-injector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,sBAAsB,CAAC,GAAqB;IAC1D,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IACpB,MAAM,EAAE,GAAG,GAAG,KAAK,IAAI,CAAC;IACxB,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;IACnD,MAAM,oBAAoB,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"client-injector.js","sourceRoot":"","sources":["../../../../src/lib/generators/file-generators/client-injector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAoB,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,sBAAsB,CAAC,GAAqB;IAC1D,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IACpB,MAAM,EAAE,GAAG,GAAG,KAAK,IAAI,CAAC;IACxB,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;IACnD,MAAM,oBAAoB,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;IACvE,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC;IAEpE,MAAM,SAAS,GAAG,UAAU;QAC1B,CAAC,CAAC,kDAAkD,GAAG;CAC1D;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzD,MAAM,cAAc,GAAG,oBAAoB;QACzC,CAAC,CAAC,0DAA0D,GAAG;CAClE;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,sBAAsB,GAAG,oBAAoB;QACjD,CAAC,CAAC;;;CAGL;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,qBAAqB,GAAG;;;;;;;;CAQ/B,CAAC;IAEA,MAAM,aAAa,GAAG;;;;;;;;;;;CAWvB,CAAC;IAEA,MAAM,mBAAmB,GAAG,eAAe;QACzC,CAAC,CAAC;;;;;;;;CAQL;QACG,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,QAAQ,GAAG,8DAA8D,GAAG;CACnF,CAAC;IAEA,MAAM,IAAI,GAAG;;;;;;kEAMmD,GAAG;;;;;;;;;;;;;;;;;;;;;EAqBnE,SAAS,GAAG,cAAc,GAAG,QAAQ;EACrC,OAAO,GAAG,sBAAsB,GAAG,qBAAqB,GAAG,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CnE,mBAAmB;;;;2CAIiB,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG;;;CAGtE,CAAC;IAEA,SAAS,CAAC,GAAG,EAAE,mBAAmB,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC"}
|