From 359b3ecf8c89fec657e44909b1513ce65383e06c Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Sat, 25 Sep 2021 23:51:32 +0200 Subject: [PATCH 01/16] [feat] add convenience SvelteComponentConstructor type Eases typing "this is a variable that expects a Svelte component constructor (of a certain shape)". Removes the need for SvelteComponentTyped to be an extra type so it can be deprecated in v4 and removed in v5, and SvelteComponent(Dev) can receive the same generic typings as SvelteComponetTyped in v4. --- CHANGELOG.md | 4 ++++ src/runtime/index.ts | 3 ++- src/runtime/internal/dev.ts | 16 ++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54a678accb83..278de466505b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Svelte changelog +## Unreleased + +* Add `SvelteComponentConstructor` convenience type ([#6770](https://github.com/sveltejs/svelte/pull/6770)) + ## 3.43.0 * Use export map to expose no-op versions of lifecycle functions for SSR ([#6743](https://github.com/sveltejs/svelte/pull/6743)) diff --git a/src/runtime/index.ts b/src/runtime/index.ts index 8e12f9f0eebb..31d77d15ac92 100644 --- a/src/runtime/index.ts +++ b/src/runtime/index.ts @@ -12,5 +12,6 @@ export { tick, createEventDispatcher, SvelteComponentDev as SvelteComponent, - SvelteComponentTyped + SvelteComponentTyped, + SvelteComponentConstructor } from 'svelte/internal'; diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index 76d68086c841..3590a9a7cd28 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -247,6 +247,22 @@ export class SvelteComponentTyped< } } +/** + * Convenience-type to represent a Svelte component constructor. + * + * Example: + * ```ts + import ASvelteComponent from './ASvelteComponent.svelte'; + const ComponentClass: SvelteComponentConstructor = ASvelteComponent; + new ComponentClass(..); + ``` + */ +export type SvelteComponentConstructor< + Props extends Record = any, + Events extends Record = any, + Slots extends Record = any +> = new (options: IComponentOptions) => SvelteComponentTyped; + export function loop_guard(timeout) { const start = Date.now(); return () => { From 5fb01cce3cc321737577af215599643a6a2521e9 Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Sun, 26 Sep 2021 00:07:19 +0200 Subject: [PATCH 02/16] separate type export --- src/runtime/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/runtime/index.ts b/src/runtime/index.ts index 31d77d15ac92..ca611685be34 100644 --- a/src/runtime/index.ts +++ b/src/runtime/index.ts @@ -12,6 +12,6 @@ export { tick, createEventDispatcher, SvelteComponentDev as SvelteComponent, - SvelteComponentTyped, - SvelteComponentConstructor + SvelteComponentTyped } from 'svelte/internal'; +export type { SvelteComponentConstructor } from 'svelte/internal'; From 3bd31074348704977a35d433bf4867fa3305e45b Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Sun, 26 Sep 2021 16:41:00 +0200 Subject: [PATCH 03/16] bump ts to 4.0, ensure no new type syntax --- package-lock.json | 15 ++++++++------- package.json | 4 ++-- post-typegen.js | 14 ++++++++++++++ 3 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 post-typegen.js diff --git a/package-lock.json b/package-lock.json index 4bc3337e32af..12dd6587ebd0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "svelte", "version": "3.43.0", "license": "MIT", "devDependencies": { @@ -45,7 +46,7 @@ "sourcemap-codec": "^1.4.8", "tiny-glob": "^0.2.6", "tslib": "^2.0.3", - "typescript": "^3.7.5" + "typescript": "~4.0.0" }, "engines": { "node": ">= 8" @@ -5543,9 +5544,9 @@ "dev": true }, "node_modules/typescript": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.5.tgz", - "integrity": "sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.8.tgz", + "integrity": "sha512-oz1765PN+imfz1MlZzSZPtC/tqcwsCyIYA8L47EkRnRW97ztRk83SzMiWLrnChC0vqoYxSU1fcFUDA5gV/ZiPg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -10298,9 +10299,9 @@ "dev": true }, "typescript": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.5.tgz", - "integrity": "sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.8.tgz", + "integrity": "sha512-oz1765PN+imfz1MlZzSZPtC/tqcwsCyIYA8L47EkRnRW97ztRk83SzMiWLrnChC0vqoYxSU1fcFUDA5gV/ZiPg==", "dev": true }, "unbox-primitive": { diff --git a/package.json b/package.json index e6991fd5c0b6..66decce07a7f 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "pretest": "npm run build", "posttest": "agadoo internal/index.mjs", "prepublishOnly": "node check_publish_env.js && npm run lint && npm test", - "tsd": "tsc -p src/compiler --emitDeclarationOnly && tsc -p src/runtime --emitDeclarationOnly", + "tsd": "tsc -p src/compiler --emitDeclarationOnly && tsc -p src/runtime --emitDeclarationOnly && node ./post-typegen.js", "lint": "eslint \"{src,test}/**/*.{ts,js}\"" }, "repository": { @@ -140,7 +140,7 @@ "sourcemap-codec": "^1.4.8", "tiny-glob": "^0.2.6", "tslib": "^2.0.3", - "typescript": "^3.7.5" + "typescript": "~4.0.0" }, "nyc": { "include": [ diff --git a/post-typegen.js b/post-typegen.js new file mode 100644 index 000000000000..08d932d09049 --- /dev/null +++ b/post-typegen.js @@ -0,0 +1,14 @@ +// Svelte 3 types are generated using TS 3.7 . Using newer type syntax is therefore technically a breaking change. +// `export type` / `import type` was introduced later, and needed now in one of the files. +// Replace `export type` with `export` in the `d.ts` file as it doesn't make a difference in `d.ts` files. +// This keeps backwards-compatibility + +const fs = require('fs'); + +const path = 'types/runtime/index.d.ts'; +const content = fs.readFileSync(path, 'utf8'); +const replaced = content.replace('export type', 'export'); +if (content === replaced) { + throw new Error('types/runtime/index.d.ts changed. Update post-typegen.js') +} +fs.writeFileSync(path, replaced); From a8e616be7803f1aeec0a9a0a7cd4655edb1b69c3 Mon Sep 17 00:00:00 2001 From: Simon Date: Tue, 28 Jun 2022 12:20:08 +0200 Subject: [PATCH 04/16] Adjust way of adding types to output, add more convenience types Closes #7584 --- package-lock.json | 14 +++++------ package.json | 2 +- post-typegen.js | 14 ----------- src/runtime/index.ts | 4 +-- src/runtime/internal/dev.ts | 49 ++++++++++++++++++++++++++----------- tsd.js | 13 ++++++++++ 6 files changed, 58 insertions(+), 38 deletions(-) delete mode 100644 post-typegen.js create mode 100644 tsd.js diff --git a/package-lock.json b/package-lock.json index fedd7ad74a0d..83d963b827ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,7 @@ "sourcemap-codec": "^1.4.8", "tiny-glob": "^0.2.6", "tslib": "^2.0.3", - "typescript": "~4.0.0" + "typescript": "^3.7.5" }, "engines": { "node": ">= 8" @@ -4402,9 +4402,9 @@ "dev": true }, "node_modules/typescript": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.8.tgz", - "integrity": "sha512-oz1765PN+imfz1MlZzSZPtC/tqcwsCyIYA8L47EkRnRW97ztRk83SzMiWLrnChC0vqoYxSU1fcFUDA5gV/ZiPg==", + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -8096,9 +8096,9 @@ "dev": true }, "typescript": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.8.tgz", - "integrity": "sha512-oz1765PN+imfz1MlZzSZPtC/tqcwsCyIYA8L47EkRnRW97ztRk83SzMiWLrnChC0vqoYxSU1fcFUDA5gV/ZiPg==", + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", "dev": true }, "unbox-primitive": { diff --git a/package.json b/package.json index 0e377450632b..000f4cd2e7ab 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "pretest": "npm run build", "posttest": "agadoo internal/index.mjs", "prepublishOnly": "node check_publish_env.js && npm run lint && npm test", - "tsd": "tsc -p src/compiler --emitDeclarationOnly && tsc -p src/runtime --emitDeclarationOnly && node ./post-typegen.js", + "tsd": "node ./tsd.js", "lint": "eslint \"{src,test}/**/*.{ts,js}\"" }, "repository": { diff --git a/post-typegen.js b/post-typegen.js deleted file mode 100644 index 08d932d09049..000000000000 --- a/post-typegen.js +++ /dev/null @@ -1,14 +0,0 @@ -// Svelte 3 types are generated using TS 3.7 . Using newer type syntax is therefore technically a breaking change. -// `export type` / `import type` was introduced later, and needed now in one of the files. -// Replace `export type` with `export` in the `d.ts` file as it doesn't make a difference in `d.ts` files. -// This keeps backwards-compatibility - -const fs = require('fs'); - -const path = 'types/runtime/index.d.ts'; -const content = fs.readFileSync(path, 'utf8'); -const replaced = content.replace('export type', 'export'); -if (content === replaced) { - throw new Error('types/runtime/index.d.ts changed. Update post-typegen.js') -} -fs.writeFileSync(path, replaced); diff --git a/src/runtime/index.ts b/src/runtime/index.ts index ca611685be34..39bf7a9496d0 100644 --- a/src/runtime/index.ts +++ b/src/runtime/index.ts @@ -12,6 +12,6 @@ export { tick, createEventDispatcher, SvelteComponentDev as SvelteComponent, - SvelteComponentTyped + SvelteComponentTyped, + // additional exports added through post-typegen.js } from 'svelte/internal'; -export type { SvelteComponentConstructor } from 'svelte/internal'; diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index 0dba0ec1fa8d..d6987990c600 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -128,7 +128,7 @@ export interface SvelteComponentDev { $destroy(): void; [accessor: string]: any; } -interface IComponentOptions = Record> { +export interface ComponentConstructorParams = Record> { target: Element | ShadowRoot; anchor?: Element; props?: Props; @@ -164,7 +164,7 @@ export class SvelteComponentDev extends SvelteComponent { */ $$slot_def: any; - constructor(options: IComponentOptions) { + constructor(options: ComponentConstructorParams) { if (!options || (!options.target && !options.$$inline)) { throw new Error("'target' is a required option"); } @@ -256,26 +256,47 @@ export class SvelteComponentTyped< */ $$slot_def: Slots; - constructor(options: IComponentOptions) { + constructor(options: ComponentConstructorParams) { super(options); } } /** - * Convenience-type to represent a Svelte component constructor. + * Convenience type to get the type of a Svelte component. Useful for example in combination with + * dynamic components and ``. * * Example: - * ```ts - import ASvelteComponent from './ASvelteComponent.svelte'; - const ComponentClass: SvelteComponentConstructor = ASvelteComponent; - new ComponentClass(..); - ``` + * ```html + * + * + * + * + * ``` */ -export type SvelteComponentConstructor< - Props extends Record = any, - Events extends Record = any, - Slots extends Record = any -> = new (options: IComponentOptions) => SvelteComponentTyped; +export type ComponentType> = + new (p: ComponentConstructorParams ? X : any>) => T; + +/** + * Convenience type to get the properties the given component expects. Example: + * ```html + * + * ``` + */ +export type ComponentProps = T extends SvelteComponentTyped + ? Props + : unknown; export function loop_guard(timeout) { const start = Date.now(); diff --git a/tsd.js b/tsd.js new file mode 100644 index 000000000000..ad3e74f95c24 --- /dev/null +++ b/tsd.js @@ -0,0 +1,13 @@ +// This script generates the TypeScript definitions + +const { execSync } = require('child_process'); +const { readFileSync, writeFileSync } = require('fs'); + +execSync('tsc -p src/compiler --emitDeclarationOnly && tsc -p src/runtime --emitDeclarationOnly'); + +// We need to add these types to the index.d.ts here because if we add them before building, the build will fail, +// because the TS->JS transformation doesn't know these exports are types and produces code that fails at runtime. +// We can't use `export type` syntax either because the TS version we're on doesn't have this feature yet. +const path = 'types/runtime/index.d.ts'; +const content = readFileSync(path, 'utf8'); +writeFileSync(path, content.replace('SvelteComponentTyped', 'SvelteComponentTyped, ComponentType, ComponentConstructorParams, ComponentProps')); From 59026682549f6264bf316294020132086db68e35 Mon Sep 17 00:00:00 2001 From: Simon Date: Tue, 28 Jun 2022 12:26:13 +0200 Subject: [PATCH 05/16] lint --- src/runtime/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/index.ts b/src/runtime/index.ts index 39bf7a9496d0..08b25ba2ca4e 100644 --- a/src/runtime/index.ts +++ b/src/runtime/index.ts @@ -12,6 +12,6 @@ export { tick, createEventDispatcher, SvelteComponentDev as SvelteComponent, - SvelteComponentTyped, + SvelteComponentTyped // additional exports added through post-typegen.js } from 'svelte/internal'; From 6940665ffd03e6513fcf550cf5cbe1ec117d3d8a Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Tue, 28 Jun 2022 22:47:46 +0200 Subject: [PATCH 06/16] Update src/runtime/internal/dev.ts Co-authored-by: Hofer Ivan --- 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 d6987990c600..c3d76a80f2f2 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -287,7 +287,7 @@ export type ComponentType - * import { ComponentProps } from 'svelte'; + * import type { ComponentProps } from 'svelte'; * import Component from './Component.svelte'; * * const props: ComponentProps = { foo: 'bar' }; // Errors if these aren't the correct props From 59638bb2e385bb9fa0ffcdb8157d79c7a40e57b2 Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Tue, 28 Jun 2022 22:47:53 +0200 Subject: [PATCH 07/16] Update src/runtime/internal/dev.ts Co-authored-by: Hofer Ivan --- 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 c3d76a80f2f2..cd7c12831d6d 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -273,7 +273,7 @@ export class SvelteComponentTyped< * import Component2 from './Component2.svelte'; * * const component: ComponentType = someLogic() ? Component1 : Component2; - * const componentOfCertainSubType: ComponentType> = someLogic() ? Component1 : Component2; + * const componentOfCertainSubType: ComponentType> = someLogic() ? Component1 : Component2; * * * From df48d977ff86e86cf24dbee634dc515ca123cfbe Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Tue, 28 Jun 2022 22:48:07 +0200 Subject: [PATCH 08/16] Update src/runtime/internal/dev.ts Co-authored-by: Hofer Ivan --- 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 cd7c12831d6d..c2ba22c1fa65 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -268,7 +268,7 @@ export class SvelteComponentTyped< * Example: * ```html * * - * - * + * + * * ``` */ export type ComponentType> = From 13cc53cdc358b10a2cf8d13b62c47c9a4e7395d3 Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 29 Jun 2022 10:31:46 +0200 Subject: [PATCH 13/16] rename interfcace, rename file, better generic names, never instead of unknown --- tsd.js => generate-type-definitions.js | 2 +- package.json | 2 +- src/runtime/internal/dev.ts | 14 +++++++------- 3 files changed, 9 insertions(+), 9 deletions(-) rename tsd.js => generate-type-definitions.js (90%) diff --git a/tsd.js b/generate-type-definitions.js similarity index 90% rename from tsd.js rename to generate-type-definitions.js index ad3e74f95c24..6cad31807f0e 100644 --- a/tsd.js +++ b/generate-type-definitions.js @@ -10,4 +10,4 @@ execSync('tsc -p src/compiler --emitDeclarationOnly && tsc -p src/runtime --emit // We can't use `export type` syntax either because the TS version we're on doesn't have this feature yet. const path = 'types/runtime/index.d.ts'; const content = readFileSync(path, 'utf8'); -writeFileSync(path, content.replace('SvelteComponentTyped', 'SvelteComponentTyped, ComponentType, ComponentConstructorParams, ComponentProps')); +writeFileSync(path, content.replace('SvelteComponentTyped', 'SvelteComponentTyped, ComponentType, ComponentConstructorOptions, ComponentProps')); diff --git a/package.json b/package.json index 000f4cd2e7ab..a1c9ae9a5d92 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "pretest": "npm run build", "posttest": "agadoo internal/index.mjs", "prepublishOnly": "node check_publish_env.js && npm run lint && npm test", - "tsd": "node ./tsd.js", + "tsd": "node ./generate-type-definitions.js", "lint": "eslint \"{src,test}/**/*.{ts,js}\"" }, "repository": { diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index d6987990c600..afc8f261bf8a 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -128,7 +128,7 @@ export interface SvelteComponentDev { $destroy(): void; [accessor: string]: any; } -export interface ComponentConstructorParams = Record> { +export interface ComponentConstructorOptions = Record> { target: Element | ShadowRoot; anchor?: Element; props?: Props; @@ -164,7 +164,7 @@ export class SvelteComponentDev extends SvelteComponent { */ $$slot_def: any; - constructor(options: ComponentConstructorParams) { + constructor(options: ComponentConstructorOptions) { if (!options || (!options.target && !options.$$inline)) { throw new Error("'target' is a required option"); } @@ -256,7 +256,7 @@ export class SvelteComponentTyped< */ $$slot_def: Slots; - constructor(options: ComponentConstructorParams) { + constructor(options: ComponentConstructorOptions) { super(options); } } @@ -280,8 +280,8 @@ export class SvelteComponentTyped< * * ``` */ -export type ComponentType> = - new (p: ComponentConstructorParams ? X : any>) => T; +export type ComponentType> = + new (p: ComponentConstructorOptions ? Props : any>) => Component; /** * Convenience type to get the properties the given component expects. Example: @@ -294,9 +294,9 @@ export type ComponentType * ``` */ -export type ComponentProps = T extends SvelteComponentTyped +export type ComponentProps = Component extends SvelteComponentTyped ? Props - : unknown; + : never; export function loop_guard(timeout) { const start = Date.now(); From 472c5a146795f1d000734da981a6519d3545a79f Mon Sep 17 00:00:00 2001 From: Simon Date: Wed, 29 Jun 2022 10:32:55 +0200 Subject: [PATCH 14/16] p->options --- 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 472d6bd43197..11bef956ca19 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -281,7 +281,7 @@ export class SvelteComponentTyped< * ``` */ export type ComponentType> = - new (p: ComponentConstructorOptions ? Props : any>) => Component; + new (options: ComponentConstructorOptions ? Props : any>) => Component; /** * Convenience type to get the props the given component expects. Example: From 1f4190c0485c0801779fdde256c8959e602a6b68 Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Fri, 1 Jul 2022 14:31:13 +0200 Subject: [PATCH 15/16] Update src/runtime/internal/dev.ts Co-authored-by: Ignatius Bagus --- src/runtime/internal/dev.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/runtime/internal/dev.ts b/src/runtime/internal/dev.ts index 11bef956ca19..5b00e7dc5b4f 100644 --- a/src/runtime/internal/dev.ts +++ b/src/runtime/internal/dev.ts @@ -280,8 +280,11 @@ export class SvelteComponentTyped< * * ``` */ -export type ComponentType> = - new (options: ComponentConstructorOptions ? Props : any>) => Component; +export type ComponentType = new ( + options: ComponentConstructorOptions< + Component extends SvelteComponentTyped ? Props : Record + > +) => Component; /** * Convenience type to get the props the given component expects. Example: From a4143c662508a14172b5feed52bc0a457543c7c7 Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Fri, 1 Jul 2022 14:40:40 +0200 Subject: [PATCH 16/16] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c085a2be206..b5bc4858d8f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ * Faster SSR ([#5701](https://github.com/sveltejs/svelte/pull/5701)) * Fix `class:` directive updates with `` ([#7521](https://github.com/sveltejs/svelte/issues/7521), [#7571](https://github.com/sveltejs/svelte/issues/7571)) * Harden attribute escaping during ssr ([#7530](https://github.com/sveltejs/svelte/pull/7530)) -* Add `ComponentType` convenience type ([#6770](https://github.com/sveltejs/svelte/pull/6770)) +* Add `ComponentType` and `ComponentProps` convenience types ([#6770](https://github.com/sveltejs/svelte/pull/6770)) ## 3.48.0