use serialized preloaded data

This commit is contained in:
Rich Harris
2018-07-16 14:27:13 -04:00
parent 8299c68678
commit 34cf953fde

View File

@@ -79,6 +79,8 @@ function render(data: any, scroll: ScrollPosition, token: {}) {
if (scroll) { if (scroll) {
window.scrollTo(scroll.x, scroll.y); window.scrollTo(scroll.x, scroll.y);
} }
ready = true;
} }
function prepare_page(target: Target): Promise<{ function prepare_page(target: Target): Promise<{
@@ -104,7 +106,7 @@ function prepare_page(target: Target): Promise<{
} }
}; };
return Promise.all(page.parts.map(async part => { return Promise.all(page.parts.map(async (part, i) => {
const { default: Component } = await part.component(); const { default: Component } = await part.component();
const req = { const req = {
path, path,
@@ -112,12 +114,11 @@ function prepare_page(target: Target): Promise<{
params: part.params ? part.params(target.match) : {} params: part.params ? part.params(target.match) : {}
}; };
return { const preloaded = ready || !initial_data.preloaded[i]
Component, ? Component.preload ? await Component.preload.call(preload_context, req) : {}
preloaded: Component.preload : initial_data.preloaded[i];
? await Component.preload.call(preload_context, req)
: {} return { Component, preloaded };
};
})).catch(err => { })).catch(err => {
error = { statusCode: 500, message: err }; error = { statusCode: 500, message: err };
return []; return [];
@@ -281,6 +282,7 @@ function trigger_prefetch(event: MouseEvent | TouchEvent) {
} }
let inited: boolean; let inited: boolean;
let ready = false;
export function init(opts: { App: ComponentConstructor, target: Node, routes: Routes, store?: (data: any) => Store }) { export function init(opts: { App: ComponentConstructor, target: Node, routes: Routes, store?: (data: any) => Store }) {
if (opts instanceof HTMLElement) { if (opts instanceof HTMLElement) {