@swoff/cli 0.3.8 → 0.3.10

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 (228) hide show
  1. package/README.md +47 -33
  2. package/dist/__tests__/assemble-sw.test.js +14 -53
  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 +44 -17
  7. package/dist/__tests__/config-types.test.js.map +1 -1
  8. package/dist/__tests__/file-generators.test.js +3 -3
  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 +16 -12
  15. package/dist/__tests__/loader.test.js.map +1 -1
  16. package/dist/__tests__/validator.test.js +140 -100
  17. package/dist/__tests__/validator.test.js.map +1 -1
  18. package/dist/index.js +39 -34
  19. package/dist/index.js.map +1 -1
  20. package/dist/lib/cli/help.js +12 -12
  21. package/dist/lib/cli/help.js.map +1 -1
  22. package/dist/lib/commands/add.js +84 -36
  23. package/dist/lib/commands/add.js.map +1 -1
  24. package/dist/lib/commands/assets.js +37 -0
  25. package/dist/lib/commands/assets.js.map +1 -0
  26. package/dist/lib/commands/clean.js +32 -30
  27. package/dist/lib/commands/clean.js.map +1 -1
  28. package/dist/lib/commands/generate-assets.js +44 -0
  29. package/dist/lib/commands/generate-assets.js.map +1 -0
  30. package/dist/lib/commands/generate-guide.js +22 -29
  31. package/dist/lib/commands/generate-guide.js.map +1 -1
  32. package/dist/lib/commands/generate.js +17 -24
  33. package/dist/lib/commands/generate.js.map +1 -1
  34. package/dist/lib/commands/info.js +41 -48
  35. package/dist/lib/commands/info.js.map +1 -1
  36. package/dist/lib/commands/init.js +27 -13
  37. package/dist/lib/commands/init.js.map +1 -1
  38. package/dist/lib/commands/validate.js +4 -4
  39. package/dist/lib/commands/validate.js.map +1 -1
  40. package/dist/lib/config/loader.js +25 -23
  41. package/dist/lib/config/loader.js.map +1 -1
  42. package/dist/lib/config/validator.js +169 -91
  43. package/dist/lib/config/validator.js.map +1 -1
  44. package/dist/lib/generators/asset-generator/dependency-resolver.js +76 -0
  45. package/dist/lib/generators/asset-generator/dependency-resolver.js.map +1 -0
  46. package/dist/lib/generators/asset-generator/generate.js +111 -0
  47. package/dist/lib/generators/asset-generator/generate.js.map +1 -0
  48. package/dist/lib/generators/asset-generator/guide.js +43 -0
  49. package/dist/lib/generators/asset-generator/guide.js.map +1 -0
  50. package/dist/lib/generators/asset-generator/html-patcher.js +65 -0
  51. package/dist/lib/generators/asset-generator/html-patcher.js.map +1 -0
  52. package/dist/lib/generators/asset-generator/ico-encoder.js +29 -0
  53. package/dist/lib/generators/asset-generator/ico-encoder.js.map +1 -0
  54. package/dist/lib/generators/asset-generator/manifest-patcher.js +23 -0
  55. package/dist/lib/generators/asset-generator/manifest-patcher.js.map +1 -0
  56. package/dist/lib/generators/asset-generator/maskable.js +15 -0
  57. package/dist/lib/generators/asset-generator/maskable.js.map +1 -0
  58. package/dist/lib/generators/asset-generator/rasterize.js +32 -0
  59. package/dist/lib/generators/asset-generator/rasterize.js.map +1 -0
  60. package/dist/lib/generators/asset-generator/sizes.js +25 -0
  61. package/dist/lib/generators/asset-generator/sizes.js.map +1 -0
  62. package/dist/lib/generators/file-generators/api-config.js +6 -0
  63. package/dist/lib/generators/file-generators/api-config.js.map +1 -0
  64. package/dist/lib/generators/file-generators/auth-state.js +2 -34
  65. package/dist/lib/generators/file-generators/auth-state.js.map +1 -1
  66. package/dist/lib/generators/file-generators/auth-store.js +2 -250
  67. package/dist/lib/generators/file-generators/auth-store.js.map +1 -1
  68. package/dist/lib/generators/file-generators/auth-user.js +3 -81
  69. package/dist/lib/generators/file-generators/auth-user.js.map +1 -1
  70. package/dist/lib/generators/file-generators/background-sync.js +2 -57
  71. package/dist/lib/generators/file-generators/background-sync.js.map +1 -1
  72. package/dist/lib/generators/file-generators/cache.js +2 -38
  73. package/dist/lib/generators/file-generators/cache.js.map +1 -1
  74. package/dist/lib/generators/file-generators/client-injector.js +2 -91
  75. package/dist/lib/generators/file-generators/client-injector.js.map +1 -1
  76. package/dist/lib/generators/file-generators/fetch-state.js +6 -0
  77. package/dist/lib/generators/file-generators/fetch-state.js.map +1 -0
  78. package/dist/lib/generators/file-generators/fetch-wrapper.js +3 -267
  79. package/dist/lib/generators/file-generators/fetch-wrapper.js.map +1 -1
  80. package/dist/lib/generators/file-generators/generate-framework-adapters.js +56 -0
  81. package/dist/lib/generators/file-generators/generate-framework-adapters.js.map +1 -0
  82. package/dist/lib/generators/file-generators/generate-hooks.js +4 -3
  83. package/dist/lib/generators/file-generators/generate-hooks.js.map +1 -1
  84. package/dist/lib/generators/file-generators/gql-wrapper.js +3 -145
  85. package/dist/lib/generators/file-generators/gql-wrapper.js.map +1 -1
  86. package/dist/lib/generators/file-generators/guide-generator.js +24 -630
  87. package/dist/lib/generators/file-generators/guide-generator.js.map +1 -1
  88. package/dist/lib/generators/file-generators/invalidation-tags.js +18 -86
  89. package/dist/lib/generators/file-generators/invalidation-tags.js.map +1 -1
  90. package/dist/lib/generators/file-generators/manifest.js +15 -5
  91. package/dist/lib/generators/file-generators/manifest.js.map +1 -1
  92. package/dist/lib/generators/file-generators/mutation-queue.js +3 -285
  93. package/dist/lib/generators/file-generators/mutation-queue.js.map +1 -1
  94. package/dist/lib/generators/file-generators/mutation-state.js +2 -117
  95. package/dist/lib/generators/file-generators/mutation-state.js.map +1 -1
  96. package/dist/lib/generators/file-generators/push.js +6 -139
  97. package/dist/lib/generators/file-generators/push.js.map +1 -1
  98. package/dist/lib/generators/file-generators/pwa-install.js +11 -84
  99. package/dist/lib/generators/file-generators/pwa-install.js.map +1 -1
  100. package/dist/lib/generators/file-generators/quick-readme.js +8 -125
  101. package/dist/lib/generators/file-generators/quick-readme.js.map +1 -1
  102. package/dist/lib/generators/file-generators/reset.js +6 -0
  103. package/dist/lib/generators/file-generators/reset.js.map +1 -0
  104. package/dist/lib/generators/file-generators/server-push.js +3 -124
  105. package/dist/lib/generators/file-generators/server-push.js.map +1 -1
  106. package/dist/lib/generators/file-generators/sw-generator-build.js +8 -9
  107. package/dist/lib/generators/file-generators/sw-generator-build.js.map +1 -1
  108. package/dist/lib/generators/file-generators/sw-injector.js +10 -230
  109. package/dist/lib/generators/file-generators/sw-injector.js.map +1 -1
  110. package/dist/lib/generators/file-generators/type-definitions.js +2 -114
  111. package/dist/lib/generators/file-generators/type-definitions.js.map +1 -1
  112. package/dist/lib/generators/sw-generator.js +10 -20
  113. package/dist/lib/generators/sw-generator.js.map +1 -1
  114. package/dist/lib/generators/sw-sections/activate-handler.js +25 -3
  115. package/dist/lib/generators/sw-sections/activate-handler.js.map +1 -1
  116. package/dist/lib/generators/sw-sections/assemble-sw.js +20 -16
  117. package/dist/lib/generators/sw-sections/assemble-sw.js.map +1 -1
  118. package/dist/lib/generators/sw-sections/background-sync-handler.js +68 -19
  119. package/dist/lib/generators/sw-sections/background-sync-handler.js.map +1 -1
  120. package/dist/lib/generators/sw-sections/config-header.js +2 -2
  121. package/dist/lib/generators/sw-sections/config-header.js.map +1 -1
  122. package/dist/lib/generators/sw-sections/fetch-handler.js +506 -144
  123. package/dist/lib/generators/sw-sections/fetch-handler.js.map +1 -1
  124. package/dist/lib/generators/sw-sections/glob-matcher-code.js.map +1 -0
  125. package/dist/lib/generators/sw-sections/message-handler.js +55 -15
  126. package/dist/lib/generators/sw-sections/message-handler.js.map +1 -1
  127. package/dist/lib/generators/sw-sections/server-push-handler.js +12 -0
  128. package/dist/lib/generators/sw-sections/server-push-handler.js.map +1 -1
  129. package/dist/lib/generators/sw-sections/sw-push.js +67 -0
  130. package/dist/lib/generators/sw-sections/sw-push.js.map +1 -0
  131. package/dist/lib/generators/sw-sections/tag-management.js +65 -23
  132. package/dist/lib/generators/sw-sections/tag-management.js.map +1 -1
  133. package/dist/lib/generators/swoff-files-generator.js +66 -45
  134. package/dist/lib/generators/swoff-files-generator.js.map +1 -1
  135. package/dist/lib/shared/config-types.js +182 -71
  136. package/dist/lib/shared/config-types.js.map +1 -1
  137. package/dist/lib/shared/glob-matcher.js +77 -0
  138. package/dist/lib/shared/glob-matcher.js.map +1 -0
  139. package/dist/lib/utils/tty-status.js +21 -0
  140. package/dist/lib/utils/tty-status.js.map +1 -0
  141. package/dist/runtime/api-config.js +18 -0
  142. package/dist/runtime/api-config.js.map +1 -0
  143. package/dist/runtime/auth-state.js +35 -0
  144. package/dist/runtime/auth-state.js.map +1 -0
  145. package/dist/runtime/auth-store.js +273 -0
  146. package/dist/runtime/auth-store.js.map +1 -0
  147. package/dist/runtime/auth-user.js +168 -0
  148. package/dist/runtime/auth-user.js.map +1 -0
  149. package/dist/runtime/background-sync.js +59 -0
  150. package/dist/runtime/background-sync.js.map +1 -0
  151. package/dist/runtime/cache.js +30 -0
  152. package/dist/runtime/cache.js.map +1 -0
  153. package/dist/runtime/client-injector.js +136 -0
  154. package/dist/runtime/client-injector.js.map +1 -0
  155. package/dist/runtime/fetch-state.js +42 -0
  156. package/dist/runtime/fetch-state.js.map +1 -0
  157. package/dist/runtime/fetch-wrapper.js +355 -0
  158. package/dist/runtime/fetch-wrapper.js.map +1 -0
  159. package/dist/runtime/gql-wrapper.js +135 -0
  160. package/dist/runtime/gql-wrapper.js.map +1 -0
  161. package/dist/runtime/invalidation-tags.js +260 -0
  162. package/dist/runtime/invalidation-tags.js.map +1 -0
  163. package/dist/runtime/mutation-queue.js +304 -0
  164. package/dist/runtime/mutation-queue.js.map +1 -0
  165. package/dist/runtime/mutation-state.js +117 -0
  166. package/dist/runtime/mutation-state.js.map +1 -0
  167. package/dist/runtime/push.js +138 -0
  168. package/dist/runtime/push.js.map +1 -0
  169. package/dist/runtime/pwa-index.js +11 -0
  170. package/dist/runtime/pwa-index.js.map +1 -0
  171. package/dist/runtime/pwa-injector.js +44 -0
  172. package/dist/runtime/pwa-injector.js.map +1 -0
  173. package/dist/runtime/pwa-install.js +83 -0
  174. package/dist/runtime/pwa-install.js.map +1 -0
  175. package/dist/runtime/pwa-prompt.js +54 -0
  176. package/dist/runtime/pwa-prompt.js.map +1 -0
  177. package/dist/runtime/reset.js +148 -0
  178. package/dist/runtime/reset.js.map +1 -0
  179. package/dist/runtime/server-push.js +148 -0
  180. package/dist/runtime/server-push.js.map +1 -0
  181. package/dist/runtime/sw-injector.js +236 -0
  182. package/dist/runtime/sw-injector.js.map +1 -0
  183. package/dist/runtime/type-definitions.js +138 -0
  184. package/dist/runtime/type-definitions.js.map +1 -0
  185. package/dist/runtime/utils.js +27 -0
  186. package/dist/runtime/utils.js.map +1 -0
  187. package/package.json +3 -1
  188. package/templates/react/useAuth.jsx +106 -0
  189. package/templates/react/useAuth.tsx +118 -0
  190. package/templates/{hooks → react}/useBackgroundSync.jsx +6 -4
  191. package/templates/{hooks → react}/useBackgroundSync.tsx +6 -4
  192. package/templates/{hooks → react}/useCacheInvalidation.jsx +2 -2
  193. package/templates/react/useCacheInvalidation.tsx +52 -0
  194. package/templates/react/useCachedFetch.jsx +140 -0
  195. package/templates/react/useCachedFetch.tsx +160 -0
  196. package/templates/react/useIsFetching.jsx +32 -0
  197. package/templates/react/useIsFetching.tsx +32 -0
  198. package/templates/react/useMutation.jsx +141 -0
  199. package/templates/react/useMutation.tsx +180 -0
  200. package/templates/react/useMutationQueue.jsx +69 -0
  201. package/templates/react/useMutationQueue.tsx +83 -0
  202. package/templates/react/useMutationState.jsx +13 -0
  203. package/templates/react/useMutationState.tsx +25 -0
  204. package/templates/react/useNetworkStatus.jsx +61 -0
  205. package/templates/react/useNetworkStatus.tsx +76 -0
  206. package/templates/react/usePrefetch.jsx +32 -0
  207. package/templates/react/usePrefetch.tsx +42 -0
  208. package/templates/{hooks → react}/usePushSubscription.jsx +7 -7
  209. package/templates/{hooks → react}/usePushSubscription.tsx +7 -7
  210. package/templates/{hooks → react}/useSWUpdate.jsx +3 -3
  211. package/templates/{hooks → react}/useSWUpdate.tsx +4 -4
  212. package/templates/react/useSwoffReset.jsx +32 -0
  213. package/templates/react/useSwoffReset.tsx +39 -0
  214. package/templates/hooks/useAuth.jsx +0 -30
  215. package/templates/hooks/useAuth.tsx +0 -30
  216. package/templates/hooks/useCacheInvalidation.tsx +0 -19
  217. package/templates/hooks/useCachedFetch.jsx +0 -94
  218. package/templates/hooks/useCachedFetch.tsx +0 -112
  219. package/templates/hooks/useMutation.jsx +0 -76
  220. package/templates/hooks/useMutation.tsx +0 -97
  221. package/templates/hooks/useMutationQueue.jsx +0 -42
  222. package/templates/hooks/useMutationQueue.tsx +0 -49
  223. package/templates/hooks/useMutationState.jsx +0 -27
  224. package/templates/hooks/useMutationState.tsx +0 -41
  225. package/templates/hooks/useNetworkStatus.jsx +0 -19
  226. package/templates/hooks/useNetworkStatus.tsx +0 -19
  227. package/templates/hooks/usePrefetch.jsx +0 -10
  228. package/templates/hooks/usePrefetch.tsx +0 -25
