@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,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lift inline blobs that repeat across pages, whatever they are.
|
|
3
|
+
*
|
|
4
|
+
* `build-externalize` handles the three blobs stx knows by name — the signals
|
|
5
|
+
* runtime, the router, and the generated stylesheet. Everything else it emits
|
|
6
|
+
* inline stays inline, and on a real multi-page site that is where the bytes
|
|
7
|
+
* actually are: the ts-cloud dashboard ships 54 pages at 12.5MB, of which
|
|
8
|
+
* 10.3MB is byte-identical `<script data-stx-scoped>` and unattributed
|
|
9
|
+
* `<style>` blocks repeated page after page. None of it is cacheable across a
|
|
10
|
+
* navigation, and it is 4x the size of the three named blobs combined.
|
|
11
|
+
*
|
|
12
|
+
* The rule here needs no allowlist: a blob that appears byte-for-byte on two
|
|
13
|
+
* or more pages is shared by construction, so hoisting it into one
|
|
14
|
+
* content-addressed file is a pure win — every page that referenced it now
|
|
15
|
+
* downloads it once for the whole site instead of once per page. A blob that
|
|
16
|
+
* appears on exactly one page is left alone, because turning it into a second
|
|
17
|
+
* request would make that page slower, not smaller.
|
|
18
|
+
*
|
|
19
|
+
* Requires the whole output directory, which is why it is a separate pass from
|
|
20
|
+
* the pure per-document `externalizeHtml`: "does this appear elsewhere" is not
|
|
21
|
+
* a question one document can answer, and SSR (which shares that function) has
|
|
22
|
+
* no elsewhere to look at.
|
|
23
|
+
*
|
|
24
|
+
* @module build-externalize-repeated
|
|
25
|
+
*/
|
|
26
|
+
import { type ExternalizeResult } from './build-externalize';
|
|
27
|
+
/**
|
|
28
|
+
* Hoist every inline script/style body that appears on more than one page.
|
|
29
|
+
*
|
|
30
|
+
* Runs after {@link externalizeSharedAssets}, over the same directory, and is
|
|
31
|
+
* equally safe to run twice: the second pass sees `src`/`href` references with
|
|
32
|
+
* no inline body and matches nothing.
|
|
33
|
+
*/
|
|
34
|
+
export declare function externalizeRepeatedAssets(outDir: string): ExternalizeResult;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { EXTERNALIZED_ASSET_DIR } from "./build-externalize.js";
|
|
4
|
+
const MIN_BLOB_BYTES = 1024, INLINE_BLOB = /<(script|style)\b([^>]*)>([\s\S]*?)<\/\1>/gi, JS_TYPES = new Set(["", "module", "text/javascript", "application/javascript", "module/javascript"]);
|
|
5
|
+
function contentHash(source) {
|
|
6
|
+
return Bun.hash(source).toString(16).slice(0, 8);
|
|
7
|
+
}
|
|
8
|
+
function listHtmlFiles(dir) {
|
|
9
|
+
const found = [], walk = (current) => {
|
|
10
|
+
for (const entry of fs.readdirSync(current, { withFileTypes: !0 })) {
|
|
11
|
+
const full = path.join(current, entry.name);
|
|
12
|
+
if (entry.isDirectory())
|
|
13
|
+
walk(full);
|
|
14
|
+
else if (entry.isFile() && full.endsWith(".html"))
|
|
15
|
+
found.push(full);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
if (fs.existsSync(dir))
|
|
19
|
+
walk(dir);
|
|
20
|
+
return found;
|
|
21
|
+
}
|
|
22
|
+
function attrValue(attrs, name) {
|
|
23
|
+
const match = attrs.match(new RegExp(`\\b${name}\\s*=\\s*("([^"]*)"|'([^']*)'|([^\\s>]+))`, "i"));
|
|
24
|
+
if (!match)
|
|
25
|
+
return;
|
|
26
|
+
return match[2] ?? match[3] ?? match[4] ?? "";
|
|
27
|
+
}
|
|
28
|
+
function isExternalizable(tag, attrs, body) {
|
|
29
|
+
if (body.length < MIN_BLOB_BYTES)
|
|
30
|
+
return !1;
|
|
31
|
+
if (/\b(?:src|href)\s*=/i.test(attrs))
|
|
32
|
+
return !1;
|
|
33
|
+
if (tag.toLowerCase() === "script") {
|
|
34
|
+
if (!JS_TYPES.has((attrValue(attrs, "type") ?? "").trim().toLowerCase()))
|
|
35
|
+
return !1;
|
|
36
|
+
return !0;
|
|
37
|
+
}
|
|
38
|
+
return !0;
|
|
39
|
+
}
|
|
40
|
+
function templateRanges(html) {
|
|
41
|
+
const ranges = [];
|
|
42
|
+
for (const match of html.matchAll(/<template\b[^>]*>[\s\S]*?<\/template>/gi))
|
|
43
|
+
ranges.push([match.index, match.index + match[0].length]);
|
|
44
|
+
return ranges;
|
|
45
|
+
}
|
|
46
|
+
export function externalizeRepeatedAssets(outDir) {
|
|
47
|
+
const result = { pages: 0, assets: 0, bytesInlined: 0 }, files = listHtmlFiles(outDir);
|
|
48
|
+
if (files.length < 2)
|
|
49
|
+
return result;
|
|
50
|
+
const sources = new Map, occurrences = new Map;
|
|
51
|
+
for (const file of files) {
|
|
52
|
+
const html = fs.readFileSync(file, "utf8");
|
|
53
|
+
sources.set(file, html);
|
|
54
|
+
const templates = templateRanges(html);
|
|
55
|
+
for (const match of html.matchAll(INLINE_BLOB)) {
|
|
56
|
+
const [whole, tag, attrs, body] = match;
|
|
57
|
+
if (!isExternalizable(tag, attrs, body))
|
|
58
|
+
continue;
|
|
59
|
+
if (templates.some(([start, end]) => match.index >= start && match.index < end))
|
|
60
|
+
continue;
|
|
61
|
+
const key = `${tag.toLowerCase()}\x00${body}`, list = occurrences.get(key);
|
|
62
|
+
if (list)
|
|
63
|
+
list.push({ file, whole, tag, attrs, body });
|
|
64
|
+
else
|
|
65
|
+
occurrences.set(key, [{ file, whole, tag, attrs, body }]);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const shared = [...occurrences.values()].filter((list) => new Set(list.map((o) => o.file)).size > 1);
|
|
69
|
+
if (shared.length === 0)
|
|
70
|
+
return result;
|
|
71
|
+
const assetDir = path.join(outDir, EXTERNALIZED_ASSET_DIR), rewrites = new Map(sources), bytesPerFile = new Map, assets = [];
|
|
72
|
+
for (const list of shared) {
|
|
73
|
+
const { tag, body } = list[0], isScript = tag.toLowerCase() === "script", filename = `${isScript ? "chunk" : "style"}.${contentHash(body)}.${isScript ? "js" : "css"}`;
|
|
74
|
+
assets.push({
|
|
75
|
+
filename,
|
|
76
|
+
contents: body,
|
|
77
|
+
contentType: isScript ? "text/javascript; charset=utf-8" : "text/css; charset=utf-8"
|
|
78
|
+
});
|
|
79
|
+
const href = `/${EXTERNALIZED_ASSET_DIR}/${filename}`;
|
|
80
|
+
for (const occurrence of list) {
|
|
81
|
+
const replacement = isScript ? `<script${occurrence.attrs} src="${href}"></script>` : `<link${occurrence.attrs} rel="stylesheet" href="${href}">`, current = rewrites.get(occurrence.file), next = current.replace(occurrence.whole, () => replacement);
|
|
82
|
+
if (next === current)
|
|
83
|
+
continue;
|
|
84
|
+
rewrites.set(occurrence.file, next);
|
|
85
|
+
bytesPerFile.set(occurrence.file, (bytesPerFile.get(occurrence.file) ?? 0) + occurrence.body.length);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
fs.mkdirSync(assetDir, { recursive: !0 });
|
|
89
|
+
for (const asset of assets) {
|
|
90
|
+
fs.writeFileSync(path.join(assetDir, asset.filename), asset.contents);
|
|
91
|
+
result.assets++;
|
|
92
|
+
}
|
|
93
|
+
for (const [file, html] of rewrites) {
|
|
94
|
+
if (html === sources.get(file))
|
|
95
|
+
continue;
|
|
96
|
+
fs.writeFileSync(file, html);
|
|
97
|
+
result.pages++;
|
|
98
|
+
result.bytesInlined += bytesPerFile.get(file) ?? 0;
|
|
99
|
+
}
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lift shared inline blobs out of built HTML into content-hashed assets.
|
|
3
|
+
*
|
|
4
|
+
* The static build inlines the whole signals runtime and the whole generated
|
|
5
|
+
* stylesheet into every page. On a 35-page site that is ~118KB of
|
|
6
|
+
* byte-identical runtime per page and a separate copy of the reset in each one,
|
|
7
|
+
* none of it cacheable across a navigation, and `find dist -name '*.js'`
|
|
8
|
+
* returns nothing at all (stacksjs/stx#1865, #1878).
|
|
9
|
+
*
|
|
10
|
+
* Done as a post-pass over the emitted HTML rather than by threading
|
|
11
|
+
* `buildMode` through the renderer, deliberately. The existing `compile` branch
|
|
12
|
+
* emits `/__stx/runtime.__STX_HASH__.js`, a placeholder only the production
|
|
13
|
+
* builder knows how to rewrite, and setting that mode also suppresses the
|
|
14
|
+
* document shell — so reusing it on the SSG path produces pages that reference
|
|
15
|
+
* a 404 and lose their `<html>` wrapper. A post-pass needs neither.
|
|
16
|
+
*
|
|
17
|
+
* Content-addressed, so identical blobs across pages collapse to one file: the
|
|
18
|
+
* runtime is byte-identical everywhere and becomes a single asset, while
|
|
19
|
+
* per-page CSS dedupes only where pages genuinely share a stylesheet.
|
|
20
|
+
*
|
|
21
|
+
* The rewrite itself is `externalizeHtml`, which touches no filesystem. SSR has
|
|
22
|
+
* the same problem in a worse form — a static build inlines the runtime once
|
|
23
|
+
* per page, a server inlines it once per *request* — and it cannot use a
|
|
24
|
+
* post-pass over a directory because there are no files. Sharing the pure
|
|
25
|
+
* function means the two paths cannot drift into rewriting HTML differently.
|
|
26
|
+
*
|
|
27
|
+
* @module build-externalize
|
|
28
|
+
*/
|
|
29
|
+
/** Where externalized assets are written, relative to the output directory. */
|
|
30
|
+
export declare const EXTERNALIZED_ASSET_DIR = "_stx";
|
|
31
|
+
export interface ExternalizeResult {
|
|
32
|
+
/** HTML files rewritten. */
|
|
33
|
+
pages: number;
|
|
34
|
+
/** Distinct asset files written. */
|
|
35
|
+
assets: number;
|
|
36
|
+
/** Bytes removed from HTML (before any compression). */
|
|
37
|
+
bytesInlined: number;
|
|
38
|
+
}
|
|
39
|
+
/** A blob lifted out of the HTML, ready to be written or served. */
|
|
40
|
+
export interface ExternalizedAsset {
|
|
41
|
+
/** Content-addressed filename, e.g. `runtime.1a2b3c4d.js`. */
|
|
42
|
+
filename: string;
|
|
43
|
+
contents: string;
|
|
44
|
+
/** MIME type, so a server can respond without re-deriving it from the name. */
|
|
45
|
+
contentType: string;
|
|
46
|
+
}
|
|
47
|
+
export interface ExternalizeHtmlResult {
|
|
48
|
+
html: string;
|
|
49
|
+
/** Distinct assets this page referenced. Deduped within the page. */
|
|
50
|
+
assets: ExternalizedAsset[];
|
|
51
|
+
/** Bytes removed from the HTML, before any compression. */
|
|
52
|
+
bytesInlined: number;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Lift the shared blobs out of one HTML document.
|
|
56
|
+
*
|
|
57
|
+
* Pure: returns the rewritten HTML and the assets it extracted, and writes
|
|
58
|
+
* nothing. Callers decide whether those assets become files on disk or entries
|
|
59
|
+
* in a server's cache.
|
|
60
|
+
*
|
|
61
|
+
* Safe to run twice — a tag that is already a `src`/`href` reference has no
|
|
62
|
+
* inline body to match, so a second pass extracts nothing and returns the input
|
|
63
|
+
* unchanged.
|
|
64
|
+
*/
|
|
65
|
+
export declare function externalizeHtml(html: string, basePath?: string): ExternalizeHtmlResult;
|
|
66
|
+
/**
|
|
67
|
+
* Rewrite every HTML file under `outDir`, moving the signals runtime and the
|
|
68
|
+
* generated stylesheet into `_stx/` and linking to them.
|
|
69
|
+
*
|
|
70
|
+
* Safe to run twice: a page whose runtime is already a `src=` reference has no
|
|
71
|
+
* inline body to match, so a second pass is a no-op.
|
|
72
|
+
*/
|
|
73
|
+
export declare function externalizeSharedAssets(outDir: string): ExternalizeResult;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
export const EXTERNALIZED_ASSET_DIR = "_stx";
|
|
4
|
+
function contentHash(source) {
|
|
5
|
+
return Bun.hash(source).toString(16).slice(0, 8);
|
|
6
|
+
}
|
|
7
|
+
function listHtmlFiles(dir) {
|
|
8
|
+
const found = [], walk = (current) => {
|
|
9
|
+
for (const entry of fs.readdirSync(current, { withFileTypes: !0 })) {
|
|
10
|
+
const full = path.join(current, entry.name);
|
|
11
|
+
if (entry.isDirectory())
|
|
12
|
+
walk(full);
|
|
13
|
+
else if (entry.isFile() && full.endsWith(".html"))
|
|
14
|
+
found.push(full);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
if (fs.existsSync(dir))
|
|
18
|
+
walk(dir);
|
|
19
|
+
return found;
|
|
20
|
+
}
|
|
21
|
+
const BLOB_KINDS = [
|
|
22
|
+
{
|
|
23
|
+
pattern: /<script\b([^>]*\bdata-stx-runtime\b[^>]*)>([\s\S]*?)<\/script>/gi,
|
|
24
|
+
prefix: "runtime",
|
|
25
|
+
extension: "js",
|
|
26
|
+
contentType: "text/javascript; charset=utf-8",
|
|
27
|
+
replace: (href) => `<script data-stx-runtime src="${href}"></script>`
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
pattern: /<script\b([^>]*\bdata-stx-router\b[^>]*)>([\s\S]*?)<\/script>/gi,
|
|
31
|
+
prefix: "router",
|
|
32
|
+
extension: "js",
|
|
33
|
+
contentType: "text/javascript; charset=utf-8",
|
|
34
|
+
replace: (href) => `<script data-stx-router src="${href}"></script>`
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
pattern: /<style\b([^>]*\bdata-css=(?:"generated"|'generated')[^>]*)>([\s\S]*?)<\/style>/gi,
|
|
38
|
+
prefix: "css",
|
|
39
|
+
extension: "css",
|
|
40
|
+
contentType: "text/css; charset=utf-8",
|
|
41
|
+
replace: (href) => `<link data-css="generated" rel="stylesheet" href="${href}">`
|
|
42
|
+
}
|
|
43
|
+
];
|
|
44
|
+
export function externalizeHtml(html, basePath = `/${EXTERNALIZED_ASSET_DIR}`) {
|
|
45
|
+
const assets = [], seen = new Set;
|
|
46
|
+
let bytesInlined = 0, out = html;
|
|
47
|
+
for (const kind of BLOB_KINDS)
|
|
48
|
+
out = out.replace(kind.pattern, (whole, attrs, body) => {
|
|
49
|
+
if (/\b(?:src|href)\s*=/.test(attrs) || !body.trim())
|
|
50
|
+
return whole;
|
|
51
|
+
const filename = `${kind.prefix}.${contentHash(body)}.${kind.extension}`;
|
|
52
|
+
if (!seen.has(filename)) {
|
|
53
|
+
seen.add(filename);
|
|
54
|
+
assets.push({ filename, contents: body, contentType: kind.contentType });
|
|
55
|
+
}
|
|
56
|
+
bytesInlined += body.length;
|
|
57
|
+
return kind.replace(`${basePath}/${filename}`);
|
|
58
|
+
});
|
|
59
|
+
return { html: out, assets, bytesInlined };
|
|
60
|
+
}
|
|
61
|
+
export function externalizeSharedAssets(outDir) {
|
|
62
|
+
const result = { pages: 0, assets: 0, bytesInlined: 0 }, assetDir = path.join(outDir, EXTERNALIZED_ASSET_DIR), written = new Set;
|
|
63
|
+
for (const file of listHtmlFiles(outDir)) {
|
|
64
|
+
const original = fs.readFileSync(file, "utf8"), { html, assets, bytesInlined } = externalizeHtml(original);
|
|
65
|
+
if (html === original)
|
|
66
|
+
continue;
|
|
67
|
+
for (const asset of assets) {
|
|
68
|
+
if (written.has(asset.filename))
|
|
69
|
+
continue;
|
|
70
|
+
written.add(asset.filename);
|
|
71
|
+
fs.mkdirSync(assetDir, { recursive: !0 });
|
|
72
|
+
fs.writeFileSync(path.join(assetDir, asset.filename), asset.contents);
|
|
73
|
+
result.assets++;
|
|
74
|
+
}
|
|
75
|
+
fs.writeFileSync(file, html);
|
|
76
|
+
result.bytesInlined += bytesInlined;
|
|
77
|
+
result.pages++;
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-process build identity, used to detect runtime/fragment skew
|
|
3
|
+
* (stacksjs/stx#1772).
|
|
4
|
+
*
|
|
5
|
+
* Under `bun --watch`, a loaded page holds the client runtime from build N. A
|
|
6
|
+
* file save restarts the server, and the next SPA navigation fetches a fragment
|
|
7
|
+
* rendered by build N+1. Fragments legitimately carry preserved `{{ }}`
|
|
8
|
+
* moustaches for client-side binding, so any drift in the scoped-script or
|
|
9
|
+
* binding format between the two builds leaves the OLD runtime unable to
|
|
10
|
+
* hydrate the NEW fragment: literal moustaches on screen, dead `:show`, stale
|
|
11
|
+
* canvas. It is sporadic and never reproduces from a clean boot, which is
|
|
12
|
+
* exactly its signature.
|
|
13
|
+
*
|
|
14
|
+
* Stamping the identity on both sides lets the router notice the mismatch and
|
|
15
|
+
* fall back to a full page navigation — the same thing Next and Vite's HMR
|
|
16
|
+
* clients do on a version mismatch. It does not fix format drift; it makes the
|
|
17
|
+
* whole class of skew symptoms impossible to observe.
|
|
18
|
+
*
|
|
19
|
+
* The comparison is deliberately conservative: the router only acts when BOTH
|
|
20
|
+
* sides are known. A missing id means "no information", never "mismatch".
|
|
21
|
+
* That keeps statically hosted output (no headers to send) and any consumer on
|
|
22
|
+
* an older server working exactly as before.
|
|
23
|
+
*
|
|
24
|
+
* @module build-id
|
|
25
|
+
*/
|
|
26
|
+
/** `<meta name="stx-build">` on every rendered page. */
|
|
27
|
+
export declare const BUILD_ID_META = "stx-build";
|
|
28
|
+
/** Response header carrying the id that rendered an SPA fragment. */
|
|
29
|
+
export declare const BUILD_ID_HEADER = "X-STX-Build";
|
|
30
|
+
/**
|
|
31
|
+
* The current process's build id.
|
|
32
|
+
*
|
|
33
|
+
* Stable for the lifetime of the process, which is the unit that matters: a
|
|
34
|
+
* `bun --watch` restart produces a new process and therefore a new id, while a
|
|
35
|
+
* production build stamps every page it renders with one value.
|
|
36
|
+
*
|
|
37
|
+
* `STX_BUILD_ID` overrides it, for deployments that render across several
|
|
38
|
+
* processes and need them to agree.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getBuildId(): string;
|
|
41
|
+
/** @internal test-only — force the id, or with `null` restore generation. */
|
|
42
|
+
export declare function __setBuildIdForTest(id: string | null): void;
|
|
43
|
+
/**
|
|
44
|
+
* Add `<meta name="stx-build">` to `<head>` if it isn't already there.
|
|
45
|
+
*
|
|
46
|
+
* Idempotent, and a no-op for output with no `<head>` — SPA fragments carry the
|
|
47
|
+
* id in a response header instead, since they have nowhere to put a meta.
|
|
48
|
+
*/
|
|
49
|
+
export declare function injectBuildId(html: string, buildId?: string): string;
|
|
50
|
+
/**
|
|
51
|
+
* The same decision as `injectBuildId`, without the splice (stacksjs/stx#1945).
|
|
52
|
+
*
|
|
53
|
+
* Returns what belongs immediately after the `<head>` open tag, or null when
|
|
54
|
+
* the id is already stamped or the document has no head -- an SPA fragment
|
|
55
|
+
* carries it in a response header instead, having nowhere to put a meta.
|
|
56
|
+
*/
|
|
57
|
+
export declare function buildIdFragment(html: string, buildId?: string): string | null;
|
package/dist/build-id.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export const BUILD_ID_META = "stx-build", BUILD_ID_HEADER = "X-STX-Build";
|
|
2
|
+
let cached = null;
|
|
3
|
+
export function getBuildId() {
|
|
4
|
+
if (cached === null)
|
|
5
|
+
cached = process.env.STX_BUILD_ID || `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 8)}`;
|
|
6
|
+
return cached;
|
|
7
|
+
}
|
|
8
|
+
export function __setBuildIdForTest(id) {
|
|
9
|
+
cached = id;
|
|
10
|
+
}
|
|
11
|
+
export function injectBuildId(html, buildId = getBuildId()) {
|
|
12
|
+
const fragment = buildIdFragment(html, buildId);
|
|
13
|
+
if (fragment === null)
|
|
14
|
+
return html;
|
|
15
|
+
const headOpen = /<head\b[^>]*>/i.exec(html), insertAt = headOpen.index + headOpen[0].length;
|
|
16
|
+
return `${html.slice(0, insertAt)}${fragment}${html.slice(insertAt)}`;
|
|
17
|
+
}
|
|
18
|
+
export function buildIdFragment(html, buildId = getBuildId()) {
|
|
19
|
+
if (html.includes(`name="${BUILD_ID_META}"`))
|
|
20
|
+
return null;
|
|
21
|
+
if (!/<head\b[^>]*>/i.test(html))
|
|
22
|
+
return null;
|
|
23
|
+
return `
|
|
24
|
+
<meta name="${BUILD_ID_META}" content="${buildId}">`;
|
|
25
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Make a Bun build failure say where it happened (stacksjs/stx#1810).
|
|
3
|
+
*
|
|
4
|
+
* A single unparseable view produced `BuildMessage: Unexpected ===` and nothing
|
|
5
|
+
* else — no path, no line — leaving the reporter to binary-search the scanned
|
|
6
|
+
* views by hand.
|
|
7
|
+
*
|
|
8
|
+
* The location was never missing. Bun computes it and puts it on
|
|
9
|
+
* `BuildMessage.position`; it is `.message` and `.toString()` that omit it. And
|
|
10
|
+
* because `BuildMessage` is not an `instanceof Error` and carries no `.stack`,
|
|
11
|
+
* the usual `error instanceof Error ? error.message : String(error)` idiom —
|
|
12
|
+
* which this codebase uses in a dozen places — reduces it to exactly that bare
|
|
13
|
+
* string.
|
|
14
|
+
*
|
|
15
|
+
* Two further wrinkles this handles:
|
|
16
|
+
*
|
|
17
|
+
* - `Bun.build()` does not throw a BuildMessage. It throws an AggregateError
|
|
18
|
+
* whose `.errors` holds them, so the useful detail is one level down.
|
|
19
|
+
* - `Bun.Transpiler.transformSync()` reports `position.file` as its synthetic
|
|
20
|
+
* entry name, never the real path. The caller knows the real one, so it is
|
|
21
|
+
* threaded in rather than trusted from the message.
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* One failure, with its position kept separate rather than baked into a string.
|
|
25
|
+
*
|
|
26
|
+
* A terminal wants `path:line:col: message`; a dev-server overlay wants to draw
|
|
27
|
+
* a code frame and put a caret under the column. Both are rendered from this,
|
|
28
|
+
* so the two cannot drift into disagreeing about where the error is (#1884).
|
|
29
|
+
*/
|
|
30
|
+
export interface BuildFailureDetail {
|
|
31
|
+
file?: string;
|
|
32
|
+
line?: number;
|
|
33
|
+
column?: number;
|
|
34
|
+
message: string;
|
|
35
|
+
/** The offending source line, when Bun reported one. */
|
|
36
|
+
lineText?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Pull every failure out of whatever was thrown, with positions intact.
|
|
40
|
+
*
|
|
41
|
+
* @param error whatever was thrown — BuildMessage, AggregateError, Error, or
|
|
42
|
+
* anything else
|
|
43
|
+
* @param sourcePath the real file being compiled. Preferred over the position's
|
|
44
|
+
* own `file`, which is a synthetic entry name on the transpiler path.
|
|
45
|
+
*/
|
|
46
|
+
export declare function describeBuildFailure(error: unknown, sourcePath?: string): BuildFailureDetail[];
|
|
47
|
+
/**
|
|
48
|
+
* Render a build failure as `path:line:column: message`, falling back to the
|
|
49
|
+
* plain message when no position is available.
|
|
50
|
+
*/
|
|
51
|
+
export declare function formatBuildFailure(error: unknown, sourcePath?: string): string;
|
|
52
|
+
/**
|
|
53
|
+
* Find a failure's line in the ORIGINAL source.
|
|
54
|
+
*
|
|
55
|
+
* The client-script bundler compiles a temp entry under `.stx/bundle-tmp`, so
|
|
56
|
+
* Bun's `position.line` counts lines in THAT file — for a `<script client>`
|
|
57
|
+
* block halfway down a page it is off by however many lines precede the block,
|
|
58
|
+
* and for an unresolved import it comes back as `-1`. Pointing an overlay at
|
|
59
|
+
* that line is worse than pointing at none: it sends the reader to code that is
|
|
60
|
+
* fine.
|
|
61
|
+
*
|
|
62
|
+
* `lineText` is the one thing that survives the move. If it occurs exactly once
|
|
63
|
+
* in the source, that is the line. Ambiguous or absent yields nothing, which the
|
|
64
|
+
* caller renders as a message with no frame.
|
|
65
|
+
*/
|
|
66
|
+
export declare function locateFailureLine(source: string, lineText?: string): number | undefined;
|
|
67
|
+
/** One line of a code frame. */
|
|
68
|
+
export interface CodeFrameLine {
|
|
69
|
+
number: number;
|
|
70
|
+
text: string;
|
|
71
|
+
/** The line the error is on. */
|
|
72
|
+
isError: boolean;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The lines around a failure, for an overlay to draw.
|
|
76
|
+
*
|
|
77
|
+
* Returns the offending line plus `context` lines either side, which is what
|
|
78
|
+
* turns "Could not resolve" into something a reader can act on without opening
|
|
79
|
+
* the file. Empty when there is no line to centre on.
|
|
80
|
+
*/
|
|
81
|
+
export declare function buildCodeFrame(source: string, line?: number, context?: number): CodeFrameLine[];
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
function isBuildMessageLike(value) {
|
|
2
|
+
if (!value || typeof value !== "object")
|
|
3
|
+
return !1;
|
|
4
|
+
const candidate = value;
|
|
5
|
+
return typeof candidate.message === "string" && (candidate.name === "BuildMessage" || candidate.name === "ResolveMessage" || ("position" in candidate));
|
|
6
|
+
}
|
|
7
|
+
function unwrap(error) {
|
|
8
|
+
if (error && typeof error === "object" && Array.isArray(error.errors))
|
|
9
|
+
return error.errors;
|
|
10
|
+
return [error];
|
|
11
|
+
}
|
|
12
|
+
export function describeBuildFailure(error, sourcePath) {
|
|
13
|
+
const details = [];
|
|
14
|
+
for (const item of unwrap(error)) {
|
|
15
|
+
if (isBuildMessageLike(item)) {
|
|
16
|
+
const position = item.position || void 0;
|
|
17
|
+
details.push({
|
|
18
|
+
file: sourcePath || position?.file,
|
|
19
|
+
line: position?.line,
|
|
20
|
+
column: position?.column,
|
|
21
|
+
message: item.message ?? "",
|
|
22
|
+
lineText: position?.lineText
|
|
23
|
+
});
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
details.push({
|
|
27
|
+
file: sourcePath,
|
|
28
|
+
message: item instanceof Error ? item.message : String(item)
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
return details;
|
|
32
|
+
}
|
|
33
|
+
export function formatBuildFailure(error, sourcePath) {
|
|
34
|
+
return describeBuildFailure(error, sourcePath).map((detail) => {
|
|
35
|
+
const where = detail.file ? `${detail.file}${detail.line ? `:${detail.line}${detail.column ? `:${detail.column}` : ""}` : ""}` : "", snippet = detail.lineText ? `
|
|
36
|
+
${detail.lineText.trim()}` : "";
|
|
37
|
+
return where ? `${where}: ${detail.message}${snippet}` : `${detail.message}${snippet}`;
|
|
38
|
+
}).join(`
|
|
39
|
+
`);
|
|
40
|
+
}
|
|
41
|
+
export function locateFailureLine(source, lineText) {
|
|
42
|
+
const needle = lineText?.trim();
|
|
43
|
+
if (!needle)
|
|
44
|
+
return;
|
|
45
|
+
const lines = source.split(`
|
|
46
|
+
`);
|
|
47
|
+
let found;
|
|
48
|
+
for (let i = 0;i < lines.length; i++) {
|
|
49
|
+
if (lines[i].trim() !== needle)
|
|
50
|
+
continue;
|
|
51
|
+
if (found !== void 0)
|
|
52
|
+
return;
|
|
53
|
+
found = i + 1;
|
|
54
|
+
}
|
|
55
|
+
return found;
|
|
56
|
+
}
|
|
57
|
+
export function buildCodeFrame(source, line, context = 2) {
|
|
58
|
+
if (!line || line < 1)
|
|
59
|
+
return [];
|
|
60
|
+
const lines = source.split(`
|
|
61
|
+
`), start = Math.max(1, line - context), end = Math.min(lines.length, line + context), frame = [];
|
|
62
|
+
for (let n = start;n <= end; n++)
|
|
63
|
+
frame.push({ number: n, text: lines[n - 1] ?? "", isError: n === line });
|
|
64
|
+
return frame;
|
|
65
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scan all `.stx` files in the project and determine the build mode.
|
|
3
|
+
*
|
|
4
|
+
* - Zero `<script server>` tags → `'ssg'` (static site, flat HTML in `dist/`)
|
|
5
|
+
* - Any `<script server>` tag → `'ssr'` (server bundle in `.output/`)
|
|
6
|
+
*/
|
|
7
|
+
export declare function detectBuildMode(root?: string): Promise<BuildModeDetectionResult>;
|
|
8
|
+
/**
|
|
9
|
+
* Validate that components don't mix `<script server>` and `<script client>`.
|
|
10
|
+
*
|
|
11
|
+
* Components should be server OR client — compose them via props/slots.
|
|
12
|
+
* Pages are allowed to have both (e.g. `<script server>` for SEO +
|
|
13
|
+
* `<script client>` for interactivity).
|
|
14
|
+
*/
|
|
15
|
+
export declare function validateComponentScripts(root?: string): Promise<ComponentValidationError[]>;
|
|
16
|
+
export declare interface BuildModeDetectionResult {
|
|
17
|
+
mode: BuildMode
|
|
18
|
+
serverScriptFiles: string[]
|
|
19
|
+
totalFilesScanned: number
|
|
20
|
+
scanDurationMs: number
|
|
21
|
+
}
|
|
22
|
+
export declare interface ComponentValidationError {
|
|
23
|
+
file: string
|
|
24
|
+
message: string
|
|
25
|
+
}
|
|
26
|
+
export type BuildMode = 'ssg' | 'ssr';
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { loadStxConfig } from "./config.js";
|
|
3
|
+
const SERVER_SCRIPT_RE = /<script\b[^>]*\bserver\b/i, CLIENT_SCRIPT_RE = /<script\b[^>]*\bclient\b/i;
|
|
4
|
+
export async function detectBuildMode(root) {
|
|
5
|
+
const start = performance.now(), config = await loadStxConfig(root), projectRoot = root || config.root || process.cwd(), dirs = [
|
|
6
|
+
config.build?.pagesDir || config.pagesDir || "pages",
|
|
7
|
+
config.componentsDir || "components",
|
|
8
|
+
config.layoutsDir || "layouts",
|
|
9
|
+
config.partialsDir || "partials"
|
|
10
|
+
].map((d) => path.resolve(projectRoot, d)), serverScriptFiles = [];
|
|
11
|
+
let totalFilesScanned = 0;
|
|
12
|
+
for (const dir of dirs) {
|
|
13
|
+
const stxFiles = await collectStxFiles(dir);
|
|
14
|
+
for (const file of stxFiles) {
|
|
15
|
+
totalFilesScanned++;
|
|
16
|
+
const content = await Bun.file(file).text();
|
|
17
|
+
if (SERVER_SCRIPT_RE.test(content))
|
|
18
|
+
serverScriptFiles.push(path.relative(projectRoot, file));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
mode: serverScriptFiles.length > 0 ? "ssr" : "ssg",
|
|
23
|
+
serverScriptFiles,
|
|
24
|
+
totalFilesScanned,
|
|
25
|
+
scanDurationMs: Math.round(performance.now() - start)
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export async function validateComponentScripts(root) {
|
|
29
|
+
const config = await loadStxConfig(root), projectRoot = root || config.root || process.cwd(), componentsDir = path.resolve(projectRoot, config.componentsDir || "components"), errors = [], stxFiles = await collectStxFiles(componentsDir);
|
|
30
|
+
for (const file of stxFiles) {
|
|
31
|
+
const content = await Bun.file(file).text(), hasServer = SERVER_SCRIPT_RE.test(content), hasClient = CLIENT_SCRIPT_RE.test(content) || /<script\b(?![^>]*\bserver\b)[^>]*>/i.test(content) && !hasServer;
|
|
32
|
+
if (hasServer && hasClient) {
|
|
33
|
+
const relative = path.relative(projectRoot, file);
|
|
34
|
+
errors.push({
|
|
35
|
+
file: relative,
|
|
36
|
+
message: `Component "${relative}" has both <script server> and <script client>. ` + "Components should be server OR client \u2014 compose them via props/slots."
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return errors;
|
|
41
|
+
}
|
|
42
|
+
async function collectStxFiles(dir) {
|
|
43
|
+
const files = [];
|
|
44
|
+
try {
|
|
45
|
+
const glob = new Bun.Glob("**/*.stx");
|
|
46
|
+
for await (const file of glob.scan({ cwd: dir, absolute: !0 }))
|
|
47
|
+
files.push(file);
|
|
48
|
+
} catch {}
|
|
49
|
+
return files;
|
|
50
|
+
}
|