@stacksjs/stx 0.2.94 → 0.2.96

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 (614) hide show
  1. package/dist/a11y.js +598 -2
  2. package/dist/analytics.js +159 -2
  3. package/dist/analyzer.js +240 -2
  4. package/dist/animation.js +688 -2
  5. package/dist/app-shell.js +220 -2
  6. package/dist/app.js +79 -2
  7. package/dist/assets.js +155 -2
  8. package/dist/ast.js +630 -2
  9. package/dist/async-components.js +428 -2
  10. package/dist/auth.js +12 -2
  11. package/dist/broadcasting.js +102 -2
  12. package/dist/browser-composables.js +565 -2
  13. package/dist/build-assets.js +29 -2
  14. package/dist/build-mode-detector.js +50 -2
  15. package/dist/build-optimizer.js +433 -2
  16. package/dist/build-views.js +180 -2
  17. package/dist/build.js +33 -2
  18. package/dist/builtins/drawer.js +37 -2
  19. package/dist/builtins/escape.js +3 -2
  20. package/dist/builtins/icon.js +83 -2
  21. package/dist/builtins/index.js +34 -2
  22. package/dist/builtins/modal.js +38 -2
  23. package/dist/builtins/safe-image.js +51 -2
  24. package/dist/builtins/stx-image.js +200 -2
  25. package/dist/builtins/stx-link.js +41 -2
  26. package/dist/builtins/stx-loading-indicator.js +35 -2
  27. package/dist/builtins/suspense.js +24 -2
  28. package/dist/builtins/toast.js +42 -2
  29. package/dist/builtins/tooltip.js +106 -2
  30. package/dist/builtins/transition-group.js +22 -2
  31. package/dist/bundle-analyzer/collector.js +233 -2
  32. package/dist/bundle-analyzer/index.js +82 -2
  33. package/dist/bundle-analyzer/report.js +318 -2
  34. package/dist/bundle-analyzer/treemap.js +594 -2
  35. package/dist/caching.js +131 -2
  36. package/dist/cli.js +11317 -10982
  37. package/dist/client/directive.js +14 -2
  38. package/dist/client/index.js +2 -2
  39. package/dist/client-helpers.js +312 -2
  40. package/dist/client-script-bundler.js +216 -6
  41. package/dist/client-script.js +754 -2
  42. package/dist/client.js +73 -4
  43. package/dist/component-hmr.js +585 -2
  44. package/dist/component-library.d.ts +6 -0
  45. package/dist/component-library.js +683 -0
  46. package/dist/component-processing.js +613 -2
  47. package/dist/component-registry.js +90 -2
  48. package/dist/component-renderer.js +660 -2
  49. package/dist/components.js +213 -2
  50. package/dist/composables/index.js +220 -2
  51. package/dist/composables/use-battery.js +101 -2
  52. package/dist/composables/use-broadcast-channel.js +80 -2
  53. package/dist/composables/use-channel.js +124 -2
  54. package/dist/composables/use-clipboard.js +79 -2
  55. package/dist/composables/use-color-mode.js +131 -2
  56. package/dist/composables/use-cookie.js +86 -2
  57. package/dist/composables/use-device-orientation.js +181 -2
  58. package/dist/composables/use-event-listener.js +27 -2
  59. package/dist/composables/use-event-source.js +166 -2
  60. package/dist/composables/use-eye-dropper.js +142 -2
  61. package/dist/composables/use-fetch.js +223 -2
  62. package/dist/composables/use-fullscreen.js +110 -2
  63. package/dist/composables/use-geolocation.js +101 -2
  64. package/dist/composables/use-idle.js +182 -2
  65. package/dist/composables/use-intersection-observer.js +168 -2
  66. package/dist/composables/use-keyboard.js +224 -2
  67. package/dist/composables/use-media-query.js +62 -2
  68. package/dist/composables/use-meta.js +48 -2
  69. package/dist/composables/use-mouse.js +286 -2
  70. package/dist/composables/use-mutation-observer.js +129 -2
  71. package/dist/composables/use-network.js +85 -2
  72. package/dist/composables/use-notification.js +94 -2
  73. package/dist/composables/use-permissions.js +132 -2
  74. package/dist/composables/use-query.js +0 -1
  75. package/dist/composables/use-resize-observer.js +157 -2
  76. package/dist/composables/use-router.js +51 -2
  77. package/dist/composables/use-share.js +104 -2
  78. package/dist/composables/use-speech.js +294 -2
  79. package/dist/composables/use-storage.js +130 -2
  80. package/dist/composables/use-text-selection.js +205 -4
  81. package/dist/composables/use-timer.js +183 -2
  82. package/dist/composables/use-utilities.js +176 -2
  83. package/dist/composables/use-wake-lock.js +122 -2
  84. package/dist/composables/use-websocket.js +165 -2
  85. package/dist/composables/use-window.js +163 -2
  86. package/dist/composables.js +552 -2
  87. package/dist/composition-api.js +190 -2
  88. package/dist/computed.js +376 -8
  89. package/dist/conditionals.js +599 -2
  90. package/dist/config.js +751 -2
  91. package/dist/craft-bridge.js +432 -2
  92. package/dist/craft-compiler.js +810 -2
  93. package/dist/craft-components.js +945 -2
  94. package/dist/craft-entry.js +5 -2
  95. package/dist/craft-ssr.js +559 -2
  96. package/dist/csp.js +220 -2
  97. package/dist/csrf.js +38 -2
  98. package/dist/custom-directives.js +136 -2
  99. package/dist/defer.js +156 -2
  100. package/dist/deploy/config-generators.js +214 -2
  101. package/dist/deploy/index.js +203 -2
  102. package/dist/deploy/netlify.js +167 -2
  103. package/dist/dev-server/crosswind.js +379 -2
  104. package/dist/dev-server/index.js +7 -2
  105. package/dist/dev-server/keyboard-shortcuts.js +81 -2
  106. package/dist/dev-server/native-window.js +91 -2
  107. package/dist/dev-server/port-utils.js +40 -2
  108. package/dist/dev-server/serve-app.js +682 -7
  109. package/dist/dev-server/serve-file.js +439 -7
  110. package/dist/dev-server/serve-markdown.js +281 -2
  111. package/dist/dev-server/serve-multi.js +424 -17
  112. package/dist/dev-server/terminal-colors.js +45 -2
  113. package/dist/dev-server/theme-selector.js +111 -2
  114. package/dist/dev-server/types.js +43 -2
  115. package/dist/dev-server.js +4 -2
  116. package/dist/devtools.js +462 -18
  117. package/dist/directive-api.js +355 -2
  118. package/dist/docs.js +567 -2
  119. package/dist/doctor.js +123 -2
  120. package/dist/document-shell.js +105 -2
  121. package/dist/dynamic-components.js +78 -2
  122. package/dist/edge-runtime.js +539 -2
  123. package/dist/env.js +9 -2
  124. package/dist/error-boundaries.js +62 -12
  125. package/dist/error-handling.js +1 -2
  126. package/dist/errors/codes.js +97 -2
  127. package/dist/errors/formatter.js +196 -2
  128. package/dist/errors/index.js +44 -2
  129. package/dist/errors/logger.js +250 -2
  130. package/dist/errors/sanitizer.js +181 -2
  131. package/dist/errors/types.js +86 -2
  132. package/dist/events.js +382 -2
  133. package/dist/expressions.js +650 -2
  134. package/dist/formatter.js +265 -2
  135. package/dist/forms-validation.js +510 -4
  136. package/dist/forms.js +709 -2
  137. package/dist/head.js +224 -2
  138. package/dist/heatmap.js +566 -2
  139. package/dist/hot-reload.js +367 -2
  140. package/dist/html-masking.js +73 -2
  141. package/dist/hydration-runtime.js +195 -2
  142. package/dist/hydration.js +654 -2
  143. package/dist/i18n.js +633 -2
  144. package/dist/image-optimization/auto-sibling.js +88 -2
  145. package/dist/image-optimization/build-plugin.js +241 -2
  146. package/dist/image-optimization/component.js +244 -2
  147. package/dist/image-optimization/directive.js +203 -2
  148. package/dist/image-optimization/index.js +54 -2
  149. package/dist/image-optimization/processor.js +262 -2
  150. package/dist/image-optimization/serve.js +102 -2
  151. package/dist/includes.js +733 -2
  152. package/dist/index.d.ts +1 -0
  153. package/dist/index.js +134 -2
  154. package/dist/init.js +505 -2
  155. package/dist/inline-assets.js +82 -2
  156. package/dist/interactive.js +383 -2
  157. package/dist/internal-markdown.js +141 -2
  158. package/dist/island-chunking.js +52 -2
  159. package/dist/js-ts.js +57 -2
  160. package/dist/jsx-runtime.js +289 -2
  161. package/dist/keep-alive.js +421 -2
  162. package/dist/lazy-loader.js +245 -2
  163. package/dist/loading-indicator.js +322 -2
  164. package/dist/loops.js +643 -2
  165. package/dist/manifest.js +31 -2
  166. package/dist/markdown.js +68 -2
  167. package/dist/media/client/blur-up.js +217 -2
  168. package/dist/media/client/index.js +53 -2
  169. package/dist/media/client/lazy-load.js +283 -2
  170. package/dist/media/client/upload-handler.js +354 -2
  171. package/dist/media/image/component.js +574 -2
  172. package/dist/media/image/directive.js +160 -2
  173. package/dist/media/image/editing.js +193 -2
  174. package/dist/media/image/index.js +80 -2
  175. package/dist/media/image/placeholder.js +188 -2
  176. package/dist/media/image/processor/cache.js +51 -2
  177. package/dist/media/image/processor/index.js +3 -2
  178. package/dist/media/image/processor/optimizer.js +202 -2
  179. package/dist/media/image/processor/responsive.js +162 -2
  180. package/dist/media/image/srcset.js +194 -2
  181. package/dist/media/index.js +198 -2
  182. package/dist/media/manager/embed.js +253 -2
  183. package/dist/media/protected/component.js +235 -2
  184. package/dist/media/protected/index.js +20 -2
  185. package/dist/media/protected/signature.js +205 -2
  186. package/dist/media/shared/cache.js +132 -2
  187. package/dist/media/shared/hash.js +35 -2
  188. package/dist/media/shared/index.js +2 -2
  189. package/dist/media/types.js +0 -1
  190. package/dist/media/upload/component.js +320 -2
  191. package/dist/media/upload/index.js +1 -2
  192. package/dist/media/video/directive.js +142 -2
  193. package/dist/media/video/index.js +583 -2
  194. package/dist/media/video/processor/cache.js +52 -2
  195. package/dist/media/video/processor/index.js +4 -2
  196. package/dist/media/video/processor/streaming.js +197 -2
  197. package/dist/media/video/processor/thumbnail.js +134 -2
  198. package/dist/media/video/processor/transcoder.js +283 -2
  199. package/dist/method-spoofing.js +17 -2
  200. package/dist/middleware.js +40 -2
  201. package/dist/misc-directives.js +222 -2
  202. package/dist/native-build.js +511 -2
  203. package/dist/parser/directive-parser.js +239 -2
  204. package/dist/parser/expression-parser.js +358 -2
  205. package/dist/parser/index.js +23 -2
  206. package/dist/parser/tokenizer.js +534 -2
  207. package/dist/partial-hydration.js +427 -2
  208. package/dist/performance-utils.js +430 -2
  209. package/dist/placeholder.js +35 -2
  210. package/dist/plugin-system.js +214 -2
  211. package/dist/plugin.js +173 -2
  212. package/dist/precompiler.js +660 -81
  213. package/dist/process.js +711 -2
  214. package/dist/production-build.js +596 -2
  215. package/dist/production-builder.js +132 -2
  216. package/dist/production-server.js +188 -2
  217. package/dist/props.js +224 -2
  218. package/dist/public-env.js +19 -2
  219. package/dist/pwa/audit.js +255 -2
  220. package/dist/pwa/directives.js +332 -2
  221. package/dist/pwa/icons.js +109 -2
  222. package/dist/pwa/index.js +47 -2
  223. package/dist/pwa/inject.js +102 -2
  224. package/dist/pwa/manifest.js +186 -2
  225. package/dist/pwa/offline.js +259 -2
  226. package/dist/pwa/precache.js +116 -2
  227. package/dist/pwa/service-worker.js +860 -2
  228. package/dist/pwa/workbox-strategies.js +167 -2
  229. package/dist/pwa/workbox.js +382 -2
  230. package/dist/pwa.js +427 -427
  231. package/dist/reactive-bindings.js +266 -2
  232. package/dist/reactive.js +569 -2
  233. package/dist/reactivity.js +559 -2
  234. package/dist/release.js +1 -2
  235. package/dist/render.js +165 -2
  236. package/dist/route-middleware.js +17 -2
  237. package/dist/router.js +9 -2
  238. package/dist/routes.js +14 -2
  239. package/dist/runtime-injection.js +120 -2
  240. package/dist/runtime.js +94 -2
  241. package/dist/safe-evaluator.js +444 -2
  242. package/dist/scaffolding.js +897 -2
  243. package/dist/screenshot.js +87 -2
  244. package/dist/script-classifier.js +32 -2
  245. package/dist/script-validation.js +158 -2
  246. package/dist/seo.js +457 -2
  247. package/dist/serve.js +237 -2
  248. package/dist/server-bindings.js +108 -2
  249. package/dist/server-components.js +338 -11
  250. package/dist/signal-processing.js +946 -2
  251. package/dist/signals-api.js +154 -2
  252. package/dist/signals.js +5287 -2
  253. package/dist/site-builder/build.js +224 -2
  254. package/dist/site-builder/i18n.js +140 -2
  255. package/dist/site-builder/index.js +15 -2
  256. package/dist/site-builder/robots.js +26 -2
  257. package/dist/site-builder/router.js +27 -2
  258. package/dist/site-builder/seo.js +36 -2
  259. package/dist/site-builder/sitemap.js +26 -2
  260. package/dist/site-builder/theme.js +33 -2
  261. package/dist/site-builder/types.js +0 -1
  262. package/dist/slots.js +201 -2
  263. package/dist/source-maps.js +350 -2
  264. package/dist/spa-shell.js +34 -2
  265. package/dist/ssg.js +389 -389
  266. package/dist/ssr.js +355 -2
  267. package/dist/state-management.js +533 -2
  268. package/dist/store-imports.js +13 -2
  269. package/dist/store-loader.js +72 -5
  270. package/dist/stores-client.js +132 -2
  271. package/dist/story/addons.js +261 -2
  272. package/dist/story/analytics.js +235 -2
  273. package/dist/story/auto-stories.js +158 -2
  274. package/dist/story/bookmarks.js +277 -2
  275. package/dist/story/bun-test.js +102 -2
  276. package/dist/story/cli.js +155 -2
  277. package/dist/story/collect/analyzer.js +305 -2
  278. package/dist/story/collect/index.js +27 -2
  279. package/dist/story/collect/parser.js +129 -2
  280. package/dist/story/collect/scanner.js +101 -2
  281. package/dist/story/collect/tree.js +110 -2
  282. package/dist/story/commands/build.js +172 -2
  283. package/dist/story/commands/dev.js +78 -2
  284. package/dist/story/commands/index.js +3 -2
  285. package/dist/story/commands/preview.js +56 -2
  286. package/dist/story/compiled-output.js +151 -2
  287. package/dist/story/composition.js +261 -2
  288. package/dist/story/config-watcher.js +67 -2
  289. package/dist/story/config.js +64 -2
  290. package/dist/story/context.js +27 -2
  291. package/dist/story/controls/index.js +320 -2
  292. package/dist/story/crosswind.js +189 -2
  293. package/dist/story/desktop-preview.js +105 -2
  294. package/dist/story/docs-generator.js +186 -2
  295. package/dist/story/errors.js +239 -2
  296. package/dist/story/figma-export.js +224 -2
  297. package/dist/story/generator.js +165 -2
  298. package/dist/story/hmr.js +131 -2
  299. package/dist/story/hot-swap.js +207 -2
  300. package/dist/story/index.js +49 -2
  301. package/dist/story/interactions.js +225 -2
  302. package/dist/story/keyboard-shortcuts.js +345 -2
  303. package/dist/story/output.js +153 -2
  304. package/dist/story/performance.js +252 -2
  305. package/dist/story/presets.js +289 -2
  306. package/dist/story/props-validation.js +215 -2
  307. package/dist/story/renderer.js +209 -2
  308. package/dist/story/search-index.js +106 -2
  309. package/dist/story/search.js +140 -2
  310. package/dist/story/server.js +965 -2
  311. package/dist/story/setup.js +78 -2
  312. package/dist/story/snapshots.js +170 -2
  313. package/dist/story/testing.js +163 -2
  314. package/dist/story/theme.js +170 -2
  315. package/dist/story/types.js +0 -2
  316. package/dist/story/ui/code-panel.js +175 -2
  317. package/dist/story/ui/controls-panel.js +168 -2
  318. package/dist/story/ui/index.js +4 -2
  319. package/dist/story/ui/navigation.js +250 -2
  320. package/dist/story/ui/preview.js +251 -2
  321. package/dist/story/visual-testing.js +247 -2
  322. package/dist/streaming.js +537 -2
  323. package/dist/strict-lint.js +288 -2
  324. package/dist/style-scoping.js +50 -2
  325. package/dist/suspense.js +398 -2
  326. package/dist/teleport.js +109 -2
  327. package/dist/template-compiler.js +63 -2
  328. package/dist/template-hydrator.js +82 -2
  329. package/dist/template-tag-balance.js +93 -2
  330. package/dist/testing.js +581 -2
  331. package/dist/transitions.js +443 -2
  332. package/dist/type-checker.js +581 -2
  333. package/dist/types/component-types.d.ts +54 -0
  334. package/dist/types/component-types.js +0 -1
  335. package/dist/types/config-types.js +0 -1
  336. package/dist/types/context-types.js +0 -1
  337. package/dist/types/csp-types.js +0 -1
  338. package/dist/types/directive-types.js +3 -2
  339. package/dist/types/index.d.ts +5 -0
  340. package/dist/types/index.js +1 -2
  341. package/dist/types/pwa-types.js +0 -1
  342. package/dist/types.js +1 -2
  343. package/dist/typescript-templates.js +386 -4
  344. package/dist/utils.js +942 -2
  345. package/dist/validator.js +171 -2
  346. package/dist/variable-extractor.js +1094 -2
  347. package/dist/view-composers.js +29 -2
  348. package/dist/virtual-scrolling.js +454 -2
  349. package/dist/visual-editor.js +688 -28
  350. package/dist/vue-template.js +475 -2
  351. package/dist/web-components/css-scoping.js +177 -2
  352. package/dist/web-components/index.js +13 -2
  353. package/dist/web-components/reactive-generator.js +121 -56
  354. package/dist/web-components.js +1447 -2
  355. package/dist/x-element.js +17 -5
  356. package/package.json +6 -7
  357. package/dist/chunk-03c26pjz.js +0 -3
  358. package/dist/chunk-04mvcmcr.js +0 -106
  359. package/dist/chunk-05hgyyqc.js +0 -4
  360. package/dist/chunk-095s3972.js +0 -99
  361. package/dist/chunk-0b9w2w1y.js +0 -1
  362. package/dist/chunk-0dz85jrp.js +0 -3
  363. package/dist/chunk-0g4gece6.js +0 -4
  364. package/dist/chunk-0jd0pndq.js +0 -3
  365. package/dist/chunk-0jkwrcwj.js +0 -3
  366. package/dist/chunk-0m9tdm7t.js +0 -71
  367. package/dist/chunk-0qakwen3.js +0 -1
  368. package/dist/chunk-0qnz93q2.js +0 -3
  369. package/dist/chunk-0tatqxj2.js +0 -57
  370. package/dist/chunk-0wdar532.js +0 -102
  371. package/dist/chunk-13yz561y.js +0 -3
  372. package/dist/chunk-174z0cd0.js +0 -3
  373. package/dist/chunk-1mmykse5.js +0 -81
  374. package/dist/chunk-1z2yq9em.js +0 -3
  375. package/dist/chunk-1z5nhbjt.js +0 -90
  376. package/dist/chunk-1zgsgk4b.js +0 -1
  377. package/dist/chunk-25s7bckb.js +0 -171
  378. package/dist/chunk-268adc7r.js +0 -2230
  379. package/dist/chunk-26r6zh3t.js +0 -194
  380. package/dist/chunk-2w3302dh.js +0 -3
  381. package/dist/chunk-2xen423s.js +0 -3
  382. package/dist/chunk-39gm08bn.js +0 -39
  383. package/dist/chunk-3bjtemm6.js +0 -128
  384. package/dist/chunk-3jm3snz8.js +0 -3
  385. package/dist/chunk-3ngm57nt.js +0 -12
  386. package/dist/chunk-3rh7va1z.js +0 -3
  387. package/dist/chunk-3yg9hbmb.js +0 -4
  388. package/dist/chunk-44hd3kab.js +0 -1
  389. package/dist/chunk-46mkpbkk.js +0 -12
  390. package/dist/chunk-48cw2nde.js +0 -2
  391. package/dist/chunk-48r3qe0k.js +0 -3
  392. package/dist/chunk-4aj7ftqb.js +0 -1
  393. package/dist/chunk-4bt81cg3.js +0 -61
  394. package/dist/chunk-4j188175.js +0 -3
  395. package/dist/chunk-4k7d8p8d.js +0 -188
  396. package/dist/chunk-4qq8ffke.js +0 -28
  397. package/dist/chunk-50vqeesm.js +0 -142
  398. package/dist/chunk-52agge4n.js +0 -38
  399. package/dist/chunk-55yp0q8t.js +0 -201
  400. package/dist/chunk-57p201gb.js +0 -83
  401. package/dist/chunk-5ggw1dyv.js +0 -3
  402. package/dist/chunk-5kt3ay7x.js +0 -10
  403. package/dist/chunk-5p568px4.js +0 -1166
  404. package/dist/chunk-5ppkfyn2.js +0 -3
  405. package/dist/chunk-5q87fgkk.js +0 -3
  406. package/dist/chunk-5qb761h2.js +0 -3
  407. package/dist/chunk-5xvbq2gs.js +0 -30
  408. package/dist/chunk-647849kf.js +0 -34
  409. package/dist/chunk-6b5k6w2q.js +0 -7
  410. package/dist/chunk-6cr3eeh4.js +0 -23
  411. package/dist/chunk-6djgb0hr.js +0 -3
  412. package/dist/chunk-6dqzky7x.js +0 -35
  413. package/dist/chunk-6e4c6g46.js +0 -3
  414. package/dist/chunk-6w03t7h6.js +0 -3
  415. package/dist/chunk-6wn85hn6.js +0 -4
  416. package/dist/chunk-6y4gqs1q.js +0 -169
  417. package/dist/chunk-75rndzbd.js +0 -6
  418. package/dist/chunk-77tga15w.js +0 -3
  419. package/dist/chunk-7a51hkpf.js +0 -3
  420. package/dist/chunk-7b0xdy5h.js +0 -386
  421. package/dist/chunk-7cgmq685.js +0 -33
  422. package/dist/chunk-7dy588as.js +0 -6
  423. package/dist/chunk-7rvh2wwv.js +0 -721
  424. package/dist/chunk-7sm05m0j.js +0 -351
  425. package/dist/chunk-7sqdeqsw.js +0 -1
  426. package/dist/chunk-7xcfy2fn.js +0 -4
  427. package/dist/chunk-82t27pvd.js +0 -5
  428. package/dist/chunk-87kx8byz.js +0 -1115
  429. package/dist/chunk-8fgwhhb8.js +0 -6
  430. package/dist/chunk-8qbax8xn.js +0 -347
  431. package/dist/chunk-91s2hres.js +0 -8
  432. package/dist/chunk-94g3cahw.js +0 -11
  433. package/dist/chunk-957amb71.js +0 -8
  434. package/dist/chunk-95w08s8v.js +0 -3
  435. package/dist/chunk-9agvhp1x.js +0 -93
  436. package/dist/chunk-9tmbrwwx.js +0 -219
  437. package/dist/chunk-9yz5d003.js +0 -51
  438. package/dist/chunk-a3hyn4we.js +0 -79
  439. package/dist/chunk-a69tvya5.js +0 -53
  440. package/dist/chunk-adjcg6wa.js +0 -498
  441. package/dist/chunk-adqh2m9z.js +0 -45
  442. package/dist/chunk-asarebzq.js +0 -292
  443. package/dist/chunk-aw3rp9ac.js +0 -24
  444. package/dist/chunk-b0cyc09a.js +0 -109
  445. package/dist/chunk-b3kkjcdh.js +0 -3
  446. package/dist/chunk-b3prs7y0.js +0 -5
  447. package/dist/chunk-b5zc9y0y.js +0 -90
  448. package/dist/chunk-baa7h4yz.js +0 -3
  449. package/dist/chunk-bgec9r1v.js +0 -5224
  450. package/dist/chunk-bjnjpsgn.js +0 -3
  451. package/dist/chunk-bk8ew8ze.js +0 -24
  452. package/dist/chunk-bn08k7yy.js +0 -3
  453. package/dist/chunk-bpgg59wa.js +0 -3
  454. package/dist/chunk-bwxda6n1.js +0 -3
  455. package/dist/chunk-bykjk6vj.js +0 -4
  456. package/dist/chunk-c53hyw5c.js +0 -477
  457. package/dist/chunk-c7jg8w13.js +0 -3
  458. package/dist/chunk-ca6qd1dx.js +0 -3
  459. package/dist/chunk-cdbwprfv.js +0 -6
  460. package/dist/chunk-ceg2c2q2.js +0 -11
  461. package/dist/chunk-cn409b69.js +0 -3
  462. package/dist/chunk-cn8az1b4.js +0 -1
  463. package/dist/chunk-cp3kwv17.js +0 -8
  464. package/dist/chunk-cpcc11vp.js +0 -5
  465. package/dist/chunk-cr3wbrcr.js +0 -10
  466. package/dist/chunk-cygfdk1n.js +0 -3
  467. package/dist/chunk-cyp4m0vh.js +0 -16
  468. package/dist/chunk-cz25azze.js +0 -4
  469. package/dist/chunk-d77yxcds.js +0 -3
  470. package/dist/chunk-dvfs1h3c.js +0 -117
  471. package/dist/chunk-dyjnn5k8.js +0 -262
  472. package/dist/chunk-dzw95th7.js +0 -3
  473. package/dist/chunk-e0zytzdh.js +0 -179
  474. package/dist/chunk-e53h9qhd.js +0 -84
  475. package/dist/chunk-eds0f8f1.js +0 -3
  476. package/dist/chunk-eh8hact1.js +0 -5
  477. package/dist/chunk-epj957jf.js +0 -4
  478. package/dist/chunk-eqeyaq6g.js +0 -77
  479. package/dist/chunk-fbxt2mrx.js +0 -5
  480. package/dist/chunk-fch9tk1k.js +0 -3
  481. package/dist/chunk-fe7r1mq1.js +0 -9
  482. package/dist/chunk-fhawx87n.js +0 -8
  483. package/dist/chunk-fk51yyrw.js +0 -3
  484. package/dist/chunk-fms20x0n.js +0 -21
  485. package/dist/chunk-fs0qezn5.js +0 -341
  486. package/dist/chunk-fzm3y0r3.js +0 -267
  487. package/dist/chunk-g2hekckm.js +0 -161
  488. package/dist/chunk-g4ps1dj8.js +0 -140
  489. package/dist/chunk-g8b81pzc.js +0 -3
  490. package/dist/chunk-ganag9dm.js +0 -3
  491. package/dist/chunk-gc84b1d2.js +0 -58
  492. package/dist/chunk-gcf5v18y.js +0 -60
  493. package/dist/chunk-ghrx0hn1.js +0 -4
  494. package/dist/chunk-gqpkp459.js +0 -3
  495. package/dist/chunk-h45py5w5.js +0 -2
  496. package/dist/chunk-h5wa62ek.js +0 -145
  497. package/dist/chunk-h82kjdr4.js +0 -83
  498. package/dist/chunk-haecq01c.js +0 -3
  499. package/dist/chunk-hepg894w.js +0 -3
  500. package/dist/chunk-hjdc99kb.js +0 -3
  501. package/dist/chunk-hje9v2zh.js +0 -3
  502. package/dist/chunk-hjv76kcw.js +0 -1
  503. package/dist/chunk-hke99a0v.js +0 -3
  504. package/dist/chunk-hpqr9e3x.js +0 -3
  505. package/dist/chunk-hq5cem49.js +0 -236
  506. package/dist/chunk-hrampcrj.js +0 -3
  507. package/dist/chunk-ht4j68cs.js +0 -3
  508. package/dist/chunk-hxx3za24.js +0 -62
  509. package/dist/chunk-j4s5qwd7.js +0 -4
  510. package/dist/chunk-jbejwejg.js +0 -8
  511. package/dist/chunk-jc0fc4ht.js +0 -11
  512. package/dist/chunk-jcs0ymw7.js +0 -3
  513. package/dist/chunk-jfm69keq.js +0 -231
  514. package/dist/chunk-jfrn43vh.js +0 -2
  515. package/dist/chunk-jjamhxpm.js +0 -139
  516. package/dist/chunk-jjvp4t5w.js +0 -27
  517. package/dist/chunk-jt44av4j.js +0 -3
  518. package/dist/chunk-jt98jhpt.js +0 -10
  519. package/dist/chunk-k8440jxh.js +0 -6
  520. package/dist/chunk-kdxa9epn.js +0 -21
  521. package/dist/chunk-kfd2hf6f.js +0 -3
  522. package/dist/chunk-kgym7ch9.js +0 -8
  523. package/dist/chunk-kh6rfz2v.js +0 -4
  524. package/dist/chunk-kkp6rs2n.js +0 -36
  525. package/dist/chunk-ktkmvaa8.js +0 -1
  526. package/dist/chunk-m59y310j.js +0 -3
  527. package/dist/chunk-mgmyr1b9.js +0 -6
  528. package/dist/chunk-mqwbpamc.js +0 -3
  529. package/dist/chunk-mrehzhxv.js +0 -5
  530. package/dist/chunk-mv03qb75.js +0 -3
  531. package/dist/chunk-mv4fb50w.js +0 -1
  532. package/dist/chunk-mwbng54r.js +0 -2
  533. package/dist/chunk-n46a5g1g.js +0 -3
  534. package/dist/chunk-n944baxp.js +0 -3
  535. package/dist/chunk-nanw7yhz.js +0 -14
  536. package/dist/chunk-nap11ntr.js +0 -21
  537. package/dist/chunk-ncnfa8ae.js +0 -29
  538. package/dist/chunk-ngxfwzq3.js +0 -3
  539. package/dist/chunk-nvwb4x04.js +0 -3
  540. package/dist/chunk-nw34xajc.js +0 -8
  541. package/dist/chunk-payfb24w.js +0 -207
  542. package/dist/chunk-pc31m5x5.js +0 -398
  543. package/dist/chunk-pg1fvqb9.js +0 -167
  544. package/dist/chunk-q60knhjf.js +0 -3
  545. package/dist/chunk-q6h6yvzb.js +0 -10
  546. package/dist/chunk-qd5461tt.js +0 -3
  547. package/dist/chunk-qdc3aav1.js +0 -3
  548. package/dist/chunk-qfwzdffx.js +0 -3
  549. package/dist/chunk-qgxwmagw.js +0 -134
  550. package/dist/chunk-qhdtssn1.js +0 -19
  551. package/dist/chunk-qk584whs.js +0 -3
  552. package/dist/chunk-qm4yppj5.js +0 -57
  553. package/dist/chunk-qwyd9a1d.js +0 -2
  554. package/dist/chunk-qxs6et76.js +0 -196
  555. package/dist/chunk-rb1e4cnb.js +0 -3
  556. package/dist/chunk-rh80q1nd.js +0 -1
  557. package/dist/chunk-rkffm9sy.js +0 -128
  558. package/dist/chunk-rv002yn0.js +0 -14
  559. package/dist/chunk-s6ja2bdg.js +0 -66
  560. package/dist/chunk-sjagg9qz.js +0 -66
  561. package/dist/chunk-sn07azv3.js +0 -3
  562. package/dist/chunk-svahbw0w.js +0 -12
  563. package/dist/chunk-svhtdb0s.js +0 -6
  564. package/dist/chunk-t37dp99j.js +0 -3
  565. package/dist/chunk-tj6zfxeb.js +0 -64
  566. package/dist/chunk-tmgz5t2g.js +0 -3
  567. package/dist/chunk-tr0z0e1g.js +0 -3
  568. package/dist/chunk-tx6br9r4.js +0 -274
  569. package/dist/chunk-v97390pe.js +0 -1
  570. package/dist/chunk-vcr5pzpx.js +0 -233
  571. package/dist/chunk-vdfwv0fp.js +0 -6
  572. package/dist/chunk-vp2395eb.js +0 -3
  573. package/dist/chunk-vpe6napb.js +0 -28
  574. package/dist/chunk-vv9wfz1c.js +0 -12
  575. package/dist/chunk-vw6ejgmy.js +0 -21
  576. package/dist/chunk-vx22he47.js +0 -1
  577. package/dist/chunk-w01y57f5.js +0 -1539
  578. package/dist/chunk-w21mwxdd.js +0 -4
  579. package/dist/chunk-w4n8fqp7.js +0 -216
  580. package/dist/chunk-w959hm8j.js +0 -358
  581. package/dist/chunk-wf7zrjsw.js +0 -138
  582. package/dist/chunk-wk07pwtd.js +0 -321
  583. package/dist/chunk-wvef3ngh.js +0 -127
  584. package/dist/chunk-wxvyj65q.js +0 -2
  585. package/dist/chunk-x1hjv24z.js +0 -11
  586. package/dist/chunk-x39sfpvm.js +0 -302
  587. package/dist/chunk-x4fze3q2.js +0 -314
  588. package/dist/chunk-x64kb787.js +0 -15
  589. package/dist/chunk-xcb0pbr6.js +0 -4
  590. package/dist/chunk-xhkjhxsp.js +0 -3
  591. package/dist/chunk-xhnpsngj.js +0 -5
  592. package/dist/chunk-xsqbk4yk.js +0 -3
  593. package/dist/chunk-xygc53vr.js +0 -68
  594. package/dist/chunk-y0qg6rrv.js +0 -3
  595. package/dist/chunk-y25pr13j.js +0 -19
  596. package/dist/chunk-y4c744dk.js +0 -3
  597. package/dist/chunk-y4md9hp0.js +0 -3
  598. package/dist/chunk-y5wazw6j.js +0 -7
  599. package/dist/chunk-y5xz0jc4.js +0 -141
  600. package/dist/chunk-y86m1wr4.js +0 -4
  601. package/dist/chunk-yaan98dd.js +0 -3
  602. package/dist/chunk-yach037f.js +0 -32
  603. package/dist/chunk-yexjrg9d.js +0 -7
  604. package/dist/chunk-ygvyc6wv.js +0 -90
  605. package/dist/chunk-yj560gp8.js +0 -8
  606. package/dist/chunk-yn38c15w.js +0 -4
  607. package/dist/chunk-yr1gdceh.js +0 -3
  608. package/dist/chunk-yw2fzq86.js +0 -3
  609. package/dist/chunk-ywkrxp2h.js +0 -147
  610. package/dist/chunk-z37xq5rx.js +0 -3
  611. package/dist/chunk-z4djtgt0.js +0 -71
  612. package/dist/chunk-z8cjr9n9.js +0 -7
  613. package/dist/chunk-znxp3zha.js +0 -71
  614. package/dist/chunk-zt2yag10.js +0 -429