@@ -11,8 +11,8 @@ export const commands = {
11
11
  },
12
12
  generate: {
13
13
  description: "Generate service worker and supporting files",
14
- usage: "swoff generate [--sw-only|--files-only]",
15
- examples: ["swoff generate", "swoff generate --sw-only", "swoff generate --files-only"],
14
+ usage: "swoff generate [--sw-only|--files-only|--continue-on-sw-error]",
15
+ examples: ["swoff generate", "swoff generate --sw-only", "swoff generate --continue-on-sw-error"],
16
16
  },
17
17
  validate: {
18
18
  description: "Validate swoff.config.json",
@@ -20,19 +20,19 @@ export const commands = {
20
20
  examples: ["swoff validate"],
21
21
  },
22
22
  add: {
23
- description: "Add specific feature files",
24
- usage: "swoff add <feature>",
25
- examples: ["swoff add pwa", "swoff add mutation-queue"],
23
+ description: "Add specific feature files (mutation-queue, pwa, cross-tab, auth, background-sync, graphql, push-notification, htmx, php)",
24
+ usage: "swoff add <feature1>[,<feature2>,...]",
25
+ examples: ["swoff add pwa", "swoff add auth,graphql", "swoff add htmx"],
26
26
  },
27
- info: {
28
- description: "Show Swoff configuration summary or per-feature details",
29
- usage: "swoff info [feature]",
30
- examples: ["swoff info", "swoff info mutation-queue", "swoff info auth"],
27
+ assets: {
28
+ description: "Generate PWA assets (icons, favicon, OG image, splash screens) from source image",
29
+ usage: "swoff assets --source <path> [--no-splash]",
30
+ examples: ["swoff assets --source ./logo.svg", "swoff assets --source ./logo.svg --no-splash"],
31
31
  },
32
32
  clean: {
33
- description: "Remove Swoff from the project (swoff/, config, version.json)",
34
- usage: "swoff clean",
35
- examples: ["swoff clean"],
33
+ description: "Remove Swoff from the project (swoff/, config, version.json). Use --yes to skip confirmation",
34
+ usage: "swoff clean [--yes|-y]",
35
+ examples: ["swoff clean", "swoff clean --yes"],
36
36
  },
37
37
  help: {
38
38
  description: "Show help information",
@@ -1 +1 @@
1
- {"version":3,"file":"help.js","sourceRoot":"","sources":["../../../src/lib/cli/help.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAQlC,MAAM,CAAC,MAAM,QAAQ,GAA+B;IAClD,IAAI,EAAE;QACJ,WAAW,EAAE,uCAAuC;QACpD,KAAK,EAAE,mDAAmD;QAC1D,QAAQ,EAAE,CAAC,YAAY,EAAE,8BAA8B,CAAC;KACzD;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,8CAA8C;QAC3D,KAAK,EAAE,yCAAyC;QAChD,QAAQ,EAAE,CAAC,gBAAgB,EAAE,0BAA0B,EAAE,6BAA6B,CAAC;KACxF;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,4BAA4B;QACzC,KAAK,EAAE,gBAAgB;QACvB,QAAQ,EAAE,CAAC,gBAAgB,CAAC;KAC7B;IACD,GAAG,EAAE;QACH,WAAW,EAAE,4BAA4B;QACzC,KAAK,EAAE,qBAAqB;QAC5B,QAAQ,EAAE,CAAC,eAAe,EAAE,0BAA0B,CAAC;KACxD;IACD,IAAI,EAAE;QACJ,WAAW,EAAE,yDAAyD;QACtE,KAAK,EAAE,sBAAsB;QAC7B,QAAQ,EAAE,CAAC,YAAY,EAAE,2BAA2B,EAAE,iBAAiB,CAAC;KACzE;IACD,KAAK,EAAE;QACL,WAAW,EAAE,8DAA8D;QAC3E,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,CAAC,aAAa,CAAC;KAC1B;IACD,IAAI,EAAE;QACJ,WAAW,EAAE,uBAAuB;QACpC,KAAK,EAAE,sBAAsB;QAC7B,QAAQ,EAAE,CAAC,YAAY,EAAE,iBAAiB,CAAC;KAC5C;CACF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,WAAoB;IAC3C,IAAI,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;QAClC,GAAG,CAAC,MAAM,CAAC,SAAS,WAAW,UAAU,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,QAAQ,MAAM,CAAC,KAAK,uCAAuC,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,IAAI,4BAA4B,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE;YAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,IAAI,uBAAuB,MAAM,CAAC,KAAK,0CAA0C,CAAC,CAAC;IACjH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../../src/lib/cli/help.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAQlC,MAAM,CAAC,MAAM,QAAQ,GAA+B;IAClD,IAAI,EAAE;QACJ,WAAW,EAAE,uCAAuC;QACpD,KAAK,EAAE,mDAAmD;QAC1D,QAAQ,EAAE,CAAC,YAAY,EAAE,8BAA8B,CAAC;KACzD;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,8CAA8C;QAC3D,KAAK,EAAE,gEAAgE;QACvE,QAAQ,EAAE,CAAC,gBAAgB,EAAE,0BAA0B,EAAE,uCAAuC,CAAC;KAClG;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,4BAA4B;QACzC,KAAK,EAAE,gBAAgB;QACvB,QAAQ,EAAE,CAAC,gBAAgB,CAAC;KAC7B;IACD,GAAG,EAAE;QACH,WAAW,EAAE,2HAA2H;QACxI,KAAK,EAAE,uCAAuC;QAC9C,QAAQ,EAAE,CAAC,eAAe,EAAE,wBAAwB,EAAE,gBAAgB,CAAC;KACxE;IACD,MAAM,EAAE;QACN,WAAW,EAAE,kFAAkF;QAC/F,KAAK,EAAE,4CAA4C;QACnD,QAAQ,EAAE,CAAC,kCAAkC,EAAE,8CAA8C,CAAC;KAC/F;IACD,KAAK,EAAE;QACL,WAAW,EAAE,8FAA8F;QAC3G,KAAK,EAAE,wBAAwB;QAC/B,QAAQ,EAAE,CAAC,aAAa,EAAE,mBAAmB,CAAC;KAC/C;IACD,IAAI,EAAE;QACJ,WAAW,EAAE,uBAAuB;QACpC,KAAK,EAAE,sBAAsB;QAC7B,QAAQ,EAAE,CAAC,YAAY,EAAE,iBAAiB,CAAC;KAC5C;CACF,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,WAAoB;IAC3C,IAAI,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;QAClC,GAAG,CAAC,MAAM,CAAC,SAAS,WAAW,UAAU,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,QAAQ,MAAM,CAAC,KAAK,uCAAuC,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,IAAI,4BAA4B,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE;YAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,IAAI,uBAAuB,MAAM,CAAC,KAAK,0CAA0C,CAAC,CAAC;IACjH,CAAC;AACH,CAAC"}
@@ -1,40 +1,70 @@
1
1
  /**
2
- * add command - enables a feature flag and regenerates.
2
+ * add command - enables one or more feature flags and regenerates.
3
+ * Supports comma-separated features: swoff add auth,graphql,pwa
3
4
  */
4
- import { readFileSync, writeFileSync } from "fs";
5
- import { join } from "path";
5
+ import { readFileSync, writeFileSync, existsSync, readdirSync, copyFileSync, mkdirSync } from "fs";
6
+ import { join, dirname } from "path";
7
+ import { fileURLToPath } from "url";
6
8
  import { log } from "../cli/logger.js";
7
9
  import { loadConfigAsync } from "../config/loader.js";
8
10
  import { defaultConfig } from "../shared/config-types.js";
9
11
  import { generateCommand } from "./generate.js";
10
- const KNOWN_FEATURES = ["mutation-queue", "mutationqueue", "pwa", "cross-tab", "crosstab", "auth", "tag-invalidation", "taginvalidation", "background-sync", "backgroundsync", "graphql", "push-notification", "pushnotification"];
11
- const featureMap = {
12
+ const __dirname = dirname(fileURLToPath(import.meta.url));
13
+ const templatesDir = join(__dirname, "../../../../templates");
14
+ const FEATURE_ALIASES = {
15
+ mutationqueue: "mutation-queue",
16
+ crosstab: "cross-tab",
17
+ backgroundsync: "background-sync",
18
+ pushnotification: "push-notification",
19
+ };
20
+ const FEATURE_NAMES = [
21
+ "mutation-queue", "pwa", "cross-tab", "auth",
22
+ "background-sync", "graphql", "push-notification",
23
+ "htmx", "php",
24
+ ];
25
+ const FEATURE_CONFIG_UPDATES = {
12
26
  "mutation-queue": { mutationQueue: { enabled: true, batchSize: 1, batchDelayMs: 0, maxRetries: 5, retryBackoffMs: 1000 } },
13
- mutationqueue: { mutationQueue: { enabled: true, batchSize: 1, batchDelayMs: 0, maxRetries: 5, retryBackoffMs: 1000 } },
14
27
  pwa: { pwa: { enabled: true } },
15
- "cross-tab": { crossTabSync: true, tagInvalidation: true },
16
- crosstab: { crossTabSync: true, tagInvalidation: true },
28
+ "cross-tab": { crossTabSync: true },
17
29
  auth: { auth: { enabled: true, type: "bearer", refreshPath: "/api/refresh", userEndpoint: "/api/me" } },
18
- "tag-invalidation": { tagInvalidation: true },
19
- taginvalidation: { tagInvalidation: true },
20
30
  "background-sync": { backgroundSync: true },
21
- backgroundsync: { backgroundSync: true },
22
31
  graphql: { graphql: { enabled: true, endpoint: "/graphql" } },
23
32
  "push-notification": { pushNotifications: { enabled: true, vapidPublicKey: "" } },
24
- pushnotification: { pushNotifications: { enabled: true, vapidPublicKey: "" } },
33
+ htmx: {},
34
+ php: {},
25
35
  };
26
- export async function addCommand(projectRoot, feature) {
27
- log.header(`Adding ${feature} feature`);
28
- const configUpdate = featureMap[feature.toLowerCase()];
29
- if (!configUpdate) {
30
- log.error(`Unknown feature: ${feature}`);
31
- log.info("Available features: mutation-queue, pwa, cross-tab, auth, tag-invalidation, background-sync, graphql, push-notification");
36
+ function normalizeFeature(name) {
37
+ const lower = name.toLowerCase().trim();
38
+ return FEATURE_ALIASES[lower] ?? lower;
39
+ }
40
+ function mergeFeatureIntoRaw(raw, update) {
41
+ const features = { ...(raw.features || {}) };
42
+ for (const [key, value] of Object.entries(update)) {
43
+ if (typeof value === "object" && value !== null && typeof features[key] === "object" && features[key] !== null) {
44
+ features[key] = { ...features[key], ...value };
45
+ }
46
+ else {
47
+ features[key] = value;
48
+ }
49
+ }
50
+ return { ...raw, features };
51
+ }
52
+ export async function addCommand(projectRoot, featureArg) {
53
+ const features = featureArg.split(",").map(normalizeFeature).filter(Boolean);
54
+ const invalid = features.filter((f) => !FEATURE_CONFIG_UPDATES[f]);
55
+ if (invalid.length > 0) {
56
+ log.error(`Unknown feature(s): ${invalid.join(", ")}`);
57
+ log.info(`Available: ${FEATURE_NAMES.join(", ")}`);
32
58
  return;
33
59
  }
60
+ const label = features.length === 1 ? features[0] : `${features.length} features`;
61
+ log.header(`Adding ${label}`);
62
+ const configUpdates = features.map((f) => FEATURE_CONFIG_UPDATES[f]);
63
+ const combinedUpdate = Object.assign({}, ...configUpdates);
34
64
  const { configPath } = await loadConfigAsync(projectRoot);
35
65
  const resolvedConfigPath = configPath || join(projectRoot, "swoff.config.json");
36
66
  if (!configPath) {
37
- log.warn("No config found. Creating new config with feature...");
67
+ log.warn("No config found. Creating new config with features...");
38
68
  const newConfig = {
39
69
  ...defaultConfig,
40
70
  $schema: "https://swoff.netlify.app/schema/v1.json",
@@ -42,31 +72,49 @@ export async function addCommand(projectRoot, feature) {
42
72
  ...defaultConfig.features,
43
73
  serviceWorker: {
44
74
  ...defaultConfig.features.serviceWorker,
45
- version: {
46
- ...defaultConfig.features.serviceWorker.version,
47
- minSupportedVersion: "0.0.0",
48
- },
75
+ minSupportedVersion: "0.0.0",
49
76
  },
50
77
  crossTabSync: false,
51
78
  },
52
79
  };
53
- writeFileSync(resolvedConfigPath, JSON.stringify(newConfig, null, 2));
54
- log.success(`Created swoff.config.json with ${feature} feature`);
80
+ const raw = JSON.parse(JSON.stringify(newConfig));
81
+ const merged = mergeFeatureIntoRaw(raw, combinedUpdate);
82
+ writeFileSync(resolvedConfigPath, JSON.stringify(merged, null, 2));
83
+ log.success(`Created swoff.config.json with ${label}`);
55
84
  }
56
85
  else {
57
86
  const raw = JSON.parse(readFileSync(resolvedConfigPath, "utf8"));
58
- const objectFeatures = ["pwa", "serviceWorker", "auth"];
59
- const merged = { ...raw.features, ...configUpdate };
60
- for (const key of objectFeatures) {
61
- if (configUpdate[key] && raw.features?.[key]) {
62
- merged[key] = { ...raw.features[key], ...configUpdate[key] };
63
- }
87
+ const merged = mergeFeatureIntoRaw(raw, combinedUpdate);
88
+ writeFileSync(resolvedConfigPath, JSON.stringify(merged, null, 2));
89
+ log.success(`Updated swoff.config.json with ${label}`);
90
+ }
91
+ const ecosystemFeatures = features.filter((f) => f === "htmx" || f === "php");
92
+ for (const eco of ecosystemFeatures) {
93
+ copyEcosystemFiles(projectRoot, eco);
94
+ }
95
+ const coreFeatures = features.filter((f) => f !== "htmx" && f !== "php");
96
+ if (coreFeatures.length > 0) {
97
+ await generateCommand(projectRoot);
98
+ }
99
+ log.success(`${label} added successfully!`);
100
+ }
101
+ function copyEcosystemFiles(projectRoot, name) {
102
+ const src = join(templatesDir, name);
103
+ if (!existsSync(src)) {
104
+ log.warn(`No template files found for "${name}"`);
105
+ return;
106
+ }
107
+ const swoffDir = join(projectRoot, "swoff", name);
108
+ if (!existsSync(swoffDir)) {
109
+ mkdirSync(swoffDir, { recursive: true });
110
+ }
111
+ let count = 0;
112
+ for (const entry of readdirSync(src, { withFileTypes: true })) {
113
+ if (entry.isFile()) {
114
+ copyFileSync(join(src, entry.name), join(swoffDir, entry.name));
115
+ count++;
64
116
  }
65
- raw.features = merged;
66
- writeFileSync(resolvedConfigPath, JSON.stringify(raw, null, 2));
67
- log.success(`Updated swoff.config.json with ${feature} feature`);
68
117
  }
69
- await generateCommand(projectRoot);
70
- log.success(`${feature} feature added successfully!`);
118
+ log.success(`Copied ${count} ${name} file(s) to swoff/${name}/`);
71
119
  }
72
120
  //# sourceMappingURL=add.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/lib/commands/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/lib/commands/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { join } from "path";
2
+ import { log } from "../cli/logger.js";
3
+ import { loadConfigAsync } from "../config/loader.js";
4
+ import { generateAssets } from "../generators/asset-generator/generate.js";
5
+ import { printAssetGuide } from "../generators/asset-generator/guide.js";
6
+ export async function generateAssetsCommand(projectRoot, opts = {}) {
7
+ log.header("Generating PWA Assets");
8
+ const { config } = await loadConfigAsync(projectRoot);
9
+ const assets = config.features.pwa.assets;
10
+ const sourceArg = opts.source || (assets.source ? join(projectRoot, assets.source) : "");
11
+ if (!sourceArg) {
12
+ log.error("No source specified. Use --source <path> or configure pwa.assets.source in swoff.config.json");
13
+ log.help("Usage: swoff assets --source ./logo.svg");
14
+ process.exit(1);
15
+ }
16
+ const result = await generateAssets({
17
+ source: sourceArg,
18
+ outputDir: join(projectRoot, assets.outputDir),
19
+ appName: config.framework || "App",
20
+ themeColor: assets.themeColor,
21
+ bgColor: assets.bgColor,
22
+ appleSplash: !opts.noSplash,
23
+ });
24
+ log.success(`Generated ${result.files.length} PWA assets`);
25
+ if (result.warnings.length > 0) {
26
+ for (const w of result.warnings)
27
+ log.warn(w);
28
+ }
29
+ printAssetGuide({
30
+ appName: config.framework || "App",
31
+ themeColor: assets.themeColor,
32
+ bgColor: assets.bgColor,
33
+ outputDir: assets.outputDir,
34
+ hasSplash: !opts.noSplash,
35
+ });
36
+ }
37
+ //# sourceMappingURL=assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../../src/lib/commands/assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAOzE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,WAAmB,EAAE,OAAsB,EAAE;IACvF,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAEpC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;IAE1C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAEzF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,8FAA8F,CAAC,CAAC;QAC1G,GAAG,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;QAClC,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC;QAC9C,OAAO,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK;QAClC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,CAAC,IAAI,CAAC,QAAQ;KAC5B,CAAC,CAAC;IAEH,GAAG,CAAC,OAAO,CAAC,aAAa,MAAM,CAAC,KAAK,CAAC,MAAM,aAAa,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,eAAe,CAAC;QACd,OAAO,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK;QAClC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ;KAC1B,CAAC,CAAC;AACL,CAAC"}
@@ -1,44 +1,46 @@
1
- /**
2
- * clean command - removes Swoff trace from the project (swoff/, config, version info).
3
- */
4
1
  import { rmSync, existsSync } from "fs";
5
2
  import { join } from "path";
3
+ import { createInterface } from "readline";
6
4
  import { log } from "../cli/logger.js";
7
- import { loadConfigAsync } from "../config/loader.js";
8
- import { removeGeneratorFromBuildScript } from "../utils/build-script.js";
9
- export async function cleanCommand(projectRoot) {
10
- log.header("Removing Swoff");
11
- const { config, configPath } = await loadConfigAsync(projectRoot);
5
+ function ask(question) {
6
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
7
+ return new Promise((resolve) => {
8
+ rl.question(` ${question} `, (answer) => {
9
+ rl.close();
10
+ resolve(answer.trim());
11
+ });
12
+ });
13
+ }
14
+ export async function cleanCommand(projectRoot, options = {}) {
15
+ const swoffDir = join(projectRoot, "swoff");
12
16
  const configFiles = ["swoff.config.json", "swoff.config.js"];
13
- const outputDir = config?.build?.outputDir || "dist";
14
- let count = 0;
15
- if (removeGeneratorFromBuildScript(projectRoot)) {
16
- log.info("Removed SW generator from package.json build script");
17
- count++;
17
+ const existingConfig = configFiles.find((f) => existsSync(join(projectRoot, f)));
18
+ const hasSwoffDir = existsSync(swoffDir);
19
+ if (!hasSwoffDir && !existingConfig) {
20
+ log.info("No Swoff files found to remove.");
21
+ return;
18
22
  }
19
- const swoffDir = join(projectRoot, "swoff");
20
- if (existsSync(swoffDir)) {
23
+ log.header("Removing Swoff");
24
+ const targets = [];
25
+ if (hasSwoffDir)
26
+ targets.push("swoff/");
27
+ if (existingConfig)
28
+ targets.push(existingConfig);
29
+ if (!options.yes) {
30
+ const answer = await ask(`Remove ${targets.join(" and ")}? [y/N]`);
31
+ if (answer.toLowerCase() !== "y" && answer.toLowerCase() !== "yes") {
32
+ log.info("Aborted.");
33
+ return;
34
+ }
35
+ }
36
+ if (hasSwoffDir) {
21
37
  rmSync(swoffDir, { recursive: true, force: true });
22
38
  log.info("Removed swoff/");
23
- count++;
24
39
  }
25
- const existingConfig = configFiles.find((f) => existsSync(join(projectRoot, f)));
26
40
  if (existingConfig) {
27
41
  rmSync(join(projectRoot, existingConfig));
28
42
  log.info(`Removed ${existingConfig}`);
29
- count++;
30
- }
31
- const versionPath = join(projectRoot, outputDir, "version.json");
32
- if (existsSync(versionPath)) {
33
- rmSync(versionPath);
34
- log.info(`Removed ${outputDir}/version.json`);
35
- count++;
36
- }
37
- if (count === 0) {
38
- log.info("No Swoff files found to remove.");
39
- }
40
- else {
41
- log.success("Swoff has been removed from the project.");
42
43
  }
44
+ log.success("Swoff has been removed from the project.");
43
45
  }
44
46
  //# sourceMappingURL=clean.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../../src/lib/commands/clean.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAE1E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,WAAmB;IACpD,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE7B,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,MAAM,EAAE,KAAK,EAAE,SAAS,IAAI,MAAM,CAAC;IAErD,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,8BAA8B,CAAC,WAAW,CAAC,EAAE,CAAC;QAChD,GAAG,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QAChE,KAAK,EAAE,CAAC;IACV,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC3B,KAAK,EAAE,CAAC;IACV,CAAC;IAED,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;QAC1C,GAAG,CAAC,IAAI,CAAC,WAAW,cAAc,EAAE,CAAC,CAAC;QACtC,KAAK,EAAE,CAAC;IACV,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IACjE,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,WAAW,CAAC,CAAC;QACpB,GAAG,CAAC,IAAI,CAAC,WAAW,SAAS,eAAe,CAAC,CAAC;QAC9C,KAAK,EAAE,CAAC;IACV,CAAC;IAED,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../../src/lib/commands/clean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEvC,SAAS,GAAG,CAAC,QAAgB;IAC3B,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,KAAK,QAAQ,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE;YACvC,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,WAAmB,EACnB,UAAwB,EAAE;IAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;IAC7D,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5C,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CACjC,CAAC;IAEF,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,WAAW,IAAI,CAAC,cAAc,EAAE,CAAC;QACpC,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE7B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,WAAW;QAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,cAAc;QAAE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAEjD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;YACnE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;QAC1C,GAAG,CAAC,IAAI,CAAC,WAAW,cAAc,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { join } from "path";
2
+ import { log } from "../cli/logger.js";
3
+ import { loadConfigAsync } from "../config/loader.js";
4
+ import { generateAssets } from "../generators/asset-generator/generate.js";
5
+ import { printAssetGuide } from "../generators/asset-generator/guide.js";
6
+ export async function generateAssetsCommand(projectRoot, args) {
7
+ log.header("Generating PWA Assets");
8
+ const { config } = await loadConfigAsync(projectRoot);
9
+ const assets = config.features.pwa.assets;
10
+ const sourceArg = (() => {
11
+ const idx = args.indexOf("--source");
12
+ if (idx !== -1 && idx + 1 < args.length)
13
+ return args[idx + 1];
14
+ if (assets.source)
15
+ return join(projectRoot, assets.source);
16
+ return "";
17
+ })();
18
+ if (!sourceArg) {
19
+ log.error("No source specified. Use --source <path> or configure pwa.assets.source in swoff.config.json");
20
+ log.help("Usage: swoff generate-assets --source ./logo.svg");
21
+ process.exit(1);
22
+ }
23
+ const result = await generateAssets({
24
+ source: sourceArg,
25
+ outputDir: join(projectRoot, assets.outputDir),
26
+ appName: config.framework || "App",
27
+ themeColor: assets.themeColor,
28
+ bgColor: assets.bgColor,
29
+ appleSplash: !args.includes("--no-splash"),
30
+ });
31
+ log.success(`Generated ${result.files.length} PWA assets`);
32
+ if (result.warnings.length > 0) {
33
+ for (const w of result.warnings)
34
+ log.warn(w);
35
+ }
36
+ printAssetGuide({
37
+ appName: config.framework || "App",
38
+ themeColor: assets.themeColor,
39
+ bgColor: assets.bgColor,
40
+ outputDir: assets.outputDir,
41
+ hasSplash: !args.includes("--no-splash"),
42
+ });
43
+ }
44
+ //# sourceMappingURL=generate-assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-assets.js","sourceRoot":"","sources":["../../../src/lib/commands/generate-assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAEzE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,WAAmB,EAAE,IAAc;IAC7E,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAEpC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;IAE1C,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC9D,IAAI,MAAM,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3D,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,EAAE,CAAC;IAEL,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,8FAA8F,CAAC,CAAC;QAC1G,GAAG,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;QAClC,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC;QAC9C,OAAO,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK;QAClC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;KAC3C,CAAC,CAAC;IAEH,GAAG,CAAC,OAAO,CAAC,aAAa,MAAM,CAAC,KAAK,CAAC,MAAM,aAAa,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,eAAe,CAAC;QACd,OAAO,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK;QAClC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;KACzC,CAAC,CAAC;AACL,CAAC"}
@@ -13,7 +13,7 @@ export function generateGuide(ctx) {
13
13
  lines.push("");
14
14
  }
15
15
  lines.push(" Fetch wrapper for API calls:");
16
- lines.push(` import { fetchWithCache } from "./swoff/fetch-wrapper.${ext}";`);
16
+ lines.push(` import { fetchWithCache } from "./swoff/fetch/core.${ext}";`);
17
17
  lines.push(` const data = await fetchWithCache("/api/data").then(r => r.json());`);
18
18
  if (isReact) {
19
19
  lines.push("");
@@ -28,7 +28,7 @@ export function generateGuide(ctx) {
28
28
  lines.push("");
29
29
  lines.push(" ── PWA ──");
30
30
  lines.push(` Import in app entry:`);
31
- lines.push(` import { setupPwaInstall, isInstallable, promptInstall } from "./swoff/pwa/install.${ext}";`);
31
+ lines.push(` import { setupPwaInstall, isInstallable, promptInstall } from "./swoff/pwa/index.${ext}";`);
32
32
  lines.push(" setupPwaInstall();");
33
33
  lines.push("");
34
34
  lines.push(` Link manifest in index.html <head>:`);
@@ -51,7 +51,7 @@ export function generateGuide(ctx) {
51
51
  lines.push("");
52
52
  lines.push(" ── Mutation Queue ──");
53
53
  lines.push(` Import in mutation handlers:`);
54
- lines.push(` import { queueMutation, processMutationQueue, getPendingCount } from "./swoff/mutation-queue.${ext}";`);
54
+ lines.push(` import { queueMutation, processMutationQueue, getPendingCount } from "./swoff/offline/queue.${ext}";`);
55
55
  if (isReact) {
56
56
  lines.push("");
57
57
  lines.push(" React hook generated in swoff/hooks/useMutationQueue.tsx:");
@@ -74,7 +74,7 @@ export function generateGuide(ctx) {
74
74
  lines.push(' await setAuth({ token, expiresAt: Date.now() + 3600000 });');
75
75
  lines.push("");
76
76
  lines.push(` For authenticated API calls:`);
77
- lines.push(` import { fetchWithCache } from "./swoff/fetch-wrapper.${ext}";`);
77
+ lines.push(` import { fetchWithCache } from "./swoff/fetch/core.${ext}";`);
78
78
  lines.push(` const data = await fetchWithCache("/api/me", { auth: true }).then(r => r.json());`);
79
79
  if (config.features.auth.type === "bearer") {
80
80
  lines.push("");
@@ -94,7 +94,7 @@ export function generateGuide(ctx) {
94
94
  if (config.features.mutationQueue.enabled) {
95
95
  lines.push("");
96
96
  lines.push(" ⚠️ After auth re-login, drain queued mutations:");
97
- lines.push(` import { flushMutations } from "../swoff/mutation-queue.${ext}";`);
97
+ lines.push(` import { flushMutations } from "../swoff/offline/queue.${ext}";`);
98
98
  lines.push(" await setAuth({ token });");
99
99
  lines.push(" await flushMutations();");
100
100
  }
@@ -120,32 +120,25 @@ export function generateGuide(ctx) {
120
120
  lines.push(" }");
121
121
  }
122
122
  }
123
- if (config.features.tagInvalidation) {
124
- lines.push("");
125
- lines.push(" ── Tag Invalidation ──");
126
- lines.push(` Generate tags and invalidate after mutations:`);
127
- lines.push(` import { generateTags, invalidateUrl } from "./swoff/invalidation-tags.${ext}";`);
128
- lines.push("");
129
- lines.push(` // Tag reads`);
130
- lines.push(` const data = await fetchWithCache("/api/todos", { tags: generateTags("/api/todos") });`);
123
+ lines.push("");
124
+ lines.push(" ── Tag Invalidation ──");
125
+ lines.push(` Generate tags and invalidate after mutations:`);
126
+ lines.push(` import { generateTags, invalidateUrl } from "./swoff/cache/tags.${ext}";`);
127
+ lines.push("");
128
+ lines.push(` // Tag reads`);
129
+ lines.push(` const data = await fetchWithCache("/api/todos", { tags: generateTags("/api/todos") });`);
130
+ lines.push("");
131
+ lines.push(` // Invalidate after mutations`);
132
+ lines.push(' await invalidateUrl("/api/todos/42");');
133
+ if (isReact) {
131
134
  lines.push("");
132
- lines.push(` // Invalidate after mutations`);
133
- lines.push(' await invalidateUrl("/api/todos/42");');
134
- if (isReact) {
135
- lines.push("");
136
- lines.push(" React hook generated in swoff/hooks/useCacheInvalidation.tsx:");
137
- lines.push(` import { useCacheInvalidation } from "../swoff/hooks/useCacheInvalidation.${ext}x";`);
138
- lines.push("");
139
- lines.push(" function InvalidateButton() {");
140
- lines.push(' const { invalidateUrl } = useCacheInvalidation();');
141
- lines.push(' return <button onClick={() => invalidateUrl("/api/todos")}>Refresh</button>;');
142
- lines.push(" }");
143
- }
144
- }
145
- if (!config.features.tagInvalidation && config.features.crossTabSync) {
135
+ lines.push(" React hook generated in swoff/hooks/useCacheInvalidation.tsx:");
136
+ lines.push(` import { useCacheInvalidation } from "../swoff/hooks/useCacheInvalidation.${ext}x";`);
146
137
  lines.push("");
147
- lines.push(" ⚠️ crossTabSync requires tagInvalidation to be enabled.");
148
- lines.push(' Run: npx @swoff/cli add tag-invalidation');
138
+ lines.push(" function InvalidateButton() {");
139
+ lines.push(' const { invalidateUrl } = useCacheInvalidation();');
140
+ lines.push(' return <button onClick={() => invalidateUrl("/api/todos")}>Refresh</button>;');
141
+ lines.push(" }");
149
142
  }
150
143
  return lines;
151
144
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generate-guide.js","sourceRoot":"","sources":["../../../src/lib/commands/generate-guide.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-guide.js","sourceRoot":"","sources":["../../../src/lib/commands/generate-guide.ts"],"names":[],"mappings":"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"}