@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.
Files changed (121) hide show
  1. package/README.md +53 -606
  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 +38 -18
  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 +170 -74
  17. package/dist/__tests__/validator.test.js.map +1 -1
  18. package/dist/index.js +12 -11
  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 +52 -33
  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 +5 -5
  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 +37 -12
  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 +192 -42
  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 +51 -12
  43. package/dist/lib/generators/file-generators/client-injector.js.map +1 -1
  44. package/dist/lib/generators/file-generators/fetch-wrapper.js +127 -58
  45. package/dist/lib/generators/file-generators/fetch-wrapper.js.map +1 -1
  46. package/dist/lib/generators/file-generators/generate-hooks.js +6 -2
  47. package/dist/lib/generators/file-generators/generate-hooks.js.map +1 -1
  48. package/dist/lib/generators/file-generators/gql-wrapper.js +139 -0
  49. package/dist/lib/generators/file-generators/gql-wrapper.js.map +1 -0
  50. package/dist/lib/generators/file-generators/guide-generator.js +6 -436
  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 +140 -52
  57. package/dist/lib/generators/file-generators/mutation-queue.js.map +1 -1
  58. package/dist/lib/generators/file-generators/mutation-state.js +126 -0
  59. package/dist/lib/generators/file-generators/mutation-state.js.map +1 -0
  60. package/dist/lib/generators/file-generators/push.js +6 -7
  61. package/dist/lib/generators/file-generators/push.js.map +1 -1
  62. package/dist/lib/generators/file-generators/quick-readme.js +8 -75
  63. package/dist/lib/generators/file-generators/quick-readme.js.map +1 -1
  64. package/dist/lib/generators/file-generators/server-push.js +146 -0
  65. package/dist/lib/generators/file-generators/server-push.js.map +1 -0
  66. package/dist/lib/generators/file-generators/sw-generator-build.js +8 -9
  67. package/dist/lib/generators/file-generators/sw-generator-build.js.map +1 -1
  68. package/dist/lib/generators/file-generators/sw-injector.js +2 -1
  69. package/dist/lib/generators/file-generators/sw-injector.js.map +1 -1
  70. package/dist/lib/generators/file-generators/type-definitions.js +26 -1
  71. package/dist/lib/generators/file-generators/type-definitions.js.map +1 -1
  72. package/dist/lib/generators/sw-generator.js +8 -18
  73. package/dist/lib/generators/sw-generator.js.map +1 -1
  74. package/dist/lib/generators/sw-sections/activate-handler.js.map +1 -1
  75. package/dist/lib/generators/sw-sections/assemble-sw.js +19 -11
  76. package/dist/lib/generators/sw-sections/assemble-sw.js.map +1 -1
  77. package/dist/lib/generators/sw-sections/background-sync-handler.js +80 -24
  78. package/dist/lib/generators/sw-sections/background-sync-handler.js.map +1 -1
  79. package/dist/lib/generators/sw-sections/config-header.js +2 -2
  80. package/dist/lib/generators/sw-sections/config-header.js.map +1 -1
  81. package/dist/lib/generators/sw-sections/default-template.js +2 -1
  82. package/dist/lib/generators/sw-sections/default-template.js.map +1 -1
  83. package/dist/lib/generators/sw-sections/fetch-handler.js +461 -121
  84. package/dist/lib/generators/sw-sections/fetch-handler.js.map +1 -1
  85. package/dist/lib/generators/sw-sections/message-handler.js +55 -15
  86. package/dist/lib/generators/sw-sections/message-handler.js.map +1 -1
  87. package/dist/lib/generators/sw-sections/server-push-handler.js +114 -0
  88. package/dist/lib/generators/sw-sections/server-push-handler.js.map +1 -0
  89. package/dist/lib/generators/sw-sections/sw-push.js +67 -0
  90. package/dist/lib/generators/sw-sections/sw-push.js.map +1 -0
  91. package/dist/lib/generators/sw-sections/tag-management.js +62 -21
  92. package/dist/lib/generators/sw-sections/tag-management.js.map +1 -1
  93. package/dist/lib/generators/swoff-files-generator.js +12 -16
  94. package/dist/lib/generators/swoff-files-generator.js.map +1 -1
  95. package/dist/lib/shared/config-types.js +133 -45
  96. package/dist/lib/shared/config-types.js.map +1 -1
  97. package/dist/lib/shared/glob-matcher.js +77 -0
  98. package/dist/lib/shared/glob-matcher.js.map +1 -0
  99. package/dist/lib/utils/tty-status.js +21 -0
  100. package/dist/lib/utils/tty-status.js.map +1 -0
  101. package/docs/API.md +565 -0
  102. package/docs/ARCHITECTURE.md +374 -0
  103. package/docs/CLI.md +148 -0
  104. package/docs/COMPARISON.md +192 -0
  105. package/docs/CONFIG.md +277 -0
  106. package/docs/ECOSYSTEM.md +33 -0
  107. package/package.json +2 -1
  108. package/templates/hooks/useAuth.jsx +2 -2
  109. package/templates/hooks/useAuth.tsx +2 -2
  110. package/templates/hooks/useCachedFetch.jsx +21 -7
  111. package/templates/hooks/useCachedFetch.tsx +23 -11
  112. package/templates/hooks/useMutation.jsx +76 -0
  113. package/templates/hooks/useMutation.tsx +109 -0
  114. package/templates/hooks/useMutationQueue.jsx +20 -11
  115. package/templates/hooks/useMutationQueue.tsx +31 -15
  116. package/templates/hooks/useMutationState.jsx +13 -0
  117. package/templates/hooks/useMutationState.tsx +25 -0
  118. package/templates/hooks/usePrefetch.jsx +10 -0
  119. package/templates/hooks/usePrefetch.tsx +25 -0
  120. package/templates/hooks/usePushSubscription.jsx +3 -3
  121. package/templates/hooks/usePushSubscription.tsx +3 -3
@@ -1,32 +1,62 @@
1
+ export const REACTIVE_FIELDS = ["staleTime", "refetchInterval", "refetchOnReconnect", "refetchOnFocus"];
1
2
  export const KNOWN_FEATURES = [
3
+ "refetchQueue",
2
4
  "mutationQueue",
3
5
  "backgroundSync",
4
6
  "auth",
5
7
  "crossTabSync",
6
8
  "tagInvalidation",
9
+ "graphql",
7
10
  "pushNotifications",
11
+ "serverPush",
8
12
  ];
9
- export const OBJECT_FEATURES = ["pwa", "serviceWorker", "auth", "pushNotifications"];
13
+ export const OBJECT_FEATURES = ["pwa", "serviceWorker", "auth", "pushNotifications", "graphql", "serverPush", "tagInvalidation", "mutationQueue", "refetchQueue"];
10
14
  export const VALID_STRATEGIES = [
11
15
  "cache-first",
12
16
  "network-first",
13
17
  "stale-while-revalidate",
14
18
  "cache-only",
15
19
  "network-only",
20
+ "reactive",
16
21
  ];
17
22
  export const API_PREFIXES = ["api", "v1", "v2", "v3", "rest", "graphql", "gql"];
18
- function normalizeAuth(auth) {
19
- if (typeof auth === "boolean")
20
- return { ...defaultAuth, enabled: auth };
21
- if (auth && typeof auth === "object")
22
- return { ...defaultAuth, ...auth };
23
- return defaultAuth;
24
- }
25
- function normalizeSwVersion(ver) {
26
- if (ver && typeof ver === "object")
27
- return { ...defaultVersionConfig, ...ver };
28
- return defaultVersionConfig;
29
- }
23
+ export const defaultAuth = {
24
+ enabled: false,
25
+ type: "bearer",
26
+ refreshPath: "/api/refresh",
27
+ userEndpoint: "/api/me",
28
+ };
29
+ export const defaultGql = {
30
+ enabled: false,
31
+ endpoint: "/graphql",
32
+ };
33
+ export const defaultMutationQueue = {
34
+ enabled: false,
35
+ batchSize: 1,
36
+ batchDelayMs: 0,
37
+ maxRetries: 5,
38
+ retryBackoffMs: 1000,
39
+ };
40
+ export const defaultRefetchQueue = {
41
+ batchSize: 5,
42
+ batchDelayMs: 1000,
43
+ maxRetries: 3,
44
+ retryDelayMs: 1000,
45
+ };
46
+ export const defaultServerPush = {
47
+ enabled: false,
48
+ type: "sse",
49
+ endpoint: "/api/events",
50
+ reconnectDelayMs: 5000,
51
+ };
52
+ export const defaultTagInvalidation = {
53
+ enabled: true,
54
+ debounceMs: 0,
55
+ prefixes: [...API_PREFIXES],
56
+ patterns: {},
57
+ singularization: {},
58
+ cascading: {},
59
+ };
30
60
  export function mergeConfigs(base, override) {
31
61
  return {
32
62
  ...base,
@@ -38,24 +68,34 @@ export function mergeConfigs(base, override) {
38
68
  serviceWorker: {
39
69
  ...base.features.serviceWorker,
40
70
  ...override.features?.serviceWorker,
41
- version: normalizeSwVersion(override.features?.serviceWorker?.version),
71
+ version: override.features?.serviceWorker?.version ?? base.features.serviceWorker.version,
72
+ minSupportedVersion: override.features?.serviceWorker?.minSupportedVersion ?? base.features.serviceWorker.minSupportedVersion,
73
+ strategy: {
74
+ ...base.features.serviceWorker.strategy,
75
+ ...override.features?.serviceWorker?.strategy,
76
+ reactive: {
77
+ defaults: {
78
+ ...base.features.serviceWorker.strategy.reactive.defaults,
79
+ ...override.features?.serviceWorker?.strategy?.reactive?.defaults,
80
+ },
81
+ },
82
+ },
83
+ navigation: {
84
+ ...base.features.serviceWorker.navigation,
85
+ ...override.features?.serviceWorker?.navigation,
86
+ },
42
87
  },
43
- auth: normalizeAuth(override.features?.auth),
88
+ refetchQueue: { ...defaultRefetchQueue, ...base.features.refetchQueue, ...override.features?.refetchQueue },
89
+ mutationQueue: { ...defaultMutationQueue, ...base.features.mutationQueue, ...override.features?.mutationQueue },
90
+ auth: { ...defaultAuth, ...base.features.auth, ...override.features?.auth },
91
+ graphql: { ...defaultGql, ...base.features.graphql, ...override.features?.graphql },
92
+ tagInvalidation: { ...defaultTagInvalidation, ...base.features.tagInvalidation, ...override.features?.tagInvalidation },
93
+ pushNotifications: { ...base.features.pushNotifications, ...override.features?.pushNotifications },
94
+ serverPush: { ...defaultServerPush, ...base.features.serverPush, ...override.features?.serverPush },
44
95
  },
45
96
  build: { ...base.build, ...override.build },
46
97
  };
47
98
  }
