mirror of
https://github.com/kevin-DL/sapper.git
synced 2026-01-14 20:14:39 +00:00
wip 3
This commit is contained in:
30
cli.js
30
cli.js
@@ -1,13 +1,36 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
||||||
|
|
||||||
var core_js = require('./core.js');
|
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 cmd = process.argv[2];
|
||||||
const start = Date.now();
|
const start = Date.now();
|
||||||
|
|
||||||
if (cmd === 'build') {
|
if (cmd === 'build') {
|
||||||
core_js.build()
|
core_js.build({ dest, dev, entry, src })
|
||||||
.then(() => {
|
.then(() => {
|
||||||
const elapsed = Date.now() - start;
|
const elapsed = Date.now() - start;
|
||||||
console.error(`built in ${elapsed}ms`); // TODO beautify this, e.g. 'built in 4.7 seconds'
|
console.error(`built in ${elapsed}ms`); // TODO beautify this, e.g. 'built in 4.7 seconds'
|
||||||
@@ -18,8 +41,8 @@ if (cmd === 'build') {
|
|||||||
} else if (cmd === 'export') {
|
} else if (cmd === 'export') {
|
||||||
const start = Date.now();
|
const start = Date.now();
|
||||||
|
|
||||||
core_js.build()
|
core_js.build({ dest, dev, entry, src })
|
||||||
.then(() => core_js.export())
|
.then(() => core_js.export({ src, dest }))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
const elapsed = Date.now() - start;
|
const elapsed = Date.now() - start;
|
||||||
console.error(`extracted in ${elapsed}ms`); // TODO beautify this, e.g. 'built in 4.7 seconds'
|
console.error(`extracted in ${elapsed}ms`); // TODO beautify this, e.g. 'built in 4.7 seconds'
|
||||||
@@ -28,3 +51,4 @@ if (cmd === 'build') {
|
|||||||
console.error(err ? err.details || err.stack || err.message || err : 'Unknown error');
|
console.error(err ? err.details || err.stack || err.message || err : 'Unknown error');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
//# sourceMappingURL=cli.js.map
|
||||||
|
|||||||
1
cli.js.map
Normal file
1
cli.js.map
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"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"}
|
||||||
1
core.js.map
Normal file
1
core.js.map
Normal file
File diff suppressed because one or more lines are too long
@@ -99,7 +99,7 @@ function create_watcher() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function connect_dev() {
|
function connect_dev() {
|
||||||
core_js.create_app();
|
core_js.create_app({ dev, entry, src });
|
||||||
|
|
||||||
const watcher = create_watcher();
|
const watcher = create_watcher();
|
||||||
|
|
||||||
@@ -156,10 +156,12 @@ function connect_dev() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function connect_prod() {
|
function connect_prod() {
|
||||||
const asset_cache = core_js.generate_asset_cache(
|
const asset_cache = core_js.generate_asset_cache({
|
||||||
read_json(path.join(dest, 'stats.client.json')),
|
src, dest,
|
||||||
read_json(path.join(dest, 'stats.server.json'))
|
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([
|
const middleware = compose_handlers([
|
||||||
set_req_pathname,
|
set_req_pathname,
|
||||||
@@ -356,3 +358,4 @@ function try_serialize(data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = index;
|
module.exports = index;
|
||||||
|
//# sourceMappingURL=middleware.js.map
|
||||||
|
|||||||
1
middleware.js.map
Normal file
1
middleware.js.map
Normal file
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
|||||||
--require ts-node/register
|
--require source-map-support/register
|
||||||
--recursive
|
--recursive
|
||||||
test/unit/**/*.js
|
test/unit/**/*.js
|
||||||
test/common/test.js
|
test/common/test.js
|
||||||
@@ -48,6 +48,7 @@
|
|||||||
"npm-run-all": "^4.1.2",
|
"npm-run-all": "^4.1.2",
|
||||||
"rollup": "^0.53.0",
|
"rollup": "^0.53.0",
|
||||||
"rollup-plugin-typescript": "^0.8.1",
|
"rollup-plugin-typescript": "^0.8.1",
|
||||||
|
"source-map-support": "^0.5.2",
|
||||||
"style-loader": "^0.19.1",
|
"style-loader": "^0.19.1",
|
||||||
"svelte": "^1.49.1",
|
"svelte": "^1.49.1",
|
||||||
"svelte-loader": "^2.3.2",
|
"svelte-loader": "^2.3.2",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import pkg from './package.json';
|
|||||||
const external = [].concat(
|
const external = [].concat(
|
||||||
Object.keys(pkg.dependencies),
|
Object.keys(pkg.dependencies),
|
||||||
Object.keys(process.binding('natives')),
|
Object.keys(process.binding('natives')),
|
||||||
'sapper'
|
'sapper/core.js'
|
||||||
);
|
);
|
||||||
|
|
||||||
const paths = {
|
const paths = {
|
||||||
@@ -18,10 +18,11 @@ export default [
|
|||||||
output: {
|
output: {
|
||||||
file: 'cli.js',
|
file: 'cli.js',
|
||||||
format: 'cjs',
|
format: 'cjs',
|
||||||
banner: '#!/usr/bin/env node'
|
banner: '#!/usr/bin/env node',
|
||||||
|
paths,
|
||||||
|
sourcemap: true
|
||||||
},
|
},
|
||||||
external,
|
external,
|
||||||
paths,
|
|
||||||
plugins: [
|
plugins: [
|
||||||
typescript({
|
typescript({
|
||||||
typescript: require('typescript')
|
typescript: require('typescript')
|
||||||
@@ -35,10 +36,11 @@ export default [
|
|||||||
output: {
|
output: {
|
||||||
file: 'core.js',
|
file: 'core.js',
|
||||||
format: 'cjs',
|
format: 'cjs',
|
||||||
banner: '#!/usr/bin/env node'
|
banner: '#!/usr/bin/env node',
|
||||||
|
paths,
|
||||||
|
sourcemap: true
|
||||||
},
|
},
|
||||||
external,
|
external,
|
||||||
paths,
|
|
||||||
plugins: [
|
plugins: [
|
||||||
typescript({
|
typescript({
|
||||||
typescript: require('typescript')
|
typescript: require('typescript')
|
||||||
@@ -51,10 +53,11 @@ export default [
|
|||||||
input: 'src/middleware/index.js',
|
input: 'src/middleware/index.js',
|
||||||
output: {
|
output: {
|
||||||
file: 'middleware.js',
|
file: 'middleware.js',
|
||||||
format: 'cjs'
|
format: 'cjs',
|
||||||
|
paths,
|
||||||
|
sourcemap: true
|
||||||
},
|
},
|
||||||
external,
|
external,
|
||||||
paths,
|
|
||||||
plugins: [
|
plugins: [
|
||||||
typescript({
|
typescript({
|
||||||
typescript: require('typescript')
|
typescript: require('typescript')
|
||||||
@@ -67,10 +70,11 @@ export default [
|
|||||||
input: 'src/runtime/index.ts',
|
input: 'src/runtime/index.ts',
|
||||||
output: {
|
output: {
|
||||||
file: 'runtime.js',
|
file: 'runtime.js',
|
||||||
format: 'es'
|
format: 'es',
|
||||||
|
paths,
|
||||||
|
sourcemap: true
|
||||||
},
|
},
|
||||||
external,
|
external,
|
||||||
paths,
|
|
||||||
plugins: [
|
plugins: [
|
||||||
typescript({
|
typescript({
|
||||||
typescript: require('typescript')
|
typescript: require('typescript')
|
||||||
@@ -83,10 +87,11 @@ export default [
|
|||||||
input: 'src/webpack/index.js',
|
input: 'src/webpack/index.js',
|
||||||
output: {
|
output: {
|
||||||
file: 'webpack/config.js',
|
file: 'webpack/config.js',
|
||||||
format: 'cjs'
|
format: 'cjs',
|
||||||
|
paths,
|
||||||
|
sourcemap: true
|
||||||
},
|
},
|
||||||
external,
|
external,
|
||||||
paths,
|
|
||||||
plugins: [
|
plugins: [
|
||||||
typescript({
|
typescript({
|
||||||
typescript: require('typescript')
|
typescript: require('typescript')
|
||||||
|
|||||||
1
runtime.js.map
Normal file
1
runtime.js.map
Normal file
File diff suppressed because one or more lines are too long
@@ -1,10 +1,11 @@
|
|||||||
import { build, export as exporter } from 'sapper/core.js';
|
import { build, export as exporter } from 'sapper/core.js';
|
||||||
|
import { dest, dev, entry, src } from '../config.js';
|
||||||
|
|
||||||
const cmd = process.argv[2];
|
const cmd = process.argv[2];
|
||||||
const start = Date.now();
|
const start = Date.now();
|
||||||
|
|
||||||
if (cmd === 'build') {
|
if (cmd === 'build') {
|
||||||
build()
|
build({ dest, dev, entry, src })
|
||||||
.then(() => {
|
.then(() => {
|
||||||
const elapsed = Date.now() - start;
|
const elapsed = Date.now() - start;
|
||||||
console.error(`built in ${elapsed}ms`); // TODO beautify this, e.g. 'built in 4.7 seconds'
|
console.error(`built in ${elapsed}ms`); // TODO beautify this, e.g. 'built in 4.7 seconds'
|
||||||
@@ -15,8 +16,8 @@ if (cmd === 'build') {
|
|||||||
} else if (cmd === 'export') {
|
} else if (cmd === 'export') {
|
||||||
const start = Date.now();
|
const start = Date.now();
|
||||||
|
|
||||||
build()
|
build({ dest, dev, entry, src })
|
||||||
.then(() => exporter())
|
.then(() => exporter({ src, dest }))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
const elapsed = Date.now() - start;
|
const elapsed = Date.now() - start;
|
||||||
console.error(`extracted in ${elapsed}ms`); // TODO beautify this, e.g. 'built in 4.7 seconds'
|
console.error(`extracted in ${elapsed}ms`); // TODO beautify this, e.g. 'built in 4.7 seconds'
|
||||||
|
|||||||
@@ -4,17 +4,16 @@ import * as fs from 'fs';
|
|||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import mkdirp from 'mkdirp';
|
import mkdirp from 'mkdirp';
|
||||||
import rimraf from 'rimraf';
|
import rimraf from 'rimraf';
|
||||||
import { client, server } from './utils/compilers.js';
|
import * as compilers from './utils/compilers.js';
|
||||||
import create_app from './utils/create_app.js';
|
import create_app from './utils/create_app.js';
|
||||||
import generate_asset_cache from './generate_asset_cache.js';
|
import generate_asset_cache from './generate_asset_cache.js';
|
||||||
import { dest } from '../config.js';
|
|
||||||
|
|
||||||
export default () => {
|
export default function build({ dest, dev, entry, src }) {
|
||||||
mkdirp.sync(dest);
|
mkdirp.sync(dest);
|
||||||
rimraf.sync(path.join(dest, '**/*'));
|
rimraf.sync(path.join(dest, '**/*'));
|
||||||
|
|
||||||
// create main.js and server-routes.js
|
// create main.js and server-routes.js
|
||||||
create_app();
|
create_app({ dev, entry, src });
|
||||||
|
|
||||||
return new Promise((fulfil, reject) => {
|
return new Promise((fulfil, reject) => {
|
||||||
function handleErrors(err, stats) {
|
function handleErrors(err, stats) {
|
||||||
@@ -29,19 +28,21 @@ export default () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
client.run((err, clientStats) => {
|
const { client, server } = compilers.get_compilers(); // TODO refactor
|
||||||
handleErrors(err, clientStats);
|
|
||||||
const clientInfo = clientStats.toJson();
|
|
||||||
fs.writeFileSync(path.join(dest, 'stats.client.json'), JSON.stringify(clientInfo, null, ' '));
|
|
||||||
|
|
||||||
server.run((err, serverStats) => {
|
client.run((err, client_stats) => {
|
||||||
handleErrors(err, serverStats);
|
handleErrors(err, client_stats);
|
||||||
const serverInfo = serverStats.toJson();
|
const client_info = client_stats.toJson();
|
||||||
fs.writeFileSync(path.join(dest, 'stats.server.json'), JSON.stringify(serverInfo, null, ' '));
|
fs.writeFileSync(path.join(dest, 'stats.client.json'), JSON.stringify(client_info, null, ' '));
|
||||||
|
|
||||||
generate_asset_cache(clientInfo, serverInfo);
|
server.run((err, server_stats) => {
|
||||||
|
handleErrors(err, server_stats);
|
||||||
|
const server_info = server_stats.toJson();
|
||||||
|
fs.writeFileSync(path.join(dest, 'stats.server.json'), JSON.stringify(server_info, null, ' '));
|
||||||
|
|
||||||
|
generate_asset_cache({ src, dest, dev, client_info, server_info });
|
||||||
fulfil();
|
fulfil();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
}
|
||||||
|
|||||||
@@ -5,8 +5,7 @@ import cheerio from 'cheerio';
|
|||||||
import fetch from 'node-fetch';
|
import fetch from 'node-fetch';
|
||||||
import URL from 'url-parse';
|
import URL from 'url-parse';
|
||||||
import generate_asset_cache from './generate_asset_cache.js';
|
import generate_asset_cache from './generate_asset_cache.js';
|
||||||
import { dest } from '../config.js';
|
// import middleware from '../middleware/index.js';
|
||||||
import middleware from '../middleware/index.js';
|
|
||||||
|
|
||||||
const { PORT = 3000, OUTPUT_DIR = 'dist' } = process.env;
|
const { PORT = 3000, OUTPUT_DIR = 'dist' } = process.env;
|
||||||
|
|
||||||
@@ -18,14 +17,16 @@ function read_json(file) {
|
|||||||
return JSON.parse(sander.readFileSync(file, { encoding: 'utf-8' }));
|
return JSON.parse(sander.readFileSync(file, { encoding: 'utf-8' }));
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function() {
|
export default function exporter({ src, dest }) { // TODO dest is a terrible name in this context
|
||||||
// Prep output directory
|
// Prep output directory
|
||||||
sander.rimrafSync(OUTPUT_DIR);
|
sander.rimrafSync(OUTPUT_DIR);
|
||||||
|
|
||||||
const { service_worker } = generate_asset_cache(
|
const { service_worker } = generate_asset_cache({
|
||||||
read_json(path.join(dest, 'stats.client.json')),
|
src, dest,
|
||||||
read_json(path.join(dest, 'stats.server.json'))
|
dev: false,
|
||||||
);
|
client_info: read_json(path.join(dest, 'stats.client.json')),
|
||||||
|
server_info: read_json(path.join(dest, 'stats.server.json'))
|
||||||
|
});
|
||||||
|
|
||||||
sander.copydirSync('assets').to(OUTPUT_DIR);
|
sander.copydirSync('assets').to(OUTPUT_DIR);
|
||||||
sander.copydirSync(dest, 'client').to(OUTPUT_DIR, 'client');
|
sander.copydirSync(dest, 'client').to(OUTPUT_DIR, 'client');
|
||||||
@@ -62,7 +63,7 @@ export default function() {
|
|||||||
return fetch(url, opts);
|
return fetch(url, opts);
|
||||||
};
|
};
|
||||||
|
|
||||||
app.use(middleware());
|
app.use(require('./middleware')()); // TODO this is filthy
|
||||||
const server = app.listen(PORT);
|
const server = app.listen(PORT);
|
||||||
|
|
||||||
const seen = new Set();
|
const seen = new Set();
|
||||||
|
|||||||
@@ -3,18 +3,19 @@ import * as path from 'path';
|
|||||||
import glob from 'glob';
|
import glob from 'glob';
|
||||||
import * as templates from './templates.js';
|
import * as templates from './templates.js';
|
||||||
import * as route_manager from './route_manager.js';
|
import * as route_manager from './route_manager.js';
|
||||||
import { dest, dev } from '../config.js';
|
|
||||||
|
|
||||||
function ensure_array(thing) {
|
function ensure_array(thing) {
|
||||||
return Array.isArray(thing) ? thing : [thing]; // omg webpack what the HELL are you doing
|
return Array.isArray(thing) ? thing : [thing]; // omg webpack what the HELL are you doing
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function generate_asset_cache(clientInfo, serverInfo) {
|
export default function generate_asset_cache({ src, dest, dev, client_info, server_info }) {
|
||||||
const main_file = `/client/${ensure_array(clientInfo.assetsByChunkName.main)[0]}`;
|
templates.create_templates(); // TODO refactor this...
|
||||||
|
|
||||||
const chunk_files = clientInfo.assets.map(chunk => `/client/${chunk.name}`);
|
const main_file = `/client/${ensure_array(client_info.assetsByChunkName.main)[0]}`;
|
||||||
|
|
||||||
const service_worker = generate_service_worker(chunk_files);
|
const chunk_files = client_info.assets.map(chunk => `/client/${chunk.name}`);
|
||||||
|
|
||||||
|
const service_worker = generate_service_worker({ chunk_files, src });
|
||||||
const index = generate_index(main_file);
|
const index = generate_index(main_file);
|
||||||
|
|
||||||
if (dev) {
|
if (dev) {
|
||||||
@@ -34,7 +35,7 @@ export default function generate_asset_cache(clientInfo, serverInfo) {
|
|||||||
}, {}),
|
}, {}),
|
||||||
|
|
||||||
routes: route_manager.routes.reduce((lookup, route) => {
|
routes: route_manager.routes.reduce((lookup, route) => {
|
||||||
lookup[route.id] = `/client/${ensure_array(clientInfo.assetsByChunkName[route.id])[0]}`;
|
lookup[route.id] = `/client/${ensure_array(client_info.assetsByChunkName[route.id])[0]}`;
|
||||||
return lookup;
|
return lookup;
|
||||||
}, {}),
|
}, {}),
|
||||||
|
|
||||||
@@ -43,16 +44,18 @@ export default function generate_asset_cache(clientInfo, serverInfo) {
|
|||||||
},
|
},
|
||||||
|
|
||||||
server: {
|
server: {
|
||||||
entry: path.resolve(dest, 'server', serverInfo.assetsByChunkName.main)
|
entry: path.resolve(dest, 'server', server_info.assetsByChunkName.main)
|
||||||
},
|
},
|
||||||
|
|
||||||
service_worker
|
service_worker
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function generate_service_worker(chunk_files) {
|
function generate_service_worker({ chunk_files, src }) {
|
||||||
const assets = glob.sync('**', { cwd: 'assets', nodir: true });
|
const assets = glob.sync('**', { cwd: 'assets', nodir: true });
|
||||||
|
|
||||||
|
route_manager.update({ src }); // TODO refactor
|
||||||
|
|
||||||
const route_code = `[${
|
const route_code = `[${
|
||||||
route_manager.routes
|
route_manager.routes
|
||||||
.filter(route => route.type === 'page')
|
.filter(route => route.type === 'page')
|
||||||
|
|||||||
@@ -6,5 +6,6 @@ export { default as build } from './build.js';
|
|||||||
export { default as export } from './export.js';
|
export { default as export } from './export.js';
|
||||||
export { default as generate_asset_cache } from './generate_asset_cache.js';
|
export { default as generate_asset_cache } from './generate_asset_cache.js';
|
||||||
export { default as create_app } from './utils/create_app.js';
|
export { default as create_app } from './utils/create_app.js';
|
||||||
|
export { default as create_routes } from './utils/create_routes.js';
|
||||||
|
|
||||||
export { compilers, route_manager, templates };
|
export { compilers, route_manager, templates };
|
||||||
@@ -1,32 +1,12 @@
|
|||||||
import glob from 'glob';
|
import glob from 'glob';
|
||||||
import create_routes from './utils/create_routes.js';
|
import create_routes from './utils/create_routes.js';
|
||||||
import { src, dev } from '../config.js';
|
|
||||||
|
|
||||||
const callbacks = [];
|
|
||||||
|
|
||||||
export function onchange(fn) {
|
|
||||||
callbacks.push(fn);
|
|
||||||
}
|
|
||||||
|
|
||||||
export let routes;
|
export let routes;
|
||||||
|
|
||||||
function update() {
|
export function update({ src }) {
|
||||||
routes = create_routes(
|
routes = create_routes(
|
||||||
glob.sync('**/*.+(html|js|mjs)', { cwd: src })
|
glob.sync('**/*.+(html|js|mjs)', { cwd: src })
|
||||||
);
|
);
|
||||||
|
|
||||||
callbacks.forEach(fn => fn());
|
return routes;
|
||||||
}
|
}
|
||||||
|
|
||||||
update();
|
|
||||||
|
|
||||||
if (dev) {
|
|
||||||
const watcher = require('chokidar').watch(`${src}/**/*.+(html|js|mjs)`, {
|
|
||||||
ignoreInitial: true,
|
|
||||||
persistent: false
|
|
||||||
});
|
|
||||||
|
|
||||||
watcher.on('add', update);
|
|
||||||
watcher.on('change', update);
|
|
||||||
watcher.on('unlink', update);
|
|
||||||
}
|
|
||||||
@@ -3,7 +3,6 @@ import glob from 'glob';
|
|||||||
import chalk from 'chalk';
|
import chalk from 'chalk';
|
||||||
import framer from 'code-frame';
|
import framer from 'code-frame';
|
||||||
import { locate } from 'locate-character';
|
import { locate } from 'locate-character';
|
||||||
import { dev } from '../config.js';
|
|
||||||
|
|
||||||
let templates;
|
let templates;
|
||||||
|
|
||||||
@@ -16,7 +15,7 @@ function error(e) {
|
|||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_templates() {
|
export function create_templates() {
|
||||||
templates = glob.sync('*.html', { cwd: 'templates' })
|
templates = glob.sync('*.html', { cwd: 'templates' })
|
||||||
.map(file => {
|
.map(file => {
|
||||||
const template = fs.readFileSync(`templates/${file}`, 'utf-8');
|
const template = fs.readFileSync(`templates/${file}`, 'utf-8');
|
||||||
@@ -99,19 +98,6 @@ function create_templates() {
|
|||||||
.sort((a, b) => b.specificity - a.specificity);
|
.sort((a, b) => b.specificity - a.specificity);
|
||||||
}
|
}
|
||||||
|
|
||||||
create_templates();
|
|
||||||
|
|
||||||
if (dev) {
|
|
||||||
const watcher = require('chokidar').watch('templates/**.html', {
|
|
||||||
ignoreInitial: true,
|
|
||||||
persistent: false
|
|
||||||
});
|
|
||||||
|
|
||||||
watcher.on('add', create_templates);
|
|
||||||
watcher.on('change', create_templates);
|
|
||||||
watcher.on('unlink', create_templates);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function render(status, data) {
|
export function render(status, data) {
|
||||||
const template = templates.find(template => template.test(status));
|
const template = templates.find(template => template.test(status));
|
||||||
if (template) return template.render(data);
|
if (template) return template.render(data);
|
||||||
|
|||||||
@@ -3,10 +3,25 @@ import relative from 'require-relative';
|
|||||||
|
|
||||||
const webpack = relative('webpack', process.cwd());
|
const webpack = relative('webpack', process.cwd());
|
||||||
|
|
||||||
export const client = webpack(
|
export let client;
|
||||||
require(path.resolve('webpack.client.config.js'))
|
export let server;
|
||||||
);
|
|
||||||
|
|
||||||
export const server = webpack(
|
export function get_compilers() {
|
||||||
require(path.resolve('webpack.server.config.js'))
|
return {
|
||||||
);
|
client: webpack(
|
||||||
|
require(path.resolve('webpack.client.config.js'))
|
||||||
|
),
|
||||||
|
|
||||||
|
server: webpack(
|
||||||
|
require(path.resolve('webpack.server.config.js'))
|
||||||
|
)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// export const client = webpack(
|
||||||
|
// require(path.resolve('webpack.client.config.js'))
|
||||||
|
// );
|
||||||
|
|
||||||
|
// export const server = webpack(
|
||||||
|
// require(path.resolve('webpack.server.config.js'))
|
||||||
|
// );
|
||||||
@@ -1,13 +1,15 @@
|
|||||||
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 { src, entry, dev } from '../../config.js';
|
import * as templates from '../templates.js';
|
||||||
|
|
||||||
function posixify(file) {
|
function posixify(file) {
|
||||||
return file.replace(/[/\\]/g, '/');
|
return file.replace(/[/\\]/g, '/');
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_app() {
|
function create_app({ src, dev, entry }) {
|
||||||
|
// const { routes } = route_manager;
|
||||||
|
route_manager.update({ src });
|
||||||
const { routes } = route_manager;
|
const { routes } = route_manager;
|
||||||
|
|
||||||
function create_client_main() {
|
function create_client_main() {
|
||||||
@@ -66,17 +68,31 @@ function create_app() {
|
|||||||
create_server_routes();
|
create_server_routes();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev) {
|
export function start_watching({ src }) {
|
||||||
route_manager.onchange(create_app);
|
const chokidar = require('chokidar');
|
||||||
|
|
||||||
const watcher = require('chokidar').watch(`templates/main.js`, {
|
const watch = (glob, callback) => {
|
||||||
ignoreInitial: true,
|
const watcher = chokidar.watch(glob, {
|
||||||
persistent: false
|
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();
|
||||||
});
|
});
|
||||||
|
|
||||||
watcher.on('add', create_app);
|
watch('templates/**.html', () => {
|
||||||
watcher.on('change', create_app);
|
templates.create_templates();
|
||||||
watcher.on('unlink', create_app);
|
// TODO reload current page?
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export default create_app;
|
export default create_app;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
|
||||||
export default function create_matchers(files) {
|
export default function create_routes(files) {
|
||||||
const routes = files
|
const routes = files
|
||||||
.map(file => {
|
.map(file => {
|
||||||
if (/(^|\/|\\)_/.test(file)) return;
|
if (/(^|\/|\\)_/.test(file)) return;
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ 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';
|
||||||
import create_watcher from './create_watcher.js';
|
import create_watcher from './create_watcher.js';
|
||||||
import { dest, dev } from '../config.js';
|
import { dest, dev, entry, src } from '../config.js';
|
||||||
|
|
||||||
function connect_dev() {
|
function connect_dev() {
|
||||||
create_app();
|
create_app({ dev, entry, src });
|
||||||
|
|
||||||
const watcher = create_watcher();
|
const watcher = create_watcher();
|
||||||
|
|
||||||
@@ -64,10 +64,12 @@ function connect_dev() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function connect_prod() {
|
function connect_prod() {
|
||||||
const asset_cache = generate_asset_cache(
|
const asset_cache = generate_asset_cache({
|
||||||
read_json(path.join(dest, 'stats.client.json')),
|
src, dest,
|
||||||
read_json(path.join(dest, 'stats.server.json'))
|
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([
|
const middleware = compose_handlers([
|
||||||
set_req_pathname,
|
set_req_pathname,
|
||||||
|
|||||||
@@ -1,13 +1,5 @@
|
|||||||
import * as path from 'path';
|
const path = require('path');
|
||||||
import * as assert from 'assert';
|
const assert = require('assert');
|
||||||
|
|
||||||
// import express from 'express';
|
|
||||||
// import Nightmare from 'nightmare';
|
|
||||||
// import serve from 'serve-static';
|
|
||||||
// import walkSync from 'walk-sync';
|
|
||||||
// import fetch from 'node-fetch';
|
|
||||||
|
|
||||||
// TODO reintegrate these as imports
|
|
||||||
const Nightmare = require('nightmare');
|
const Nightmare = require('nightmare');
|
||||||
const express = require('express');
|
const express = require('express');
|
||||||
const serve = require('serve-static');
|
const serve = require('serve-static');
|
||||||
@@ -94,8 +86,10 @@ function run(env) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return exec_promise.then(() => {
|
return exec_promise.then(() => {
|
||||||
const resolved = require.resolve('../..');
|
const resolved = require.resolve('../../middleware.js');
|
||||||
delete require.cache[resolved];
|
delete require.cache[resolved];
|
||||||
|
delete require.cache[require.resolve('../../core.js')]; // TODO remove this
|
||||||
|
|
||||||
sapper = require(resolved);
|
sapper = require(resolved);
|
||||||
|
|
||||||
return require('get-port')();
|
return require('get-port')();
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import * as assert from 'assert';
|
const assert = require('assert');
|
||||||
|
const { create_routes } = require('../../core.js');
|
||||||
import create_routes from '../../src/core/utils/create_routes.js';
|
|
||||||
|
|
||||||
describe('create_routes', () => {
|
describe('create_routes', () => {
|
||||||
it('sorts routes correctly', () => {
|
it('sorts routes correctly', () => {
|
||||||
|
|||||||
@@ -68,3 +68,4 @@ var index = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
module.exports = index;
|
module.exports = index;
|
||||||
|
//# sourceMappingURL=config.js.map
|
||||||
|
|||||||
1
webpack/config.js.map
Normal file
1
webpack/config.js.map
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"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