diff --git a/sites/svelte.dev/scripts/generate_examples.js b/sites/svelte.dev/scripts/generate_examples.js
index 3ae9904d1d..c9ff30e9a9 100644
--- a/sites/svelte.dev/scripts/generate_examples.js
+++ b/sites/svelte.dev/scripts/generate_examples.js
@@ -5,7 +5,9 @@ const examples_data = get_examples_data(
new URL('../../../site/content/examples', import.meta.url).pathname
);
+fs.mkdirSync(new URL('../src/lib/generated/', import.meta.url), { recursive: true });
+
fs.writeFileSync(
- new URL('../src/routes/(authed)/repl/[id].json/examples-data.js', import.meta.url),
+ new URL('../src/lib/generated/examples-data.js', import.meta.url),
`export default ${JSON.stringify(examples_data)}`
);
diff --git a/sites/svelte.dev/src/lib/components/ReplWidget.svelte b/sites/svelte.dev/src/lib/components/ReplWidget.svelte
index 7d64eadd6f..3bea26e503 100644
--- a/sites/svelte.dev/src/lib/components/ReplWidget.svelte
+++ b/sites/svelte.dev/src/lib/components/ReplWidget.svelte
@@ -2,21 +2,20 @@
import { browser } from '$app/environment';
import { process_example } from '$lib/utils/examples';
import Repl from '@sveltejs/repl';
- import { getContext, onMount } from 'svelte';
+ import { onMount } from 'svelte';
export let version = '3';
export let gist = null;
export let example = null;
export let embedded = false;
+ /** @type {import('@sveltejs/repl').default} */
let repl;
let name = 'loading...';
let mounted = false;
- const repl_widget_examples = getContext('repl_widget_examples');
-
- function load(gist, example) {
+ async function load(gist, example) {
if (version !== 'local') {
fetch(`https://unpkg.com/svelte@${version}/package.json`)
.then((r) => r.json())
@@ -60,7 +59,8 @@
});
} else if (example) {
const components = process_example(
- repl_widget_examples.find(({ id }) => id === example).files
+ // repl_widget_examples.find(({ id }) => id === example).files
+ (await fetch(`/examples/api/${example}.json`).then((r) => r.json())).files
);
repl.set({
diff --git a/sites/svelte.dev/src/routes/(authed)/repl/[id].json/+server.js b/sites/svelte.dev/src/routes/(authed)/repl/[id].json/+server.js
index 1fd0b5a984..3725391795 100644
--- a/sites/svelte.dev/src/routes/(authed)/repl/[id].json/+server.js
+++ b/sites/svelte.dev/src/routes/(authed)/repl/[id].json/+server.js
@@ -2,9 +2,9 @@ import { dev } from '$app/environment';
import { client } from '$lib/db/client';
import * as gist from '$lib/db/gist';
import { get_example } from '$lib/server/examples';
-import { get_examples_data, get_examples_list } from '$lib/server/examples/get-examples';
+import { get_examples_list } from '$lib/server/examples/get-examples';
import { error, json } from '@sveltejs/kit';
-import examples_data from './examples-data.js';
+import examples_data from '$lib/generated/examples-data.js';
export const prerender = 'auto';
diff --git a/sites/svelte.dev/src/routes/+page.server.js b/sites/svelte.dev/src/routes/+page.server.js
index e171f25a36..69bc35dac9 100644
--- a/sites/svelte.dev/src/routes/+page.server.js
+++ b/sites/svelte.dev/src/routes/+page.server.js
@@ -1,5 +1,5 @@
import { get_example } from '$lib/server/examples';
-import { get_examples_data, get_examples_list } from '$lib/server/examples/get-examples';
+import { get_examples_data } from '$lib/server/examples/get-examples';
export const prerender = true;
diff --git a/sites/svelte.dev/src/routes/+page.svelte b/sites/svelte.dev/src/routes/+page.svelte
index 15d5566104..295b543b15 100644
--- a/sites/svelte.dev/src/routes/+page.svelte
+++ b/sites/svelte.dev/src/routes/+page.svelte
@@ -1,16 +1,11 @@
diff --git a/sites/svelte.dev/src/routes/_components/Demo.svelte b/sites/svelte.dev/src/routes/_components/Demo.svelte
index a230e10aa0..d4b780d2d9 100644
--- a/sites/svelte.dev/src/routes/_components/Demo.svelte
+++ b/sites/svelte.dev/src/routes/_components/Demo.svelte
@@ -1,9 +1,32 @@
diff --git a/sites/svelte.dev/src/routes/examples/api/+server.js b/sites/svelte.dev/src/routes/examples/api/+server.js
new file mode 100644
index 0000000000..632c2c5dc4
--- /dev/null
+++ b/sites/svelte.dev/src/routes/examples/api/+server.js
@@ -0,0 +1,8 @@
+// @ts-check
+import examples_data from '$lib/generated/examples-data.js';
+import { get_examples_list } from '$lib/server/examples/get-examples';
+import { json } from '@sveltejs/kit';
+
+export const GET = () => {
+ return json(get_examples_list(examples_data));
+};
diff --git a/sites/svelte.dev/src/routes/examples/api/[slug].json/+server.js b/sites/svelte.dev/src/routes/examples/api/[slug].json/+server.js
new file mode 100644
index 0000000000..45594024bf
--- /dev/null
+++ b/sites/svelte.dev/src/routes/examples/api/[slug].json/+server.js
@@ -0,0 +1,17 @@
+import examples_data from '$lib/generated/examples-data.js';
+import { get_example } from '$lib/server/examples';
+import { get_examples_list } from '$lib/server/examples/get-examples';
+import { error, json } from '@sveltejs/kit';
+
+export const GET = ({ params }) => {
+ const examples = new Set(
+ get_examples_list(examples_data)
+ .map((category) => category.examples)
+ .flat()
+ .map((example) => example.slug)
+ );
+
+ if (!examples.has(params.slug)) throw error(404, 'Example not found');
+
+ return json(get_example(examples_data, params.slug));
+};