fix: less confusing names for inspect errors (#17026)

* fix: less confusing names for inspect errors

* fix

* Update packages/svelte/src/internal/client/dev/inspect.js

* fix
pull/17029/head
Rich Harris 2 days ago committed by GitHub
parent b7f39b464a
commit d8137b78a5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,5 @@
---
'svelte': patch
---
fix: less confusing names for inspect errors

@ -33,8 +33,17 @@ export function inspect(get_value, inspector, show_stack = false) {
inspector(...snap); inspector(...snap);
if (!initial) { if (!initial) {
const stack = get_stack('$inspect(...)');
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
console.log(get_stack('UpdatedAt'));
if (stack) {
// eslint-disable-next-line no-console
console.groupCollapsed('stack trace');
// eslint-disable-next-line no-console
console.log(stack);
// eslint-disable-next-line no-console
console.groupEnd();
}
} }
} else { } else {
inspector(initial ? 'init' : 'update', ...snap); inspector(initial ? 'init' : 'update', ...snap);

@ -179,8 +179,7 @@ export function get_stack(label) {
}); });
define_property(error, 'name', { define_property(error, 'name', {
// 'Error' suffix is required for stack traces to be rendered properly value: label
value: `${label}Error`
}); });
return /** @type {Error & { stack: string }} */ (error); return /** @type {Error & { stack: string }} */ (error);

@ -53,7 +53,7 @@ export function proxy(value) {
var is_proxied_array = is_array(value); var is_proxied_array = is_array(value);
var version = source(0); var version = source(0);
var stack = DEV && tracing_mode_flag ? get_stack('CreatedAt') : null; var stack = DEV && tracing_mode_flag ? get_stack('created at') : null;
var parent_version = update_version; var parent_version = update_version;
/** /**

@ -86,7 +86,7 @@ export function derived(fn) {
}; };
if (DEV && tracing_mode_flag) { if (DEV && tracing_mode_flag) {
signal.created = get_stack('CreatedAt'); signal.created = get_stack('created at');
} }
return signal; return signal;

@ -76,7 +76,7 @@ export function source(v, stack) {
}; };
if (DEV && tracing_mode_flag) { if (DEV && tracing_mode_flag) {
signal.created = stack ?? get_stack('CreatedAt'); signal.created = stack ?? get_stack('created at');
signal.updated = null; signal.updated = null;
signal.set_during_effect = false; signal.set_during_effect = false;
signal.trace = null; signal.trace = null;
@ -186,7 +186,7 @@ export function internal_set(source, value) {
if (DEV) { if (DEV) {
if (tracing_mode_flag || active_effect !== null) { if (tracing_mode_flag || active_effect !== null) {
const error = get_stack('UpdatedAt'); const error = get_stack('updated at');
if (error !== null) { if (error !== null) {
source.updated ??= new Map(); source.updated ??= new Map();

@ -609,7 +609,7 @@ export function get(signal) {
if (!tracking && !untracking && !was_read) { if (!tracking && !untracking && !was_read) {
w.await_reactivity_loss(/** @type {string} */ (signal.label)); w.await_reactivity_loss(/** @type {string} */ (signal.label));
var trace = get_stack('TracedAt'); var trace = get_stack('traced at');
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
if (trace) console.warn(trace); if (trace) console.warn(trace);
} }
@ -628,7 +628,7 @@ export function get(signal) {
if (signal.trace) { if (signal.trace) {
signal.trace(); signal.trace();
} else { } else {
trace = get_stack('TracedAt'); trace = get_stack('traced at');
if (trace) { if (trace) {
var entry = tracing_expressions.entries.get(signal); var entry = tracing_expressions.entries.get(signal);

@ -201,7 +201,15 @@ export const async_mode = process.env.SVELTE_NO_ASYNC !== 'true';
* @param {any[]} logs * @param {any[]} logs
*/ */
export function normalise_inspect_logs(logs) { export function normalise_inspect_logs(logs) {
return logs.map((log) => { /** @type {string[]} */
const normalised = [];
for (const log of logs) {
if (log === 'stack trace') {
// ignore `console.group('stack trace')` in default `$inspect(...)` output
continue;
}
if (log instanceof Error) { if (log instanceof Error) {
const last_line = log.stack const last_line = log.stack
?.trim() ?.trim()
@ -210,11 +218,13 @@ export function normalise_inspect_logs(logs) {
const match = last_line && /(at .+) /.exec(last_line); const match = last_line && /(at .+) /.exec(last_line);
return match && match[1]; if (match) normalised.push(match[1]);
} else {
normalised.push(log);
} }
}
return log; return normalised;
});
} }
/** /**

@ -17,7 +17,7 @@ export default test({
'Detected reactivity loss when reading `values[1]`. This happens when state is read in an async function after an earlier `await`' 'Detected reactivity loss when reading `values[1]`. This happens when state is read in an async function after an earlier `await`'
); );
assert.equal(warnings[1].name, 'TracedAtError'); assert.equal(warnings[1].name, 'traced at');
assert.equal(warnings.length, 2); assert.equal(warnings.length, 2);
} }

@ -20,7 +20,7 @@ export default test({
'Detected reactivity loss when reading `b`. This happens when state is read in an async function after an earlier `await`' 'Detected reactivity loss when reading `b`. This happens when state is read in an async function after an earlier `await`'
); );
assert.equal(warnings[1].name, 'TracedAtError'); assert.equal(warnings[1].name, 'traced at');
assert.equal(warnings.length, 2); assert.equal(warnings.length, 2);
} }

@ -14,7 +14,7 @@ export default test({
try { try {
flushSync(() => button.click()); flushSync(() => button.click());
} catch (e) { } catch (e) {
assert.equal(errors.length, 1); // for whatever reason we can't get the name which should be UpdatedAtError assert.equal(errors.length, 1); // for whatever reason we can't get the name which should be 'updated at'
assert.ok(/** @type {Error} */ (e).message.startsWith('effect_update_depth_exceeded')); assert.ok(/** @type {Error} */ (e).message.startsWith('effect_update_depth_exceeded'));
} }
} }

Loading…
Cancel
Save