diff --git a/examples/dynamic-imports/dist/index.html b/examples/dynamic-imports/dist/index.html
new file mode 100755
index 0000000..6424790
--- /dev/null
+++ b/examples/dynamic-imports/dist/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ svelte-spa-router sample
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/dynamic-imports/rollup.config.js b/examples/dynamic-imports/rollup.config.js
new file mode 100755
index 0000000..742d141
--- /dev/null
+++ b/examples/dynamic-imports/rollup.config.js
@@ -0,0 +1,33 @@
+import svelte from 'rollup-plugin-svelte'
+import resolve from '@rollup/plugin-node-resolve'
+import commonjs from '@rollup/plugin-commonjs'
+
+export default {
+ input: 'src/main.js',
+ output: {
+ sourcemap: true,
+ name: 'app',
+ format: 'esm',
+ dir: 'dist/',
+ chunkFileNames: '[name].js'
+ },
+ plugins: [
+ svelte({
+ // enable run-time checks when not in production
+ dev: true,
+ // we'll extract any component CSS out into
+ // a separate file better for performance
+ css: css => {
+ css.write('bundle.css')
+ }
+ }),
+
+ // If you have external dependencies installed from
+ // npm, you'll most likely need these plugins. In
+ // some cases you'll need additional configuration
+ // consult the documentation for details:
+ // https://github.com/rollup/rollup-plugin-commonjs
+ resolve(),
+ commonjs()
+ ]
+}
diff --git a/examples/dynamic-imports/src/App.svelte b/examples/dynamic-imports/src/App.svelte
new file mode 100644
index 0000000..3684362
--- /dev/null
+++ b/examples/dynamic-imports/src/App.svelte
@@ -0,0 +1,22 @@
+svelte-spa-router sample
+Dynamic imports
+
+
+
+
+
+
+
+
diff --git a/examples/dynamic-imports/src/main.js b/examples/dynamic-imports/src/main.js
new file mode 100644
index 0000000..57f6eca
--- /dev/null
+++ b/examples/dynamic-imports/src/main.js
@@ -0,0 +1,7 @@
+// Initialize the Svelte app and inject it in the DOM
+import App from './App.svelte'
+const app = new App({
+ target: document.body
+})
+
+export default app
diff --git a/examples/dynamic-imports/src/routes.js b/examples/dynamic-imports/src/routes.js
new file mode 100644
index 0000000..95a68fe
--- /dev/null
+++ b/examples/dynamic-imports/src/routes.js
@@ -0,0 +1,55 @@
+/* eslint-disable */
+
+// Import the wrap method
+// Normally, this would be: `import {wrap} from 'svelte-spa-router/wrap'`
+import {wrap} from '../../../wrap'
+
+// Components: only Home, Loading and NotFound are statically included in the bundle
+import Home from './routes/Home.svelte'
+import Loading from './routes/Loading.svelte'
+import NotFound from './routes/NotFound.svelte'
+
+// Export the route definition object
+export default {
+ // Exact path
+ '/': Home,
+
+ // Using named parameters, with last being optional
+ // This is dynamically imported, so the code is loaded on-demand from the server
+ '/hello/:first/:last?': wrap({
+ // Note that this is a function that returns the import
+ asyncRoute: () => import('./routes/Name.svelte'),
+ // Show the loading component while the route is being downloaded
+ loadingRoute: Loading,
+ // Pass values for the `params` prop of the loading route
+ loadingParams: {
+ message: 'Loading the Name route…'
+ }
+ }),
+
+ // Wildcard parameter
+ // This matches `/wild/*` (with anything after), but NOT `/wild` (with nothing after)
+ // This is dynamically imported too
+ '/wild/*': wrap({
+ // Note that this is a function that returns the import
+ // We're adding an artificial delay of 5 seconds so you can experience the loading even on localhost
+ // Note that normally the modules loaded with `import()` are cached, so the delay exists only on the first request.
+ // In this case, we're adding a delay every time the route is loaded
+ asyncRoute: () => import('./routes/Wild.svelte')
+ .then((component) => {
+ return new Promise((resolve) => {
+ // Wait 5 seconds before returning
+ setTimeout(() => resolve(component), 5000)
+ })
+ }),
+ // Show the loading component while the route is being downloaded
+ loadingRoute: Loading,
+ // Pass values for the `params` prop of the loading route
+ loadingParams: {
+ message: 'Loading the Wild route…'
+ }
+ }),
+
+ // Catch-all, must be last
+ '*': NotFound,
+}
diff --git a/examples/dynamic-imports/src/routes/Home.svelte b/examples/dynamic-imports/src/routes/Home.svelte
new file mode 100644
index 0000000..4ca9488
--- /dev/null
+++ b/examples/dynamic-imports/src/routes/Home.svelte
@@ -0,0 +1,10 @@
+Home component
+
+
+ This sample shows how to dynamically import components. These are modules imported on-demand with the import()
method.
+ Bundlers like Rollup and Webpack support automatic code splitting when you use dynamic imports, so after compiling this sample, in the dist/
folder you'll see a bunch of different JavaScript files. At runtime, the browser requests them only when you first navigate to the route (and then they're cached).
+
+
+This is the Home component, which contains markup only.
+
+Hint: Try navigating with the links below, then use your browser's back and forward buttons.
diff --git a/examples/dynamic-imports/src/routes/Loading.svelte b/examples/dynamic-imports/src/routes/Loading.svelte
new file mode 100644
index 0000000..b659593
--- /dev/null
+++ b/examples/dynamic-imports/src/routes/Loading.svelte
@@ -0,0 +1,9 @@
+Loading…
+
+We're loading the route!
+Here's your message: {params && params.message}
+
+
diff --git a/examples/dynamic-imports/src/routes/Name.svelte b/examples/dynamic-imports/src/routes/Name.svelte
new file mode 100644
index 0000000..5707e05
--- /dev/null
+++ b/examples/dynamic-imports/src/routes/Name.svelte
@@ -0,0 +1,14 @@
+Hi there!
+
+
+ Your name is:
+ {params.first}
+ {#if params.last}{params.last}{/if}
+
+This comes from the URL, matching /hello/:first/:last?
, where the last name is optional.
+Hint: Try changing the URL and add your name, e.g. /hello/alex
or /hello/jane/doe
+
+
diff --git a/examples/dynamic-imports/src/routes/NotFound.svelte b/examples/dynamic-imports/src/routes/NotFound.svelte
new file mode 100644
index 0000000..f8b69bd
--- /dev/null
+++ b/examples/dynamic-imports/src/routes/NotFound.svelte
@@ -0,0 +1,3 @@
+NotFound
+
+Oops, this route doesn't exist!
diff --git a/examples/dynamic-imports/src/routes/Wild.svelte b/examples/dynamic-imports/src/routes/Wild.svelte
new file mode 100644
index 0000000..bdbff6f
--- /dev/null
+++ b/examples/dynamic-imports/src/routes/Wild.svelte
@@ -0,0 +1,12 @@
+Wildcard
+
+Anything in the URL after /wild/
is shown below as message. That's found in the params.wild
prop.
+
+Your message is: {params.wild}
+
+Note that this route was artificially delayed for 5 seconds to let us see the Loading
component even when the network is fast (such as testing on localhost).
+
+