mirror of
https://github.com/kevin-DL/sapper.git
synced 2026-01-14 03:54:46 +00:00
make route handling more explicit
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import * as fs from 'fs';
|
||||
import * as path from 'path';
|
||||
import chalk from 'chalk';
|
||||
import { compilers, generate_asset_cache } from 'sapper/core.js';
|
||||
import { generate_asset_cache, create_routes } from 'sapper/core.js';
|
||||
import { dest } from '../config.js';
|
||||
|
||||
function deferred() {
|
||||
@@ -15,7 +15,7 @@ function deferred() {
|
||||
return d;
|
||||
}
|
||||
|
||||
export default function create_watcher() {
|
||||
export default function create_watcher({ compilers, src, onroutes }) {
|
||||
const deferreds = {
|
||||
client: deferred(),
|
||||
server: deferred()
|
||||
@@ -59,6 +59,36 @@ export default function create_watcher() {
|
||||
});
|
||||
}
|
||||
|
||||
const chokidar = require('chokidar');
|
||||
|
||||
function watch_files(pattern, callback) {
|
||||
const watcher = chokidar.watch(pattern, {
|
||||
ignoreInitial: true,
|
||||
persistent: false
|
||||
});
|
||||
|
||||
watcher.on('add', callback);
|
||||
watcher.on('change', callback);
|
||||
watcher.on('unlink', callback);
|
||||
|
||||
// watch('templates/main.js', create_app);
|
||||
|
||||
// watch('routes/**/*.+(html|js|mjs)', () => {
|
||||
// route_manager.update({ src });
|
||||
// create_app();
|
||||
// });
|
||||
|
||||
// watch('templates/**.html', () => {
|
||||
// create_templates();
|
||||
// // TODO reload current page?
|
||||
// });
|
||||
}
|
||||
|
||||
watch_files('routes/**/*.+(html|js|mjs)', () => {
|
||||
const routes = create_routes({ src });
|
||||
onroutes(routes);
|
||||
});
|
||||
|
||||
const watcher = {
|
||||
ready: invalidate(),
|
||||
client: watch_compiler('client'),
|
||||
|
||||
@@ -4,7 +4,7 @@ import mkdirp from 'mkdirp';
|
||||
import rimraf from 'rimraf';
|
||||
import serialize from 'serialize-javascript';
|
||||
import escape_html from 'escape-html';
|
||||
import { route_manager, templates, create_app, compilers, generate_asset_cache } from 'sapper/core.js';
|
||||
import { create_routes, templates, create_app, get_compilers, generate_asset_cache } from 'sapper/core.js';
|
||||
import create_watcher from './create_watcher.js';
|
||||
import { dest, dev, entry, src } from '../config.js';
|
||||
|
||||
@@ -14,7 +14,16 @@ function connect_dev() {
|
||||
|
||||
create_app({ dev, entry, src });
|
||||
|
||||
const watcher = create_watcher();
|
||||
const compilers = get_compilers();
|
||||
|
||||
let routes;
|
||||
|
||||
const watcher = create_watcher({
|
||||
compilers,
|
||||
on_routes_update: _ => {
|
||||
routes = _;
|
||||
}
|
||||
});
|
||||
|
||||
let asset_cache;
|
||||
|
||||
@@ -55,7 +64,7 @@ function connect_dev() {
|
||||
fn: pathname => asset_cache.client.chunks[pathname]
|
||||
}),
|
||||
|
||||
get_route_handler(() => asset_cache),
|
||||
get_route_handler(() => asset_cache, () => routes),
|
||||
|
||||
get_not_found_handler(() => asset_cache)
|
||||
]);
|
||||
@@ -76,6 +85,8 @@ function connect_prod() {
|
||||
server_info: read_json(path.join(dest, 'stats.server.json'))
|
||||
});
|
||||
|
||||
const routes = create_routes({ src }); // TODO rename update
|
||||
|
||||
const middleware = compose_handlers([
|
||||
set_req_pathname,
|
||||
|
||||
@@ -100,7 +111,7 @@ function connect_prod() {
|
||||
fn: pathname => asset_cache.client.chunks[pathname]
|
||||
}),
|
||||
|
||||
get_route_handler(() => asset_cache),
|
||||
get_route_handler(() => asset_cache, () => routes),
|
||||
|
||||
get_not_found_handler(() => asset_cache)
|
||||
]);
|
||||
@@ -132,7 +143,7 @@ function get_asset_handler(opts) {
|
||||
|
||||
const resolved = Promise.resolve();
|
||||
|
||||
function get_route_handler(fn) {
|
||||
function get_route_handler(get_assets, get_routes) {
|
||||
function handle_route(route, req, res, next, { client, server }) {
|
||||
req.params = route.exec(req.pathname);
|
||||
|
||||
@@ -204,8 +215,9 @@ function get_route_handler(fn) {
|
||||
|
||||
resolved
|
||||
.then(() => {
|
||||
for (const route of route_manager.routes) {
|
||||
if (route.test(url)) return handle_route(route, req, res, next, fn());
|
||||
const routes = get_routes();
|
||||
for (const route of routes) {
|
||||
if (route.test(url)) return handle_route(route, req, res, next, get_assets());
|
||||
}
|
||||
|
||||
// no matching route — 404
|
||||
|
||||
Reference in New Issue
Block a user