From 01308c56993aeff41208d5f8625c9a2caf79dd73 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 29 Nov 2023 11:24:11 -0500 Subject: [PATCH] implement custom inspect functions --- .../svelte/src/internal/client/runtime.js | 24 +++++++------ .../svelte/src/internal/client/types.d.ts | 4 +-- .../{log-trace => inspect-trace}/_config.js | 3 +- .../{log-table => inspect-trace}/main.svelte | 4 ++- .../samples/{log => inspect}/_config.js | 0 .../samples/{log => inspect}/main.svelte | 2 +- .../samples/log-table/_config.js | 34 ------------------- .../samples/log-trace/main.svelte | 9 ----- 8 files changed, 20 insertions(+), 60 deletions(-) rename packages/svelte/tests/runtime-runes/samples/{log-trace => inspect-trace}/_config.js (83%) rename packages/svelte/tests/runtime-runes/samples/{log-table => inspect-trace}/main.svelte (64%) rename packages/svelte/tests/runtime-runes/samples/{log => inspect}/_config.js (100%) rename packages/svelte/tests/runtime-runes/samples/{log => inspect}/main.svelte (91%) delete mode 100644 packages/svelte/tests/runtime-runes/samples/log-table/_config.js delete mode 100644 packages/svelte/tests/runtime-runes/samples/log-trace/main.svelte diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index da969581bb..e2f61acd49 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -166,8 +166,8 @@ function create_source_signal(flags, value) { v: value, // context: We can remove this if we get rid of beforeUpdate/afterUpdate x: null, - // debug: this is for DEV only - d: new Set() + // this is for DEV only + inspect: new Set() }; } return { @@ -778,9 +778,9 @@ export function exposable(fn) { */ export function get(signal) { // @ts-expect-error - if (DEV && signal.d && inspect_fn) { + if (DEV && signal.inspect && inspect_fn) { // @ts-expect-error - signal.d.add(inspect_fn); + signal.inspect.add(inspect_fn); // @ts-expect-error inspect_captured_signals.push(signal); } @@ -990,12 +990,6 @@ function mark_signal_consumers(signal, to_status, force_schedule) { * @returns {void} */ export function set_signal_value(signal, value) { - // @ts-expect-error - if (DEV && signal.d) { - // @ts-expect-error - for (const fn of signal.d) fn(); - } - if ( !current_untracking && !ignore_mutation_validation && @@ -1052,6 +1046,12 @@ export function set_signal_value(signal, value) { } } } + + // @ts-expect-error + if (DEV && signal.inspect) { + // @ts-expect-error + for (const fn of signal.inspect) fn(); + } } /** @@ -1802,6 +1802,8 @@ export function inspect(get_values) { pre_effect(() => { const fn = () => { + const values = get_values(); + if (typeof values.at(-1) === 'function') { const inspect = /** @type {Function} */ (values[values.length - 1]); inspect(!initial, ...values.slice(0, -1)); @@ -1825,7 +1827,7 @@ export function inspect(get_values) { return () => { for (const s of signals) { - s.d.delete(fn); + s.inspect.delete(fn); } }; }); diff --git a/packages/svelte/src/internal/client/types.d.ts b/packages/svelte/src/internal/client/types.d.ts index 7ec22354b3..ee7bc6eea1 100644 --- a/packages/svelte/src/internal/client/types.d.ts +++ b/packages/svelte/src/internal/client/types.d.ts @@ -81,8 +81,8 @@ export type SourceSignal = { }; export type SourceSignalDebug = { - /** debug: This is DEV only */ - d: Set; + /** This is DEV only */ + inspect: Set; }; export type ComputationSignal = { diff --git a/packages/svelte/tests/runtime-runes/samples/log-trace/_config.js b/packages/svelte/tests/runtime-runes/samples/inspect-trace/_config.js similarity index 83% rename from packages/svelte/tests/runtime-runes/samples/log-trace/_config.js rename to packages/svelte/tests/runtime-runes/samples/inspect-trace/_config.js index 76253e474b..943b829895 100644 --- a/packages/svelte/tests/runtime-runes/samples/log-trace/_config.js +++ b/packages/svelte/tests/runtime-runes/samples/inspect-trace/_config.js @@ -32,8 +32,7 @@ export default test({ await Promise.resolve(); assert.ok( - log[0].stack.startsWith('ExpectedError: $log.trace') && - log[0].stack.includes('HTMLButtonElement.on_click') + log[0].stack.startsWith('Error:') && log[0].stack.includes('HTMLButtonElement.on_click') ); assert.deepEqual(log[1], 1); } diff --git a/packages/svelte/tests/runtime-runes/samples/log-table/main.svelte b/packages/svelte/tests/runtime-runes/samples/inspect-trace/main.svelte similarity index 64% rename from packages/svelte/tests/runtime-runes/samples/log-table/main.svelte rename to packages/svelte/tests/runtime-runes/samples/inspect-trace/main.svelte index 616eb79216..4af402b298 100644 --- a/packages/svelte/tests/runtime-runes/samples/log-table/main.svelte +++ b/packages/svelte/tests/runtime-runes/samples/inspect-trace/main.svelte @@ -2,7 +2,9 @@ let x = $state(0); let y = $state(0); - $log.table(x); + $inspect(x, (changed, x) => { + if (changed) console.log(new Error(), x); + }); diff --git a/packages/svelte/tests/runtime-runes/samples/log/_config.js b/packages/svelte/tests/runtime-runes/samples/inspect/_config.js similarity index 100% rename from packages/svelte/tests/runtime-runes/samples/log/_config.js rename to packages/svelte/tests/runtime-runes/samples/inspect/_config.js diff --git a/packages/svelte/tests/runtime-runes/samples/log/main.svelte b/packages/svelte/tests/runtime-runes/samples/inspect/main.svelte similarity index 91% rename from packages/svelte/tests/runtime-runes/samples/log/main.svelte rename to packages/svelte/tests/runtime-runes/samples/inspect/main.svelte index 395b71730a..739e3f8a29 100644 --- a/packages/svelte/tests/runtime-runes/samples/log/main.svelte +++ b/packages/svelte/tests/runtime-runes/samples/inspect/main.svelte @@ -2,7 +2,7 @@ let x = $state(0); let y = $state(0); - $log(x); + $inspect(x); diff --git a/packages/svelte/tests/runtime-runes/samples/log-table/_config.js b/packages/svelte/tests/runtime-runes/samples/log-table/_config.js deleted file mode 100644 index f49f87d38b..0000000000 --- a/packages/svelte/tests/runtime-runes/samples/log-table/_config.js +++ /dev/null @@ -1,34 +0,0 @@ -import { test } from '../../test'; - -/** - * @type {any[]} - */ -let log; -/** - * @type {typeof console.log}} - */ -let original_log; - -export default test({ - compileOptions: { - dev: true - }, - before_test() { - log = []; - original_log = console.table; - console.log = (...v) => { - log.push(...v); - }; - }, - after_test() { - console.table = original_log; - }, - async test({ assert, target, component }) { - const [b1, b2] = target.querySelectorAll('button'); - b1.click(); - b2.click(); - await Promise.resolve(); - - assert.deepEqual(log, [0, 1]); - } -}); diff --git a/packages/svelte/tests/runtime-runes/samples/log-trace/main.svelte b/packages/svelte/tests/runtime-runes/samples/log-trace/main.svelte deleted file mode 100644 index 652ba16758..0000000000 --- a/packages/svelte/tests/runtime-runes/samples/log-trace/main.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - - -