Update `plot-benchmarks` to use Svelte 5.0. Test: Ran the app locally. Change-Id: I7f0ed08b67bce54af608919cd621d7eef00e76bd
diff --git a/development/plot-benchmarks/src/lib/Chart.svelte b/development/plot-benchmarks/src/lib/Chart.svelte index edf6584..c1143bf 100644 --- a/development/plot-benchmarks/src/lib/Chart.svelte +++ b/development/plot-benchmarks/src/lib/Chart.svelte
@@ -15,13 +15,6 @@ export let isExperimental: boolean = false; export let showHistogramControls: boolean = false; - $: { - if ($chart) { - $chart.data = data; - $chart.update(); - } - } - // State let controlsDispatcher = createEventDispatcher<ControlsEvent>(); let element: HTMLCanvasElement; @@ -29,13 +22,20 @@ let chart: Writable<Chart | null> = writable(null); let items: Writable<LegendItem[] | null> = writable(null); + $: { + if ($chart) { + $chart.data = data; + $chart.update(); + } + } + // Effects onMount(() => { - const onUpdate = (chart: Chart) => { - $chart = chart; + const onUpdate = (updated: Chart) => { + $chart = updated; // Bad typings. - const legend = chart.options.plugins?.legend as any; - $items = legend.labels.generateLabels(chart); + const legend = updated.options.plugins?.legend as any; + $items = legend.labels.generateLabels($chart); }; const plugins = { tooltip: { @@ -103,7 +103,7 @@ ⎘ </button> </div> - <canvas class="chart" bind:this={element} /> + <canvas class="chart" bind:this={element}> </canvas> {#if showHistogramControls} <div class="controls"> <label for="buckets">
diff --git a/development/plot-benchmarks/src/lib/Legend.svelte b/development/plot-benchmarks/src/lib/Legend.svelte index 2795fb2..05edbf5 100644 --- a/development/plot-benchmarks/src/lib/Legend.svelte +++ b/development/plot-benchmarks/src/lib/Legend.svelte
@@ -4,7 +4,7 @@ export let items: LegendItem[]; const handlerFactory = (item: LegendItem) => { - return (event: Event) => { + return (_: Event) => { if (item.datasetIndex !== undefined) { // https://www.chartjs.org/docs/latest/samples/legend/html.html chart.setDatasetVisibility( @@ -29,7 +29,7 @@ <span class="box" style="background: {item.fillStyle}; border-color: {item.strokeStyle}; border-width: {item.lineWidth}px;" - /> + ></span> <span class="label" style="text-decoration: {item.hidden ? 'line-through' : ''};"
diff --git a/development/plot-benchmarks/src/lib/Session.svelte b/development/plot-benchmarks/src/lib/Session.svelte index 25576af..58524b5 100644 --- a/development/plot-benchmarks/src/lib/Session.svelte +++ b/development/plot-benchmarks/src/lib/Session.svelte
@@ -114,7 +114,7 @@ session = new Session(fileEntries); mapper = buildMapper($buckets); metrics = Transforms.buildMetrics(session, $suppressed, $suppressedMetrics); - showControls = metrics.sampled && metrics.sampled.length > 0; + showControls = Array.isArray(metrics.sampled) && metrics.sampled.length > 0; activeSeries = service.pSeries(metrics, $active); series = ChartDataTransforms.mapToSeries( metrics, @@ -145,16 +145,19 @@ } async function handleFileDragDrop(event: DragEvent) { - const items = [...event.dataTransfer.items]; + const items = [...event.dataTransfer?.items || []]; if (items) { let newFiles = await Promise.all( items .filter( - (item) => - item.kind === "file" && item.getAsFile().name.endsWith(".json") + (item) => { + const file = item.getAsFile() + return item.kind === "file" && file && file.name.endsWith(".json") + } ) .map(async (item) => { - const file = item.getAsFile(); + // At this point, we know the file had some JSON content. + const file = item.getAsFile()!!; const benchmarks = await readBenchmarks(file); const entry: FileMetadata = { enabled: true, @@ -230,7 +233,7 @@ {/if} {#await activeSeries} - <article aria-busy="true" /> + <article aria-busy="true"></article> {:then chartData} {#if chartData.length > 0} <Chart
diff --git a/development/plot-benchmarks/src/main.ts b/development/plot-benchmarks/src/main.ts index 93a3c3f..dbada9e 100644 --- a/development/plot-benchmarks/src/main.ts +++ b/development/plot-benchmarks/src/main.ts
@@ -1,8 +1,7 @@ +import { mount } from 'svelte'; import './assets/overrides.css'; import App from './lib/App.svelte'; -const app = new App({ - target: document.getElementById('app')!!, -}); +const app = mount(App, { target: document.getElementById("app")!! }); export default app;