@swoff/cli 0.3.13 → 0.3.15

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 (269) hide show
  1. package/README.md +28 -32
  2. package/dist/index.js +4 -15
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/cli/help.js +4 -9
  5. package/dist/lib/cli/help.js.map +1 -1
  6. package/dist/lib/commands/clean.js +8 -17
  7. package/dist/lib/commands/clean.js.map +1 -1
  8. package/dist/lib/commands/generate-guide.js +16 -30
  9. package/dist/lib/commands/generate-guide.js.map +1 -1
  10. package/dist/lib/commands/generate.js +33 -7
  11. package/dist/lib/commands/generate.js.map +1 -1
  12. package/dist/lib/commands/init.js +259 -23
  13. package/dist/lib/commands/init.js.map +1 -1
  14. package/dist/lib/commands/validate.js +2 -4
  15. package/dist/lib/commands/validate.js.map +1 -1
  16. package/dist/lib/config/loader.js +34 -25
  17. package/dist/lib/config/loader.js.map +1 -1
  18. package/dist/lib/config/minimal-config.js +64 -0
  19. package/dist/lib/config/minimal-config.js.map +1 -0
  20. package/dist/lib/config/validator.js +219 -110
  21. package/dist/lib/config/validator.js.map +1 -1
  22. package/dist/lib/generators/file-generators/api-config.js +1 -1
  23. package/dist/lib/generators/file-generators/api-config.js.map +1 -1
  24. package/dist/lib/generators/file-generators/auth-adapter.js +13 -0
  25. package/dist/lib/generators/file-generators/auth-adapter.js.map +1 -0
  26. package/dist/lib/generators/file-generators/auth-check.js +40 -0
  27. package/dist/lib/generators/file-generators/auth-check.js.map +1 -0
  28. package/dist/lib/generators/file-generators/auth-store.js +2 -5
  29. package/dist/lib/generators/file-generators/auth-store.js.map +1 -1
  30. package/dist/lib/generators/file-generators/background-sync.js +1 -1
  31. package/dist/lib/generators/file-generators/background-sync.js.map +1 -1
  32. package/dist/lib/generators/file-generators/cache.js +2 -1
  33. package/dist/lib/generators/file-generators/cache.js.map +1 -1
  34. package/dist/lib/generators/file-generators/client-injector-bundle.js +15 -0
  35. package/dist/lib/generators/file-generators/client-injector-bundle.js.map +1 -0
  36. package/dist/lib/generators/file-generators/client-injector.js +2 -1
  37. package/dist/lib/generators/file-generators/client-injector.js.map +1 -1
  38. package/dist/lib/generators/file-generators/connectivity.js +12 -0
  39. package/dist/lib/generators/file-generators/connectivity.js.map +1 -0
  40. package/dist/lib/generators/file-generators/context.js +7 -0
  41. package/dist/lib/generators/file-generators/context.js.map +1 -1
  42. package/dist/lib/generators/file-generators/fetch-wrapper.js +1 -1
  43. package/dist/lib/generators/file-generators/fetch-wrapper.js.map +1 -1
  44. package/dist/lib/generators/file-generators/generate-framework-adapters.js +29 -20
  45. package/dist/lib/generators/file-generators/generate-framework-adapters.js.map +1 -1
  46. package/dist/lib/generators/file-generators/gql-wrapper.js +2 -2
  47. package/dist/lib/generators/file-generators/gql-wrapper.js.map +1 -1
  48. package/dist/lib/generators/file-generators/guide-generator.js +51 -1
  49. package/dist/lib/generators/file-generators/guide-generator.js.map +1 -1
  50. package/dist/lib/generators/file-generators/invalidation-tags.js +2 -3
  51. package/dist/lib/generators/file-generators/invalidation-tags.js.map +1 -1
  52. package/dist/lib/generators/file-generators/mutation-queue.js +2 -2
  53. package/dist/lib/generators/file-generators/mutation-queue.js.map +1 -1
  54. package/dist/lib/generators/file-generators/mutation-state.js +1 -1
  55. package/dist/lib/generators/file-generators/mutation-state.js.map +1 -1
  56. package/dist/lib/generators/file-generators/open-db.js +6 -0
  57. package/dist/lib/generators/file-generators/open-db.js.map +1 -0
  58. package/dist/lib/generators/file-generators/push.js +1 -2
  59. package/dist/lib/generators/file-generators/push.js.map +1 -1
  60. package/dist/lib/generators/file-generators/pwa-install.js +2 -6
  61. package/dist/lib/generators/file-generators/pwa-install.js.map +1 -1
  62. package/dist/lib/generators/file-generators/server-push.js +1 -1
  63. package/dist/lib/generators/file-generators/server-push.js.map +1 -1
  64. package/dist/lib/generators/file-generators/storage.js +6 -0
  65. package/dist/lib/generators/file-generators/storage.js.map +1 -0
  66. package/dist/lib/generators/file-generators/sw-generator-build.js +105 -48
  67. package/dist/lib/generators/file-generators/sw-generator-build.js.map +1 -1
  68. package/dist/lib/generators/file-generators/sw-injector.js +0 -4
  69. package/dist/lib/generators/file-generators/sw-injector.js.map +1 -1
  70. package/dist/lib/generators/file-generators/sw-template.js +8 -9
  71. package/dist/lib/generators/file-generators/sw-template.js.map +1 -1
  72. package/dist/lib/generators/file-generators/swoff-api-bundle.js +51 -0
  73. package/dist/lib/generators/file-generators/swoff-api-bundle.js.map +1 -0
  74. package/dist/lib/generators/sw-build-utils.js +69 -0
  75. package/dist/lib/generators/sw-build-utils.js.map +1 -0
  76. package/dist/lib/generators/sw-generator.js +23 -34
  77. package/dist/lib/generators/sw-generator.js.map +1 -1
  78. package/dist/lib/generators/sw-sections/activate-handler.js +77 -23
  79. package/dist/lib/generators/sw-sections/activate-handler.js.map +1 -1
  80. package/dist/lib/generators/sw-sections/assemble-sw.js +20 -95
  81. package/dist/lib/generators/sw-sections/assemble-sw.js.map +1 -1
  82. package/dist/lib/generators/sw-sections/background-precache.js +126 -0
  83. package/dist/lib/generators/sw-sections/background-precache.js.map +1 -0
  84. package/dist/lib/generators/sw-sections/background-sync-handler.js +74 -72
  85. package/dist/lib/generators/sw-sections/background-sync-handler.js.map +1 -1
  86. package/dist/lib/generators/sw-sections/batch-refresh-queue.js +102 -0
  87. package/dist/lib/generators/sw-sections/batch-refresh-queue.js.map +1 -0
  88. package/dist/lib/generators/sw-sections/config-header.js +2 -3
  89. package/dist/lib/generators/sw-sections/config-header.js.map +1 -1
  90. package/dist/lib/generators/sw-sections/default-template.js +64 -7
  91. package/dist/lib/generators/sw-sections/default-template.js.map +1 -1
  92. package/dist/lib/generators/sw-sections/fetch-handler.js +621 -495
  93. package/dist/lib/generators/sw-sections/fetch-handler.js.map +1 -1
  94. package/dist/lib/generators/sw-sections/install-handler.js +41 -23
  95. package/dist/lib/generators/sw-sections/install-handler.js.map +1 -1
  96. package/dist/lib/generators/sw-sections/message-handler.js +34 -8
  97. package/dist/lib/generators/sw-sections/message-handler.js.map +1 -1
  98. package/dist/lib/generators/sw-sections/server-push-handler.js +10 -14
  99. package/dist/lib/generators/sw-sections/server-push-handler.js.map +1 -1
  100. package/dist/lib/generators/sw-sections/shared.js +70 -0
  101. package/dist/lib/generators/sw-sections/shared.js.map +1 -0
  102. package/dist/lib/generators/sw-sections/sw-push.js +2 -6
  103. package/dist/lib/generators/sw-sections/sw-push.js.map +1 -1
  104. package/dist/lib/generators/sw-sections/tag-management.js +55 -86
  105. package/dist/lib/generators/sw-sections/tag-management.js.map +1 -1
  106. package/dist/lib/generators/swoff-files-generator.js +183 -59
  107. package/dist/lib/generators/swoff-files-generator.js.map +1 -1
  108. package/dist/lib/shared/config-types.js +84 -79
  109. package/dist/lib/shared/config-types.js.map +1 -1
  110. package/dist/lib/shared/feature-registry.js +198 -0
  111. package/dist/lib/shared/feature-registry.js.map +1 -0
  112. package/dist/lib/utils/detect-framework.js +52 -9
  113. package/dist/lib/utils/detect-framework.js.map +1 -1
  114. package/dist/runtime/api-config.js +2 -2
  115. package/dist/runtime/api-config.js.map +1 -1
  116. package/dist/runtime/auth-adapter.js +179 -0
  117. package/dist/runtime/auth-adapter.js.map +1 -0
  118. package/dist/runtime/auth-state.js +16 -6
  119. package/dist/runtime/auth-state.js.map +1 -1
  120. package/dist/runtime/auth-store.js +219 -213
  121. package/dist/runtime/auth-store.js.map +1 -1
  122. package/dist/runtime/background-sync.js +5 -2
  123. package/dist/runtime/background-sync.js.map +1 -1
  124. package/dist/runtime/cache.js +91 -3
  125. package/dist/runtime/cache.js.map +1 -1
  126. package/dist/runtime/client-injector-bundle.js +314 -0
  127. package/dist/runtime/client-injector-bundle.js.map +1 -0
  128. package/dist/runtime/client-injector.js +188 -30
  129. package/dist/runtime/client-injector.js.map +1 -1
  130. package/dist/runtime/connectivity.js +83 -0
  131. package/dist/runtime/connectivity.js.map +1 -0
  132. package/dist/runtime/fetch-wrapper.js +26 -59
  133. package/dist/runtime/fetch-wrapper.js.map +1 -1
  134. package/dist/runtime/gql-wrapper.js +15 -9
  135. package/dist/runtime/gql-wrapper.js.map +1 -1
  136. package/dist/runtime/invalidation-tags.js +12 -89
  137. package/dist/runtime/invalidation-tags.js.map +1 -1
  138. package/dist/runtime/mutation-queue.js +83 -31
  139. package/dist/runtime/mutation-queue.js.map +1 -1
  140. package/dist/runtime/mutation-state.js +3 -3
  141. package/dist/runtime/mutation-state.js.map +1 -1
  142. package/dist/runtime/open-db.js +41 -0
  143. package/dist/runtime/open-db.js.map +1 -0
  144. package/dist/runtime/push.js +15 -27
  145. package/dist/runtime/push.js.map +1 -1
  146. package/dist/runtime/pwa-prompt.js +35 -3
  147. package/dist/runtime/pwa-prompt.js.map +1 -1
  148. package/dist/runtime/reset.js +39 -42
  149. package/dist/runtime/reset.js.map +1 -1
  150. package/dist/runtime/server-push.js +23 -13
  151. package/dist/runtime/server-push.js.map +1 -1
  152. package/dist/runtime/storage.js +32 -0
  153. package/dist/runtime/storage.js.map +1 -0
  154. package/dist/runtime/sw-injector.js +19 -178
  155. package/dist/runtime/sw-injector.js.map +1 -1
  156. package/dist/runtime/swoff-api-bundle.js +1491 -0
  157. package/dist/runtime/swoff-api-bundle.js.map +1 -0
  158. package/dist/runtime/type-definitions.js +8 -7
  159. package/dist/runtime/type-definitions.js.map +1 -1
  160. package/dist/runtime/utils.js +4 -0
  161. package/dist/runtime/utils.js.map +1 -1
  162. package/package.json +9 -3
  163. package/templates/react/useAuth.jsx +7 -4
  164. package/templates/react/useAuth.tsx +14 -14
  165. package/templates/react/useBackgroundSync.jsx +5 -4
  166. package/templates/react/useBackgroundSync.tsx +5 -4
  167. package/templates/react/useCachedFetch.jsx +8 -0
  168. package/templates/react/useCachedFetch.tsx +8 -0
  169. package/templates/react/useMutation.jsx +60 -56
  170. package/templates/react/useMutation.tsx +65 -64
  171. package/templates/react/useMutationQueue.jsx +5 -1
  172. package/templates/react/useMutationQueue.tsx +8 -2
  173. package/templates/react/useMutationState.jsx +3 -4
  174. package/templates/react/useMutationState.tsx +4 -8
  175. package/templates/react/useNetworkStatus.jsx +57 -17
  176. package/templates/react/useNetworkStatus.tsx +42 -20
  177. package/templates/react/useOfflineAnalytics.jsx +42 -0
  178. package/templates/react/useOfflineAnalytics.tsx +50 -0
  179. package/templates/react/usePwaInstall.jsx +26 -0
  180. package/templates/react/usePwaInstall.tsx +26 -0
  181. package/templates/react/useSWUpdate.jsx +7 -52
  182. package/templates/react/useSWUpdate.tsx +12 -51
  183. package/templates/react/useStorageEstimate.jsx +56 -0
  184. package/templates/react/useStorageEstimate.tsx +67 -0
  185. package/dist/__tests__/assemble-sw.test.js +0 -145
  186. package/dist/__tests__/assemble-sw.test.js.map +0 -1
  187. package/dist/__tests__/cli-integration.test.js +0 -231
  188. package/dist/__tests__/cli-integration.test.js.map +0 -1
  189. package/dist/__tests__/config-types.test.js +0 -124
  190. package/dist/__tests__/config-types.test.js.map +0 -1
  191. package/dist/__tests__/detect-language.test.js +0 -51
  192. package/dist/__tests__/detect-language.test.js.map +0 -1
  193. package/dist/__tests__/file-generators.test.js +0 -228
  194. package/dist/__tests__/file-generators.test.js.map +0 -1
  195. package/dist/__tests__/glob-matcher.test.js +0 -86
  196. package/dist/__tests__/glob-matcher.test.js.map +0 -1
  197. package/dist/__tests__/invalidation-tags.test.js +0 -283
  198. package/dist/__tests__/invalidation-tags.test.js.map +0 -1
  199. package/dist/__tests__/loader.test.js +0 -77
  200. package/dist/__tests__/loader.test.js.map +0 -1
  201. package/dist/__tests__/validator.test.js +0 -340
  202. package/dist/__tests__/validator.test.js.map +0 -1
  203. package/dist/lib/commands/add.js +0 -120
  204. package/dist/lib/commands/add.js.map +0 -1
  205. package/dist/lib/commands/assets.js +0 -45
  206. package/dist/lib/commands/assets.js.map +0 -1
  207. package/dist/lib/commands/generate-assets.js +0 -44
  208. package/dist/lib/commands/generate-assets.js.map +0 -1
  209. package/dist/lib/commands/info.js +0 -183
  210. package/dist/lib/commands/info.js.map +0 -1
  211. package/dist/lib/generators/asset-generator/dependency-resolver.js +0 -85
  212. package/dist/lib/generators/asset-generator/dependency-resolver.js.map +0 -1
  213. package/dist/lib/generators/asset-generator/generate.js +0 -111
  214. package/dist/lib/generators/asset-generator/generate.js.map +0 -1
  215. package/dist/lib/generators/asset-generator/guide.js +0 -43
  216. package/dist/lib/generators/asset-generator/guide.js.map +0 -1
  217. package/dist/lib/generators/asset-generator/html-patcher.js +0 -65
  218. package/dist/lib/generators/asset-generator/html-patcher.js.map +0 -1
  219. package/dist/lib/generators/asset-generator/ico-encoder.js +0 -29
  220. package/dist/lib/generators/asset-generator/ico-encoder.js.map +0 -1
  221. package/dist/lib/generators/asset-generator/manifest-patcher.js +0 -23
  222. package/dist/lib/generators/asset-generator/manifest-patcher.js.map +0 -1
  223. package/dist/lib/generators/asset-generator/maskable.js +0 -15
  224. package/dist/lib/generators/asset-generator/maskable.js.map +0 -1
  225. package/dist/lib/generators/asset-generator/rasterize.js +0 -32
  226. package/dist/lib/generators/asset-generator/rasterize.js.map +0 -1
  227. package/dist/lib/generators/asset-generator/sizes.js +0 -25
  228. package/dist/lib/generators/asset-generator/sizes.js.map +0 -1
  229. package/dist/lib/generators/file-generators/auth-fetch.js +0 -151
  230. package/dist/lib/generators/file-generators/auth-fetch.js.map +0 -1
  231. package/dist/lib/generators/file-generators/auth-user.js +0 -13
  232. package/dist/lib/generators/file-generators/auth-user.js.map +0 -1
  233. package/dist/lib/generators/file-generators/fetch-state.js +0 -6
  234. package/dist/lib/generators/file-generators/fetch-state.js.map +0 -1
  235. package/dist/lib/generators/file-generators/generate-hooks.js +0 -44
  236. package/dist/lib/generators/file-generators/generate-hooks.js.map +0 -1
  237. package/dist/lib/generators/file-generators/indexeddb.js +0 -74
  238. package/dist/lib/generators/file-generators/indexeddb.js.map +0 -1
  239. package/dist/lib/generators/file-generators/manifest.js +0 -46
  240. package/dist/lib/generators/file-generators/manifest.js.map +0 -1
  241. package/dist/lib/generators/file-generators/mutation-reconcile.js +0 -57
  242. package/dist/lib/generators/file-generators/mutation-reconcile.js.map +0 -1
  243. package/dist/lib/generators/file-generators/quick-readme.js +0 -21
  244. package/dist/lib/generators/file-generators/quick-readme.js.map +0 -1
  245. package/dist/lib/generators/file-generators/reconcile.js +0 -50
  246. package/dist/lib/generators/file-generators/reconcile.js.map +0 -1
  247. package/dist/lib/generators/file-generators/store.js +0 -86
  248. package/dist/lib/generators/file-generators/store.js.map +0 -1
  249. package/dist/lib/generators/file-generators/sw-push.js +0 -67
  250. package/dist/lib/generators/file-generators/sw-push.js.map +0 -1
  251. package/dist/lib/generators/sw-sections/glob-matcher-code.js.map +0 -1
  252. package/dist/lib/utils/build-script.js +0 -35
  253. package/dist/lib/utils/build-script.js.map +0 -1
  254. package/dist/lib/utils/tty-status.js +0 -21
  255. package/dist/lib/utils/tty-status.js.map +0 -1
  256. package/dist/runtime/auth-user.js +0 -168
  257. package/dist/runtime/auth-user.js.map +0 -1
  258. package/dist/runtime/fetch-state.js +0 -42
  259. package/dist/runtime/fetch-state.js.map +0 -1
  260. package/dist/runtime/pwa-index.js +0 -11
  261. package/dist/runtime/pwa-index.js.map +0 -1
  262. package/dist/runtime/pwa-injector.js +0 -44
  263. package/dist/runtime/pwa-injector.js.map +0 -1
  264. package/dist/runtime/pwa-install.js +0 -83
  265. package/dist/runtime/pwa-install.js.map +0 -1
  266. package/templates/react/useCacheInvalidation.jsx +0 -19
  267. package/templates/react/useCacheInvalidation.tsx +0 -52
  268. package/templates/react/useIsFetching.jsx +0 -32
  269. package/templates/react/useIsFetching.tsx +0 -32
