summaryrefslogtreecommitdiff
path: root/packages/integrations/svelte/src/client.svelte.ts
diff options
context:
space:
mode:
authorGravatar Florian Lefebvre <contact@florian-lefebvre.dev> 2025-04-22 13:05:13 +0200
committerGravatar GitHub <noreply@github.com> 2025-04-22 12:05:13 +0100
commita19a185efd75334f2f417b433fcfaa0017fe41ee (patch)
tree853831aa7f68a8e0ee1aab0b231ba5d22b42c61c /packages/integrations/svelte/src/client.svelte.ts
parent620d15d8483dfb1822cd47833bc1653e0b704ccb (diff)
downloadastro-a19a185efd75334f2f417b433fcfaa0017fe41ee.tar.gz
astro-a19a185efd75334f2f417b433fcfaa0017fe41ee.tar.zst
astro-a19a185efd75334f2f417b433fcfaa0017fe41ee.zip
feat: convert integrations to TS (#13663)
Diffstat (limited to '')
-rw-r--r--packages/integrations/svelte/src/client.svelte.ts (renamed from packages/integrations/svelte/client.svelte.js)34
1 files changed, 19 insertions, 15 deletions
diff --git a/packages/integrations/svelte/client.svelte.js b/packages/integrations/svelte/src/client.svelte.ts
index 3bc9369f8..102f99490 100644
--- a/packages/integrations/svelte/client.svelte.js
+++ b/packages/integrations/svelte/src/client.svelte.ts
@@ -1,15 +1,19 @@
import { createRawSnippet, hydrate, mount, unmount } from 'svelte';
-/** @type {WeakMap<any, ReturnType<typeof createComponent>} */
-const existingApplications = new WeakMap();
+const existingApplications = new WeakMap<HTMLElement, ReturnType<typeof createComponent>>();
-export default (element) => {
- return async (Component, props, slotted, { client }) => {
+export default (element: HTMLElement) => {
+ return async (
+ Component: any,
+ props: Record<string, any>,
+ slotted: Record<string, any>,
+ { client }: Record<string, string>,
+ ) => {
if (!element.hasAttribute('ssr')) return;
let children = undefined;
- let _$$slots = undefined;
- let renderFns = {};
+ let _$$slots: Record<string, any> | undefined = undefined;
+ let renderFns: Record<string, any> = {};
for (const [key, value] of Object.entries(slotted)) {
// Legacy slot support
@@ -43,7 +47,7 @@ export default (element) => {
...renderFns,
};
if (existingApplications.has(element)) {
- existingApplications.get(element).setProps(resolvedProps);
+ existingApplications.get(element)!.setProps(resolvedProps);
} else {
const component = createComponent(Component, element, resolvedProps, client !== 'only');
existingApplications.set(element, component);
@@ -52,13 +56,13 @@ export default (element) => {
};
};
-/**
- * @param {any} Component
- * @param {HTMLElement} target
- * @param {Record<string, any>} props
- * @param {boolean} shouldHydrate
- */
-function createComponent(Component, target, props, shouldHydrate) {
+
+function createComponent(
+ Component: any,
+ target: HTMLElement,
+ props: Record<string, any>,
+ shouldHydrate: boolean,
+) {
let propsState = $state(props);
const bootstrap = shouldHydrate ? hydrate : mount;
if (!shouldHydrate) {
@@ -66,7 +70,7 @@ function createComponent(Component, target, props, shouldHydrate) {
}
const component = bootstrap(Component, { target, props: propsState });
return {
- setProps(newProps) {
+ setProps(newProps: Record<string, any>) {
Object.assign(propsState, newProps);
// Remove props in `propsState` but not in `newProps`
for (const key in propsState) {