node 6 support

This commit is contained in:
Rich Harris
2018-09-30 12:54:50 -04:00
parent 5573258a10
commit 4f6efbda79
6 changed files with 44 additions and 33 deletions

View File

@@ -3,19 +3,16 @@ import * as path from 'path';
import mkdirp from 'mkdirp';
import rimraf from 'rimraf';
import { EventEmitter } from 'events';
import * as codec from 'sourcemap-codec';
import hash from 'string-hash';
import minify_html from './utils/minify_html';
import { create_compilers, create_main_manifests, create_manifest_data, create_serviceworker_manifest } from '../core';
import * as events from './interfaces';
import { copy_shimport } from './utils/copy_shimport';
import { Dirs, PageComponent } from '../interfaces';
import { CompileResult } from '../core/create_compilers/interfaces';
import { Dirs } from '../interfaces';
import read_template from '../core/read_template';
type Opts = {
legacy: boolean;
bundler: string;
bundler: 'rollup' | 'webpack';
};
export function build(opts: Opts, dirs: Dirs) {
@@ -58,7 +55,7 @@ async function execute(emitter: EventEmitter, opts: Opts, dirs: Dirs) {
// create src/manifest/client.js and src/manifest/server.js
create_main_manifests({ bundler: opts.bundler, manifest_data });
const { client, server, serviceworker } = await create_compilers(opts.bundler, dirs);
const { client, server, serviceworker } = await create_compilers(opts.bundler);
const client_result = await client.compile();
emitter.emit('build', <events.BuildEvent>{
@@ -71,7 +68,7 @@ async function execute(emitter: EventEmitter, opts: Opts, dirs: Dirs) {
if (opts.legacy) {
process.env.SAPPER_LEGACY_BUILD = 'true';
const { client } = await create_compilers(opts.bundler, dirs);
const { client } = await create_compilers(opts.bundler);
const client_result = await client.compile();

View File

@@ -202,10 +202,7 @@ function generate_server(
root,
error
};
// this is included for legacy reasons
export const routes = {};`.replace(/^\t\t/gm, '').trim();
};`.replace(/^\t\t/gm, '').trim();
return `// This file is generated by Sapper — do not edit it!\n` + template
.replace('__BUILD__DIR__', JSON.stringify(locations.dest()))

View File

@@ -93,7 +93,7 @@ export function scroll_state() {
};
}
export async function navigate(target: Target, id: number): Promise<any> {
export function navigate(target: Target, id: number): Promise<any> {
if (id) {
// popstate or initial navigation
cid = id;
@@ -117,14 +117,15 @@ export async function navigate(target: Target, id: number): Promise<any> {
prefetching = null;
const token = current_token = {};
const { redirect, data, nullable_depth } = await loaded;
if (redirect) {
await goto(redirect.location, { replaceState: true });
} else {
return loaded.then(({ redirect, data, nullable_depth }) => {
if (redirect) {
return goto(redirect.location, { replaceState: true });
}
render(data, nullable_depth, scroll_history[id], token);
if (document.activeElement) document.activeElement.blur();
}
});
}
function render(data: any, nullable_depth: number, scroll: ScrollPosition, token: {}) {
@@ -216,29 +217,43 @@ export function prepare_page(target: Target): Promise<{
: {};
}
return Promise.all(page.parts.map(async (part, i) => {
return Promise.all(page.parts.map((part, i) => {
if (i < changed_from) return null;
if (!part) return null;
const Component = await load_component(part.component);
return load_component(part.component).then(Component => {
const req = {
path,
query,
params: part.params ? part.params(target.match) : {}
};
const req = {
path,
query,
params: part.params ? part.params(target.match) : {}
};
let preloaded;
if (ready || !initial_data.preloaded[i + 1]) {
preloaded = Component.preload
? Component.preload.call(preload_context, req)
: {};
} else {
preloaded = initial_data.preloaded[i + 1];
}
const preloaded = ready || !initial_data.preloaded[i + 1]
? Component.preload ? await Component.preload.call(preload_context, req) : {}
: initial_data.preloaded[i + 1];
return { Component, preloaded };
return Promise.resolve(preloaded).then(preloaded => {
return { Component, preloaded };
});
});
})).catch(err => {
error = { statusCode: 500, message: err };
return [];
}).then(async results => {
if (!root_data) root_data = await root_preload;
}).then(results => {
if (root_data) {
return results;
} else {
return Promise.resolve(root_preload).then(value => {
root_data = value;
return results;
});
}
}).then(results => {
if (redirect) {
return { redirect };
}

View File

@@ -5,7 +5,7 @@ export default function goto(href: string, opts = { replaceState: false }) {
let promise;
if (target) {
promise = navigate(target, null);
promise = navigate(target, null).then(() => {});
if (history) history[opts.replaceState ? 'replaceState' : 'pushState']({ id: cid }, '', href);
} else {
window.location.href = href;

View File

@@ -3,6 +3,7 @@ import * as path from 'path';
import cookie from 'cookie';
import devalue from 'devalue';
import fetch from 'node-fetch';
import { URL } from 'url';
import { build_dir, dev, src_dir, IGNORE } from '../placeholders';
import { Manifest, Page, Props, Req, Res, Store } from './types';

View File

@@ -1,3 +1,4 @@
const path = require('path');
const webpack = require('webpack');
const config = require('../../config/webpack.js');
const sapper_pkg = require('../../package.json');