@ohos-ports/stacksjs-stx 0.2.287-beta.0
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.
- package/LICENSE.md +21 -0
- package/README.md +1042 -0
- package/dist/a11y.d.ts +256 -0
- package/dist/a11y.js +671 -0
- package/dist/analytics.d.ts +40 -0
- package/dist/analytics.js +159 -0
- package/dist/analyzer.d.ts +68 -0
- package/dist/analyzer.js +240 -0
- package/dist/animation.d.ts +123 -0
- package/dist/animation.js +688 -0
- package/dist/app-shell.d.ts +76 -0
- package/dist/app-shell.js +209 -0
- package/dist/app.d.ts +65 -0
- package/dist/app.js +79 -0
- package/dist/appearance-bootstrap.d.ts +54 -0
- package/dist/appearance-bootstrap.js +92 -0
- package/dist/asset-roots.d.ts +32 -0
- package/dist/asset-roots.js +7 -0
- package/dist/assets.d.ts +21 -0
- package/dist/assets.js +155 -0
- package/dist/ast.d.ts +265 -0
- package/dist/ast.js +630 -0
- package/dist/async-components.d.ts +123 -0
- package/dist/async-components.js +428 -0
- package/dist/auth.d.ts +13 -0
- package/dist/auth.js +12 -0
- package/dist/broadcasting.d.ts +77 -0
- package/dist/broadcasting.js +103 -0
- package/dist/browser-composables.d.ts +348 -0
- package/dist/browser-composables.js +606 -0
- package/dist/browser-core-imports.d.ts +12 -0
- package/dist/browser-core-imports.js +28 -0
- package/dist/build-assets.d.ts +32 -0
- package/dist/build-assets.js +29 -0
- package/dist/build-externalize-repeated.d.ts +34 -0
- package/dist/build-externalize-repeated.js +101 -0
- package/dist/build-externalize.d.ts +73 -0
- package/dist/build-externalize.js +80 -0
- package/dist/build-id.d.ts +57 -0
- package/dist/build-id.js +25 -0
- package/dist/build-message.d.ts +81 -0
- package/dist/build-message.js +65 -0
- package/dist/build-mode-detector.d.ts +26 -0
- package/dist/build-mode-detector.js +50 -0
- package/dist/build-optimizer.d.ts +101 -0
- package/dist/build-optimizer.js +433 -0
- package/dist/build-views.d.ts +56 -0
- package/dist/build-views.js +180 -0
- package/dist/build.d.ts +31 -0
- package/dist/build.js +34 -0
- package/dist/builtins/attrs.d.ts +49 -0
- package/dist/builtins/attrs.js +39 -0
- package/dist/builtins/drawer.d.ts +24 -0
- package/dist/builtins/drawer.js +37 -0
- package/dist/builtins/escape.d.ts +12 -0
- package/dist/builtins/escape.js +3 -0
- package/dist/builtins/icon.d.ts +45 -0
- package/dist/builtins/icon.js +100 -0
- package/dist/builtins/image-delivery.d.ts +16 -0
- package/dist/builtins/image-delivery.js +115 -0
- package/dist/builtins/image-placeholder.d.ts +78 -0
- package/dist/builtins/image-placeholder.js +137 -0
- package/dist/builtins/index.d.ts +26 -0
- package/dist/builtins/index.js +34 -0
- package/dist/builtins/modal.d.ts +26 -0
- package/dist/builtins/modal.js +38 -0
- package/dist/builtins/safe-image.d.ts +44 -0
- package/dist/builtins/safe-image.js +45 -0
- package/dist/builtins/stx-image.d.ts +29 -0
- package/dist/builtins/stx-image.js +222 -0
- package/dist/builtins/stx-link.d.ts +11 -0
- package/dist/builtins/stx-link.js +35 -0
- package/dist/builtins/stx-loading-indicator.d.ts +13 -0
- package/dist/builtins/stx-loading-indicator.js +35 -0
- package/dist/builtins/suspense.d.ts +30 -0
- package/dist/builtins/suspense.js +24 -0
- package/dist/builtins/toast.d.ts +19 -0
- package/dist/builtins/toast.js +42 -0
- package/dist/builtins/tooltip.d.ts +18 -0
- package/dist/builtins/tooltip.js +106 -0
- package/dist/builtins/transition-group.d.ts +27 -0
- package/dist/builtins/transition-group.js +22 -0
- package/dist/bun-shim.js +496 -0
- package/dist/bundle-analyzer/collector.d.ts +66 -0
- package/dist/bundle-analyzer/collector.js +233 -0
- package/dist/bundle-analyzer/index.d.ts +98 -0
- package/dist/bundle-analyzer/index.js +82 -0
- package/dist/bundle-analyzer/report.d.ts +39 -0
- package/dist/bundle-analyzer/report.js +318 -0
- package/dist/bundle-analyzer/treemap.d.ts +19 -0
- package/dist/bundle-analyzer/treemap.js +594 -0
- package/dist/bundle-analyzer.js +499 -0
- package/dist/caching.d.ts +69 -0
- package/dist/caching.js +135 -0
- package/dist/chunk-0y46fbkx.js +3 -0
- package/dist/chunk-122tyfre.js +2 -0
- package/dist/chunk-19nfvxfw.js +43 -0
- package/dist/chunk-1kah92n2.js +3 -0
- package/dist/chunk-1kms3b9d.js +2 -0
- package/dist/chunk-1q4y74mh.js +1194 -0
- package/dist/chunk-248e84r1.js +4 -0
- package/dist/chunk-24ps8kft.js +2 -0
- package/dist/chunk-2et5hxfv.js +2 -0
- package/dist/chunk-2r1rd8f0.js +2 -0
- package/dist/chunk-2tk1zkrz.js +2 -0
- package/dist/chunk-38ejahd9.js +3 -0
- package/dist/chunk-3zv4wz87.js +2 -0
- package/dist/chunk-4122k1bh.js +2 -0
- package/dist/chunk-45az9zht.js +2 -0
- package/dist/chunk-4qr85f07.js +2 -0
- package/dist/chunk-4ww3znrr.js +15 -0
- package/dist/chunk-54st8g2j.js +397 -0
- package/dist/chunk-58f0mthg.js +3 -0
- package/dist/chunk-5a19dhx5.js +2 -0
- package/dist/chunk-5kk8gsj2.js +3 -0
- package/dist/chunk-5w1e3yxs.js +499 -0
- package/dist/chunk-6gdycmxr.js +2 -0
- package/dist/chunk-6hmnaza7.js +4473 -0
- package/dist/chunk-71t0yan0.js +5 -0
- package/dist/chunk-74cv4ta1.js +3 -0
- package/dist/chunk-74v15e8z.js +2 -0
- package/dist/chunk-7b329e5v.js +3 -0
- package/dist/chunk-7q9mwh4v.js +84 -0
- package/dist/chunk-866y9d8b.js +8169 -0
- package/dist/chunk-8fwerspy.js +2 -0
- package/dist/chunk-8mjdpr94.js +147 -0
- package/dist/chunk-92mj1t26.js +60 -0
- package/dist/chunk-9b22663r.js +2 -0
- package/dist/chunk-9hjdgm4d.js +2 -0
- package/dist/chunk-9n0gvfrg.js +4 -0
- package/dist/chunk-9wr7zcad.js +18 -0
- package/dist/chunk-9y0g8kzt.js +358 -0
- package/dist/chunk-a0nfbmeh.js +3 -0
- package/dist/chunk-acn1b56m.js +1280 -0
- package/dist/chunk-awkq3xfx.js +2 -0
- package/dist/chunk-b6ej2fdf.js +1814 -0
- package/dist/chunk-b8rrnqry.js +2 -0
- package/dist/chunk-bfqfs07m.js +3022 -0
- package/dist/chunk-bs6kapy7.js +2 -0
- package/dist/chunk-btav940g.js +2 -0
- package/dist/chunk-bz820epz.js +3 -0
- package/dist/chunk-ccspd3mc.js +2 -0
- package/dist/chunk-csbgwaa5.js +2 -0
- package/dist/chunk-d8t4sjsp.js +2 -0
- package/dist/chunk-dap191q2.js +2 -0
- package/dist/chunk-de7fye10.js +4 -0
- package/dist/chunk-dgrt76d2.js +2 -0
- package/dist/chunk-dhh5q7qt.js +3 -0
- package/dist/chunk-dsffsqnt.js +2 -0
- package/dist/chunk-dtq7y5ym.js +2 -0
- package/dist/chunk-fed3xsp9.js +3 -0
- package/dist/chunk-ferav3bw.js +19 -0
- package/dist/chunk-fvhm8psm.js +3 -0
- package/dist/chunk-g4vpzv6b.js +2 -0
- package/dist/chunk-g9csmj0s.js +2 -0
- package/dist/chunk-gtcrpmz1.js +2 -0
- package/dist/chunk-h4xh8cms.js +4 -0
- package/dist/chunk-h8yqsz9m.js +2 -0
- package/dist/chunk-hcq5dw7a.js +2 -0
- package/dist/chunk-hm0xha6c.js +12 -0
- package/dist/chunk-hpybjwwf.js +8 -0
- package/dist/chunk-jegt35zh.js +2 -0
- package/dist/chunk-jr3jp3ev.js +8 -0
- package/dist/chunk-k56rjjc0.js +24 -0
- package/dist/chunk-kdh37tp8.js +194 -0
- package/dist/chunk-kxzb4et3.js +29 -0
- package/dist/chunk-mf4n3x1j.js +14 -0
- package/dist/chunk-mkd9kjgb.js +3 -0
- package/dist/chunk-mxfh1nxg.js +2 -0
- package/dist/chunk-n3ggrhb3.js +3 -0
- package/dist/chunk-nkb3scg6.js +8 -0
- package/dist/chunk-nnd4wq8j.js +231 -0
- package/dist/chunk-nsp1cw38.js +11 -0
- package/dist/chunk-nx5qkm8k.js +30 -0
- package/dist/chunk-p3242nck.js +2 -0
- package/dist/chunk-p98kfh94.js +2 -0
- package/dist/chunk-pkaabd8h.js +3 -0
- package/dist/chunk-pzm13sdc.js +3 -0
- package/dist/chunk-q4p5k2p3.js +2 -0
- package/dist/chunk-q9n5swx7.js +3 -0
- package/dist/chunk-qc1f74ek.js +3 -0
- package/dist/chunk-qpyjak7z.js +2 -0
- package/dist/chunk-qr82je1m.js +22 -0
- package/dist/chunk-qy73j6m4.js +288 -0
- package/dist/chunk-qzkhpsam.js +505 -0
- package/dist/chunk-r3ayvdz3.js +2 -0
- package/dist/chunk-r7r66978.js +2 -0
- package/dist/chunk-rbb7dvja.js +30 -0
- package/dist/chunk-refwkt87.js +71 -0
- package/dist/chunk-rj4kajww.js +2 -0
- package/dist/chunk-rp4rjjmf.js +2 -0
- package/dist/chunk-se0p17c2.js +898 -0
- package/dist/chunk-sj9pmene.js +2 -0
- package/dist/chunk-sscwkffs.js +2 -0
- package/dist/chunk-svpqxn2c.js +2 -0
- package/dist/chunk-t6nseeb9.js +351 -0
- package/dist/chunk-t8y1ggdy.js +2 -0
- package/dist/chunk-tndhnk9e.js +2 -0
- package/dist/chunk-v5e1gxwm.js +3 -0
- package/dist/chunk-vqxmxgaj.js +4 -0
- package/dist/chunk-vrrax298.js +2 -0
- package/dist/chunk-w3ycm4na.js +3 -0
- package/dist/chunk-wcm80anz.js +321 -0
- package/dist/chunk-wrzwgkbx.js +22 -0
- package/dist/chunk-x650vjcp.js +302 -0
- package/dist/chunk-xgnc1wy6.js +116 -0
- package/dist/chunk-xpp135ad.js +11 -0
- package/dist/chunk-xttsqmkm.js +216 -0
- package/dist/chunk-y11cxbxd.js +3757 -0
- package/dist/chunk-y7m2dpd3.js +341 -0
- package/dist/chunk-y98jsjqq.js +2 -0
- package/dist/chunk-ya386h70.js +2 -0
- package/dist/chunk-ydrz60kr.js +2 -0
- package/dist/chunk-ypmqf7tm.js +4 -0
- package/dist/chunk-z4jhj5e5.js +28 -0
- package/dist/chunk-zg75gjns.js +2 -0
- package/dist/chunk-zqqx1qaj.js +2 -0
- package/dist/cli-flags.d.ts +34 -0
- package/dist/cli-flags.js +20 -0
- package/dist/cli.js +174 -0
- package/dist/client/directive.d.ts +17 -0
- package/dist/client/directive.js +14 -0
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.js +2 -0
- package/dist/client-helpers.d.ts +317 -0
- package/dist/client-helpers.js +312 -0
- package/dist/client-script-bundler.d.ts +103 -0
- package/dist/client-script-bundler.js +390 -0
- package/dist/client-script.d.ts +215 -0
- package/dist/client-script.js +865 -0
- package/dist/client.d.ts +21 -0
- package/dist/client.js +73 -0
- package/dist/codemod.d.ts +33 -0
- package/dist/codemod.js +244 -0
- package/dist/color-mode-boot.d.ts +92 -0
- package/dist/color-mode-boot.js +72 -0
- package/dist/component-client-factories.d.ts +33 -0
- package/dist/component-client-factories.js +77 -0
- package/dist/component-hmr.d.ts +107 -0
- package/dist/component-hmr.js +585 -0
- package/dist/component-library.d.ts +38 -0
- package/dist/component-library.js +994 -0
- package/dist/component-processing.d.ts +198 -0
- package/dist/component-processing.js +677 -0
- package/dist/component-registry.d.ts +127 -0
- package/dist/component-registry.js +90 -0
- package/dist/component-renderer.d.ts +52 -0
- package/dist/component-renderer.js +790 -0
- package/dist/components/StxImage.stx +12 -0
- package/dist/components/StxLink.stx +18 -0
- package/dist/components.d.ts +28 -0
- package/dist/components.js +213 -0
- package/dist/composable-loader.d.ts +62 -0
- package/dist/composable-loader.js +190 -0
- package/dist/composables/index.d.ts +417 -0
- package/dist/composables/index.js +222 -0
- package/dist/composables/use-battery.d.ts +46 -0
- package/dist/composables/use-battery.js +101 -0
- package/dist/composables/use-broadcast-channel.d.ts +59 -0
- package/dist/composables/use-broadcast-channel.js +80 -0
- package/dist/composables/use-channel.d.ts +67 -0
- package/dist/composables/use-channel.js +124 -0
- package/dist/composables/use-clipboard.d.ts +30 -0
- package/dist/composables/use-clipboard.js +90 -0
- package/dist/composables/use-color-mode.d.ts +67 -0
- package/dist/composables/use-color-mode.js +152 -0
- package/dist/composables/use-cookie.d.ts +59 -0
- package/dist/composables/use-cookie.js +86 -0
- package/dist/composables/use-device-orientation.d.ts +116 -0
- package/dist/composables/use-device-orientation.js +181 -0
- package/dist/composables/use-event-listener.d.ts +35 -0
- package/dist/composables/use-event-listener.js +27 -0
- package/dist/composables/use-event-source.d.ts +90 -0
- package/dist/composables/use-event-source.js +166 -0
- package/dist/composables/use-eye-dropper.d.ts +117 -0
- package/dist/composables/use-eye-dropper.js +142 -0
- package/dist/composables/use-fetch.d.ts +59 -0
- package/dist/composables/use-fetch.js +273 -0
- package/dist/composables/use-form.d.ts +91 -0
- package/dist/composables/use-form.js +112 -0
- package/dist/composables/use-fullscreen.d.ts +47 -0
- package/dist/composables/use-fullscreen.js +110 -0
- package/dist/composables/use-geolocation.d.ts +62 -0
- package/dist/composables/use-geolocation.js +101 -0
- package/dist/composables/use-idle.d.ts +102 -0
- package/dist/composables/use-idle.js +182 -0
- package/dist/composables/use-intersection-observer.d.ts +83 -0
- package/dist/composables/use-intersection-observer.js +168 -0
- package/dist/composables/use-keyboard.d.ts +100 -0
- package/dist/composables/use-keyboard.js +224 -0
- package/dist/composables/use-media-query.d.ts +56 -0
- package/dist/composables/use-media-query.js +62 -0
- package/dist/composables/use-meta.d.ts +35 -0
- package/dist/composables/use-meta.js +48 -0
- package/dist/composables/use-mouse.d.ts +65 -0
- package/dist/composables/use-mouse.js +286 -0
- package/dist/composables/use-mutation-observer.d.ts +101 -0
- package/dist/composables/use-mutation-observer.js +129 -0
- package/dist/composables/use-network.d.ts +40 -0
- package/dist/composables/use-network.js +85 -0
- package/dist/composables/use-notification.d.ts +98 -0
- package/dist/composables/use-notification.js +94 -0
- package/dist/composables/use-permissions.d.ts +119 -0
- package/dist/composables/use-permissions.js +132 -0
- package/dist/composables/use-query.d.ts +48 -0
- package/dist/composables/use-query.js +0 -0
- package/dist/composables/use-resize-observer.d.ts +60 -0
- package/dist/composables/use-resize-observer.js +157 -0
- package/dist/composables/use-router.d.ts +80 -0
- package/dist/composables/use-router.js +105 -0
- package/dist/composables/use-scroll-lock.d.ts +13 -0
- package/dist/composables/use-scroll-lock.js +55 -0
- package/dist/composables/use-share.d.ts +74 -0
- package/dist/composables/use-share.js +104 -0
- package/dist/composables/use-speech.d.ts +117 -0
- package/dist/composables/use-speech.js +294 -0
- package/dist/composables/use-storage.d.ts +69 -0
- package/dist/composables/use-storage.js +196 -0
- package/dist/composables/use-text-selection.d.ts +121 -0
- package/dist/composables/use-text-selection.js +205 -0
- package/dist/composables/use-timer.d.ts +92 -0
- package/dist/composables/use-timer.js +193 -0
- package/dist/composables/use-utilities.d.ts +103 -0
- package/dist/composables/use-utilities.js +176 -0
- package/dist/composables/use-wake-lock.d.ts +85 -0
- package/dist/composables/use-wake-lock.js +122 -0
- package/dist/composables/use-websocket.d.ts +70 -0
- package/dist/composables/use-websocket.js +165 -0
- package/dist/composables/use-window.d.ts +84 -0
- package/dist/composables/use-window.js +163 -0
- package/dist/composables.d.ts +287 -0
- package/dist/composables.js +562 -0
- package/dist/composition-api.d.ts +197 -0
- package/dist/composition-api.js +199 -0
- package/dist/compression.d.ts +30 -0
- package/dist/compression.js +107 -0
- package/dist/computed.d.ts +138 -0
- package/dist/computed.js +382 -0
- package/dist/conditionals.d.ts +48 -0
- package/dist/conditionals.js +626 -0
- package/dist/config.d.ts +77 -0
- package/dist/config.js +828 -0
- package/dist/cookie-serialize.d.ts +40 -0
- package/dist/cookie-serialize.js +18 -0
- package/dist/craft-bridge.d.ts +525 -0
- package/dist/craft-bridge.js +511 -0
- package/dist/craft-compiler.d.ts +245 -0
- package/dist/craft-compiler.js +810 -0
- package/dist/craft-components.d.ts +739 -0
- package/dist/craft-components.js +1074 -0
- package/dist/craft-entry.d.ts +6 -0
- package/dist/craft-entry.js +9 -0
- package/dist/craft-ssr.d.ts +147 -0
- package/dist/craft-ssr.js +559 -0
- package/dist/craft.js +9 -0
- package/dist/csp.d.ts +295 -0
- package/dist/csp.js +220 -0
- package/dist/csrf.d.ts +38 -0
- package/dist/csrf.js +38 -0
- package/dist/custom-directives.d.ts +5 -0
- package/dist/custom-directives.js +136 -0
- package/dist/database.d.ts +391 -0
- package/dist/database.js +5 -0
- package/dist/defer.d.ts +28 -0
- package/dist/defer.js +156 -0
- package/dist/deploy/config-generators.d.ts +75 -0
- package/dist/deploy/config-generators.js +214 -0
- package/dist/deploy/index.d.ts +88 -0
- package/dist/deploy/index.js +203 -0
- package/dist/deploy/netlify.d.ts +109 -0
- package/dist/deploy/netlify.js +167 -0
- package/dist/desktop.d.ts +16 -0
- package/dist/desktop.js +1 -0
- package/dist/dev-server/index.d.ts +22 -0
- package/dist/dev-server/index.js +7 -0
- package/dist/dev-server/keyboard-shortcuts.d.ts +34 -0
- package/dist/dev-server/keyboard-shortcuts.js +81 -0
- package/dist/dev-server/native-window.d.ts +59 -0
- package/dist/dev-server/native-window.js +91 -0
- package/dist/dev-server/port-utils.d.ts +27 -0
- package/dist/dev-server/port-utils.js +40 -0
- package/dist/dev-server/serve-app.d.ts +15 -0
- package/dist/dev-server/serve-app.js +727 -0
- package/dist/dev-server/serve-file.d.ts +3 -0
- package/dist/dev-server/serve-file.js +443 -0
- package/dist/dev-server/serve-markdown.d.ts +3 -0
- package/dist/dev-server/serve-markdown.js +284 -0
- package/dist/dev-server/serve-multi.d.ts +5 -0
- package/dist/dev-server/serve-multi.js +596 -0
- package/dist/dev-server/terminal-colors.d.ts +56 -0
- package/dist/dev-server/terminal-colors.js +45 -0
- package/dist/dev-server/theme-selector.d.ts +32 -0
- package/dist/dev-server/theme-selector.js +111 -0
- package/dist/dev-server/ts-css.d.ts +108 -0
- package/dist/dev-server/ts-css.js +438 -0
- package/dist/dev-server/types.d.ts +99 -0
- package/dist/dev-server/types.js +43 -0
- package/dist/dev-server.d.ts +6 -0
- package/dist/dev-server.js +4 -0
- package/dist/devtools.d.ts +182 -0
- package/dist/devtools.js +593 -0
- package/dist/directive-api.d.ts +154 -0
- package/dist/directive-api.js +355 -0
- package/dist/docs.d.ts +56 -0
- package/dist/docs.js +567 -0
- package/dist/doctor.d.ts +29 -0
- package/dist/doctor.js +123 -0
- package/dist/document-shell.d.ts +218 -0
- package/dist/document-shell.js +338 -0
- package/dist/dynamic-components.d.ts +23 -0
- package/dist/dynamic-components.js +197 -0
- package/dist/edge-runtime.d.ts +193 -0
- package/dist/edge-runtime.js +525 -0
- package/dist/env.d.ts +3 -0
- package/dist/env.js +9 -0
- package/dist/error-boundaries.d.ts +78 -0
- package/dist/error-boundaries.js +281 -0
- package/dist/error-handling.d.ts +14 -0
- package/dist/error-handling.js +1 -0
- package/dist/errors/codes.d.ts +92 -0
- package/dist/errors/codes.js +97 -0
- package/dist/errors/formatter.d.ts +84 -0
- package/dist/errors/formatter.js +196 -0
- package/dist/errors/index.d.ts +12 -0
- package/dist/errors/index.js +44 -0
- package/dist/errors/logger.d.ts +135 -0
- package/dist/errors/logger.js +250 -0
- package/dist/errors/sanitizer.d.ts +73 -0
- package/dist/errors/sanitizer.js +181 -0
- package/dist/errors/types.d.ts +92 -0
- package/dist/errors/types.js +86 -0
- package/dist/events.d.ts +145 -0
- package/dist/events.js +396 -0
- package/dist/expressions.d.ts +180 -0
- package/dist/expressions.js +719 -0
- package/dist/find-body-tag.d.ts +50 -0
- package/dist/find-body-tag.js +57 -0
- package/dist/formatter.d.ts +19 -0
- package/dist/formatter.js +265 -0
- package/dist/forms-validation.d.ts +189 -0
- package/dist/forms-validation.js +421 -0
- package/dist/forms.d.ts +224 -0
- package/dist/forms.js +729 -0
- package/dist/fragment-container.d.ts +57 -0
- package/dist/fragment-container.js +123 -0
- package/dist/framework-composables.d.ts +73 -0
- package/dist/framework-composables.js +126 -0
- package/dist/head-injection.d.ts +61 -0
- package/dist/head-injection.js +28 -0
- package/dist/head.d.ts +282 -0
- package/dist/head.js +231 -0
- package/dist/heatmap.d.ts +206 -0
- package/dist/heatmap.js +566 -0
- package/dist/hot-reload.d.ts +87 -0
- package/dist/hot-reload.js +373 -0
- package/dist/html-masking.d.ts +125 -0
- package/dist/html-masking.js +196 -0
- package/dist/hydration-runtime.d.ts +44 -0
- package/dist/hydration-runtime.js +195 -0
- package/dist/hydration.d.ts +135 -0
- package/dist/hydration.js +654 -0
- package/dist/i18n.d.ts +342 -0
- package/dist/i18n.js +678 -0
- package/dist/image-optimization/auto-sibling.d.ts +42 -0
- package/dist/image-optimization/auto-sibling.js +88 -0
- package/dist/image-optimization/build-plugin.d.ts +54 -0
- package/dist/image-optimization/build-plugin.js +241 -0
- package/dist/image-optimization/component.d.ts +46 -0
- package/dist/image-optimization/component.js +244 -0
- package/dist/image-optimization/directive.d.ts +30 -0
- package/dist/image-optimization/directive.js +203 -0
- package/dist/image-optimization/index.d.ts +156 -0
- package/dist/image-optimization/index.js +54 -0
- package/dist/image-optimization/processor.d.ts +140 -0
- package/dist/image-optimization/processor.js +262 -0
- package/dist/image-optimization/serve.d.ts +54 -0
- package/dist/image-optimization/serve.js +102 -0
- package/dist/import-rebase.d.ts +16 -0
- package/dist/import-rebase.js +16 -0
- package/dist/imported-signals.d.ts +43 -0
- package/dist/imported-signals.js +35 -0
- package/dist/includes.d.ts +171 -0
- package/dist/includes.js +764 -0
- package/dist/index.d.ts +365 -0
- package/dist/index.js +202 -0
- package/dist/init.d.ts +39 -0
- package/dist/init.js +505 -0
- package/dist/inline-assets.d.ts +28 -0
- package/dist/inline-assets.js +82 -0
- package/dist/interactive.d.ts +14 -0
- package/dist/interactive.js +383 -0
- package/dist/internal-markdown.d.ts +22 -0
- package/dist/internal-markdown.js +141 -0
- package/dist/island-chunking.d.ts +48 -0
- package/dist/island-chunking.js +52 -0
- package/dist/isolated-build.d.ts +12 -0
- package/dist/isolated-build.js +18 -0
- package/dist/js-ts.d.ts +10 -0
- package/dist/js-ts.js +60 -0
- package/dist/jsx-runtime.d.ts +92 -0
- package/dist/jsx-runtime.js +289 -0
- package/dist/keep-alive.d.ts +108 -0
- package/dist/keep-alive.js +421 -0
- package/dist/layout-types.d.ts +45 -0
- package/dist/layout-types.js +56 -0
- package/dist/lazy-loader.d.ts +90 -0
- package/dist/lazy-loader.js +245 -0
- package/dist/lazy-module.d.ts +11 -0
- package/dist/lazy-module.js +18 -0
- package/dist/loading-indicator.d.ts +50 -0
- package/dist/loading-indicator.js +322 -0
- package/dist/loops.d.ts +91 -0
- package/dist/loops.js +690 -0
- package/dist/manifest.d.ts +41 -0
- package/dist/manifest.js +31 -0
- package/dist/markdown-view.d.ts +25 -0
- package/dist/markdown-view.js +39 -0
- package/dist/markdown.d.ts +10 -0
- package/dist/markdown.js +68 -0
- package/dist/media/client/blur-up.d.ts +66 -0
- package/dist/media/client/blur-up.js +217 -0
- package/dist/media/client/index.d.ts +93 -0
- package/dist/media/client/index.js +53 -0
- package/dist/media/client/lazy-load.d.ts +74 -0
- package/dist/media/client/lazy-load.js +283 -0
- package/dist/media/client/upload-handler.d.ts +80 -0
- package/dist/media/client/upload-handler.js +354 -0
- package/dist/media/image/component.d.ts +60 -0
- package/dist/media/image/component.js +574 -0
- package/dist/media/image/directive.d.ts +23 -0
- package/dist/media/image/directive.js +160 -0
- package/dist/media/image/editing.d.ts +212 -0
- package/dist/media/image/editing.js +193 -0
- package/dist/media/image/index.d.ts +142 -0
- package/dist/media/image/index.js +80 -0
- package/dist/media/image/placeholder.d.ts +89 -0
- package/dist/media/image/placeholder.js +188 -0
- package/dist/media/image/processor/cache.d.ts +53 -0
- package/dist/media/image/processor/cache.js +51 -0
- package/dist/media/image/processor/index.d.ts +11 -0
- package/dist/media/image/processor/index.js +3 -0
- package/dist/media/image/processor/optimizer.d.ts +24 -0
- package/dist/media/image/processor/optimizer.js +202 -0
- package/dist/media/image/processor/responsive.d.ts +28 -0
- package/dist/media/image/processor/responsive.js +162 -0
- package/dist/media/image/srcset.d.ts +157 -0
- package/dist/media/image/srcset.js +194 -0
- package/dist/media/index.d.ts +331 -0
- package/dist/media/index.js +198 -0
- package/dist/media/manager/embed.d.ts +25 -0
- package/dist/media/manager/embed.js +253 -0
- package/dist/media/protected/component.d.ts +33 -0
- package/dist/media/protected/component.js +235 -0
- package/dist/media/protected/index.d.ts +47 -0
- package/dist/media/protected/index.js +20 -0
- package/dist/media/protected/signature.d.ts +72 -0
- package/dist/media/protected/signature.js +205 -0
- package/dist/media/shared/cache.d.ts +76 -0
- package/dist/media/shared/cache.js +132 -0
- package/dist/media/shared/hash.d.ts +31 -0
- package/dist/media/shared/hash.js +35 -0
- package/dist/media/shared/index.d.ts +7 -0
- package/dist/media/shared/index.js +2 -0
- package/dist/media/types.d.ts +1477 -0
- package/dist/media/types.js +0 -0
- package/dist/media/upload/component.d.ts +9 -0
- package/dist/media/upload/component.js +320 -0
- package/dist/media/upload/index.d.ts +8 -0
- package/dist/media/upload/index.js +1 -0
- package/dist/media/video/directive.d.ts +23 -0
- package/dist/media/video/directive.js +142 -0
- package/dist/media/video/index.d.ts +76 -0
- package/dist/media/video/index.js +583 -0
- package/dist/media/video/processor/cache.d.ts +55 -0
- package/dist/media/video/processor/cache.js +52 -0
- package/dist/media/video/processor/index.d.ts +12 -0
- package/dist/media/video/processor/index.js +4 -0
- package/dist/media/video/processor/streaming.d.ts +26 -0
- package/dist/media/video/processor/streaming.js +197 -0
- package/dist/media/video/processor/thumbnail.d.ts +35 -0
- package/dist/media/video/processor/thumbnail.js +134 -0
- package/dist/media/video/processor/transcoder.d.ts +19 -0
- package/dist/media/video/processor/transcoder.js +283 -0
- package/dist/menubar.d.ts +65 -0
- package/dist/menubar.js +99 -0
- package/dist/method-spoofing.d.ts +20 -0
- package/dist/method-spoofing.js +17 -0
- package/dist/middleware.d.ts +112 -0
- package/dist/middleware.js +40 -0
- package/dist/misc-directives.d.ts +55 -0
- package/dist/misc-directives.js +328 -0
- package/dist/native-build.d.ts +88 -0
- package/dist/native-build.js +575 -0
- package/dist/owned-routes.d.ts +42 -0
- package/dist/owned-routes.js +26 -0
- package/dist/page-action.d.ts +73 -0
- package/dist/page-action.js +91 -0
- package/dist/page-meta.d.ts +38 -0
- package/dist/page-meta.js +16 -0
- package/dist/page-response.d.ts +120 -0
- package/dist/page-response.js +117 -0
- package/dist/parser/directive-parser.d.ts +119 -0
- package/dist/parser/directive-parser.js +249 -0
- package/dist/parser/expression-parser.d.ts +58 -0
- package/dist/parser/expression-parser.js +358 -0
- package/dist/parser/index.d.ts +13 -0
- package/dist/parser/index.js +23 -0
- package/dist/parser/tokenizer.d.ts +77 -0
- package/dist/parser/tokenizer.js +534 -0
- package/dist/partial-hydration.d.ts +123 -0
- package/dist/partial-hydration.js +427 -0
- package/dist/performance-utils.d.ts +318 -0
- package/dist/performance-utils.js +466 -0
- package/dist/placeholder.d.ts +54 -0
- package/dist/placeholder.js +35 -0
- package/dist/plugin-system.d.ts +301 -0
- package/dist/plugin-system.js +214 -0
- package/dist/plugin.d.ts +3 -0
- package/dist/plugin.js +174 -0
- package/dist/precompiler.d.ts +43 -0
- package/dist/precompiler.js +670 -0
- package/dist/process.d.ts +16 -0
- package/dist/process.js +879 -0
- package/dist/production-build.d.ts +163 -0
- package/dist/production-build.js +596 -0
- package/dist/production-builder.d.ts +42 -0
- package/dist/production-builder.js +146 -0
- package/dist/production-server.d.ts +19 -0
- package/dist/production-server.js +208 -0
- package/dist/prop-sentinels.d.ts +31 -0
- package/dist/prop-sentinels.js +7 -0
- package/dist/props.d.ts +216 -0
- package/dist/props.js +224 -0
- package/dist/public-env.d.ts +29 -0
- package/dist/public-env.js +19 -0
- package/dist/pwa/audit.d.ts +42 -0
- package/dist/pwa/audit.js +255 -0
- package/dist/pwa/directives.d.ts +38 -0
- package/dist/pwa/directives.js +332 -0
- package/dist/pwa/icons.d.ts +42 -0
- package/dist/pwa/icons.js +109 -0
- package/dist/pwa/index.d.ts +104 -0
- package/dist/pwa/index.js +47 -0
- package/dist/pwa/inject.d.ts +32 -0
- package/dist/pwa/inject.js +102 -0
- package/dist/pwa/manifest.d.ts +104 -0
- package/dist/pwa/manifest.js +186 -0
- package/dist/pwa/offline.d.ts +8 -0
- package/dist/pwa/offline.js +259 -0
- package/dist/pwa/precache.d.ts +35 -0
- package/dist/pwa/precache.js +116 -0
- package/dist/pwa/service-worker.d.ts +33 -0
- package/dist/pwa/service-worker.js +860 -0
- package/dist/pwa/workbox-strategies.d.ts +100 -0
- package/dist/pwa/workbox-strategies.js +167 -0
- package/dist/pwa/workbox.d.ts +51 -0
- package/dist/pwa/workbox.js +382 -0
- package/dist/pwa.d.ts +52 -0
- package/dist/pwa.js +236 -0
- package/dist/reactive-bindings.d.ts +47 -0
- package/dist/reactive-bindings.js +268 -0
- package/dist/reactive-tracking.d.ts +81 -0
- package/dist/reactive-tracking.js +49 -0
- package/dist/reactive.d.ts +117 -0
- package/dist/reactive.js +593 -0
- package/dist/reactivity.d.ts +206 -0
- package/dist/reactivity.js +574 -0
- package/dist/release.d.ts +1 -0
- package/dist/release.js +1 -0
- package/dist/render-memo.d.ts +40 -0
- package/dist/render-memo.js +33 -0
- package/dist/render.d.ts +54 -0
- package/dist/render.js +153 -0
- package/dist/resolve-stx-targets.d.ts +49 -0
- package/dist/resolve-stx-targets.js +38 -0
- package/dist/route-middleware.d.ts +2 -0
- package/dist/route-middleware.js +17 -0
- package/dist/route-types.d.ts +134 -0
- package/dist/route-types.js +24 -0
- package/dist/router.d.ts +9 -0
- package/dist/router.js +9 -0
- package/dist/routes.d.ts +6 -0
- package/dist/routes.js +14 -0
- package/dist/runtime-globals.d.ts +236 -0
- package/dist/runtime-globals.js +230 -0
- package/dist/runtime-injection.d.ts +113 -0
- package/dist/runtime-injection.js +156 -0
- package/dist/runtime.d.ts +140 -0
- package/dist/runtime.js +94 -0
- package/dist/safe-evaluator.d.ts +165 -0
- package/dist/safe-evaluator.js +461 -0
- package/dist/scaffolding.d.ts +113 -0
- package/dist/scaffolding.js +897 -0
- package/dist/screenshot.d.ts +22 -0
- package/dist/screenshot.js +100 -0
- package/dist/script-classifier.d.ts +41 -0
- package/dist/script-classifier.js +51 -0
- package/dist/script-emit.d.ts +50 -0
- package/dist/script-emit.js +11 -0
- package/dist/script-json.d.ts +36 -0
- package/dist/script-json.js +6 -0
- package/dist/script-validation.d.ts +26 -0
- package/dist/script-validation.js +179 -0
- package/dist/seo.d.ts +225 -0
- package/dist/seo.js +486 -0
- package/dist/serve.d.ts +44 -0
- package/dist/serve.js +233 -0
- package/dist/server-bindings.d.ts +39 -0
- package/dist/server-bindings.js +171 -0
- package/dist/server-components.d.ts +138 -0
- package/dist/server-components.js +427 -0
- package/dist/sfc-template.d.ts +17 -0
- package/dist/sfc-template.js +32 -0
- package/dist/signal-processing.d.ts +222 -0
- package/dist/signal-processing.js +1081 -0
- package/dist/signals-api.d.ts +459 -0
- package/dist/signals-api.js +172 -0
- package/dist/signals.d.ts +41 -0
- package/dist/signals.js +8233 -0
- package/dist/site-builder/build.d.ts +18 -0
- package/dist/site-builder/build.js +252 -0
- package/dist/site-builder/i18n.d.ts +104 -0
- package/dist/site-builder/i18n.js +150 -0
- package/dist/site-builder/index.d.ts +27 -0
- package/dist/site-builder/index.js +16 -0
- package/dist/site-builder/robots.d.ts +2 -0
- package/dist/site-builder/robots.js +26 -0
- package/dist/site-builder/router.d.ts +10 -0
- package/dist/site-builder/router.js +27 -0
- package/dist/site-builder/seo.d.ts +8 -0
- package/dist/site-builder/seo.js +67 -0
- package/dist/site-builder/sitemap.d.ts +10 -0
- package/dist/site-builder/sitemap.js +26 -0
- package/dist/site-builder/theme.d.ts +12 -0
- package/dist/site-builder/theme.js +38 -0
- package/dist/site-builder/types.d.ts +74 -0
- package/dist/site-builder/types.js +0 -0
- package/dist/site-url.d.ts +46 -0
- package/dist/site-url.js +70 -0
- package/dist/slots.d.ts +129 -0
- package/dist/slots.js +286 -0
- package/dist/source-maps.d.ts +98 -0
- package/dist/source-maps.js +350 -0
- package/dist/source-signature.d.ts +45 -0
- package/dist/source-signature.js +20 -0
- package/dist/spa-nav.d.ts +49 -0
- package/dist/spa-nav.js +12 -0
- package/dist/spa-shell.d.ts +21 -0
- package/dist/spa-shell.js +34 -0
- package/dist/ssg.d.ts +357 -0
- package/dist/ssg.js +94 -0
- package/dist/ssr.d.ts +116 -0
- package/dist/ssr.js +339 -0
- package/dist/state-dir.d.ts +36 -0
- package/dist/state-dir.js +22 -0
- package/dist/state-management.d.ts +299 -0
- package/dist/state-management.js +519 -0
- package/dist/store-imports.d.ts +47 -0
- package/dist/store-imports.js +16 -0
- package/dist/store-loader.d.ts +15 -0
- package/dist/store-loader.js +111 -0
- package/dist/stores-client.d.ts +70 -0
- package/dist/stores-client.js +132 -0
- package/dist/story/addons.d.ts +123 -0
- package/dist/story/addons.js +261 -0
- package/dist/story/analytics.d.ts +163 -0
- package/dist/story/analytics.js +235 -0
- package/dist/story/auto-stories.d.ts +38 -0
- package/dist/story/auto-stories.js +158 -0
- package/dist/story/bookmarks.d.ts +102 -0
- package/dist/story/bookmarks.js +277 -0
- package/dist/story/bun-test.d.ts +45 -0
- package/dist/story/bun-test.js +102 -0
- package/dist/story/cli.d.ts +132 -0
- package/dist/story/cli.js +155 -0
- package/dist/story/collect/analyzer.d.ts +33 -0
- package/dist/story/collect/analyzer.js +305 -0
- package/dist/story/collect/index.d.ts +31 -0
- package/dist/story/collect/index.js +27 -0
- package/dist/story/collect/parser.d.ts +17 -0
- package/dist/story/collect/parser.js +129 -0
- package/dist/story/collect/scanner.d.ts +17 -0
- package/dist/story/collect/scanner.js +101 -0
- package/dist/story/collect/tree.d.ts +24 -0
- package/dist/story/collect/tree.js +110 -0
- package/dist/story/commands/build.d.ts +19 -0
- package/dist/story/commands/build.js +172 -0
- package/dist/story/commands/dev.d.ts +23 -0
- package/dist/story/commands/dev.js +78 -0
- package/dist/story/commands/index.d.ts +9 -0
- package/dist/story/commands/index.js +3 -0
- package/dist/story/commands/preview.d.ts +21 -0
- package/dist/story/commands/preview.js +56 -0
- package/dist/story/compiled-output.d.ts +27 -0
- package/dist/story/compiled-output.js +151 -0
- package/dist/story/composition.d.ts +47 -0
- package/dist/story/composition.js +261 -0
- package/dist/story/config-watcher.d.ts +33 -0
- package/dist/story/config-watcher.js +67 -0
- package/dist/story/config.d.ts +29 -0
- package/dist/story/config.js +64 -0
- package/dist/story/context.d.ts +27 -0
- package/dist/story/context.js +27 -0
- package/dist/story/controls/index.d.ts +54 -0
- package/dist/story/controls/index.js +320 -0
- package/dist/story/desktop-preview.d.ts +34 -0
- package/dist/story/desktop-preview.js +105 -0
- package/dist/story/docs-generator.d.ts +30 -0
- package/dist/story/docs-generator.js +187 -0
- package/dist/story/errors.d.ts +47 -0
- package/dist/story/errors.js +239 -0
- package/dist/story/figma-export.d.ts +169 -0
- package/dist/story/figma-export.js +224 -0
- package/dist/story/generator.d.ts +21 -0
- package/dist/story/generator.js +165 -0
- package/dist/story/hmr.d.ts +62 -0
- package/dist/story/hmr.js +131 -0
- package/dist/story/hot-swap.d.ts +46 -0
- package/dist/story/hot-swap.js +207 -0
- package/dist/story/index.d.ts +99 -0
- package/dist/story/index.js +49 -0
- package/dist/story/interactions.d.ts +53 -0
- package/dist/story/interactions.js +225 -0
- package/dist/story/keyboard-shortcuts.d.ts +39 -0
- package/dist/story/keyboard-shortcuts.js +345 -0
- package/dist/story/output.d.ts +115 -0
- package/dist/story/output.js +153 -0
- package/dist/story/performance.d.ts +129 -0
- package/dist/story/performance.js +252 -0
- package/dist/story/presets.d.ts +123 -0
- package/dist/story/presets.js +289 -0
- package/dist/story/props-validation.d.ts +45 -0
- package/dist/story/props-validation.js +215 -0
- package/dist/story/renderer.d.ts +69 -0
- package/dist/story/renderer.js +209 -0
- package/dist/story/search-index.d.ts +47 -0
- package/dist/story/search-index.js +106 -0
- package/dist/story/search.d.ts +56 -0
- package/dist/story/search.js +140 -0
- package/dist/story/server.d.ts +31 -0
- package/dist/story/server.js +965 -0
- package/dist/story/setup.d.ts +56 -0
- package/dist/story/setup.js +78 -0
- package/dist/story/snapshots.d.ts +65 -0
- package/dist/story/snapshots.js +171 -0
- package/dist/story/testing.d.ts +83 -0
- package/dist/story/testing.js +164 -0
- package/dist/story/theme.d.ts +68 -0
- package/dist/story/theme.js +170 -0
- package/dist/story/ts-css.d.ts +29 -0
- package/dist/story/ts-css.js +189 -0
- package/dist/story/types.d.ts +342 -0
- package/dist/story/types.js +0 -0
- package/dist/story/ui/code-panel.d.ts +43 -0
- package/dist/story/ui/code-panel.js +175 -0
- package/dist/story/ui/controls-panel.d.ts +25 -0
- package/dist/story/ui/controls-panel.js +168 -0
- package/dist/story/ui/index.d.ts +8 -0
- package/dist/story/ui/index.js +4 -0
- package/dist/story/ui/navigation.d.ts +55 -0
- package/dist/story/ui/navigation.js +250 -0
- package/dist/story/ui/preview.d.ts +46 -0
- package/dist/story/ui/preview.js +251 -0
- package/dist/story/visual-testing.d.ts +45 -0
- package/dist/story/visual-testing.js +248 -0
- package/dist/streaming.d.ts +238 -0
- package/dist/streaming.js +537 -0
- package/dist/strict-lint.d.ts +52 -0
- package/dist/strict-lint.js +269 -0
- package/dist/strip-literals.d.ts +40 -0
- package/dist/strip-literals.js +149 -0
- package/dist/stx-virtual-ts.d.ts +358 -0
- package/dist/stx-virtual-ts.js +670 -0
- package/dist/stx.d.ts +924 -0
- package/dist/style-scoping.d.ts +42 -0
- package/dist/style-scoping.js +82 -0
- package/dist/suspense.d.ts +98 -0
- package/dist/suspense.js +398 -0
- package/dist/teleport.d.ts +31 -0
- package/dist/teleport.js +109 -0
- package/dist/template-compiler.d.ts +33 -0
- package/dist/template-compiler.js +68 -0
- package/dist/template-hydrator.d.ts +28 -0
- package/dist/template-hydrator.js +95 -0
- package/dist/template-tag-balance.d.ts +32 -0
- package/dist/template-tag-balance.js +93 -0
- package/dist/testing.d.ts +330 -0
- package/dist/testing.js +588 -0
- package/dist/theme-tokens.d.ts +88 -0
- package/dist/theme-tokens.js +71 -0
- package/dist/transitions.d.ts +99 -0
- package/dist/transitions.js +443 -0
- package/dist/ts-css-config.d.ts +71 -0
- package/dist/ts-css-config.js +44 -0
- package/dist/type-checker.d.ts +85 -0
- package/dist/type-checker.js +581 -0
- package/dist/typecheck.d.ts +70 -0
- package/dist/typecheck.js +365 -0
- package/dist/types/component-types.d.ts +248 -0
- package/dist/types/component-types.js +0 -0
- package/dist/types/config-types.d.ts +938 -0
- package/dist/types/config-types.js +0 -0
- package/dist/types/context-types.d.ts +122 -0
- package/dist/types/context-types.js +0 -0
- package/dist/types/csp-types.d.ts +83 -0
- package/dist/types/csp-types.js +0 -0
- package/dist/types/directive-types.d.ts +315 -0
- package/dist/types/directive-types.js +3 -0
- package/dist/types/index.d.ts +20 -0
- package/dist/types/index.js +1 -0
- package/dist/types/pwa-types.d.ts +338 -0
- package/dist/types/pwa-types.js +0 -0
- package/dist/types.d.ts +27 -0
- package/dist/types.js +1 -0
- package/dist/typescript-templates.d.ts +156 -0
- package/dist/typescript-templates.js +386 -0
- package/dist/unresolved-identifiers.d.ts +52 -0
- package/dist/unresolved-identifiers.js +148 -0
- package/dist/utils.d.ts +112 -0
- package/dist/utils.js +1170 -0
- package/dist/validator.d.ts +80 -0
- package/dist/validator.js +171 -0
- package/dist/variable-extractor.d.ts +142 -0
- package/dist/variable-extractor.js +1306 -0
- package/dist/view-composers.d.ts +171 -0
- package/dist/view-composers.js +29 -0
- package/dist/virtual-scrolling.d.ts +127 -0
- package/dist/virtual-scrolling.js +454 -0
- package/dist/visual-editor.d.ts +185 -0
- package/dist/visual-editor.js +735 -0
- package/dist/visual-testing.d.ts +135 -0
- package/dist/visual-testing.js +126 -0
- package/dist/vue-template.d.ts +39 -0
- package/dist/vue-template.js +476 -0
- package/dist/web-components/css-scoping.d.ts +64 -0
- package/dist/web-components/css-scoping.js +210 -0
- package/dist/web-components/index.d.ts +29 -0
- package/dist/web-components/index.js +13 -0
- package/dist/web-components/reactive-generator.d.ts +72 -0
- package/dist/web-components/reactive-generator.js +484 -0
- package/dist/web-components.d.ts +253 -0
- package/dist/web-components.js +1466 -0
- package/dist/x-element.d.ts +42 -0
- package/dist/x-element.js +301 -0
- package/package.json +107 -0
- package/stx.d.ts +924 -0
|
@@ -0,0 +1,860 @@
|
|
|
1
|
+
var {require}=import.meta;import { formatSize, generatePrecacheManifest, generatePrecacheManifestJs } from "./precache.js";
|
|
2
|
+
export function generateServiceWorker(options, outputDir) {
|
|
3
|
+
const pwa = options.pwa;
|
|
4
|
+
if (!pwa?.enabled)
|
|
5
|
+
return "";
|
|
6
|
+
const swConfig = pwa.serviceWorker || {}, routes = pwa.routes || [], cacheVersion = swConfig.cacheVersion || "1.0.0", offlineConfig = pwa.offline, offlinePage = offlineConfig?.page ? "/offline.html" : "/offline.html", pushConfig = pwa.push, syncConfig = pwa.backgroundSync, cacheStorageConfig = pwa.cacheStorage, precacheManifest = outputDir ? generatePrecacheManifest(outputDir, options) : null, precacheManifestJs = precacheManifest ? generatePrecacheManifestJs(precacheManifest) : "[]", precacheAssets = [
|
|
7
|
+
"/",
|
|
8
|
+
"/manifest.json",
|
|
9
|
+
...offlineConfig?.enabled ? [offlinePage] : [],
|
|
10
|
+
...offlineConfig?.precacheAssets || []
|
|
11
|
+
];
|
|
12
|
+
return `/**
|
|
13
|
+
* Service Worker - Auto-generated by stx
|
|
14
|
+
* Cache Version: ${cacheVersion}
|
|
15
|
+
*
|
|
16
|
+
* This service worker implements configurable caching strategies:
|
|
17
|
+
* - cache-first: Serve from cache, fall back to network
|
|
18
|
+
* - network-first: Try network, fall back to cache
|
|
19
|
+
* - stale-while-revalidate: Serve cached, update in background
|
|
20
|
+
* - network-only: Always fetch from network
|
|
21
|
+
* - cache-only: Only serve from cache
|
|
22
|
+
*
|
|
23
|
+
* Additional features:
|
|
24
|
+
* - Push notifications: ${pushConfig?.enabled ? "enabled" : "disabled"}
|
|
25
|
+
* - Background sync: ${syncConfig?.enabled ? "enabled" : "disabled"}
|
|
26
|
+
* - Cache limits: ${cacheStorageConfig?.maxSize ? `${formatSize(cacheStorageConfig.maxSize * 1024 * 1024)}` : "unlimited"}
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
const CACHE_VERSION = '${cacheVersion}';
|
|
30
|
+
const CACHE_NAME = 'stx-pwa-v' + CACHE_VERSION;
|
|
31
|
+
const OFFLINE_PAGE = '${offlinePage}';
|
|
32
|
+
|
|
33
|
+
// Assets to precache on install
|
|
34
|
+
const PRECACHE_ASSETS = ${JSON.stringify(precacheAssets, null, 2)};
|
|
35
|
+
|
|
36
|
+
// Auto-generated precache manifest from build output
|
|
37
|
+
const BUILD_PRECACHE_MANIFEST = ${precacheManifestJs};
|
|
38
|
+
|
|
39
|
+
// Route caching strategies
|
|
40
|
+
const ROUTE_STRATEGIES = ${JSON.stringify(routes, null, 2)};
|
|
41
|
+
|
|
42
|
+
// Routes to exclude from caching
|
|
43
|
+
const EXCLUDED_ROUTES = ${JSON.stringify(swConfig.excludeRoutes || [], null, 2)};
|
|
44
|
+
|
|
45
|
+
// Cache storage configuration
|
|
46
|
+
const CACHE_CONFIG = {
|
|
47
|
+
maxSize: ${cacheStorageConfig?.maxSize || 0} * 1024 * 1024, // Convert MB to bytes
|
|
48
|
+
maxAge: ${cacheStorageConfig?.maxAge || 0} * 24 * 60 * 60 * 1000, // Convert days to ms
|
|
49
|
+
maxEntries: ${cacheStorageConfig?.maxEntries || 0},
|
|
50
|
+
purgeStrategy: '${cacheStorageConfig?.purgeStrategy || "lru"}',
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
// Background sync configuration
|
|
54
|
+
const SYNC_CONFIG = {
|
|
55
|
+
enabled: ${syncConfig?.enabled || !1},
|
|
56
|
+
queueName: '${syncConfig?.queueName || "stx-sync-queue"}',
|
|
57
|
+
maxRetries: ${syncConfig?.maxRetries || 3},
|
|
58
|
+
minInterval: ${syncConfig?.minInterval || 1000},
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
// Push notification configuration
|
|
62
|
+
const PUSH_CONFIG = {
|
|
63
|
+
enabled: ${pushConfig?.enabled || !1},
|
|
64
|
+
defaultIcon: '${pushConfig?.defaultIcon || "/pwa-icons/icon-192x192.png"}',
|
|
65
|
+
defaultBadge: '${pushConfig?.defaultBadge || "/pwa-icons/icon-72x72.png"}',
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Install event - precache essential assets
|
|
70
|
+
*/
|
|
71
|
+
self.addEventListener('install', (event) => {
|
|
72
|
+
console.log('[SW] Installing service worker...');
|
|
73
|
+
${swConfig.skipWaiting ? "self.skipWaiting();" : ""}
|
|
74
|
+
|
|
75
|
+
event.waitUntil(
|
|
76
|
+
caches.open(CACHE_NAME).then(async (cache) => {
|
|
77
|
+
// Combine manual precache assets with auto-generated manifest
|
|
78
|
+
const allAssets = [...PRECACHE_ASSETS];
|
|
79
|
+
|
|
80
|
+
// Add build precache manifest entries
|
|
81
|
+
for (const entry of BUILD_PRECACHE_MANIFEST) {
|
|
82
|
+
if (!allAssets.includes(entry.url)) {
|
|
83
|
+
allAssets.push(entry.url);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
console.log('[SW] Precaching assets:', allAssets.length);
|
|
88
|
+
|
|
89
|
+
// Cache assets one by one to handle failures gracefully
|
|
90
|
+
const results = await Promise.allSettled(
|
|
91
|
+
allAssets.map(async (url) => {
|
|
92
|
+
try {
|
|
93
|
+
const response = await fetch(url);
|
|
94
|
+
if (response.ok) {
|
|
95
|
+
await cache.put(url, response);
|
|
96
|
+
return { url, success: true };
|
|
97
|
+
}
|
|
98
|
+
return { url, success: false, reason: response.status };
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
return { url, success: false, reason: error.message };
|
|
102
|
+
}
|
|
103
|
+
})
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
const failed = results.filter(r => r.status === 'rejected' || (r.status === 'fulfilled' && !r.value.success));
|
|
107
|
+
if (failed.length > 0) {
|
|
108
|
+
console.warn('[SW] Failed to precache some assets:', failed.length);
|
|
109
|
+
}
|
|
110
|
+
})
|
|
111
|
+
);
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Activate event - clean up old caches
|
|
116
|
+
*/
|
|
117
|
+
self.addEventListener('activate', (event) => {
|
|
118
|
+
console.log('[SW] Activating service worker...');
|
|
119
|
+
${swConfig.clientsClaim ? "self.clients.claim();" : ""}
|
|
120
|
+
|
|
121
|
+
event.waitUntil(
|
|
122
|
+
(async () => {
|
|
123
|
+
// Clean up old caches
|
|
124
|
+
const cacheNames = await caches.keys();
|
|
125
|
+
await Promise.all(
|
|
126
|
+
cacheNames
|
|
127
|
+
.filter((name) => name.startsWith('stx-pwa-') && name !== CACHE_NAME)
|
|
128
|
+
.map((name) => {
|
|
129
|
+
console.log('[SW] Deleting old cache:', name);
|
|
130
|
+
return caches.delete(name);
|
|
131
|
+
})
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
// Enforce cache storage limits
|
|
135
|
+
if (CACHE_CONFIG.maxSize > 0 || CACHE_CONFIG.maxEntries > 0) {
|
|
136
|
+
await enforceCacheLimits();
|
|
137
|
+
}
|
|
138
|
+
})()
|
|
139
|
+
);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Fetch event - apply caching strategies
|
|
144
|
+
*/
|
|
145
|
+
self.addEventListener('fetch', (event) => {
|
|
146
|
+
const { request } = event;
|
|
147
|
+
const url = new URL(request.url);
|
|
148
|
+
|
|
149
|
+
// Only handle GET requests
|
|
150
|
+
if (request.method !== 'GET') {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Skip cross-origin requests
|
|
155
|
+
if (url.origin !== location.origin) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Skip excluded routes
|
|
160
|
+
if (isExcludedRoute(url.pathname)) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Find matching strategy and apply
|
|
165
|
+
const routeConfig = getRouteConfig(url.pathname);
|
|
166
|
+
event.respondWith(applyStrategy(request, routeConfig));
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Message event - handle messages from main thread
|
|
171
|
+
*/
|
|
172
|
+
self.addEventListener('message', (event) => {
|
|
173
|
+
const { type, payload } = event.data || {};
|
|
174
|
+
|
|
175
|
+
switch (type) {
|
|
176
|
+
case 'SKIP_WAITING':
|
|
177
|
+
console.log('[SW] Received SKIP_WAITING message');
|
|
178
|
+
self.skipWaiting();
|
|
179
|
+
break;
|
|
180
|
+
|
|
181
|
+
case 'CACHE_URLS':
|
|
182
|
+
if (Array.isArray(payload)) {
|
|
183
|
+
event.waitUntil(
|
|
184
|
+
caches.open(CACHE_NAME).then((cache) => cache.addAll(payload))
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
break;
|
|
188
|
+
|
|
189
|
+
case 'CLEAR_CACHE':
|
|
190
|
+
event.waitUntil(
|
|
191
|
+
caches.keys().then((names) =>
|
|
192
|
+
Promise.all(names.map((name) => caches.delete(name)))
|
|
193
|
+
)
|
|
194
|
+
);
|
|
195
|
+
break;
|
|
196
|
+
|
|
197
|
+
case 'GET_CACHE_SIZE':
|
|
198
|
+
event.waitUntil(
|
|
199
|
+
getCacheSize().then((size) => {
|
|
200
|
+
event.source?.postMessage({ type: 'CACHE_SIZE', payload: size });
|
|
201
|
+
})
|
|
202
|
+
);
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
${pushConfig?.enabled ? generatePushHandlers() : "// Push notifications disabled"}
|
|
208
|
+
|
|
209
|
+
${syncConfig?.enabled ? generateSyncHandlers() : "// Background sync disabled"}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Check if a route should be excluded from caching
|
|
213
|
+
*/
|
|
214
|
+
function isExcludedRoute(pathname) {
|
|
215
|
+
return EXCLUDED_ROUTES.some((pattern) => matchPattern(pathname, pattern));
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Match a path against a glob pattern
|
|
220
|
+
* Supports: *.ext, /path/*, /path/**, exact matches
|
|
221
|
+
*/
|
|
222
|
+
function matchPattern(path, pattern) {
|
|
223
|
+
// Handle file extension patterns like *.js, *.css
|
|
224
|
+
if (pattern.startsWith('*.')) {
|
|
225
|
+
return path.endsWith(pattern.slice(1));
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// Handle patterns ending with /**
|
|
229
|
+
if (pattern.endsWith('/**')) {
|
|
230
|
+
const prefix = pattern.slice(0, -3);
|
|
231
|
+
return path.startsWith(prefix);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Handle patterns ending with /*
|
|
235
|
+
if (pattern.endsWith('/*')) {
|
|
236
|
+
const prefix = pattern.slice(0, -2);
|
|
237
|
+
if (!path.startsWith(prefix)) return false;
|
|
238
|
+
const rest = path.slice(prefix.length);
|
|
239
|
+
return rest.length > 0 && !rest.slice(1).includes('/');
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// Handle patterns with * in the middle
|
|
243
|
+
if (pattern.includes('*')) {
|
|
244
|
+
const parts = pattern.split('*');
|
|
245
|
+
if (parts.length === 2) {
|
|
246
|
+
return path.startsWith(parts[0]) && path.endsWith(parts[1]);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Exact match
|
|
251
|
+
return path === pattern;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Get the cache configuration for a given path
|
|
256
|
+
*/
|
|
257
|
+
function getRouteConfig(pathname) {
|
|
258
|
+
for (const route of ROUTE_STRATEGIES) {
|
|
259
|
+
if (matchPattern(pathname, route.pattern)) {
|
|
260
|
+
return route;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// Default to network-first for unmatched routes
|
|
264
|
+
return { strategy: 'network-first' };
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Apply the appropriate caching strategy
|
|
269
|
+
*/
|
|
270
|
+
async function applyStrategy(request, routeConfig) {
|
|
271
|
+
const { strategy, cacheName, maxAgeSeconds, maxEntries } = routeConfig;
|
|
272
|
+
const cache = await caches.open(cacheName || CACHE_NAME);
|
|
273
|
+
|
|
274
|
+
switch (strategy) {
|
|
275
|
+
case 'cache-first':
|
|
276
|
+
return cacheFirst(request, cache, maxAgeSeconds);
|
|
277
|
+
|
|
278
|
+
case 'network-first':
|
|
279
|
+
return networkFirst(request, cache);
|
|
280
|
+
|
|
281
|
+
case 'stale-while-revalidate':
|
|
282
|
+
return staleWhileRevalidate(request, cache);
|
|
283
|
+
|
|
284
|
+
case 'network-only':
|
|
285
|
+
return networkOnly(request);
|
|
286
|
+
|
|
287
|
+
case 'cache-only':
|
|
288
|
+
return cacheOnly(request, cache);
|
|
289
|
+
|
|
290
|
+
default:
|
|
291
|
+
return networkFirst(request, cache);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Cache-first strategy
|
|
297
|
+
* Serve from cache if available, otherwise fetch from network
|
|
298
|
+
*/
|
|
299
|
+
async function cacheFirst(request, cache, maxAge) {
|
|
300
|
+
const cached = await cache.match(request);
|
|
301
|
+
|
|
302
|
+
if (cached) {
|
|
303
|
+
// Check if cache is still valid (if maxAge is set)
|
|
304
|
+
if (maxAge) {
|
|
305
|
+
const cachedDate = cached.headers.get('sw-cache-date');
|
|
306
|
+
if (cachedDate) {
|
|
307
|
+
const age = (Date.now() - new Date(cachedDate).getTime()) / 1000;
|
|
308
|
+
if (age > maxAge) {
|
|
309
|
+
// Cache expired, fetch fresh
|
|
310
|
+
return fetchAndCache(request, cache);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
return cached;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
return fetchAndCache(request, cache);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Network-first strategy
|
|
322
|
+
* Try network first, fall back to cache if offline
|
|
323
|
+
*/
|
|
324
|
+
async function networkFirst(request, cache) {
|
|
325
|
+
try {
|
|
326
|
+
const response = await fetch(request);
|
|
327
|
+
if (response.ok) {
|
|
328
|
+
const cloned = response.clone();
|
|
329
|
+
cache.put(request, cloned);
|
|
330
|
+
}
|
|
331
|
+
return response;
|
|
332
|
+
}
|
|
333
|
+
catch (error) {
|
|
334
|
+
const cached = await cache.match(request);
|
|
335
|
+
if (cached) {
|
|
336
|
+
return cached;
|
|
337
|
+
}
|
|
338
|
+
return offlineResponse(request);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Stale-while-revalidate strategy
|
|
344
|
+
* Serve cached immediately, update cache in background
|
|
345
|
+
*/
|
|
346
|
+
async function staleWhileRevalidate(request, cache) {
|
|
347
|
+
const cached = await cache.match(request);
|
|
348
|
+
|
|
349
|
+
// Fetch in background to update cache
|
|
350
|
+
const fetchPromise = fetch(request)
|
|
351
|
+
.then((response) => {
|
|
352
|
+
if (response.ok) {
|
|
353
|
+
cache.put(request, response.clone());
|
|
354
|
+
}
|
|
355
|
+
return response;
|
|
356
|
+
})
|
|
357
|
+
.catch(() => null);
|
|
358
|
+
|
|
359
|
+
// Return cached immediately if available, otherwise wait for fetch
|
|
360
|
+
if (cached) {
|
|
361
|
+
return cached;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
const response = await fetchPromise;
|
|
365
|
+
return response || offlineResponse(request);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Network-only strategy
|
|
370
|
+
* Always fetch from network, no caching
|
|
371
|
+
*/
|
|
372
|
+
async function networkOnly(request) {
|
|
373
|
+
try {
|
|
374
|
+
return await fetch(request);
|
|
375
|
+
}
|
|
376
|
+
catch (error) {
|
|
377
|
+
return offlineResponse(request);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Cache-only strategy
|
|
383
|
+
* Only serve from cache, never fetch
|
|
384
|
+
*/
|
|
385
|
+
async function cacheOnly(request, cache) {
|
|
386
|
+
const cached = await cache.match(request);
|
|
387
|
+
return cached || offlineResponse(request);
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Fetch and cache a request
|
|
392
|
+
*/
|
|
393
|
+
async function fetchAndCache(request, cache) {
|
|
394
|
+
try {
|
|
395
|
+
const response = await fetch(request);
|
|
396
|
+
if (response.ok) {
|
|
397
|
+
// Add cache timestamp header
|
|
398
|
+
const headers = new Headers(response.headers);
|
|
399
|
+
headers.set('sw-cache-date', new Date().toISOString());
|
|
400
|
+
|
|
401
|
+
const cachedResponse = new Response(response.clone().body, {
|
|
402
|
+
status: response.status,
|
|
403
|
+
statusText: response.statusText,
|
|
404
|
+
headers,
|
|
405
|
+
});
|
|
406
|
+
|
|
407
|
+
cache.put(request, cachedResponse);
|
|
408
|
+
}
|
|
409
|
+
return response;
|
|
410
|
+
}
|
|
411
|
+
catch (error) {
|
|
412
|
+
return offlineResponse(request);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* Generate offline response
|
|
418
|
+
*/
|
|
419
|
+
async function offlineResponse(request) {
|
|
420
|
+
// For navigation requests, return offline page
|
|
421
|
+
if (request.mode === 'navigate') {
|
|
422
|
+
const cache = await caches.open(CACHE_NAME);
|
|
423
|
+
const offlinePage = await cache.match(OFFLINE_PAGE);
|
|
424
|
+
if (offlinePage) {
|
|
425
|
+
return offlinePage;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
// Return a basic offline response
|
|
430
|
+
return new Response('You are offline', {
|
|
431
|
+
status: 503,
|
|
432
|
+
statusText: 'Service Unavailable',
|
|
433
|
+
headers: {
|
|
434
|
+
'Content-Type': 'text/plain',
|
|
435
|
+
},
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Get total cache size
|
|
441
|
+
*/
|
|
442
|
+
async function getCacheSize() {
|
|
443
|
+
let totalSize = 0;
|
|
444
|
+
const cacheNames = await caches.keys();
|
|
445
|
+
|
|
446
|
+
for (const cacheName of cacheNames) {
|
|
447
|
+
const cache = await caches.open(cacheName);
|
|
448
|
+
const keys = await cache.keys();
|
|
449
|
+
|
|
450
|
+
for (const request of keys) {
|
|
451
|
+
const response = await cache.match(request);
|
|
452
|
+
if (response) {
|
|
453
|
+
const blob = await response.clone().blob();
|
|
454
|
+
totalSize += blob.size;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
return totalSize;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* Enforce cache storage limits
|
|
464
|
+
*/
|
|
465
|
+
async function enforceCacheLimits() {
|
|
466
|
+
const cache = await caches.open(CACHE_NAME);
|
|
467
|
+
const keys = await cache.keys();
|
|
468
|
+
|
|
469
|
+
// Get cache entries with metadata
|
|
470
|
+
const entries = [];
|
|
471
|
+
for (const request of keys) {
|
|
472
|
+
const response = await cache.match(request);
|
|
473
|
+
if (response) {
|
|
474
|
+
const blob = await response.clone().blob();
|
|
475
|
+
const cachedDate = response.headers.get('sw-cache-date');
|
|
476
|
+
entries.push({
|
|
477
|
+
request,
|
|
478
|
+
size: blob.size,
|
|
479
|
+
date: cachedDate ? new Date(cachedDate) : new Date(),
|
|
480
|
+
});
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
// Check total size limit
|
|
485
|
+
if (CACHE_CONFIG.maxSize > 0) {
|
|
486
|
+
const totalSize = entries.reduce((sum, e) => sum + e.size, 0);
|
|
487
|
+
|
|
488
|
+
if (totalSize > CACHE_CONFIG.maxSize) {
|
|
489
|
+
console.log('[SW] Cache size exceeded, purging...');
|
|
490
|
+
await purgeCache(entries, cache, CACHE_CONFIG.maxSize);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
// Check max entries limit
|
|
495
|
+
if (CACHE_CONFIG.maxEntries > 0 && entries.length > CACHE_CONFIG.maxEntries) {
|
|
496
|
+
console.log('[SW] Cache entries exceeded, purging...');
|
|
497
|
+
await purgeByEntryCount(entries, cache, CACHE_CONFIG.maxEntries);
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
// Check max age limit
|
|
501
|
+
if (CACHE_CONFIG.maxAge > 0) {
|
|
502
|
+
const now = Date.now();
|
|
503
|
+
const expiredEntries = entries.filter(e => (now - e.date.getTime()) > CACHE_CONFIG.maxAge);
|
|
504
|
+
|
|
505
|
+
for (const entry of expiredEntries) {
|
|
506
|
+
console.log('[SW] Removing expired cache entry:', entry.request.url);
|
|
507
|
+
await cache.delete(entry.request);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
/**
|
|
513
|
+
* Purge cache to meet size limit
|
|
514
|
+
*/
|
|
515
|
+
async function purgeCache(entries, cache, maxSize) {
|
|
516
|
+
// Sort by purge strategy
|
|
517
|
+
const sorted = [...entries];
|
|
518
|
+
|
|
519
|
+
switch (CACHE_CONFIG.purgeStrategy) {
|
|
520
|
+
case 'lru':
|
|
521
|
+
// Least Recently Used - remove oldest first
|
|
522
|
+
sorted.sort((a, b) => a.date.getTime() - b.date.getTime());
|
|
523
|
+
break;
|
|
524
|
+
case 'fifo':
|
|
525
|
+
// First In First Out - same as lru for our purposes
|
|
526
|
+
sorted.sort((a, b) => a.date.getTime() - b.date.getTime());
|
|
527
|
+
break;
|
|
528
|
+
case 'lfu':
|
|
529
|
+
// Least Frequently Used - we don't track frequency, use size as proxy
|
|
530
|
+
sorted.sort((a, b) => b.size - a.size);
|
|
531
|
+
break;
|
|
532
|
+
default:
|
|
533
|
+
sorted.sort((a, b) => a.date.getTime() - b.date.getTime());
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
let currentSize = entries.reduce((sum, e) => sum + e.size, 0);
|
|
537
|
+
|
|
538
|
+
for (const entry of sorted) {
|
|
539
|
+
if (currentSize <= maxSize * 0.8) { // Keep 80% buffer
|
|
540
|
+
break;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
// Don't delete essential assets
|
|
544
|
+
const url = entry.request.url;
|
|
545
|
+
if (PRECACHE_ASSETS.some(asset => url.endsWith(asset))) {
|
|
546
|
+
continue;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
console.log('[SW] Purging cache entry:', url);
|
|
550
|
+
await cache.delete(entry.request);
|
|
551
|
+
currentSize -= entry.size;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
/**
|
|
556
|
+
* Purge cache by entry count
|
|
557
|
+
*/
|
|
558
|
+
async function purgeByEntryCount(entries, cache, maxEntries) {
|
|
559
|
+
const sorted = [...entries].sort((a, b) => a.date.getTime() - b.date.getTime());
|
|
560
|
+
const toRemove = sorted.slice(0, entries.length - maxEntries);
|
|
561
|
+
|
|
562
|
+
for (const entry of toRemove) {
|
|
563
|
+
// Don't delete essential assets
|
|
564
|
+
const url = entry.request.url;
|
|
565
|
+
if (PRECACHE_ASSETS.some(asset => url.endsWith(asset))) {
|
|
566
|
+
continue;
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
await cache.delete(entry.request);
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
console.log('[SW] Service Worker loaded - Version:', CACHE_VERSION);
|
|
574
|
+
`;
|
|
575
|
+
}
|
|
576
|
+
function generatePushHandlers() {
|
|
577
|
+
return `
|
|
578
|
+
/**
|
|
579
|
+
* Push event - handle incoming push notifications
|
|
580
|
+
*/
|
|
581
|
+
self.addEventListener('push', (event) => {
|
|
582
|
+
console.log('[SW] Push notification received');
|
|
583
|
+
|
|
584
|
+
let data = {
|
|
585
|
+
title: 'Notification',
|
|
586
|
+
body: 'You have a new notification',
|
|
587
|
+
icon: PUSH_CONFIG.defaultIcon,
|
|
588
|
+
badge: PUSH_CONFIG.defaultBadge,
|
|
589
|
+
};
|
|
590
|
+
|
|
591
|
+
if (event.data) {
|
|
592
|
+
try {
|
|
593
|
+
const payload = event.data.json();
|
|
594
|
+
data = { ...data, ...payload };
|
|
595
|
+
}
|
|
596
|
+
catch {
|
|
597
|
+
data.body = event.data.text();
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
const options = {
|
|
602
|
+
body: data.body,
|
|
603
|
+
icon: data.icon || PUSH_CONFIG.defaultIcon,
|
|
604
|
+
badge: data.badge || PUSH_CONFIG.defaultBadge,
|
|
605
|
+
vibrate: data.vibrate || [100, 50, 100],
|
|
606
|
+
data: {
|
|
607
|
+
url: data.url || '/',
|
|
608
|
+
...data.data,
|
|
609
|
+
},
|
|
610
|
+
actions: data.actions || [],
|
|
611
|
+
tag: data.tag,
|
|
612
|
+
renotify: data.renotify || false,
|
|
613
|
+
requireInteraction: data.requireInteraction || false,
|
|
614
|
+
silent: data.silent || false,
|
|
615
|
+
};
|
|
616
|
+
|
|
617
|
+
event.waitUntil(
|
|
618
|
+
self.registration.showNotification(data.title, options)
|
|
619
|
+
);
|
|
620
|
+
});
|
|
621
|
+
|
|
622
|
+
/**
|
|
623
|
+
* Notification click event - handle notification interactions
|
|
624
|
+
*/
|
|
625
|
+
self.addEventListener('notificationclick', (event) => {
|
|
626
|
+
console.log('[SW] Notification clicked:', event.action);
|
|
627
|
+
event.notification.close();
|
|
628
|
+
|
|
629
|
+
const url = event.notification.data?.url || '/';
|
|
630
|
+
|
|
631
|
+
event.waitUntil(
|
|
632
|
+
clients.matchAll({ type: 'window', includeUncontrolled: true }).then((windowClients) => {
|
|
633
|
+
// Check if there's already a window open with this URL
|
|
634
|
+
for (const client of windowClients) {
|
|
635
|
+
if (client.url === url && 'focus' in client) {
|
|
636
|
+
return client.focus();
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
// Open a new window
|
|
640
|
+
if (clients.openWindow) {
|
|
641
|
+
return clients.openWindow(url);
|
|
642
|
+
}
|
|
643
|
+
})
|
|
644
|
+
);
|
|
645
|
+
});
|
|
646
|
+
|
|
647
|
+
/**
|
|
648
|
+
* Notification close event
|
|
649
|
+
*/
|
|
650
|
+
self.addEventListener('notificationclose', (event) => {
|
|
651
|
+
console.log('[SW] Notification closed');
|
|
652
|
+
|
|
653
|
+
// Track notification dismissal if needed
|
|
654
|
+
const data = event.notification.data;
|
|
655
|
+
if (data?.trackDismiss) {
|
|
656
|
+
// Could send analytics here
|
|
657
|
+
}
|
|
658
|
+
});
|
|
659
|
+
`;
|
|
660
|
+
}
|
|
661
|
+
function generateSyncHandlers() {
|
|
662
|
+
return `
|
|
663
|
+
/**
|
|
664
|
+
* Background sync queue storage (IndexedDB)
|
|
665
|
+
*/
|
|
666
|
+
const SYNC_STORE = 'stx-sync-store';
|
|
667
|
+
let syncDb = null;
|
|
668
|
+
|
|
669
|
+
async function getSyncDb() {
|
|
670
|
+
if (syncDb) return syncDb;
|
|
671
|
+
|
|
672
|
+
return new Promise((resolve, reject) => {
|
|
673
|
+
const request = indexedDB.open(SYNC_STORE, 1);
|
|
674
|
+
|
|
675
|
+
request.onerror = () => reject(request.error);
|
|
676
|
+
request.onsuccess = () => {
|
|
677
|
+
syncDb = request.result;
|
|
678
|
+
resolve(syncDb);
|
|
679
|
+
};
|
|
680
|
+
|
|
681
|
+
request.onupgradeneeded = (event) => {
|
|
682
|
+
const db = event.target.result;
|
|
683
|
+
if (!db.objectStoreNames.contains('queue')) {
|
|
684
|
+
db.createObjectStore('queue', { keyPath: 'id', autoIncrement: true });
|
|
685
|
+
}
|
|
686
|
+
};
|
|
687
|
+
});
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
/**
|
|
691
|
+
* Add request to sync queue
|
|
692
|
+
*/
|
|
693
|
+
async function addToSyncQueue(request) {
|
|
694
|
+
const db = await getSyncDb();
|
|
695
|
+
const tx = db.transaction('queue', 'readwrite');
|
|
696
|
+
const store = tx.objectStore('queue');
|
|
697
|
+
|
|
698
|
+
const data = {
|
|
699
|
+
url: request.url,
|
|
700
|
+
method: request.method,
|
|
701
|
+
headers: Object.fromEntries(request.headers.entries()),
|
|
702
|
+
body: await request.clone().text(),
|
|
703
|
+
timestamp: Date.now(),
|
|
704
|
+
retries: 0,
|
|
705
|
+
};
|
|
706
|
+
|
|
707
|
+
return new Promise((resolve, reject) => {
|
|
708
|
+
const req = store.add(data);
|
|
709
|
+
req.onsuccess = () => resolve(req.result);
|
|
710
|
+
req.onerror = () => reject(req.error);
|
|
711
|
+
});
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
/**
|
|
715
|
+
* Get all pending sync requests
|
|
716
|
+
*/
|
|
717
|
+
async function getPendingSyncRequests() {
|
|
718
|
+
const db = await getSyncDb();
|
|
719
|
+
const tx = db.transaction('queue', 'readonly');
|
|
720
|
+
const store = tx.objectStore('queue');
|
|
721
|
+
|
|
722
|
+
return new Promise((resolve, reject) => {
|
|
723
|
+
const req = store.getAll();
|
|
724
|
+
req.onsuccess = () => resolve(req.result);
|
|
725
|
+
req.onerror = () => reject(req.error);
|
|
726
|
+
});
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
/**
|
|
730
|
+
* Remove request from sync queue
|
|
731
|
+
*/
|
|
732
|
+
async function removeSyncRequest(id) {
|
|
733
|
+
const db = await getSyncDb();
|
|
734
|
+
const tx = db.transaction('queue', 'readwrite');
|
|
735
|
+
const store = tx.objectStore('queue');
|
|
736
|
+
|
|
737
|
+
return new Promise((resolve, reject) => {
|
|
738
|
+
const req = store.delete(id);
|
|
739
|
+
req.onsuccess = () => resolve();
|
|
740
|
+
req.onerror = () => reject(req.error);
|
|
741
|
+
});
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
/**
|
|
745
|
+
* Update sync request retry count
|
|
746
|
+
*/
|
|
747
|
+
async function updateSyncRetries(id, retries) {
|
|
748
|
+
const db = await getSyncDb();
|
|
749
|
+
const tx = db.transaction('queue', 'readwrite');
|
|
750
|
+
const store = tx.objectStore('queue');
|
|
751
|
+
|
|
752
|
+
const req = store.get(id);
|
|
753
|
+
req.onsuccess = () => {
|
|
754
|
+
const data = req.result;
|
|
755
|
+
if (data) {
|
|
756
|
+
data.retries = retries;
|
|
757
|
+
store.put(data);
|
|
758
|
+
}
|
|
759
|
+
};
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
/**
|
|
763
|
+
* Sync event - process queued requests when online
|
|
764
|
+
*/
|
|
765
|
+
self.addEventListener('sync', (event) => {
|
|
766
|
+
console.log('[SW] Sync event:', event.tag);
|
|
767
|
+
|
|
768
|
+
if (event.tag === SYNC_CONFIG.queueName || event.tag === 'stx-form-sync') {
|
|
769
|
+
event.waitUntil(processBackgroundSync());
|
|
770
|
+
}
|
|
771
|
+
});
|
|
772
|
+
|
|
773
|
+
/**
|
|
774
|
+
* Process all queued sync requests
|
|
775
|
+
*/
|
|
776
|
+
async function processBackgroundSync() {
|
|
777
|
+
console.log('[SW] Processing background sync queue');
|
|
778
|
+
|
|
779
|
+
const requests = await getPendingSyncRequests();
|
|
780
|
+
console.log('[SW] Pending sync requests:', requests.length);
|
|
781
|
+
|
|
782
|
+
for (const request of requests) {
|
|
783
|
+
if (request.retries >= SYNC_CONFIG.maxRetries) {
|
|
784
|
+
console.log('[SW] Max retries reached, removing:', request.url);
|
|
785
|
+
await removeSyncRequest(request.id);
|
|
786
|
+
continue;
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
try {
|
|
790
|
+
const response = await fetch(request.url, {
|
|
791
|
+
method: request.method,
|
|
792
|
+
headers: request.headers,
|
|
793
|
+
body: request.method !== 'GET' ? request.body : undefined,
|
|
794
|
+
});
|
|
795
|
+
|
|
796
|
+
if (response.ok) {
|
|
797
|
+
console.log('[SW] Sync succeeded:', request.url);
|
|
798
|
+
await removeSyncRequest(request.id);
|
|
799
|
+
|
|
800
|
+
// Notify clients of successful sync
|
|
801
|
+
const clients = await self.clients.matchAll();
|
|
802
|
+
clients.forEach(client => {
|
|
803
|
+
client.postMessage({
|
|
804
|
+
type: 'SYNC_COMPLETE',
|
|
805
|
+
url: request.url,
|
|
806
|
+
success: true,
|
|
807
|
+
});
|
|
808
|
+
});
|
|
809
|
+
}
|
|
810
|
+
else {
|
|
811
|
+
throw new Error('Response not ok: ' + response.status);
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
catch (error) {
|
|
815
|
+
console.log('[SW] Sync failed, will retry:', request.url, error.message);
|
|
816
|
+
await updateSyncRetries(request.id, request.retries + 1);
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
/**
|
|
822
|
+
* Register a form for background sync
|
|
823
|
+
* Called from main thread via message
|
|
824
|
+
*/
|
|
825
|
+
async function registerFormSync(formData) {
|
|
826
|
+
// Store form data in IndexedDB
|
|
827
|
+
await addToSyncQueue({
|
|
828
|
+
url: formData.action,
|
|
829
|
+
method: formData.method || 'POST',
|
|
830
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
831
|
+
clone: () => ({ text: async () => new URLSearchParams(formData.data).toString() }),
|
|
832
|
+
});
|
|
833
|
+
|
|
834
|
+
// Register for background sync
|
|
835
|
+
await self.registration.sync.register(SYNC_CONFIG.queueName);
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
// Listen for form sync requests
|
|
839
|
+
self.addEventListener('message', (event) => {
|
|
840
|
+
if (event.data?.type === 'REGISTER_FORM_SYNC') {
|
|
841
|
+
event.waitUntil(registerFormSync(event.data.payload));
|
|
842
|
+
}
|
|
843
|
+
});
|
|
844
|
+
`;
|
|
845
|
+
}
|
|
846
|
+
export function getServiceWorkerFileName(options) {
|
|
847
|
+
return options.pwa?.serviceWorker?.fileName || "sw.js";
|
|
848
|
+
}
|
|
849
|
+
export function isWorkboxEnabled(options) {
|
|
850
|
+
return options.pwa?.enabled === !0 && options.pwa?.serviceWorker?.useWorkbox === !0;
|
|
851
|
+
}
|
|
852
|
+
export function generateServiceWorkerAuto(options, outputDir) {
|
|
853
|
+
if (!options.pwa?.enabled)
|
|
854
|
+
return "";
|
|
855
|
+
if (isWorkboxEnabled(options)) {
|
|
856
|
+
const { generateWorkboxServiceWorker } = require("./workbox");
|
|
857
|
+
return generateWorkboxServiceWorker(options, outputDir);
|
|
858
|
+
}
|
|
859
|
+
return generateServiceWorker(options, outputDir);
|
|
860
|
+
}
|