@@ -1,1115 +0,0 @@
1
- // @bun
2
- import{Xe as P,bf as v,df as d}from"./chunk-vw6ejgmy.js";import{jf as Z,kf as _,lf as E,mf as G}from"./chunk-75rndzbd.js";import{oB as z,pB as A,qB as R}from"./chunk-3jm3snz8.js";var H={};A(H,{isWorkboxEnabled:()=>V,getServiceWorkerFileName:()=>m,generateServiceWorkerAuto:()=>y,generateServiceWorker:()=>U});function U(j,F){let q=j.pwa;if(!q?.enabled)return"";let B=q.serviceWorker||{},X=q.routes||[],L=B.cacheVersion||"1.0.0",O=q.offline,Y=O?.page?"/offline.html":"/offline.html",Q=q.push,K=q.backgroundSync,T=q.cacheStorage,$=F?Z(F,j):null,W=$?_($):"[]",b=["/","/manifest.json",...O?.enabled?[Y]:[],...O?.precacheAssets||[]];return`/**
3
- * Service Worker - Auto-generated by stx
4
- * Cache Version: ${L}
5
- *
6
- * This service worker implements configurable caching strategies:
7
- * - cache-first: Serve from cache, fall back to network
8
- * - network-first: Try network, fall back to cache
9
- * - stale-while-revalidate: Serve cached, update in background
10
- * - network-only: Always fetch from network
11
- * - cache-only: Only serve from cache
12
- *
13
- * Additional features:
14
- * - Push notifications: ${Q?.enabled?"enabled":"disabled"}
15
- * - Background sync: ${K?.enabled?"enabled":"disabled"}
16
- * - Cache limits: ${T?.maxSize?`${E(T.maxSize*1024*1024)}`:"unlimited"}
17
- */
18
-
19
- const CACHE_VERSION = '${L}';
20
- const CACHE_NAME = 'stx-pwa-v' + CACHE_VERSION;
21
- const OFFLINE_PAGE = '${Y}';
22
-
23
- // Assets to precache on install
24
- const PRECACHE_ASSETS = ${JSON.stringify(b,null,2)};
25
-
26
- // Auto-generated precache manifest from build output
27
- const BUILD_PRECACHE_MANIFEST = ${W};
28
-
29
- // Route caching strategies
30
- const ROUTE_STRATEGIES = ${JSON.stringify(X,null,2)};
31
-
32
- // Routes to exclude from caching
33
- const EXCLUDED_ROUTES = ${JSON.stringify(B.excludeRoutes||[],null,2)};
34
-
35
- // Cache storage configuration
36
- const CACHE_CONFIG = {
37
- maxSize: ${T?.maxSize||0} * 1024 * 1024, // Convert MB to bytes
38
- maxAge: ${T?.maxAge||0} * 24 * 60 * 60 * 1000, // Convert days to ms
39
- maxEntries: ${T?.maxEntries||0},
40
- purgeStrategy: '${T?.purgeStrategy||"lru"}',
41
- };
42
-
43
- // Background sync configuration
44
- const SYNC_CONFIG = {
45
- enabled: ${K?.enabled||!1},
46
- queueName: '${K?.queueName||"stx-sync-queue"}',
47
- maxRetries: ${K?.maxRetries||3},
48
- minInterval: ${K?.minInterval||1000},
49
- };
50
-
51
- // Push notification configuration
52
- const PUSH_CONFIG = {
53
- enabled: ${Q?.enabled||!1},
54
- defaultIcon: '${Q?.defaultIcon||"/pwa-icons/icon-192x192.png"}',
55
- defaultBadge: '${Q?.defaultBadge||"/pwa-icons/icon-72x72.png"}',
56
- };
57
-
58
- /**
59
- * Install event - precache essential assets
60
- */
61
- self.addEventListener('install', (event) => {
62
- console.log('[SW] Installing service worker...');
63
- ${B.skipWaiting?"self.skipWaiting();":""}
64
-
65
- event.waitUntil(
66
- caches.open(CACHE_NAME).then(async (cache) => {
67
- // Combine manual precache assets with auto-generated manifest
68
- const allAssets = [...PRECACHE_ASSETS];
69
-
70
- // Add build precache manifest entries
71
- for (const entry of BUILD_PRECACHE_MANIFEST) {
72
- if (!allAssets.includes(entry.url)) {
73
- allAssets.push(entry.url);
74
- }
75
- }
76
-
77
- console.log('[SW] Precaching assets:', allAssets.length);
78
-
79
- // Cache assets one by one to handle failures gracefully
80
- const results = await Promise.allSettled(
81
- allAssets.map(async (url) => {
82
- try {
83
- const response = await fetch(url);
84
- if (response.ok) {
85
- await cache.put(url, response);
86
- return { url, success: true };
87
- }
88
- return { url, success: false, reason: response.status };
89
- }
90
- catch (error) {
91
- return { url, success: false, reason: error.message };
92
- }
93
- })
94
- );
95
-
96
- const failed = results.filter(r => r.status === 'rejected' || (r.status === 'fulfilled' && !r.value.success));
97
- if (failed.length > 0) {
98
- console.warn('[SW] Failed to precache some assets:', failed.length);
99
- }
100
- })
101
- );
102
- });
103
-
104
- /**
105
- * Activate event - clean up old caches
106
- */
107
- self.addEventListener('activate', (event) => {
108
- console.log('[SW] Activating service worker...');
109
- ${B.clientsClaim?"self.clients.claim();":""}
110
-
111
- event.waitUntil(
112
- (async () => {
113
- // Clean up old caches
114
- const cacheNames = await caches.keys();
115
- await Promise.all(
116
- cacheNames
117
- .filter((name) => name.startsWith('stx-pwa-') && name !== CACHE_NAME)
118
- .map((name) => {
119
- console.log('[SW] Deleting old cache:', name);
120
- return caches.delete(name);
121
- })
122
- );
123
-
124
- // Enforce cache storage limits
125
- if (CACHE_CONFIG.maxSize > 0 || CACHE_CONFIG.maxEntries > 0) {
126
- await enforceCacheLimits();
127
- }
128
- })()
129
- );
130
- });
131
-
132
- /**
133
- * Fetch event - apply caching strategies
134
- */
135
- self.addEventListener('fetch', (event) => {
136
- const { request } = event;
137
- const url = new URL(request.url);
138
-
139
- // Only handle GET requests
140
- if (request.method !== 'GET') {
141
- return;
142
- }
143
-
144
- // Skip cross-origin requests
145
- if (url.origin !== location.origin) {
146
- return;
147
- }
148
-
149
- // Skip excluded routes
150
- if (isExcludedRoute(url.pathname)) {
151
- return;
152
- }
153
-
154
- // Find matching strategy and apply
155
- const routeConfig = getRouteConfig(url.pathname);
156
- event.respondWith(applyStrategy(request, routeConfig));
157
- });
158
-
159
- /**
160
- * Message event - handle messages from main thread
161
- */
162
- self.addEventListener('message', (event) => {
163
- const { type, payload } = event.data || {};
164
-
165
- switch (type) {
166
- case 'SKIP_WAITING':
167
- console.log('[SW] Received SKIP_WAITING message');
168
- self.skipWaiting();
169
- break;
170
-
171
- case 'CACHE_URLS':
172
- if (Array.isArray(payload)) {
173
- event.waitUntil(
174
- caches.open(CACHE_NAME).then((cache) => cache.addAll(payload))
175
- );
176
- }
177
- break;
178
-
179
- case 'CLEAR_CACHE':
180
- event.waitUntil(
181
- caches.keys().then((names) =>
182
- Promise.all(names.map((name) => caches.delete(name)))
183
- )
184
- );
185
- break;
186
-
187
- case 'GET_CACHE_SIZE':
188
- event.waitUntil(
189
- getCacheSize().then((size) => {
190
- event.source?.postMessage({ type: 'CACHE_SIZE', payload: size });
191
- })
192
- );
193
- break;
194
- }
195
- });
196
-
197
- ${Q?.enabled?D():"// Push notifications disabled"}
198
-
199
- ${K?.enabled?k():"// Background sync disabled"}
200
-
201
- /**
202
- * Check if a route should be excluded from caching
203
- */
204
- function isExcludedRoute(pathname) {
205
- return EXCLUDED_ROUTES.some((pattern) => matchPattern(pathname, pattern));
206
- }
207
-
208
- /**
209
- * Match a path against a glob pattern
210
- * Supports: *.ext, /path/*, /path/**, exact matches
211
- */
212
- function matchPattern(path, pattern) {
213
- // Handle file extension patterns like *.js, *.css
214
- if (pattern.startsWith('*.')) {
215
- return path.endsWith(pattern.slice(1));
216
- }
217
-
218
- // Handle patterns ending with /**
219
- if (pattern.endsWith('/**')) {
220
- const prefix = pattern.slice(0, -3);
221
- return path.startsWith(prefix);
222
- }
223
-
224
- // Handle patterns ending with /*
225
- if (pattern.endsWith('/*')) {
226
- const prefix = pattern.slice(0, -2);
227
- if (!path.startsWith(prefix)) return false;
228
- const rest = path.slice(prefix.length);
229
- return rest.length > 0 && !rest.slice(1).includes('/');
230
- }
231
-
232
- // Handle patterns with * in the middle
233
- if (pattern.includes('*')) {
234
- const parts = pattern.split('*');
235
- if (parts.length === 2) {
236
- return path.startsWith(parts[0]) && path.endsWith(parts[1]);
237
- }
238
- }
239
-
240
- // Exact match
241
- return path === pattern;
242
- }
243
-
244
- /**
245
- * Get the cache configuration for a given path
246
- */
247
- function getRouteConfig(pathname) {
248
- for (const route of ROUTE_STRATEGIES) {
249
- if (matchPattern(pathname, route.pattern)) {
250
- return route;
251
- }
252
- }
253
- // Default to network-first for unmatched routes
254
- return { strategy: 'network-first' };
255
- }
256
-
257
- /**
258
- * Apply the appropriate caching strategy
259
- */
260
- async function applyStrategy(request, routeConfig) {
261
- const { strategy, cacheName, maxAgeSeconds, maxEntries } = routeConfig;
262
- const cache = await caches.open(cacheName || CACHE_NAME);
263
-
264
- switch (strategy) {
265
- case 'cache-first':
266
- return cacheFirst(request, cache, maxAgeSeconds);
267
-
268
- case 'network-first':
269
- return networkFirst(request, cache);
270
-
271
- case 'stale-while-revalidate':
272
- return staleWhileRevalidate(request, cache);
273
-
274
- case 'network-only':
275
- return networkOnly(request);
276
-
277
- case 'cache-only':
278
- return cacheOnly(request, cache);
279
-
280
- default:
281
- return networkFirst(request, cache);
282
- }
283
- }
284
-
285
- /**
286
- * Cache-first strategy
287
- * Serve from cache if available, otherwise fetch from network
288
- */
289
- async function cacheFirst(request, cache, maxAge) {
290
- const cached = await cache.match(request);
291
-
292
- if (cached) {
293
- // Check if cache is still valid (if maxAge is set)
294
- if (maxAge) {
295
- const cachedDate = cached.headers.get('sw-cache-date');
296
- if (cachedDate) {
297
- const age = (Date.now() - new Date(cachedDate).getTime()) / 1000;
298
- if (age > maxAge) {
299
- // Cache expired, fetch fresh
300
- return fetchAndCache(request, cache);
301
- }
302
- }
303
- }
304
- return cached;
305
- }
306
-
307
- return fetchAndCache(request, cache);
308
- }
309
-
310
- /**
311
- * Network-first strategy
312
- * Try network first, fall back to cache if offline
313
- */
314
- async function networkFirst(request, cache) {
315
- try {
316
- const response = await fetch(request);
317
- if (response.ok) {
318
- const cloned = response.clone();
319
- cache.put(request, cloned);
320
- }
321
- return response;
322
- }
323
- catch (error) {
324
- const cached = await cache.match(request);
325
- if (cached) {
326
- return cached;
327
- }
328
- return offlineResponse(request);
329
- }
330
- }
331
-
332
- /**
333
- * Stale-while-revalidate strategy
334
- * Serve cached immediately, update cache in background
335
- */
336
- async function staleWhileRevalidate(request, cache) {
337
- const cached = await cache.match(request);
338
-
339
- // Fetch in background to update cache
340
- const fetchPromise = fetch(request)
341
- .then((response) => {
342
- if (response.ok) {
343
- cache.put(request, response.clone());
344
- }
345
- return response;
346
- })
347
- .catch(() => null);
348
-
349
- // Return cached immediately if available, otherwise wait for fetch
350
- if (cached) {
351
- return cached;
352
- }
353
-
354
- const response = await fetchPromise;
355
- return response || offlineResponse(request);
356
- }
357
-
358
- /**
359
- * Network-only strategy
360
- * Always fetch from network, no caching
361
- */
362
- async function networkOnly(request) {
363
- try {
364
- return await fetch(request);
365
- }
366
- catch (error) {
367
- return offlineResponse(request);
368
- }
369
- }
370
-
371
- /**
372
- * Cache-only strategy
373
- * Only serve from cache, never fetch
374
- */
375
- async function cacheOnly(request, cache) {
376
- const cached = await cache.match(request);
377
- return cached || offlineResponse(request);
378
- }
379
-
380
- /**
381
- * Fetch and cache a request
382
- */
383
- async function fetchAndCache(request, cache) {
384
- try {
385
- const response = await fetch(request);
386
- if (response.ok) {
387
- // Add cache timestamp header
388
- const headers = new Headers(response.headers);
389
- headers.set('sw-cache-date', new Date().toISOString());
390
-
391
- const cachedResponse = new Response(response.clone().body, {
392
- status: response.status,
393
- statusText: response.statusText,
394
- headers,
395
- });
396
-
397
- cache.put(request, cachedResponse);
398
- }
399
- return response;
400
- }
401
- catch (error) {
402
- return offlineResponse(request);
403
- }
404
- }
405
-
406
- /**
407
- * Generate offline response
408
- */
409
- async function offlineResponse(request) {
410
- // For navigation requests, return offline page
411
- if (request.mode === 'navigate') {
412
- const cache = await caches.open(CACHE_NAME);
413
- const offlinePage = await cache.match(OFFLINE_PAGE);
414
- if (offlinePage) {
415
- return offlinePage;
416
- }
417
- }
418
-
419
- // Return a basic offline response
420
- return new Response('You are offline', {
421
- status: 503,
422
- statusText: 'Service Unavailable',
423
- headers: {
424
- 'Content-Type': 'text/plain',
425
- },
426
- });
427
- }
428
-
429
- /**
430
- * Get total cache size
431
- */
432
- async function getCacheSize() {
433
- let totalSize = 0;
434
- const cacheNames = await caches.keys();
435
-
436
- for (const cacheName of cacheNames) {
437
- const cache = await caches.open(cacheName);
438
- const keys = await cache.keys();
439
-
440
- for (const request of keys) {
441
- const response = await cache.match(request);
442
- if (response) {
443
- const blob = await response.clone().blob();
444
- totalSize += blob.size;
445
- }
446
- }
447
- }
448
-
449
- return totalSize;
450
- }
451
-
452
- /**
453
- * Enforce cache storage limits
454
- */
455
- async function enforceCacheLimits() {
456
- const cache = await caches.open(CACHE_NAME);
457
- const keys = await cache.keys();
458
-
459
- // Get cache entries with metadata
460
- const entries = [];
461
- for (const request of keys) {
462
- const response = await cache.match(request);
463
- if (response) {
464
- const blob = await response.clone().blob();
465
- const cachedDate = response.headers.get('sw-cache-date');
466
- entries.push({
467
- request,
468
- size: blob.size,
469
- date: cachedDate ? new Date(cachedDate) : new Date(),
470
- });
471
- }
472
- }
473
-
474
- // Check total size limit
475
- if (CACHE_CONFIG.maxSize > 0) {
476
- const totalSize = entries.reduce((sum, e) => sum + e.size, 0);
477
-
478
- if (totalSize > CACHE_CONFIG.maxSize) {
479
- console.log('[SW] Cache size exceeded, purging...');
480
- await purgeCache(entries, cache, CACHE_CONFIG.maxSize);
481
- }
482
- }
483
-
484
- // Check max entries limit
485
- if (CACHE_CONFIG.maxEntries > 0 && entries.length > CACHE_CONFIG.maxEntries) {
486
- console.log('[SW] Cache entries exceeded, purging...');
487
- await purgeByEntryCount(entries, cache, CACHE_CONFIG.maxEntries);
488
- }
489
-
490
- // Check max age limit
491
- if (CACHE_CONFIG.maxAge > 0) {
492
- const now = Date.now();
493
- const expiredEntries = entries.filter(e => (now - e.date.getTime()) > CACHE_CONFIG.maxAge);
494
-
495
- for (const entry of expiredEntries) {
496
- console.log('[SW] Removing expired cache entry:', entry.request.url);
497
- await cache.delete(entry.request);
498
- }
499
- }
500
- }
501
-
502
- /**
503
- * Purge cache to meet size limit
504
- */
505
- async function purgeCache(entries, cache, maxSize) {
506
- // Sort by purge strategy
507
- const sorted = [...entries];
508
-
509
- switch (CACHE_CONFIG.purgeStrategy) {
510
- case 'lru':
511
- // Least Recently Used - remove oldest first
512
- sorted.sort((a, b) => a.date.getTime() - b.date.getTime());
513
- break;
514
- case 'fifo':
515
- // First In First Out - same as lru for our purposes
516
- sorted.sort((a, b) => a.date.getTime() - b.date.getTime());
517
- break;
518
- case 'lfu':
519
- // Least Frequently Used - we don't track frequency, use size as proxy
520
- sorted.sort((a, b) => b.size - a.size);
521
- break;
522
- default:
523
- sorted.sort((a, b) => a.date.getTime() - b.date.getTime());
524
- }
525
-
526
- let currentSize = entries.reduce((sum, e) => sum + e.size, 0);
527
-
528
- for (const entry of sorted) {
529
- if (currentSize <= maxSize * 0.8) { // Keep 80% buffer
530
- break;
531
- }
532
-
533
- // Don't delete essential assets
534
- const url = entry.request.url;
535
- if (PRECACHE_ASSETS.some(asset => url.endsWith(asset))) {
536
- continue;
537
- }
538
-
539
- console.log('[SW] Purging cache entry:', url);
540
- await cache.delete(entry.request);
541
- currentSize -= entry.size;
542
- }
543
- }
544
-
545
- /**
546
- * Purge cache by entry count
547
- */
548
- async function purgeByEntryCount(entries, cache, maxEntries) {
549
- const sorted = [...entries].sort((a, b) => a.date.getTime() - b.date.getTime());
550
- const toRemove = sorted.slice(0, entries.length - maxEntries);
551
-
552
- for (const entry of toRemove) {
553
- // Don't delete essential assets
554
- const url = entry.request.url;
555
- if (PRECACHE_ASSETS.some(asset => url.endsWith(asset))) {
556
- continue;
557
- }
558
-
559
- await cache.delete(entry.request);
560
- }
561
- }
562
-
563
- console.log('[SW] Service Worker loaded - Version:', CACHE_VERSION);
564
- `}function D(){return`
565
- /**
566
- * Push event - handle incoming push notifications
567
- */
568
- self.addEventListener('push', (event) => {
569
- console.log('[SW] Push notification received');
570
-
571
- let data = {
572
- title: 'Notification',
573
- body: 'You have a new notification',
574
- icon: PUSH_CONFIG.defaultIcon,
575
- badge: PUSH_CONFIG.defaultBadge,
576
- };
577
-
578
- if (event.data) {
579
- try {
580
- const payload = event.data.json();
581
- data = { ...data, ...payload };
582
- }
583
- catch {
584
- data.body = event.data.text();
585
- }
586
- }
587
-
588
- const options = {
589
- body: data.body,
590
- icon: data.icon || PUSH_CONFIG.defaultIcon,
591
- badge: data.badge || PUSH_CONFIG.defaultBadge,
592
- vibrate: data.vibrate || [100, 50, 100],
593
- data: {
594
- url: data.url || '/',
595
- ...data.data,
596
- },
597
- actions: data.actions || [],
598
- tag: data.tag,
599
- renotify: data.renotify || false,
600
- requireInteraction: data.requireInteraction || false,
601
- silent: data.silent || false,
602
- };
603
-
604
- event.waitUntil(
605
- self.registration.showNotification(data.title, options)
606
- );
607
- });
608
-
609
- /**
610
- * Notification click event - handle notification interactions
611
- */
612
- self.addEventListener('notificationclick', (event) => {
613
- console.log('[SW] Notification clicked:', event.action);
614
- event.notification.close();
615
-
616
- const url = event.notification.data?.url || '/';
617
-
618
- event.waitUntil(
619
- clients.matchAll({ type: 'window', includeUncontrolled: true }).then((windowClients) => {
620
- // Check if there's already a window open with this URL
621
- for (const client of windowClients) {
622
- if (client.url === url && 'focus' in client) {
623
- return client.focus();
624
- }
625
- }
626
- // Open a new window
627
- if (clients.openWindow) {
628
- return clients.openWindow(url);
629
- }
630
- })
631
- );
632
- });
633
-
634
- /**
635
- * Notification close event
636
- */
637
- self.addEventListener('notificationclose', (event) => {
638
- console.log('[SW] Notification closed');
639
-
640
- // Track notification dismissal if needed
641
- const data = event.notification.data;
642
- if (data?.trackDismiss) {
643
- // Could send analytics here
644
- }
645
- });
646
- `}function k(){return`
647
- /**
648
- * Background sync queue storage (IndexedDB)
649
- */
650
- const SYNC_STORE = 'stx-sync-store';
651
- let syncDb = null;
652
-
653
- async function getSyncDb() {
654
- if (syncDb) return syncDb;
655
-
656
- return new Promise((resolve, reject) => {
657
- const request = indexedDB.open(SYNC_STORE, 1);
658
-
659
- request.onerror = () => reject(request.error);
660
- request.onsuccess = () => {
661
- syncDb = request.result;
662
- resolve(syncDb);
663
- };
664
-
665
- request.onupgradeneeded = (event) => {
666
- const db = event.target.result;
667
- if (!db.objectStoreNames.contains('queue')) {
668
- db.createObjectStore('queue', { keyPath: 'id', autoIncrement: true });
669
- }
670
- };
671
- });
672
- }
673
-
674
- /**
675
- * Add request to sync queue
676
- */
677
- async function addToSyncQueue(request) {
678
- const db = await getSyncDb();
679
- const tx = db.transaction('queue', 'readwrite');
680
- const store = tx.objectStore('queue');
681
-
682
- const data = {
683
- url: request.url,
684
- method: request.method,
685
- headers: Object.fromEntries(request.headers.entries()),
686
- body: await request.clone().text(),
687
- timestamp: Date.now(),
688
- retries: 0,
689
- };
690
-
691
- return new Promise((resolve, reject) => {
692
- const req = store.add(data);
693
- req.onsuccess = () => resolve(req.result);
694
- req.onerror = () => reject(req.error);
695
- });
696
- }
697
-
698
- /**
699
- * Get all pending sync requests
700
- */
701
- async function getPendingSyncRequests() {
702
- const db = await getSyncDb();
703
- const tx = db.transaction('queue', 'readonly');
704
- const store = tx.objectStore('queue');
705
-
706
- return new Promise((resolve, reject) => {
707
- const req = store.getAll();
708
- req.onsuccess = () => resolve(req.result);
709
- req.onerror = () => reject(req.error);
710
- });
711
- }
712
-
713
- /**
714
- * Remove request from sync queue
715
- */
716
- async function removeSyncRequest(id) {
717
- const db = await getSyncDb();
718
- const tx = db.transaction('queue', 'readwrite');
719
- const store = tx.objectStore('queue');
720
-
721
- return new Promise((resolve, reject) => {
722
- const req = store.delete(id);
723
- req.onsuccess = () => resolve();
724
- req.onerror = () => reject(req.error);
725
- });
726
- }
727
-
728
- /**
729
- * Update sync request retry count
730
- */
731
- async function updateSyncRetries(id, retries) {
732
- const db = await getSyncDb();
733
- const tx = db.transaction('queue', 'readwrite');
734
- const store = tx.objectStore('queue');
735
-
736
- const req = store.get(id);
737
- req.onsuccess = () => {
738
- const data = req.result;
739
- if (data) {
740
- data.retries = retries;
741
- store.put(data);
742
- }
743
- };
744
- }
745
-
746
- /**
747
- * Sync event - process queued requests when online
748
- */
749
- self.addEventListener('sync', (event) => {
750
- console.log('[SW] Sync event:', event.tag);
751
-
752
- if (event.tag === SYNC_CONFIG.queueName || event.tag === 'stx-form-sync') {
753
- event.waitUntil(processBackgroundSync());
754
- }
755
- });
756
-
757
- /**
758
- * Process all queued sync requests
759
- */
760
- async function processBackgroundSync() {
761
- console.log('[SW] Processing background sync queue');
762
-
763
- const requests = await getPendingSyncRequests();
764
- console.log('[SW] Pending sync requests:', requests.length);
765
-
766
- for (const request of requests) {
767
- if (request.retries >= SYNC_CONFIG.maxRetries) {
768
- console.log('[SW] Max retries reached, removing:', request.url);
769
- await removeSyncRequest(request.id);
770
- continue;
771
- }
772
-
773
- try {
774
- const response = await fetch(request.url, {
775
- method: request.method,
776
- headers: request.headers,
777
- body: request.method !== 'GET' ? request.body : undefined,
778
- });
779
-
780
- if (response.ok) {
781
- console.log('[SW] Sync succeeded:', request.url);
782
- await removeSyncRequest(request.id);
783
-
784
- // Notify clients of successful sync
785
- const clients = await self.clients.matchAll();
786
- clients.forEach(client => {
787
- client.postMessage({
788
- type: 'SYNC_COMPLETE',
789
- url: request.url,
790
- success: true,
791
- });
792
- });
793
- }
794
- else {
795
- throw new Error('Response not ok: ' + response.status);
796
- }
797
- }
798
- catch (error) {
799
- console.log('[SW] Sync failed, will retry:', request.url, error.message);
800
- await updateSyncRetries(request.id, request.retries + 1);
801
- }
802
- }
803
- }
804
-
805
- /**
806
- * Register a form for background sync
807
- * Called from main thread via message
808
- */
809
- async function registerFormSync(formData) {
810
- // Store form data in IndexedDB
811
- await addToSyncQueue({
812
- url: formData.action,
813
- method: formData.method || 'POST',
814
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
815
- clone: () => ({ text: async () => new URLSearchParams(formData.data).toString() }),
816
- });
817
-
818
- // Register for background sync
819
- await self.registration.sync.register(SYNC_CONFIG.queueName);
820
- }
821
-
822
- // Listen for form sync requests
823
- self.addEventListener('message', (event) => {
824
- if (event.data?.type === 'REGISTER_FORM_SYNC') {
825
- event.waitUntil(registerFormSync(event.data.payload));
826
- }
827
- });
828
- `}function m(j){return j.pwa?.serviceWorker?.fileName||"sw.js"}function V(j){return j.pwa?.enabled===!0&&j.pwa?.serviceWorker?.useWorkbox===!0}function y(j,F){if(!j.pwa?.enabled)return"";if(V(j)){let{generateWorkboxServiceWorker:q}=(N(),z(I));return q(j,F)}return U(j,F)}var J=R(()=>{G()});var I={};A(I,{isWorkboxEnabled:()=>S,getServiceWorkerGenerator:()=>u,generateWorkboxServiceWorker:()=>x,generateWorkboxConfig:()=>M});function M(j,F){let q=j.pwa;if(!q?.enabled)return{mode:"generate",modules:[],skipWaiting:!0,clientsClaim:!0};let B=q.serviceWorker||{},X=q.routes||[],L=[{name:"workbox-precaching",exports:["precacheAndRoute","cleanupOutdatedCaches"]},{name:"workbox-routing",exports:["registerRoute","NavigationRoute","setDefaultHandler"]}],O=new Set;for(let K of X)O.add(P(K.strategy));if(O.size>0)L.push({name:"workbox-strategies",exports:Array.from(O)});if(X.some((K)=>K.maxAgeSeconds||K.maxEntries)||q.cacheStorage)L.push({name:"workbox-expiration",exports:["ExpirationPlugin"]});if(X.some((K)=>K.strategy==="network-first"||K.strategy==="stale-while-revalidate"))L.push({name:"workbox-cacheable-response",exports:["CacheableResponsePlugin"]});if(q.backgroundSync?.enabled)L.push({name:"workbox-background-sync",exports:["BackgroundSyncPlugin","Queue"]});if(B.navigationPreload)L.push({name:"workbox-navigation-preload",exports:["enable"]});let Q=F?Z(F,j):void 0;return{mode:"generate",modules:L,precacheManifest:Q?.entries,skipWaiting:B.skipWaiting??!0,clientsClaim:B.clientsClaim??!0,offlineFallback:q.offline?.enabled?"/offline.html":void 0,navigationPreload:B.navigationPreload??!1,cacheVersion:B.cacheVersion||"1.0.0"}}function x(j,F){let q=j.pwa;if(!q?.enabled)return"";let B=M(j,F),X=q.serviceWorker||{},L=q.push,O=q.backgroundSync,Y=F?Z(F,j):null,Q=Y?_(Y):"[]",K=w(B.modules),T=v(j);return`/**
829
- * Service Worker - Generated by stx with Workbox
830
- * Cache Version: ${B.cacheVersion}
831
- *
832
- * This service worker uses Google's Workbox library for robust caching.
833
- * https://developers.google.com/web/tools/workbox
834
- *
835
- * Features:
836
- * - Precaching with automatic revision management
837
- * - Runtime caching with multiple strategies
838
- * - Offline fallback support
839
- * - Push notifications: ${L?.enabled?"enabled":"disabled"}
840
- * - Background sync: ${O?.enabled?"enabled":"disabled"}
841
- */
842
-
843
- // Import Workbox modules from CDN
844
- importScripts('https://storage.googleapis.com/workbox-cdn/releases/7.0.0/workbox-sw.js');
845
-
846
- // Disable Workbox logging in production
847
- workbox.setConfig({ debug: true });
848
-
849
- // Extract modules from workbox global
850
- ${K}
851
-
852
- const CACHE_VERSION = '${B.cacheVersion}';
853
- const OFFLINE_PAGE = '${B.offlineFallback||"/offline.html"}';
854
-
855
- // ============================================================================
856
- // Precaching
857
- // ============================================================================
858
-
859
- // Clean up outdated caches from previous versions
860
- cleanupOutdatedCaches();
861
-
862
- // Precache static assets
863
- // The manifest is injected during build or defined below
864
- const PRECACHE_MANIFEST = ${Q};
865
-
866
- // Add essential assets
867
- PRECACHE_MANIFEST.push(
868
- { url: '/', revision: CACHE_VERSION },
869
- { url: '/manifest.json', revision: CACHE_VERSION },
870
- ${B.offlineFallback?`{ url: '${B.offlineFallback}', revision: CACHE_VERSION },`:""}
871
- );
872
-
873
- // Precache and route all manifest entries
874
- precacheAndRoute(PRECACHE_MANIFEST);
875
-
876
- // ============================================================================
877
- // Navigation Preload
878
- // ============================================================================
879
-
880
- ${B.navigationPreload?`// Enable navigation preload for faster page loads
881
- enable();`:"// Navigation preload disabled"}
882
-
883
- // ============================================================================
884
- // Runtime Caching
885
- // ============================================================================
886
-
887
- ${T}
888
-
889
- // ============================================================================
890
- // Offline Fallback
891
- // ============================================================================
892
-
893
- ${B.offlineFallback?`
894
- // Set up offline fallback for navigation requests
895
- const navigationRoute = new NavigationRoute(
896
- new NetworkFirst({
897
- cacheName: 'stx-pages-cache',
898
- plugins: [
899
- new CacheableResponsePlugin({ statuses: [0, 200] }),
900
- ],
901
- }),
902
- {
903
- // Return offline page when navigation fails
904
- async allowedHandler(request) {
905
- try {
906
- const response = await this.handle(request);
907
- return response;
908
- }
909
- catch (error) {
910
- const cache = await caches.open('stx-offline-cache');
911
- return cache.match(OFFLINE_PAGE) || new Response('You are offline', {
912
- status: 503,
913
- statusText: 'Service Unavailable',
914
- });
915
- }
916
- },
917
- }
918
- );
919
- registerRoute(navigationRoute);
920
- `:"// No offline fallback configured"}
921
-
922
- // Default handler for unmatched requests
923
- setDefaultHandler(new NetworkFirst({
924
- cacheName: 'stx-default-cache',
925
- plugins: [
926
- new CacheableResponsePlugin({ statuses: [0, 200] }),
927
- new ExpirationPlugin({ maxEntries: 100, maxAgeSeconds: 60 * 60 * 24 }), // 1 day
928
- ],
929
- }));
930
-
931
- // ============================================================================
932
- // Service Worker Lifecycle
933
- // ============================================================================
934
-
935
- ${B.skipWaiting?`// Skip waiting - activate immediately
936
- self.skipWaiting();`:"// Manual skipWaiting - user must trigger update"}
937
-
938
- ${B.clientsClaim?`// Claim clients - take control immediately
939
- self.addEventListener('activate', () => {
940
- self.clients.claim();
941
- });`:"// Manual clients claim"}
942
-
943
- // ============================================================================
944
- // Message Handling
945
- // ============================================================================
946
-
947
- self.addEventListener('message', (event) => {
948
- const { type, payload } = event.data || {};
949
-
950
- switch (type) {
951
- case 'SKIP_WAITING':
952
- self.skipWaiting();
953
- break;
954
-
955
- case 'GET_VERSION':
956
- event.source?.postMessage({ type: 'VERSION', payload: CACHE_VERSION });
957
- break;
958
-
959
- case 'CACHE_URLS':
960
- if (Array.isArray(payload)) {
961
- event.waitUntil(
962
- caches.open('stx-dynamic-cache').then(cache => cache.addAll(payload))
963
- );
964
- }
965
- break;
966
-
967
- case 'CLEAR_CACHE':
968
- event.waitUntil(
969
- caches.keys().then(names =>
970
- Promise.all(names.map(name => caches.delete(name)))
971
- )
972
- );
973
- break;
974
- }
975
- });
976
-
977
- ${L?.enabled?h(L):"// Push notifications disabled"}
978
-
979
- ${O?.enabled?C(O):"// Background sync disabled"}
980
-
981
- console.log('[Workbox SW] Service Worker loaded - Version:', CACHE_VERSION);
982
- `}function w(j){let F=[];for(let q of j){let B=q.name.replace("workbox-","");F.push(`const { ${q.exports.join(", ")} } = workbox.${l(B)};`)}return F.join(`
983
- `)}function l(j){return j.replace(/-([a-z])/g,(F,q)=>q.toUpperCase())}function h(j){return`
984
- // ============================================================================
985
- // Push Notifications
986
- // ============================================================================
987
-
988
- const PUSH_CONFIG = {
989
- defaultIcon: '${j?.defaultIcon||"/pwa-icons/icon-192x192.png"}',
990
- defaultBadge: '${j?.defaultBadge||"/pwa-icons/icon-72x72.png"}',
991
- };
992
-
993
- self.addEventListener('push', (event) => {
994
- console.log('[Workbox SW] Push notification received');
995
-
996
- let data = {
997
- title: 'Notification',
998
- body: 'You have a new notification',
999
- icon: PUSH_CONFIG.defaultIcon,
1000
- badge: PUSH_CONFIG.defaultBadge,
1001
- };
1002
-
1003
- if (event.data) {
1004
- try {
1005
- const payload = event.data.json();
1006
- data = { ...data, ...payload };
1007
- }
1008
- catch {
1009
- data.body = event.data.text();
1010
- }
1011
- }
1012
-
1013
- const options = {
1014
- body: data.body,
1015
- icon: data.icon || PUSH_CONFIG.defaultIcon,
1016
- badge: data.badge || PUSH_CONFIG.defaultBadge,
1017
- vibrate: data.vibrate || [100, 50, 100],
1018
- data: {
1019
- url: data.url || '/',
1020
- ...data.data,
1021
- },
1022
- actions: data.actions || [],
1023
- tag: data.tag,
1024
- renotify: data.renotify || false,
1025
- requireInteraction: data.requireInteraction || false,
1026
- };
1027
-
1028
- event.waitUntil(
1029
- self.registration.showNotification(data.title, options)
1030
- );
1031
- });
1032
-
1033
- self.addEventListener('notificationclick', (event) => {
1034
- console.log('[Workbox SW] Notification clicked');
1035
- event.notification.close();
1036
-
1037
- const url = event.notification.data?.url || '/';
1038
-
1039
- event.waitUntil(
1040
- clients.matchAll({ type: 'window', includeUncontrolled: true }).then(windowClients => {
1041
- for (const client of windowClients) {
1042
- if (client.url === url && 'focus' in client) {
1043
- return client.focus();
1044
- }
1045
- }
1046
- if (clients.openWindow) {
1047
- return clients.openWindow(url);
1048
- }
1049
- })
1050
- );
1051
- });
1052
- `}function C(j){return`
1053
- // ============================================================================
1054
- // Background Sync
1055
- // ============================================================================
1056
-
1057
- const syncQueue = new Queue('${j?.queueName||"stx-sync-queue"}', {
1058
- maxRetentionTime: ${j?.maxRetentionMinutes||1440}, // minutes
1059
- onSync: async ({ queue }) => {
1060
- let entry;
1061
- while ((entry = await queue.shiftRequest())) {
1062
- try {
1063
- await fetch(entry.request.clone());
1064
- console.log('[Workbox SW] Sync succeeded:', entry.request.url);
1065
-
1066
- // Notify clients
1067
- const allClients = await self.clients.matchAll();
1068
- allClients.forEach(client => {
1069
- client.postMessage({
1070
- type: 'SYNC_COMPLETE',
1071
- url: entry.request.url,
1072
- success: true,
1073
- });
1074
- });
1075
- }
1076
- catch (error) {
1077
- console.log('[Workbox SW] Sync failed, re-queuing:', entry.request.url);
1078
- await queue.unshiftRequest(entry);
1079
- throw error;
1080
- }
1081
- }
1082
- },
1083
- });
1084
-
1085
- // Register routes that should use background sync
1086
- ${j?.endpoints?.map((F)=>`
1087
- registerRoute(
1088
- ({ url }) => url.pathname.startsWith('${F}'),
1089
- new NetworkOnly({
1090
- plugins: [
1091
- new BackgroundSyncPlugin('${j?.queueName||"stx-sync-queue"}', {
1092
- maxRetentionTime: ${j?.maxRetentionMinutes||1440},
1093
- }),
1094
- ],
1095
- }),
1096
- 'POST'
1097
- );`).join(`
1098
- `)||"// No background sync endpoints configured"}
1099
-
1100
- // Handle form sync messages
1101
- self.addEventListener('message', (event) => {
1102
- if (event.data?.type === 'REGISTER_FORM_SYNC') {
1103
- const { action, method, data } = event.data.payload;
1104
-
1105
- const request = new Request(action, {
1106
- method: method || 'POST',
1107
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
1108
- body: new URLSearchParams(data).toString(),
1109
- });
1110
-
1111
- event.waitUntil(syncQueue.pushRequest({ request }));
1112
- }
1113
- });
1114
- `}function S(j){return j.pwa?.enabled===!0&&j.pwa?.serviceWorker?.useWorkbox===!0}function u(j){if(S(j))return x;let{generateServiceWorker:F}=(J(),z(H));return F}var N=R(()=>{d();G()});
1115
- export{M as Me,x as Ne,S as Oe,u as Pe,N as Qe,U as Re,m as Se,V as Te,y as Ue,J as Ve};