mirror of
https://github.com/kevin-DL/sapper.git
synced 2026-01-15 12:24:47 +00:00
node 6 support
This commit is contained in:
@@ -3,19 +3,16 @@ import * as path from 'path';
|
|||||||
import mkdirp from 'mkdirp';
|
import mkdirp from 'mkdirp';
|
||||||
import rimraf from 'rimraf';
|
import rimraf from 'rimraf';
|
||||||
import { EventEmitter } from 'events';
|
import { EventEmitter } from 'events';
|
||||||
import * as codec from 'sourcemap-codec';
|
|
||||||
import hash from 'string-hash';
|
|
||||||
import minify_html from './utils/minify_html';
|
import minify_html from './utils/minify_html';
|
||||||
import { create_compilers, create_main_manifests, create_manifest_data, create_serviceworker_manifest } from '../core';
|
import { create_compilers, create_main_manifests, create_manifest_data, create_serviceworker_manifest } from '../core';
|
||||||
import * as events from './interfaces';
|
import * as events from './interfaces';
|
||||||
import { copy_shimport } from './utils/copy_shimport';
|
import { copy_shimport } from './utils/copy_shimport';
|
||||||
import { Dirs, PageComponent } from '../interfaces';
|
import { Dirs } from '../interfaces';
|
||||||
import { CompileResult } from '../core/create_compilers/interfaces';
|
|
||||||
import read_template from '../core/read_template';
|
import read_template from '../core/read_template';
|
||||||
|
|
||||||
type Opts = {
|
type Opts = {
|
||||||
legacy: boolean;
|
legacy: boolean;
|
||||||
bundler: string;
|
bundler: 'rollup' | 'webpack';
|
||||||
};
|
};
|
||||||
|
|
||||||
export function build(opts: Opts, dirs: Dirs) {
|
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 src/manifest/client.js and src/manifest/server.js
|
||||||
create_main_manifests({ bundler: opts.bundler, manifest_data });
|
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();
|
const client_result = await client.compile();
|
||||||
emitter.emit('build', <events.BuildEvent>{
|
emitter.emit('build', <events.BuildEvent>{
|
||||||
@@ -71,7 +68,7 @@ async function execute(emitter: EventEmitter, opts: Opts, dirs: Dirs) {
|
|||||||
|
|
||||||
if (opts.legacy) {
|
if (opts.legacy) {
|
||||||
process.env.SAPPER_LEGACY_BUILD = 'true';
|
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();
|
const client_result = await client.compile();
|
||||||
|
|
||||||
|
|||||||
@@ -202,10 +202,7 @@ function generate_server(
|
|||||||
root,
|
root,
|
||||||
|
|
||||||
error
|
error
|
||||||
};
|
};`.replace(/^\t\t/gm, '').trim();
|
||||||
|
|
||||||
// this is included for legacy reasons
|
|
||||||
export const routes = {};`.replace(/^\t\t/gm, '').trim();
|
|
||||||
|
|
||||||
return `// This file is generated by Sapper — do not edit it!\n` + template
|
return `// This file is generated by Sapper — do not edit it!\n` + template
|
||||||
.replace('__BUILD__DIR__', JSON.stringify(locations.dest()))
|
.replace('__BUILD__DIR__', JSON.stringify(locations.dest()))
|
||||||
|
|||||||
@@ -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) {
|
if (id) {
|
||||||
// popstate or initial navigation
|
// popstate or initial navigation
|
||||||
cid = id;
|
cid = id;
|
||||||
@@ -117,14 +117,15 @@ export async function navigate(target: Target, id: number): Promise<any> {
|
|||||||
prefetching = null;
|
prefetching = null;
|
||||||
|
|
||||||
const token = current_token = {};
|
const token = current_token = {};
|
||||||
const { redirect, data, nullable_depth } = await loaded;
|
|
||||||
|
|
||||||
if (redirect) {
|
return loaded.then(({ redirect, data, nullable_depth }) => {
|
||||||
await goto(redirect.location, { replaceState: true });
|
if (redirect) {
|
||||||
} else {
|
return goto(redirect.location, { replaceState: true });
|
||||||
|
}
|
||||||
|
|
||||||
render(data, nullable_depth, scroll_history[id], token);
|
render(data, nullable_depth, scroll_history[id], token);
|
||||||
if (document.activeElement) document.activeElement.blur();
|
if (document.activeElement) document.activeElement.blur();
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function render(data: any, nullable_depth: number, scroll: ScrollPosition, token: {}) {
|
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 (i < changed_from) return null;
|
||||||
if (!part) 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 = {
|
let preloaded;
|
||||||
path,
|
if (ready || !initial_data.preloaded[i + 1]) {
|
||||||
query,
|
preloaded = Component.preload
|
||||||
params: part.params ? part.params(target.match) : {}
|
? Component.preload.call(preload_context, req)
|
||||||
};
|
: {};
|
||||||
|
} else {
|
||||||
|
preloaded = initial_data.preloaded[i + 1];
|
||||||
|
}
|
||||||
|
|
||||||
const preloaded = ready || !initial_data.preloaded[i + 1]
|
return Promise.resolve(preloaded).then(preloaded => {
|
||||||
? Component.preload ? await Component.preload.call(preload_context, req) : {}
|
return { Component, preloaded };
|
||||||
: initial_data.preloaded[i + 1];
|
});
|
||||||
|
});
|
||||||
return { Component, preloaded };
|
|
||||||
})).catch(err => {
|
})).catch(err => {
|
||||||
error = { statusCode: 500, message: err };
|
error = { statusCode: 500, message: err };
|
||||||
return [];
|
return [];
|
||||||
}).then(async results => {
|
}).then(results => {
|
||||||
if (!root_data) root_data = await root_preload;
|
if (root_data) {
|
||||||
|
return results;
|
||||||
|
} else {
|
||||||
|
return Promise.resolve(root_preload).then(value => {
|
||||||
|
root_data = value;
|
||||||
|
return results;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).then(results => {
|
||||||
if (redirect) {
|
if (redirect) {
|
||||||
return { redirect };
|
return { redirect };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ export default function goto(href: string, opts = { replaceState: false }) {
|
|||||||
let promise;
|
let promise;
|
||||||
|
|
||||||
if (target) {
|
if (target) {
|
||||||
promise = navigate(target, null);
|
promise = navigate(target, null).then(() => {});
|
||||||
if (history) history[opts.replaceState ? 'replaceState' : 'pushState']({ id: cid }, '', href);
|
if (history) history[opts.replaceState ? 'replaceState' : 'pushState']({ id: cid }, '', href);
|
||||||
} else {
|
} else {
|
||||||
window.location.href = href;
|
window.location.href = href;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import * as path from 'path';
|
|||||||
import cookie from 'cookie';
|
import cookie from 'cookie';
|
||||||
import devalue from 'devalue';
|
import devalue from 'devalue';
|
||||||
import fetch from 'node-fetch';
|
import fetch from 'node-fetch';
|
||||||
|
import { URL } from 'url';
|
||||||
import { build_dir, dev, src_dir, IGNORE } from '../placeholders';
|
import { build_dir, dev, src_dir, IGNORE } from '../placeholders';
|
||||||
import { Manifest, Page, Props, Req, Res, Store } from './types';
|
import { Manifest, Page, Props, Req, Res, Store } from './types';
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
const path = require('path');
|
||||||
const webpack = require('webpack');
|
const webpack = require('webpack');
|
||||||
const config = require('../../config/webpack.js');
|
const config = require('../../config/webpack.js');
|
||||||
const sapper_pkg = require('../../package.json');
|
const sapper_pkg = require('../../package.json');
|
||||||
|
|||||||
Reference in New Issue
Block a user