Skip to content

Commit d4718e0

Browse files
authored
playground: better console (#11719)
* remove unused code * better console * simplify * simplify * fix * fix * fix * fix console.table * more table tweaks * improve table styles * tweaks * bump svelte-json-tree * tweak group styles * level -> command * remove stack from assertions * nicer style for duplicates * styles * tidy/simplify * tweaks * tweaks * tweaks * fixes * better stack traces (albeit not sourcemapped yet)
1 parent 4f9096a commit d4718e0

File tree

10 files changed

+524
-504
lines changed

10 files changed

+524
-504
lines changed

pnpm-lock.yaml

Lines changed: 86 additions & 84 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sites/svelte-5-preview/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
"esm-env": "^1.0.0",
5454
"marked": "^7.0.2",
5555
"resolve.exports": "^2.0.2",
56-
"svelte-json-tree": "^2.1.0",
56+
"svelte-json-tree": "^2.2.0",
5757
"zimmerframe": "^1.1.1"
5858
}
5959
}

sites/svelte-5-preview/src/lib/Output/ReplProxy.js

Lines changed: 21 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,35 @@
11
let uid = 1;
22

3-
const noop = () => {};
4-
53
export default class ReplProxy {
64
/** @type {HTMLIFrameElement} */
75
iframe;
86

97
/** @type {import("./proxy").Handlers} */
10-
handlers = {
11-
on_fetch_progress: noop,
12-
on_console: noop,
13-
on_error: noop,
14-
on_console_group: noop,
15-
on_console_group_collapsed: noop,
16-
on_console_group_end: noop,
17-
on_unhandled_rejection: noop
18-
};
8+
handlers;
199

2010
/** @type {Map<number, { resolve: (value: any) => void, reject: (value: any) => void }>} */
2111
pending_cmds = new Map();
2212

23-
/** @param {MessageEvent<any>} e */
24-
handle_event = (e) => this.handle_repl_message(e);
13+
/** @param {MessageEvent<any>} event */
14+
handle_event = (event) => {
15+
if (event.source !== this.iframe.contentWindow) return;
16+
17+
const { action, args } = event.data;
18+
19+
switch (action) {
20+
case 'cmd_error':
21+
case 'cmd_ok':
22+
return this.handle_command_message(event.data);
23+
case 'fetch_progress':
24+
return this.handlers.on_fetch_progress(args.remaining);
25+
case 'error':
26+
return this.handlers.on_error(event.data);
27+
case 'unhandledrejection':
28+
return this.handlers.on_unhandled_rejection(event.data);
29+
case 'console':
30+
return this.handlers.on_console(event.data);
31+
}
32+
};
2533

2634
/**
2735
* @param {HTMLIFrameElement} iframe
@@ -77,35 +85,6 @@ export default class ReplProxy {
7785
}
7886
}
7987

80-
/**
81-
* @param {MessageEvent<any>} event
82-
*/
83-
handle_repl_message(event) {
84-
if (event.source !== this.iframe.contentWindow) return;
85-
86-
const { action, args } = event.data;
87-
88-
switch (action) {
89-
case 'cmd_error':
90-
case 'cmd_ok':
91-
return this.handle_command_message(event.data);
92-
case 'fetch_progress':
93-
return this.handlers.on_fetch_progress(args.remaining);
94-
case 'error':
95-
return this.handlers.on_error(event.data);
96-
case 'unhandledrejection':
97-
return this.handlers.on_unhandled_rejection(event.data);
98-
case 'console':
99-
return this.handlers.on_console(event.data);
100-
case 'console_group':
101-
return this.handlers.on_console_group(event.data);
102-
case 'console_group_collapsed':
103-
return this.handlers.on_console_group_collapsed(event.data);
104-
case 'console_group_end':
105-
return this.handlers.on_console_group_end(event.data);
106-
}
107-
}
108-
10988
/** @param {string} script */
11089
eval(script) {
11190
return this.iframe_command('eval', { script });

sites/svelte-5-preview/src/lib/Output/Viewer.svelte

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -55,32 +55,36 @@
5555
pending_imports = progress;
5656
},
5757
on_error: (event) => {
58-
push_logs({ level: 'error', args: [event.value] });
58+
push_logs({ command: 'error', args: [event.value] });
5959
},
6060
on_unhandled_rejection: (event) => {
6161
let error = event.value;
6262
if (typeof error === 'string') error = { message: error };
6363
error.message = 'Uncaught (in promise): ' + error.message;
64-
push_logs({ level: 'error', args: [error] });
64+
push_logs({ command: 'error', args: [error] });
6565
},
6666
on_console: (log) => {
67-
if (log.level === 'clear') {
68-
clear_logs();
69-
push_logs(log);
70-
} else if (log.duplicate) {
71-
increment_duplicate_log();
72-
} else {
73-
push_logs(log);
67+
switch (log.command) {
68+
case 'clear':
69+
clear_logs();
70+
push_logs(log);
71+
break;
72+
73+
case 'group':
74+
group_logs(log);
75+
break;
76+
77+
case 'groupEnd':
78+
ungroup_logs();
79+
break;
80+
81+
case 'duplicate':
82+
increment_duplicate_log();
83+
break;
84+
85+
default:
86+
push_logs(log);
7487
}
75-
},
76-
on_console_group: (action) => {
77-
group_logs(action.label, false);
78-
},
79-
on_console_group_end: () => {
80-
ungroup_logs();
81-
},
82-
on_console_group_collapsed: (action) => {
83-
group_logs(action.label, true);
8488
}
8589
});
8690
@@ -202,17 +206,13 @@
202206
logs = logs;
203207
}
204208
205-
/**
206-
* @param {string} label
207-
* @param {boolean} collapsed
208-
*/
209-
function group_logs(label, collapsed) {
210-
/** @type {import('./console/console').Log} */
211-
const group_log = { level: 'group', label, collapsed, logs: [] };
212-
current_log_group.push({ level: 'group', label, collapsed, logs: [] });
209+
/** @param {import('./console/console').Log} log */
210+
function group_logs(log) {
211+
log.logs = [];
212+
current_log_group.push(log);
213213
// TODO: Investigate
214214
log_group_stack.push(current_log_group);
215-
current_log_group = group_log.logs ?? [];
215+
current_log_group = log.logs;
216216
logs = logs;
217217
}
218218
@@ -284,7 +284,7 @@
284284
</div>
285285
286286
<section slot="panel-body">
287-
<Console {logs} {theme} on:clear={clear_logs} />
287+
<Console {logs} />
288288
</section>
289289
</PaneWithPanel>
290290

sites/svelte-5-preview/src/lib/Output/console/Console.svelte

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,44 @@
33
44
/** @type {import('./console').Log[]} */
55
export let logs;
6-
7-
/** @type {'light' | 'dark'} */
8-
export let theme;
96
</script>
107

11-
<div class="container" class:dark={theme === 'dark'}>
8+
<div class="container">
129
{#each logs as log}
1310
<ConsoleLine {log} />
1411
{/each}
1512
</div>
1613

1714
<style>
1815
.container {
16+
--error-fg: #da106e;
17+
--error-bg: #fff0f0;
18+
--error-border: rgb(242, 214, 219);
19+
--warning-bg: rgb(254, 251, 218);
20+
--warning-border: rgb(242, 232, 163);
1921
--json-tree-string-color: var(--sk-code-string);
20-
}
21-
.dark {
22-
--json-tree-property-color: #72a2d3;
23-
--json-tree-string-color: #6cd1c7;
24-
--json-tree-symbol-color: #6cd1c7;
25-
--json-tree-boolean-color: #9681f7;
26-
--json-tree-function-color: #e59b6f;
27-
--json-tree-number-color: #9681f7;
28-
--json-tree-label-color: #9ca0a5;
29-
--json-tree-arrow-color: #e8eaed;
30-
--json-tree-null-color: #81868a;
31-
--json-tree-undefined-color: #81868a;
32-
--json-tree-date-color: #9ca0a5;
33-
--json-tree-operator-color: #e8eaed;
34-
--json-tree-regex-color: #6cd1c7;
22+
--json-tree-font-family: var(--sk-font-mono);
23+
24+
:global(.dark) & {
25+
--error-fg: rgb(235, 78, 109);
26+
--error-bg: rgb(71, 48, 54);
27+
--error-border: rgb(109, 65, 76);
28+
--warning-bg: rgb(64, 56, 34);
29+
--warning-border: rgb(86, 86, 51);
30+
31+
--json-tree-property-color: #72a2d3;
32+
--json-tree-string-color: #6cd1c7;
33+
--json-tree-symbol-color: #6cd1c7;
34+
--json-tree-boolean-color: #9681f7;
35+
--json-tree-function-color: #e59b6f;
36+
--json-tree-number-color: #9681f7;
37+
--json-tree-label-color: #9ca0a5;
38+
--json-tree-arrow-color: #e8eaed;
39+
--json-tree-null-color: #81868a;
40+
--json-tree-undefined-color: #81868a;
41+
--json-tree-date-color: #9ca0a5;
42+
--json-tree-operator-color: #e8eaed;
43+
--json-tree-regex-color: #6cd1c7;
44+
}
3545
}
3646
</style>

0 commit comments

Comments
 (0)