@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,373 @@
|
|
|
1
|
+
export class HotReloadServer {
|
|
2
|
+
clients = new Set;
|
|
3
|
+
server = null;
|
|
4
|
+
options;
|
|
5
|
+
constructor(options = {}) {
|
|
6
|
+
this.options = {
|
|
7
|
+
wsPort: options.wsPort ?? 3001,
|
|
8
|
+
showOverlay: options.showOverlay ?? !0,
|
|
9
|
+
reconnectInterval: options.reconnectInterval ?? 1000,
|
|
10
|
+
maxReconnectAttempts: options.maxReconnectAttempts ?? 10,
|
|
11
|
+
verbose: options.verbose ?? !1
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
start(port) {
|
|
15
|
+
let wsPort = port ?? this.options.wsPort;
|
|
16
|
+
const maxAttempts = 20;
|
|
17
|
+
for (let attempt = 0;attempt < maxAttempts; attempt++)
|
|
18
|
+
try {
|
|
19
|
+
this.server = Bun.serve({
|
|
20
|
+
port: wsPort,
|
|
21
|
+
fetch(req, server) {
|
|
22
|
+
if (server.upgrade(req, { data: {} }))
|
|
23
|
+
return;
|
|
24
|
+
return new Response("stx Hot Reload Server", {
|
|
25
|
+
headers: { "Content-Type": "text/plain" }
|
|
26
|
+
});
|
|
27
|
+
},
|
|
28
|
+
websocket: {
|
|
29
|
+
open: (ws) => {
|
|
30
|
+
this.clients.add(ws);
|
|
31
|
+
if (this.options.verbose)
|
|
32
|
+
console.log(`[HMR] Client connected (${this.clients.size} total)`);
|
|
33
|
+
ws.send(JSON.stringify({
|
|
34
|
+
type: "connected",
|
|
35
|
+
timestamp: Date.now()
|
|
36
|
+
}));
|
|
37
|
+
},
|
|
38
|
+
close: (ws) => {
|
|
39
|
+
this.clients.delete(ws);
|
|
40
|
+
if (this.options.verbose)
|
|
41
|
+
console.log(`[HMR] Client disconnected (${this.clients.size} total)`);
|
|
42
|
+
},
|
|
43
|
+
message: (_ws, message) => {
|
|
44
|
+
const str = typeof message === "string" ? message : message.toString();
|
|
45
|
+
if (str === "ping")
|
|
46
|
+
return;
|
|
47
|
+
try {
|
|
48
|
+
const msg = JSON.parse(str);
|
|
49
|
+
if (msg.type === "console" && Array.isArray(msg.args)) {
|
|
50
|
+
const args = msg.args.join(" "), c = { log: "\x1B[36m", warn: "\x1B[33m", error: "\x1B[31m", info: "\x1B[34m" }[msg.level] ?? "\x1B[36m";
|
|
51
|
+
console.log(`${c}[browser]${msg.level !== "log" ? ` ${msg.level}` : ""}\x1B[0m ${args}`);
|
|
52
|
+
}
|
|
53
|
+
} catch {}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
if (this.options.verbose)
|
|
58
|
+
console.log(`[HMR] WebSocket server started on port ${wsPort}`);
|
|
59
|
+
return wsPort;
|
|
60
|
+
} catch (error) {
|
|
61
|
+
if (error?.code === "EADDRINUSE") {
|
|
62
|
+
wsPort++;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
throw Error(`Could not find an available port after ${maxAttempts} attempts starting from ${port ?? this.options.wsPort}`);
|
|
68
|
+
}
|
|
69
|
+
stop() {
|
|
70
|
+
for (const client of this.clients)
|
|
71
|
+
try {
|
|
72
|
+
client.close();
|
|
73
|
+
} catch {}
|
|
74
|
+
this.clients.clear();
|
|
75
|
+
if (this.server) {
|
|
76
|
+
this.server.stop();
|
|
77
|
+
this.server = null;
|
|
78
|
+
}
|
|
79
|
+
if (this.options.verbose)
|
|
80
|
+
console.log("[HMR] Server stopped");
|
|
81
|
+
}
|
|
82
|
+
broadcast(message) {
|
|
83
|
+
const data = JSON.stringify(message);
|
|
84
|
+
let sent = 0;
|
|
85
|
+
for (const client of this.clients)
|
|
86
|
+
try {
|
|
87
|
+
if (client.readyState === 1) {
|
|
88
|
+
client.send(data);
|
|
89
|
+
sent++;
|
|
90
|
+
}
|
|
91
|
+
} catch {
|
|
92
|
+
this.clients.delete(client);
|
|
93
|
+
}
|
|
94
|
+
if (this.options.verbose && sent > 0)
|
|
95
|
+
console.log(`[HMR] Broadcast ${message.type} to ${sent} client(s)`);
|
|
96
|
+
}
|
|
97
|
+
reload(filePath) {
|
|
98
|
+
if (this.options.verbose)
|
|
99
|
+
console.log(`[HMR] Sending reload to ${this.clients.size} client(s) for: ${filePath || "all"}`);
|
|
100
|
+
this.broadcast({
|
|
101
|
+
type: "reload",
|
|
102
|
+
path: filePath,
|
|
103
|
+
timestamp: Date.now()
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
updateCss(filePath, content) {
|
|
107
|
+
this.broadcast({
|
|
108
|
+
type: "css-update",
|
|
109
|
+
path: filePath,
|
|
110
|
+
content,
|
|
111
|
+
timestamp: Date.now()
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
error(message) {
|
|
115
|
+
this.broadcast({
|
|
116
|
+
type: "error",
|
|
117
|
+
content: message,
|
|
118
|
+
timestamp: Date.now()
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
get clientCount() {
|
|
122
|
+
return this.clients.size;
|
|
123
|
+
}
|
|
124
|
+
get port() {
|
|
125
|
+
return this.options.wsPort;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
export function generateHotReloadScript(wsPort, options = {}) {
|
|
129
|
+
const {
|
|
130
|
+
showOverlay = !0,
|
|
131
|
+
reconnectInterval = 1000,
|
|
132
|
+
maxReconnectAttempts = 10
|
|
133
|
+
} = options;
|
|
134
|
+
return `
|
|
135
|
+
<script>
|
|
136
|
+
(function() {
|
|
137
|
+
// stx Hot Reload Client
|
|
138
|
+
var wsUrl = 'ws://' + window.location.hostname + ':${wsPort}';
|
|
139
|
+
var reconnectAttempts = 0;
|
|
140
|
+
var maxAttempts = ${maxReconnectAttempts};
|
|
141
|
+
var reconnectInterval = ${reconnectInterval};
|
|
142
|
+
var socket = null;
|
|
143
|
+
var overlay = null;
|
|
144
|
+
var wasConnected = false; // Track if we ever connected successfully
|
|
145
|
+
|
|
146
|
+
${showOverlay ? `
|
|
147
|
+
// Create connection status overlay
|
|
148
|
+
function createOverlay() {
|
|
149
|
+
overlay = document.createElement('div');
|
|
150
|
+
overlay.id = 'stx-hmr-overlay';
|
|
151
|
+
overlay.style.cssText = 'position:fixed;top:0;left:0;right:0;padding:8px 16px;background:#f59e0b;color:#000;font-family:system-ui,sans-serif;font-size:14px;text-align:center;z-index:999999;display:none;';
|
|
152
|
+
document.body.appendChild(overlay);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function showOverlay(message, isError) {
|
|
156
|
+
// Only show overlay if we were previously connected (don't show during initial connection)
|
|
157
|
+
if (!wasConnected && !isError) return;
|
|
158
|
+
if (!overlay) createOverlay();
|
|
159
|
+
overlay.textContent = message;
|
|
160
|
+
overlay.style.background = isError ? '#ef4444' : '#f59e0b';
|
|
161
|
+
overlay.style.color = isError ? '#fff' : '#000';
|
|
162
|
+
overlay.style.display = 'block';
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function hideOverlay() {
|
|
166
|
+
if (overlay) overlay.style.display = 'none';
|
|
167
|
+
}
|
|
168
|
+
` : `
|
|
169
|
+
function showOverlay() {}
|
|
170
|
+
function hideOverlay() {}
|
|
171
|
+
`}
|
|
172
|
+
|
|
173
|
+
function connect() {
|
|
174
|
+
try {
|
|
175
|
+
socket = new WebSocket(wsUrl);
|
|
176
|
+
}
|
|
177
|
+
catch (e) {
|
|
178
|
+
// Silent fail for initial connection attempts
|
|
179
|
+
if (wasConnected) {
|
|
180
|
+
scheduleReconnect();
|
|
181
|
+
}
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
socket.onopen = function() {
|
|
186
|
+
// connected silently
|
|
187
|
+
wasConnected = true;
|
|
188
|
+
reconnectAttempts = 0;
|
|
189
|
+
hideOverlay();
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
socket.onmessage = function(event) {
|
|
193
|
+
try {
|
|
194
|
+
var msg = JSON.parse(event.data);
|
|
195
|
+
|
|
196
|
+
switch (msg.type) {
|
|
197
|
+
case 'reload':
|
|
198
|
+
console.log('[stx] Reloading...', msg.path || '');
|
|
199
|
+
// Use SPA router for progressive update instead of full page reload.
|
|
200
|
+
// Falls back to hard reload only when the router isn't available.
|
|
201
|
+
// Call the ROUTER directly, not window.navigate: the runtime helper
|
|
202
|
+
// takes (url, options) and silently dropped the third argument, so
|
|
203
|
+
// force never arrived and the same-URL early return made this a
|
|
204
|
+
// no-op on every page that had the router (#1807). pushState=false
|
|
205
|
+
// keeps the address bar untouched (this is a reload, not a
|
|
206
|
+
// navigation) and force=true bypasses the early return.
|
|
207
|
+
if (window.stxRouter && typeof window.stxRouter.navigate === 'function') {
|
|
208
|
+
window.stxRouter.navigate(window.location.pathname + window.location.search, false, true);
|
|
209
|
+
} else {
|
|
210
|
+
window.location.reload();
|
|
211
|
+
}
|
|
212
|
+
break;
|
|
213
|
+
|
|
214
|
+
case 'css-update':
|
|
215
|
+
console.log('[stx] CSS update:', msg.path);
|
|
216
|
+
updateCss(msg.path, msg.content);
|
|
217
|
+
break;
|
|
218
|
+
|
|
219
|
+
case 'error':
|
|
220
|
+
console.error('[stx] Error:', msg.content);
|
|
221
|
+
showOverlay('Build Error: ' + msg.content, true);
|
|
222
|
+
break;
|
|
223
|
+
|
|
224
|
+
case 'connected':
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
catch (e) {
|
|
229
|
+
console.error('[stx] Invalid message:', e);
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
socket.onclose = function() {
|
|
234
|
+
socket = null;
|
|
235
|
+
// Only log and show overlay if we were previously connected
|
|
236
|
+
if (wasConnected) {
|
|
237
|
+
console.log('[stx] Connection closed, reconnecting...');
|
|
238
|
+
scheduleReconnect();
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
// Silently retry initial connection
|
|
242
|
+
setTimeout(connect, reconnectInterval);
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
socket.onerror = function() {
|
|
247
|
+
// Errors are handled in onclose
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
function scheduleReconnect() {
|
|
252
|
+
if (reconnectAttempts < maxAttempts) {
|
|
253
|
+
reconnectAttempts++;
|
|
254
|
+
showOverlay('Reconnecting... (' + reconnectAttempts + '/' + maxAttempts + ')');
|
|
255
|
+
setTimeout(connect, reconnectInterval);
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
showOverlay('Connection lost. Refresh to reconnect.', true);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// CSS hot update without full reload
|
|
263
|
+
function updateCss(path, content) {
|
|
264
|
+
// Try to find and update existing stylesheet
|
|
265
|
+
var links = document.querySelectorAll('link[rel="stylesheet"]');
|
|
266
|
+
for (var i = 0; i < links.length; i++) {
|
|
267
|
+
var href = links[i].getAttribute('href');
|
|
268
|
+
if (href && href.indexOf(path) !== -1) {
|
|
269
|
+
// Add cache-busting query param
|
|
270
|
+
var newHref = href.split('?')[0] + '?t=' + Date.now();
|
|
271
|
+
links[i].setAttribute('href', newHref);
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// If content provided, inject as style tag
|
|
277
|
+
if (content) {
|
|
278
|
+
var style = document.createElement('style');
|
|
279
|
+
style.setAttribute('data-stx-hmr', path);
|
|
280
|
+
style.textContent = content;
|
|
281
|
+
|
|
282
|
+
// Remove old injected style
|
|
283
|
+
var old = document.querySelector('style[data-stx-hmr="' + path + '"]');
|
|
284
|
+
if (old) old.remove();
|
|
285
|
+
|
|
286
|
+
document.head.appendChild(style);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
// Start connection when DOM is ready
|
|
291
|
+
if (document.readyState === 'loading') {
|
|
292
|
+
document.addEventListener('DOMContentLoaded', connect);
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
connect();
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// Forward browser console to the dev server terminal
|
|
299
|
+
var _origLog = console.log;
|
|
300
|
+
var _origError = console.error;
|
|
301
|
+
var _origWarn = console.warn;
|
|
302
|
+
var _origInfo = console.info;
|
|
303
|
+
|
|
304
|
+
function _fwd(level, args) {
|
|
305
|
+
if (socket && socket.readyState === 1) {
|
|
306
|
+
try {
|
|
307
|
+
socket.send(JSON.stringify({
|
|
308
|
+
type: 'console',
|
|
309
|
+
level: level,
|
|
310
|
+
args: Array.prototype.slice.call(args).map(function(a) {
|
|
311
|
+
if (a === null) return 'null';
|
|
312
|
+
if (a === undefined) return 'undefined';
|
|
313
|
+
if (typeof a === 'object') { try { return JSON.stringify(a); } catch(e) { return String(a); } }
|
|
314
|
+
return String(a);
|
|
315
|
+
})
|
|
316
|
+
}));
|
|
317
|
+
} catch(e) {}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
console.log = function() { _origLog.apply(console, arguments); _fwd('log', arguments); };
|
|
322
|
+
console.error = function() { _origError.apply(console, arguments); _fwd('error', arguments); };
|
|
323
|
+
console.warn = function() { _origWarn.apply(console, arguments); _fwd('warn', arguments); };
|
|
324
|
+
console.info = function() { _origInfo.apply(console, arguments); _fwd('info', arguments); };
|
|
325
|
+
|
|
326
|
+
// Expose for debugging
|
|
327
|
+
window.__stxHmr = {
|
|
328
|
+
reconnect: connect,
|
|
329
|
+
status: function() { return socket ? socket.readyState : -1; }
|
|
330
|
+
};
|
|
331
|
+
})();
|
|
332
|
+
</script>
|
|
333
|
+
`;
|
|
334
|
+
}
|
|
335
|
+
export function injectHotReload(html, wsPort, options = {}) {
|
|
336
|
+
const script = generateHotReloadScript(wsPort, options), bodyIdx = html.lastIndexOf("</body>");
|
|
337
|
+
if (bodyIdx !== -1)
|
|
338
|
+
return html.slice(0, bodyIdx) + script + html.slice(bodyIdx);
|
|
339
|
+
if (html.includes("</html>"))
|
|
340
|
+
return html.replace("</html>", `${script}</html>`);
|
|
341
|
+
return html + script;
|
|
342
|
+
}
|
|
343
|
+
export function isCssOnlyChange(filename) {
|
|
344
|
+
const ext = filename.toLowerCase();
|
|
345
|
+
return ext.endsWith(".css") || ext.endsWith(".scss") || ext.endsWith(".sass") || ext.endsWith(".less");
|
|
346
|
+
}
|
|
347
|
+
export function shouldReloadOnChange(filename) {
|
|
348
|
+
const ext = filename.toLowerCase();
|
|
349
|
+
return [".stx", ".html", ".htm", ".md", ".js", ".ts", ".jsx", ".tsx", ".json"].some((e) => ext.endsWith(e));
|
|
350
|
+
}
|
|
351
|
+
export function shouldIgnoreFile(filename) {
|
|
352
|
+
return [
|
|
353
|
+
/^\./,
|
|
354
|
+
/node_modules/,
|
|
355
|
+
/\.stx\/output/,
|
|
356
|
+
/\.stx\/cache/,
|
|
357
|
+
/~$/,
|
|
358
|
+
/\.swp$/,
|
|
359
|
+
/\.swo$/
|
|
360
|
+
].some((pattern) => pattern.test(filename));
|
|
361
|
+
}
|
|
362
|
+
let globalHmrServer = null;
|
|
363
|
+
export function getHmrServer(options) {
|
|
364
|
+
if (!globalHmrServer)
|
|
365
|
+
globalHmrServer = new HotReloadServer(options);
|
|
366
|
+
return globalHmrServer;
|
|
367
|
+
}
|
|
368
|
+
export function stopHmrServer() {
|
|
369
|
+
if (globalHmrServer) {
|
|
370
|
+
globalHmrServer.stop();
|
|
371
|
+
globalHmrServer = null;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Element-position-aware masking.
|
|
3
|
+
*
|
|
4
|
+
* Several pipeline stages temporarily replace `<script>…</script>` bodies or
|
|
5
|
+
* `<!-- … -->` comments with sentinel placeholders so later passes don't process
|
|
6
|
+
* their contents, then restore them at the end. A naive global regex
|
|
7
|
+
* (`/<script…>…<\/script>/g`, `/<!--…-->/g`) also matches such a token when it
|
|
8
|
+
* appears INSIDE a quoted attribute value — e.g. `aria-label="<script>x</script>"`
|
|
9
|
+
* or `title="<!-- "><img onerror=alert(1)> -->"`. The renderer's HTML-escaping
|
|
10
|
+
* then runs against the harmless placeholder, and the raw token is restored into
|
|
11
|
+
* the attribute afterward, breaking out of it — an XSS.
|
|
12
|
+
*
|
|
13
|
+
* `maskAtElementPosition` walks the string tracking tag/attribute/quote state and
|
|
14
|
+
* only masks tokens that begin at *element position* (not within an open tag, not
|
|
15
|
+
* inside a quoted attribute value). A token embedded in an attribute is left in
|
|
16
|
+
* place to be escaped normally.
|
|
17
|
+
*
|
|
18
|
+
* This is a leaf module (no stx imports) so any stage can use it without risking
|
|
19
|
+
* an import cycle.
|
|
20
|
+
*
|
|
21
|
+
* @module html-masking
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Locate a maskable token starting at `html[i]`.
|
|
25
|
+
* @returns the end index (exclusive) of the token, or -1 if none starts here.
|
|
26
|
+
*/
|
|
27
|
+
export type TokenMatcher = (html: string, i: number) => number;
|
|
28
|
+
export interface ElementPositionToken {
|
|
29
|
+
start: number;
|
|
30
|
+
end: number;
|
|
31
|
+
token: string;
|
|
32
|
+
}
|
|
33
|
+
/** Matches a real `<script…>…</script>` element (through the first `</script>`). */
|
|
34
|
+
export declare function matchScriptElement(html: string, i: number): number;
|
|
35
|
+
/** Matches a real `<style…>…</style>` element (through the first `</style>`). */
|
|
36
|
+
export declare function matchStyleElement(html: string, i: number): number;
|
|
37
|
+
/** Matches an HTML comment `<!-- … -->` (through the first `-->`). */
|
|
38
|
+
export declare function matchHtmlComment(html: string, i: number): number;
|
|
39
|
+
/**
|
|
40
|
+
* Find tokens that begin where an HTML element can actually start.
|
|
41
|
+
*
|
|
42
|
+
* The walk also treats comments and script/style raw-text bodies as opaque, so
|
|
43
|
+
* callers never see tag-like text nested inside those regions.
|
|
44
|
+
*/
|
|
45
|
+
export declare function scanAtElementPosition(html: string, match: TokenMatcher): ElementPositionToken[];
|
|
46
|
+
/**
|
|
47
|
+
* Cheap, conservative preflight for the unresolved-expression cloak pass.
|
|
48
|
+
*
|
|
49
|
+
* A mustache in an element's own text needs at least two opening and two
|
|
50
|
+
* closing braces outside tags, comments, and script/style raw text. They may
|
|
51
|
+
* be separated by child elements, so looking only for contiguous `{{` is NOT
|
|
52
|
+
* sufficient. False positives merely run the normal cloak scan; false
|
|
53
|
+
* negatives would leave an unresolved expression visible.
|
|
54
|
+
*/
|
|
55
|
+
export declare function mightContainOwnTextMustache(html: string): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Drop the oldest entries until there is room for one more.
|
|
58
|
+
*
|
|
59
|
+
* Wholesale `clear()` was the first version and it made the caches useless: a
|
|
60
|
+
* render cycles through more distinct documents than the cap, so hitting the cap
|
|
61
|
+
* wiped the entry that was about to be reused. Measured on the #1945 fixture, one
|
|
62
|
+
* key-and-content pair missed 24 times in a row — computed every time, hit never.
|
|
63
|
+
* A Map iterates in insertion order, so the first key is the oldest.
|
|
64
|
+
*/
|
|
65
|
+
export declare function evictOldest(cache: Map<string, unknown>, maxEntries: number): void;
|
|
66
|
+
/**
|
|
67
|
+
* Drop cached mask results.
|
|
68
|
+
*
|
|
69
|
+
* Nothing in the framework calls this, and nothing needs to. Entries are keyed
|
|
70
|
+
* on the input document itself plus the caller's placeholder key, so an edited
|
|
71
|
+
* template is a different key and can never be answered with a stale result --
|
|
72
|
+
* there is no invalidation to perform. It exists for callers that want a cold
|
|
73
|
+
* cache, such as tests.
|
|
74
|
+
*/
|
|
75
|
+
export declare function clearMaskCache(): void;
|
|
76
|
+
/**
|
|
77
|
+
* Mask every token (per `match`) that begins at element position, replacing it
|
|
78
|
+
* with `placeholder(token, index)`. Returns the rewritten string plus the ordered
|
|
79
|
+
* list of removed tokens. Restore by replacing each placeholder with `tokens[i]`.
|
|
80
|
+
*
|
|
81
|
+
* Note: HTML attributes do not use backslash escaping, so a `"`/`'` always
|
|
82
|
+
* toggles the surrounding quote — matching how browsers parse attribute values.
|
|
83
|
+
*/
|
|
84
|
+
export declare function maskAtElementPosition(html: string, match: TokenMatcher, placeholder: (token: string, index: number) => string,
|
|
85
|
+
/**
|
|
86
|
+
* Opt in to memoisation. Must fully determine what `placeholder` returns for
|
|
87
|
+
* a given index — two calls sharing a key MUST be interchangeable.
|
|
88
|
+
*/
|
|
89
|
+
cacheKey?: string): {
|
|
90
|
+
output: string;
|
|
91
|
+
tokens: string[];
|
|
92
|
+
};
|
|
93
|
+
export interface StashedScripts {
|
|
94
|
+
/** The document with each `<script>` element replaced by a NUL sentinel. */
|
|
95
|
+
output: string;
|
|
96
|
+
/** The removed script elements, in placeholder order. */
|
|
97
|
+
scripts: string[];
|
|
98
|
+
/**
|
|
99
|
+
* Put the scripts back.
|
|
100
|
+
*
|
|
101
|
+
* Returns the pre-stash document unchanged when `html` is still the masked
|
|
102
|
+
* output. Stashing replaces each script with a sentinel and restoring puts
|
|
103
|
+
* exactly those scripts back at exactly those sentinels, so when nothing
|
|
104
|
+
* edited the masked document in between, the replace pass can only rebuild,
|
|
105
|
+
* character by character, a string the caller already handed us.
|
|
106
|
+
*
|
|
107
|
+
* That is the common case, not a corner: one render of the #1945 fixture
|
|
108
|
+
* reaches this having changed nothing in FOUR of five passes, rebuilding
|
|
109
|
+
* 445,208 bytes to arrive back where it started. The component loop stashes
|
|
110
|
+
* on every pass but only the first pass resolves anything.
|
|
111
|
+
*/
|
|
112
|
+
restore: (html: string) => string;
|
|
113
|
+
}
|
|
114
|
+
export declare function stashScriptElements(html: string): StashedScripts;
|
|
115
|
+
/**
|
|
116
|
+
* Drop cached stash results.
|
|
117
|
+
*
|
|
118
|
+
* Nothing in the framework calls this, and nothing needs to. Entries are keyed
|
|
119
|
+
* on the input document itself, so an edited template is a different key and
|
|
120
|
+
* can never be answered with a stale result -- there is no invalidation to
|
|
121
|
+
* perform. It exists for callers that want a cold cache, such as tests.
|
|
122
|
+
*/
|
|
123
|
+
export declare function clearStashCache(): void;
|
|
124
|
+
/** Restore scripts stashed by {@link stashScriptElements}. */
|
|
125
|
+
export declare function restoreStashedScripts(html: string, scripts: string[]): string;
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
const SCRIPT_OPEN = /<script\b[^>]*>/iy, SCRIPT_CLOSE = /<\/script\s*>/ig, STYLE_OPEN = /<style\b[^>]*>/iy, STYLE_CLOSE = /<\/style\s*>/ig;
|
|
2
|
+
function matchElement(html, i, open, close) {
|
|
3
|
+
open.lastIndex = i;
|
|
4
|
+
const om = open.exec(html);
|
|
5
|
+
if (!om || om.index !== i)
|
|
6
|
+
return -1;
|
|
7
|
+
close.lastIndex = open.lastIndex;
|
|
8
|
+
const cm = close.exec(html);
|
|
9
|
+
if (!cm)
|
|
10
|
+
return -1;
|
|
11
|
+
return cm.index + cm[0].length;
|
|
12
|
+
}
|
|
13
|
+
export function matchScriptElement(html, i) {
|
|
14
|
+
return matchElement(html, i, SCRIPT_OPEN, SCRIPT_CLOSE);
|
|
15
|
+
}
|
|
16
|
+
export function matchStyleElement(html, i) {
|
|
17
|
+
return matchElement(html, i, STYLE_OPEN, STYLE_CLOSE);
|
|
18
|
+
}
|
|
19
|
+
export function matchHtmlComment(html, i) {
|
|
20
|
+
if (!html.startsWith("<!--", i))
|
|
21
|
+
return -1;
|
|
22
|
+
const closeRel = html.indexOf("-->", i + 4);
|
|
23
|
+
if (closeRel === -1)
|
|
24
|
+
return -1;
|
|
25
|
+
return closeRel + 3;
|
|
26
|
+
}
|
|
27
|
+
function matchOpaqueRegion(html, i) {
|
|
28
|
+
if (html.startsWith("<!--", i)) {
|
|
29
|
+
const end = matchHtmlComment(html, i);
|
|
30
|
+
return end === -1 ? html.length : end;
|
|
31
|
+
}
|
|
32
|
+
SCRIPT_OPEN.lastIndex = i;
|
|
33
|
+
if (SCRIPT_OPEN.exec(html)?.index === i) {
|
|
34
|
+
SCRIPT_CLOSE.lastIndex = SCRIPT_OPEN.lastIndex;
|
|
35
|
+
const close = SCRIPT_CLOSE.exec(html);
|
|
36
|
+
return close ? close.index + close[0].length : html.length;
|
|
37
|
+
}
|
|
38
|
+
STYLE_OPEN.lastIndex = i;
|
|
39
|
+
if (STYLE_OPEN.exec(html)?.index === i) {
|
|
40
|
+
STYLE_CLOSE.lastIndex = STYLE_OPEN.lastIndex;
|
|
41
|
+
const close = STYLE_CLOSE.exec(html);
|
|
42
|
+
return close ? close.index + close[0].length : html.length;
|
|
43
|
+
}
|
|
44
|
+
return -1;
|
|
45
|
+
}
|
|
46
|
+
export function scanAtElementPosition(html, match) {
|
|
47
|
+
const tokens = [];
|
|
48
|
+
let i = 0;
|
|
49
|
+
const n = html.length;
|
|
50
|
+
let inTag = !1, quote = null;
|
|
51
|
+
while (i < n) {
|
|
52
|
+
const ch = html[i];
|
|
53
|
+
if (inTag) {
|
|
54
|
+
if (quote) {
|
|
55
|
+
if (ch === quote)
|
|
56
|
+
quote = null;
|
|
57
|
+
} else if (ch === '"' || ch === "'")
|
|
58
|
+
quote = ch;
|
|
59
|
+
else if (ch === ">")
|
|
60
|
+
inTag = !1;
|
|
61
|
+
i++;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (ch !== "<") {
|
|
65
|
+
const next = html.indexOf("<", i + 1);
|
|
66
|
+
if (next === -1)
|
|
67
|
+
break;
|
|
68
|
+
i = next;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const end = match(html, i);
|
|
72
|
+
if (end > i) {
|
|
73
|
+
tokens.push({ start: i, end, token: html.slice(i, end) });
|
|
74
|
+
i = end;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const opaqueEnd = matchOpaqueRegion(html, i);
|
|
78
|
+
if (opaqueEnd > i) {
|
|
79
|
+
i = opaqueEnd;
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const letter = html.charCodeAt(i + 1);
|
|
83
|
+
if (letter >= 65 && letter <= 90 || letter >= 97 && letter <= 122)
|
|
84
|
+
inTag = !0;
|
|
85
|
+
i++;
|
|
86
|
+
}
|
|
87
|
+
return tokens;
|
|
88
|
+
}
|
|
89
|
+
export function mightContainOwnTextMustache(html) {
|
|
90
|
+
let opening = 0, closing = 0, i = 0, inTag = !1, quote = null;
|
|
91
|
+
while (i < html.length) {
|
|
92
|
+
if (inTag) {
|
|
93
|
+
const ch = html[i];
|
|
94
|
+
if (quote) {
|
|
95
|
+
if (ch === quote)
|
|
96
|
+
quote = null;
|
|
97
|
+
} else if (ch === '"' || ch === "'")
|
|
98
|
+
quote = ch;
|
|
99
|
+
else if (ch === ">")
|
|
100
|
+
inTag = !1;
|
|
101
|
+
i++;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const lt = html.indexOf("<", i), textEnd = lt === -1 ? html.length : lt;
|
|
105
|
+
while (i < textEnd) {
|
|
106
|
+
const ch = html[i++];
|
|
107
|
+
if (ch === "{")
|
|
108
|
+
opening++;
|
|
109
|
+
else if (ch === "}")
|
|
110
|
+
closing++;
|
|
111
|
+
if (opening >= 2 && closing >= 2)
|
|
112
|
+
return !0;
|
|
113
|
+
}
|
|
114
|
+
if (lt === -1)
|
|
115
|
+
break;
|
|
116
|
+
const opaqueEnd = matchOpaqueRegion(html, lt);
|
|
117
|
+
if (opaqueEnd > lt) {
|
|
118
|
+
i = opaqueEnd;
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const first = html.charCodeAt(lt + 1), letter = first === 47 ? html.charCodeAt(lt + 2) : first;
|
|
122
|
+
if (letter >= 65 && letter <= 90 || letter >= 97 && letter <= 122)
|
|
123
|
+
inTag = !0;
|
|
124
|
+
i = lt + 1;
|
|
125
|
+
}
|
|
126
|
+
return !1;
|
|
127
|
+
}
|
|
128
|
+
export function evictOldest(cache, maxEntries) {
|
|
129
|
+
while (cache.size >= maxEntries) {
|
|
130
|
+
const oldest = cache.keys().next();
|
|
131
|
+
if (oldest.done)
|
|
132
|
+
return;
|
|
133
|
+
cache.delete(oldest.value);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const MASK_CACHE_MIN_BYTES = 65536, MASK_CACHE_MAX_ENTRIES = 12, maskCache = new Map;
|
|
137
|
+
export function clearMaskCache() {
|
|
138
|
+
maskCache.clear();
|
|
139
|
+
}
|
|
140
|
+
export function maskAtElementPosition(html, match, placeholder, cacheKey) {
|
|
141
|
+
const cacheable = cacheKey !== void 0 && html.length >= MASK_CACHE_MIN_BYTES, key = cacheable ? `${cacheKey}\x00${html}` : "";
|
|
142
|
+
if (cacheable) {
|
|
143
|
+
const hit = maskCache.get(key);
|
|
144
|
+
if (hit)
|
|
145
|
+
return { output: hit.output, tokens: hit.tokens.slice() };
|
|
146
|
+
}
|
|
147
|
+
const matches = scanAtElementPosition(html, match);
|
|
148
|
+
if (matches.length === 0)
|
|
149
|
+
return { output: html, tokens: [] };
|
|
150
|
+
const tokens = matches.map((item) => item.token);
|
|
151
|
+
let output = "", cursor = 0;
|
|
152
|
+
for (let index = 0;index < matches.length; index++) {
|
|
153
|
+
const item = matches[index];
|
|
154
|
+
output += html.slice(cursor, item.start);
|
|
155
|
+
output += placeholder(item.token, index);
|
|
156
|
+
cursor = item.end;
|
|
157
|
+
}
|
|
158
|
+
output += html.slice(cursor);
|
|
159
|
+
if (cacheable) {
|
|
160
|
+
evictOldest(maskCache, MASK_CACHE_MAX_ENTRIES);
|
|
161
|
+
maskCache.set(key, { output, tokens });
|
|
162
|
+
return { output, tokens: tokens.slice() };
|
|
163
|
+
}
|
|
164
|
+
return { output, tokens };
|
|
165
|
+
}
|
|
166
|
+
const STASH_CACHE_MIN_BYTES = 65536, STASH_CACHE_MAX_ENTRIES = 4, stashCache = new Map;
|
|
167
|
+
function stashResult(input, output, scripts) {
|
|
168
|
+
return {
|
|
169
|
+
output,
|
|
170
|
+
scripts,
|
|
171
|
+
restore: (html) => html === output ? input : restoreStashedScripts(html, scripts)
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
export function stashScriptElements(html) {
|
|
175
|
+
const cacheable = html.length >= STASH_CACHE_MIN_BYTES;
|
|
176
|
+
if (cacheable) {
|
|
177
|
+
const hit = stashCache.get(html);
|
|
178
|
+
if (hit)
|
|
179
|
+
return stashResult(html, hit.output, hit.scripts.slice());
|
|
180
|
+
}
|
|
181
|
+
const { output, tokens } = maskAtElementPosition(html, matchScriptElement, (_token, index) => `\x00STX_SCRIPT_${index}\x00`);
|
|
182
|
+
if (cacheable) {
|
|
183
|
+
evictOldest(stashCache, STASH_CACHE_MAX_ENTRIES);
|
|
184
|
+
stashCache.set(html, { output, scripts: tokens });
|
|
185
|
+
return stashResult(html, output, tokens.slice());
|
|
186
|
+
}
|
|
187
|
+
return stashResult(html, output, tokens);
|
|
188
|
+
}
|
|
189
|
+
export function clearStashCache() {
|
|
190
|
+
stashCache.clear();
|
|
191
|
+
}
|
|
192
|
+
export function restoreStashedScripts(html, scripts) {
|
|
193
|
+
if (scripts.length === 0)
|
|
194
|
+
return html;
|
|
195
|
+
return html.replace(/\x00STX_SCRIPT_(\d+)\x00/g, (_, idx) => scripts[+idx] ?? "");
|
|
196
|
+
}
|