diff options
author | 2025-04-22 13:05:13 +0200 | |
---|---|---|
committer | 2025-04-22 12:05:13 +0100 | |
commit | a19a185efd75334f2f417b433fcfaa0017fe41ee (patch) | |
tree | 853831aa7f68a8e0ee1aab0b231ba5d22b42c61c /packages/integrations/svelte/src/client.svelte.ts | |
parent | 620d15d8483dfb1822cd47833bc1653e0b704ccb (diff) | |
download | astro-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) { |