mirror of
https://github.com/kevin-DL/sapper.git
synced 2026-01-20 14:25:07 +00:00
@@ -1,2 +0,0 @@
|
|||||||
// TODO write to this file, instead of middleware.ts.js
|
|
||||||
module.exports = require('./dist/middleware.ts.js');
|
|
||||||
@@ -3,8 +3,8 @@ import * as path from 'path';
|
|||||||
import * as clorox from 'clorox';
|
import * as clorox from 'clorox';
|
||||||
import mkdirp from 'mkdirp';
|
import mkdirp from 'mkdirp';
|
||||||
import rimraf from 'rimraf';
|
import rimraf from 'rimraf';
|
||||||
import { create_compilers, create_app, create_routes, create_serviceworker } from '../core'
|
import { create_compilers, create_main_manifests, create_routes, create_serviceworker_manifest } from '../core'
|
||||||
import { src, dest, dev } from '../config';
|
import { dest } from '../config';
|
||||||
|
|
||||||
export async function build() {
|
export async function build() {
|
||||||
const output = dest();
|
const output = dest();
|
||||||
@@ -15,7 +15,7 @@ export async function build() {
|
|||||||
const routes = create_routes();
|
const routes = create_routes();
|
||||||
|
|
||||||
// create app/manifest/client.js and app/manifest/server.js
|
// create app/manifest/client.js and app/manifest/server.js
|
||||||
create_app({ routes, src, dev });
|
create_main_manifests({ routes });
|
||||||
|
|
||||||
const { client, server, serviceworker } = create_compilers();
|
const { client, server, serviceworker } = create_compilers();
|
||||||
|
|
||||||
@@ -31,10 +31,9 @@ export async function build() {
|
|||||||
let serviceworker_stats;
|
let serviceworker_stats;
|
||||||
|
|
||||||
if (serviceworker) {
|
if (serviceworker) {
|
||||||
create_serviceworker({
|
create_serviceworker_manifest({
|
||||||
routes,
|
routes,
|
||||||
client_files: client_stats.toJson().assets.map((chunk: { name: string }) => `/client/${chunk.name}`),
|
client_files: client_stats.toJson().assets.map((chunk: { name: string }) => `/client/${chunk.name}`)
|
||||||
src
|
|
||||||
});
|
});
|
||||||
|
|
||||||
serviceworker_stats = await compile(serviceworker);
|
serviceworker_stats = await compile(serviceworker);
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import format_messages from 'webpack-format-messages';
|
|||||||
import prettyMs from 'pretty-ms';
|
import prettyMs from 'pretty-ms';
|
||||||
import * as ports from 'port-authority';
|
import * as ports from 'port-authority';
|
||||||
import { dest } from '../config';
|
import { dest } from '../config';
|
||||||
import { create_compilers, create_app, create_routes, create_serviceworker } from '../core';
|
import { create_compilers, create_main_manifests, create_routes, create_serviceworker_manifest } from '../core';
|
||||||
|
|
||||||
type Deferred = {
|
type Deferred = {
|
||||||
promise?: Promise<any>;
|
promise?: Promise<any>;
|
||||||
@@ -91,13 +91,13 @@ export async function dev(opts: { port: number }) {
|
|||||||
const dev_port = await ports.find(10000);
|
const dev_port = await ports.find(10000);
|
||||||
|
|
||||||
const routes = create_routes();
|
const routes = create_routes();
|
||||||
create_app({ routes, dev_port });
|
create_main_manifests({ routes, dev_port });
|
||||||
|
|
||||||
const hot_update_server = create_hot_update_server(dev_port);
|
const hot_update_server = create_hot_update_server(dev_port);
|
||||||
|
|
||||||
watch_files('routes/**/*', ['add', 'unlink'], () => {
|
watch_files('routes/**/*', ['add', 'unlink'], () => {
|
||||||
const routes = create_routes();
|
const routes = create_routes();
|
||||||
create_app({ routes, dev_port });
|
create_main_manifests({ routes, dev_port });
|
||||||
});
|
});
|
||||||
|
|
||||||
watch_files('app/template.html', ['change'], () => {
|
watch_files('app/template.html', ['change'], () => {
|
||||||
@@ -265,7 +265,7 @@ export async function dev(opts: { port: number }) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
create_serviceworker({
|
create_serviceworker_manifest({
|
||||||
routes: create_routes(),
|
routes: create_routes(),
|
||||||
client_files
|
client_files
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
export { default as create_app } from './core/create_app';
|
export * from './core/create_manifests';
|
||||||
export { default as create_serviceworker } from './core/create_serviceworker';
|
|
||||||
export { default as create_compilers } from './core/create_compilers';
|
export { default as create_compilers } from './core/create_compilers';
|
||||||
export { default as create_routes } from './core/create_routes';
|
export { default as create_routes } from './core/create_routes';
|
||||||
@@ -1,33 +1,40 @@
|
|||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import mkdirp from 'mkdirp';
|
import * as glob from 'glob';
|
||||||
import create_routes from './create_routes';
|
import create_routes from './create_routes';
|
||||||
import { fudge_mtime, posixify, write } from './utils';
|
import { posixify, write_if_changed } from './utils';
|
||||||
import { dev } from '../config';
|
import { dev } from '../config';
|
||||||
import { Route } from '../interfaces';
|
import { Route } from '../interfaces';
|
||||||
|
|
||||||
// in dev mode, we avoid touching the fs unnecessarily
|
export function create_main_manifests({ routes, dev_port }: {
|
||||||
let last_client_manifest: string = null;
|
|
||||||
let last_server_manifest: string = null;
|
|
||||||
|
|
||||||
export default function create_app({ routes, dev_port }: {
|
|
||||||
routes: Route[];
|
routes: Route[];
|
||||||
dev_port: number;
|
dev_port?: number;
|
||||||
}) {
|
}) {
|
||||||
mkdirp.sync('app/manifest');
|
|
||||||
|
|
||||||
const client_manifest = generate_client(routes, dev_port);
|
const client_manifest = generate_client(routes, dev_port);
|
||||||
const server_manifest = generate_server(routes);
|
const server_manifest = generate_server(routes);
|
||||||
|
|
||||||
if (client_manifest !== last_client_manifest) {
|
write_if_changed(`app/manifest/client.js`, client_manifest);
|
||||||
write(`app/manifest/client.js`, client_manifest);
|
write_if_changed(`app/manifest/server.js`, server_manifest);
|
||||||
last_client_manifest = client_manifest;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (server_manifest !== last_server_manifest) {
|
export function create_serviceworker_manifest({ routes, client_files }: {
|
||||||
write(`app/manifest/server.js`, server_manifest);
|
routes: Route[];
|
||||||
last_server_manifest = server_manifest;
|
client_files: string[];
|
||||||
}
|
}) {
|
||||||
|
const assets = glob.sync('**', { cwd: 'assets', nodir: 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 shell = [\n\t${client_files.map((x: string) => `"${x}"`).join(',\n\t')}\n];
|
||||||
|
|
||||||
|
export const routes = [\n\t${routes.filter((r: Route) => r.type === 'page' && !/^_[45]xx$/.test(r.id)).map((r: Route) => `{ pattern: ${r.pattern} }`).join(',\n\t')}\n];
|
||||||
|
`.replace(/^\t\t/gm, '').trim();
|
||||||
|
|
||||||
|
write_if_changed('app/manifest/service-worker.js', code);
|
||||||
}
|
}
|
||||||
|
|
||||||
function generate_client(routes: Route[], dev_port?: number) {
|
function generate_client(routes: Route[], dev_port?: number) {
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
import * as fs from 'fs';
|
|
||||||
import * as path from 'path';
|
|
||||||
import glob from 'glob';
|
|
||||||
import create_routes from './create_routes';
|
|
||||||
import { fudge_mtime, posixify, write } from './utils';
|
|
||||||
import { Route } from '../interfaces';
|
|
||||||
|
|
||||||
export default function create_serviceworker({ routes, client_files }: {
|
|
||||||
routes: Route[];
|
|
||||||
client_files: string[];
|
|
||||||
}) {
|
|
||||||
const assets = glob.sync('**', { cwd: 'assets', nodir: 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 shell = [\n\t${client_files.map((x: string) => `"${x}"`).join(',\n\t')}\n];
|
|
||||||
|
|
||||||
export const routes = [\n\t${routes.filter((r: Route) => r.type === 'page' && !/^_[45]xx$/.test(r.id)).map((r: Route) => `{ pattern: ${r.pattern} }`).join(',\n\t')}\n];
|
|
||||||
`.replace(/^\t\t/gm, '').trim();
|
|
||||||
|
|
||||||
write('app/manifest/service-worker.js', code);
|
|
||||||
}
|
|
||||||
@@ -1,8 +1,13 @@
|
|||||||
import * as fs from 'fs';
|
import * as sander from 'sander';
|
||||||
|
|
||||||
export function write(file: string, code: string) {
|
const previous_contents = new Map();
|
||||||
fs.writeFileSync(file, code);
|
|
||||||
fudge_mtime(file);
|
export function write_if_changed(file: string, code: string) {
|
||||||
|
if (code !== previous_contents.get(file)) {
|
||||||
|
previous_contents.set(file, code);
|
||||||
|
sander.writeFileSync(file, code);
|
||||||
|
fudge_mtime(file);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function posixify(file: string) {
|
export function posixify(file: string) {
|
||||||
@@ -11,8 +16,8 @@ export function posixify(file: string) {
|
|||||||
|
|
||||||
export function fudge_mtime(file: string) {
|
export function fudge_mtime(file: string) {
|
||||||
// need to fudge the mtime so that webpack doesn't go doolally
|
// need to fudge the mtime so that webpack doesn't go doolally
|
||||||
const { atime, mtime } = fs.statSync(file);
|
const { atime, mtime } = sander.statSync(file);
|
||||||
fs.utimesSync(
|
sander.utimesSync(
|
||||||
file,
|
file,
|
||||||
new Date(atime.getTime() - 999999),
|
new Date(atime.getTime() - 999999),
|
||||||
new Date(mtime.getTime() - 999999)
|
new Date(mtime.getTime() - 999999)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import mkdirp from 'mkdirp';
|
|||||||
import rimraf from 'rimraf';
|
import rimraf from 'rimraf';
|
||||||
import devalue from 'devalue';
|
import devalue from 'devalue';
|
||||||
import { lookup } from './middleware/mime';
|
import { lookup } from './middleware/mime';
|
||||||
import { create_routes, templates, create_compilers } from './core/index';
|
import { create_routes, create_compilers } from './core';
|
||||||
import { dest, dev } from './config';
|
import { dest, dev } from './config';
|
||||||
import { Route, Template } from './interfaces';
|
import { Route, Template } from './interfaces';
|
||||||
import sourceMapSupport from 'source-map-support';
|
import sourceMapSupport from 'source-map-support';
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import fs from 'fs';
|
|||||||
import polka from 'polka';
|
import polka from 'polka';
|
||||||
import compression from 'compression';
|
import compression from 'compression';
|
||||||
import serve from 'serve-static';
|
import serve from 'serve-static';
|
||||||
import sapper from '../../../middleware';
|
import sapper from '../../../dist/middleware.ts.js';
|
||||||
import { routes } from './manifest/server.js';
|
import { routes } from './manifest/server.js';
|
||||||
|
|
||||||
let pending;
|
let pending;
|
||||||
|
|||||||
Reference in New Issue
Block a user