Skip to content

Commit cc82d5d

Browse files
fix: expose types for all TS resolution modes, fix SvelteComponent export (#8721)
also add some legacy import paths which should be changed in usage sites ASAP --------- Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com>
1 parent aec4137 commit cc82d5d

File tree

12 files changed

+66
-11
lines changed

12 files changed

+66
-11
lines changed

.changeset/mighty-suns-occur.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 loaded with all TS settings

.changeset/tame-peaches-destroy.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: export correct SvelteComponent type

packages/svelte/.gitignore

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,12 @@
77
_actual*.*
88
_output
99
/types
10+
11+
action.d.ts
12+
animate.d.ts
13+
compiler.d.ts
14+
easing.d.ts
15+
index.d.ts
16+
motion.d.ts
17+
store.d.ts
18+
transition.d.ts

packages/svelte/package.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
"compiler.*",
1212
"register.js",
1313
"index.d.ts",
14-
"internal.d.ts",
1514
"store.d.ts",
1615
"animate.d.ts",
1716
"transition.d.ts",
@@ -47,7 +46,6 @@
4746
"import": "./src/runtime/easing/index.js"
4847
},
4948
"./internal": {
50-
"types": "./types/index.d.ts",
5149
"import": "./src/runtime/internal/index.js"
5250
},
5351
"./motion": {

packages/svelte/scripts/generate-dts.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,26 @@
1+
import * as fs from 'fs';
12
import { createBundle } from 'dts-buddy';
23

4+
// It may look weird, but the imports MUST be ending with index.js to be properly resolved in all TS modes
5+
for (const name of ['action', 'animate', 'easing', 'motion', 'store', 'transition']) {
6+
fs.writeFileSync(`${name}.d.ts`, `import './types/index.js';`);
7+
}
8+
9+
fs.writeFileSync('index.d.ts', `import './types/index.js';`);
10+
fs.writeFileSync('compiler.d.ts', `import './types/index.js';`);
11+
12+
// TODO: some way to mark these as deprecated
13+
fs.mkdirSync('./types/compiler', { recursive: true });
14+
fs.writeFileSync('./types/compiler/preprocess.d.ts', `import '../index.js';`);
15+
fs.writeFileSync('./types/compiler/interfaces.d.ts', `import '../index.js';`);
16+
317
await createBundle({
418
output: 'types/index.d.ts',
519
modules: {
620
svelte: 'src/runtime/public.d.ts',
721
'svelte/compiler': 'src/compiler/public.d.ts',
822
'svelte/types/compiler/preprocess': 'src/compiler/preprocess/public.d.ts',
23+
'svelte/types/compiler/interfaces': 'src/compiler/interfaces.d.ts',
924
'svelte/action': 'src/runtime/action/public.d.ts',
1025
'svelte/animate': 'src/runtime/animate/public.d.ts',
1126
'svelte/easing': 'src/runtime/easing/index.js',
@@ -14,3 +29,11 @@ await createBundle({
1429
'svelte/transition': 'src/runtime/transition/public.d.ts'
1530
}
1631
});
32+
33+
// There's no way to tell in JS that a class can have arbitrary properties, so we need to add that manually
34+
const types = fs.readFileSync('types/index.d.ts', 'utf-8');
35+
fs.writeFileSync(
36+
'types/index.d.ts',
37+
// same line to not affect source map
38+
types.replace(/export class SvelteComponent<[^{]*{/, '$& [prop: string]: any;')
39+
);
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
declare module '*.svelte' {
2-
export { SvelteComponentDev as default } from 'svelte/internal';
2+
export { SvelteComponent as default } from 'svelte';
33
}

packages/svelte/src/runtime/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export {
2+
SvelteComponentDev as SvelteComponent,
23
onMount,
34
onDestroy,
45
beforeUpdate,
@@ -9,6 +10,5 @@ export {
910
hasContext,
1011
tick,
1112
createEventDispatcher,
12-
SvelteComponentDev as SvelteComponent,
1313
SvelteComponentTyped
1414
} from './internal/index.js';

packages/svelte/src/runtime/internal/Component.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,6 @@ export function create_custom_element(
424424
*
425425
* @template {Record<string, any>} [Props=any]
426426
* @template {Record<string, any>} [Events=any]
427-
* @implements Record<string, any>
428427
*/
429428
export class SvelteComponent {
430429
/**

packages/svelte/src/runtime/internal/dev.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ export function construct_svelte_component_dev(component, props) {
295295
* @template {Record<string, any>} [Props=any]
296296
* @template {Record<string, any>} [Events=any]
297297
* @template {Record<string, any>} [Slots=any]
298-
* @extends SvelteComponent<Props, Events>
298+
* @extends {SvelteComponent<Props, Events>}
299299
*/
300300
export class SvelteComponentDev extends SvelteComponent {
301301
/**
@@ -350,7 +350,7 @@ export class SvelteComponentDev extends SvelteComponent {
350350
* @template {Record<string, any>} [Events=any]
351351
* @template {Record<string, any>} [Slots=any]
352352
* @deprecated Use `SvelteComponent` instead. See PR for more information: https://github.com/sveltejs/svelte/pull/8512
353-
* @extends SvelteComponentDev<Props, Events, Slots>
353+
* @extends {SvelteComponentDev<Props, Events, Slots>}
354354
*/
355355
export class SvelteComponentTyped extends SvelteComponentDev {}
356356

packages/svelte/src/runtime/internal/public.d.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,5 +91,3 @@ export interface EventDispatcher<EventMap extends Record<string, any>> {
9191
: [type: Type, parameter: EventMap[Type], options?: DispatchOptions]
9292
): boolean;
9393
}
94-
95-
export * from './index.js';

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

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,27 @@
11
import './ambient.js';
22

3+
// Types written in this particular order to work around a dts-buddy bug where it doesn't handle the
4+
// SvelteComponentDev as SvelteComponent alias correctly.
5+
// If that's fixed, we can do export * from './index.js' instead.
6+
7+
export {
8+
SvelteComponent,
9+
SvelteComponentTyped,
10+
onMount,
11+
onDestroy,
12+
beforeUpdate,
13+
afterUpdate,
14+
setContext,
15+
getContext,
16+
getAllContexts,
17+
hasContext,
18+
tick,
19+
createEventDispatcher
20+
} from './index.js';
21+
322
export type {
423
ComponentConstructorOptions,
524
ComponentEvents,
625
ComponentProps,
726
ComponentType
827
} from './internal/public.js';
9-
10-
export * from './index.js';

packages/svelte/src/runtime/tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
"baseUrl": ".",
1111
"paths": {
12+
"svelte": ["."],
1213
"svelte/*": ["*"]
1314
},
1415
"allowJs": true,

0 commit comments

Comments
 (0)