Skip to content

Commit e1448f2

Browse files
authored
fix: ensure types are easier to follow for TypeScript (#13140)
As a byproduct of #12239 some types were changed from being directly exported to indirectly exported. TypeScript is bad at following these types while generating d.ts files, so we can't do that. A check at the end of the types generation was added to prevent regressions in the future. Fixes #13128 Also removes the old types from `svelte/reactivity` which are deprecated for a while now.
1 parent d5da75d commit e1448f2

File tree

7 files changed

+49
-107
lines changed

7 files changed

+49
-107
lines changed

.changeset/metal-cameras-jump.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: ensure types are easier to follow for TypeScript

packages/svelte/scripts/generate-types.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,14 @@ if (bad_links.length > 0) {
6060

6161
process.exit(1);
6262
}
63+
64+
if (types.includes('\texport { ')) {
65+
// eslint-disable-next-line no-console
66+
console.error(
67+
`The generated types file should not contain 'export { ... }' statements. ` +
68+
`TypeScript is bad at following these: when creating d.ts files through @sveltejs/package, and one of these types is used, ` +
69+
`TypeScript will likely fail at generating a d.ts file. ` +
70+
`To prevent this, do 'export interface Foo {}' instead of 'interface Foo {}' and then 'export { Foo }'`
71+
);
72+
process.exit(1);
73+
}

packages/svelte/src/reactivity/index-client.js

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,3 @@ export { SvelteSet } from './set.js';
33
export { SvelteMap } from './map.js';
44
export { SvelteURL } from './url.js';
55
export { SvelteURLSearchParams } from './url-search-params.js';
6-
7-
/** @deprecated Use `SvelteDate` instead */
8-
export function Date() {
9-
throw new Error('Date has been removed, use SvelteDate instead.');
10-
}
11-
12-
/** @deprecated Use `SvelteSet` instead */
13-
export function Set() {
14-
throw new Error('Set has been removed, use SvelteSet instead.');
15-
}
16-
17-
/** @deprecated Use `SvelteMap` instead */
18-
export function Map() {
19-
throw new Error('Map has been removed, use SvelteMap instead.');
20-
}
21-
22-
/** @deprecated Use `SvelteURL` instead */
23-
export function URL() {
24-
throw new Error('URL has been removed, use SvelteURL instead.');
25-
}
26-
27-
/** @deprecated Use `SvelteURLSearchParams` instead */
28-
export function URLSearchParams() {
29-
throw new Error('URLSearchParams has been removed, use SvelteURLSearchParams instead.');
30-
}

packages/svelte/src/reactivity/index-server.js

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,3 @@ export const SvelteSet = globalThis.Set;
33
export const SvelteMap = globalThis.Map;
44
export const SvelteURL = globalThis.URL;
55
export const SvelteURLSearchParams = globalThis.URLSearchParams;
6-
7-
/** @deprecated Use `SvelteDate` instead */
8-
export function Date() {
9-
throw new Error('Date has been removed, use SvelteDate instead.');
10-
}
11-
12-
/** @deprecated Use `SvelteSet` instead */
13-
export function Set() {
14-
throw new Error('Set has been removed, use SvelteSet instead.');
15-
}
16-
17-
/** @deprecated Use `SvelteMap` instead */
18-
export function Map() {
19-
throw new Error('Map has been removed, use SvelteMap instead.');
20-
}
21-
22-
/** @deprecated Use `SvelteURL` instead */
23-
export function URL() {
24-
throw new Error('URL has been removed, use SvelteURL instead.');
25-
}
26-
27-
/** @deprecated Use `SvelteURLSearchParams` instead */
28-
export function URLSearchParams() {
29-
throw new Error('URLSearchParams has been removed, use SvelteURLSearchParams instead.');
30-
}

packages/svelte/src/store/public.d.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
/** Callback to inform of a value updates. */
2-
type Subscriber<T> = (value: T) => void;
2+
export type Subscriber<T> = (value: T) => void;
33

44
/** Unsubscribes from value updates. */
5-
type Unsubscriber = () => void;
5+
export type Unsubscriber = () => void;
66

77
/** Callback to update a value. */
8-
type Updater<T> = (value: T) => T;
8+
export type Updater<T> = (value: T) => T;
99

1010
/**
1111
* Start and stop notification callbacks.
@@ -16,13 +16,13 @@ type Updater<T> = (value: T) => T;
1616
* @returns {void | (() => void)} Optionally, a cleanup function that is called when the last remaining
1717
* subscriber unsubscribes.
1818
*/
19-
type StartStopNotifier<T> = (
19+
export type StartStopNotifier<T> = (
2020
set: (value: T) => void,
2121
update: (fn: Updater<T>) => void
2222
) => void | (() => void);
2323

2424
/** Readable interface for subscribing. */
25-
interface Readable<T> {
25+
export interface Readable<T> {
2626
/**
2727
* Subscribe on value changes.
2828
* @param run subscription callback
@@ -32,7 +32,7 @@ interface Readable<T> {
3232
}
3333

3434
/** Writable interface for both updating and subscribing. */
35-
interface Writable<T> extends Readable<T> {
35+
export interface Writable<T> extends Readable<T> {
3636
/**
3737
* Set value and inform subscribers.
3838
* @param value to set
@@ -46,6 +46,4 @@ interface Writable<T> extends Readable<T> {
4646
update(this: void, updater: Updater<T>): void;
4747
}
4848

49-
export { Readable, StartStopNotifier, Subscriber, Unsubscriber, Updater, Writable };
50-
5149
export * from './index-client.js';
Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
1-
type EasingFunction = (t: number) => number;
1+
export type EasingFunction = (t: number) => number;
22

3-
interface TransitionConfig {
3+
export interface TransitionConfig {
44
delay?: number;
55
duration?: number;
66
easing?: EasingFunction;
77
css?: (t: number, u: number) => string;
88
tick?: (t: number, u: number) => void;
99
}
1010

11-
interface BlurParams {
11+
export interface BlurParams {
1212
delay?: number;
1313
duration?: number;
1414
easing?: EasingFunction;
1515
amount?: number | string;
1616
opacity?: number;
1717
}
1818

19-
interface FadeParams {
19+
export interface FadeParams {
2020
delay?: number;
2121
duration?: number;
2222
easing?: EasingFunction;
2323
}
2424

25-
interface FlyParams {
25+
export interface FlyParams {
2626
delay?: number;
2727
duration?: number;
2828
easing?: EasingFunction;
@@ -31,44 +31,32 @@ interface FlyParams {
3131
opacity?: number;
3232
}
3333

34-
interface SlideParams {
34+
export interface SlideParams {
3535
delay?: number;
3636
duration?: number;
3737
easing?: EasingFunction;
3838
axis?: 'x' | 'y';
3939
}
4040

41-
interface ScaleParams {
41+
export interface ScaleParams {
4242
delay?: number;
4343
duration?: number;
4444
easing?: EasingFunction;
4545
start?: number;
4646
opacity?: number;
4747
}
4848

49-
interface DrawParams {
49+
export interface DrawParams {
5050
delay?: number;
5151
speed?: number;
5252
duration?: number | ((len: number) => number);
5353
easing?: EasingFunction;
5454
}
5555

56-
interface CrossfadeParams {
56+
export interface CrossfadeParams {
5757
delay?: number;
5858
duration?: number | ((len: number) => number);
5959
easing?: EasingFunction;
6060
}
6161

62-
export {
63-
EasingFunction,
64-
TransitionConfig,
65-
BlurParams,
66-
FadeParams,
67-
FlyParams,
68-
SlideParams,
69-
ScaleParams,
70-
DrawParams,
71-
CrossfadeParams
72-
};
73-
7462
export * from './index.js';

packages/svelte/types/index.d.ts

Lines changed: 18 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1700,16 +1700,6 @@ declare module 'svelte/motion' {
17001700
}
17011701

17021702
declare module 'svelte/reactivity' {
1703-
/** @deprecated Use `SvelteDate` instead */
1704-
function Date_1(): void;
1705-
/** @deprecated Use `SvelteSet` instead */
1706-
function Set_1(): void;
1707-
/** @deprecated Use `SvelteMap` instead */
1708-
function Map_1(): void;
1709-
/** @deprecated Use `SvelteURL` instead */
1710-
function URL_1(): void;
1711-
/** @deprecated Use `SvelteURLSearchParams` instead */
1712-
function URLSearchParams_1(): void;
17131703
export class SvelteDate extends Date {
17141704

17151705
constructor(...params: any[]);
@@ -1740,7 +1730,7 @@ declare module 'svelte/reactivity' {
17401730
#private;
17411731
}
17421732

1743-
export { Date_1 as Date, Set_1 as Set, Map_1 as Map, URL_1 as URL, URLSearchParams_1 as URLSearchParams };
1733+
export {};
17441734
}
17451735

17461736
declare module 'svelte/server' {
@@ -1777,13 +1767,13 @@ declare module 'svelte/server' {
17771767

17781768
declare module 'svelte/store' {
17791769
/** Callback to inform of a value updates. */
1780-
type Subscriber<T> = (value: T) => void;
1770+
export type Subscriber<T> = (value: T) => void;
17811771

17821772
/** Unsubscribes from value updates. */
1783-
type Unsubscriber = () => void;
1773+
export type Unsubscriber = () => void;
17841774

17851775
/** Callback to update a value. */
1786-
type Updater<T> = (value: T) => T;
1776+
export type Updater<T> = (value: T) => T;
17871777

17881778
/**
17891779
* Start and stop notification callbacks.
@@ -1794,13 +1784,13 @@ declare module 'svelte/store' {
17941784
* @returns Optionally, a cleanup function that is called when the last remaining
17951785
* subscriber unsubscribes.
17961786
*/
1797-
type StartStopNotifier<T> = (
1787+
export type StartStopNotifier<T> = (
17981788
set: (value: T) => void,
17991789
update: (fn: Updater<T>) => void
18001790
) => void | (() => void);
18011791

18021792
/** Readable interface for subscribing. */
1803-
interface Readable<T> {
1793+
export interface Readable<T> {
18041794
/**
18051795
* Subscribe on value changes.
18061796
* @param run subscription callback
@@ -1810,7 +1800,7 @@ declare module 'svelte/store' {
18101800
}
18111801

18121802
/** Writable interface for both updating and subscribing. */
1813-
interface Writable<T> extends Readable<T> {
1803+
export interface Writable<T> extends Readable<T> {
18141804
/**
18151805
* Set value and inform subscribers.
18161806
* @param value to set
@@ -1882,35 +1872,35 @@ declare module 'svelte/store' {
18821872
type StoresValues<T> =
18831873
T extends Readable<infer U> ? U : { [K in keyof T]: T[K] extends Readable<infer U> ? U : never };
18841874

1885-
export { Subscriber, Unsubscriber, Updater, StartStopNotifier, Readable, Writable };
1875+
export {};
18861876
}
18871877

18881878
declare module 'svelte/transition' {
1889-
type EasingFunction = (t: number) => number;
1879+
export type EasingFunction = (t: number) => number;
18901880

1891-
interface TransitionConfig {
1881+
export interface TransitionConfig {
18921882
delay?: number;
18931883
duration?: number;
18941884
easing?: EasingFunction;
18951885
css?: (t: number, u: number) => string;
18961886
tick?: (t: number, u: number) => void;
18971887
}
18981888

1899-
interface BlurParams {
1889+
export interface BlurParams {
19001890
delay?: number;
19011891
duration?: number;
19021892
easing?: EasingFunction;
19031893
amount?: number | string;
19041894
opacity?: number;
19051895
}
19061896

1907-
interface FadeParams {
1897+
export interface FadeParams {
19081898
delay?: number;
19091899
duration?: number;
19101900
easing?: EasingFunction;
19111901
}
19121902

1913-
interface FlyParams {
1903+
export interface FlyParams {
19141904
delay?: number;
19151905
duration?: number;
19161906
easing?: EasingFunction;
@@ -1919,29 +1909,29 @@ declare module 'svelte/transition' {
19191909
opacity?: number;
19201910
}
19211911

1922-
interface SlideParams {
1912+
export interface SlideParams {
19231913
delay?: number;
19241914
duration?: number;
19251915
easing?: EasingFunction;
19261916
axis?: 'x' | 'y';
19271917
}
19281918

1929-
interface ScaleParams {
1919+
export interface ScaleParams {
19301920
delay?: number;
19311921
duration?: number;
19321922
easing?: EasingFunction;
19331923
start?: number;
19341924
opacity?: number;
19351925
}
19361926

1937-
interface DrawParams {
1927+
export interface DrawParams {
19381928
delay?: number;
19391929
speed?: number;
19401930
duration?: number | ((len: number) => number);
19411931
easing?: EasingFunction;
19421932
}
19431933

1944-
interface CrossfadeParams {
1934+
export interface CrossfadeParams {
19451935
delay?: number;
19461936
duration?: number | ((len: number) => number);
19471937
easing?: EasingFunction;
@@ -1997,7 +1987,7 @@ declare module 'svelte/transition' {
19971987
key: any;
19981988
}) => () => TransitionConfig];
19991989

2000-
export { EasingFunction, TransitionConfig, BlurParams, FadeParams, FlyParams, SlideParams, ScaleParams, DrawParams, CrossfadeParams };
1990+
export {};
20011991
}
20021992

20031993
declare module 'svelte/events' {

0 commit comments

Comments
 (0)