Skip to content

Commit a6fac29

Browse files
authored
typecheck packages/repl (#44)
* fix some type errors * well that was broken * fixes * fix * fixes * fixes * fix * clean bill of health * fix
1 parent d6de67a commit a6fac29

File tree

14 files changed

+135
-133
lines changed

14 files changed

+135
-133
lines changed

packages/repl/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
"@sveltejs/adapter-auto": "^3.0.0",
4747
"@sveltejs/package": "^2.0.0",
4848
"@sveltejs/vite-plugin-svelte": "4.0.0-next.3",
49+
"@types/estree": "^1.0.5",
4950
"prettier": "^3.3.2",
5051
"prettier-plugin-svelte": "^3.2.4",
5152
"publint": "^0.1.9",

packages/repl/src/lib/Input/ModuleEditor.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
import { get_repl_context } from '$lib/context.js';
33
import CodeMirror from '../CodeMirror.svelte';
44
5-
/** @type {any} */ // TODO
5+
/** @type {import('svelte/compiler').CompileError} */
66
export let error;
77
8-
/** @type {any[]} */ // TODO
8+
/** @type {import('svelte/compiler').Warning[]} */
99
export let warnings;
1010
1111
/** @type {boolean} */

packages/repl/src/lib/Output/AstNode.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
import { tick } from 'svelte';
44
55
export let key = '';
6-
/** @type {import('svelte/types/compiler/interfaces').Ast} */
6+
/** @type {import('svelte/compiler').CompileResult['ast']} */
77
export let value;
88
export let collapsed = true;
9-
/** @type {import('svelte/types/compiler/interfaces').Ast[]} */
9+
/** @type {import('svelte/compiler').CompileResult['ast'][]} */
1010
export let path_nodes = [];
1111
export let autoscroll = true;
1212

packages/repl/src/lib/Output/AstView.svelte

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import AstNode from './AstNode.svelte';
44
import { cursorIndex } from '../CodeMirror.svelte';
55
6-
/** @type {import('svelte/types/compiler/interfaces').Ast} */
6+
/** @type {import('svelte/compiler').CompileResult['ast']} */
77
export let ast;
88
export let autoscroll = true;
99
@@ -15,8 +15,8 @@
1515
1616
/**
1717
* @param {number} cursor
18-
* @param {import('svelte/types/compiler/interfaces').Ast[]} paths
19-
* @returns {import('svelte/types/compiler/interfaces').Ast[] | undefined}
18+
* @param {import('svelte/compiler').CompileResult['ast'][]} paths
19+
* @returns {import('svelte/compiler').CompileResult['ast'][] | undefined}
2020
*/
2121
function find_deepest_path(cursor, paths) {
2222
const value = paths[paths.length - 1];
@@ -42,7 +42,7 @@
4242
}
4343
}
4444
45-
/** @param {import('svelte/types/compiler/interfaces').Ast} ast */
45+
/** @param {import('svelte/compiler').CompileResult['ast']} ast */
4646
function get_ast_max_end(ast) {
4747
let max_end = 0;
4848

packages/repl/src/lib/Output/Compiler.js

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ export default class Compiler {
2424
this.worker.addEventListener(
2525
'message',
2626
/**
27-
* @param {MessageEvent<import('$lib/workers/workers').CompileMessageData>} event
27+
* @param {MessageEvent<any>} event
2828
*/
2929
(event) => {
3030
const handler = this.handlers.get(event.data.id);
3131

3232
if (handler) {
3333
// if no handler, was meant for a different REPL
34-
handler(event.data);
34+
handler(event.data.result);
3535
this.handlers.delete(event.data.id);
3636
}
3737
}
@@ -42,7 +42,7 @@ export default class Compiler {
4242
* @param {import('$lib/types').File} file
4343
* @param {import('svelte/compiler').CompileOptions} options
4444
* @param {boolean} return_ast
45-
* @returns {Promise<import('$lib/workers/workers').CompileMessageData>}
45+
* @returns {Promise<import('$lib/workers/workers').CompilerOutput>}
4646
*/
4747
compile(file, options, return_ast) {
4848
return new Promise((fulfil) => {
@@ -53,23 +53,25 @@ export default class Compiler {
5353
this.worker.postMessage({
5454
id,
5555
type: 'compile',
56-
source: file.source,
57-
options: Object.assign(
58-
{
59-
name: file.name,
60-
filename: `${file.name}.${file.type}`
61-
},
62-
options
63-
),
64-
entry: file.name === 'App',
65-
return_ast
56+
payload: {
57+
source: file.source,
58+
options: Object.assign(
59+
{
60+
name: file.name,
61+
filename: `${file.name}.${file.type}`
62+
},
63+
options
64+
),
65+
entry: file.name === 'App',
66+
return_ast
67+
}
6668
});
6769
});
6870
}
6971

7072
/**
7173
* @param {import('$lib/types').File} file
72-
* @returns {Promise<import('$lib/workers/workers').MigrateMessageData>}
74+
* @returns {Promise<import('$lib/workers/workers').MigrateOutput>}
7375
*/
7476
migrate(file) {
7577
return new Promise((fulfil) => {
@@ -80,7 +82,9 @@ export default class Compiler {
8082
this.worker.postMessage({
8183
id,
8284
type: 'migrate',
83-
source: file.source
85+
payload: {
86+
source: file.source
87+
}
8488
});
8589
});
8690
}

packages/repl/src/lib/Output/Output.svelte

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,18 @@
3131
/** @type {import('../types').File | null} */
3232
export let selected;
3333
34-
/** @type {import('../workers/workers').CompileMessageData | null} */
34+
/** @type {import('../workers/workers').CompilerOutput | null} */
3535
export let compiled;
3636
3737
$: if (selected && js_editor && css_editor) {
3838
if (selected.type === 'json') {
3939
js_editor.set({ code: `/* Select a component to see its compiled code */`, lang: 'js' });
4040
css_editor.set({ code: `/* Select a component to see its compiled code */`, lang: 'css' });
4141
} else if (selected.type === 'md') {
42-
markdown = marked(selected.source);
42+
markdown = /** @type {string} */ (marked(selected.source));
4343
} else if (compiled) {
44-
js_editor.set({ code: compiled.result.js, lang: 'js' });
45-
css_editor.set({ code: compiled.result.css, lang: 'css' });
44+
js_editor.set({ code: compiled.js, lang: 'js' });
45+
css_editor.set({ code: compiled.css, lang: 'css' });
4646
}
4747
}
4848
@@ -58,7 +58,7 @@
5858
let view = 'result';
5959
let markdown = '';
6060
61-
$: ast = compiled?.result?.ast;
61+
$: ast = compiled?.ast;
6262
</script>
6363
6464
<div class="view-toggle">

packages/repl/src/lib/Output/PaneWithPanel.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
/** @type {string} */
88
export let panel;
99
10-
/** @type {Exclude<import('@rich_harris/svelte-split-pane/dist/SplitPane.svelte').SplitPaneProps['max'], undefined>} */
10+
/** @type {Exclude<import('svelte').ComponentProps<SplitPane>['pos'], undefined>} */
1111
export let pos = '90%';
1212
1313
$: previous_pos = Math.min(+pos.replace(UNIT_REGEX, '$1'), 70);
1414
15-
/** @type {Exclude<import('@rich_harris/svelte-split-pane/dist/SplitPane.svelte').SplitPaneProps['max'], undefined>} */
15+
/** @type {Exclude<import('svelte').ComponentProps<SplitPane>['max'], undefined>} */
1616
let max = '90%';
1717
1818
// we can't bind to the spring itself, but we

packages/repl/src/lib/Output/Viewer.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@
183183
}`;
184184
185185
/**
186-
* @param {import('$lib/types').Error & { loc: { line: number; column: number } }} e
186+
* @param {import('svelte/compiler').CompileError & { loc: { line: number; column: number } }} e
187187
*/
188188
function show_error(e) {
189189
const map = $bundle?.client?.map;

packages/repl/src/lib/Repl.svelte

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
export let previewTheme = 'light';
2828
export let showModified = false;
2929
export let showAst = false;
30-
export let autocomplete = true;
3130
/** @type {boolean} */
3231
export let vim;
3332
@@ -267,7 +266,7 @@
267266
268267
const compiler = BROWSER ? new Compiler(svelteUrl) : null;
269268
270-
/** @type {import('./workers/workers').CompileMessageData | null} */
269+
/** @type {import('./workers/workers').CompilerOutput | null} */
271270
let compiled = null;
272271
273272
/**
@@ -279,7 +278,7 @@
279278
280279
if ($selected.type === 'svelte' || $selected.type === 'js') {
281280
compiled = await compiler.compile($selected, $compile_options, true);
282-
runes = compiled.result.metadata?.runes ?? false;
281+
runes = compiled.metadata?.runes ?? false;
283282
} else {
284283
runes = false;
285284
}
@@ -350,12 +349,7 @@
350349
>
351350
<section slot="a">
352351
<ComponentSelector show_modified={showModified} {runes} on:add on:remove />
353-
<ModuleEditor
354-
{autocomplete}
355-
error={compiled?.result.error}
356-
warnings={compiled?.result.warnings ?? []}
357-
{vim}
358-
/>
352+
<ModuleEditor error={compiled?.error} warnings={compiled?.warnings ?? []} {vim} />
359353
</section>
360354
361355
<section slot="b" style="height: 100%;">

packages/repl/src/lib/workers/bundler/index.js

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,6 @@ const ready = new Promise((f) => {
2626
fulfil_ready = f;
2727
});
2828

29-
/**
30-
* @type {{
31-
* compile: typeof import('svelte/compiler').compile;
32-
* compileModule: typeof import('svelte/compiler').compileModule;
33-
* VERSION: string;
34-
* }}
35-
*/
36-
let svelte;
37-
3829
self.addEventListener(
3930
'message',
4031
/** @param {MessageEvent<import('../workers.js').BundleMessageData>} event */ async (event) => {
@@ -48,8 +39,6 @@ self.addEventListener(
4839
const compiler = await fetch(`${svelte_url}/compiler/index.js`).then((r) => r.text());
4940
(0, eval)(compiler + '\n//# sourceURL=compiler/index.js@' + version);
5041

51-
svelte = globalThis.svelte;
52-
5342
fulfil_ready();
5443
break;
5544
}
@@ -174,13 +163,12 @@ async function resolve_from_pkg(pkg, subpath, uid, pkg_url_base) {
174163
// modern
175164
if (pkg.exports) {
176165
try {
177-
const [resolved] =
178-
resolve.exports(pkg, subpath, {
179-
browser: true,
180-
conditions: ['svelte', 'development']
181-
}) ?? [];
166+
const resolved = resolve.exports(pkg, subpath, {
167+
browser: true,
168+
conditions: ['svelte', 'development']
169+
});
182170

183-
return resolved;
171+
return resolved?.[0];
184172
} catch {
185173
throw `no matched export path was found in "${pkg.name}/package.json"`;
186174
}
@@ -451,7 +439,9 @@ async function get_bundle(uid, mode, cache, local_files_lookup) {
451439
'process.env.NODE_ENV': JSON.stringify('production')
452440
})
453441
],
454-
inlineDynamicImports: true,
442+
output: {
443+
inlineDynamicImports: true
444+
},
455445
onwarn(warning) {
456446
all_warnings.push({
457447
message: warning.message

0 commit comments

Comments
 (0)