@swoff/cli 0.3.14 → 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 (119) hide show
  1. package/dist/index.js +2 -2
  2. package/dist/index.js.map +1 -1
  3. package/dist/lib/cli/help.js +3 -3
  4. package/dist/lib/cli/help.js.map +1 -1
  5. package/dist/lib/commands/clean.js +8 -17
  6. package/dist/lib/commands/clean.js.map +1 -1
  7. package/dist/lib/commands/generate.js +4 -3
  8. package/dist/lib/commands/generate.js.map +1 -1
  9. package/dist/lib/commands/init.js +233 -174
  10. package/dist/lib/commands/init.js.map +1 -1
  11. package/dist/lib/commands/validate.js.map +1 -1
  12. package/dist/lib/config/minimal-config.js +64 -0
  13. package/dist/lib/config/minimal-config.js.map +1 -0
  14. package/dist/lib/config/validator.js +18 -15
  15. package/dist/lib/config/validator.js.map +1 -1
  16. package/dist/lib/generators/file-generators/sw-generator-build.js +11 -5
  17. package/dist/lib/generators/file-generators/sw-generator-build.js.map +1 -1
  18. package/dist/lib/generators/sw-sections/activate-handler.js +4 -1
  19. package/dist/lib/generators/sw-sections/activate-handler.js.map +1 -1
  20. package/dist/lib/generators/sw-sections/assemble-sw.js +8 -4
  21. package/dist/lib/generators/sw-sections/assemble-sw.js.map +1 -1
  22. package/dist/lib/generators/sw-sections/background-precache.js +126 -0
  23. package/dist/lib/generators/sw-sections/background-precache.js.map +1 -0
  24. package/dist/lib/generators/sw-sections/default-template.js +6 -2
  25. package/dist/lib/generators/sw-sections/default-template.js.map +1 -1
  26. package/dist/lib/generators/sw-sections/fetch-handler.js +2 -2
  27. package/dist/lib/generators/sw-sections/fetch-handler.js.map +1 -1
  28. package/dist/lib/generators/sw-sections/install-handler.js +8 -7
  29. package/dist/lib/generators/sw-sections/install-handler.js.map +1 -1
  30. package/dist/lib/generators/sw-sections/message-handler.js +9 -0
  31. package/dist/lib/generators/sw-sections/message-handler.js.map +1 -1
  32. package/dist/lib/generators/sw-sections/shared.js +2 -0
  33. package/dist/lib/generators/sw-sections/shared.js.map +1 -1
  34. package/dist/lib/shared/config-types.js +17 -16
  35. package/dist/lib/shared/config-types.js.map +1 -1
  36. package/dist/runtime/client-injector.js +15 -0
  37. package/dist/runtime/client-injector.js.map +1 -1
  38. package/package.json +9 -3
  39. package/dist/lib/commands/add.js +0 -62
  40. package/dist/lib/commands/add.js.map +0 -1
  41. package/dist/lib/commands/assets.js +0 -45
  42. package/dist/lib/commands/assets.js.map +0 -1
  43. package/dist/lib/commands/generate-assets.js +0 -44
  44. package/dist/lib/commands/generate-assets.js.map +0 -1
  45. package/dist/lib/commands/info.js +0 -183
  46. package/dist/lib/commands/info.js.map +0 -1
  47. package/dist/lib/generators/asset-generator/dependency-resolver.js +0 -85
  48. package/dist/lib/generators/asset-generator/dependency-resolver.js.map +0 -1
  49. package/dist/lib/generators/asset-generator/generate.js +0 -111
  50. package/dist/lib/generators/asset-generator/generate.js.map +0 -1
  51. package/dist/lib/generators/asset-generator/guide.js +0 -43
  52. package/dist/lib/generators/asset-generator/guide.js.map +0 -1
  53. package/dist/lib/generators/asset-generator/html-patcher.js +0 -65
  54. package/dist/lib/generators/asset-generator/html-patcher.js.map +0 -1
  55. package/dist/lib/generators/asset-generator/ico-encoder.js +0 -29
  56. package/dist/lib/generators/asset-generator/ico-encoder.js.map +0 -1
  57. package/dist/lib/generators/asset-generator/manifest-patcher.js +0 -23
  58. package/dist/lib/generators/asset-generator/manifest-patcher.js.map +0 -1
  59. package/dist/lib/generators/asset-generator/maskable.js +0 -15
  60. package/dist/lib/generators/asset-generator/maskable.js.map +0 -1
  61. package/dist/lib/generators/asset-generator/rasterize.js +0 -32
  62. package/dist/lib/generators/asset-generator/rasterize.js.map +0 -1
  63. package/dist/lib/generators/asset-generator/sizes.js +0 -25
  64. package/dist/lib/generators/asset-generator/sizes.js.map +0 -1
  65. package/dist/lib/generators/file-generators/auth-fetch.js +0 -151
  66. package/dist/lib/generators/file-generators/auth-fetch.js.map +0 -1
  67. package/dist/lib/generators/file-generators/auth-user.js +0 -13
  68. package/dist/lib/generators/file-generators/auth-user.js.map +0 -1
  69. package/dist/lib/generators/file-generators/connectivity-manager.js +0 -12
  70. package/dist/lib/generators/file-generators/connectivity-manager.js.map +0 -1
  71. package/dist/lib/generators/file-generators/fetch-state.js +0 -6
  72. package/dist/lib/generators/file-generators/fetch-state.js.map +0 -1
  73. package/dist/lib/generators/file-generators/generate-hooks.js +0 -44
  74. package/dist/lib/generators/file-generators/generate-hooks.js.map +0 -1
  75. package/dist/lib/generators/file-generators/indexeddb.js +0 -74
  76. package/dist/lib/generators/file-generators/indexeddb.js.map +0 -1
  77. package/dist/lib/generators/file-generators/manifest.js +0 -46
  78. package/dist/lib/generators/file-generators/manifest.js.map +0 -1
  79. package/dist/lib/generators/file-generators/mutation-reconcile.js +0 -57
  80. package/dist/lib/generators/file-generators/mutation-reconcile.js.map +0 -1
  81. package/dist/lib/generators/file-generators/notification-generator.js +0 -6
  82. package/dist/lib/generators/file-generators/notification-generator.js.map +0 -1
  83. package/dist/lib/generators/file-generators/quick-readme.js +0 -21
  84. package/dist/lib/generators/file-generators/quick-readme.js.map +0 -1
  85. package/dist/lib/generators/file-generators/reconcile.js +0 -50
  86. package/dist/lib/generators/file-generators/reconcile.js.map +0 -1
  87. package/dist/lib/generators/file-generators/storage-generator.js +0 -6
  88. package/dist/lib/generators/file-generators/storage-generator.js.map +0 -1
  89. package/dist/lib/generators/file-generators/storage-notify.js +0 -6
  90. package/dist/lib/generators/file-generators/storage-notify.js.map +0 -1
  91. package/dist/lib/generators/file-generators/store.js +0 -86
  92. package/dist/lib/generators/file-generators/store.js.map +0 -1
  93. package/dist/lib/generators/file-generators/sw-push.js +0 -67
  94. package/dist/lib/generators/file-generators/sw-push.js.map +0 -1
  95. package/dist/lib/generators/file-generators/sw-version-gen.js +0 -32
  96. package/dist/lib/generators/file-generators/sw-version-gen.js.map +0 -1
  97. package/dist/lib/generators/sw-sections/glob-matcher-code.js.map +0 -1
  98. package/dist/lib/utils/build-script.js +0 -35
  99. package/dist/lib/utils/build-script.js.map +0 -1
  100. package/dist/lib/utils/tty-status.js +0 -21
  101. package/dist/lib/utils/tty-status.js.map +0 -1
  102. package/dist/runtime/auth-user.js +0 -154
  103. package/dist/runtime/auth-user.js.map +0 -1
  104. package/dist/runtime/connectivity-manager.js +0 -83
  105. package/dist/runtime/connectivity-manager.js.map +0 -1
  106. package/dist/runtime/fetch-state.js +0 -42
  107. package/dist/runtime/fetch-state.js.map +0 -1
  108. package/dist/runtime/notification.js +0 -65
  109. package/dist/runtime/notification.js.map +0 -1
  110. package/dist/runtime/pwa-index.js +0 -11
  111. package/dist/runtime/pwa-index.js.map +0 -1
  112. package/dist/runtime/pwa-injector.js +0 -15
  113. package/dist/runtime/pwa-injector.js.map +0 -1
  114. package/dist/runtime/pwa-install.js +0 -83
  115. package/dist/runtime/pwa-install.js.map +0 -1
  116. package/dist/runtime/sw-version.js +0 -13
  117. package/dist/runtime/sw-version.js.map +0 -1
  118. package/dist/swoff-nkdhhmw8. +0 -18
  119. package/dist/swoff.js +0 -5
