mirror of
https://github.com/kevin-DL/sapper.git
synced 2026-01-19 13:55:21 +00:00
tidy up a bit
This commit is contained in:
5
.gitignore
vendored
5
.gitignore
vendored
@@ -5,5 +5,10 @@ test/app/.sapper
|
|||||||
runtime.js
|
runtime.js
|
||||||
yarn.lock
|
yarn.lock
|
||||||
cli.js
|
cli.js
|
||||||
|
cli.js.map
|
||||||
middleware.js
|
middleware.js
|
||||||
|
middleware.js.map
|
||||||
core.js
|
core.js
|
||||||
|
core.js.map
|
||||||
|
webpack/config.js
|
||||||
|
webpack/config.js.map
|
||||||
54
cli.js
54
cli.js
@@ -1,54 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
||||||
|
|
||||||
var core_js = require('./core.js');
|
|
||||||
var path = require('path');
|
|
||||||
var mkdirp = _interopDefault(require('mkdirp'));
|
|
||||||
var rimraf = _interopDefault(require('rimraf'));
|
|
||||||
|
|
||||||
const dev = process.env.NODE_ENV !== 'production';
|
|
||||||
|
|
||||||
const templates = path.resolve(process.env.SAPPER_TEMPLATES || 'templates');
|
|
||||||
|
|
||||||
const src = path.resolve(process.env.SAPPER_ROUTES || 'routes');
|
|
||||||
|
|
||||||
const dest = path.resolve(process.env.SAPPER_DEST || '.sapper');
|
|
||||||
|
|
||||||
if (dev) {
|
|
||||||
mkdirp.sync(dest);
|
|
||||||
rimraf.sync(path.join(dest, '**/*'));
|
|
||||||
}
|
|
||||||
|
|
||||||
const entry = {
|
|
||||||
client: path.resolve(templates, '.main.rendered.js'),
|
|
||||||
server: path.resolve(dest, 'server-entry.js')
|
|
||||||
};
|
|
||||||
|
|
||||||
const cmd = process.argv[2];
|
|
||||||
const start = Date.now();
|
|
||||||
|
|
||||||
if (cmd === 'build') {
|
|
||||||
core_js.build({ dest, dev, entry, src })
|
|
||||||
.then(() => {
|
|
||||||
const elapsed = Date.now() - start;
|
|
||||||
console.error(`built in ${elapsed}ms`); // TODO beautify this, e.g. 'built in 4.7 seconds'
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
console.error(err ? err.details || err.stack || err.message || err : 'Unknown error');
|
|
||||||
});
|
|
||||||
} else if (cmd === 'export') {
|
|
||||||
const start = Date.now();
|
|
||||||
|
|
||||||
core_js.build({ dest, dev, entry, src })
|
|
||||||
.then(() => core_js.export({ src, dest }))
|
|
||||||
.then(() => {
|
|
||||||
const elapsed = Date.now() - start;
|
|
||||||
console.error(`extracted in ${elapsed}ms`); // TODO beautify this, e.g. 'built in 4.7 seconds'
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
console.error(err ? err.details || err.stack || err.message || err : 'Unknown error');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//# sourceMappingURL=cli.js.map
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"cli.js","sources":["src/config.js","src/cli/index.js"],"sourcesContent":["import * as path from 'path';\nimport mkdirp from 'mkdirp';\nimport rimraf from 'rimraf';\n\nexport const dev = process.env.NODE_ENV !== 'production';\n\nexport const templates = path.resolve(process.env.SAPPER_TEMPLATES || 'templates');\n\nexport const src = path.resolve(process.env.SAPPER_ROUTES || 'routes');\n\nexport const dest = path.resolve(process.env.SAPPER_DEST || '.sapper');\n\nif (dev) {\n\tmkdirp.sync(dest);\n\trimraf.sync(path.join(dest, '**/*'));\n}\n\nexport const entry = {\n\tclient: path.resolve(templates, '.main.rendered.js'),\n\tserver: path.resolve(dest, 'server-entry.js')\n};","import { build, export as exporter } from 'sapper/core.js';\nimport { dest, dev, entry, src } from '../config.js';\n\nconst cmd = process.argv[2];\nconst start = Date.now();\n\nif (cmd === 'build') {\n\tbuild({ dest, dev, entry, src })\n\t\t.then(() => {\n\t\t\tconst elapsed = Date.now() - start;\n\t\t\tconsole.error(`built in ${elapsed}ms`); // TODO beautify this, e.g. 'built in 4.7 seconds'\n\t\t})\n\t\t.catch(err => {\n\t\t\tconsole.error(err ? err.details || err.stack || err.message || err : 'Unknown error');\n\t\t});\n} else if (cmd === 'export') {\n\tconst start = Date.now();\n\n\tbuild({ dest, dev, entry, src })\n\t\t.then(() => exporter({ src, dest }))\n\t\t.then(() => {\n\t\t\tconst elapsed = Date.now() - start;\n\t\t\tconsole.error(`extracted in ${elapsed}ms`); // TODO beautify this, e.g. 'built in 4.7 seconds'\n\t\t})\n\t\t.catch(err => {\n\t\t\tconsole.error(err ? err.details || err.stack || err.message || err : 'Unknown error');\n\t\t});\n}\n"],"names":["path.resolve","path.join","build","exporter"],"mappings":";;;;;;;;;;AAIO,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;;AAEzD,AAAO,MAAM,SAAS,GAAGA,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,WAAW,CAAC,CAAC;;AAEnF,AAAO,MAAM,GAAG,GAAGA,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,QAAQ,CAAC,CAAC;;AAEvE,AAAO,MAAM,IAAI,GAAGA,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;;AAEvE,IAAI,GAAG,EAAE;CACR,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CAClB,MAAM,CAAC,IAAI,CAACC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;CACrC;;AAED,AAAO,MAAM,KAAK,GAAG;CACpB,MAAM,EAAED,YAAY,CAAC,SAAS,EAAE,mBAAmB,CAAC;CACpD,MAAM,EAAEA,YAAY,CAAC,IAAI,EAAE,iBAAiB,CAAC;CAC7C;;ACjBD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;;AAEzB,IAAI,GAAG,KAAK,OAAO,EAAE;CACpBE,aAAK,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;GAC9B,IAAI,CAAC,MAAM;GACX,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;GACnC,OAAO,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;GACvC,CAAC;GACD,KAAK,CAAC,GAAG,IAAI;GACb,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,GAAG,eAAe,CAAC,CAAC;GACtF,CAAC,CAAC;CACJ,MAAM,IAAI,GAAG,KAAK,QAAQ,EAAE;CAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;;CAEzBA,aAAK,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;GAC9B,IAAI,CAAC,MAAMC,cAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;GACnC,IAAI,CAAC,MAAM;GACX,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;GACnC,OAAO,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;GAC3C,CAAC;GACD,KAAK,CAAC,GAAG,IAAI;GACb,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,GAAG,eAAe,CAAC,CAAC;GACtF,CAAC,CAAC;CACJ"}
|
|
||||||
File diff suppressed because one or more lines are too long
361
middleware.js
361
middleware.js
@@ -1,361 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
||||||
|
|
||||||
var fs = require('fs');
|
|
||||||
var path = require('path');
|
|
||||||
var serialize = _interopDefault(require('serialize-javascript'));
|
|
||||||
var escape_html = _interopDefault(require('escape-html'));
|
|
||||||
var core_js = require('./core.js');
|
|
||||||
var chalk = _interopDefault(require('chalk'));
|
|
||||||
var mkdirp = _interopDefault(require('mkdirp'));
|
|
||||||
var rimraf = _interopDefault(require('rimraf'));
|
|
||||||
|
|
||||||
const dev = process.env.NODE_ENV !== 'production';
|
|
||||||
|
|
||||||
const templates$1 = path.resolve(process.env.SAPPER_TEMPLATES || 'templates');
|
|
||||||
|
|
||||||
const src = path.resolve(process.env.SAPPER_ROUTES || 'routes');
|
|
||||||
|
|
||||||
const dest = path.resolve(process.env.SAPPER_DEST || '.sapper');
|
|
||||||
|
|
||||||
if (dev) {
|
|
||||||
mkdirp.sync(dest);
|
|
||||||
rimraf.sync(path.join(dest, '**/*'));
|
|
||||||
}
|
|
||||||
|
|
||||||
const entry = {
|
|
||||||
client: path.resolve(templates$1, '.main.rendered.js'),
|
|
||||||
server: path.resolve(dest, 'server-entry.js')
|
|
||||||
};
|
|
||||||
|
|
||||||
function deferred() {
|
|
||||||
const d = {};
|
|
||||||
|
|
||||||
d.promise = new Promise((fulfil, reject) => {
|
|
||||||
d.fulfil = fulfil;
|
|
||||||
d.reject = reject;
|
|
||||||
});
|
|
||||||
|
|
||||||
return d;
|
|
||||||
}
|
|
||||||
|
|
||||||
function create_watcher() {
|
|
||||||
const deferreds = {
|
|
||||||
client: deferred(),
|
|
||||||
server: deferred()
|
|
||||||
};
|
|
||||||
|
|
||||||
const invalidate = () => Promise.all([
|
|
||||||
deferreds.client.promise,
|
|
||||||
deferreds.server.promise
|
|
||||||
]).then(([client_stats, server_stats]) => {
|
|
||||||
const client_info = client_stats.toJson();
|
|
||||||
fs.writeFileSync(path.join(dest, 'stats.client.json'), JSON.stringify(client_info, null, ' '));
|
|
||||||
|
|
||||||
const server_info = server_stats.toJson();
|
|
||||||
fs.writeFileSync(path.join(dest, 'stats.server.json'), JSON.stringify(server_info, null, ' '));
|
|
||||||
|
|
||||||
return core_js.generate_asset_cache(
|
|
||||||
client_stats.toJson(),
|
|
||||||
server_stats.toJson()
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
function watch_compiler(type) {
|
|
||||||
const compiler = core_js.compilers[type];
|
|
||||||
|
|
||||||
compiler.plugin('invalid', filename => {
|
|
||||||
console.log(chalk.cyan(`${type} bundle invalidated, file changed: ${chalk.bold(filename)}`));
|
|
||||||
deferreds[type] = deferred();
|
|
||||||
watcher.ready = invalidate();
|
|
||||||
});
|
|
||||||
|
|
||||||
compiler.plugin('failed', err => {
|
|
||||||
deferreds[type].reject(err);
|
|
||||||
});
|
|
||||||
|
|
||||||
return compiler.watch({}, (err, stats) => {
|
|
||||||
if (stats.hasErrors()) {
|
|
||||||
deferreds[type].reject(stats.toJson().errors[0]);
|
|
||||||
} else {
|
|
||||||
deferreds[type].fulfil(stats);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const watcher = {
|
|
||||||
ready: invalidate(),
|
|
||||||
client: watch_compiler('client'),
|
|
||||||
server: watch_compiler('server'),
|
|
||||||
|
|
||||||
close: () => {
|
|
||||||
watcher.client.close();
|
|
||||||
watcher.server.close();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return watcher;
|
|
||||||
}
|
|
||||||
|
|
||||||
function connect_dev() {
|
|
||||||
core_js.create_app({ dev, entry, src });
|
|
||||||
|
|
||||||
const watcher = create_watcher();
|
|
||||||
|
|
||||||
let asset_cache;
|
|
||||||
|
|
||||||
const middleware = compose_handlers([
|
|
||||||
require('webpack-hot-middleware')(core_js.compilers.client, {
|
|
||||||
reload: true,
|
|
||||||
path: '/__webpack_hmr',
|
|
||||||
heartbeat: 10 * 1000
|
|
||||||
}),
|
|
||||||
|
|
||||||
(req, res, next) => {
|
|
||||||
watcher.ready.then(cache => {
|
|
||||||
asset_cache = cache;
|
|
||||||
next();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
set_req_pathname,
|
|
||||||
|
|
||||||
get_asset_handler({
|
|
||||||
filter: pathname => pathname === '/index.html',
|
|
||||||
type: 'text/html',
|
|
||||||
cache: 'max-age=600',
|
|
||||||
fn: () => asset_cache.client.index
|
|
||||||
}),
|
|
||||||
|
|
||||||
get_asset_handler({
|
|
||||||
filter: pathname => pathname === '/service-worker.js',
|
|
||||||
type: 'application/javascript',
|
|
||||||
cache: 'max-age=600',
|
|
||||||
fn: () => asset_cache.client.service_worker
|
|
||||||
}),
|
|
||||||
|
|
||||||
get_asset_handler({
|
|
||||||
filter: pathname => pathname.startsWith('/client/'),
|
|
||||||
type: 'application/javascript',
|
|
||||||
cache: 'max-age=31536000',
|
|
||||||
fn: pathname => asset_cache.client.chunks[pathname]
|
|
||||||
}),
|
|
||||||
|
|
||||||
get_route_handler(() => asset_cache),
|
|
||||||
|
|
||||||
get_not_found_handler(() => asset_cache)
|
|
||||||
]);
|
|
||||||
|
|
||||||
middleware.close = () => {
|
|
||||||
watcher.close();
|
|
||||||
// TODO shut down chokidar
|
|
||||||
};
|
|
||||||
|
|
||||||
return middleware;
|
|
||||||
}
|
|
||||||
|
|
||||||
function connect_prod() {
|
|
||||||
const asset_cache = core_js.generate_asset_cache({
|
|
||||||
src, dest,
|
|
||||||
dev: false,
|
|
||||||
client_info: read_json(path.join(dest, 'stats.client.json')),
|
|
||||||
server_info: read_json(path.join(dest, 'stats.server.json'))
|
|
||||||
});
|
|
||||||
|
|
||||||
const middleware = compose_handlers([
|
|
||||||
set_req_pathname,
|
|
||||||
|
|
||||||
get_asset_handler({
|
|
||||||
filter: pathname => pathname === '/index.html',
|
|
||||||
type: 'text/html',
|
|
||||||
cache: 'max-age=600',
|
|
||||||
fn: () => asset_cache.client.index
|
|
||||||
}),
|
|
||||||
|
|
||||||
get_asset_handler({
|
|
||||||
filter: pathname => pathname === '/service-worker.js',
|
|
||||||
type: 'application/javascript',
|
|
||||||
cache: 'max-age=600',
|
|
||||||
fn: () => asset_cache.client.service_worker
|
|
||||||
}),
|
|
||||||
|
|
||||||
get_asset_handler({
|
|
||||||
filter: pathname => pathname.startsWith('/client/'),
|
|
||||||
type: 'application/javascript',
|
|
||||||
cache: 'max-age=31536000',
|
|
||||||
fn: pathname => asset_cache.client.chunks[pathname]
|
|
||||||
}),
|
|
||||||
|
|
||||||
get_route_handler(() => asset_cache),
|
|
||||||
|
|
||||||
get_not_found_handler(() => asset_cache)
|
|
||||||
]);
|
|
||||||
|
|
||||||
// here for API consistency between dev, and prod, but
|
|
||||||
// doesn't actually need to do anything
|
|
||||||
middleware.close = () => {};
|
|
||||||
|
|
||||||
return middleware;
|
|
||||||
}
|
|
||||||
|
|
||||||
var index = dev ? connect_dev : connect_prod;
|
|
||||||
|
|
||||||
function set_req_pathname(req, res, next) {
|
|
||||||
req.pathname = req.url.replace(/\?.+/, '');
|
|
||||||
next();
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_asset_handler(opts) {
|
|
||||||
return (req, res, next) => {
|
|
||||||
if (!opts.filter(req.pathname)) return next();
|
|
||||||
|
|
||||||
res.setHeader('Content-Type', opts.type);
|
|
||||||
res.setHeader('Cache-Control', opts.cache);
|
|
||||||
|
|
||||||
res.end(opts.fn(req.pathname));
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
const resolved = Promise.resolve();
|
|
||||||
|
|
||||||
function get_route_handler(fn) {
|
|
||||||
function handle_route(route, req, res, next, { client, server }) {
|
|
||||||
req.params = route.exec(req.pathname);
|
|
||||||
|
|
||||||
const mod = require(server.entry)[route.id];
|
|
||||||
|
|
||||||
if (route.type === 'page') {
|
|
||||||
// preload main.js and current route
|
|
||||||
// TODO detect other stuff we can preload? images, CSS, fonts?
|
|
||||||
res.setHeader('Link', `<${client.main_file}>;rel="preload";as="script", <${client.routes[route.id]}>;rel="preload";as="script"`);
|
|
||||||
|
|
||||||
const data = { params: req.params, query: req.query };
|
|
||||||
|
|
||||||
if (mod.preload) {
|
|
||||||
const promise = Promise.resolve(mod.preload(req)).then(preloaded => {
|
|
||||||
const serialized = try_serialize(preloaded);
|
|
||||||
Object.assign(data, preloaded);
|
|
||||||
|
|
||||||
return { rendered: mod.render(data), serialized };
|
|
||||||
});
|
|
||||||
|
|
||||||
return core_js.templates.stream(res, 200, {
|
|
||||||
scripts: promise.then(({ serialized }) => {
|
|
||||||
const main = `<script src='${client.main_file}'></script>`;
|
|
||||||
|
|
||||||
if (serialized) {
|
|
||||||
return `<script>__SAPPER__ = { preloaded: ${serialized} };</script>${main}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
return main;
|
|
||||||
}),
|
|
||||||
html: promise.then(({ rendered }) => rendered.html),
|
|
||||||
head: promise.then(({ rendered }) => `<noscript id='sapper-head-start'></noscript>${rendered.head}<noscript id='sapper-head-end'></noscript>`),
|
|
||||||
styles: promise.then(({ rendered }) => (rendered.css && rendered.css.code ? `<style>${rendered.css.code}</style>` : ''))
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
const { html, head, css } = mod.render(data);
|
|
||||||
|
|
||||||
const page = core_js.templates.render(200, {
|
|
||||||
scripts: `<script src='${client.main_file}'></script>`,
|
|
||||||
html,
|
|
||||||
head: `<noscript id='sapper-head-start'></noscript>${head}<noscript id='sapper-head-end'></noscript>`,
|
|
||||||
styles: (css && css.code ? `<style>${css.code}</style>` : '')
|
|
||||||
});
|
|
||||||
|
|
||||||
res.end(page);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
const method = req.method.toLowerCase();
|
|
||||||
// 'delete' cannot be exported from a module because it is a keyword,
|
|
||||||
// so check for 'del' instead
|
|
||||||
const method_export = method === 'delete' ? 'del' : method;
|
|
||||||
const handler = mod[method_export];
|
|
||||||
if (handler) {
|
|
||||||
handler(req, res, next);
|
|
||||||
} else {
|
|
||||||
// no matching handler for method — 404
|
|
||||||
next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return function find_route(req, res, next) {
|
|
||||||
const url = req.pathname;
|
|
||||||
|
|
||||||
// whatever happens, we're going to serve some HTML
|
|
||||||
res.setHeader('Content-Type', 'text/html');
|
|
||||||
|
|
||||||
resolved
|
|
||||||
.then(() => {
|
|
||||||
for (const route of core_js.route_manager.routes) {
|
|
||||||
if (route.test(url)) return handle_route(route, req, res, next, fn());
|
|
||||||
}
|
|
||||||
|
|
||||||
// no matching route — 404
|
|
||||||
next();
|
|
||||||
})
|
|
||||||
.catch(err => {
|
|
||||||
res.statusCode = 500;
|
|
||||||
res.end(core_js.templates.render(500, {
|
|
||||||
title: (err && err.name) || 'Internal server error',
|
|
||||||
url,
|
|
||||||
error: escape_html(err && (err.details || err.message || err) || 'Unknown error'),
|
|
||||||
stack: err && err.stack.split('\n').slice(1).join('\n')
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_not_found_handler(fn) {
|
|
||||||
return function handle_not_found(req, res) {
|
|
||||||
const asset_cache = fn();
|
|
||||||
|
|
||||||
res.statusCode = 404;
|
|
||||||
res.end(core_js.templates.render(404, {
|
|
||||||
title: 'Not found',
|
|
||||||
status: 404,
|
|
||||||
method: req.method,
|
|
||||||
scripts: `<script src='${asset_cache.client.main_file}'></script>`,
|
|
||||||
url: req.url
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function compose_handlers(handlers) {
|
|
||||||
return (req, res, next) => {
|
|
||||||
let i = 0;
|
|
||||||
function go() {
|
|
||||||
const handler = handlers[i];
|
|
||||||
|
|
||||||
if (handler) {
|
|
||||||
handler(req, res, () => {
|
|
||||||
i += 1;
|
|
||||||
go();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
next();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
go();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function read_json(file) {
|
|
||||||
return JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
||||||
}
|
|
||||||
|
|
||||||
function try_serialize(data) {
|
|
||||||
try {
|
|
||||||
return serialize(data);
|
|
||||||
} catch (err) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = index;
|
|
||||||
//# sourceMappingURL=middleware.js.map
|
|
||||||
File diff suppressed because one or more lines are too long
@@ -1,20 +1,11 @@
|
|||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import mkdirp from 'mkdirp';
|
|
||||||
import rimraf from 'rimraf';
|
|
||||||
|
|
||||||
export const dev = process.env.NODE_ENV !== 'production';
|
export const dev = process.env.NODE_ENV !== 'production';
|
||||||
|
|
||||||
export const templates = path.resolve(process.env.SAPPER_TEMPLATES || 'templates');
|
export const templates = path.resolve(process.env.SAPPER_TEMPLATES || 'templates');
|
||||||
|
|
||||||
export const src = path.resolve(process.env.SAPPER_ROUTES || 'routes');
|
export const src = path.resolve(process.env.SAPPER_ROUTES || 'routes');
|
||||||
|
|
||||||
export const dest = path.resolve(process.env.SAPPER_DEST || '.sapper');
|
export const dest = path.resolve(process.env.SAPPER_DEST || '.sapper');
|
||||||
|
|
||||||
if (dev) {
|
|
||||||
mkdirp.sync(dest);
|
|
||||||
rimraf.sync(path.join(dest, '**/*'));
|
|
||||||
}
|
|
||||||
|
|
||||||
export const entry = {
|
export const entry = {
|
||||||
client: path.resolve(templates, '.main.rendered.js'),
|
client: path.resolve(templates, '.main.rendered.js'),
|
||||||
server: path.resolve(dest, 'server-entry.js')
|
server: path.resolve(dest, 'server-entry.js')
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import glob from 'glob';
|
import glob from 'glob';
|
||||||
import * as templates from './templates.js';
|
import { create_templates, render } from './templates.js';
|
||||||
import * as route_manager from './route_manager.js';
|
import * as route_manager from './route_manager.js';
|
||||||
|
|
||||||
function ensure_array(thing) {
|
function ensure_array(thing) {
|
||||||
@@ -9,7 +9,7 @@ function ensure_array(thing) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default function generate_asset_cache({ src, dest, dev, client_info, server_info }) {
|
export default function generate_asset_cache({ src, dest, dev, client_info, server_info }) {
|
||||||
templates.create_templates(); // TODO refactor this...
|
create_templates(); // TODO refactor this...
|
||||||
|
|
||||||
const main_file = `/client/${ensure_array(client_info.assetsByChunkName.main)[0]}`;
|
const main_file = `/client/${ensure_array(client_info.assetsByChunkName.main)[0]}`;
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ function generate_service_worker({ chunk_files, src }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function generate_index(main_file) {
|
function generate_index(main_file) {
|
||||||
return templates.render(200, {
|
return render(200, {
|
||||||
styles: '',
|
styles: '',
|
||||||
head: '',
|
head: '',
|
||||||
html: '<noscript>Please enable JavaScript!</noscript>',
|
html: '<noscript>Please enable JavaScript!</noscript>',
|
||||||
|
|||||||
@@ -1,12 +1,9 @@
|
|||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import relative from 'require-relative';
|
import relative from 'require-relative';
|
||||||
|
|
||||||
const webpack = relative('webpack', process.cwd());
|
|
||||||
|
|
||||||
export let client;
|
|
||||||
export let server;
|
|
||||||
|
|
||||||
export function get_compilers() {
|
export function get_compilers() {
|
||||||
|
const webpack = relative('webpack', process.cwd());
|
||||||
|
|
||||||
return {
|
return {
|
||||||
client: webpack(
|
client: webpack(
|
||||||
require(path.resolve('webpack.client.config.js'))
|
require(path.resolve('webpack.client.config.js'))
|
||||||
@@ -17,11 +14,3 @@ export function get_compilers() {
|
|||||||
)
|
)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// export const client = webpack(
|
|
||||||
// require(path.resolve('webpack.client.config.js'))
|
|
||||||
// );
|
|
||||||
|
|
||||||
// export const server = webpack(
|
|
||||||
// require(path.resolve('webpack.server.config.js'))
|
|
||||||
// );
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as route_manager from '../route_manager.js';
|
import * as route_manager from '../route_manager.js';
|
||||||
import * as templates from '../templates.js';
|
import { create_templates } from '../templates.js';
|
||||||
|
|
||||||
function posixify(file) {
|
function posixify(file) {
|
||||||
return file.replace(/[/\\]/g, '/');
|
return file.replace(/[/\\]/g, '/');
|
||||||
@@ -90,7 +90,7 @@ export function start_watching({ src }) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
watch('templates/**.html', () => {
|
watch('templates/**.html', () => {
|
||||||
templates.create_templates();
|
create_templates();
|
||||||
// TODO reload current page?
|
// TODO reload current page?
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
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 rimraf from 'rimraf';
|
||||||
import serialize from 'serialize-javascript';
|
import serialize from 'serialize-javascript';
|
||||||
import escape_html from 'escape-html';
|
import escape_html from 'escape-html';
|
||||||
import { route_manager, templates, create_app, compilers, generate_asset_cache } from 'sapper/core.js';
|
import { route_manager, templates, create_app, compilers, generate_asset_cache } from 'sapper/core.js';
|
||||||
@@ -7,6 +9,9 @@ import create_watcher from './create_watcher.js';
|
|||||||
import { dest, dev, entry, src } from '../config.js';
|
import { dest, dev, entry, src } from '../config.js';
|
||||||
|
|
||||||
function connect_dev() {
|
function connect_dev() {
|
||||||
|
mkdirp.sync(dest);
|
||||||
|
rimraf.sync(path.join(dest, '**/*'));
|
||||||
|
|
||||||
create_app({ dev, entry, src });
|
create_app({ dev, entry, src });
|
||||||
|
|
||||||
const watcher = create_watcher();
|
const watcher = create_watcher();
|
||||||
|
|||||||
@@ -1,71 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
||||||
|
|
||||||
var path = require('path');
|
|
||||||
var mkdirp = _interopDefault(require('mkdirp'));
|
|
||||||
var rimraf = _interopDefault(require('rimraf'));
|
|
||||||
|
|
||||||
const dev = process.env.NODE_ENV !== 'production';
|
|
||||||
|
|
||||||
const templates = path.resolve(process.env.SAPPER_TEMPLATES || 'templates');
|
|
||||||
|
|
||||||
const src = path.resolve(process.env.SAPPER_ROUTES || 'routes');
|
|
||||||
|
|
||||||
const dest = path.resolve(process.env.SAPPER_DEST || '.sapper');
|
|
||||||
|
|
||||||
if (dev) {
|
|
||||||
mkdirp.sync(dest);
|
|
||||||
rimraf.sync(path.join(dest, '**/*'));
|
|
||||||
}
|
|
||||||
|
|
||||||
const entry = {
|
|
||||||
client: path.resolve(templates, '.main.rendered.js'),
|
|
||||||
server: path.resolve(dest, 'server-entry.js')
|
|
||||||
};
|
|
||||||
|
|
||||||
var index = {
|
|
||||||
dev,
|
|
||||||
|
|
||||||
client: {
|
|
||||||
entry: () => {
|
|
||||||
return {
|
|
||||||
main: [
|
|
||||||
entry.client,
|
|
||||||
// workaround for https://github.com/webpack-contrib/extract-text-webpack-plugin/issues/456
|
|
||||||
'style-loader/lib/addStyles',
|
|
||||||
'css-loader/lib/css-base'
|
|
||||||
]
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
output: () => {
|
|
||||||
return {
|
|
||||||
path: `${dest}/client`,
|
|
||||||
filename: '[name].[hash].js',
|
|
||||||
chunkFilename: '[name].[id].[hash].js',
|
|
||||||
publicPath: '/client/'
|
|
||||||
};
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
server: {
|
|
||||||
entry: () => {
|
|
||||||
return {
|
|
||||||
main: entry.server
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
output: () => {
|
|
||||||
return {
|
|
||||||
path: `${dest}/server`,
|
|
||||||
filename: '[name].[hash].js',
|
|
||||||
chunkFilename: '[name].[id].[hash].js',
|
|
||||||
libraryTarget: 'commonjs2'
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = index;
|
|
||||||
//# sourceMappingURL=config.js.map
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"version":3,"file":"config.js","sources":["../src/config.js","../src/webpack/index.js"],"sourcesContent":["import * as path from 'path';\nimport mkdirp from 'mkdirp';\nimport rimraf from 'rimraf';\n\nexport const dev = process.env.NODE_ENV !== 'production';\n\nexport const templates = path.resolve(process.env.SAPPER_TEMPLATES || 'templates');\n\nexport const src = path.resolve(process.env.SAPPER_ROUTES || 'routes');\n\nexport const dest = path.resolve(process.env.SAPPER_DEST || '.sapper');\n\nif (dev) {\n\tmkdirp.sync(dest);\n\trimraf.sync(path.join(dest, '**/*'));\n}\n\nexport const entry = {\n\tclient: path.resolve(templates, '.main.rendered.js'),\n\tserver: path.resolve(dest, 'server-entry.js')\n};","import { dest, dev, entry } from '../config.js';\n\nexport default {\n\tdev,\n\n\tclient: {\n\t\tentry: () => {\n\t\t\treturn {\n\t\t\t\tmain: [\n\t\t\t\t\tentry.client,\n\t\t\t\t\t// workaround for https://github.com/webpack-contrib/extract-text-webpack-plugin/issues/456\n\t\t\t\t\t'style-loader/lib/addStyles',\n\t\t\t\t\t'css-loader/lib/css-base'\n\t\t\t\t]\n\t\t\t};\n\t\t},\n\n\t\toutput: () => {\n\t\t\treturn {\n\t\t\t\tpath: `${dest}/client`,\n\t\t\t\tfilename: '[name].[hash].js',\n\t\t\t\tchunkFilename: '[name].[id].[hash].js',\n\t\t\t\tpublicPath: '/client/'\n\t\t\t};\n\t\t}\n\t},\n\n\tserver: {\n\t\tentry: () => {\n\t\t\treturn {\n\t\t\t\tmain: entry.server\n\t\t\t};\n\t\t},\n\n\t\toutput: () => {\n\t\t\treturn {\n\t\t\t\tpath: `${dest}/server`,\n\t\t\t\tfilename: '[name].[hash].js',\n\t\t\t\tchunkFilename: '[name].[id].[hash].js',\n\t\t\t\tlibraryTarget: 'commonjs2'\n\t\t\t};\n\t\t}\n\t}\n};\n"],"names":["path.resolve","path.join"],"mappings":";;;;;;;;AAIO,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;;AAEzD,AAAO,MAAM,SAAS,GAAGA,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,WAAW,CAAC,CAAC;;AAEnF,AAAO,MAAM,GAAG,GAAGA,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,QAAQ,CAAC,CAAC;;AAEvE,AAAO,MAAM,IAAI,GAAGA,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;;AAEvE,IAAI,GAAG,EAAE;CACR,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CAClB,MAAM,CAAC,IAAI,CAACC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;CACrC;;AAED,AAAO,MAAM,KAAK,GAAG;CACpB,MAAM,EAAED,YAAY,CAAC,SAAS,EAAE,mBAAmB,CAAC;CACpD,MAAM,EAAEA,YAAY,CAAC,IAAI,EAAE,iBAAiB,CAAC;CAC7C;;AClBD,YAAe;CACd,GAAG;;CAEH,MAAM,EAAE;EACP,KAAK,EAAE,MAAM;GACZ,OAAO;IACN,IAAI,EAAE;KACL,KAAK,CAAC,MAAM;;KAEZ,4BAA4B;KAC5B,yBAAyB;KACzB;IACD,CAAC;GACF;;EAED,MAAM,EAAE,MAAM;GACb,OAAO;IACN,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC;IACtB,QAAQ,EAAE,kBAAkB;IAC5B,aAAa,EAAE,uBAAuB;IACtC,UAAU,EAAE,UAAU;IACtB,CAAC;GACF;EACD;;CAED,MAAM,EAAE;EACP,KAAK,EAAE,MAAM;GACZ,OAAO;IACN,IAAI,EAAE,KAAK,CAAC,MAAM;IAClB,CAAC;GACF;;EAED,MAAM,EAAE,MAAM;GACb,OAAO;IACN,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC;IACtB,QAAQ,EAAE,kBAAkB;IAC5B,aAAa,EAAE,uBAAuB;IACtC,aAAa,EAAE,WAAW;IAC1B,CAAC;GACF;EACD;CACD,CAAC;;;;"}
|
|
||||||
Reference in New Issue
Block a user