@@ -4,28 +4,23 @@ export const REACTIVE_FIELDS = [
4
4
  "refetchOnReconnect",
5
5
  "refetchOnFocus",
6
6
  ];
7
- export const CONFIG_VERSION = 1;
8
7
  export const KNOWN_FEATURES = [
9
8
  "refetchQueue",
10
9
  "mutationQueue",
11
- "backgroundSync",
12
10
  "auth",
13
- "crossTabSync",
14
- "tagInvalidation",
15
11
  "graphql",
16
12
  "pushNotifications",
17
- "serverPush",
18
13
  ];
19
14
  export const OBJECT_FEATURES = [
20
15
  "pwa",
21
16
  "serviceWorker",
22
17
  "auth",
23
- "pushNotifications",
24
18
  "graphql",
25
- "serverPush",
26
19
  "tagInvalidation",
27
20
  "mutationQueue",
28
21
  "refetchQueue",
22
+ "serverPush",
23
+ "connectivity",
29
24
  ];
30
25
  export const VALID_STRATEGIES = [
31
26
  "cache-first",
@@ -38,64 +33,85 @@ export const VALID_STRATEGIES = [
38
33
  export const API_PREFIXES = ["api", "v1", "v2", "v3", "rest", "graphql", "gql"];
39
34
  export const defaultAuth = {
40
35
  enabled: false,
41
- type: "bearer",
42
- refreshPath: "/api/refresh",
43
- userEndpoint: "/api/me",
36
+ type: "cookie",
37
+ routePaths: ["/login", "/logout", "/register", "/api/login", "/api/logout", "/api/register", "/api/refresh", "/api/me"],
44
38
  };
45
39
  export const defaultGql = {
46
40
  enabled: false,
47
- endpoint: "/graphql",
41
+ endpoints: ["/graphql"],
48
42
  };
49
43
  export const defaultMutationQueue = {
50
44
  enabled: false,
51
45
  batchSize: 1,
52
46
  batchDelayMs: 0,
53
- maxRetries: 5,
54
- retryBackoffMs: 1000,
47
+ backgroundSync: false,
48
+ retry: { maxRetries: 5, backoffMs: 1000, maxBackoffMs: 30000, jitterMs: 250 },
55
49
  };
56
50
  export const defaultRefetchQueue = {
57
51
  batchSize: 5,
58
52
  batchDelayMs: 1000,
59
- maxRetries: 3,
60
- retryDelayMs: 1000,
53
+ retry: { maxRetries: 3, backoffMs: 1000, maxBackoffMs: 10000, jitterMs: 100 },
61
54
  };
62
- export const defaultServerPush = {
55
+ export const defaultServerPushConfig = {
63
56
  enabled: false,
64
57
  type: "sse",
65
58
  endpoint: "/api/events",
66
59
  reconnectDelayMs: 5000,
67
60
  };
61
+ export const defaultConnectivity = {
62
+ enabled: false,
63
+ heartbeatIntervalMs: 30000,
64
+ };
68
65
  export const defaultTagInvalidation = {
66
+ enabled: false,
69
67
  debounceMs: 0,
70
- prefixes: [...API_PREFIXES],
68
+ skipPrefixes: [...API_PREFIXES],
71
69
  patterns: {},
72
70
  singularization: {},
73
71
  cascading: {},
74
72
  };
73
+ export function deepMerge(base, override) {
74
+ const result = { ...base };
75
+ for (const key of Object.keys(override)) {
76
+ const baseVal = base[key];
77
+ const overrideVal = override[key];
78
+ if (typeof baseVal === "object" && baseVal !== null &&
79
+ typeof overrideVal === "object" && overrideVal !== null &&
80
+ !Array.isArray(baseVal) &&
81
+ !Array.isArray(overrideVal)) {
82
+ result[key] = deepMerge(baseVal, overrideVal);
83
+ }
84
+ else {
85
+ result[key] = overrideVal ?? baseVal;
86
+ }
87
+ }
88
+ return result;
89
+ }
75
90
  export function mergeConfigs(base, override) {
76
91
  return {
77
92
  ...base,
78
93
  ...override,
79
- apiBaseUrl: override.apiBaseUrl ?? base.apiBaseUrl,
94
+ build: { ...base.build, ...override.build },
80
95
  features: {
81
96
  ...base.features,
82
97
  ...override.features,
98
+ requestBatchWindowMs: override.features?.requestBatchWindowMs ??
99
+ base.features.requestBatchWindowMs,
83
100
  pwa: { ...base.features.pwa, ...override.features?.pwa },
84
101
  serviceWorker: {
85
102
  ...base.features.serviceWorker,
86
103
  ...override.features?.serviceWorker,
87
- version: override.features?.serviceWorker?.version ??
88
- base.features.serviceWorker.version ?? "package",
89
- minSupportedVersion: override.features?.serviceWorker?.minSupportedVersion ??
90
- base.features.serviceWorker.minSupportedVersion,
104
+ precache: {
105
+ ...base.features.serviceWorker.precache,
106
+ ...override.features?.serviceWorker?.precache,
107
+ concurrency: override.features?.serviceWorker?.precache?.concurrency ?? base.features.serviceWorker.precache?.concurrency ?? 1,
108
+ },
91
109
  strategy: {
92
110
  ...base.features.serviceWorker.strategy,
93
111
  ...override.features?.serviceWorker?.strategy,
94
112
  reactive: {
95
- defaults: {
96
- ...base.features.serviceWorker.strategy.reactive.defaults,
97
- ...override.features?.serviceWorker?.strategy?.reactive?.defaults,
98
- },
113
+ ...base.features.serviceWorker.strategy.reactive,
114
+ ...override.features?.serviceWorker?.strategy?.reactive,
99
115
  },
100
116
  },
101
117
  navigation: {
@@ -123,127 +139,116 @@ export function mergeConfigs(base, override) {
123
139
  ...base.features.graphql,
124
140
  ...override.features?.graphql,
125
141
  },
142
+ connectivity: {
143
+ ...defaultConnectivity,
144
+ ...base.features.connectivity,
145
+ ...override.features?.connectivity,
146
+ },
126
147
  tagInvalidation: {
127
148
  ...defaultTagInvalidation,
128
149
  ...base.features.tagInvalidation,
129
150
  ...override.features?.tagInvalidation,
130
151
  },
131
- pushNotifications: {
132
- ...base.features.pushNotifications,
133
- ...override.features?.pushNotifications,
134
- },
152
+ pushNotifications: override.features?.pushNotifications ??
153
+ base.features.pushNotifications,
135
154
  serverPush: {
136
- ...defaultServerPush,
155
+ ...defaultServerPushConfig,
137
156
  ...base.features.serverPush,
138
157
  ...override.features?.serverPush,
139
158
  },
140
159
  },
141
- build: { ...base.build, ...override.build },
142
160
  };
143
161
  }
144
162
  export const defaultConfig = {
145
- configVersion: CONFIG_VERSION,
146
- enabled: true,
147
- apiBaseUrl: "",
163
+ build: {
164
+ outputDir: "dist",
165
+ swFilename: "sw",
166
+ precacheDirs: {},
167
+ },
148
168
  features: {
169
+ requestBatchWindowMs: 50,
149
170
  pwa: {
150
- enabled: true,
171
+ enabled: false,
151
172
  preventDefaultInstall: false,
152
173
  },
153
174
  serviceWorker: {
154
- version: "package",
155
- minSupportedVersion: "0.0.0",
156
- autoUpdate: true,
157
175
  autoActivate: false,
158
- requestBatchWindowMs: 50,
176
+ precache: { concurrency: 1 },
159
177
  strategy: {
160
178
  default: "cache-first",
161
- mode: "all",
162
- clearRuntimeOnUpdate: false,
163
179
  maxRuntimeCacheAge: 2592000,
164
180
  normalizeKey: false,
165
181
  ignoreQueryParams: [],
182
+ timeout: 10,
166
183
  patterns: {},
167
184
  reactive: {
168
- defaults: {
169
- staleTime: 0,
170
- refetchInterval: 0,
171
- refetchOnReconnect: false,
172
- refetchOnFocus: false,
173
- },
185
+ staleTime: 0,
186
+ refetchInterval: 0,
187
+ refetchOnReconnect: false,
188
+ refetchOnFocus: false,
174
189
  },
175
190
  },
176
191
  navigation: {
177
192
  mode: "spa",
178
193
  preload: true,
179
- fallback: "/index.html",
194
+ fallback: "",
195
+ precacheRoutes: [],
196
+ rules: [],
180
197
  },
181
198
  },
182
199
  refetchQueue: { ...defaultRefetchQueue },
183
200
  mutationQueue: { ...defaultMutationQueue },
184
- backgroundSync: false,
185
201
  auth: { ...defaultAuth },
186
- crossTabSync: true,
202
+ connectivity: { ...defaultConnectivity },
187
203
  tagInvalidation: { ...defaultTagInvalidation },
188
204
  graphql: { ...defaultGql },
189
- pushNotifications: { enabled: false },
190
- serverPush: { ...defaultServerPush },
191
- },
192
- build: {
193
- outputDir: "dist",
194
- swFilename: "sw",
205
+ pushNotifications: false,
206
+ serverPush: { ...defaultServerPushConfig },
195
207
  },
196
208
  };
197
209
  export const defaultInitConfig = {
198
210
  $schema: "https://swoff.netlify.app/schema/v1.json",
199
- configVersion: CONFIG_VERSION,
200
- enabled: true,
201
211
  framework: "vanilla",
202
- apiBaseUrl: "",
203
212
  features: {
204
- pwa: { enabled: true, preventDefaultInstall: false },
213
+ requestBatchWindowMs: 50,
214
+ pwa: { enabled: false, preventDefaultInstall: false },
205
215
  serviceWorker: {
206
- version: "package",
207
- minSupportedVersion: "0.0.0",
208
- autoUpdate: true,
209
216
  autoActivate: false,
210
- requestBatchWindowMs: 50,
217
+ precache: { concurrency: 1 },
211
218
  navigation: {
212
219
  mode: "spa",
213
220
  preload: true,
214
- fallback: "/index.html",
221
+ fallback: "",
222
+ precacheRoutes: [],
223
+ rules: [],
215
224
  },
216
225
  strategy: {
217
226
  default: "cache-first",
218
- mode: "all",
219
- clearRuntimeOnUpdate: false,
220
227
  maxRuntimeCacheAge: 2592000,
221
228
  normalizeKey: false,
222
229
  ignoreQueryParams: [],
230
+ timeout: 10,
223
231
  patterns: {
224
232
  "/api/*": "network-first",
225
233
  "/static/*": "cache-first",
226
234
  },
227
235
  reactive: {
228
- defaults: {
229
- staleTime: 0,
230
- refetchInterval: 0,
231
- refetchOnReconnect: false,
232
- refetchOnFocus: false,
233
- },
236
+ staleTime: 0,
237
+ refetchInterval: 0,
238
+ refetchOnReconnect: false,
239
+ refetchOnFocus: false,
234
240
  },
235
241
  },
236
242
  },
237
243
  refetchQueue: { ...defaultRefetchQueue },
238
244
  mutationQueue: { ...defaultMutationQueue },
239
- backgroundSync: false,
240
245
  auth: { ...defaultAuth },
241
- crossTabSync: true,
246
+ connectivity: { ...defaultConnectivity },
242
247
  tagInvalidation: { ...defaultTagInvalidation },
243
248
  graphql: { ...defaultGql },
244
- pushNotifications: { enabled: false },
245
- serverPush: { ...defaultServerPush },
249
+ pushNotifications: false,
250
+ serverPush: { ...defaultServerPushConfig },
246
251
  },
247
- build: { outputDir: "dist", swFilename: "sw" },
252
+ build: { outputDir: "dist", swFilename: "sw", precacheDirs: {} },
248
253
  };
249
254
  //# 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,198 @@
1
+ const AUTH_INCOMPATIBLE = ["bearer", "custom"];
2
+ function buildCheck(configKey, extraCondition) {
3
+ const keys = configKey.split(".");
4
+ return (config) => {
5
+ let obj = config;
6
+ for (const key of keys) {
7
+ if (obj == null || typeof obj !== "object")
8
+ return false;
9
+ obj = obj[key];
10
+ }
11
+ if (extraCondition)
12
+ return !!obj && extraCondition(config);
13
+ return !!obj;
14
+ };
15
+ }
16
+ export const FEATURES = {
17
+ "connectivity": {
18
+ id: "connectivity",
19
+ label: "Connectivity Heartbeat",
20
+ description: "Online/offline detection with periodic heartbeat",
21
+ requires: [],
22
+ incompatibleAuthTypes: [],
23
+ checkEnabled: buildCheck("features.connectivity.enabled"),
24
+ configUpdate: { connectivity: { enabled: true } },
25
+ isCore: false,
26
+ },
27
+ "tag-invalidation": {
28
+ id: "tag-invalidation",
29
+ label: "Tag Invalidation",
30
+ description: "Tag-based cache invalidation system with fetch wrapper",
31
+ requires: [],
32
+ incompatibleAuthTypes: [],
33
+ checkEnabled: buildCheck("features.tagInvalidation.enabled"),
34
+ configUpdate: { tagInvalidation: { enabled: true } },
35
+ isCore: false,
36
+ },
37
+ pwa: {
38
+ id: "pwa",
39
+ label: "PWA Install Prompt",
40
+ description: "PWA install prompt, update notification, and manifest generation",
41
+ requires: [],
42
+ incompatibleAuthTypes: [],
43
+ checkEnabled: buildCheck("features.pwa.enabled"),
44
+ configUpdate: { pwa: { enabled: true } },
45
+ isCore: false,
46
+ },
47
+ auth: {
48
+ id: "auth",
49
+ label: "Authentication",
50
+ description: "Auth token management, session refresh, and protected routes",
51
+ requires: ["connectivity"],
52
+ incompatibleAuthTypes: [],
53
+ checkEnabled: buildCheck("features.auth.enabled"),
54
+ configUpdate: { auth: { enabled: true, type: "cookie" } },
55
+ isCore: false,
56
+ },
57
+ "mutation-queue": {
58
+ id: "mutation-queue",
59
+ label: "Mutation Queue",
60
+ description: "Queue POST/PUT/DELETE mutations when offline and replay when online",
61
+ requires: ["tag-invalidation"],
62
+ incompatibleAuthTypes: [],
63
+ checkEnabled: buildCheck("features.mutationQueue.enabled"),
64
+ configUpdate: {
65
+ mutationQueue: {
66
+ enabled: true,
67
+ batchSize: 1,
68
+ batchDelayMs: 0,
69
+ backgroundSync: false,
70
+ retry: { maxRetries: 5, backoffMs: 1000, maxBackoffMs: 30000, jitterMs: 250 },
71
+ },
72
+ },
73
+ isCore: false,
74
+ },
75
+ "background-sync": {
76
+ id: "background-sync",
77
+ label: "Background Sync",
78
+ description: "Synchronize queued mutations using the Background Sync API when connectivity returns",
79
+ requires: ["mutation-queue"],
80
+ incompatibleAuthTypes: AUTH_INCOMPATIBLE,
81
+ checkEnabled: (config) => {
82
+ const mq = config.features.mutationQueue;
83
+ if (!mq || !mq.backgroundSync || !mq.enabled)
84
+ return false;
85
+ const a = config.features.auth;
86
+ return !a || !a.enabled || a.type === "cookie";
87
+ },
88
+ configUpdate: { mutationQueue: { enabled: true, backgroundSync: true } },
89
+ isCore: false,
90
+ },
91
+ graphql: {
92
+ id: "graphql",
93
+ label: "GraphQL",
94
+ description: "GraphQL endpoint integration with tag-based cache invalidation",
95
+ requires: ["tag-invalidation"],
96
+ incompatibleAuthTypes: [],
97
+ checkEnabled: buildCheck("features.graphql.enabled"),
98
+ configUpdate: { graphql: { enabled: true, endpoints: ["/graphql"] } },
99
+ isCore: false,
100
+ },
101
+ "push-notification": {
102
+ id: "push-notification",
103
+ label: "Push Notifications",
104
+ description: "Web Push API notifications with SW push event handling",
105
+ requires: [],
106
+ incompatibleAuthTypes: [],
107
+ checkEnabled: buildCheck("features.pushNotifications"),
108
+ configUpdate: { pushNotifications: true },
109
+ isCore: false,
110
+ },
111
+ "server-push": {
112
+ id: "server-push",
113
+ label: "Server Push",
114
+ description: "Real-time server push over SSE or WebSocket for live cache invalidation",
115
+ requires: [],
116
+ incompatibleAuthTypes: AUTH_INCOMPATIBLE,
117
+ checkEnabled: (config) => {
118
+ const sp = config.features.serverPush;
119
+ if (!sp || !sp.enabled)
120
+ return false;
121
+ const a = config.features.auth;
122
+ return !a || !a.enabled || a.type === "cookie";
123
+ },
124
+ configUpdate: {
125
+ serverPush: {
126
+ enabled: true,
127
+ type: "sse",
128
+ endpoint: "/api/events",
129
+ reconnectDelayMs: 5000,
130
+ },
131
+ },
132
+ isCore: false,
133
+ },
134
+ };
135
+ export function getFeature(id) {
136
+ return FEATURES[id];
137
+ }
138
+ /**
139
+ * Resolve all transitive dependencies of the given features.
140
+ * Returns the full set of feature IDs needed (including the inputs).
141
+ */
142
+ export function resolveDependencies(featureIds) {
143
+ const resolved = new Set();
144
+ function walk(ids) {
145
+ for (const id of ids) {
146
+ if (resolved.has(id))
147
+ continue;
148
+ resolved.add(id);
149
+ const feature = FEATURES[id];
150
+ if (feature)
151
+ walk(feature.requires);
152
+ }
153
+ }
154
+ walk(featureIds);
155
+ return [...resolved];
156
+ }
157
+ /**
158
+ * Returns the subset of featureIds that has an auth type conflict
159
+ * with the given config.
160
+ */
161
+ export function getAuthConflicts(featureIds, config) {
162
+ if (!config.features.auth.enabled)
163
+ return [];
164
+ const authType = config.features.auth.type;
165
+ return featureIds.filter((id) => {
166
+ const feature = FEATURES[id];
167
+ return feature && feature.incompatibleAuthTypes.includes(authType);
168
+ });
169
+ }
170
+ /**
171
+ * Build a config update object that enables the given features (with deps).
172
+ * Does NOT handle auth conflicts — caller should check those first.
173
+ */
174
+ export function buildConfigUpdate(featureIds) {
175
+ const ids = resolveDependencies(featureIds);
176
+ const merged = {};
177
+ for (const id of ids) {
178
+ const feature = FEATURES[id];
179
+ if (feature) {
180
+ deepMergeInto(merged, feature.configUpdate);
181
+ }
182
+ }
183
+ return merged;
184
+ }
185
+ function deepMergeInto(target, source) {
186
+ for (const key of Object.keys(source)) {
187
+ const sv = source[key];
188
+ const tv = target[key];
189
+ if (sv && typeof sv === "object" && !Array.isArray(sv) &&
190
+ tv && typeof tv === "object" && !Array.isArray(tv)) {
191
+ deepMergeInto(tv, sv);
192
+ }
193
+ else {
194
+ target[key] = sv;
195
+ }
196
+ }
197
+ }
198
+ //# sourceMappingURL=feature-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-registry.js","sourceRoot":"","sources":["../../../src/lib/shared/feature-registry.ts"],"names":[],"mappings":"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"}
@@ -4,13 +4,50 @@ const REACT_DEPS = [
4
4
  "react",
5
5
  "react-dom",
6
6
  "react-router-dom",
7
+ "@tanstack/react-router",
7
8
  "remix",
8
9
  "@remix-run/react",
9
10
  ];
11
+ const META_FRAMEWORKS = [
12
+ ["next", "nextjs"],
13
+ ["@remix-run/react", "remix"],
14
+ ["remix", "remix"],
15
+ ["@tanstack/react-start", "tanstack-start-react"],
16
+ ["astro", "astro"],
17
+ ["nuxt", "nuxt"],
18
+ ["@sveltejs/kit", "sveltekit"],
19
+ ];
20
+ const BASE_FRAMEWORKS = [
21
+ ["vue", "vue"],
22
+ ["svelte", "svelte"],
23
+ ];
24
+ function probeBackend(projectRoot) {
25
+ if (existsSync(join(projectRoot, "composer.json")))
26
+ return "laravel";
27
+ if (existsSync(join(projectRoot, "manage.py")))
28
+ return "django";
29
+ if (existsSync(join(projectRoot, "app.py")))
30
+ return "flask";
31
+ const reqPath = join(projectRoot, "requirements.txt");
32
+ if (existsSync(reqPath)) {
33
+ const req = readFileSync(reqPath, "utf8");
34
+ if (/^flask\b/im.test(req))
35
+ return "flask";
36
+ if (/^django\b/im.test(req))
37
+ return "django";
38
+ }
39
+ if (existsSync(join(projectRoot, "Gemfile")))
40
+ return "rails";
41
+ if (existsSync(join(projectRoot, "go.mod")))
42
+ return "go";
43
+ return null;
44
+ }
10
45
  export function detectFramework(projectRoot) {
11
46
  const pkgPath = join(projectRoot, "package.json");
12
- if (!existsSync(pkgPath))
13
- return "vanilla";
47
+ if (!existsSync(pkgPath)) {
48
+ const backend = probeBackend(projectRoot);
49
+ return backend ?? "vanilla";
50
+ }
14
51
  let deps = {};
15
52
  let devDeps = {};
16
53
  try {
@@ -19,15 +56,21 @@ export function detectFramework(projectRoot) {
19
56
  devDeps = pkg.devDependencies || {};
20
57
  }
21
58
  catch {
22
- return "vanilla";
59
+ const backend = probeBackend(projectRoot);
60
+ return backend ?? "vanilla";
23
61
  }
24
62
  const allDeps = { ...deps, ...devDeps };
63
+ for (const [dep, name] of META_FRAMEWORKS) {
64
+ if (allDeps[dep])
65
+ return name;
66
+ }
67
+ for (const [dep, name] of BASE_FRAMEWORKS) {
68
+ if (allDeps[dep])
69
+ return name;
70
+ }
25
71
  if (REACT_DEPS.some((d) => allDeps[d]))
26
- return "react";
27
- if (allDeps.vue)
28
- return "vue";
29
- if (allDeps.svelte)
30
- return "svelte";
31
- return "vanilla";
72
+ return "react-spa";
73
+ const backend = probeBackend(projectRoot);
74
+ return backend ?? "vanilla";
32
75
  }
33
76
  //# sourceMappingURL=detect-framework.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"detect-framework.js","sourceRoot":"","sources":["../../../src/lib/utils/detect-framework.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,GAAG;IACjB,OAAO;IACP,WAAW;IACX,kBAAkB;IAClB,OAAO;IACP,kBAAkB;CACnB,CAAC;AAIF,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAE3C,IAAI,IAAI,GAA2B,EAAE,CAAC;IACtC,IAAI,OAAO,GAA2B,EAAE,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QACtD,IAAI,GAAG,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;QAC9B,OAAO,GAAG,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;IAExC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IACvD,IAAI,OAAO,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IAC9B,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IAEpC,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"detect-framework.js","sourceRoot":"","sources":["../../../src/lib/utils/detect-framework.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,GAAG;IACjB,OAAO;IACP,WAAW;IACX,kBAAkB;IAClB,wBAAwB;IACxB,OAAO;IACP,kBAAkB;CACnB,CAAC;AAmBF,MAAM,eAAe,GAA8B;IACjD,CAAC,MAAM,EAAE,QAAQ,CAAC;IAClB,CAAC,kBAAkB,EAAE,OAAO,CAAC;IAC7B,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,uBAAuB,EAAE,sBAAsB,CAAC;IACjD,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,eAAe,EAAE,WAAW,CAAC;CAC/B,CAAC;AAEF,MAAM,eAAe,GAA8B;IACjD,CAAC,KAAK,EAAE,KAAK,CAAC;IACd,CAAC,QAAQ,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF,SAAS,YAAY,CAAC,WAAmB;IACvC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACrE,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IAChE,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IACtD,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC;QAC3C,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC;IAC/C,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IAC7D,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACzD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;QAC1C,OAAO,OAAO,IAAI,SAAS,CAAC;IAC9B,CAAC;IAED,IAAI,IAAI,GAA2B,EAAE,CAAC;IACtC,IAAI,OAAO,GAA2B,EAAE,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QACtD,IAAI,GAAG,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;QAC9B,OAAO,GAAG,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;QAC1C,OAAO,OAAO,IAAI,SAAS,CAAC;IAC9B,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;IAExC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,eAAe,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IAChC,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,eAAe,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IAChC,CAAC;IAED,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,WAAW,CAAC;IAE3D,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAC1C,OAAO,OAAO,IAAI,SAAS,CAAC;AAC9B,CAAC"}
@@ -1,4 +1,4 @@
1
- export function generateApiConfigCode(apiBaseUrl) {
1
+ export function generateApiConfigCode() {
2
2
  return `/**
3
3
  * Swoff Central Config
4
4
  *
@@ -12,7 +12,7 @@ export function generateApiConfigCode(apiBaseUrl) {
12
12
  * Deno: Deno.env.get("SWOFF_API_BASE")
13
13
  */
14
14
 
15
- export const API_BASE = "${apiBaseUrl}";
15
+ export const API_BASE = "";
16
16
  `;
17
17
  }
18
18
  //# sourceMappingURL=api-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-config.js","sourceRoot":"","sources":["../../src/runtime/api-config.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,qBAAqB,CAAC,UAAkB;IACtD,OAAO;;;;;;;;;;;;;2BAakB,UAAU;CACpC,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"api-config.js","sourceRoot":"","sources":["../../src/runtime/api-config.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,qBAAqB;IACnC,OAAO;;;;;;;;;;;;;;CAcR,CAAC;AACF,CAAC"}