@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
package/dist/doctor.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
function mtimeMs(p) {
|
|
4
|
+
try {
|
|
5
|
+
return fs.statSync(p).mtimeMs;
|
|
6
|
+
} catch {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
function ago(ms, now) {
|
|
11
|
+
const s = Math.max(0, Math.round((now - ms) / 1000));
|
|
12
|
+
if (s < 60)
|
|
13
|
+
return `${s}s ago`;
|
|
14
|
+
if (s < 3600)
|
|
15
|
+
return `${Math.round(s / 60)}m ago`;
|
|
16
|
+
return `${Math.round(s / 3600)}h ago`;
|
|
17
|
+
}
|
|
18
|
+
function defaultResolve(specifier, from) {
|
|
19
|
+
try {
|
|
20
|
+
return globalThis.Bun?.resolveSync(specifier, from) ?? null;
|
|
21
|
+
} catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function findPantryPackage(cwd, name = "stx") {
|
|
26
|
+
let dir = path.resolve(cwd);
|
|
27
|
+
for (let i = 0;i < 10; i++) {
|
|
28
|
+
const candidate = path.join(dir, "pantry", "@stacksjs", name);
|
|
29
|
+
if (fs.existsSync(candidate))
|
|
30
|
+
return candidate;
|
|
31
|
+
const parent = path.dirname(dir);
|
|
32
|
+
if (parent === dir)
|
|
33
|
+
break;
|
|
34
|
+
dir = parent;
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
export async function runDoctor(options = {}) {
|
|
39
|
+
const cwd = options.cwd ? path.resolve(options.cwd) : process.cwd(), resolve = options.resolve ?? defaultResolve, now = Date.now(), checks = [], stxEntry = resolve("@stacksjs/stx", cwd);
|
|
40
|
+
checks.push(stxEntry ? { name: "@stacksjs/stx resolves to", status: "ok", detail: stxEntry } : { name: "@stacksjs/stx resolves to", status: "info", detail: "not resolvable from here (running inside the stx repo, or not installed)" });
|
|
41
|
+
const pluginEntry = resolve("bun-plugin-stx", cwd);
|
|
42
|
+
if (pluginEntry)
|
|
43
|
+
checks.push({ name: "bun-plugin-stx resolves to", status: "ok", detail: pluginEntry });
|
|
44
|
+
const pantry = findPantryPackage(cwd, "stx");
|
|
45
|
+
if (!pantry)
|
|
46
|
+
checks.push({ name: "pantry", status: "info", detail: "no pantry/@stacksjs/stx found \u2014 standard install (nothing to rebuild)" });
|
|
47
|
+
else {
|
|
48
|
+
const srcSignals = path.join(pantry, "src/signals.ts"), distEntry = [path.join(pantry, "dist/index.js"), path.join(pantry, "dist/signals.js")].find((p) => fs.existsSync(p)) || null, srcMtime = mtimeMs(srcSignals), distMtime = distEntry ? mtimeMs(distEntry) : null;
|
|
49
|
+
if (srcMtime == null)
|
|
50
|
+
checks.push({ name: "pantry dist freshness", status: "info", detail: `found pantry at ${pantry} but no src/signals.ts to compare` });
|
|
51
|
+
else if (distMtime == null)
|
|
52
|
+
checks.push({
|
|
53
|
+
name: "pantry dist freshness",
|
|
54
|
+
status: "error",
|
|
55
|
+
detail: "pantry has src but no built dist \u2014 the dev server will resolve nothing (or a stale copy elsewhere)",
|
|
56
|
+
fix: `cd ${pantry} && bun build.ts`
|
|
57
|
+
});
|
|
58
|
+
else if (distMtime < srcMtime) {
|
|
59
|
+
const lagS = Math.round((srcMtime - distMtime) / 1000);
|
|
60
|
+
checks.push({
|
|
61
|
+
name: "pantry dist freshness",
|
|
62
|
+
status: "error",
|
|
63
|
+
detail: `dist (${ago(distMtime, now)}) is OLDER than src/signals.ts (${ago(srcMtime, now)}) by ${lagS}s \u2014 your edit isn't built`,
|
|
64
|
+
fix: `cd ${pantry} && bun build.ts`
|
|
65
|
+
});
|
|
66
|
+
} else
|
|
67
|
+
checks.push({ name: "pantry dist freshness", status: "ok", detail: `dist rebuilt after src (src ${ago(srcMtime, now)}, dist ${ago(distMtime, now)})` });
|
|
68
|
+
const nm = path.join(cwd, "node_modules/@stacksjs/stx");
|
|
69
|
+
let lst = null;
|
|
70
|
+
try {
|
|
71
|
+
lst = fs.lstatSync(nm);
|
|
72
|
+
} catch {
|
|
73
|
+
lst = null;
|
|
74
|
+
}
|
|
75
|
+
if (!lst)
|
|
76
|
+
checks.push({ name: "node_modules \u2192 pantry", status: "info", detail: "node_modules/@stacksjs/stx not present (not installed here)" });
|
|
77
|
+
else if (lst.isSymbolicLink()) {
|
|
78
|
+
let target = null;
|
|
79
|
+
try {
|
|
80
|
+
target = fs.realpathSync(nm);
|
|
81
|
+
} catch {}
|
|
82
|
+
const pantryReal = (() => {
|
|
83
|
+
try {
|
|
84
|
+
return fs.realpathSync(pantry);
|
|
85
|
+
} catch {
|
|
86
|
+
return pantry;
|
|
87
|
+
}
|
|
88
|
+
})();
|
|
89
|
+
checks.push(target === pantryReal ? { name: "node_modules \u2192 pantry", status: "ok", detail: "symlinked to pantry" } : { name: "node_modules \u2192 pantry", status: "warn", detail: `symlinked to ${target || "(dangling)"}, not pantry` });
|
|
90
|
+
} else
|
|
91
|
+
checks.push({
|
|
92
|
+
name: "node_modules \u2192 pantry",
|
|
93
|
+
status: "warn",
|
|
94
|
+
detail: "is a real directory, NOT symlinked to pantry \u2014 edits to pantry src/dist won't be resolved",
|
|
95
|
+
fix: "rm -rf node_modules/@stacksjs/stx && ln -s ../../pantry/@stacksjs/stx node_modules/@stacksjs/stx"
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
checks.push({
|
|
99
|
+
name: "dev runtime cache",
|
|
100
|
+
status: "info",
|
|
101
|
+
detail: "cleared automatically on source edits by the dev watcher (clearDevCaches, #1745 item C)"
|
|
102
|
+
});
|
|
103
|
+
if (options.generateRuntime)
|
|
104
|
+
try {
|
|
105
|
+
const len = options.generateRuntime().length;
|
|
106
|
+
checks.push(len > 1000 ? { name: "signals runtime", status: "ok", detail: `generated ${len.toLocaleString()} chars` } : { name: "signals runtime", status: "warn", detail: `generated only ${len} chars \u2014 suspiciously short` });
|
|
107
|
+
} catch (e) {
|
|
108
|
+
checks.push({ name: "signals runtime", status: "error", detail: `failed to generate: ${e.message}` });
|
|
109
|
+
}
|
|
110
|
+
return { checks, ok: !checks.some((c) => c.status === "error") };
|
|
111
|
+
}
|
|
112
|
+
export function formatDoctorReport(report) {
|
|
113
|
+
const icon = { ok: "\u2713", warn: "\u26A0", error: "\u2717", info: "\xB7" }, lines = ["stx runtime resolution:"];
|
|
114
|
+
for (const c of report.checks) {
|
|
115
|
+
lines.push(` ${icon[c.status]} ${c.name}: ${c.detail}`);
|
|
116
|
+
if (c.fix)
|
|
117
|
+
lines.push(` \u2192 ${c.fix}`);
|
|
118
|
+
}
|
|
119
|
+
lines.push("");
|
|
120
|
+
lines.push(report.ok ? "\u2713 All framework-runtime layers are aligned." : "\u2717 A runtime layer is stale \u2014 see the fixes above.");
|
|
121
|
+
return lines.join(`
|
|
122
|
+
`);
|
|
123
|
+
}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Document Shell Generator
|
|
3
|
+
*
|
|
4
|
+
* Auto-generates the HTML document wrapper around page content.
|
|
5
|
+
* No .stx file needs to write <!DOCTYPE>, <html>, <head>, or <body>.
|
|
6
|
+
* The shell is configured via stx.config.ts `app.head` and enhanced
|
|
7
|
+
* at build/serve time with runtime scripts, CSS, and meta tags.
|
|
8
|
+
*
|
|
9
|
+
* @module document-shell
|
|
10
|
+
*/
|
|
11
|
+
import type { ColorModeBootConfig } from './color-mode-boot';
|
|
12
|
+
import type { AppHeadConfig } from './types/config-types';
|
|
13
|
+
/**
|
|
14
|
+
* Inline x-cloak rule shipped in the SSR <head> (stacksjs/stx#1736).
|
|
15
|
+
*
|
|
16
|
+
* Must be parsed by the browser BEFORE first paint — so it goes in the head
|
|
17
|
+
* as static markup, not injected by the runtime script (which runs after the
|
|
18
|
+
* body has already painted, the window where false `:if` branches / hidden
|
|
19
|
+
* `:show` elements flash). The `data-stx-cloak` marker makes injection
|
|
20
|
+
* idempotent. The runtime's own late injection (signals.ts) is retained as a
|
|
21
|
+
* belt-and-suspenders for SPA-nav fragments that arrive without SSR head
|
|
22
|
+
* emission.
|
|
23
|
+
*/
|
|
24
|
+
export declare const CLOAK_STYLE = "<style data-stx-cloak>[x-cloak]{display:none !important}</style>";
|
|
25
|
+
/**
|
|
26
|
+
* Markers recording which `<html>` attributes stx itself wrote from `htmlAttrs`
|
|
27
|
+
* (stacksjs/stx#1798).
|
|
28
|
+
*
|
|
29
|
+
* The router needs them to reconcile the root element across an SPA layout
|
|
30
|
+
* change. It cannot just diff `<html>` against the incoming document: by then
|
|
31
|
+
* the color-mode boot script has added its own `dark` class / `data-theme`, and
|
|
32
|
+
* `animation.ts` has added `data-reduced-motion`, none of which exist in the
|
|
33
|
+
* server response — a blind diff would strip them on every navigation and
|
|
34
|
+
* flash the wrong theme. These say exactly what stx put there, so the router
|
|
35
|
+
* can remove precisely that much and leave runtime state alone.
|
|
36
|
+
*
|
|
37
|
+
* `class` is tracked separately because it is the one attribute that gets
|
|
38
|
+
* *merged* into at runtime, so it has to be reconciled token-by-token rather
|
|
39
|
+
* than replaced wholesale.
|
|
40
|
+
*/
|
|
41
|
+
export declare const HTML_ATTRS_MARKER = "data-stx-html-attrs";
|
|
42
|
+
export declare const HTML_CLASS_MARKER = "data-stx-html-class";
|
|
43
|
+
/** Emit `k="v"` pairs with every value attribute-escaped. */
|
|
44
|
+
/**
|
|
45
|
+
* The identity of a `<meta>` tag, for deduplication.
|
|
46
|
+
*
|
|
47
|
+
* Shared by both places that merge config head tags into a page, because they
|
|
48
|
+
* disagreed: injectConfigHeadTags deduped and generateDocumentShell just
|
|
49
|
+
* concatenated, so the same `app.head.meta` produced one `<meta charset>` on a
|
|
50
|
+
* page that owned its document and two on a page built through the shell
|
|
51
|
+
* (stacksjs/stx#1840). One key, one answer.
|
|
52
|
+
*
|
|
53
|
+
* Returns '' for a tag with no identifying attribute, which the callers treat
|
|
54
|
+
* as "cannot dedup, keep it".
|
|
55
|
+
*/
|
|
56
|
+
export declare function metaDedupKey(m: Record<string, string>): string;
|
|
57
|
+
/**
|
|
58
|
+
* Build the attribute string for the shell's `<html>` open tag.
|
|
59
|
+
*
|
|
60
|
+
* `htmlAttrs.lang` wins over the `lang` option so `useHead({ htmlAttrs: { lang } })`
|
|
61
|
+
* is not emitted twice (two `lang=` attributes on one element is a parse error
|
|
62
|
+
* that browsers resolve by keeping the first — i.e. silently ignoring the
|
|
63
|
+
* more specific one).
|
|
64
|
+
*
|
|
65
|
+
* @param htmlAttrs - Attributes from config `app.head.htmlAttrs` / `useHead()`
|
|
66
|
+
* @param lang - The `lang` option, used unless `htmlAttrs.lang` overrides it
|
|
67
|
+
* @returns Leading-space-prefixed attribute string, e.g. ` lang="en" class="marketing"`
|
|
68
|
+
*/
|
|
69
|
+
export declare function buildHtmlAttrs(htmlAttrs?: Record<string, string>, lang?: string): string;
|
|
70
|
+
/**
|
|
71
|
+
* Merge a page's `htmlAttrs` over the config's.
|
|
72
|
+
*
|
|
73
|
+
* Per-key override, except `class`, which unions: a global
|
|
74
|
+
* `app.head.htmlAttrs.class` (`h-full`, a font class, …) shouldn't silently
|
|
75
|
+
* vanish the moment one page adds a class of its own. Same rule as
|
|
76
|
+
* `applyHtmlAttrs`, so "class unions, everything else overrides" holds at every
|
|
77
|
+
* point htmlAttrs are combined.
|
|
78
|
+
*/
|
|
79
|
+
export declare function mergeHtmlAttrs(base?: Record<string, string>, override?: Record<string, string>): Record<string, string>;
|
|
80
|
+
/**
|
|
81
|
+
* Merge `htmlAttrs` into a document that rendered its OWN `<html>` tag.
|
|
82
|
+
*
|
|
83
|
+
* `generateDocumentShell` only runs for pages without a shell, so a page or
|
|
84
|
+
* layout that writes `<html>` itself — the common case, and what SSG emits —
|
|
85
|
+
* would otherwise drop `useHead({ htmlAttrs })` entirely. Whether the attribute
|
|
86
|
+
* lands should not depend on who wrote the document element.
|
|
87
|
+
*
|
|
88
|
+
* `class` unions with what the template already put there (the template's own
|
|
89
|
+
* classes are never dropped); every other attribute is overwritten. Only the
|
|
90
|
+
* classes stx contributed are recorded in the marker, so an SPA navigation
|
|
91
|
+
* removes those and leaves the hand-written ones in place.
|
|
92
|
+
*/
|
|
93
|
+
export declare function applyHtmlAttrs(html: string, htmlAttrs?: Record<string, string>): string;
|
|
94
|
+
/**
|
|
95
|
+
* Insert the inline x-cloak <style> before </head> if a head exists and the
|
|
96
|
+
* style isn't already present. Idempotent (guards on the data-stx-cloak
|
|
97
|
+
* marker). No-op when the output has no </head> — those paths fall back to
|
|
98
|
+
* the runtime's late injection.
|
|
99
|
+
*/
|
|
100
|
+
export declare function injectCloakStyle(html: string): string;
|
|
101
|
+
/**
|
|
102
|
+
* The same decision as `injectCloakStyle`, without the splice
|
|
103
|
+
* (stacksjs/stx#1945).
|
|
104
|
+
*
|
|
105
|
+
* Returns what belongs before `</head>`, or null when nothing does -- the style
|
|
106
|
+
* is already present, or there is no head to put it in. A caller collecting
|
|
107
|
+
* several of these rebuilds the document once instead of once each; the guards
|
|
108
|
+
* stay here, because whether this applies is this module's business.
|
|
109
|
+
*/
|
|
110
|
+
export declare function cloakStyleFragment(html: string): string | null;
|
|
111
|
+
/**
|
|
112
|
+
* Pull the page's own `<link>` / `<style>` off the front of a fragment so the
|
|
113
|
+
* shell can put them in `<head>` where they belong.
|
|
114
|
+
*
|
|
115
|
+
* A fragment page (no `<html>/<head>/<body>` of its own) writes its font links
|
|
116
|
+
* and scoped styles at the top of the file. Without this they land verbatim in
|
|
117
|
+
* `<body>`, which *renders* fine — browsers honour `<link>` and `<style>` in
|
|
118
|
+
* body — but breaks SPA navigation: the router reconciles `head style` and
|
|
119
|
+
* `head link[rel=stylesheet]` only, so on a container-only swap the incoming
|
|
120
|
+
* page's CSS is never applied and the form/page paints unstyled. It looked
|
|
121
|
+
* correct on reload and wrong on navigation, which is what made it hard to see.
|
|
122
|
+
*
|
|
123
|
+
* Deliberately conservative: only the leading run is hoisted (whitespace,
|
|
124
|
+
* comments and `<script>` blocks are stepped over, never moved), so a `<style>`
|
|
125
|
+
* sitting next to the markup it styles further down the page is left alone.
|
|
126
|
+
*/
|
|
127
|
+
export declare function hoistLeadingHeadTags(content: string): {
|
|
128
|
+
body: string;
|
|
129
|
+
hoisted: string[];
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Generate the full HTML document shell wrapping page content.
|
|
133
|
+
*
|
|
134
|
+
* @param content - The rendered page/layout HTML (no document wrapper)
|
|
135
|
+
* @param headConfig - Head configuration from stx.config.ts
|
|
136
|
+
* @param options - Additional options for script/style injection
|
|
137
|
+
* @returns Complete HTML document
|
|
138
|
+
*/
|
|
139
|
+
export declare function generateDocumentShell(content: string, headConfig?: AppHeadConfig, options?: {
|
|
140
|
+
/** Page-specific title (overrides config) */
|
|
141
|
+
title?: string;
|
|
142
|
+
/**
|
|
143
|
+
* The title is already HTML and must NOT be escaped again.
|
|
144
|
+
*
|
|
145
|
+
* Set when the title was lifted out of author-written markup — an
|
|
146
|
+
* `@head <title>` block or `@section('title')` — where entities are already
|
|
147
|
+
* in their final form and any interpolation has already been escaped by
|
|
148
|
+
* `{{ }}`. Escaping it a second time renders `Café & Bar` as
|
|
149
|
+
* `Caf&eacute; &amp; Bar`.
|
|
150
|
+
*
|
|
151
|
+
* A title from `useHead({ title })` is a plain JS string and must stay
|
|
152
|
+
* escaped — that is the XSS path (#1792 item 4).
|
|
153
|
+
*/
|
|
154
|
+
titleIsHtml?: boolean;
|
|
155
|
+
/** Extra styles to inject in <head> (e.g. Css CSS, scoped styles) */
|
|
156
|
+
styles?: string[];
|
|
157
|
+
/** Extra scripts to inject before </body> (e.g. signals runtime, router) */
|
|
158
|
+
bodyScripts?: string[];
|
|
159
|
+
/** Extra scripts/tags for <head> */
|
|
160
|
+
headScripts?: string[];
|
|
161
|
+
/** Stacks to inject (from @push directives) */
|
|
162
|
+
headStack?: string;
|
|
163
|
+
bodyStack?: string;
|
|
164
|
+
/**
|
|
165
|
+
* Pre-paint color-mode config (stacksjs/stx#1794). When present, the boot
|
|
166
|
+
* script is emitted at the very top of <head> — above the stylesheets,
|
|
167
|
+
* because a stylesheet link ahead of it would block its execution and
|
|
168
|
+
* delay the one thing it exists to do early.
|
|
169
|
+
*/
|
|
170
|
+
colorMode?: ColorModeBootConfig;
|
|
171
|
+
}): string;
|
|
172
|
+
export declare function startsDocument(html: string): boolean;
|
|
173
|
+
/**
|
|
174
|
+
* Does this output already carry a document wrapper?
|
|
175
|
+
*
|
|
176
|
+
* ANCHORED, and it has to be. The test used to be an unanchored
|
|
177
|
+
* `/<html[\s>]/i.test(html)`, so a DOCTYPE or an html tag mentioned ANYWHERE —
|
|
178
|
+
* including inside an HTML comment — reported a shell that was not there
|
|
179
|
+
* (stacksjs/stx#1792, part one item 3).
|
|
180
|
+
*
|
|
181
|
+
* The cascade was silent and severe: no shell means no `<head>`, so
|
|
182
|
+
* `injectCloakStyle` bails and every element stx deliberately cloaked renders
|
|
183
|
+
* VISIBLE; no `<meta name="stx-layout">`; and with neither that meta nor
|
|
184
|
+
* `data-stx-content` the router's document sniff fails, so every navigation
|
|
185
|
+
* hard-reloads. One comment mentioning the root element was enough, and the
|
|
186
|
+
* reporter ended up writing a house rule telling authors not to name the tag in
|
|
187
|
+
* prose.
|
|
188
|
+
*
|
|
189
|
+
* Shares `startsDocument` with the app-shell path, which was anchored for the
|
|
190
|
+
* same reason in #1787 and had been the outlier's correct twin ever since.
|
|
191
|
+
*/
|
|
192
|
+
export declare function hasDocumentShell(html: string): boolean;
|
|
193
|
+
/**
|
|
194
|
+
* Inject the config `app.head` tags — script / meta / link / headRaw, but NOT
|
|
195
|
+
* `title` — into an EXISTING `<head>`.
|
|
196
|
+
*
|
|
197
|
+
* `generateDocumentShell` populates config head only when IT builds the shell.
|
|
198
|
+
* A page whose layout already renders `<html><head>` (the common case, and what
|
|
199
|
+
* SSG/static builds emit) skips that path, so global config head never lands —
|
|
200
|
+
* most visibly a site-wide analytics `<script>` (Fathom/Contentsquare/…) that
|
|
201
|
+
* silently never injects on layout-based or statically-built pages.
|
|
202
|
+
*
|
|
203
|
+
* Idempotent: skips a `<script src>`, `<link href>`, meta name/property/charset/
|
|
204
|
+
* http-equiv, or inline `<script>` content already present in the head, so it's
|
|
205
|
+
* safe to run even when the layout or `useHead` already emitted the same tag.
|
|
206
|
+
* `title` is intentionally excluded — the page/layout owns its own title.
|
|
207
|
+
*/
|
|
208
|
+
export declare function injectConfigHeadTags(html: string, headConfig?: AppHeadConfig): string;
|
|
209
|
+
/**
|
|
210
|
+
* Wrap HTML in a document shell if it doesn't already have one.
|
|
211
|
+
* This is the main entry point — called at the top level after all
|
|
212
|
+
* directive processing is complete.
|
|
213
|
+
*
|
|
214
|
+
* When the html ALREADY has a shell we don't re-wrap (and don't touch its
|
|
215
|
+
* head here — the caller injects config-only head via `injectConfigHeadTags`,
|
|
216
|
+
* so runtime `useHead` tags aren't double-emitted).
|
|
217
|
+
*/
|
|
218
|
+
export declare function ensureDocumentShell(html: string, headConfig?: AppHeadConfig, options?: Parameters<typeof generateDocumentShell>[2], alreadyHasShell?: boolean): string;
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
import { generateColorModeBootScript } from "./color-mode-boot.js";
|
|
2
|
+
export const CLOAK_STYLE = "<style data-stx-cloak>[x-cloak]{display:none !important}</style>", HTML_ATTRS_MARKER = "data-stx-html-attrs", HTML_CLASS_MARKER = "data-stx-html-class";
|
|
3
|
+
const SAFE_ATTR_NAME = /^[A-Za-z_:][\w:.-]*$/;
|
|
4
|
+
function escapeAttr(value) {
|
|
5
|
+
return String(value).replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
|
6
|
+
}
|
|
7
|
+
function escapeText(value) {
|
|
8
|
+
return String(value).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
9
|
+
}
|
|
10
|
+
export function metaDedupKey(m) {
|
|
11
|
+
if (m.name)
|
|
12
|
+
return `name="${m.name}"`;
|
|
13
|
+
if (m.property)
|
|
14
|
+
return `property="${m.property}"`;
|
|
15
|
+
if (m.charset != null)
|
|
16
|
+
return "charset=";
|
|
17
|
+
if (m["http-equiv"])
|
|
18
|
+
return `http-equiv="${m["http-equiv"]}"`;
|
|
19
|
+
return "";
|
|
20
|
+
}
|
|
21
|
+
function attrPairs(entries, skip) {
|
|
22
|
+
return Object.entries(entries).filter(([k]) => !skip?.(k)).map(([k, v]) => `${k}="${escapeAttr(String(v))}"`).join(" ");
|
|
23
|
+
}
|
|
24
|
+
export function buildHtmlAttrs(htmlAttrs = {}, lang = "en") {
|
|
25
|
+
const rest = [], managed = [];
|
|
26
|
+
let className = "", resolvedLang = lang;
|
|
27
|
+
for (const [rawName, value] of Object.entries(htmlAttrs || {})) {
|
|
28
|
+
if (value == null)
|
|
29
|
+
continue;
|
|
30
|
+
const name = rawName.trim();
|
|
31
|
+
if (!SAFE_ATTR_NAME.test(name))
|
|
32
|
+
continue;
|
|
33
|
+
const lower = name.toLowerCase();
|
|
34
|
+
if (lower === "lang") {
|
|
35
|
+
resolvedLang = String(value);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (lower === "class") {
|
|
39
|
+
className = String(value).trim();
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
rest.push(` ${name}="${escapeAttr(String(value))}"`);
|
|
43
|
+
managed.push(name);
|
|
44
|
+
}
|
|
45
|
+
let out = ` lang="${escapeAttr(resolvedLang)}"`;
|
|
46
|
+
if (className)
|
|
47
|
+
out += ` class="${escapeAttr(className)}"`;
|
|
48
|
+
out += rest.join("");
|
|
49
|
+
if (className)
|
|
50
|
+
out += ` ${HTML_CLASS_MARKER}="${escapeAttr(className)}"`;
|
|
51
|
+
if (managed.length)
|
|
52
|
+
out += ` ${HTML_ATTRS_MARKER}="${escapeAttr(managed.join(" "))}"`;
|
|
53
|
+
return out;
|
|
54
|
+
}
|
|
55
|
+
export function mergeHtmlAttrs(base = {}, override = {}) {
|
|
56
|
+
const merged = { ...base, ...override };
|
|
57
|
+
if (base.class && override.class) {
|
|
58
|
+
const tokens = base.class.split(/\s+/).filter(Boolean);
|
|
59
|
+
for (const token of override.class.split(/\s+/).filter(Boolean))
|
|
60
|
+
if (!tokens.includes(token))
|
|
61
|
+
tokens.push(token);
|
|
62
|
+
merged.class = tokens.join(" ");
|
|
63
|
+
}
|
|
64
|
+
return merged;
|
|
65
|
+
}
|
|
66
|
+
export function applyHtmlAttrs(html, htmlAttrs = {}) {
|
|
67
|
+
if (!htmlAttrs || Object.keys(htmlAttrs).length === 0)
|
|
68
|
+
return html;
|
|
69
|
+
const openTag = html.match(/<html\b([^>]*)>/i);
|
|
70
|
+
if (!openTag)
|
|
71
|
+
return html;
|
|
72
|
+
const existing = {}, order = [], attrRe = /([A-Za-z_:][\w:.-]*)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;
|
|
73
|
+
let m;
|
|
74
|
+
while ((m = attrRe.exec(openTag[1])) !== null) {
|
|
75
|
+
const name = m[1];
|
|
76
|
+
if (!(name in existing))
|
|
77
|
+
order.push(name);
|
|
78
|
+
existing[name] = m[2] ?? m[3] ?? m[4] ?? "";
|
|
79
|
+
}
|
|
80
|
+
const addedClasses = [], managed = [];
|
|
81
|
+
for (const [rawName, value] of Object.entries(htmlAttrs)) {
|
|
82
|
+
if (value == null)
|
|
83
|
+
continue;
|
|
84
|
+
const name = rawName.trim();
|
|
85
|
+
if (!SAFE_ATTR_NAME.test(name))
|
|
86
|
+
continue;
|
|
87
|
+
const lower = name.toLowerCase();
|
|
88
|
+
if (lower === "class") {
|
|
89
|
+
const present = (existing.class || "").split(/\s+/).filter(Boolean);
|
|
90
|
+
for (const token of String(value).split(/\s+/).filter(Boolean))
|
|
91
|
+
if (!present.includes(token)) {
|
|
92
|
+
present.push(token);
|
|
93
|
+
addedClasses.push(token);
|
|
94
|
+
}
|
|
95
|
+
if (!("class" in existing))
|
|
96
|
+
order.push("class");
|
|
97
|
+
existing.class = present.join(" ");
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (!(name in existing))
|
|
101
|
+
order.push(name);
|
|
102
|
+
existing[name] = String(value);
|
|
103
|
+
if (lower !== "lang")
|
|
104
|
+
managed.push(name);
|
|
105
|
+
}
|
|
106
|
+
if (addedClasses.length) {
|
|
107
|
+
if (!(HTML_CLASS_MARKER in existing))
|
|
108
|
+
order.push(HTML_CLASS_MARKER);
|
|
109
|
+
existing[HTML_CLASS_MARKER] = addedClasses.join(" ");
|
|
110
|
+
}
|
|
111
|
+
if (managed.length) {
|
|
112
|
+
if (!(HTML_ATTRS_MARKER in existing))
|
|
113
|
+
order.push(HTML_ATTRS_MARKER);
|
|
114
|
+
existing[HTML_ATTRS_MARKER] = managed.join(" ");
|
|
115
|
+
}
|
|
116
|
+
const rebuilt = order.map((name) => ` ${name}="${escapeAttr(existing[name])}"`).join("");
|
|
117
|
+
return html.replace(openTag[0], () => `<html${rebuilt}>`);
|
|
118
|
+
}
|
|
119
|
+
export function injectCloakStyle(html) {
|
|
120
|
+
const fragment = cloakStyleFragment(html);
|
|
121
|
+
if (fragment === null)
|
|
122
|
+
return html;
|
|
123
|
+
const headCloseIdx = html.lastIndexOf("</head>");
|
|
124
|
+
return `${html.slice(0, headCloseIdx)}${fragment}${html.slice(headCloseIdx)}`;
|
|
125
|
+
}
|
|
126
|
+
export function cloakStyleFragment(html) {
|
|
127
|
+
if (html.includes("data-stx-cloak"))
|
|
128
|
+
return null;
|
|
129
|
+
if (html.lastIndexOf("</head>") === -1)
|
|
130
|
+
return null;
|
|
131
|
+
return `${CLOAK_STYLE}
|
|
132
|
+
`;
|
|
133
|
+
}
|
|
134
|
+
export function hoistLeadingHeadTags(content) {
|
|
135
|
+
const hoisted = [];
|
|
136
|
+
let i = 0;
|
|
137
|
+
while (i < content.length) {
|
|
138
|
+
const rest = content.slice(i), ws = rest.match(/^\s+/);
|
|
139
|
+
if (ws) {
|
|
140
|
+
i += ws[0].length;
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (rest.startsWith("<!--")) {
|
|
144
|
+
const end = content.indexOf("-->", i);
|
|
145
|
+
if (end === -1)
|
|
146
|
+
break;
|
|
147
|
+
i = end + 3;
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
const scriptOpen = rest.match(/^<script\b[^>]*>/i);
|
|
151
|
+
if (scriptOpen) {
|
|
152
|
+
const end = content.toLowerCase().indexOf("</script>", i + scriptOpen[0].length);
|
|
153
|
+
if (end === -1)
|
|
154
|
+
break;
|
|
155
|
+
i = end + 9;
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
const link = rest.match(/^<link\b[^>]*>/i);
|
|
159
|
+
if (link) {
|
|
160
|
+
hoisted.push(link[0]);
|
|
161
|
+
i += link[0].length;
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
const meta = rest.match(/^<meta\b[^>]*>/i);
|
|
165
|
+
if (meta) {
|
|
166
|
+
hoisted.push(meta[0]);
|
|
167
|
+
i += meta[0].length;
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
const style = rest.match(/^<style\b[^>]*>[\s\S]*?<\/style>/i);
|
|
171
|
+
if (style) {
|
|
172
|
+
hoisted.push(style[0]);
|
|
173
|
+
i += style[0].length;
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
if (hoisted.length === 0)
|
|
179
|
+
return { body: content, hoisted };
|
|
180
|
+
let body = "", j = 0;
|
|
181
|
+
while (j < content.length && j < i) {
|
|
182
|
+
const rest = content.slice(j), link = rest.match(/^<link\b[^>]*>/i);
|
|
183
|
+
if (link && hoisted.includes(link[0])) {
|
|
184
|
+
j += link[0].length;
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
const meta = rest.match(/^<meta\b[^>]*>/i);
|
|
188
|
+
if (meta && hoisted.includes(meta[0])) {
|
|
189
|
+
j += meta[0].length;
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
const style = rest.match(/^<style\b[^>]*>[\s\S]*?<\/style>/i);
|
|
193
|
+
if (style && hoisted.includes(style[0])) {
|
|
194
|
+
j += style[0].length;
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
body += content[j];
|
|
198
|
+
j++;
|
|
199
|
+
}
|
|
200
|
+
body += content.slice(i);
|
|
201
|
+
return { body, hoisted };
|
|
202
|
+
}
|
|
203
|
+
export function generateDocumentShell(content, headConfig = {}, options = {}) {
|
|
204
|
+
const {
|
|
205
|
+
title: configTitle = "stx App",
|
|
206
|
+
lang = "en",
|
|
207
|
+
meta = [],
|
|
208
|
+
link = [],
|
|
209
|
+
script: headScriptTags = [],
|
|
210
|
+
headRaw = "",
|
|
211
|
+
htmlAttrs = {},
|
|
212
|
+
bodyClass = "",
|
|
213
|
+
bodyAttrs = {}
|
|
214
|
+
} = headConfig, pageTitle = options.title || configTitle, defaultMeta = [
|
|
215
|
+
{ charset: "UTF-8" },
|
|
216
|
+
{ name: "viewport", content: "width=device-width, initial-scale=1.0" }
|
|
217
|
+
], configuredMetaKeys = new Set(meta.map(metaDedupKey).filter(Boolean)), metaTags = [
|
|
218
|
+
...defaultMeta.filter((d) => !configuredMetaKeys.has(metaDedupKey(d))),
|
|
219
|
+
...meta
|
|
220
|
+
].map((m) => {
|
|
221
|
+
return ` <meta ${attrPairs(m)}>`;
|
|
222
|
+
}).join(`
|
|
223
|
+
`), linkTags = link.map((l) => {
|
|
224
|
+
return ` <link ${attrPairs(l)}>`;
|
|
225
|
+
}).join(`
|
|
226
|
+
`), configHeadScripts = headScriptTags.map((s) => {
|
|
227
|
+
if (s.src)
|
|
228
|
+
return ` <script ${attrPairs(s, (k) => k === "content")}></script>`;
|
|
229
|
+
if (s.content)
|
|
230
|
+
return ` <script>${s.content}</script>`;
|
|
231
|
+
return "";
|
|
232
|
+
}).filter(Boolean).join(`
|
|
233
|
+
`), htmlAttrStr = buildHtmlAttrs(htmlAttrs, lang), bodyAttrStr = Object.entries(bodyAttrs).map(([k, v]) => ` ${k}="${escapeAttr(String(v))}"`).join(""), bodyClassStr = bodyClass ? ` class="${escapeAttr(bodyClass)}"` : "", { body: pageBody, hoisted: pageHeadTags } = hoistLeadingHeadTags(content), headParts = [
|
|
234
|
+
metaTags,
|
|
235
|
+
options.colorMode ? ` ${generateColorModeBootScript(options.colorMode)}` : "",
|
|
236
|
+
` <title>${options.titleIsHtml ? pageTitle : escapeText(pageTitle)}</title>`,
|
|
237
|
+
` ${CLOAK_STYLE}`,
|
|
238
|
+
linkTags,
|
|
239
|
+
configHeadScripts,
|
|
240
|
+
headRaw ? ` ${headRaw}` : "",
|
|
241
|
+
...(options.styles || []).map((s) => ` ${s}`),
|
|
242
|
+
...pageHeadTags.map((s) => ` ${s}`),
|
|
243
|
+
...(options.headScripts || []).map((s) => ` ${s}`),
|
|
244
|
+
options.headStack || ""
|
|
245
|
+
].filter(Boolean), bodyParts = [
|
|
246
|
+
pageBody,
|
|
247
|
+
...(options.bodyScripts || []).map((s) => s),
|
|
248
|
+
options.bodyStack || ""
|
|
249
|
+
].filter(Boolean);
|
|
250
|
+
return `<!DOCTYPE html>
|
|
251
|
+
<html${htmlAttrStr}>
|
|
252
|
+
<head>
|
|
253
|
+
${headParts.join(`
|
|
254
|
+
`)}
|
|
255
|
+
</head>
|
|
256
|
+
<body${bodyClassStr}${bodyAttrStr}>
|
|
257
|
+
${bodyParts.join(`
|
|
258
|
+
`)}
|
|
259
|
+
</body>
|
|
260
|
+
</html>`;
|
|
261
|
+
}
|
|
262
|
+
const DOCUMENT_PREFIX_WHITESPACE = /\s+/y, DOCUMENT_PREFIX_PREAMBLE = /<(script|style)\b[^>]*>/iy, DOCUMENT_PREFIX_SCRIPT_CLOSE = /<\/script>/gi, DOCUMENT_PREFIX_STYLE_CLOSE = /<\/style>/gi, DOCUMENT_PREFIX_DOCTYPE = /<!DOCTYPE\b/iy, DOCUMENT_PREFIX_HTML = /<html[\s>]/iy;
|
|
263
|
+
export function startsDocument(html) {
|
|
264
|
+
let i = 0;
|
|
265
|
+
while (i < html.length) {
|
|
266
|
+
DOCUMENT_PREFIX_WHITESPACE.lastIndex = i;
|
|
267
|
+
if (DOCUMENT_PREFIX_WHITESPACE.exec(html)) {
|
|
268
|
+
i = DOCUMENT_PREFIX_WHITESPACE.lastIndex;
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
271
|
+
if (html.startsWith("<!--", i)) {
|
|
272
|
+
const end = html.indexOf("-->", i);
|
|
273
|
+
if (end === -1)
|
|
274
|
+
return !1;
|
|
275
|
+
i = end + 3;
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
DOCUMENT_PREFIX_PREAMBLE.lastIndex = i;
|
|
279
|
+
const preamble = DOCUMENT_PREFIX_PREAMBLE.exec(html);
|
|
280
|
+
if (preamble) {
|
|
281
|
+
const close = preamble[1].toLowerCase() === "script" ? DOCUMENT_PREFIX_SCRIPT_CLOSE : DOCUMENT_PREFIX_STYLE_CLOSE;
|
|
282
|
+
close.lastIndex = DOCUMENT_PREFIX_PREAMBLE.lastIndex;
|
|
283
|
+
const end = close.exec(html);
|
|
284
|
+
if (end === null)
|
|
285
|
+
return !1;
|
|
286
|
+
i = end.index + end[0].length;
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
DOCUMENT_PREFIX_DOCTYPE.lastIndex = i;
|
|
290
|
+
if (DOCUMENT_PREFIX_DOCTYPE.test(html))
|
|
291
|
+
return !0;
|
|
292
|
+
DOCUMENT_PREFIX_HTML.lastIndex = i;
|
|
293
|
+
return DOCUMENT_PREFIX_HTML.test(html);
|
|
294
|
+
}
|
|
295
|
+
return !1;
|
|
296
|
+
}
|
|
297
|
+
export function hasDocumentShell(html) {
|
|
298
|
+
return startsDocument(html);
|
|
299
|
+
}
|
|
300
|
+
export function injectConfigHeadTags(html, headConfig = {}) {
|
|
301
|
+
const headCloseIdx = html.lastIndexOf("</head>");
|
|
302
|
+
if (headCloseIdx === -1)
|
|
303
|
+
return html;
|
|
304
|
+
const { meta = [], link = [], script = [], headRaw = "" } = headConfig, head = html.slice(0, headCloseIdx), parts = [];
|
|
305
|
+
for (const m of meta) {
|
|
306
|
+
const dedup = metaDedupKey(m);
|
|
307
|
+
if (dedup && head.includes(dedup))
|
|
308
|
+
continue;
|
|
309
|
+
parts.push(` <meta ${attrPairs(m)}>`);
|
|
310
|
+
}
|
|
311
|
+
for (const l of link) {
|
|
312
|
+
if (l.href && head.includes(`href="${l.href}"`))
|
|
313
|
+
continue;
|
|
314
|
+
parts.push(` <link ${attrPairs(l)}>`);
|
|
315
|
+
}
|
|
316
|
+
for (const s of script)
|
|
317
|
+
if (s.src) {
|
|
318
|
+
if (head.includes(`src="${s.src}"`))
|
|
319
|
+
continue;
|
|
320
|
+
parts.push(` <script ${attrPairs(s, (k) => k === "content")}></script>`);
|
|
321
|
+
} else if (s.content) {
|
|
322
|
+
if (head.includes(s.content))
|
|
323
|
+
continue;
|
|
324
|
+
parts.push(` <script>${s.content}</script>`);
|
|
325
|
+
}
|
|
326
|
+
if (headRaw && !head.includes(headRaw))
|
|
327
|
+
parts.push(` ${headRaw}`);
|
|
328
|
+
if (parts.length === 0)
|
|
329
|
+
return html;
|
|
330
|
+
return `${html.slice(0, headCloseIdx)}${parts.join(`
|
|
331
|
+
`)}
|
|
332
|
+
${html.slice(headCloseIdx)}`;
|
|
333
|
+
}
|
|
334
|
+
export function ensureDocumentShell(html, headConfig = {}, options = {}, alreadyHasShell) {
|
|
335
|
+
if (alreadyHasShell ?? hasDocumentShell(html))
|
|
336
|
+
return html;
|
|
337
|
+
return generateDocumentShell(html, headConfig, options);
|
|
338
|
+
}
|