From f47cd0ac64cb6df6aedff79d9d23fa30b589cdcc Mon Sep 17 00:00:00 2001 From: Ivan Hofer Date: Wed, 20 Jul 2022 15:55:36 +0200 Subject: [PATCH 01/12] add `ComponentEvents` type --- src/runtime/internal/dev.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index 5b00e7dc5b4f..6b302bb3cefc 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -301,6 +301,25 @@ export type ComponentProps = Component extend ? Props : never; +/** + * Convenience type to get the events the given component expects. Example: + * ```html + * + * + *
+ * + *
+ * ``` + */ +export type ComponentEvents = Component extends SvelteComponentTyped + ? Events + : never; + export function loop_guard(timeout) { const start = Date.now(); return () => { From f8e6ae0c5fc5ef2037eac9759d6fd925f45e28f5 Mon Sep 17 00:00:00 2001 From: Ivan Hofer Date: Wed, 20 Jul 2022 15:56:17 +0200 Subject: [PATCH 02/12] add `ComponentEvent` type --- src/runtime/internal/dev.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index 6b302bb3cefc..f3d1fae4b9fe 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -320,6 +320,25 @@ export type ComponentEvents = Component exten ? Events : never; +/** +* Convenience type to get an event the given component expects. Example: +* ```html +* +* +* +* ``` +*/ +export type ComponentEvent = Component extends SvelteComponentTyped + ? never extends Events[Name] ? CustomEvent : Events[Name] + : never; + export function loop_guard(timeout) { const start = Date.now(); return () => { From ba2eca3caebbb02824db3b81d369b80c8278234c Mon Sep 17 00:00:00 2001 From: Ivan Hofer Date: Wed, 20 Jul 2022 15:57:08 +0200 Subject: [PATCH 03/12] add `ComponentSlots` type --- src/runtime/internal/dev.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index f3d1fae4b9fe..5c49c5c2539a 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -339,6 +339,10 @@ export type ComponentEvent : Events[Name] : never; +export type ComponentSlots = Component extends SvelteComponentTyped + ? {} extends Slots ? never : Slots + : never; + export function loop_guard(timeout) { const start = Date.now(); return () => { From 6781c5a956fe6f4a97a67eac08e7f97d43cc3c1f Mon Sep 17 00:00:00 2001 From: Ivan Hofer Date: Wed, 20 Jul 2022 16:00:37 +0200 Subject: [PATCH 04/12] expose new types --- generate-type-definitions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generate-type-definitions.js b/generate-type-definitions.js index 00b079eb5d69..56b2fbd715a5 100644 --- a/generate-type-definitions.js +++ b/generate-type-definitions.js @@ -16,7 +16,7 @@ function modify(path, modifyFn) { modify( 'types/runtime/index.d.ts', - content => content.replace('SvelteComponentTyped', 'SvelteComponentTyped, ComponentType, ComponentConstructorOptions, ComponentProps') + content => content.replace('SvelteComponentTyped', 'SvelteComponentTyped, ComponentType, ComponentConstructorOptions, ComponentProps, ComponentEvents, ComponentEvent, ComponentSlots') ); modify( 'types/compiler/index.d.ts', From cbf3462d1382d6e45e4b86d90f78f60e8d7c0adc Mon Sep 17 00:00:00 2001 From: Hofer Ivan Date: Wed, 20 Jul 2022 17:01:27 +0200 Subject: [PATCH 05/12] fix example Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> --- src/runtime/internal/dev.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index 5c49c5c2539a..b8b5bedc5f0f 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -327,7 +327,7 @@ export type ComponentEvents = Component exten * import type { ComponentEvent } from 'svelte'; * import Component from './Component.svelte'; * -* function handleCloseEvent(event: ComponentEvents) { +* function handleCloseEvent(event: ComponentEvent) { * console.log(event.detail); * }; * From b93541841d508885b73cbddedf5e83aae9449af5 Mon Sep 17 00:00:00 2001 From: Ivan Hofer Date: Wed, 20 Jul 2022 17:00:49 +0200 Subject: [PATCH 06/12] remove `ComponentSlots` type --- src/runtime/internal/dev.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index b8b5bedc5f0f..c0fbe2677a3e 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -339,10 +339,6 @@ export type ComponentEvent : Events[Name] : never; -export type ComponentSlots = Component extends SvelteComponentTyped - ? {} extends Slots ? never : Slots - : never; - export function loop_guard(timeout) { const start = Date.now(); return () => { From 38db918901550e55d27b25951e2c7866a8939408 Mon Sep 17 00:00:00 2001 From: Hofer Ivan Date: Wed, 20 Jul 2022 19:56:34 +0200 Subject: [PATCH 07/12] fix example Co-authored-by: Ignatius Bagus --- src/runtime/internal/dev.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index c0fbe2677a3e..c28c31ea9deb 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -308,7 +308,7 @@ export type ComponentProps = Component extend * import type { ComponentEvents } from 'svelte'; * import Component from './Component.svelte'; * - * type $$Events = ComponentEvent; + * type $$Events = ComponentEvents; * * *
From c7df04f5970241c6af751a8e75b0ffa96fc0aeea Mon Sep 17 00:00:00 2001 From: Hofer Ivan Date: Wed, 20 Jul 2022 19:56:56 +0200 Subject: [PATCH 08/12] update exported types Co-authored-by: Ignatius Bagus --- generate-type-definitions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generate-type-definitions.js b/generate-type-definitions.js index 56b2fbd715a5..f2e09e04fa5e 100644 --- a/generate-type-definitions.js +++ b/generate-type-definitions.js @@ -16,7 +16,7 @@ function modify(path, modifyFn) { modify( 'types/runtime/index.d.ts', - content => content.replace('SvelteComponentTyped', 'SvelteComponentTyped, ComponentType, ComponentConstructorOptions, ComponentProps, ComponentEvents, ComponentEvent, ComponentSlots') + content => content.replace('SvelteComponentTyped', 'SvelteComponentTyped, ComponentType, ComponentConstructorOptions, ComponentProps, ComponentEvents, ComponentEvent') ); modify( 'types/compiler/index.d.ts', From 554dfbe1340da120f666474ec110b960093bab80 Mon Sep 17 00:00:00 2001 From: Hofer Ivan Date: Wed, 20 Jul 2022 19:57:54 +0200 Subject: [PATCH 09/12] run prettier Co-authored-by: Ignatius Bagus --- src/runtime/internal/dev.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index c28c31ea9deb..c00aa2fc3c55 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -316,9 +316,8 @@ export type ComponentProps = Component extend *
* ``` */ -export type ComponentEvents = Component extends SvelteComponentTyped - ? Events - : never; +export type ComponentEvents = + Component extends SvelteComponentTyped ? Events : never; /** * Convenience type to get an event the given component expects. Example: From 2bb594857a51fb198b158bff27be6eedd21c21cd Mon Sep 17 00:00:00 2001 From: Ivan Hofer Date: Mon, 25 Jul 2022 17:32:42 +0200 Subject: [PATCH 10/12] remove `ComponentEvent` --- src/runtime/internal/dev.ts | 37 +++++++++---------------------------- 1 file changed, 9 insertions(+), 28 deletions(-) diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index c00aa2fc3c55..cd895c82b40a 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -264,18 +264,18 @@ export class SvelteComponentTyped< /** * Convenience type to get the type of a Svelte component. Useful for example in combination with * dynamic components using ``. - * + * * Example: * ```html * - * + * * * * ``` @@ -292,7 +292,7 @@ export type ComponentType * import type { ComponentProps } from 'svelte'; * import Component from './Component.svelte'; - * + * * const props: ComponentProps = { foo: 'bar' }; // Errors if these aren't the correct props * * ``` @@ -308,36 +308,17 @@ export type ComponentProps = Component extend * import type { ComponentEvents } from 'svelte'; * import Component from './Component.svelte'; * - * type $$Events = ComponentEvents; + * function handleCloseEvent(event: ComponentEvents['close']) { + * console.log(event.detail); + * }; * - * - *
- * - *
+ * + * * ``` */ export type ComponentEvents = Component extends SvelteComponentTyped ? Events : never; -/** -* Convenience type to get an event the given component expects. Example: -* ```html -* -* -* -* ``` -*/ -export type ComponentEvent = Component extends SvelteComponentTyped - ? never extends Events[Name] ? CustomEvent : Events[Name] - : never; - export function loop_guard(timeout) { const start = Date.now(); return () => { From 5a6360ebe3d38e033662349b1ecc7dc1490df29d Mon Sep 17 00:00:00 2001 From: Ivan Hofer Date: Mon, 25 Jul 2022 17:33:27 +0200 Subject: [PATCH 11/12] remove `ComponentEvent` --- generate-type-definitions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generate-type-definitions.js b/generate-type-definitions.js index f2e09e04fa5e..d8f6e9f826ed 100644 --- a/generate-type-definitions.js +++ b/generate-type-definitions.js @@ -16,7 +16,7 @@ function modify(path, modifyFn) { modify( 'types/runtime/index.d.ts', - content => content.replace('SvelteComponentTyped', 'SvelteComponentTyped, ComponentType, ComponentConstructorOptions, ComponentProps, ComponentEvents, ComponentEvent') + content => content.replace('SvelteComponentTyped', 'SvelteComponentTyped, ComponentType, ComponentConstructorOptions, ComponentProps, ComponentEvents') ); modify( 'types/compiler/index.d.ts', From 7dfe982b2d85367335a54279a9c2b035c54eff07 Mon Sep 17 00:00:00 2001 From: Ivan Hofer Date: Mon, 25 Jul 2022 17:33:59 +0200 Subject: [PATCH 12/12] remove ; from example --- src/runtime/internal/dev.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index cd895c82b40a..df40f94230a4 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -310,7 +310,7 @@ export type ComponentProps = Component extend * * function handleCloseEvent(event: ComponentEvents['close']) { * console.log(event.detail); - * }; + * } * * *