package/dist/index.js CHANGED
@@ -25,10 +25,10 @@ const { values, positionals } = parseArgs({
25
25
  options: {
26
26
  version: { type: "boolean", short: "v" },
27
27
  help: { type: "boolean", short: "h" },
28
- framework: { type: "string" },
29
28
  language: { type: "string" },
30
29
  debug: { type: "boolean" },
31
30
  yes: { type: "boolean", short: "y" },
31
+ framework: { type: "string" },
32
32
  },
33
33
  allowPositionals: true,
34
34
  });
@@ -44,7 +44,7 @@ async function main() {
44
44
  }
45
45
  switch (command) {
46
46
  case "init": {
47
- await initCommand(projectRoot, values.framework);
47
+ await initCommand(projectRoot, !!values.yes, values.framework);
48
48
  break;
49
49
  }
50
50
  case "generate": {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACzC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAElC,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/E,OAAO,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;IACxC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3B,OAAO,EAAE;QACP,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;QACxC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;QACrC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC7B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC5B,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC1B,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;KACrC;IACD,gBAAgB,EAAE,IAAI;CACvB,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAE/B,KAAK,UAAU,IAAI;IACjB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5B,QAAQ,CAAC,OAAO,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACjD,MAAM;QACR,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,eAAe,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACzF,MAAM;QACR,CAAC;QACD,KAAK,UAAU;YACb,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;YACnC,MAAM;QACR,KAAK,OAAO;YACV,MAAM,YAAY,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YACvD,MAAM;QACR,KAAK,MAAM;YACT,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM;QACR;YACE,GAAG,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,9 @@ import { colors } from "./colors.js";
5
5
  import { log } from "./logger.js";
6
6
  export const commands = {
7
7
  init: {
8
- description: "Initialize Swoff in current directory",
9
- usage: "swoff init [--framework react-spa|nextjs|remix|tanstack-start-react|astro|nuxt|sveltekit|vue|svelte|vanilla]",
10
- examples: ["swoff init", "swoff init --framework react-spa"],
8
+ description: "Interactive wizard to create swoff.config.json",
9
+ usage: "swoff init [--yes|-y]",
10
+ examples: ["swoff init", "swoff init --yes"],
11
11
  },
12
12
  generate: {
13
13
  description: "Generate supporting files (swoff/)",
@@ -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,8GAA8G;QACrH,QAAQ,EAAE,CAAC,YAAY,EAAE,kCAAkC,CAAC;KAC7D;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,oCAAoC;QACjD,KAAK,EAAE,mCAAmC;QAC1C,QAAQ,EAAE,CAAC,gBAAgB,CAAC;KAC7B;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,4BAA4B;QACzC,KAAK,EAAE,gBAAgB;QACvB,QAAQ,EAAE,CAAC,gBAAgB,CAAC;KAC7B;IACD,KAAK,EAAE;QACL,WAAW,EAAE,gFAAgF;QAC7F,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
+ {"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,gDAAgD;QAC7D,KAAK,EAAE,uBAAuB;QAC9B,QAAQ,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC;KAC7C;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,oCAAoC;QACjD,KAAK,EAAE,mCAAmC;QAC1C,QAAQ,EAAE,CAAC,gBAAgB,CAAC;KAC7B;IACD,QAAQ,EAAE;QACR,WAAW,EAAE,4BAA4B;QACzC,KAAK,EAAE,gBAAgB;QACvB,QAAQ,EAAE,CAAC,gBAAgB,CAAC;KAC7B;IACD,KAAK,EAAE;QACL,WAAW,EAAE,gFAAgF;QAC7F,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,17 +1,7 @@
1
1
  import { rmSync, existsSync } from "fs";
2
2
  import { join } from "path";
3
- import { createInterface } from "readline";
4
- import { log } from "../cli/logger.js";
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 = {}) {
3
+ import { intro, outro, confirm, isCancel, log } from "@clack/prompts";
4
+ export async function cleanCommand(projectRoot, options) {
15
5
  const swoffDir = join(projectRoot, "swoff");
16
6
  const configFiles = ["swoff.config.json", "swoff.config.js"];
17
7
  const existingConfig = configFiles.find((f) => existsSync(join(projectRoot, f)));
@@ -20,10 +10,11 @@ export async function cleanCommand(projectRoot, options = {}) {
20
10
  log.info("No Swoff files found to remove.");
21
11
  return;
22
12
  }
23
- if (!options.yes) {
24
- const answer = await ask("Remove Swoff files? [y/N]");
25
- if (answer.toLowerCase() !== "y" && answer.toLowerCase() !== "yes") {
26
- log.info("Aborted.");
13
+ if (!options?.yes) {
14
+ intro("swoff clean");
15
+ const shouldRemove = await confirm({ message: "Really remove all swoff files?" });
16
+ if (isCancel(shouldRemove) || !shouldRemove) {
17
+ outro("Aborted.");
27
18
  return;
28
19
  }
29
20
  }
@@ -33,6 +24,6 @@ export async function cleanCommand(projectRoot, options = {}) {
33
24
  if (existingConfig) {
34
25
  rmSync(join(projectRoot, existingConfig));
35
26
  }
36
- log.success("Cleaned");
27
+ outro("Cleaned");
37
28
  }
38
29
  //# sourceMappingURL=clean.js.map
@@ -1 +1 @@
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,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACtD,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;IACrD,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACzB,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,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAEtE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,WAAmB,EAAE,OAA2B;IACjF,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,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjF,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,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;QAClB,KAAK,CAAC,aAAa,CAAC,CAAC;QACrB,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC,CAAC;QAClF,IAAI,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,KAAK,CAAC,UAAU,CAAC,CAAC;YAClB,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;IACrD,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,CAAC;AACnB,CAAC"}
@@ -47,7 +47,8 @@ export async function generateCommand(projectRoot, options = {}) {
47
47
  return;
48
48
  }
49
49
  log.success("Generation complete!");
50
- if (!config.build.precacheDirs || Object.keys(config.build.precacheDirs).length === 0) {
50
+ if (!config.build.precacheDirs ||
51
+ Object.keys(config.build.precacheDirs).length === 0) {
51
52
  log.normal("");
52
53
  log.warn("No directories configured for precaching. Only explicit fallback routes will be precached.");
53
54
  log.help(" Add precacheDirs to your swoff.config.json build section to precache assets:");
@@ -69,7 +70,7 @@ export async function generateCommand(projectRoot, options = {}) {
69
70
  log.normal(" Use { auth: true } in fetchWithCache for authenticated requests");
70
71
  }
71
72
  log.normal("");
72
- log.normal("1. After each build, run the SW generator:");
73
- log.normal(" node swoff/sw/generator.js (Add this to your build script if you want it automated)");
73
+ log.normal("After each build, run the SW generator:");
74
+ log.normal(" node swoff/sw/generator.js (Add this to your build script if you want it automated)");
74
75
  }
75
76
  //# sourceMappingURL=generate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/lib/commands/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/lib/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -1,213 +1,272 @@
1
- /**
2
- * init command - creates swoff.config.json.
3
- */
4
1
  import { writeFileSync, existsSync } from "fs";
5
2
  import { join } from "path";
6
- import { log } from "../cli/logger.js";
7
- import { defaultInitConfig, deepMerge, } from "../shared/config-types.js";
8
- import { detectFramework, } from "../utils/detect-framework.js";
3
+ import { intro, outro, text, confirm, select, isCancel, log } from "@clack/prompts";
4
+ import { detectFramework } from "../utils/detect-framework.js";
5
+ import { buildMinimalConfig } from "../config/minimal-config.js";
9
6
  const FRAMEWORK_PRESETS = {
10
7
  nextjs: {
11
- build: {
12
- outputDir: "public",
13
- },
14
- features: {
15
- serviceWorker: {
16
- strategy: {
17
- default: "network-first",
18
- patterns: {
19
- "/_next/static/*": "cache-first",
20
- },
21
- ignoreQueryParams: ["_rsc"],
22
- },
23
- navigation: {
24
- mode: "ssr",
25
- },
26
- },
27
- },
8
+ outputDir: "public",
9
+ navMode: "ssr",
10
+ defaultStrategy: "network-first",
11
+ patterns: { "/_next/static/*": "cache-first" },
12
+ ignoreQueryParams: ["_rsc"],
28
13
  },
29
14
  remix: {
30
- features: {
31
- serviceWorker: {
32
- strategy: {
33
- default: "network-first",
34
- ignoreQueryParams: ["_data"],
35
- },
36
- navigation: {
37
- mode: "ssr",
38
- },
39
- },
40
- },
15
+ navMode: "ssr",
16
+ defaultStrategy: "network-first",
17
+ ignoreQueryParams: ["_data"],
41
18
  },
42
19
  astro: {
43
- features: {
44
- serviceWorker: {
45
- navigation: {
46
- mode: "ssr",
47
- },
48
- },
49
- },
20
+ navMode: "ssr",
50
21
  },
51
22
  nuxt: {
52
- features: {
53
- serviceWorker: {
54
- strategy: {
55
- default: "network-first",
56
- },
57
- navigation: {
58
- mode: "ssr",
59
- },
60
- },
61
- },
23
+ navMode: "ssr",
24
+ defaultStrategy: "network-first",
62
25
  },
63
26
  sveltekit: {
64
- features: {
65
- serviceWorker: {
66
- strategy: {
67
- default: "network-first",
68
- },
69
- navigation: {
70
- mode: "ssr",
71
- },
72
- },
73
- },
27
+ navMode: "ssr",
28
+ defaultStrategy: "network-first",
74
29
  },
75
30
  "react-spa": {
76
- build: {
77
- outputDir: "dist",
78
- },
79
- features: {
80
- serviceWorker: {
81
- navigation: {
82
- mode: "spa",
83
- },
84
- },
85
- },
31
+ outputDir: "dist",
32
+ navMode: "spa",
86
33
  },
87
34
  "tanstack-start-react": {
88
- build: {
89
- outputDir: ".output/public",
90
- },
91
- features: {
92
- serviceWorker: {
93
- strategy: {
94
- default: "network-first",
95
- patterns: {
96
- "/_serverFn/*": "network-only",
97
- },
98
- },
99
- navigation: {
100
- mode: "ssr",
101
- },
102
- },
103
- },
35
+ outputDir: ".output/public",
36
+ navMode: "ssr",
37
+ defaultStrategy: "network-first",
38
+ patterns: { "/_serverFn/*": "network-only" },
104
39
  },
105
40
  laravel: {
106
- build: {
107
- outputDir: "public",
108
- },
109
- features: {
110
- serviceWorker: {
111
- navigation: {
112
- mode: "ssr",
113
- },
114
- strategy: {
115
- default: "network-first",
116
- },
117
- },
118
- },
41
+ outputDir: "public",
42
+ navMode: "ssr",
43
+ defaultStrategy: "network-first",
119
44
  },
120
45
  django: {
121
- build: {
122
- outputDir: "static",
123
- },
124
- features: {
125
- serviceWorker: {
126
- navigation: {
127
- mode: "ssr",
128
- },
129
- strategy: {
130
- default: "network-first",
131
- },
132
- },
133
- },
46
+ outputDir: "static",
47
+ navMode: "ssr",
48
+ defaultStrategy: "network-first",
134
49
  },
135
50
  flask: {
136
- build: {
137
- outputDir: "static",
138
- },
139
- features: {
140
- serviceWorker: {
141
- navigation: {
142
- mode: "ssr",
143
- },
144
- strategy: {
145
- default: "network-first",
146
- },
147
- },
148
- },
51
+ outputDir: "static",
52
+ navMode: "ssr",
53
+ defaultStrategy: "network-first",
149
54
  },
150
55
  rails: {
151
- build: {
152
- outputDir: "public",
153
- },
154
- features: {
155
- serviceWorker: {
156
- navigation: {
157
- mode: "ssr",
158
- },
159
- strategy: {
160
- default: "network-first",
161
- },
162
- },
163
- },
56
+ outputDir: "public",
57
+ navMode: "ssr",
58
+ defaultStrategy: "network-first",
164
59
  },
165
60
  go: {
166
- build: {
167
- outputDir: "static",
168
- },
169
- features: {
170
- serviceWorker: {
171
- navigation: {
172
- mode: "ssr",
173
- },
174
- strategy: {
175
- default: "network-first",
176
- },
177
- },
178
- },
61
+ outputDir: "static",
62
+ navMode: "ssr",
63
+ defaultStrategy: "network-first",
179
64
  },
180
65
  };
181
- export async function initCommand(projectRoot, framework) {
66
+ const STRATEGIES = [
67
+ { value: "cache-first", label: "Cache First" },
68
+ { value: "network-first", label: "Network First" },
69
+ { value: "stale-while-revalidate", label: "Stale While Revalidate" },
70
+ { value: "cache-only", label: "Cache Only" },
71
+ { value: "network-only", label: "Network Only" },
72
+ { value: "reactive", label: "Reactive" },
73
+ ];
74
+ const ALL_FRAMEWORKS = [
75
+ "nextjs", "remix", "tanstack-start-react", "astro", "nuxt",
76
+ "sveltekit", "react-spa", "vue", "svelte",
77
+ "laravel", "django", "flask", "rails", "go", "vanilla",
78
+ ];
79
+ export async function initCommand(projectRoot, yesMode, frameworkOverride) {
182
80
  const configFiles = ["swoff.config.json", "swoff.config.js"];
183
81
  const existingConfig = configFiles.find((f) => existsSync(join(projectRoot, f)));
184
82
  if (existingConfig) {
185
- log.warn(`Found existing ${existingConfig}. Skipping init.`);
186
- log.info("To reinitialize, delete the config file first.");
83
+ log.warn(`Found existing ${existingConfig}. Aborting.`);
84
+ log.info("Delete it first or run in a different directory.");
187
85
  return;
188
86
  }
189
- const detected = (framework || detectFramework(projectRoot));
87
+ const detected = frameworkOverride && ALL_FRAMEWORKS.includes(frameworkOverride)
88
+ ? frameworkOverride
89
+ : detectFramework(projectRoot);
90
+ if (frameworkOverride && detected === frameworkOverride) {
91
+ log.info(`Framework: ${detected} (override)`);
92
+ }
190
93
  const preset = FRAMEWORK_PRESETS[detected] || {};
191
- // Start with default config, deep-merge the preset
192
- const config = deepMerge({
193
- ...defaultInitConfig,
194
- framework: detected,
195
- }, preset);
196
- // Validate and adjust build output — ensure all build fields are present
197
- if (!config.build)
198
- config.build = defaultInitConfig.build;
199
- // Auto-populate precacheDirs from outputDir so users get directory precaching out of the box
200
- const cfgBuild = config.build;
201
- if (!cfgBuild.precacheDirs || Object.keys(cfgBuild.precacheDirs).length === 0) {
202
- cfgBuild.precacheDirs = { [cfgBuild.outputDir]: { prefix: "/" } };
94
+ if (yesMode) {
95
+ const answers = {
96
+ framework: detected,
97
+ outputDir: preset.outputDir || "dist",
98
+ swFilename: "sw",
99
+ navMode: preset.navMode || "default",
100
+ fallback: "/offline",
101
+ defaultStrategy: preset.defaultStrategy || "cache-first",
102
+ patterns: preset.patterns,
103
+ pwaEnabled: false,
104
+ authEnabled: false,
105
+ mutationEnabled: false,
106
+ tagInvalidationEnabled: false,
107
+ graphqlEnabled: false,
108
+ serverPushEnabled: false,
109
+ pushNotificationsEnabled: false,
110
+ precacheDir: preset.outputDir ? preset.outputDir : "dist",
111
+ precachePrefix: "/",
112
+ };
113
+ writeConfig(projectRoot, answers);
114
+ return;
115
+ }
116
+ intro("swoff configuration");
117
+ const framework = await select({
118
+ message: "Framework",
119
+ options: ALL_FRAMEWORKS.map((f) => ({
120
+ value: f,
121
+ label: f === detected ? `${f} (detected)` : f,
122
+ })),
123
+ initialValue: detected,
124
+ });
125
+ if (isCancel(framework))
126
+ process.exit(0);
127
+ const activePreset = FRAMEWORK_PRESETS[framework] || {};
128
+ const outputDir = await text({
129
+ message: "Output directory",
130
+ initialValue: activePreset.outputDir || "dist",
131
+ });
132
+ if (isCancel(outputDir))
133
+ process.exit(0);
134
+ const swFilename = await text({
135
+ message: "Service worker filename",
136
+ initialValue: "sw",
137
+ });
138
+ if (isCancel(swFilename))
139
+ process.exit(0);
140
+ const navMode = await select({
141
+ message: "Navigation mode",
142
+ options: [
143
+ { value: "spa", label: "SPA" },
144
+ { value: "ssr", label: "SSR" },
145
+ { value: "default", label: "Default" },
146
+ ],
147
+ initialValue: activePreset.navMode || "default",
148
+ });
149
+ if (isCancel(navMode))
150
+ process.exit(0);
151
+ const fallback = await text({
152
+ message: "Offline fallback path",
153
+ initialValue: "/offline",
154
+ });
155
+ if (isCancel(fallback))
156
+ process.exit(0);
157
+ const defaultStrategy = await select({
158
+ message: "Default caching strategy",
159
+ options: [...STRATEGIES],
160
+ initialValue: activePreset.defaultStrategy || "cache-first",
161
+ });
162
+ if (isCancel(defaultStrategy))
163
+ process.exit(0);
164
+ const pwaEnabled = await confirm({ message: "Enable PWA install prompt?", initialValue: false });
165
+ if (isCancel(pwaEnabled))
166
+ process.exit(0);
167
+ let authType;
168
+ const authEnabled = await confirm({ message: "Enable authentication?", initialValue: false });
169
+ if (isCancel(authEnabled))
170
+ process.exit(0);
171
+ if (authEnabled) {
172
+ authType = (await select({
173
+ message: "Authentication type",
174
+ options: [
175
+ { value: "cookie", label: "Cookie" },
176
+ { value: "bearer", label: "Bearer" },
177
+ { value: "custom", label: "Custom" },
178
+ ],
179
+ initialValue: "cookie",
180
+ }));
181
+ if (isCancel(authType))
182
+ process.exit(0);
183
+ }
184
+ const mutationEnabled = await confirm({ message: "Enable mutation queue (offline mutations)?", initialValue: false });
185
+ if (isCancel(mutationEnabled))
186
+ process.exit(0);
187
+ const tagInvalidationEnabled = await confirm({ message: "Enable tag invalidation?", initialValue: false });
188
+ if (isCancel(tagInvalidationEnabled))
189
+ process.exit(0);
190
+ const graphqlEnabled = await confirm({ message: "Enable GraphQL support?", initialValue: false });
191
+ if (isCancel(graphqlEnabled))
192
+ process.exit(0);
193
+ const serverPushEnabled = await confirm({ message: "Enable server push?", initialValue: false });
194
+ if (isCancel(serverPushEnabled))
195
+ process.exit(0);
196
+ const pushNotificationsEnabled = await confirm({ message: "Enable push notifications?", initialValue: false });
197
+ if (isCancel(pushNotificationsEnabled))
198
+ process.exit(0);
199
+ const precacheDir = await text({
200
+ message: "Directory to precache (leave empty to skip)",
201
+ initialValue: activePreset.outputDir || "dist",
202
+ });
203
+ if (isCancel(precacheDir))
204
+ process.exit(0);
205
+ let precachePrefix = "/";
206
+ if (precacheDir) {
207
+ precachePrefix = (await text({
208
+ message: "Precache URL prefix",
209
+ initialValue: "/",
210
+ }));
211
+ if (isCancel(precachePrefix))
212
+ process.exit(0);
203
213
  }
214
+ log.info("");
215
+ log.info("─".repeat(40));
216
+ log.info("Summary");
217
+ log.info(` Framework: ${framework}`);
218
+ log.info(` Output: ${outputDir}/${swFilename}.js`);
219
+ log.info(` Fallback: ${fallback}`);
220
+ log.info(` Navigation: ${navMode}`);
221
+ log.info(` Strategy: ${defaultStrategy}`);
222
+ if (pwaEnabled)
223
+ log.info(" PWA: enabled");
224
+ if (authEnabled)
225
+ log.info(` Auth: ${authType}`);
226
+ if (mutationEnabled)
227
+ log.info(" Mutation Q: enabled");
228
+ if (tagInvalidationEnabled)
229
+ log.info(" Tag Inval: enabled");
230
+ if (graphqlEnabled)
231
+ log.info(" GraphQL: enabled");
232
+ if (serverPushEnabled)
233
+ log.info(" Server Push: enabled");
234
+ if (pushNotificationsEnabled)
235
+ log.info(" Push Notif: enabled");
236
+ if (precacheDir)
237
+ log.info(` Precache: ${precacheDir} → ${precachePrefix}`);
238
+ log.info("─".repeat(40));
239
+ log.info("");
240
+ const write = await confirm({ message: "Write swoff.config.json?", initialValue: true });
241
+ if (isCancel(write) || !write) {
242
+ outro("Aborted.");
243
+ return;
244
+ }
245
+ const answers = {
246
+ framework: framework,
247
+ outputDir: outputDir,
248
+ swFilename: swFilename,
249
+ navMode: navMode,
250
+ fallback: fallback,
251
+ defaultStrategy: defaultStrategy,
252
+ patterns: activePreset.patterns,
253
+ pwaEnabled: pwaEnabled,
254
+ authEnabled: authEnabled,
255
+ authType,
256
+ mutationEnabled: mutationEnabled,
257
+ tagInvalidationEnabled: tagInvalidationEnabled,
258
+ graphqlEnabled: graphqlEnabled,
259
+ serverPushEnabled: serverPushEnabled,
260
+ pushNotificationsEnabled: pushNotificationsEnabled,
261
+ precacheDir: precacheDir,
262
+ precachePrefix: precachePrefix,
263
+ };
264
+ writeConfig(projectRoot, answers);
265
+ }
266
+ function writeConfig(projectRoot, answers) {
267
+ const config = buildMinimalConfig(answers);
204
268
  const configPath = join(projectRoot, "swoff.config.json");
205
269
  writeFileSync(configPath, JSON.stringify(config, null, 2));
206
- log.info("Created swoff.config.json");
207
- log.success("Swoff initialized successfully!");
208
- log.normal("\nNext steps:");
209
- log.help("1. Review swoff.config.json and customize as needed");
210
- log.help("2. Run: npx @swoff/cli generate");
211
- log.help("3. Read the docs: https://swoff.netlify.app/docs");
270
+ outro(`Config written to swoff.config.json (${Object.keys(config).length} top-level keys)`);
212
271
  }
213
272
  //# sourceMappingURL=init.js.map