update folder structure (#432)

This commit is contained in:
Rich Harris
2018-09-19 12:02:11 -04:00
parent f29e7efbd6
commit 8f064fe5ac
59 changed files with 680 additions and 27 deletions

View File

@@ -39,9 +39,9 @@ async function execute(emitter: EventEmitter, opts: Opts, dirs: Dirs) {
mkdirp.sync(`${dirs.dest}/client`);
copy_shimport(dirs.dest);
// minify app/template.html
// minify src/template.html
// TODO compile this to a function? could be quicker than str.replace(...).replace(...).replace(...)
const template = fs.readFileSync(`${dirs.app}/template.html`, 'utf-8');
const template = fs.readFileSync(`${dirs.src}/template.html`, 'utf-8');
// remove this in a future version
if (template.indexOf('%sapper.base%') === -1) {
@@ -54,7 +54,7 @@ async function execute(emitter: EventEmitter, opts: Opts, dirs: Dirs) {
const manifest_data = create_manifest_data();
// create app/manifest/client.js and app/manifest/server.js
// create src/manifest/client.js and src/manifest/server.js
create_main_manifests({ bundler: opts.bundler, manifest_data });
const { client, server, serviceworker } = create_compilers(opts.bundler, dirs);
@@ -79,7 +79,7 @@ async function execute(emitter: EventEmitter, opts: Opts, dirs: Dirs) {
// TODO duration/warnings
result: client_result
});
client_result.to_json(manifest_data, dirs);
build_info.legacy_assets = client_result.assets;
delete process.env.SAPPER_LEGACY_BUILD;

View File

@@ -23,7 +23,7 @@ export function dev(opts) {
class Watcher extends EventEmitter {
bundler: string;
dirs: {
app: string;
src: string;
dest: string;
routes: string;
rollup: string;
@@ -53,7 +53,7 @@ class Watcher extends EventEmitter {
}
constructor({
app = locations.app(),
src = locations.src(),
dest = locations.dest(),
routes = locations.routes(),
'dev-port': dev_port,
@@ -65,7 +65,7 @@ class Watcher extends EventEmitter {
rollup = 'rollup',
port = +process.env.PORT
}: {
app: string,
src: string,
dest: string,
routes: string,
'dev-port': number,
@@ -80,7 +80,7 @@ class Watcher extends EventEmitter {
super();
this.bundler = validate_bundler(bundler);
this.dirs = { app, dest, routes, webpack, rollup };
this.dirs = { src, dest, routes, webpack, rollup };
this.port = port;
this.closed = false;
@@ -100,7 +100,7 @@ class Watcher extends EventEmitter {
};
// remove this in a future version
const template = fs.readFileSync(path.join(app, 'template.html'), 'utf-8');
const template = fs.readFileSync(path.join(src, 'template.html'), 'utf-8');
if (template.indexOf('%sapper.base%') === -1) {
const error = new Error(`As of Sapper v0.10, your template.html file must include %sapper.base% in the <head>`);
error.code = `missing-sapper-base`;
@@ -175,7 +175,7 @@ class Watcher extends EventEmitter {
}
),
fs.watch(`${locations.app()}/template.html`, () => {
fs.watch(`${locations.src()}/template.html`, () => {
this.dev_server.send({
action: 'reload'
});

View File

@@ -13,6 +13,7 @@ import * as events from './interfaces';
type Opts = {
build: string,
dest: string,
static: string,
basepath?: string,
timeout: number | false
};
@@ -46,7 +47,7 @@ async function execute(emitter: EventEmitter, opts: Opts) {
// Prep output directory
sander.rimrafSync(export_dir);
sander.copydirSync('assets').to(export_dir);
sander.copydirSync(opts.static).to(export_dir);
sander.copydirSync(opts.build, 'client').to(export_dir, 'client');
if (sander.existsSync(opts.build, 'service-worker.js')) {

View File

@@ -18,7 +18,7 @@ export function build(opts: { bundler?: string, legacy?: boolean }) {
bundler
}, {
dest: locations.dest(),
app: locations.app(),
src: locations.src(),
routes: locations.routes(),
webpack: 'webpack',
rollup: 'rollup'

View File

@@ -15,6 +15,7 @@ export function exporter(export_dir: string, {
try {
const emitter = _exporter({
build: locations.dest(),
static: locations.static(),
dest: export_dir,
basepath,
timeout

View File

@@ -4,7 +4,8 @@ export const dev = () => process.env.NODE_ENV !== 'production';
export const locations = {
base: () => path.resolve(process.env.SAPPER_BASE || ''),
app: () => path.resolve(process.env.SAPPER_BASE || '', process.env.SAPPER_APP || 'app'),
routes: () => path.resolve(process.env.SAPPER_BASE || '', process.env.SAPPER_ROUTES || 'routes'),
src: () => path.resolve(process.env.SAPPER_BASE || '', process.env.SAPPER_SRC || 'src'),
static: () => path.resolve(process.env.SAPPER_BASE || '', process.env.SAPPER_STATIC || 'static'),
routes: () => path.resolve(process.env.SAPPER_BASE || '', process.env.SAPPER_ROUTES || 'src/routes'),
dest: () => path.resolve(process.env.SAPPER_BASE || '', process.env.SAPPER_DEST || `.sapper/${dev() ? 'dev' : 'prod'}`)
};

View File

@@ -10,7 +10,7 @@ export function create_main_manifests({ bundler, manifest_data, dev_port }: {
manifest_data: ManifestData;
dev_port?: number;
}) {
const manifest_dir = path.join(locations.app(), 'manifest');
const manifest_dir = path.join(locations.src(), 'manifest');
if (!fs.existsSync(manifest_dir)) fs.mkdirSync(manifest_dir);
const path_to_routes = path.relative(manifest_dir, locations.routes());
@@ -30,20 +30,21 @@ export function create_serviceworker_manifest({ manifest_data, client_files }: {
manifest_data: ManifestData;
client_files: string[];
}) {
const assets = glob('**', { cwd: 'assets', filesOnly: true });
const files = glob('**', { cwd: locations.static(), filesOnly: true });
let code = `
// This file is generated by Sapper — do not edit it!
export const timestamp = ${Date.now()};
export const assets = [\n\t${assets.map((x: string) => `"${x}"`).join(',\n\t')}\n];
export const files = [\n\t${files.map((x: string) => `"${x}"`).join(',\n\t')}\n];
export { files as assets }; // legacy
export const shell = [\n\t${client_files.map((x: string) => `"${x}"`).join(',\n\t')}\n];
export const routes = [\n\t${manifest_data.pages.map((r: Page) => `{ pattern: ${r.pattern} }`).join(',\n\t')}\n];
`.replace(/^\t\t/gm, '').trim();
write_if_changed(`${locations.app()}/manifest/service-worker.js`, code);
write_if_changed(`${locations.src()}/manifest/service-worker.js`, code);
}
function generate_client(

View File

@@ -43,7 +43,7 @@ export type ServerRoute = {
export type Dirs = {
dest: string,
app: string,
src: string,
routes: string,
webpack: string,
rollup: string

View File

@@ -288,7 +288,7 @@ function get_page_handler(
: (assets => () => assets)(JSON.parse(fs.readFileSync(path.join(output, 'build.json'), 'utf-8')));
const template = dev()
? () => fs.readFileSync(`${locations.app()}/template.html`, 'utf-8')
? () => fs.readFileSync(`${locations.src()}/template.html`, 'utf-8')
: (str => () => str)(fs.readFileSync(`${locations.dest()}/template.html`, 'utf-8'));
const { server_routes, pages } = manifest;

View File

@@ -5,7 +5,7 @@ export default {
client: {
input: () => {
return `${locations.app()}/client.js`
return `${locations.src()}/client.js`
},
output: () => {
@@ -24,7 +24,7 @@ export default {
server: {
input: () => {
return `${locations.app()}/server.js`
return `${locations.src()}/server.js`
},
output: () => {
@@ -38,7 +38,7 @@ export default {
serviceworker: {
input: () => {
return `${locations.app()}/service-worker.js`;
return `${locations.src()}/service-worker.js`;
},
output: () => {

View File

@@ -6,7 +6,7 @@ export default {
client: {
entry: () => {
return {
main: `${locations.app()}/client`
main: `${locations.src()}/client`
};
},
@@ -23,7 +23,7 @@ export default {
server: {
entry: () => {
return {
server: `${locations.app()}/server`
server: `${locations.src()}/server`
};
},
@@ -40,7 +40,7 @@ export default {
serviceworker: {
entry: () => {
return {
'service-worker': `${locations.app()}/service-worker`
'service-worker': `${locations.src()}/service-worker`
};
},

View File

@@ -0,0 +1,299 @@
// This file is generated by Sapper — do not edit it!
import root from '../routes/_layout.html';
import error from '../routes/_error.html';
const d = decodeURIComponent;
const index = {
js: () => import(/* webpackChunkName: "index" */ '../routes/index.html'),
css: "__SAPPER_CSS_PLACEHOLDER:index.html__"
};
const non$45sapper$45redirect$45to = {
js: () => import(/* webpackChunkName: "non$45sapper$45redirect$45to" */ '../routes/non-sapper-redirect-to.html'),
css: "__SAPPER_CSS_PLACEHOLDER:non-sapper-redirect-to.html__"
};
const unsafe$45replacement = {
js: () => import(/* webpackChunkName: "unsafe$45replacement" */ '../routes/unsafe-replacement.html'),
css: "__SAPPER_CSS_PLACEHOLDER:unsafe-replacement.html__"
};
const preload$45values = {
js: () => import(/* webpackChunkName: "preload$45values" */ '../routes/preload-values/index.html'),
css: "__SAPPER_CSS_PLACEHOLDER:preload-values/index.html__"
};
const preload$45values_custom$45class = {
js: () => import(/* webpackChunkName: "preload$45values_custom$45class" */ '../routes/preload-values/custom-class.html'),
css: "__SAPPER_CSS_PLACEHOLDER:preload-values/custom-class.html__"
};
const preload$45values_set = {
js: () => import(/* webpackChunkName: "preload$45values_set" */ '../routes/preload-values/set.html'),
css: "__SAPPER_CSS_PLACEHOLDER:preload-values/set.html__"
};
const missing$45index_ok = {
js: () => import(/* webpackChunkName: "missing$45index_ok" */ '../routes/missing-index/ok.html'),
css: "__SAPPER_CSS_PLACEHOLDER:missing-index/ok.html__"
};
const redirect$45from = {
js: () => import(/* webpackChunkName: "redirect$45from" */ '../routes/redirect-from.html'),
css: "__SAPPER_CSS_PLACEHOLDER:redirect-from.html__"
};
const redirect$45root = {
js: () => import(/* webpackChunkName: "redirect$45root" */ '../routes/redirect-root.html'),
css: "__SAPPER_CSS_PLACEHOLDER:redirect-root.html__"
};
const preload$45root = {
js: () => import(/* webpackChunkName: "preload$45root" */ '../routes/preload-root/index.html'),
css: "__SAPPER_CSS_PLACEHOLDER:preload-root/index.html__"
};
const slow$45preload = {
js: () => import(/* webpackChunkName: "slow$45preload" */ '../routes/slow-preload.html'),
css: "__SAPPER_CSS_PLACEHOLDER:slow-preload.html__"
};
const credentials = {
js: () => import(/* webpackChunkName: "credentials" */ '../routes/credentials/index.html'),
css: "__SAPPER_CSS_PLACEHOLDER:credentials/index.html__"
};
const delete$45test = {
js: () => import(/* webpackChunkName: "delete$45test" */ '../routes/delete-test.html'),
css: "__SAPPER_CSS_PLACEHOLDER:delete-test.html__"
};
const redirect$45to = {
js: () => import(/* webpackChunkName: "redirect$45to" */ '../routes/redirect-to.html'),
css: "__SAPPER_CSS_PLACEHOLDER:redirect-to.html__"
};
const about = {
js: () => import(/* webpackChunkName: "about" */ '../routes/about.html'),
css: "__SAPPER_CSS_PLACEHOLDER:about.html__"
};
const const_ = {
js: () => import(/* webpackChunkName: "const_" */ '../routes/const.html'),
css: "__SAPPER_CSS_PLACEHOLDER:const.html__"
};
const f$252nke = {
js: () => import(/* webpackChunkName: "f$252nke" */ '../routes/fünke.html'),
css: "__SAPPER_CSS_PLACEHOLDER:fünke.html__"
};
const store = {
js: () => import(/* webpackChunkName: "store" */ '../routes/store.html'),
css: "__SAPPER_CSS_PLACEHOLDER:store.html__"
};
const blog = {
js: () => import(/* webpackChunkName: "blog" */ '../routes/blog/index.html'),
css: "__SAPPER_CSS_PLACEHOLDER:blog/index.html__"
};
const blog_$slug = {
js: () => import(/* webpackChunkName: "blog_$slug" */ '../routes/blog/[slug].html'),
css: "__SAPPER_CSS_PLACEHOLDER:blog/[slug].html__"
};
const echo_page_$slug = {
js: () => import(/* webpackChunkName: "echo_page_$slug" */ '../routes/echo/page/[slug].html'),
css: "__SAPPER_CSS_PLACEHOLDER:echo/page/[slug].html__"
};
const $x$93_$91y__layout = {
js: () => import(/* webpackChunkName: "$x$93_$91y__layout" */ '../routes/[x]/[y]/_layout.html'),
css: "__SAPPER_CSS_PLACEHOLDER:[x]/[y]/_layout.html__"
};
const $x$93_$91y$93_$91z = {
js: () => import(/* webpackChunkName: "$x$93_$91y$93_$91z" */ '../routes/[x]/[y]/[z].html'),
css: "__SAPPER_CSS_PLACEHOLDER:[x]/[y]/[z].html__"
};
export const manifest = {
ignore: [/^\/throw-an-error$/, /^\/credentials\/test.json$/, /^\/f%C3%BCnke.json$/, /^\/blog.json$/, /^\/blog\/([^\/]+?).json$/, /^\/echo\/server-route\/([^\/]+?)$/, /^\/api\/delete\/([^\/]+?)$/],
pages: [
{
// index.html
pattern: /^\/?$/,
parts: [
{ component: index }
]
},
{
// non-sapper-redirect-to.html
pattern: /^\/non-sapper-redirect-to\/?$/,
parts: [
{ component: non$45sapper$45redirect$45to }
]
},
{
// unsafe-replacement.html
pattern: /^\/unsafe-replacement\/?$/,
parts: [
{ component: unsafe$45replacement }
]
},
{
// preload-values/index.html
pattern: /^\/preload-values\/?$/,
parts: [
null,
{ component: preload$45values }
]
},
{
// preload-values/custom-class.html
pattern: /^\/preload-values\/custom-class\/?$/,
parts: [
null,
{ component: preload$45values_custom$45class }
]
},
{
// preload-values/set.html
pattern: /^\/preload-values\/set\/?$/,
parts: [
null,
{ component: preload$45values_set }
]
},
{
// missing-index/ok.html
pattern: /^\/missing-index\/ok\/?$/,
parts: [
null,
{ component: missing$45index_ok }
]
},
{
// redirect-from.html
pattern: /^\/redirect-from\/?$/,
parts: [
{ component: redirect$45from }
]
},
{
// redirect-root.html
pattern: /^\/redirect-root\/?$/,
parts: [
{ component: redirect$45root }
]
},
{
// preload-root/index.html
pattern: /^\/preload-root\/?$/,
parts: [
null,
{ component: preload$45root }
]
},
{
// slow-preload.html
pattern: /^\/slow-preload\/?$/,
parts: [
{ component: slow$45preload }
]
},
{
// credentials/index.html
pattern: /^\/credentials\/?$/,
parts: [
null,
{ component: credentials }
]
},
{
// delete-test.html
pattern: /^\/delete-test\/?$/,
parts: [
{ component: delete$45test }
]
},
{
// redirect-to.html
pattern: /^\/redirect-to\/?$/,
parts: [
{ component: redirect$45to }
]
},
{
// about.html
pattern: /^\/about\/?$/,
parts: [
{ component: about }
]
},
{
// const.html
pattern: /^\/const\/?$/,
parts: [
{ component: const_ }
]
},
{
// fünke.html
pattern: /^\/f%C3%BCnke\/?$/,
parts: [
{ component: f$252nke }
]
},
{
// store.html
pattern: /^\/store\/?$/,
parts: [
{ component: store }
]
},
{
// blog/index.html
pattern: /^\/blog\/?$/,
parts: [
null,
{ component: blog }
]
},
{
// blog/[slug].html
pattern: /^\/blog\/([^\/]+?)\/?$/,
parts: [
null,
{ component: blog_$slug, params: match => ({ slug: d(match[1]) }) }
]
},
{
// echo/page/[slug].html
pattern: /^\/echo\/page\/([^\/]+?)\/?$/,
parts: [
null,
null,
{ component: echo_page_$slug, params: match => ({ slug: d(match[1]) }) }
]
},
{
// [x]/[y]/[z].html
pattern: /^\/([^\/]+?)\/([^\/]+?)\/([^\/]+?)\/?$/,
parts: [
null,
{ component: $x$93_$91y__layout, params: match => ({ x: d(match[1]), y: d(match[2]) }) },
{ component: $x$93_$91y$93_$91z, params: match => ({ x: d(match[1]), y: d(match[2]), z: d(match[3]) }) }
]
}
],
root,
error
};
// this is included for legacy reasons
export const routes = {};

View File

@@ -0,0 +1,285 @@
// This file is generated by Sapper — do not edit it!
import * as route_throw$45an$45error from '../routes/throw-an-error.js';
import * as route_credentials_test_json from '../routes/credentials/test.json.js';
import * as route_f$252nke_json from '../routes/fünke.json.js';
import * as route_blog_json from '../routes/blog/index.json.js';
import * as route_blog_$slug_json from '../routes/blog/[slug].json.js';
import * as route_echo_server$45route_$slug from '../routes/echo/server-route/[slug].js';
import * as route_api_delete_$id from '../routes/api/delete/[id].js';
import index from '../routes/index.html';
import non$45sapper$45redirect$45to from '../routes/non-sapper-redirect-to.html';
import unsafe$45replacement from '../routes/unsafe-replacement.html';
import preload$45values from '../routes/preload-values/index.html';
import preload$45values_custom$45class from '../routes/preload-values/custom-class.html';
import preload$45values_set from '../routes/preload-values/set.html';
import missing$45index_ok from '../routes/missing-index/ok.html';
import redirect$45from from '../routes/redirect-from.html';
import redirect$45root from '../routes/redirect-root.html';
import preload$45root from '../routes/preload-root/index.html';
import slow$45preload from '../routes/slow-preload.html';
import credentials from '../routes/credentials/index.html';
import delete$45test from '../routes/delete-test.html';
import redirect$45to from '../routes/redirect-to.html';
import about from '../routes/about.html';
import const_ from '../routes/const.html';
import f$252nke from '../routes/fünke.html';
import store from '../routes/store.html';
import blog from '../routes/blog/index.html';
import blog_$slug from '../routes/blog/[slug].html';
import echo_page_$slug from '../routes/echo/page/[slug].html';
import $x$93_$91y__layout from '../routes/[x]/[y]/_layout.html';
import $x$93_$91y$93_$91z from '../routes/[x]/[y]/[z].html';
import root from '../routes/_layout.html';
import error from '../routes/_error.html';
const d = decodeURIComponent;
export const manifest = {
server_routes: [
{
// throw-an-error.js
pattern: /^\/throw-an-error$/,
handlers: route_throw$45an$45error,
params: () => ({})
},
{
// credentials/test.json.js
pattern: /^\/credentials\/test.json$/,
handlers: route_credentials_test_json,
params: () => ({})
},
{
// fünke.json.js
pattern: /^\/f%C3%BCnke.json$/,
handlers: route_f$252nke_json,
params: () => ({})
},
{
// blog/index.json.js
pattern: /^\/blog.json$/,
handlers: route_blog_json,
params: () => ({})
},
{
// blog/[slug].json.js
pattern: /^\/blog\/([^\/]+?).json$/,
handlers: route_blog_$slug_json,
params: match => ({ slug: d(match[1]) })
},
{
// echo/server-route/[slug].js
pattern: /^\/echo\/server-route\/([^\/]+?)$/,
handlers: route_echo_server$45route_$slug,
params: match => ({ slug: d(match[1]) })
},
{
// api/delete/[id].js
pattern: /^\/api\/delete\/([^\/]+?)$/,
handlers: route_api_delete_$id,
params: match => ({ id: d(match[1]) })
}
],
pages: [
{
// index.html
pattern: /^\/?$/,
parts: [
{ name: "index", file: "index.html", component: index }
]
},
{
// non-sapper-redirect-to.html
pattern: /^\/non-sapper-redirect-to\/?$/,
parts: [
{ name: "non$45sapper$45redirect$45to", file: "non-sapper-redirect-to.html", component: non$45sapper$45redirect$45to }
]
},
{
// unsafe-replacement.html
pattern: /^\/unsafe-replacement\/?$/,
parts: [
{ name: "unsafe$45replacement", file: "unsafe-replacement.html", component: unsafe$45replacement }
]
},
{
// preload-values/index.html
pattern: /^\/preload-values\/?$/,
parts: [
null,
{ name: "preload$45values", file: "preload-values/index.html", component: preload$45values }
]
},
{
// preload-values/custom-class.html
pattern: /^\/preload-values\/custom-class\/?$/,
parts: [
null,
{ name: "preload$45values_custom$45class", file: "preload-values/custom-class.html", component: preload$45values_custom$45class }
]
},
{
// preload-values/set.html
pattern: /^\/preload-values\/set\/?$/,
parts: [
null,
{ name: "preload$45values_set", file: "preload-values/set.html", component: preload$45values_set }
]
},
{
// missing-index/ok.html
pattern: /^\/missing-index\/ok\/?$/,
parts: [
null,
{ name: "missing$45index_ok", file: "missing-index/ok.html", component: missing$45index_ok }
]
},
{
// redirect-from.html
pattern: /^\/redirect-from\/?$/,
parts: [
{ name: "redirect$45from", file: "redirect-from.html", component: redirect$45from }
]
},
{
// redirect-root.html
pattern: /^\/redirect-root\/?$/,
parts: [
{ name: "redirect$45root", file: "redirect-root.html", component: redirect$45root }
]
},
{
// preload-root/index.html
pattern: /^\/preload-root\/?$/,
parts: [
null,
{ name: "preload$45root", file: "preload-root/index.html", component: preload$45root }
]
},
{
// slow-preload.html
pattern: /^\/slow-preload\/?$/,
parts: [
{ name: "slow$45preload", file: "slow-preload.html", component: slow$45preload }
]
},
{
// credentials/index.html
pattern: /^\/credentials\/?$/,
parts: [
null,
{ name: "credentials", file: "credentials/index.html", component: credentials }
]
},
{
// delete-test.html
pattern: /^\/delete-test\/?$/,
parts: [
{ name: "delete$45test", file: "delete-test.html", component: delete$45test }
]
},
{
// redirect-to.html
pattern: /^\/redirect-to\/?$/,
parts: [
{ name: "redirect$45to", file: "redirect-to.html", component: redirect$45to }
]
},
{
// about.html
pattern: /^\/about\/?$/,
parts: [
{ name: "about", file: "about.html", component: about }
]
},
{
// const.html
pattern: /^\/const\/?$/,
parts: [
{ name: "const_", file: "const.html", component: const_ }
]
},
{
// fünke.html
pattern: /^\/f%C3%BCnke\/?$/,
parts: [
{ name: "f$252nke", file: "fünke.html", component: f$252nke }
]
},
{
// store.html
pattern: /^\/store\/?$/,
parts: [
{ name: "store", file: "store.html", component: store }
]
},
{
// blog/index.html
pattern: /^\/blog\/?$/,
parts: [
null,
{ name: "blog", file: "blog/index.html", component: blog }
]
},
{
// blog/[slug].html
pattern: /^\/blog\/([^\/]+?)\/?$/,
parts: [
null,
{ name: "blog_$slug", file: "blog/[slug].html", component: blog_$slug, params: match => ({ slug: d(match[1]) }) }
]
},
{
// echo/page/[slug].html
pattern: /^\/echo\/page\/([^\/]+?)\/?$/,
parts: [
null,
null,
{ name: "echo_page_$slug", file: "echo/page/[slug].html", component: echo_page_$slug, params: match => ({ slug: d(match[1]) }) }
]
},
{
// [x]/[y]/[z].html
pattern: /^\/([^\/]+?)\/([^\/]+?)\/([^\/]+?)\/?$/,
parts: [
null,
{ name: "$x$93_$91y__layout", file: "[x]/[y]/_layout.html", component: $x$93_$91y__layout, params: match => ({ x: d(match[1]), y: d(match[2]) }) },
{ name: "$x$93_$91y$93_$91z", file: "[x]/[y]/[z].html", component: $x$93_$91y$93_$91z, params: match => ({ x: d(match[1]), y: d(match[2]), z: d(match[3]) }) }
]
}
],
root,
error
};
// this is included for legacy reasons
export const routes = {};

View File

@@ -0,0 +1,64 @@
// This file is generated by Sapper — do not edit it!
export const timestamp = 1537372892007;
export const files = [
"favicon.png",
"global.css",
"great-success.png",
"manifest.json",
"svelte-logo-192.png",
"svelte-logo-512.png"
];
export { files as assets }; // legacy
export const shell = [
"client/1b495d0233ee9a023603/credentials.12.js",
"client/1b495d0233ee9a023603/main.js",
"client/1b495d0233ee9a023603/non$45sapper$45redirect$45to.2.js",
"client/1b495d0233ee9a023603/unsafe$45replacement.3.js",
"client/1b495d0233ee9a023603/preload$45values.4.js",
"client/1b495d0233ee9a023603/preload$45values_custom$45class.5.js",
"client/1b495d0233ee9a023603/preload$45values_set.6.js",
"client/1b495d0233ee9a023603/missing$45index_ok.7.js",
"client/1b495d0233ee9a023603/redirect$45from.8.js",
"client/1b495d0233ee9a023603/redirect$45root.9.js",
"client/1b495d0233ee9a023603/preload$45root.10.js",
"client/1b495d0233ee9a023603/slow$45preload.11.js",
"client/1b495d0233ee9a023603/index.1.js",
"client/1b495d0233ee9a023603/delete$45test.13.js",
"client/1b495d0233ee9a023603/redirect$45to.14.js",
"client/1b495d0233ee9a023603/about.15.js",
"client/1b495d0233ee9a023603/const_.16.js",
"client/1b495d0233ee9a023603/f$252nke.17.js",
"client/1b495d0233ee9a023603/store.18.js",
"client/1b495d0233ee9a023603/blog.19.js",
"client/1b495d0233ee9a023603/blog_$slug.20.js",
"client/1b495d0233ee9a023603/echo_page_$slug.21.js",
"client/1b495d0233ee9a023603/$x$93_$91y__layout.22.js",
"client/1b495d0233ee9a023603/$x$93_$91y$93_$91z.23.js"
];
export const routes = [
{ pattern: /^\/?$/ },
{ pattern: /^\/non-sapper-redirect-to\/?$/ },
{ pattern: /^\/unsafe-replacement\/?$/ },
{ pattern: /^\/preload-values\/?$/ },
{ pattern: /^\/preload-values\/custom-class\/?$/ },
{ pattern: /^\/preload-values\/set\/?$/ },
{ pattern: /^\/missing-index\/ok\/?$/ },
{ pattern: /^\/redirect-from\/?$/ },
{ pattern: /^\/redirect-root\/?$/ },
{ pattern: /^\/preload-root\/?$/ },
{ pattern: /^\/slow-preload\/?$/ },
{ pattern: /^\/credentials\/?$/ },
{ pattern: /^\/delete-test\/?$/ },
{ pattern: /^\/redirect-to\/?$/ },
{ pattern: /^\/about\/?$/ },
{ pattern: /^\/const\/?$/ },
{ pattern: /^\/f%C3%BCnke\/?$/ },
{ pattern: /^\/store\/?$/ },
{ pattern: /^\/blog\/?$/ },
{ pattern: /^\/blog\/([^\/]+?)\/?$/ },
{ pattern: /^\/echo\/page\/([^\/]+?)\/?$/ },
{ pattern: /^\/([^\/]+?)\/([^\/]+?)\/([^\/]+?)\/?$/ }
];

View File

@@ -9,7 +9,7 @@
<button class='prefetch' on:click='prefetch("blog/why-the-name")'>Why the name?</button>
<script>
import { goto, prefetch } from '../../../runtime.js';
import { goto, prefetch } from '../../../../runtime.js';
export default {
oncreate() {

View File

@@ -0,0 +1 @@
<svelte:component this={child.component} {...child.props}/>

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB