@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,18 @@
|
|
|
1
|
+
import type { BuildOptions, SiteConfig } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Build a static stx site end-to-end:
|
|
4
|
+
* 1. Bundle all pages with bun-plugin-stx
|
|
5
|
+
* 2. Inject Css CSS into each HTML file
|
|
6
|
+
* 3. Replace stx default SEO tags with site-specific ones
|
|
7
|
+
* 4. Drop the empty bundle chunks bun-plugin-stx leaves behind
|
|
8
|
+
* 5. Copy public/ assets verbatim
|
|
9
|
+
* 6. Synthesize 404.html (uses pages/404.stx if present, else clones index)
|
|
10
|
+
* 7. Generate sitemap.xml and robots.txt
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildStaticSite(options: BuildOptions): Promise<BuildResult>;
|
|
13
|
+
export declare function defineSiteConfig<T extends SiteConfig>(config: T): T;
|
|
14
|
+
export declare interface BuildResult {
|
|
15
|
+
outDir: string
|
|
16
|
+
pages: string[]
|
|
17
|
+
durationMs: number
|
|
18
|
+
}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import { Glob, default as Bun } from "../bun-shim.js";
|
|
2
|
+
import {
|
|
3
|
+
cpSync,
|
|
4
|
+
existsSync,
|
|
5
|
+
mkdirSync,
|
|
6
|
+
readFileSync,
|
|
7
|
+
readdirSync,
|
|
8
|
+
rmSync,
|
|
9
|
+
statSync,
|
|
10
|
+
unlinkSync,
|
|
11
|
+
writeFileSync
|
|
12
|
+
} from "node:fs";
|
|
13
|
+
import { dirname, join, relative } from "node:path";
|
|
14
|
+
import process from "node:process";
|
|
15
|
+
import stxPlugin from "bun-plugin-stx";
|
|
16
|
+
import { CONVENTIONAL_ASSET_OUTPUT, resolveConventionalAssetRoot } from "../asset-roots.js";
|
|
17
|
+
import { externalizeSharedAssets } from "../build-externalize.js";
|
|
18
|
+
import { externalizeRepeatedAssets } from "../build-externalize-repeated.js";
|
|
19
|
+
import { injectCss } from "../dev-server/ts-css.js";
|
|
20
|
+
import { injectSeo } from "./seo.js";
|
|
21
|
+
import { generateSitemap } from "./sitemap.js";
|
|
22
|
+
import { generateRobots } from "./robots.js";
|
|
23
|
+
import { injectRouterScript } from "./router.js";
|
|
24
|
+
import { injectThemeBootstrap } from "./theme.js";
|
|
25
|
+
import { buildIsolatingFailures } from "../isolated-build.js";
|
|
26
|
+
import {
|
|
27
|
+
applyTranslations,
|
|
28
|
+
buildAlternateLinks,
|
|
29
|
+
buildLangPickerScript,
|
|
30
|
+
localizePath,
|
|
31
|
+
resolveI18n,
|
|
32
|
+
stampLocaleLayoutGroup
|
|
33
|
+
} from "./i18n.js";
|
|
34
|
+
export async function buildStaticSite(options) {
|
|
35
|
+
const start = Date.now(), pagesDir = options.pagesDir ?? "pages", outDir = options.outDir ?? "dist", publicDir = options.publicDir ?? "public";
|
|
36
|
+
if (!options.noClean)
|
|
37
|
+
rmSync(outDir, { recursive: !0, force: !0 });
|
|
38
|
+
mkdirSync(outDir, { recursive: !0 });
|
|
39
|
+
const glob = new Glob(`${pagesDir}/**/*.stx`), discovered = await Array.fromAsync(glob.scan(".")), excludeDirs = options.excludeDirs ?? ["layouts", "partials", "components"], excluded = [], entrypoints = discovered.filter((file) => {
|
|
40
|
+
const rel = file.slice(pagesDir.length).replace(/^[\\/]+/, "");
|
|
41
|
+
if (rel.split(/[\\/]/).slice(0, -1).some((seg) => excludeDirs.includes(seg))) {
|
|
42
|
+
excluded.push(file);
|
|
43
|
+
return !1;
|
|
44
|
+
}
|
|
45
|
+
return !rel.split(/[\\/]/).some((seg) => seg.startsWith("_"));
|
|
46
|
+
});
|
|
47
|
+
if (excluded.length > 0)
|
|
48
|
+
console.warn(`[stx] ${excluded.length} file(s) under ${pagesDir}/ skipped as non-pages: ${excludeDirs.join(", ")}`);
|
|
49
|
+
if (entrypoints.length === 0)
|
|
50
|
+
throw Error(`No .stx files found in ${pagesDir}/`);
|
|
51
|
+
const isolated = await buildIsolatingFailures(entrypoints, (subset) => Bun.build({
|
|
52
|
+
entrypoints: subset,
|
|
53
|
+
outdir: outDir,
|
|
54
|
+
plugins: [stxPlugin()],
|
|
55
|
+
naming: { entry: "[name].[ext]" }
|
|
56
|
+
}));
|
|
57
|
+
if (isolated.failed.length > 0) {
|
|
58
|
+
for (const { entrypoint, error } of isolated.failed)
|
|
59
|
+
console.error(`[stx] failed to build ${entrypoint}:
|
|
60
|
+
${error}`);
|
|
61
|
+
if (isolated.succeeded.length === 0)
|
|
62
|
+
throw Error(`Build failed: none of the ${entrypoints.length} page(s) could be built`);
|
|
63
|
+
console.error(`[stx] ${isolated.failed.length} of ${entrypoints.length} page(s) skipped; the rest were built.`);
|
|
64
|
+
}
|
|
65
|
+
pruneEmptyJsChunks(outDir);
|
|
66
|
+
const htmlFiles = listFiles(outDir).filter((f) => f.endsWith(".html")), i18n = resolveI18n(options, process.cwd()), knownPaths = new Set(htmlFiles.map(pathFromFile));
|
|
67
|
+
for (const file of htmlFiles) {
|
|
68
|
+
const fullPath = join(outDir, file), sourceHtml = readFileSync(fullPath, "utf8"), basePath = pathFromFile(file), localesToEmit = i18n ? i18n.locales : [options.seo?.locale?.split(/[_-]/)[0] ?? "en"];
|
|
69
|
+
for (const locale of localesToEmit) {
|
|
70
|
+
let html = sourceHtml;
|
|
71
|
+
html = stripDeadScriptTags(html);
|
|
72
|
+
if (i18n)
|
|
73
|
+
html = applyTranslations(html, i18n, locale);
|
|
74
|
+
html = await injectCss(html, process.cwd());
|
|
75
|
+
html = injectSeo(html, options, options.pages?.[basePath], basePath);
|
|
76
|
+
if (i18n) {
|
|
77
|
+
html = applyLocaleHead(html, options, i18n, locale, basePath);
|
|
78
|
+
html = localizeInternalLinks(html, locale, i18n.defaultLocale, knownPaths);
|
|
79
|
+
html = stampLocaleLayoutGroup(html, locale);
|
|
80
|
+
}
|
|
81
|
+
html = injectThemeBootstrap(html, options);
|
|
82
|
+
html = autoWrapContent(html);
|
|
83
|
+
if (i18n)
|
|
84
|
+
html = html.replace(/<\/body>/i, `${buildLangPickerScript(i18n, locale)}
|
|
85
|
+
</body>`);
|
|
86
|
+
if (options.spa !== !1)
|
|
87
|
+
html = await injectRouterScript(html, options.router);
|
|
88
|
+
const targetFile = i18n ? localePathToFile(basePath, locale, i18n.defaultLocale) : file, targetPath = join(outDir, targetFile);
|
|
89
|
+
mkdirSync(dirnameOf(targetPath), { recursive: !0 });
|
|
90
|
+
writeFileSync(targetPath, html);
|
|
91
|
+
if (i18n && locale !== i18n.defaultLocale && targetFile !== file)
|
|
92
|
+
;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const externalized = externalizeSharedAssets(outDir);
|
|
96
|
+
if (externalized.assets > 0)
|
|
97
|
+
console.log(`[stx] externalized ${externalized.assets} asset(s) from ${externalized.pages} page(s) (${(externalized.bytesInlined / 1024).toFixed(1)}KB removed from HTML)`);
|
|
98
|
+
const repeated = externalizeRepeatedAssets(outDir);
|
|
99
|
+
if (repeated.assets > 0)
|
|
100
|
+
console.log(`[stx] externalized ${repeated.assets} repeated asset(s) from ${repeated.pages} page(s) (${(repeated.bytesInlined / 1024).toFixed(1)}KB removed from HTML)`);
|
|
101
|
+
if (existsSync(publicDir))
|
|
102
|
+
cpSync(publicDir, outDir, { recursive: !0 });
|
|
103
|
+
const conventionalAssets = resolveConventionalAssetRoot();
|
|
104
|
+
if (conventionalAssets)
|
|
105
|
+
cpSync(conventionalAssets, join(outDir, CONVENTIONAL_ASSET_OUTPUT), { recursive: !0 });
|
|
106
|
+
const fourOhFourSrc = join(outDir, "404.html");
|
|
107
|
+
if (!existsSync(fourOhFourSrc) && existsSync(join(outDir, "index.html"))) {
|
|
108
|
+
const fallback = readFileSync(join(outDir, "index.html"), "utf8").replace(/<title>[^<]*<\/title>/i, `<title>404 \u2014 ${escapeText(options.name)}</title>`);
|
|
109
|
+
writeFileSync(fourOhFourSrc, fallback);
|
|
110
|
+
}
|
|
111
|
+
if (options.sitemap !== !1) {
|
|
112
|
+
const entries = [], basePaths = htmlFiles.filter((f) => f !== "404.html").map(pathFromFile), sitemapLocales = i18n ? i18n.locales : [null];
|
|
113
|
+
for (const basePath of basePaths) {
|
|
114
|
+
const meta = options.pages?.[basePath];
|
|
115
|
+
for (const loc of sitemapLocales) {
|
|
116
|
+
const path = loc && i18n ? localizePath(basePath, loc, i18n.defaultLocale) : basePath;
|
|
117
|
+
entries.push({ path, page: meta });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
writeFileSync(join(outDir, "sitemap.xml"), generateSitemap(options, entries));
|
|
121
|
+
}
|
|
122
|
+
const robots = generateRobots(options);
|
|
123
|
+
if (robots !== null)
|
|
124
|
+
writeFileSync(join(outDir, "robots.txt"), robots);
|
|
125
|
+
const builtPages = htmlFiles.map(pathFromFile);
|
|
126
|
+
return { outDir, pages: builtPages, durationMs: Date.now() - start };
|
|
127
|
+
}
|
|
128
|
+
function dirnameOf(p) {
|
|
129
|
+
return dirname(p);
|
|
130
|
+
}
|
|
131
|
+
function localePathToFile(basePath, locale, defaultLocale) {
|
|
132
|
+
const localized = localizePath(basePath, locale, defaultLocale);
|
|
133
|
+
if (localized === "/")
|
|
134
|
+
return "index.html";
|
|
135
|
+
const trimmed = localized.replace(/^\//, "").replace(/\/$/, "");
|
|
136
|
+
if (!trimmed.includes("/")) {
|
|
137
|
+
if (locale !== defaultLocale && trimmed === locale)
|
|
138
|
+
return `${locale}/index.html`;
|
|
139
|
+
return `${trimmed}.html`;
|
|
140
|
+
}
|
|
141
|
+
return `${trimmed}.html`.replace(/\.html\.html$/, ".html");
|
|
142
|
+
}
|
|
143
|
+
function pathFromFile(file) {
|
|
144
|
+
if (file === "index.html")
|
|
145
|
+
return "/";
|
|
146
|
+
return `/${file.replace(/\.html$/, "").replace(/\/index$/, "")}`;
|
|
147
|
+
}
|
|
148
|
+
function listFiles(dir, base = dir) {
|
|
149
|
+
const out = [];
|
|
150
|
+
if (!existsSync(dir))
|
|
151
|
+
return out;
|
|
152
|
+
for (const entry of readdirSync(dir, { withFileTypes: !0 })) {
|
|
153
|
+
const full = join(dir, entry.name);
|
|
154
|
+
if (entry.isDirectory())
|
|
155
|
+
out.push(...listFiles(full, base));
|
|
156
|
+
else
|
|
157
|
+
out.push(relative(base, full));
|
|
158
|
+
}
|
|
159
|
+
return out;
|
|
160
|
+
}
|
|
161
|
+
function pruneEmptyJsChunks(outDir) {
|
|
162
|
+
for (const file of listFiles(outDir)) {
|
|
163
|
+
if (!/^chunk-.*\.js(?:\.map)?$/.test(file))
|
|
164
|
+
continue;
|
|
165
|
+
const full = join(outDir, file);
|
|
166
|
+
try {
|
|
167
|
+
if (statSync(full).size === 0)
|
|
168
|
+
unlinkSync(full);
|
|
169
|
+
} catch {}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
function stripDeadScriptTags(html) {
|
|
173
|
+
return html.replace(/<script[^>]*src=["']\.\/chunk-[^"']*\.js["'][^>]*><\/script>\s*/g, "");
|
|
174
|
+
}
|
|
175
|
+
function applyLocaleHead(html, site, i18n, locale, basePath) {
|
|
176
|
+
if (!i18n)
|
|
177
|
+
return html;
|
|
178
|
+
if (/<html\b[^>]*\blang=/i.test(html))
|
|
179
|
+
html = html.replace(/<html\b([^>]*)\blang="[^"]*"/i, `<html$1lang="${locale}"`);
|
|
180
|
+
else
|
|
181
|
+
html = html.replace(/<html\b([^>]*)>/i, `<html$1 lang="${locale}">`);
|
|
182
|
+
const localizedUrl = `${site.url.replace(/\/$/, "")}${localizePath(basePath, locale, i18n.defaultLocale)}`;
|
|
183
|
+
if (/<link rel="canonical"/.test(html))
|
|
184
|
+
html = html.replace(/<link rel="canonical"[^>]*>/, `<link rel="canonical" href="${escapeAttr(localizedUrl)}">`);
|
|
185
|
+
const ogLocale = locale.includes("_") || locale.includes("-") ? locale : locale.toLowerCase();
|
|
186
|
+
if (/<meta property="og:locale"/.test(html))
|
|
187
|
+
html = html.replace(/<meta property="og:locale"[^>]*>/, `<meta property="og:locale" content="${escapeAttr(ogLocale)}">`);
|
|
188
|
+
if (/<meta property="og:url"/.test(html))
|
|
189
|
+
html = html.replace(/<meta property="og:url"[^>]*>/, `<meta property="og:url" content="${escapeAttr(localizedUrl)}">`);
|
|
190
|
+
const alternates = buildAlternateLinks(site.url, basePath, i18n);
|
|
191
|
+
if (!html.includes("hreflang="))
|
|
192
|
+
html = html.replace(/<link rel="canonical"[^>]*>/, (m) => `${alternates}
|
|
193
|
+
${m}`);
|
|
194
|
+
return html;
|
|
195
|
+
}
|
|
196
|
+
function escapeAttr(s) {
|
|
197
|
+
return s.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
|
198
|
+
}
|
|
199
|
+
function localizeInternalLinks(html, locale, defaultLocale, knownPaths) {
|
|
200
|
+
if (locale === defaultLocale)
|
|
201
|
+
return html;
|
|
202
|
+
return html.replace(/<a\b([^>]*?)\bhref="(\/[^"]*)"([^>]*)>/gi, (full, before, href, after) => {
|
|
203
|
+
if (href.startsWith("//"))
|
|
204
|
+
return full;
|
|
205
|
+
if (href === `/${locale}` || href === `/${locale}/` || href.startsWith(`/${locale}/`))
|
|
206
|
+
return full;
|
|
207
|
+
const m = href.match(/^(\/[^?#]*)(.*)$/);
|
|
208
|
+
if (!m)
|
|
209
|
+
return full;
|
|
210
|
+
const [, pathOnly, rest] = m, normalized = pathOnly === "/" ? "/" : pathOnly.replace(/\/$/, "");
|
|
211
|
+
if (!knownPaths.has(normalized))
|
|
212
|
+
return full;
|
|
213
|
+
const localized = normalized === "/" ? `/${locale}/` : `/${locale}${normalized}`;
|
|
214
|
+
return `<a${before}href="${localized}${rest}"${after}>`;
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
function autoWrapContent(html) {
|
|
218
|
+
if (/<main\b/i.test(html) || /\bdata-stx-content\b/i.test(html))
|
|
219
|
+
return html;
|
|
220
|
+
const bodyOpenMatch = html.match(/<body\b[^>]*>/i), bodyCloseIdx = html.search(/<\/body\s*>/i);
|
|
221
|
+
if (!bodyOpenMatch || bodyCloseIdx < 0)
|
|
222
|
+
return html;
|
|
223
|
+
const bodyContentStart = bodyOpenMatch.index + bodyOpenMatch[0].length, inner = html.slice(bodyContentStart, bodyCloseIdx);
|
|
224
|
+
let wrapStart = 0;
|
|
225
|
+
const navClose = [...inner.matchAll(/<\/nav>/gi)];
|
|
226
|
+
if (navClose.length > 0) {
|
|
227
|
+
const last = navClose[navClose.length - 1];
|
|
228
|
+
wrapStart = last.index + last[0].length;
|
|
229
|
+
}
|
|
230
|
+
let wrapEnd = inner.length;
|
|
231
|
+
const footerOpen = inner.search(/<footer\b/i);
|
|
232
|
+
if (footerOpen !== -1)
|
|
233
|
+
wrapEnd = Math.min(wrapEnd, footerOpen);
|
|
234
|
+
const trailingScript = inner.search(/<script\b[^>]*data-stx-(?:theme-toggle|reparent-progress)\b/i);
|
|
235
|
+
if (trailingScript !== -1)
|
|
236
|
+
wrapEnd = Math.min(wrapEnd, trailingScript);
|
|
237
|
+
if (wrapEnd <= wrapStart)
|
|
238
|
+
return html;
|
|
239
|
+
const middle = inner.slice(wrapStart, wrapEnd);
|
|
240
|
+
if (!middle.trim())
|
|
241
|
+
return html;
|
|
242
|
+
const newInner = `${inner.slice(0, wrapStart)}
|
|
243
|
+
<main>${middle}</main>
|
|
244
|
+
${inner.slice(wrapEnd)}`;
|
|
245
|
+
return `${html.slice(0, bodyContentStart)}${newInner}${html.slice(bodyCloseIdx)}`;
|
|
246
|
+
}
|
|
247
|
+
function escapeText(s) {
|
|
248
|
+
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
249
|
+
}
|
|
250
|
+
export function defineSiteConfig(config) {
|
|
251
|
+
return config;
|
|
252
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type { SiteConfig, SiteI18nOptions } from './types';
|
|
2
|
+
export type { SiteI18nOptions };
|
|
3
|
+
/**
|
|
4
|
+
* Resolve i18n config into the runtime shape used by the build.
|
|
5
|
+
*
|
|
6
|
+
* Translations are merged from two sources, in priority order:
|
|
7
|
+
* 1. `i18n.translations[<locale>]` — inline strings from `site.config.ts`
|
|
8
|
+
* 2. `<translationsDir>/<locale>.<format>` on disk — JSON or YAML files
|
|
9
|
+
*
|
|
10
|
+
* Inline strings win on key conflicts, so config-level overrides don't
|
|
11
|
+
* require editing the shared translation files. Missing locales/files
|
|
12
|
+
* are silently tolerated; the file loader returns `{}` for anything it
|
|
13
|
+
* can't read so the default locale's table can still serve as a
|
|
14
|
+
* fallback at translate-time.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveI18n(site: SiteConfig, projectRoot?: string): ResolvedI18n | null;
|
|
17
|
+
/**
|
|
18
|
+
* Translate a key for a locale, falling back to the default locale's
|
|
19
|
+
* value, then to the key itself. The fallback chain keeps prototypes
|
|
20
|
+
* shippable even when only a subset of strings is translated.
|
|
21
|
+
*/
|
|
22
|
+
export declare function translate(i18n: ResolvedI18n, locale: string, key: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Replace `{t:key}` and `{t!:key}` markers in HTML with the translated
|
|
25
|
+
* string for the given locale. The key syntax sidesteps stx's
|
|
26
|
+
* `{{ ... }}` templating (which evaluates as JS at build time and
|
|
27
|
+
* would render `t(...)` calls as empty when no `t` binding exists
|
|
28
|
+
* in scope).
|
|
29
|
+
*
|
|
30
|
+
* Two variants:
|
|
31
|
+
* - `{t:key}` — value is HTML-escaped before substitution. Default
|
|
32
|
+
* for ordinary text. Safe for any translator-supplied string.
|
|
33
|
+
* - `{t!:key}` — value is substituted *raw*, without escaping. Use
|
|
34
|
+
* this when the translation needs inline markup (e.g. `<strong>`,
|
|
35
|
+
* `<a>`, `<br>`) so different languages can place emphasis where
|
|
36
|
+
* their grammar requires. Translation values for these keys live
|
|
37
|
+
* in the project's own translation files, so the trust boundary
|
|
38
|
+
* is the same as the page template itself.
|
|
39
|
+
*
|
|
40
|
+
* Keys may use letters, digits, `_`, `.`, `-`. Anything that doesn't
|
|
41
|
+
* match the pattern is left alone — runs after stx has finished its
|
|
42
|
+
* own templating pass.
|
|
43
|
+
*/
|
|
44
|
+
export declare function applyTranslations(html: string, i18n: ResolvedI18n, locale: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* URL path for a built page in the given locale.
|
|
47
|
+
*
|
|
48
|
+
* - `/` stays `/` for the default locale; for non-default locales it
|
|
49
|
+
* becomes `/<code>/` (with the trailing slash). The slash matters
|
|
50
|
+
* because most static hosts (S3+CloudFront, GitHub Pages, etc.)
|
|
51
|
+
* only serve the directory's `index.html` when the URL ends in `/`
|
|
52
|
+
* — `/de` 404s, `/de/` resolves. Linking with the slash avoids a
|
|
53
|
+
* client-side redirect dance and lets SPA hops succeed without
|
|
54
|
+
* falling back to a full page load.
|
|
55
|
+
* - `/about` becomes `/<code>/about` for non-default locales (no
|
|
56
|
+
* trailing slash — those map to `<code>/about.html`).
|
|
57
|
+
* - `/404.html` keeps its filename and lives under the locale prefix.
|
|
58
|
+
*/
|
|
59
|
+
export declare function localizePath(path: string, locale: string, defaultLocale: string): string;
|
|
60
|
+
/**
|
|
61
|
+
* Reverse of `localizePath`: strip a locale prefix off a path so we
|
|
62
|
+
* can compute the equivalent path in another locale.
|
|
63
|
+
*/
|
|
64
|
+
export declare function stripLocalePrefix(path: string, locales: string[]): { locale: string | null, path: string };
|
|
65
|
+
/**
|
|
66
|
+
* `<link rel="alternate" hreflang>` block + `<link rel="canonical">`
|
|
67
|
+
* for the page being rendered. Search engines treat each as the
|
|
68
|
+
* authoritative copy for its locale.
|
|
69
|
+
*/
|
|
70
|
+
export declare function buildAlternateLinks(siteUrl: string, pagePath: string, i18n: ResolvedI18n): string;
|
|
71
|
+
/**
|
|
72
|
+
* Tag a rendered page with its locale, via the SPA router's "layout group".
|
|
73
|
+
*
|
|
74
|
+
* The router's default swap replaces the container only, so `<nav>` and
|
|
75
|
+
* `<footer>` keep the markup of whatever page loaded first. That is fine for
|
|
76
|
+
* a same-locale hop and wrong for every cross-locale one: the chrome holds
|
|
77
|
+
* `{t:key}` text and locale-prefixed hrefs, both of which the server already
|
|
78
|
+
* resolved for the *destination* locale. A differing layout group is the
|
|
79
|
+
* router's signal to swap the whole body instead, which brings the chrome
|
|
80
|
+
* along — still a client-side navigation, no reload.
|
|
81
|
+
*
|
|
82
|
+
* Both renderers call this. They used to each carry their own copy of the
|
|
83
|
+
* markup, and only the dev server's copy actually existed: the static build
|
|
84
|
+
* shipped no group meta at all, so a built site translated `<main>` on a
|
|
85
|
+
* language switch and left the nav in the previous language until a hard
|
|
86
|
+
* reload — the one place the bug could not be seen while developing.
|
|
87
|
+
*/
|
|
88
|
+
export declare function stampLocaleLayoutGroup(html: string, locale: string): string;
|
|
89
|
+
/**
|
|
90
|
+
* Inline script that wires up the language picker.
|
|
91
|
+
*
|
|
92
|
+
* Per-page logic: each `<button data-lang="…">` inside the configured
|
|
93
|
+
* picker selector navigates to the equivalent path in the chosen
|
|
94
|
+
* locale, using the locale list shipped in `window.__stxI18n`. Marks
|
|
95
|
+
* the active button with `aria-current="true"` for styling.
|
|
96
|
+
*/
|
|
97
|
+
export declare function buildLangPickerScript(i18n: ResolvedI18n, currentLocale: string): string;
|
|
98
|
+
export declare interface ResolvedI18n {
|
|
99
|
+
locales: string[]
|
|
100
|
+
defaultLocale: string
|
|
101
|
+
labels: Record<string, string>
|
|
102
|
+
translations: Record<string, Record<string, string>>
|
|
103
|
+
pickerSelector: string
|
|
104
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
import process from "node:process";
|
|
4
|
+
export function resolveI18n(site, projectRoot = process.cwd()) {
|
|
5
|
+
const i18n = site.i18n;
|
|
6
|
+
if (!i18n || !Array.isArray(i18n.locales) || i18n.locales.length === 0)
|
|
7
|
+
return null;
|
|
8
|
+
const defaultLocale = i18n.defaultLocale ?? i18n.locales[0], translations = mergeTranslations(i18n, projectRoot);
|
|
9
|
+
return {
|
|
10
|
+
locales: i18n.locales,
|
|
11
|
+
defaultLocale,
|
|
12
|
+
labels: i18n.labels ?? Object.fromEntries(i18n.locales.map((c) => [c, c.toUpperCase()])),
|
|
13
|
+
translations,
|
|
14
|
+
pickerSelector: i18n.pickerSelector ?? "#lang-picker"
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function mergeTranslations(i18n, projectRoot) {
|
|
18
|
+
const inline = i18n.translations ?? {}, out = {}, dir = i18n.translationsDir, dirAbs = dir === !1 ? null : resolve(projectRoot, typeof dir === "string" && dir ? dir : "translations"), format = i18n.format ?? "json";
|
|
19
|
+
for (const locale of i18n.locales) {
|
|
20
|
+
const fromFile = dirAbs ? loadFromFile(dirAbs, locale, format) : {};
|
|
21
|
+
out[locale] = { ...fromFile, ...inline[locale] ?? {} };
|
|
22
|
+
}
|
|
23
|
+
return out;
|
|
24
|
+
}
|
|
25
|
+
function loadFromFile(dir, locale, format) {
|
|
26
|
+
const candidates = format === "json" ? [`${locale}.json`] : [`${locale}.${format}`, `${locale}.${format === "yaml" ? "yml" : "yaml"}`];
|
|
27
|
+
for (const name of candidates) {
|
|
28
|
+
const file = join(dir, name);
|
|
29
|
+
if (!existsSync(file))
|
|
30
|
+
continue;
|
|
31
|
+
try {
|
|
32
|
+
const raw = readFileSync(file, "utf8"), data = format === "json" ? JSON.parse(raw) : parseSimpleYaml(raw);
|
|
33
|
+
return flatten(data);
|
|
34
|
+
} catch {
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return {};
|
|
39
|
+
}
|
|
40
|
+
function flatten(obj, prefix = "", out = {}) {
|
|
41
|
+
if (!obj || typeof obj !== "object")
|
|
42
|
+
return out;
|
|
43
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
44
|
+
const key = prefix ? `${prefix}.${k}` : k;
|
|
45
|
+
if (v && typeof v === "object" && !Array.isArray(v))
|
|
46
|
+
flatten(v, key, out);
|
|
47
|
+
else if (typeof v === "string")
|
|
48
|
+
out[key] = v;
|
|
49
|
+
else if (typeof v === "number" || typeof v === "boolean")
|
|
50
|
+
out[key] = String(v);
|
|
51
|
+
}
|
|
52
|
+
return out;
|
|
53
|
+
}
|
|
54
|
+
function parseSimpleYaml(content) {
|
|
55
|
+
const result = {}, stack = [{ obj: result, indent: -1 }];
|
|
56
|
+
for (const rawLine of content.split(`
|
|
57
|
+
`)) {
|
|
58
|
+
const line = rawLine.replace(/#.*$/, "").trimEnd();
|
|
59
|
+
if (!line.trim())
|
|
60
|
+
continue;
|
|
61
|
+
const indent = line.search(/\S/);
|
|
62
|
+
if (indent === -1)
|
|
63
|
+
continue;
|
|
64
|
+
while (stack.length > 1 && stack[stack.length - 1].indent >= indent)
|
|
65
|
+
stack.pop();
|
|
66
|
+
const currentObj = stack[stack.length - 1].obj, match = line.match(/^(\s*)(\S[^:]*):\s*(.*)$/);
|
|
67
|
+
if (!match)
|
|
68
|
+
continue;
|
|
69
|
+
const [, , key, rawValue] = match, trimmedKey = key.trim(), trimmedValue = rawValue.trim();
|
|
70
|
+
if (trimmedValue === "") {
|
|
71
|
+
currentObj[trimmedKey] = {};
|
|
72
|
+
stack.push({ obj: currentObj[trimmedKey], indent });
|
|
73
|
+
} else
|
|
74
|
+
currentObj[trimmedKey] = unquote(trimmedValue);
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
function unquote(v) {
|
|
79
|
+
if (v.startsWith("'") && v.endsWith("'") || v.startsWith('"') && v.endsWith('"'))
|
|
80
|
+
return v.slice(1, -1);
|
|
81
|
+
return v;
|
|
82
|
+
}
|
|
83
|
+
export function translate(i18n, locale, key) {
|
|
84
|
+
const local = i18n.translations[locale]?.[key];
|
|
85
|
+
if (typeof local === "string")
|
|
86
|
+
return local;
|
|
87
|
+
const fallback = i18n.translations[i18n.defaultLocale]?.[key];
|
|
88
|
+
if (typeof fallback === "string")
|
|
89
|
+
return fallback;
|
|
90
|
+
return key;
|
|
91
|
+
}
|
|
92
|
+
export function applyTranslations(html, i18n, locale) {
|
|
93
|
+
return html.replace(/\{t(!?):([a-zA-Z][\w.-]*)\}/g, (_match, raw, key) => {
|
|
94
|
+
const value = translate(i18n, locale, key);
|
|
95
|
+
return raw === "!" ? value : escapeHtml(value);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
export function localizePath(path, locale, defaultLocale) {
|
|
99
|
+
if (locale === defaultLocale)
|
|
100
|
+
return path;
|
|
101
|
+
if (path === "/")
|
|
102
|
+
return `/${locale}/`;
|
|
103
|
+
if (path === "/404.html")
|
|
104
|
+
return `/${locale}/404.html`;
|
|
105
|
+
return `/${locale}${path}`;
|
|
106
|
+
}
|
|
107
|
+
export function stripLocalePrefix(path, locales) {
|
|
108
|
+
for (const loc of locales) {
|
|
109
|
+
if (path === `/${loc}` || path === `/${loc}/`)
|
|
110
|
+
return { locale: loc, path: "/" };
|
|
111
|
+
if (path.startsWith(`/${loc}/`))
|
|
112
|
+
return { locale: loc, path: path.slice(loc.length + 1) };
|
|
113
|
+
}
|
|
114
|
+
return { locale: null, path };
|
|
115
|
+
}
|
|
116
|
+
export function buildAlternateLinks(siteUrl, pagePath, i18n) {
|
|
117
|
+
const base = siteUrl.replace(/\/$/, ""), lines = [];
|
|
118
|
+
for (const loc of i18n.locales) {
|
|
119
|
+
const url = `${base}${localizePath(pagePath, loc, i18n.defaultLocale)}`;
|
|
120
|
+
lines.push(`<link rel="alternate" hreflang="${escapeAttr(loc)}" href="${escapeAttr(url)}">`);
|
|
121
|
+
}
|
|
122
|
+
const def = `${base}${localizePath(pagePath, i18n.defaultLocale, i18n.defaultLocale)}`;
|
|
123
|
+
lines.push(`<link rel="alternate" hreflang="x-default" href="${escapeAttr(def)}">`);
|
|
124
|
+
return lines.join(`
|
|
125
|
+
`);
|
|
126
|
+
}
|
|
127
|
+
export function stampLocaleLayoutGroup(html, locale) {
|
|
128
|
+
const groupMeta = `<meta name="stx-layout-group" content="i18n:${escapeAttr(locale)}">`;
|
|
129
|
+
if (/<meta name="stx-layout-group"[^>]*>/i.test(html))
|
|
130
|
+
return html.replace(/<meta name="stx-layout-group"[^>]*>/i, groupMeta);
|
|
131
|
+
if (/<\/head>/i.test(html))
|
|
132
|
+
return html.replace(/<\/head>/i, `${groupMeta}
|
|
133
|
+
</head>`);
|
|
134
|
+
return `${groupMeta}
|
|
135
|
+
${html}`;
|
|
136
|
+
}
|
|
137
|
+
export function buildLangPickerScript(i18n, currentLocale) {
|
|
138
|
+
return `<script data-stx-lang-picker="1">window.__stxI18n=${JSON.stringify({
|
|
139
|
+
locales: i18n.locales,
|
|
140
|
+
defaultLocale: i18n.defaultLocale,
|
|
141
|
+
current: currentLocale,
|
|
142
|
+
pickerSelector: i18n.pickerSelector
|
|
143
|
+
})};(function(){function cfg(){return window.__stxI18n}function localeFromPath(p){var d=cfg();for(var i=0;i<d.locales.length;i++){var c=d.locales[i];if(p==='/'+c||p==='/'+c+'/')return c;if(p.indexOf('/'+c+'/')===0)return c}return d.defaultLocale}function localePathFor(loc,p){var d=cfg();var stripped=p;for(var i=0;i<d.locales.length;i++){var c=d.locales[i];if(p==='/'+c||p==='/'+c+'/'){stripped='/';break}if(p.indexOf('/'+c+'/')===0){stripped=p.slice(c.length+1);break}}if(loc===d.defaultLocale)return stripped;if(stripped==='/')return '/'+loc+'/';return '/'+loc+stripped}cfg().localizeHref=function(href){try{var u=new URL(href,location.origin);if(u.origin!==location.origin)return href;return localePathFor(localeFromPath(location.pathname),u.pathname)+(u.search||'')+(u.hash||'')}catch(_){return href}};function syncFromUrl(){var d=cfg();var loc=localeFromPath(location.pathname);d.current=loc;var picker=document.querySelector(d.pickerSelector);if(picker){var btns=picker.querySelectorAll('[data-lang]');for(var i=0;i<btns.length;i++){var b=btns[i];if(b.getAttribute('data-lang')===loc)b.setAttribute('aria-current','true');else b.removeAttribute('aria-current')}}if(document.documentElement.lang!==loc)document.documentElement.lang=loc}function onLangClick(e){var d=cfg();var btn=e.target&&e.target.closest&&e.target.closest('[data-lang]');if(!btn)return;var picker=document.querySelector(d.pickerSelector);if(!picker||!picker.contains(btn))return;e.preventDefault();e.stopPropagation();var loc=btn.getAttribute('data-lang');if(!loc||loc===localeFromPath(location.pathname))return;var dest=localePathFor(loc,location.pathname);var r=window.__stxRouter;if(r&&r.navigate)r.navigate(dest,true,true);else location.assign(dest)}syncFromUrl();if(window.__stxLangPickerBound){document.removeEventListener('click',window.__stxLangPickerClick,true);window.removeEventListener('stx:navigate',window.__stxLangPickerSync);window.removeEventListener('popstate',window.__stxLangPickerSync)}window.__stxLangPickerClick=onLangClick;window.__stxLangPickerSync=syncFromUrl;window.__stxLangPickerBound=1;document.addEventListener('click',onLangClick,true);window.addEventListener('stx:navigate',syncFromUrl);window.addEventListener('popstate',syncFromUrl)})();</script>`;
|
|
144
|
+
}
|
|
145
|
+
function escapeAttr(s) {
|
|
146
|
+
return s.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
|
147
|
+
}
|
|
148
|
+
function escapeHtml(s) {
|
|
149
|
+
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
150
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type { ResolvedI18n } from './i18n';
|
|
2
|
+
export type {
|
|
3
|
+
BuildOptions,
|
|
4
|
+
PageMeta,
|
|
5
|
+
SiteConfig,
|
|
6
|
+
SiteI18nOptions,
|
|
7
|
+
SiteRouterOptions,
|
|
8
|
+
SiteSeo,
|
|
9
|
+
SiteSocial,
|
|
10
|
+
SiteThemeOptions,
|
|
11
|
+
} from './types';
|
|
12
|
+
export { buildStaticSite, defineSiteConfig, type BuildResult } from './build';
|
|
13
|
+
export { injectSeo } from './seo';
|
|
14
|
+
export { generateSitemap, type SitemapEntry } from './sitemap';
|
|
15
|
+
export { generateRobots } from './robots';
|
|
16
|
+
export { injectRouterScript, type RouterOptions } from './router';
|
|
17
|
+
export { injectThemeBootstrap, type ThemeOptions } from './theme';
|
|
18
|
+
export {
|
|
19
|
+
applyTranslations,
|
|
20
|
+
buildAlternateLinks,
|
|
21
|
+
buildLangPickerScript,
|
|
22
|
+
localizePath,
|
|
23
|
+
resolveI18n,
|
|
24
|
+
stampLocaleLayoutGroup,
|
|
25
|
+
stripLocalePrefix,
|
|
26
|
+
translate,
|
|
27
|
+
} from './i18n';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { buildStaticSite, defineSiteConfig } from "./build.js";
|
|
2
|
+
export { injectSeo } from "./seo.js";
|
|
3
|
+
export { generateSitemap } from "./sitemap.js";
|
|
4
|
+
export { generateRobots } from "./robots.js";
|
|
5
|
+
export { injectRouterScript } from "./router.js";
|
|
6
|
+
export { injectThemeBootstrap } from "./theme.js";
|
|
7
|
+
export {
|
|
8
|
+
applyTranslations,
|
|
9
|
+
buildAlternateLinks,
|
|
10
|
+
buildLangPickerScript,
|
|
11
|
+
localizePath,
|
|
12
|
+
resolveI18n,
|
|
13
|
+
stampLocaleLayoutGroup,
|
|
14
|
+
stripLocalePrefix,
|
|
15
|
+
translate
|
|
16
|
+
} from "./i18n.js";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export function generateRobots(site) {
|
|
2
|
+
const mode = site.robots ?? "allow";
|
|
3
|
+
if (mode === !1)
|
|
4
|
+
return null;
|
|
5
|
+
if (typeof mode === "string" && mode !== "allow" && mode !== "disallow")
|
|
6
|
+
return mode.endsWith(`
|
|
7
|
+
`) ? mode : `${mode}
|
|
8
|
+
`;
|
|
9
|
+
const sitemapLine = site.sitemap !== !1 ? `Sitemap: ${site.url.replace(/\/$/, "")}/sitemap.xml
|
|
10
|
+
` : "";
|
|
11
|
+
if (mode === "disallow")
|
|
12
|
+
return [
|
|
13
|
+
"User-agent: *",
|
|
14
|
+
"Disallow: /",
|
|
15
|
+
"",
|
|
16
|
+
sitemapLine
|
|
17
|
+
].filter(Boolean).join(`
|
|
18
|
+
`);
|
|
19
|
+
return [
|
|
20
|
+
"User-agent: *",
|
|
21
|
+
"Allow: /",
|
|
22
|
+
"",
|
|
23
|
+
sitemapLine
|
|
24
|
+
].filter(Boolean).join(`
|
|
25
|
+
`);
|
|
26
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SiteRouterOptions } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Inject the stx SPA router into HTML. The script is appended just
|
|
4
|
+
* before `</body>` (or at the end of the document if there is no body
|
|
5
|
+
* close). Configuration from `options` is exposed as
|
|
6
|
+
* `window.__stxRouterConfig` ahead of the runtime so the runtime picks
|
|
7
|
+
* it up on init.
|
|
8
|
+
*/
|
|
9
|
+
export declare function injectRouterScript(html: string, options?: RouterOptions): Promise<string>;
|
|
10
|
+
export type RouterOptions = SiteRouterOptions;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
let _cachedRouterScript = null;
|
|
2
|
+
async function getRouterScript() {
|
|
3
|
+
if (_cachedRouterScript !== null)
|
|
4
|
+
return _cachedRouterScript;
|
|
5
|
+
try {
|
|
6
|
+
const mod = await import("stx-router");
|
|
7
|
+
if (typeof mod.getRouterScript === "function")
|
|
8
|
+
_cachedRouterScript = mod.getRouterScript();
|
|
9
|
+
else
|
|
10
|
+
_cachedRouterScript = "";
|
|
11
|
+
} catch {
|
|
12
|
+
_cachedRouterScript = "";
|
|
13
|
+
}
|
|
14
|
+
return _cachedRouterScript;
|
|
15
|
+
}
|
|
16
|
+
export async function injectRouterScript(html, options) {
|
|
17
|
+
const script = await getRouterScript();
|
|
18
|
+
if (!script)
|
|
19
|
+
return html;
|
|
20
|
+
const merged = { interceptAllLinks: !0, container: "main", ...options }, block = `${`<script>window.__stxRouterConfig=${JSON.stringify(merged)};</script>
|
|
21
|
+
`}<script>${script}</script>`;
|
|
22
|
+
if (/<\/body>/i.test(html))
|
|
23
|
+
return html.replace(/<\/body>/i, `${block}
|
|
24
|
+
</body>`);
|
|
25
|
+
return `${html}
|
|
26
|
+
${block}`;
|
|
27
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PageMeta, SiteConfig } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Replace stx's auto-injected default SEO block (which says "stx Project")
|
|
4
|
+
* with site-specific tags. Looks for the marker comment stx inserts and
|
|
5
|
+
* swaps the wrapped meta tags. If the block isn't found, prepends the
|
|
6
|
+
* tags after <head>.
|
|
7
|
+
*/
|
|
8
|
+
export declare function injectSeo(html: string, site: SiteConfig, page?: PageMeta, pagePath?: string): string;
|