48
- export const defaultAuth = {
49
- enabled: false,
50
- type: "bearer",
51
- refreshPath: "/api/refresh",
52
- userEndpoint: "/api/me",
53
- };
54
- export const defaultVersionConfig = {
55
- enabled: true,
56
- source: "from-package",
57
- minSupportedVersion: "0.0.0",
58
- };
59
99
  export const defaultConfig = {
60
100
  enabled: true,
61
101
  features: {
@@ -64,23 +104,41 @@ export const defaultConfig = {
64
104
  preventDefaultInstall: false,
65
105
  },
66
106
  serviceWorker: {
67
- version: { ...defaultVersionConfig },
107
+ version: "package",
108
+ minSupportedVersion: "0.0.0",
68
109
  autoUpdate: true,
69
110
  autoActivate: false,
70
- defaultStrategy: "cache-first",
71
- strategies: {},
72
- cacheStrategy: "all",
73
- clearRuntimeOnUpdate: false,
74
- navigationPreload: true,
75
- navigationMode: "spa",
76
- spaEntry: "/index.html",
111
+ strategy: {
112
+ default: "cache-first",
113
+ patterns: {},
114
+ reactive: {
115
+ defaults: {
116
+ staleTime: 0,
117
+ refetchInterval: 0,
118
+ refetchOnReconnect: false,
119
+ refetchOnFocus: false,
120
+ },
121
+ },
122
+ mode: "all",
123
+ clearRuntimeOnUpdate: false,
124
+ normalizeKey: false,
125
+ ignoreQueryParams: [],
126
+ },
127
+ navigation: {
128
+ mode: "spa",
129
+ preload: true,
130
+ fallback: "/index.html",
131
+ },
77
132
  },
78
- mutationQueue: false,
133
+ refetchQueue: { ...defaultRefetchQueue },
134
+ mutationQueue: { ...defaultMutationQueue },
79
135
  backgroundSync: false,
80
136
  auth: { ...defaultAuth },
81
137
  crossTabSync: true,
82
- tagInvalidation: true,
138
+ tagInvalidation: { ...defaultTagInvalidation },
139
+ graphql: { ...defaultGql },
83
140
  pushNotifications: { enabled: false },
141
+ serverPush: { ...defaultServerPush },
84
142
  },
85
143
  build: {
86
144
  outputDir: "dist",
@@ -88,21 +146,51 @@ export const defaultConfig = {
88
146
  },
89
147
  };
90
148
  export const defaultInitConfig = {
91
- ...defaultConfig,
92
149
  $schema: "https://swoff.netlify.app/schema/v1.json",
150
+ enabled: true,
151
+ framework: "vanilla",
93
152
  features: {
94
- ...defaultConfig.features,
153
+ pwa: { enabled: true, preventDefaultInstall: false },
95
154
  serviceWorker: {
96
- ...defaultConfig.features.serviceWorker,
97
- version: {
98
- ...defaultVersionConfig,
99
- minSupportedVersion: "1.0.0",
155
+ version: "package",
156
+ minSupportedVersion: "1.0.0",
157
+ autoUpdate: true,
158
+ autoActivate: false,
159
+ strategy: {
160
+ default: "cache-first",
161
+ patterns: {
162
+ "/api/*": "network-first",
163
+ "/static/*": "cache-first",
164
+ },
165
+ reactive: {
166
+ defaults: {
167
+ staleTime: 0,
168
+ refetchInterval: 0,
169
+ refetchOnReconnect: false,
170
+ refetchOnFocus: false,
171
+ },
172
+ },
173
+ mode: "all",
174
+ clearRuntimeOnUpdate: false,
175
+ normalizeKey: false,
176
+ ignoreQueryParams: [],
100
177
  },
101
- strategies: {
102
- "/api/*": "network-first",
103
- "/static/*": "cache-first",
178
+ navigation: {
179
+ mode: "spa",
180
+ preload: true,
181
+ fallback: "/index.html",
104
182
  },
105
183
  },
184
+ refetchQueue: { ...defaultRefetchQueue },
185
+ mutationQueue: { ...defaultMutationQueue },
186
+ backgroundSync: false,
187
+ auth: { ...defaultAuth },
188
+ crossTabSync: true,
189
+ tagInvalidation: { ...defaultTagInvalidation },
190
+ graphql: { ...defaultGql },
191
+ pushNotifications: { enabled: false },
192
+ serverPush: { ...defaultServerPush },
106
193
  },
194
+ build: { outputDir: "dist", swFilename: "sw" },
107
195
  };
108
196
  //# sourceMappingURL=config-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-types.js","sourceRoot":"","sources":["../../../src/lib/shared/config-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-types.js","sourceRoot":"","sources":["../../../src/lib/shared/config-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ const patternCache = new Map();
2
+ function escapeRegex(str) {
3
+ return str.replace(/[.+^${}()|[\]\\]/g, "\\$&");
4
+ }
5
+ function segmentToRegex(segment) {
6
+ let out = "";
7
+ let i = 0;
8
+ while (i < segment.length) {
9
+ const ch = segment[i];
10
+ if (ch === "*") {
11
+ out += "[^/]*";
12
+ i++;
13
+ }
14
+ else if (ch === "?") {
15
+ out += "[^/]";
16
+ i++;
17
+ }
18
+ else if (ch === "{") {
19
+ const close = segment.indexOf("}", i);
20
+ if (close === -1) {
21
+ out += escapeRegex(ch);
22
+ i++;
23
+ }
24
+ else {
25
+ const inner = segment.slice(i + 1, close);
26
+ const parts = inner.split(",").map((s) => escapeRegex(s.trim()));
27
+ out += "(?:" + parts.join("|") + ")";
28
+ i = close + 1;
29
+ }
30
+ }
31
+ else {
32
+ out += escapeRegex(ch);
33
+ i++;
34
+ }
35
+ }
36
+ return out;
37
+ }
38
+ function globToRegex(pattern) {
39
+ const cached = patternCache.get(pattern);
40
+ if (cached)
41
+ return cached;
42
+ const negate = pattern.startsWith("!");
43
+ const body = negate ? pattern.slice(1) : pattern;
44
+ const hasLeadingSlash = body.startsWith("/");
45
+ const raw = hasLeadingSlash ? body.slice(1) : body;
46
+ const segments = raw.split("/").filter((s) => s.length > 0);
47
+ let regexStr = "^";
48
+ if (hasLeadingSlash)
49
+ regexStr += "\\/";
50
+ for (let i = 0; i < segments.length; i++) {
51
+ const seg = segments[i];
52
+ if (seg === "**") {
53
+ regexStr += "(?:\\/.*)?";
54
+ }
55
+ else {
56
+ if (i > 0 && segments[i - 1] !== "**") {
57
+ regexStr += "\\/";
58
+ }
59
+ regexStr += segmentToRegex(seg);
60
+ }
61
+ }
62
+ regexStr += "$";
63
+ const re = new RegExp(regexStr);
64
+ patternCache.set(pattern, re);
65
+ return re;
66
+ }
67
+ export function matchGlob(path, pattern) {
68
+ const re = globToRegex(pattern);
69
+ const result = re.test(path);
70
+ if (pattern.startsWith("!"))
71
+ return !result;
72
+ return result;
73
+ }
74
+ export function clearGlobCache() {
75
+ patternCache.clear();
76
+ }
77
+ //# sourceMappingURL=glob-matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob-matcher.js","sourceRoot":"","sources":["../../../src/lib/shared/glob-matcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export function statusLine(msg) {
2
+ if (process.stdout.isTTY) {
3
+ const cols = process.stdout.columns || 80;
4
+ process.stdout.write(`\r${" ".repeat(cols - 1)}\r ${msg}`);
5
+ }
6
+ else {
7
+ console.log(` ${msg}`);
8
+ }
9
+ }
10
+ export function clearStatusLine() {
11
+ if (process.stdout.isTTY) {
12
+ const cols = process.stdout.columns || 80;
13
+ process.stdout.write(`\r${" ".repeat(cols - 1)}\r`);
14
+ }
15
+ }
16
+ export function ttyStatus(onStatus) {
17
+ if (onStatus)
18
+ return onStatus;
19
+ return statusLine;
20
+ }
21
+ //# sourceMappingURL=tty-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tty-status.js","sourceRoot":"","sources":["../../../src/lib/utils/tty-status.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAAgC;IACxD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,UAAU,CAAC;AACpB,CAAC"}