diff --git a/.gitignore b/.gitignore
index 7ecf62a..87d5ec9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,19 +1,12 @@
.DS_Store
yarn.lock
+yarn-error.log
node_modules
cypress/screenshots
test/app/.sapper
test/app/app/manifest
test/app/export
test/app/build
-runtime.js
-runtime.js.map
-cli.js
-cli.js.map
-middleware.js
-middleware.js.map
-core.js
-core.js.map
-webpack/config.js
-webpack/config.js.map
-yarn-error.log
\ No newline at end of file
+*.ts.js
+*.ts.js.map
+!rollup.config.js
\ No newline at end of file
diff --git a/cli.ts.js b/cli.ts.js
deleted file mode 100644
index 158cb90..0000000
--- a/cli.ts.js
+++ /dev/null
@@ -1,504 +0,0 @@
-'use strict';
-
-function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
-
-var tslib_1 = require('tslib');
-var fs = require('fs');
-var path = require('path');
-var clorox = require('clorox');
-var mkdirp = _interopDefault(require('mkdirp'));
-var rimraf = _interopDefault(require('rimraf'));
-var __core_ts_js = require('./core.ts.js');
-var __chunk1_js = require('./chunk1.js');
-var child_process = require('child_process');
-var sander = require('sander');
-var polka = _interopDefault(require('polka'));
-var cheerio = _interopDefault(require('cheerio'));
-var URL = _interopDefault(require('url-parse'));
-var fetch = _interopDefault(require('node-fetch'));
-var ports = require('port-authority');
-var http = require('http');
-var format_messages = _interopDefault(require('webpack-format-messages'));
-var prettyMs = _interopDefault(require('pretty-ms'));
-var sade = _interopDefault(require('sade'));
-
-function build() {
- return tslib_1.__awaiter(this, void 0, void 0, function () {
- var output, routes, _a, client, server, serviceworker, client_stats, server_stats, serviceworker_stats;
- return tslib_1.__generator(this, function (_b) {
- switch (_b.label) {
- case 0:
- output = __chunk1_js.dest();
- mkdirp.sync(output);
- rimraf.sync(path.join(output, '**/*'));
- routes = __core_ts_js.create_routes();
- // create app/manifest/client.js and app/manifest/server.js
- __core_ts_js.create_app({ routes: routes, src: __chunk1_js.src, dev: __chunk1_js.dev });
- _a = __core_ts_js.create_compilers(), client = _a.client, server = _a.server, serviceworker = _a.serviceworker;
- return [4 /*yield*/, compile(client)];
- case 1:
- client_stats = _b.sent();
- console.log(clorox.inverse("\nbuilt client"));
- console.log(client_stats.toString({ colors: true }));
- fs.writeFileSync(path.join(output, 'client_info.json'), JSON.stringify(client_stats.toJson()));
- return [4 /*yield*/, compile(server)];
- case 2:
- server_stats = _b.sent();
- console.log(clorox.inverse("\nbuilt server"));
- console.log(server_stats.toString({ colors: true }));
- if (!serviceworker) return [3 /*break*/, 4];
- __core_ts_js.create_serviceworker({
- routes: routes,
- client_files: client_stats.toJson().assets.map(function (chunk) { return "/client/" + chunk.name; }),
- src: __chunk1_js.src
- });
- return [4 /*yield*/, compile(serviceworker)];
- case 3:
- serviceworker_stats = _b.sent();
- console.log(clorox.inverse("\nbuilt service worker"));
- console.log(serviceworker_stats.toString({ colors: true }));
- _b.label = 4;
- case 4: return [2 /*return*/];
- }
- });
- });
-}
-function compile(compiler) {
- return new Promise(function (fulfil, reject) {
- compiler.run(function (err, stats) {
- if (err) {
- reject(err);
- process.exit(1);
- }
- if (stats.hasErrors()) {
- console.error(stats.toString({ colors: true }));
- reject(new Error("Encountered errors while building app"));
- }
- else {
- fulfil(stats);
- }
- });
- });
-}
-
-var app = polka();
-function exporter(export_dir) {
- return tslib_1.__awaiter(this, void 0, void 0, function () {
- function handle(url) {
- if (url.origin !== origin)
- return;
- if (seen.has(url.pathname))
- return;
- seen.add(url.pathname);
- return fetch(url.href)
- .then(function (r) {
- if (r.headers.get('Content-Type') === 'text/html') {
- return r.text().then(function (body) {
- var $ = cheerio.load(body);
- var hrefs = [];
- $('a[href]').each(function (i, $a) {
- hrefs.push($a.attribs.href);
- });
- return hrefs.reduce(function (promise, href) {
- return promise.then(function () { return handle(new URL(href, url.href)); });
- }, Promise.resolve());
- });
- }
- })["catch"](function (err) {
- console.error("Error rendering " + url.pathname + ": " + err.message);
- });
- }
- var build_dir, port, origin, proc, seen, saved;
- return tslib_1.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- build_dir = __chunk1_js.dest();
- // Prep output directory
- sander.rimrafSync(export_dir);
- sander.copydirSync('assets').to(export_dir);
- sander.copydirSync(build_dir, 'client').to(export_dir, 'client');
- if (sander.existsSync(build_dir, 'service-worker.js')) {
- sander.copyFileSync(build_dir, 'service-worker.js').to(export_dir, 'service-worker.js');
- }
- return [4 /*yield*/, ports.find(3000)];
- case 1:
- port = _a.sent();
- origin = "http://localhost:" + port;
- proc = child_process.fork(path.resolve(build_dir + "/server.js"), [], {
- cwd: process.cwd(),
- env: {
- PORT: port,
- NODE_ENV: 'production',
- SAPPER_DEST: build_dir,
- SAPPER_EXPORT: 'true'
- }
- });
- seen = new Set();
- saved = new Set();
- proc.on('message', function (message) {
- if (!message.__sapper__)
- return;
- var url = new URL(message.url, origin);
- if (saved.has(url.pathname))
- return;
- saved.add(url.pathname);
- if (message.type === 'text/html') {
- var file = export_dir + "/" + url.pathname + "/index.html";
- sander.writeFileSync(file, message.body);
- }
- else {
- var file = export_dir + "/" + url.pathname;
- sander.writeFileSync(file, message.body);
- }
- });
- return [2 /*return*/, ports.wait(port)
- .then(function () { return handle(new URL(origin)); }) // TODO all static routes
- .then(function () { return proc.kill(); })];
- }
- });
- });
-}
-
-function deferred() {
- var d = {};
- d.promise = new Promise(function (fulfil, reject) {
- d.fulfil = fulfil;
- d.reject = reject;
- });
- return d;
-}
-function create_hot_update_server(port, interval) {
- if (interval === void 0) { interval = 10000; }
- var clients = new Set();
- var server = http.createServer(function (req, res) {
- if (req.url !== '/__sapper__')
- return;
- req.socket.setKeepAlive(true);
- res.writeHead(200, {
- 'Access-Control-Allow-Origin': '*',
- 'Access-Control-Allow-Headers': 'Cache-Control',
- 'Content-Type': 'text/event-stream;charset=utf-8',
- 'Cache-Control': 'no-cache, no-transform',
- 'Connection': 'keep-alive',
- // While behind nginx, event stream should not be buffered:
- // http://nginx.org/docs/http/ngx_http_proxy_module.html#proxy_buffering
- 'X-Accel-Buffering': 'no'
- });
- res.write('\n');
- clients.add(res);
- req.on('close', function () {
- clients["delete"](res);
- });
- });
- server.listen(port);
- function send(data) {
- clients.forEach(function (client) {
- client.write("data: " + JSON.stringify(data) + "\n\n");
- });
- }
- setInterval(function () {
- send(null);
- }, interval);
- return { send: send };
-}
-function dev(port) {
- return tslib_1.__awaiter(this, void 0, void 0, function () {
- function restart_build(filename) {
- if (restarting)
- return;
- restarting = true;
- build = {
- unique_warnings: new Set(),
- unique_errors: new Set()
- };
- process.nextTick(function () {
- restarting = false;
- });
- console.log("\n" + clorox.bold.cyan(path.relative(process.cwd(), filename)) + " changed. rebuilding...");
- }
- function watch(compiler, _a) {
- var name = _a.name, _b = _a.invalid, invalid = _b === void 0 ? noop : _b, _c = _a.error, error = _c === void 0 ? noop : _c, result = _a.result;
- compiler.hooks.invalid.tap('sapper', function (filename) {
- invalid(filename);
- });
- compiler.watch({}, function (err, stats) {
- if (err) {
- console.error(clorox.red("\u2717 " + name));
- console.error(clorox.red(err.message));
- error(err);
- }
- else {
- var messages = format_messages(stats);
- var info = stats.toJson();
- if (messages.errors.length > 0) {
- console.log(clorox.bold.red("\u2717 " + name));
- var filtered = messages.errors.filter(function (message) {
- return !build.unique_errors.has(message);
- });
- filtered.forEach(function (message) {
- build.unique_errors.add(message);
- console.log(message);
- });
- var hidden = messages.errors.length - filtered.length;
- if (hidden > 0) {
- console.log(hidden + " duplicate " + (hidden === 1 ? 'error' : 'errors') + " hidden\n");
- }
- }
- else {
- if (messages.warnings.length > 0) {
- console.log(clorox.bold.yellow("\u2022 " + name));
- var filtered = messages.warnings.filter(function (message) {
- return !build.unique_warnings.has(message);
- });
- filtered.forEach(function (message) {
- build.unique_warnings.add(message);
- console.log(message + "\n");
- });
- var hidden = messages.warnings.length - filtered.length;
- if (hidden > 0) {
- console.log(hidden + " duplicate " + (hidden === 1 ? 'warning' : 'warnings') + " hidden\n");
- }
- }
- else {
- console.log(clorox.bold.green("\u2714 " + name) + " " + clorox.gray("(" + prettyMs(info.time) + ")"));
- }
- result(info);
- }
- }
- });
- }
- var dir, dev_port, routes, hot_update_server, proc, deferreds, restarting, build, compilers, watch_serviceworker;
- return tslib_1.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- process.env.NODE_ENV = 'development';
- dir = __chunk1_js.dest();
- rimraf.sync(dir);
- mkdirp.sync(dir);
- return [4 /*yield*/, ports.find(10000)];
- case 1:
- dev_port = _a.sent();
- routes = __core_ts_js.create_routes();
- __core_ts_js.create_app({ routes: routes, dev_port: dev_port });
- hot_update_server = create_hot_update_server(dev_port);
- watch_files('routes/**/*', ['add', 'unlink'], function () {
- var routes = __core_ts_js.create_routes();
- __core_ts_js.create_app({ routes: routes, dev_port: dev_port });
- });
- watch_files('app/template.html', ['change'], function () {
- hot_update_server.send({
- action: 'reload'
- });
- });
- process.on('exit', function () {
- // sometimes webpack crashes, so we need to kill our children
- if (proc)
- proc.kill();
- });
- deferreds = {
- server: deferred(),
- client: deferred()
- };
- restarting = false;
- build = {
- unique_warnings: new Set(),
- unique_errors: new Set()
- };
- compilers = __core_ts_js.create_compilers();
- watch(compilers.server, {
- name: 'server',
- invalid: function (filename) {
- restart_build(filename);
- // TODO print message
- deferreds.server = deferred();
- },
- result: function (info) {
- // TODO log compile errors/warnings
- fs.writeFileSync(path.join(dir, 'server_info.json'), JSON.stringify(info, null, ' '));
- deferreds.client.promise.then(function () {
- function restart() {
- ports.wait(port).then(deferreds.server.fulfil);
- }
- if (proc) {
- proc.kill();
- proc.on('exit', restart);
- }
- else {
- restart();
- }
- proc = child_process.fork(dir + "/server.js", [], {
- cwd: process.cwd(),
- env: Object.assign({
- PORT: port
- }, process.env)
- });
- });
- }
- });
- watch(compilers.client, {
- name: 'client',
- invalid: function (filename) {
- restart_build(filename);
- deferreds.client = deferred();
- // TODO we should delete old assets. due to a webpack bug
- // i don't even begin to comprehend, this is apparently
- // quite difficult
- },
- result: function (info) {
- fs.writeFileSync(path.join(dir, 'client_info.json'), JSON.stringify(info, null, ' '));
- deferreds.client.fulfil();
- var client_files = info.assets.map(function (chunk) { return "/client/" + chunk.name; });
- deferreds.server.promise.then(function () {
- hot_update_server.send({
- status: 'completed'
- });
- });
- __core_ts_js.create_serviceworker({
- routes: __core_ts_js.create_routes(),
- client_files: client_files
- });
- watch_serviceworker();
- }
- });
- watch_serviceworker = compilers.serviceworker
- ? function () {
- watch_serviceworker = noop;
- watch(compilers.serviceworker, {
- name: 'service worker',
- result: function (info) {
- fs.writeFileSync(path.join(dir, 'serviceworker_info.json'), JSON.stringify(info, null, ' '));
- }
- });
- }
- : noop;
- return [2 /*return*/];
- }
- });
- });
-}
-function noop() { }
-function watch_files(pattern, events, callback) {
- var chokidar = require('chokidar');
- var watcher = chokidar.watch(pattern, {
- persistent: true,
- ignoreInitial: true
- });
- events.forEach(function (event) {
- watcher.on(event, callback);
- });
-}
-
-var version = "0.8.4";
-
-var _this = undefined;
-var prog = sade('sapper').version(version);
-prog.command('dev')
- .describe('Start a development server')
- .option('-p, --port', 'Specify a port')
- .action(function (opts) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
- var port;
- return tslib_1.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- port = opts.port || +process.env.PORT;
- if (!port) return [3 /*break*/, 2];
- return [4 /*yield*/, ports.check(port)];
- case 1:
- if (!(_a.sent())) {
- console.log(clorox.bold.red("> Port " + port + " is unavailable"));
- return [2 /*return*/];
- }
- return [3 /*break*/, 4];
- case 2: return [4 /*yield*/, ports.find(3000)];
- case 3:
- port = _a.sent();
- _a.label = 4;
- case 4:
- dev(port);
- return [2 /*return*/];
- }
- });
-}); });
-prog.command('build [dest]')
- .describe('Create a production-ready version of your app')
- .action(function (dest) {
- if (dest === void 0) { dest = 'build'; }
- console.log("> Building...");
- process.env.NODE_ENV = 'production';
- process.env.SAPPER_DEST = dest;
- var start = Date.now();
- build()
- .then(function () {
- var elapsed = Date.now() - start;
- console.error("\n> Finished in " + prettyMs(elapsed) + ". Type " + clorox.bold.cyan(dest === 'build' ? 'npx sapper start' : "npx sapper start " + dest) + " to run the app.");
- })["catch"](function (err) {
- console.error(err ? err.details || err.stack || err.message || err : 'Unknown error');
- });
-});
-prog.command('start [dir]')
- .describe('Start your app')
- .option('-p, --port', 'Specify a port')
- .action(function (dir, opts) {
- if (dir === void 0) { dir = 'build'; }
- return tslib_1.__awaiter(_this, void 0, void 0, function () {
- var port, resolved, server;
- return tslib_1.__generator(this, function (_a) {
- switch (_a.label) {
- case 0:
- port = opts.port || +process.env.PORT;
- resolved = path.resolve(dir);
- server = path.resolve(dir, 'server.js');
- if (!fs.existsSync(server)) {
- console.log(clorox.bold.red("> " + dir + "/server.js does not exist \u2014 type " + clorox.bold.cyan(dir === 'build' ? "npx sapper build" : "npx sapper build " + dir) + " to create it"));
- return [2 /*return*/];
- }
- if (!port) return [3 /*break*/, 2];
- return [4 /*yield*/, ports.check(port)];
- case 1:
- if (!(_a.sent())) {
- console.log(clorox.bold.red("> Port " + port + " is unavailable"));
- return [2 /*return*/];
- }
- return [3 /*break*/, 4];
- case 2: return [4 /*yield*/, ports.find(3000)];
- case 3:
- port = _a.sent();
- _a.label = 4;
- case 4:
- child_process.fork(server, [], {
- cwd: process.cwd(),
- env: Object.assign({
- NODE_ENV: 'production',
- PORT: port,
- SAPPER_DEST: dir
- }, process.env)
- });
- return [2 /*return*/];
- }
- });
- });
-});
-prog.command('export [dest]')
- .describe('Export your app as static files (if possible)')
- .action(function (dest) {
- if (dest === void 0) { dest = 'export'; }
- console.log("> Building...");
- process.env.NODE_ENV = 'production';
- process.env.SAPPER_DEST = '.sapper/.export';
- var start = Date.now();
- build()
- .then(function () {
- var elapsed = Date.now() - start;
- console.error("\n> Built in " + prettyMs(elapsed) + ". Exporting...");
- })
- .then(function () { return exporter(dest); })
- .then(function () {
- var elapsed = Date.now() - start;
- console.error("\n> Finished in " + prettyMs(elapsed) + ". Type " + clorox.bold.cyan("npx serve " + dest) + " to run the app.");
- })["catch"](function (err) {
- console.error(err ? err.details || err.stack || err.message || err : 'Unknown error');
- });
-});
-// TODO upgrade
-prog.parse(process.argv);
-//# sourceMappingURL=./cli.ts.js.map
diff --git a/core.ts.js b/core.ts.js
deleted file mode 100644
index c6272d4..0000000
--- a/core.ts.js
+++ /dev/null
@@ -1,229 +0,0 @@
-'use strict';
-
-Object.defineProperty(exports, '__esModule', { value: true });
-
-function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
-
-var fs = require('fs');
-var __chunk1_js = require('./chunk1.js');
-var path = require('path');
-var mkdirp = _interopDefault(require('mkdirp'));
-var glob = _interopDefault(require('glob'));
-var relative = _interopDefault(require('require-relative'));
-
-function write(file, code) {
- fs.writeFileSync(file, code);
- fudge_mtime(file);
-}
-function posixify(file) {
- return file.replace(/[/\\]/g, '/');
-}
-function fudge_mtime(file) {
- // need to fudge the mtime so that webpack doesn't go doolally
- var _a = fs.statSync(file), atime = _a.atime, mtime = _a.mtime;
- fs.utimesSync(file, new Date(atime.getTime() - 999999), new Date(mtime.getTime() - 999999));
-}
-
-// in dev mode, we avoid touching the fs unnecessarily
-var last_client_manifest = null;
-var last_server_manifest = null;
-function create_app(_a) {
- var routes = _a.routes, dev_port = _a.dev_port;
- mkdirp.sync('app/manifest');
- var client_manifest = generate_client(routes, dev_port);
- var server_manifest = generate_server(routes);
- if (client_manifest !== last_client_manifest) {
- write("app/manifest/client.js", client_manifest);
- last_client_manifest = client_manifest;
- }
- if (server_manifest !== last_server_manifest) {
- write("app/manifest/server.js", server_manifest);
- last_server_manifest = server_manifest;
- }
-}
-function generate_client(routes, dev_port) {
- var code = ("\n\t\t// This file is generated by Sapper \u2014 do not edit it!\n\t\texport const routes = [\n\t\t\t" + routes
- .map(function (route) {
- if (route.type !== 'page') {
- return "{ pattern: " + route.pattern + ", ignore: true }";
- }
- var file = posixify("../../routes/" + route.file);
- if (route.id === '_4xx' || route.id === '_5xx') {
- return "{ error: '" + route.id.slice(1) + "', load: () => import(/* webpackChunkName: \"" + route.id + "\" */ '" + file + "') }";
- }
- var params = route.params.length === 0
- ? '{}'
- : "{ " + route.params.map(function (part, i) { return part + ": match[" + (i + 1) + "]"; }).join(', ') + " }";
- return "{ pattern: " + route.pattern + ", params: " + (route.params.length > 0 ? "match" : "()") + " => (" + params + "), load: () => import(/* webpackChunkName: \"" + route.id + "\" */ '" + file + "') }";
- })
- .join(',\n\t') + "\n\t\t];").replace(/^\t\t/gm, '').trim();
- if (__chunk1_js.dev()) {
- var sapper_dev_client = posixify(path.resolve(__dirname, 'sapper-dev-client.js'));
- code += ("\n\n\t\t\tif (module.hot) {\n\t\t\t\timport('" + sapper_dev_client + "').then(client => {\n\t\t\t\t\tclient.connect(" + dev_port + ");\n\t\t\t\t});\n\t\t\t}").replace(/^\t{3}/gm, '');
- }
- return code;
-}
-function generate_server(routes) {
- var code = ("\n\t\t// This file is generated by Sapper \u2014 do not edit it!\n\t\t" + routes
- .map(function (route) {
- var file = posixify("../../routes/" + route.file);
- return route.type === 'page'
- ? "import " + route.id + " from '" + file + "';"
- : "import * as " + route.id + " from '" + file + "';";
- })
- .join('\n') + "\n\n\t\texport const routes = [\n\t\t\t" + routes
- .map(function (route) {
- var file = posixify("../../" + route.file);
- if (route.id === '_4xx' || route.id === '_5xx') {
- return "{ error: '" + route.id.slice(1) + "', module: " + route.id + " }";
- }
- var params = route.params.length === 0
- ? '{}'
- : "{ " + route.params.map(function (part, i) { return part + ": match[" + (i + 1) + "]"; }).join(', ') + " }";
- return "{ id: '" + route.id + "', type: '" + route.type + "', pattern: " + route.pattern + ", params: " + (route.params.length > 0 ? "match" : "()") + " => (" + params + "), module: " + route.id + " }";
- })
- .join(',\n\t') + "\n\t\t];").replace(/^\t\t/gm, '').trim();
- return code;
-}
-
-function create_serviceworker(_a) {
- var routes = _a.routes, client_files = _a.client_files;
- var assets = glob.sync('**', { cwd: 'assets', nodir: true });
- var code = ("\n\t\t// This file is generated by Sapper \u2014 do not edit it!\n\t\texport const timestamp = " + Date.now() + ";\n\n\t\texport const assets = [\n\t" + assets.map(function (x) { return "\"" + x + "\""; }).join(',\n\t') + "\n];\n\n\t\texport const shell = [\n\t" + client_files.map(function (x) { return "\"" + x + "\""; }).join(',\n\t') + "\n];\n\n\t\texport const routes = [\n\t" + routes.filter(function (r) { return r.type === 'page' && !/^_[45]xx$/.test(r.id); }).map(function (r) { return "{ pattern: " + r.pattern + " }"; }).join(',\n\t') + "\n];\n\t").replace(/^\t\t/gm, '').trim();
- write('app/manifest/service-worker.js', code);
-}
-
-function create_compilers() {
- var webpack = relative('webpack', process.cwd());
- var serviceworker_config = try_require(path.resolve('webpack/service-worker.config.js'));
- return {
- client: webpack(require(path.resolve('webpack/client.config.js'))),
- server: webpack(require(path.resolve('webpack/server.config.js'))),
- serviceworker: serviceworker_config && webpack(serviceworker_config)
- };
-}
-function try_require(specifier) {
- try {
- return require(specifier);
- }
- catch (err) {
- if (err.code === 'MODULE_NOT_FOUND')
- return null;
- throw err;
- }
-}
-
-function create_routes(_a) {
- var files = (_a === void 0 ? { files: glob.sync('**/*.*', { cwd: __chunk1_js.src(), nodir: true }) } : _a).files;
- var routes = files
- .map(function (file) {
- if (/(^|\/|\\)_/.test(file))
- return;
- if (/]\[/.test(file)) {
- throw new Error("Invalid route " + file + " \u2014 parameters must be separated");
- }
- var base = file.replace(/\.[^/.]+$/, '');
- var parts = base.split('/'); // glob output is always posix-style
- if (parts[parts.length - 1] === 'index')
- parts.pop();
- var id = (parts.join('_').replace(/[[\]]/g, '$').replace(/^\d/, '_$&').replace(/[^a-zA-Z0-9_$]/g, '_')) || '_';
- var params = [];
- var param_pattern = /\[([^\]]+)\]/g;
- var match;
- while (match = param_pattern.exec(base)) {
- params.push(match[1]);
- }
- // TODO can we do all this with sub-parts? or does
- // nesting make that impossible?
- var pattern_string = '';
- var i = parts.length;
- var nested = true;
- while (i--) {
- var part = encodeURIComponent(parts[i].normalize()).replace(/%5B/g, '[').replace(/%5D/g, ']');
- var dynamic = ~part.indexOf('[');
- if (dynamic) {
- var matcher = part.replace(param_pattern, "([^/]+?)");
- pattern_string = nested ? "(?:\\/" + matcher + pattern_string + ")?" : "\\/" + matcher + pattern_string;
- }
- else {
- nested = false;
- pattern_string = "\\/" + part + pattern_string;
- }
- }
- var pattern = new RegExp("^" + pattern_string + "\\/?$");
- var test = function (url) { return pattern.test(url); };
- var exec = function (url) {
- var match = pattern.exec(url);
- if (!match)
- return;
- var result = {};
- params.forEach(function (param, i) {
- result[param] = match[i + 1];
- });
- return result;
- };
- return {
- id: id,
- type: path.extname(file) === '.html' ? 'page' : 'route',
- file: file,
- pattern: pattern,
- test: test,
- exec: exec,
- parts: parts,
- params: params
- };
- })
- .filter(Boolean)
- .sort(function (a, b) {
- if (a.file === '4xx.html' || a.file === '5xx.html')
- return -1;
- if (b.file === '4xx.html' || b.file === '5xx.html')
- return 1;
- var max = Math.max(a.parts.length, b.parts.length);
- for (var i = 0; i < max; i += 1) {
- var a_part = a.parts[i];
- var b_part = b.parts[i];
- if (!a_part)
- return -1;
- if (!b_part)
- return 1;
- var a_sub_parts = get_sub_parts(a_part);
- var b_sub_parts = get_sub_parts(b_part);
- var max_1 = Math.max(a_sub_parts.length, b_sub_parts.length);
- for (var i_1 = 0; i_1 < max_1; i_1 += 1) {
- var a_sub_part = a_sub_parts[i_1];
- var b_sub_part = b_sub_parts[i_1];
- if (!a_sub_part)
- return 1; // b is more specific, so goes first
- if (!b_sub_part)
- return -1;
- if (a_sub_part.dynamic !== b_sub_part.dynamic) {
- return a_sub_part.dynamic ? 1 : -1;
- }
- if (!a_sub_part.dynamic && a_sub_part.content !== b_sub_part.content) {
- return b_sub_part.content.length - a_sub_part.content.length;
- }
- }
- }
- throw new Error("The " + a.file + " and " + b.file + " routes clash");
- });
- return routes;
-}
-function get_sub_parts(part) {
- return part.split(/[\[\]]/)
- .map(function (content, i) {
- if (!content)
- return null;
- return {
- content: content,
- dynamic: i % 2 === 1
- };
- })
- .filter(Boolean);
-}
-
-exports.create_app = create_app;
-exports.create_serviceworker = create_serviceworker;
-exports.create_compilers = create_compilers;
-exports.create_routes = create_routes;
-//# sourceMappingURL=./core.ts.js.map
diff --git a/middleware.js b/middleware.js
new file mode 100644
index 0000000..9e3b243
--- /dev/null
+++ b/middleware.js
@@ -0,0 +1,2 @@
+// TODO write to this file, instead of middleware.ts.js
+module.exports = require('./middleware.ts.js');
\ No newline at end of file
diff --git a/middleware.ts.js b/middleware.ts.js
deleted file mode 100644
index ab8c158..0000000
--- a/middleware.ts.js
+++ /dev/null
@@ -1,274 +0,0 @@
-'use strict';
-
-function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
-
-var __chunk1_js = require('./chunk1.js');
-var fs = require('fs');
-var path = require('path');
-var devalue = _interopDefault(require('devalue'));
-var sourceMapSupport = _interopDefault(require('source-map-support'));
-
-var mime_raw = "application/andrew-inset\t\t\tez\napplication/applixware\t\t\t\taw\napplication/atom+xml\t\t\t\tatom\napplication/atomcat+xml\t\t\t\tatomcat\napplication/atomsvc+xml\t\t\t\tatomsvc\napplication/ccxml+xml\t\t\t\tccxml\napplication/cdmi-capability\t\t\tcdmia\napplication/cdmi-container\t\t\tcdmic\napplication/cdmi-domain\t\t\t\tcdmid\napplication/cdmi-object\t\t\t\tcdmio\napplication/cdmi-queue\t\t\t\tcdmiq\napplication/cu-seeme\t\t\t\tcu\napplication/davmount+xml\t\t\tdavmount\napplication/docbook+xml\t\t\t\tdbk\napplication/dssc+der\t\t\t\tdssc\napplication/dssc+xml\t\t\t\txdssc\napplication/ecmascript\t\t\t\tecma\napplication/emma+xml\t\t\t\temma\napplication/epub+zip\t\t\t\tepub\napplication/exi\t\t\t\t\texi\napplication/font-tdpfr\t\t\t\tpfr\napplication/gml+xml\t\t\t\tgml\napplication/gpx+xml\t\t\t\tgpx\napplication/gxf\t\t\t\t\tgxf\napplication/hyperstudio\t\t\t\tstk\napplication/inkml+xml\t\t\t\tink inkml\napplication/ipfix\t\t\t\tipfix\napplication/java-archive\t\t\tjar\napplication/java-serialized-object\t\tser\napplication/java-vm\t\t\t\tclass\napplication/javascript\t\t\t\tjs\napplication/json\t\t\t\tjson\napplication/jsonml+json\t\t\t\tjsonml\napplication/lost+xml\t\t\t\tlostxml\napplication/mac-binhex40\t\t\thqx\napplication/mac-compactpro\t\t\tcpt\napplication/mads+xml\t\t\t\tmads\napplication/marc\t\t\t\tmrc\napplication/marcxml+xml\t\t\t\tmrcx\napplication/mathematica\t\t\t\tma nb mb\napplication/mathml+xml\t\t\t\tmathml\napplication/mbox\t\t\t\tmbox\napplication/mediaservercontrol+xml\t\tmscml\napplication/metalink+xml\t\t\tmetalink\napplication/metalink4+xml\t\t\tmeta4\napplication/mets+xml\t\t\t\tmets\napplication/mods+xml\t\t\t\tmods\napplication/mp21\t\t\t\tm21 mp21\napplication/mp4\t\t\t\t\tmp4s\napplication/msword\t\t\t\tdoc dot\napplication/mxf\t\t\t\t\tmxf\napplication/octet-stream\tbin dms lrf mar so dist distz pkg bpk dump elc deploy\napplication/oda\t\t\t\t\toda\napplication/oebps-package+xml\t\t\topf\napplication/ogg\t\t\t\t\togx\napplication/omdoc+xml\t\t\t\tomdoc\napplication/onenote\t\t\t\tonetoc onetoc2 onetmp onepkg\napplication/oxps\t\t\t\toxps\napplication/patch-ops-error+xml\t\t\txer\napplication/pdf\t\t\t\t\tpdf\napplication/pgp-encrypted\t\t\tpgp\napplication/pgp-signature\t\t\tasc sig\napplication/pics-rules\t\t\t\tprf\napplication/pkcs10\t\t\t\tp10\napplication/pkcs7-mime\t\t\t\tp7m p7c\napplication/pkcs7-signature\t\t\tp7s\napplication/pkcs8\t\t\t\tp8\napplication/pkix-attr-cert\t\t\tac\napplication/pkix-cert\t\t\t\tcer\napplication/pkix-crl\t\t\t\tcrl\napplication/pkix-pkipath\t\t\tpkipath\napplication/pkixcmp\t\t\t\tpki\napplication/pls+xml\t\t\t\tpls\napplication/postscript\t\t\t\tai eps ps\napplication/prs.cww\t\t\t\tcww\napplication/pskc+xml\t\t\t\tpskcxml\napplication/rdf+xml\t\t\t\trdf\napplication/reginfo+xml\t\t\t\trif\napplication/relax-ng-compact-syntax\t\trnc\napplication/resource-lists+xml\t\t\trl\napplication/resource-lists-diff+xml\t\trld\napplication/rls-services+xml\t\t\trs\napplication/rpki-ghostbusters\t\t\tgbr\napplication/rpki-manifest\t\t\tmft\napplication/rpki-roa\t\t\t\troa\napplication/rsd+xml\t\t\t\trsd\napplication/rss+xml\t\t\t\trss\napplication/rtf\t\t\t\t\trtf\napplication/sbml+xml\t\t\t\tsbml\napplication/scvp-cv-request\t\t\tscq\napplication/scvp-cv-response\t\t\tscs\napplication/scvp-vp-request\t\t\tspq\napplication/scvp-vp-response\t\t\tspp\napplication/sdp\t\t\t\t\tsdp\napplication/set-payment-initiation\t\tsetpay\napplication/set-registration-initiation\t\tsetreg\napplication/shf+xml\t\t\t\tshf\napplication/smil+xml\t\t\t\tsmi smil\napplication/sparql-query\t\t\trq\napplication/sparql-results+xml\t\t\tsrx\napplication/srgs\t\t\t\tgram\napplication/srgs+xml\t\t\t\tgrxml\napplication/sru+xml\t\t\t\tsru\napplication/ssdl+xml\t\t\t\tssdl\napplication/ssml+xml\t\t\t\tssml\napplication/tei+xml\t\t\t\ttei teicorpus\napplication/thraud+xml\t\t\t\ttfi\napplication/timestamped-data\t\t\ttsd\napplication/vnd.3gpp.pic-bw-large\t\tplb\napplication/vnd.3gpp.pic-bw-small\t\tpsb\napplication/vnd.3gpp.pic-bw-var\t\t\tpvb\napplication/vnd.3gpp2.tcap\t\t\ttcap\napplication/vnd.3m.post-it-notes\t\tpwn\napplication/vnd.accpac.simply.aso\t\taso\napplication/vnd.accpac.simply.imp\t\timp\napplication/vnd.acucobol\t\t\tacu\napplication/vnd.acucorp\t\t\t\tatc acutc\napplication/vnd.adobe.air-application-installer-package+zip\tair\napplication/vnd.adobe.formscentral.fcdt\t\tfcdt\napplication/vnd.adobe.fxp\t\t\tfxp fxpl\napplication/vnd.adobe.xdp+xml\t\t\txdp\napplication/vnd.adobe.xfdf\t\t\txfdf\napplication/vnd.ahead.space\t\t\tahead\napplication/vnd.airzip.filesecure.azf\t\tazf\napplication/vnd.airzip.filesecure.azs\t\tazs\napplication/vnd.amazon.ebook\t\t\tazw\napplication/vnd.americandynamics.acc\t\tacc\napplication/vnd.amiga.ami\t\t\tami\napplication/vnd.android.package-archive\t\tapk\napplication/vnd.anser-web-certificate-issue-initiation\tcii\napplication/vnd.anser-web-funds-transfer-initiation\tfti\napplication/vnd.antix.game-component\t\tatx\napplication/vnd.apple.installer+xml\t\tmpkg\napplication/vnd.apple.mpegurl\t\t\tm3u8\napplication/vnd.aristanetworks.swi\t\tswi\napplication/vnd.astraea-software.iota\t\tiota\napplication/vnd.audiograph\t\t\taep\napplication/vnd.blueice.multipass\t\tmpm\napplication/vnd.bmi\t\t\t\tbmi\napplication/vnd.businessobjects\t\t\trep\napplication/vnd.chemdraw+xml\t\t\tcdxml\napplication/vnd.chipnuts.karaoke-mmd\t\tmmd\napplication/vnd.cinderella\t\t\tcdy\napplication/vnd.claymore\t\t\tcla\napplication/vnd.cloanto.rp9\t\t\trp9\napplication/vnd.clonk.c4group\t\t\tc4g c4d c4f c4p c4u\napplication/vnd.cluetrust.cartomobile-config\t\tc11amc\napplication/vnd.cluetrust.cartomobile-config-pkg\tc11amz\napplication/vnd.commonspace\t\t\tcsp\napplication/vnd.contact.cmsg\t\t\tcdbcmsg\napplication/vnd.cosmocaller\t\t\tcmc\napplication/vnd.crick.clicker\t\t\tclkx\napplication/vnd.crick.clicker.keyboard\t\tclkk\napplication/vnd.crick.clicker.palette\t\tclkp\napplication/vnd.crick.clicker.template\t\tclkt\napplication/vnd.crick.clicker.wordbank\t\tclkw\napplication/vnd.criticaltools.wbs+xml\t\twbs\napplication/vnd.ctc-posml\t\t\tpml\napplication/vnd.cups-ppd\t\t\tppd\napplication/vnd.curl.car\t\t\tcar\napplication/vnd.curl.pcurl\t\t\tpcurl\napplication/vnd.dart\t\t\t\tdart\napplication/vnd.data-vision.rdz\t\t\trdz\napplication/vnd.dece.data\t\t\tuvf uvvf uvd uvvd\napplication/vnd.dece.ttml+xml\t\t\tuvt uvvt\napplication/vnd.dece.unspecified\t\tuvx uvvx\napplication/vnd.dece.zip\t\t\tuvz uvvz\napplication/vnd.denovo.fcselayout-link\t\tfe_launch\napplication/vnd.dna\t\t\t\tdna\napplication/vnd.dolby.mlp\t\t\tmlp\napplication/vnd.dpgraph\t\t\t\tdpg\napplication/vnd.dreamfactory\t\t\tdfac\napplication/vnd.ds-keypoint\t\t\tkpxx\napplication/vnd.dvb.ait\t\t\t\tait\napplication/vnd.dvb.service\t\t\tsvc\napplication/vnd.dynageo\t\t\t\tgeo\napplication/vnd.ecowin.chart\t\t\tmag\napplication/vnd.enliven\t\t\t\tnml\napplication/vnd.epson.esf\t\t\tesf\napplication/vnd.epson.msf\t\t\tmsf\napplication/vnd.epson.quickanime\t\tqam\napplication/vnd.epson.salt\t\t\tslt\napplication/vnd.epson.ssf\t\t\tssf\napplication/vnd.eszigno3+xml\t\t\tes3 et3\napplication/vnd.ezpix-album\t\t\tez2\napplication/vnd.ezpix-package\t\t\tez3\napplication/vnd.fdf\t\t\t\tfdf\napplication/vnd.fdsn.mseed\t\t\tmseed\napplication/vnd.fdsn.seed\t\t\tseed dataless\napplication/vnd.flographit\t\t\tgph\napplication/vnd.fluxtime.clip\t\t\tftc\napplication/vnd.framemaker\t\t\tfm frame maker book\napplication/vnd.frogans.fnc\t\t\tfnc\napplication/vnd.frogans.ltf\t\t\tltf\napplication/vnd.fsc.weblaunch\t\t\tfsc\napplication/vnd.fujitsu.oasys\t\t\toas\napplication/vnd.fujitsu.oasys2\t\t\toa2\napplication/vnd.fujitsu.oasys3\t\t\toa3\napplication/vnd.fujitsu.oasysgp\t\t\tfg5\napplication/vnd.fujitsu.oasysprs\t\tbh2\napplication/vnd.fujixerox.ddd\t\t\tddd\napplication/vnd.fujixerox.docuworks\t\txdw\napplication/vnd.fujixerox.docuworks.binder\txbd\napplication/vnd.fuzzysheet\t\t\tfzs\napplication/vnd.genomatix.tuxedo\t\ttxd\napplication/vnd.geogebra.file\t\t\tggb\napplication/vnd.geogebra.tool\t\t\tggt\napplication/vnd.geometry-explorer\t\tgex gre\napplication/vnd.geonext\t\t\t\tgxt\napplication/vnd.geoplan\t\t\t\tg2w\napplication/vnd.geospace\t\t\tg3w\napplication/vnd.gmx\t\t\t\tgmx\napplication/vnd.google-earth.kml+xml\t\tkml\napplication/vnd.google-earth.kmz\t\tkmz\napplication/vnd.grafeq\t\t\t\tgqf gqs\napplication/vnd.groove-account\t\t\tgac\napplication/vnd.groove-help\t\t\tghf\napplication/vnd.groove-identity-message\t\tgim\napplication/vnd.groove-injector\t\t\tgrv\napplication/vnd.groove-tool-message\t\tgtm\napplication/vnd.groove-tool-template\t\ttpl\napplication/vnd.groove-vcard\t\t\tvcg\napplication/vnd.hal+xml\t\t\t\thal\napplication/vnd.handheld-entertainment+xml\tzmm\napplication/vnd.hbci\t\t\t\thbci\napplication/vnd.hhe.lesson-player\t\tles\napplication/vnd.hp-hpgl\t\t\t\thpgl\napplication/vnd.hp-hpid\t\t\t\thpid\napplication/vnd.hp-hps\t\t\t\thps\napplication/vnd.hp-jlyt\t\t\t\tjlt\napplication/vnd.hp-pcl\t\t\t\tpcl\napplication/vnd.hp-pclxl\t\t\tpclxl\napplication/vnd.hydrostatix.sof-data\t\tsfd-hdstx\napplication/vnd.ibm.minipay\t\t\tmpy\napplication/vnd.ibm.modcap\t\t\tafp listafp list3820\napplication/vnd.ibm.rights-management\t\tirm\napplication/vnd.ibm.secure-container\t\tsc\napplication/vnd.iccprofile\t\t\ticc icm\napplication/vnd.igloader\t\t\tigl\napplication/vnd.immervision-ivp\t\t\tivp\napplication/vnd.immervision-ivu\t\t\tivu\napplication/vnd.insors.igm\t\t\tigm\napplication/vnd.intercon.formnet\t\txpw xpx\napplication/vnd.intergeo\t\t\ti2g\napplication/vnd.intu.qbo\t\t\tqbo\napplication/vnd.intu.qfx\t\t\tqfx\napplication/vnd.ipunplugged.rcprofile\t\trcprofile\napplication/vnd.irepository.package+xml\t\tirp\napplication/vnd.is-xpr\t\t\t\txpr\napplication/vnd.isac.fcs\t\t\tfcs\napplication/vnd.jam\t\t\t\tjam\napplication/vnd.jcp.javame.midlet-rms\t\trms\napplication/vnd.jisp\t\t\t\tjisp\napplication/vnd.joost.joda-archive\t\tjoda\napplication/vnd.kahootz\t\t\t\tktz ktr\napplication/vnd.kde.karbon\t\t\tkarbon\napplication/vnd.kde.kchart\t\t\tchrt\napplication/vnd.kde.kformula\t\t\tkfo\napplication/vnd.kde.kivio\t\t\tflw\napplication/vnd.kde.kontour\t\t\tkon\napplication/vnd.kde.kpresenter\t\t\tkpr kpt\napplication/vnd.kde.kspread\t\t\tksp\napplication/vnd.kde.kword\t\t\tkwd kwt\napplication/vnd.kenameaapp\t\t\thtke\napplication/vnd.kidspiration\t\t\tkia\napplication/vnd.kinar\t\t\t\tkne knp\napplication/vnd.koan\t\t\t\tskp skd skt skm\napplication/vnd.kodak-descriptor\t\tsse\napplication/vnd.las.las+xml\t\t\tlasxml\napplication/vnd.llamagraphics.life-balance.desktop\tlbd\napplication/vnd.llamagraphics.life-balance.exchange+xml\tlbe\napplication/vnd.lotus-1-2-3\t\t\t123\napplication/vnd.lotus-approach\t\t\tapr\napplication/vnd.lotus-freelance\t\t\tpre\napplication/vnd.lotus-notes\t\t\tnsf\napplication/vnd.lotus-organizer\t\t\torg\napplication/vnd.lotus-screencam\t\t\tscm\napplication/vnd.lotus-wordpro\t\t\tlwp\napplication/vnd.macports.portpkg\t\tportpkg\napplication/vnd.mcd\t\t\t\tmcd\napplication/vnd.medcalcdata\t\t\tmc1\napplication/vnd.mediastation.cdkey\t\tcdkey\napplication/vnd.mfer\t\t\t\tmwf\napplication/vnd.mfmp\t\t\t\tmfm\napplication/vnd.micrografx.flo\t\t\tflo\napplication/vnd.micrografx.igx\t\t\tigx\napplication/vnd.mif\t\t\t\tmif\napplication/vnd.mobius.daf\t\t\tdaf\napplication/vnd.mobius.dis\t\t\tdis\napplication/vnd.mobius.mbk\t\t\tmbk\napplication/vnd.mobius.mqy\t\t\tmqy\napplication/vnd.mobius.msl\t\t\tmsl\napplication/vnd.mobius.plc\t\t\tplc\napplication/vnd.mobius.txf\t\t\ttxf\napplication/vnd.mophun.application\t\tmpn\napplication/vnd.mophun.certificate\t\tmpc\napplication/vnd.mozilla.xul+xml\t\t\txul\napplication/vnd.ms-artgalry\t\t\tcil\napplication/vnd.ms-cab-compressed\t\tcab\napplication/vnd.ms-excel\t\t\txls xlm xla xlc xlt xlw\napplication/vnd.ms-excel.addin.macroenabled.12\t\txlam\napplication/vnd.ms-excel.sheet.binary.macroenabled.12\txlsb\napplication/vnd.ms-excel.sheet.macroenabled.12\t\txlsm\napplication/vnd.ms-excel.template.macroenabled.12\txltm\napplication/vnd.ms-fontobject\t\t\teot\napplication/vnd.ms-htmlhelp\t\t\tchm\napplication/vnd.ms-ims\t\t\t\tims\napplication/vnd.ms-lrm\t\t\t\tlrm\napplication/vnd.ms-officetheme\t\t\tthmx\napplication/vnd.ms-pki.seccat\t\t\tcat\napplication/vnd.ms-pki.stl\t\t\tstl\napplication/vnd.ms-powerpoint\t\t\tppt pps pot\napplication/vnd.ms-powerpoint.addin.macroenabled.12\t\tppam\napplication/vnd.ms-powerpoint.presentation.macroenabled.12\tpptm\napplication/vnd.ms-powerpoint.slide.macroenabled.12\t\tsldm\napplication/vnd.ms-powerpoint.slideshow.macroenabled.12\t\tppsm\napplication/vnd.ms-powerpoint.template.macroenabled.12\t\tpotm\napplication/vnd.ms-project\t\t\tmpp mpt\napplication/vnd.ms-word.document.macroenabled.12\tdocm\napplication/vnd.ms-word.template.macroenabled.12\tdotm\napplication/vnd.ms-works\t\t\twps wks wcm wdb\napplication/vnd.ms-wpl\t\t\t\twpl\napplication/vnd.ms-xpsdocument\t\t\txps\napplication/vnd.mseq\t\t\t\tmseq\napplication/vnd.musician\t\t\tmus\napplication/vnd.muvee.style\t\t\tmsty\napplication/vnd.mynfc\t\t\t\ttaglet\napplication/vnd.neurolanguage.nlu\t\tnlu\napplication/vnd.nitf\t\t\t\tntf nitf\napplication/vnd.noblenet-directory\t\tnnd\napplication/vnd.noblenet-sealer\t\t\tnns\napplication/vnd.noblenet-web\t\t\tnnw\napplication/vnd.nokia.n-gage.data\t\tngdat\napplication/vnd.nokia.n-gage.symbian.install\tn-gage\napplication/vnd.nokia.radio-preset\t\trpst\napplication/vnd.nokia.radio-presets\t\trpss\napplication/vnd.novadigm.edm\t\t\tedm\napplication/vnd.novadigm.edx\t\t\tedx\napplication/vnd.novadigm.ext\t\t\text\napplication/vnd.oasis.opendocument.chart\t\todc\napplication/vnd.oasis.opendocument.chart-template\totc\napplication/vnd.oasis.opendocument.database\t\todb\napplication/vnd.oasis.opendocument.formula\t\todf\napplication/vnd.oasis.opendocument.formula-template\todft\napplication/vnd.oasis.opendocument.graphics\t\todg\napplication/vnd.oasis.opendocument.graphics-template\totg\napplication/vnd.oasis.opendocument.image\t\todi\napplication/vnd.oasis.opendocument.image-template\toti\napplication/vnd.oasis.opendocument.presentation\t\todp\napplication/vnd.oasis.opendocument.presentation-template\totp\napplication/vnd.oasis.opendocument.spreadsheet\t\tods\napplication/vnd.oasis.opendocument.spreadsheet-template\tots\napplication/vnd.oasis.opendocument.text\t\t\todt\napplication/vnd.oasis.opendocument.text-master\t\todm\napplication/vnd.oasis.opendocument.text-template\tott\napplication/vnd.oasis.opendocument.text-web\t\toth\napplication/vnd.olpc-sugar\t\t\txo\napplication/vnd.oma.dd2+xml\t\t\tdd2\napplication/vnd.openofficeorg.extension\t\toxt\napplication/vnd.openxmlformats-officedocument.presentationml.presentation\tpptx\napplication/vnd.openxmlformats-officedocument.presentationml.slide\tsldx\napplication/vnd.openxmlformats-officedocument.presentationml.slideshow\tppsx\napplication/vnd.openxmlformats-officedocument.presentationml.template\tpotx\napplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet\txlsx\napplication/vnd.openxmlformats-officedocument.spreadsheetml.template\txltx\napplication/vnd.openxmlformats-officedocument.wordprocessingml.document\tdocx\napplication/vnd.openxmlformats-officedocument.wordprocessingml.template\tdotx\napplication/vnd.osgeo.mapguide.package\t\tmgp\napplication/vnd.osgi.dp\t\t\t\tdp\napplication/vnd.osgi.subsystem\t\t\tesa\napplication/vnd.palm\t\t\t\tpdb pqa oprc\napplication/vnd.pawaafile\t\t\tpaw\napplication/vnd.pg.format\t\t\tstr\napplication/vnd.pg.osasli\t\t\tei6\napplication/vnd.picsel\t\t\t\tefif\napplication/vnd.pmi.widget\t\t\twg\napplication/vnd.pocketlearn\t\t\tplf\napplication/vnd.powerbuilder6\t\t\tpbd\napplication/vnd.previewsystems.box\t\tbox\napplication/vnd.proteus.magazine\t\tmgz\napplication/vnd.publishare-delta-tree\t\tqps\napplication/vnd.pvi.ptid1\t\t\tptid\napplication/vnd.quark.quarkxpress\t\tqxd qxt qwd qwt qxl qxb\napplication/vnd.realvnc.bed\t\t\tbed\napplication/vnd.recordare.musicxml\t\tmxl\napplication/vnd.recordare.musicxml+xml\t\tmusicxml\napplication/vnd.rig.cryptonote\t\t\tcryptonote\napplication/vnd.rim.cod\t\t\t\tcod\napplication/vnd.rn-realmedia\t\t\trm\napplication/vnd.rn-realmedia-vbr\t\trmvb\napplication/vnd.route66.link66+xml\t\tlink66\napplication/vnd.sailingtracker.track\t\tst\napplication/vnd.seemail\t\t\t\tsee\napplication/vnd.sema\t\t\t\tsema\napplication/vnd.semd\t\t\t\tsemd\napplication/vnd.semf\t\t\t\tsemf\napplication/vnd.shana.informed.formdata\t\tifm\napplication/vnd.shana.informed.formtemplate\titp\napplication/vnd.shana.informed.interchange\tiif\napplication/vnd.shana.informed.package\t\tipk\napplication/vnd.simtech-mindmapper\t\ttwd twds\napplication/vnd.smaf\t\t\t\tmmf\napplication/vnd.smart.teacher\t\t\tteacher\napplication/vnd.solent.sdkm+xml\t\t\tsdkm sdkd\napplication/vnd.spotfire.dxp\t\t\tdxp\napplication/vnd.spotfire.sfs\t\t\tsfs\napplication/vnd.stardivision.calc\t\tsdc\napplication/vnd.stardivision.draw\t\tsda\napplication/vnd.stardivision.impress\t\tsdd\napplication/vnd.stardivision.math\t\tsmf\napplication/vnd.stardivision.writer\t\tsdw vor\napplication/vnd.stardivision.writer-global\tsgl\napplication/vnd.stepmania.package\t\tsmzip\napplication/vnd.stepmania.stepchart\t\tsm\napplication/vnd.sun.xml.calc\t\t\tsxc\napplication/vnd.sun.xml.calc.template\t\tstc\napplication/vnd.sun.xml.draw\t\t\tsxd\napplication/vnd.sun.xml.draw.template\t\tstd\napplication/vnd.sun.xml.impress\t\t\tsxi\napplication/vnd.sun.xml.impress.template\tsti\napplication/vnd.sun.xml.math\t\t\tsxm\napplication/vnd.sun.xml.writer\t\t\tsxw\napplication/vnd.sun.xml.writer.global\t\tsxg\napplication/vnd.sun.xml.writer.template\t\tstw\napplication/vnd.sus-calendar\t\t\tsus susp\napplication/vnd.svd\t\t\t\tsvd\napplication/vnd.symbian.install\t\t\tsis sisx\napplication/vnd.syncml+xml\t\t\txsm\napplication/vnd.syncml.dm+wbxml\t\t\tbdm\napplication/vnd.syncml.dm+xml\t\t\txdm\napplication/vnd.tao.intent-module-archive\ttao\napplication/vnd.tcpdump.pcap\t\t\tpcap cap dmp\napplication/vnd.tmobile-livetv\t\t\ttmo\napplication/vnd.trid.tpt\t\t\ttpt\napplication/vnd.triscape.mxs\t\t\tmxs\napplication/vnd.trueapp\t\t\t\ttra\napplication/vnd.ufdl\t\t\t\tufd ufdl\napplication/vnd.uiq.theme\t\t\tutz\napplication/vnd.umajin\t\t\t\tumj\napplication/vnd.unity\t\t\t\tunityweb\napplication/vnd.uoml+xml\t\t\tuoml\napplication/vnd.vcx\t\t\t\tvcx\napplication/vnd.visio\t\t\t\tvsd vst vss vsw\napplication/vnd.visionary\t\t\tvis\napplication/vnd.vsf\t\t\t\tvsf\napplication/vnd.wap.wbxml\t\t\twbxml\napplication/vnd.wap.wmlc\t\t\twmlc\napplication/vnd.wap.wmlscriptc\t\t\twmlsc\napplication/vnd.webturbo\t\t\twtb\napplication/vnd.wolfram.player\t\t\tnbp\napplication/vnd.wordperfect\t\t\twpd\napplication/vnd.wqd\t\t\t\twqd\napplication/vnd.wt.stf\t\t\t\tstf\napplication/vnd.xara\t\t\t\txar\napplication/vnd.xfdl\t\t\t\txfdl\napplication/vnd.yamaha.hv-dic\t\t\thvd\napplication/vnd.yamaha.hv-script\t\thvs\napplication/vnd.yamaha.hv-voice\t\t\thvp\napplication/vnd.yamaha.openscoreformat\t\t\tosf\napplication/vnd.yamaha.openscoreformat.osfpvg+xml\tosfpvg\napplication/vnd.yamaha.smaf-audio\t\tsaf\napplication/vnd.yamaha.smaf-phrase\t\tspf\napplication/vnd.yellowriver-custom-menu\t\tcmp\napplication/vnd.zul\t\t\t\tzir zirz\napplication/vnd.zzazz.deck+xml\t\t\tzaz\napplication/voicexml+xml\t\t\tvxml\napplication/widget\t\t\t\twgt\napplication/winhlp\t\t\t\thlp\napplication/wsdl+xml\t\t\t\twsdl\napplication/wspolicy+xml\t\t\twspolicy\napplication/x-7z-compressed\t\t\t7z\napplication/x-abiword\t\t\t\tabw\napplication/x-ace-compressed\t\t\tace\napplication/x-apple-diskimage\t\t\tdmg\napplication/x-authorware-bin\t\t\taab x32 u32 vox\napplication/x-authorware-map\t\t\taam\napplication/x-authorware-seg\t\t\taas\napplication/x-bcpio\t\t\t\tbcpio\napplication/x-bittorrent\t\t\ttorrent\napplication/x-blorb\t\t\t\tblb blorb\napplication/x-bzip\t\t\t\tbz\napplication/x-bzip2\t\t\t\tbz2 boz\napplication/x-cbr\t\t\t\tcbr cba cbt cbz cb7\napplication/x-cdlink\t\t\t\tvcd\napplication/x-cfs-compressed\t\t\tcfs\napplication/x-chat\t\t\t\tchat\napplication/x-chess-pgn\t\t\t\tpgn\napplication/x-conference\t\t\tnsc\napplication/x-cpio\t\t\t\tcpio\napplication/x-csh\t\t\t\tcsh\napplication/x-debian-package\t\t\tdeb udeb\napplication/x-dgc-compressed\t\t\tdgc\napplication/x-director\t\t\tdir dcr dxr cst cct cxt w3d fgd swa\napplication/x-doom\t\t\t\twad\napplication/x-dtbncx+xml\t\t\tncx\napplication/x-dtbook+xml\t\t\tdtb\napplication/x-dtbresource+xml\t\t\tres\napplication/x-dvi\t\t\t\tdvi\napplication/x-envoy\t\t\t\tevy\napplication/x-eva\t\t\t\teva\napplication/x-font-bdf\t\t\t\tbdf\napplication/x-font-ghostscript\t\t\tgsf\napplication/x-font-linux-psf\t\t\tpsf\napplication/x-font-pcf\t\t\t\tpcf\napplication/x-font-snf\t\t\t\tsnf\napplication/x-font-type1\t\t\tpfa pfb pfm afm\napplication/x-freearc\t\t\t\tarc\napplication/x-futuresplash\t\t\tspl\napplication/x-gca-compressed\t\t\tgca\napplication/x-glulx\t\t\t\tulx\napplication/x-gnumeric\t\t\t\tgnumeric\napplication/x-gramps-xml\t\t\tgramps\napplication/x-gtar\t\t\t\tgtar\napplication/x-hdf\t\t\t\thdf\napplication/x-install-instructions\t\tinstall\napplication/x-iso9660-image\t\t\tiso\napplication/x-java-jnlp-file\t\t\tjnlp\napplication/x-latex\t\t\t\tlatex\napplication/x-lzh-compressed\t\t\tlzh lha\napplication/x-mie\t\t\t\tmie\napplication/x-mobipocket-ebook\t\t\tprc mobi\napplication/x-ms-application\t\t\tapplication\napplication/x-ms-shortcut\t\t\tlnk\napplication/x-ms-wmd\t\t\t\twmd\napplication/x-ms-wmz\t\t\t\twmz\napplication/x-ms-xbap\t\t\t\txbap\napplication/x-msaccess\t\t\t\tmdb\napplication/x-msbinder\t\t\t\tobd\napplication/x-mscardfile\t\t\tcrd\napplication/x-msclip\t\t\t\tclp\napplication/x-msdownload\t\t\texe dll com bat msi\napplication/x-msmediaview\t\t\tmvb m13 m14\napplication/x-msmetafile\t\t\twmf wmz emf emz\napplication/x-msmoney\t\t\t\tmny\napplication/x-mspublisher\t\t\tpub\napplication/x-msschedule\t\t\tscd\napplication/x-msterminal\t\t\ttrm\napplication/x-mswrite\t\t\t\twri\napplication/x-netcdf\t\t\t\tnc cdf\napplication/x-nzb\t\t\t\tnzb\napplication/x-pkcs12\t\t\t\tp12 pfx\napplication/x-pkcs7-certificates\t\tp7b spc\napplication/x-pkcs7-certreqresp\t\t\tp7r\napplication/x-rar-compressed\t\t\trar\napplication/x-research-info-systems\t\tris\napplication/x-sh\t\t\t\tsh\napplication/x-shar\t\t\t\tshar\napplication/x-shockwave-flash\t\t\tswf\napplication/x-silverlight-app\t\t\txap\napplication/x-sql\t\t\t\tsql\napplication/x-stuffit\t\t\t\tsit\napplication/x-stuffitx\t\t\t\tsitx\napplication/x-subrip\t\t\t\tsrt\napplication/x-sv4cpio\t\t\t\tsv4cpio\napplication/x-sv4crc\t\t\t\tsv4crc\napplication/x-t3vm-image\t\t\tt3\napplication/x-tads\t\t\t\tgam\napplication/x-tar\t\t\t\ttar\napplication/x-tcl\t\t\t\ttcl\napplication/x-tex\t\t\t\ttex\napplication/x-tex-tfm\t\t\t\ttfm\napplication/x-texinfo\t\t\t\ttexinfo texi\napplication/x-tgif\t\t\t\tobj\napplication/x-ustar\t\t\t\tustar\napplication/x-wais-source\t\t\tsrc\napplication/x-x509-ca-cert\t\t\tder crt\napplication/x-xfig\t\t\t\tfig\napplication/x-xliff+xml\t\t\t\txlf\napplication/x-xpinstall\t\t\t\txpi\napplication/x-xz\t\t\t\txz\napplication/x-zmachine\t\t\t\tz1 z2 z3 z4 z5 z6 z7 z8\napplication/xaml+xml\t\t\t\txaml\napplication/xcap-diff+xml\t\t\txdf\napplication/xenc+xml\t\t\t\txenc\napplication/xhtml+xml\t\t\t\txhtml xht\napplication/xml\t\t\t\t\txml xsl\napplication/xml-dtd\t\t\t\tdtd\napplication/xop+xml\t\t\t\txop\napplication/xproc+xml\t\t\t\txpl\napplication/xslt+xml\t\t\t\txslt\napplication/xspf+xml\t\t\t\txspf\napplication/xv+xml\t\t\t\tmxml xhvml xvml xvm\napplication/yang\t\t\t\tyang\napplication/yin+xml\t\t\t\tyin\napplication/zip\t\t\t\t\tzip\naudio/adpcm\t\t\t\t\tadp\naudio/basic\t\t\t\t\tau snd\naudio/midi\t\t\t\t\tmid midi kar rmi\naudio/mp4\t\t\t\t\tm4a mp4a\naudio/mpeg\t\t\t\t\tmpga mp2 mp2a mp3 m2a m3a\naudio/ogg\t\t\t\t\toga ogg spx\naudio/s3m\t\t\t\t\ts3m\naudio/silk\t\t\t\t\tsil\naudio/vnd.dece.audio\t\t\t\tuva uvva\naudio/vnd.digital-winds\t\t\t\teol\naudio/vnd.dra\t\t\t\t\tdra\naudio/vnd.dts\t\t\t\t\tdts\naudio/vnd.dts.hd\t\t\t\tdtshd\naudio/vnd.lucent.voice\t\t\t\tlvp\naudio/vnd.ms-playready.media.pya\t\tpya\naudio/vnd.nuera.ecelp4800\t\t\tecelp4800\naudio/vnd.nuera.ecelp7470\t\t\tecelp7470\naudio/vnd.nuera.ecelp9600\t\t\tecelp9600\naudio/vnd.rip\t\t\t\t\trip\naudio/webm\t\t\t\t\tweba\naudio/x-aac\t\t\t\t\taac\naudio/x-aiff\t\t\t\t\taif aiff aifc\naudio/x-caf\t\t\t\t\tcaf\naudio/x-flac\t\t\t\t\tflac\naudio/x-matroska\t\t\t\tmka\naudio/x-mpegurl\t\t\t\t\tm3u\naudio/x-ms-wax\t\t\t\t\twax\naudio/x-ms-wma\t\t\t\t\twma\naudio/x-pn-realaudio\t\t\t\tram ra\naudio/x-pn-realaudio-plugin\t\t\trmp\naudio/x-wav\t\t\t\t\twav\naudio/xm\t\t\t\t\txm\nchemical/x-cdx\t\t\t\t\tcdx\nchemical/x-cif\t\t\t\t\tcif\nchemical/x-cmdf\t\t\t\t\tcmdf\nchemical/x-cml\t\t\t\t\tcml\nchemical/x-csml\t\t\t\t\tcsml\nchemical/x-xyz\t\t\t\t\txyz\nfont/collection\t\t\t\t\tttc\nfont/otf\t\t\t\t\totf\nfont/ttf\t\t\t\t\tttf\nfont/woff\t\t\t\t\twoff\nfont/woff2\t\t\t\t\twoff2\nimage/bmp\t\t\t\t\tbmp\nimage/cgm\t\t\t\t\tcgm\nimage/g3fax\t\t\t\t\tg3\nimage/gif\t\t\t\t\tgif\nimage/ief\t\t\t\t\tief\nimage/jpeg\t\t\t\t\tjpeg jpg jpe\nimage/ktx\t\t\t\t\tktx\nimage/png\t\t\t\t\tpng\nimage/prs.btif\t\t\t\t\tbtif\nimage/sgi\t\t\t\t\tsgi\nimage/svg+xml\t\t\t\t\tsvg svgz\nimage/tiff\t\t\t\t\ttiff tif\nimage/vnd.adobe.photoshop\t\t\tpsd\nimage/vnd.dece.graphic\t\t\t\tuvi uvvi uvg uvvg\nimage/vnd.djvu\t\t\t\t\tdjvu djv\nimage/vnd.dvb.subtitle\t\t\t\tsub\nimage/vnd.dwg\t\t\t\t\tdwg\nimage/vnd.dxf\t\t\t\t\tdxf\nimage/vnd.fastbidsheet\t\t\t\tfbs\nimage/vnd.fpx\t\t\t\t\tfpx\nimage/vnd.fst\t\t\t\t\tfst\nimage/vnd.fujixerox.edmics-mmr\t\t\tmmr\nimage/vnd.fujixerox.edmics-rlc\t\t\trlc\nimage/vnd.ms-modi\t\t\t\tmdi\nimage/vnd.ms-photo\t\t\t\twdp\nimage/vnd.net-fpx\t\t\t\tnpx\nimage/vnd.wap.wbmp\t\t\t\twbmp\nimage/vnd.xiff\t\t\t\t\txif\nimage/webp\t\t\t\t\twebp\nimage/x-3ds\t\t\t\t\t3ds\nimage/x-cmu-raster\t\t\t\tras\nimage/x-cmx\t\t\t\t\tcmx\nimage/x-freehand\t\t\t\tfh fhc fh4 fh5 fh7\nimage/x-icon\t\t\t\t\tico\nimage/x-mrsid-image\t\t\t\tsid\nimage/x-pcx\t\t\t\t\tpcx\nimage/x-pict\t\t\t\t\tpic pct\nimage/x-portable-anymap\t\t\t\tpnm\nimage/x-portable-bitmap\t\t\t\tpbm\nimage/x-portable-graymap\t\t\tpgm\nimage/x-portable-pixmap\t\t\t\tppm\nimage/x-rgb\t\t\t\t\trgb\nimage/x-tga\t\t\t\t\ttga\nimage/x-xbitmap\t\t\t\t\txbm\nimage/x-xpixmap\t\t\t\t\txpm\nimage/x-xwindowdump\t\t\t\txwd\nmessage/rfc822\t\t\t\t\teml mime\nmodel/iges\t\t\t\t\tigs iges\nmodel/mesh\t\t\t\t\tmsh mesh silo\nmodel/vnd.collada+xml\t\t\t\tdae\nmodel/vnd.dwf\t\t\t\t\tdwf\nmodel/vnd.gdl\t\t\t\t\tgdl\nmodel/vnd.gtw\t\t\t\t\tgtw\nmodel/vnd.mts\t\t\t\t\tmts\nmodel/vnd.vtu\t\t\t\t\tvtu\nmodel/vrml\t\t\t\t\twrl vrml\nmodel/x3d+binary\t\t\t\tx3db x3dbz\nmodel/x3d+vrml\t\t\t\t\tx3dv x3dvz\nmodel/x3d+xml\t\t\t\t\tx3d x3dz\ntext/cache-manifest\t\t\t\tappcache\ntext/calendar\t\t\t\t\tics ifb\ntext/css\t\t\t\t\tcss\ntext/csv\t\t\t\t\tcsv\ntext/html\t\t\t\t\thtml htm\ntext/n3\t\t\t\t\t\tn3\ntext/plain\t\t\t\t\ttxt text conf def list log in\ntext/prs.lines.tag\t\t\t\tdsc\ntext/richtext\t\t\t\t\trtx\ntext/sgml\t\t\t\t\tsgml sgm\ntext/tab-separated-values\t\t\ttsv\ntext/troff\t\t\t\t\tt tr roff man me ms\ntext/turtle\t\t\t\t\tttl\ntext/uri-list\t\t\t\t\turi uris urls\ntext/vcard\t\t\t\t\tvcard\ntext/vnd.curl\t\t\t\t\tcurl\ntext/vnd.curl.dcurl\t\t\t\tdcurl\ntext/vnd.curl.mcurl\t\t\t\tmcurl\ntext/vnd.curl.scurl\t\t\t\tscurl\ntext/vnd.dvb.subtitle\t\t\t\tsub\ntext/vnd.fly\t\t\t\t\tfly\ntext/vnd.fmi.flexstor\t\t\t\tflx\ntext/vnd.graphviz\t\t\t\tgv\ntext/vnd.in3d.3dml\t\t\t\t3dml\ntext/vnd.in3d.spot\t\t\t\tspot\ntext/vnd.sun.j2me.app-descriptor\t\tjad\ntext/vnd.wap.wml\t\t\t\twml\ntext/vnd.wap.wmlscript\t\t\t\twmls\ntext/x-asm\t\t\t\t\ts asm\ntext/x-c\t\t\t\t\tc cc cxx cpp h hh dic\ntext/x-fortran\t\t\t\t\tf for f77 f90\ntext/x-java-source\t\t\t\tjava\ntext/x-nfo\t\t\t\t\tnfo\ntext/x-opml\t\t\t\t\topml\ntext/x-pascal\t\t\t\t\tp pas\ntext/x-setext\t\t\t\t\tetx\ntext/x-sfv\t\t\t\t\tsfv\ntext/x-uuencode\t\t\t\t\tuu\ntext/x-vcalendar\t\t\t\tvcs\ntext/x-vcard\t\t\t\t\tvcf\nvideo/3gpp\t\t\t\t\t3gp\nvideo/3gpp2\t\t\t\t\t3g2\nvideo/h261\t\t\t\t\th261\nvideo/h263\t\t\t\t\th263\nvideo/h264\t\t\t\t\th264\nvideo/jpeg\t\t\t\t\tjpgv\nvideo/jpm\t\t\t\t\tjpm jpgm\nvideo/mj2\t\t\t\t\tmj2 mjp2\nvideo/mp4\t\t\t\t\tmp4 mp4v mpg4\nvideo/mpeg\t\t\t\t\tmpeg mpg mpe m1v m2v\nvideo/ogg\t\t\t\t\togv\nvideo/quicktime\t\t\t\t\tqt mov\nvideo/vnd.dece.hd\t\t\t\tuvh uvvh\nvideo/vnd.dece.mobile\t\t\t\tuvm uvvm\nvideo/vnd.dece.pd\t\t\t\tuvp uvvp\nvideo/vnd.dece.sd\t\t\t\tuvs uvvs\nvideo/vnd.dece.video\t\t\t\tuvv uvvv\nvideo/vnd.dvb.file\t\t\t\tdvb\nvideo/vnd.fvt\t\t\t\t\tfvt\nvideo/vnd.mpegurl\t\t\t\tmxu m4u\nvideo/vnd.ms-playready.media.pyv\t\tpyv\nvideo/vnd.uvvu.mp4\t\t\t\tuvu uvvu\nvideo/vnd.vivo\t\t\t\t\tviv\nvideo/webm\t\t\t\t\twebm\nvideo/x-f4v\t\t\t\t\tf4v\nvideo/x-fli\t\t\t\t\tfli\nvideo/x-flv\t\t\t\t\tflv\nvideo/x-m4v\t\t\t\t\tm4v\nvideo/x-matroska\t\t\t\tmkv mk3d mks\nvideo/x-mng\t\t\t\t\tmng\nvideo/x-ms-asf\t\t\t\t\tasf asx\nvideo/x-ms-vob\t\t\t\t\tvob\nvideo/x-ms-wm\t\t\t\t\twm\nvideo/x-ms-wmv\t\t\t\t\twmv\nvideo/x-ms-wmx\t\t\t\t\twmx\nvideo/x-ms-wvx\t\t\t\t\twvx\nvideo/x-msvideo\t\t\t\t\tavi\nvideo/x-sgi-movie\t\t\t\tmovie\nvideo/x-smv\t\t\t\t\tsmv\nx-conference/x-cooltalk\t\t\t\tice\n";
-
-var map = new Map();
-mime_raw.split('\n').forEach(function (row) {
- var match = /(.+?)\t+(.+)/.exec(row);
- if (!match)
- return;
- var type = match[1];
- var extensions = match[2].split(' ');
- extensions.forEach(function (ext) {
- map.set(ext, type);
- });
-});
-function lookup(file) {
- var match = /\.([^\.]+)$/.exec(file);
- return match && map.get(match[1]);
-}
-
-sourceMapSupport.install();
-function middleware(_a) {
- var routes = _a.routes;
- var output = __chunk1_js.dest();
- var client_info = JSON.parse(fs.readFileSync(path.join(output, 'client_info.json'), 'utf-8'));
- var middleware = compose_handlers([
- function (req, res, next) {
- req.pathname = req.url.replace(/\?.*/, '');
- next();
- },
- fs.existsSync(path.join(output, 'index.html')) && serve({
- pathname: '/index.html',
- cache_control: 'max-age=600'
- }),
- fs.existsSync(path.join(output, 'service-worker.js')) && serve({
- pathname: '/service-worker.js',
- cache_control: 'max-age=600'
- }),
- serve({
- prefix: '/client/',
- cache_control: 'max-age=31536000'
- }),
- get_route_handler(client_info.assetsByChunkName, routes)
- ].filter(Boolean));
- return middleware;
-}
-function serve(_a) {
- var prefix = _a.prefix, pathname = _a.pathname, cache_control = _a.cache_control;
- var filter = pathname
- ? function (req) { return req.pathname === pathname; }
- : function (req) { return req.pathname.startsWith(prefix); };
- var output = __chunk1_js.dest();
- var cache = new Map();
- var read = __chunk1_js.dev()
- ? function (file) { return fs.readFileSync(path.resolve(output, file)); }
- : function (file) { return (cache.has(file) ? cache : cache.set(file, fs.readFileSync(path.resolve(output, file)))).get(file); };
- return function (req, res, next) {
- if (filter(req)) {
- var type = lookup(req.pathname);
- try {
- var data = read(req.pathname.slice(1));
- res.setHeader('Content-Type', type);
- res.setHeader('Cache-Control', cache_control);
- res.end(data);
- }
- catch (err) {
- res.statusCode = 404;
- res.end('not found');
- }
- }
- else {
- next();
- }
- };
-}
-function get_route_handler(chunks, routes) {
- var template = __chunk1_js.dev()
- ? function () { return fs.readFileSync('app/template.html', 'utf-8'); }
- : (function (str) { return function () { return str; }; })(fs.readFileSync('app/template.html', 'utf-8'));
- function handle_route(route, req, res) {
- req.params = route.params(route.pattern.exec(req.pathname));
- var mod = route.module;
- if (route.type === 'page') {
- res.setHeader('Content-Type', 'text/html');
- // preload main.js and current route
- // TODO detect other stuff we can preload? images, CSS, fonts?
- var link = []
- .concat(chunks.main, chunks[route.id])
- .map(function (file) { return ";rel=\"preload\";as=\"script\""; })
- .join(', ');
- res.setHeader('Link', link);
- var data_1 = { params: req.params, query: req.query };
- var redirect_1;
- var error_1;
- Promise.resolve(mod.preload ? mod.preload.call({
- redirect: function (statusCode, location) {
- redirect_1 = { statusCode: statusCode, location: location };
- },
- error: function (statusCode, message) {
- error_1 = { statusCode: statusCode, message: message };
- }
- }, req) : {})["catch"](function (err) {
- error_1 = { statusCode: 500, message: err };
- }).then(function (preloaded) {
- if (redirect_1) {
- res.statusCode = redirect_1.statusCode;
- res.setHeader('Location', redirect_1.location);
- res.end();
- return;
- }
- if (error_1) {
- handle_error(req, res, error_1.statusCode, error_1.message);
- return;
- }
- var serialized = try_serialize(preloaded); // TODO bail on non-POJOs
- Object.assign(data_1, preloaded);
- var _a = mod.render(data_1), html = _a.html, head = _a.head, css = _a.css;
- var scripts = []
- .concat(chunks.main) // chunks main might be an array. it might not! thanks, webpack
- .map(function (file) { return ""; })
- .join('');
- scripts = "" + scripts;
- var page = template()
- .replace('%sapper.scripts%', scripts)
- .replace('%sapper.html%', html)
- .replace('%sapper.head%', "" + head + "")
- .replace('%sapper.styles%', (css && css.code ? "" : ''));
- res.end(page);
- if (process.send) {
- process.send({
- __sapper__: true,
- url: req.url,
- method: req.method,
- status: 200,
- type: 'text/html',
- body: page
- });
- }
- });
- }
- else {
- var method = req.method.toLowerCase();
- // 'delete' cannot be exported from a module because it is a keyword,
- // so check for 'del' instead
- var method_export = method === 'delete' ? 'del' : method;
- var handler = mod[method_export];
- if (handler) {
- if (process.env.SAPPER_EXPORT) {
- var write_1 = res.write, end_1 = res.end, setHeader_1 = res.setHeader;
- var chunks_1 = [];
- var headers_1 = {};
- // intercept data so that it can be exported
- res.write = function (chunk) {
- chunks_1.push(new Buffer(chunk));
- write_1.apply(res, arguments);
- };
- res.setHeader = function (name, value) {
- headers_1[name.toLowerCase()] = value;
- setHeader_1.apply(res, arguments);
- };
- res.end = function (chunk) {
- if (chunk)
- chunks_1.push(new Buffer(chunk));
- end_1.apply(res, arguments);
- process.send({
- __sapper__: true,
- url: req.url,
- method: req.method,
- status: res.statusCode,
- type: headers_1['content-type'],
- body: Buffer.concat(chunks_1).toString()
- });
- };
- }
- var handle_bad_result = function (err) {
- if (err) {
- console.error(err.stack);
- res.statusCode = 500;
- res.end(err.message);
- }
- else {
- handle_error(req, res, 404, 'Not found');
- }
- };
- try {
- handler(req, res, handle_bad_result);
- }
- catch (err) {
- handle_bad_result(err);
- }
- }
- else {
- // no matching handler for method — 404
- handle_error(req, res, 404, 'Not found');
- }
- }
- }
- var not_found_route = routes.find(function (route) { return route.error === '4xx'; });
- var error_route = routes.find(function (route) { return route.error === '5xx'; });
- function handle_error(req, res, statusCode, message) {
- res.statusCode = statusCode;
- res.setHeader('Content-Type', 'text/html');
- var error = message instanceof Error ? message : new Error(message);
- var not_found = statusCode >= 400 && statusCode < 500;
- var route = not_found
- ? not_found_route
- : error_route;
- var title = not_found
- ? 'Not found'
- : "Internal server error: " + error.message;
- var rendered = route ? route.module.render({
- status: statusCode,
- error: error
- }) : { head: '', css: null, html: title };
- var head = rendered.head, css = rendered.css, html = rendered.html;
- var page = template()
- .replace('%sapper.scripts%', "")
- .replace('%sapper.html%', html)
- .replace('%sapper.head%', "" + head + "")
- .replace('%sapper.styles%', (css && css.code ? "" : ''));
- res.end(page);
- }
- return function find_route(req, res) {
- var url = req.pathname;
- try {
- for (var _i = 0, routes_1 = routes; _i < routes_1.length; _i++) {
- var route = routes_1[_i];
- if (!route.error && route.pattern.test(url))
- return handle_route(route, req, res);
- }
- handle_error(req, res, 404, 'Not found');
- }
- catch (error) {
- handle_error(req, res, 500, error);
- }
- };
-}
-function compose_handlers(handlers) {
- return function (req, res, next) {
- var i = 0;
- function go() {
- var handler = handlers[i];
- if (handler) {
- handler(req, res, function () {
- i += 1;
- go();
- });
- }
- else {
- next();
- }
- }
- go();
- };
-}
-function try_serialize(data) {
- try {
- return devalue(data);
- }
- catch (err) {
- return null;
- }
-}
-
-module.exports = middleware;
-//# sourceMappingURL=./middleware.ts.js.map
diff --git a/runtime.js b/runtime.js
new file mode 100644
index 0000000..a3db060
--- /dev/null
+++ b/runtime.js
@@ -0,0 +1,271 @@
+function detach(node) {
+ node.parentNode.removeChild(node);
+}
+function findAnchor(node) {
+ while (node && node.nodeName.toUpperCase() !== 'A')
+ node = node.parentNode; // SVG elements have a lowercase name
+ return node;
+}
+function which(event) {
+ return event.which === null ? event.button : event.which;
+}
+function scroll_state() {
+ return {
+ x: window.scrollX,
+ y: window.scrollY
+ };
+}
+
+var component;
+var target;
+var routes;
+var errors;
+var history = typeof window !== 'undefined' ? window.history : {
+ pushState: function (state, title, href) { },
+ replaceState: function (state, title, href) { },
+ scrollRestoration: ''
+};
+var scroll_history = {};
+var uid = 1;
+var cid;
+if ('scrollRestoration' in history) {
+ history.scrollRestoration = 'manual';
+}
+function select_route(url) {
+ if (url.origin !== window.location.origin)
+ return null;
+ var _loop_1 = function (route) {
+ var match = route.pattern.exec(url.pathname);
+ if (match) {
+ if (route.ignore)
+ return { value: null };
+ var params = route.params(match);
+ var query_1 = {};
+ if (url.search.length > 0) {
+ url.search.slice(1).split('&').forEach(function (searchParam) {
+ var _a = /([^=]+)=(.*)/.exec(searchParam), key = _a[1], value = _a[2];
+ query_1[key] = value || true;
+ });
+ }
+ return { value: { url: url, route: route, data: { params: params, query: query_1 } } };
+ }
+ };
+ for (var _i = 0, routes_1 = routes; _i < routes_1.length; _i++) {
+ var route = routes_1[_i];
+ var state_1 = _loop_1(route);
+ if (typeof state_1 === "object")
+ return state_1.value;
+ }
+}
+var current_token;
+function render(Component, data, scroll, token) {
+ if (current_token !== token)
+ return;
+ if (component) {
+ component.destroy();
+ }
+ else {
+ // first load — remove SSR'd contents
+ var start = document.querySelector('#sapper-head-start');
+ var end = document.querySelector('#sapper-head-end');
+ if (start && end) {
+ while (start.nextSibling !== end)
+ detach(start.nextSibling);
+ detach(start);
+ detach(end);
+ }
+ }
+ component = new Component({
+ target: target,
+ data: data,
+ hydrate: !component
+ });
+ if (scroll) {
+ window.scrollTo(scroll.x, scroll.y);
+ }
+}
+function prepare_route(Component, data) {
+ var redirect = null;
+ var error = null;
+ if (!Component.preload) {
+ return { Component: Component, data: data, redirect: redirect, error: error };
+ }
+ if (!component && window.__SAPPER__ && window.__SAPPER__.preloaded) {
+ return { Component: Component, data: Object.assign(data, window.__SAPPER__.preloaded), redirect: redirect, error: error };
+ }
+ return Promise.resolve(Component.preload.call({
+ redirect: function (statusCode, location) {
+ redirect = { statusCode: statusCode, location: location };
+ },
+ error: function (statusCode, message) {
+ error = { statusCode: statusCode, message: message };
+ }
+ }, data))["catch"](function (err) {
+ error = { statusCode: 500, message: err };
+ }).then(function (preloaded) {
+ if (error) {
+ var route = error.statusCode >= 400 && error.statusCode < 500
+ ? errors['4xx']
+ : errors['5xx'];
+ return route.load().then(function (_a) {
+ var Component = _a["default"];
+ var err = error.message instanceof Error ? error.message : new Error(error.message);
+ Object.assign(data, { status: error.statusCode, error: err });
+ return { Component: Component, data: data, redirect: null };
+ });
+ }
+ Object.assign(data, preloaded);
+ return { Component: Component, data: data, redirect: redirect };
+ });
+}
+function navigate(target, id) {
+ if (id) {
+ // popstate or initial navigation
+ cid = id;
+ }
+ else {
+ // clicked on a link. preserve scroll state
+ scroll_history[cid] = scroll_state();
+ id = cid = ++uid;
+ scroll_history[cid] = { x: 0, y: 0 };
+ }
+ cid = id;
+ var loaded = prefetching && prefetching.href === target.url.href ?
+ prefetching.promise :
+ target.route.load().then(function (mod) { return prepare_route(mod["default"], target.data); });
+ prefetching = null;
+ var token = current_token = {};
+ return loaded.then(function (_a) {
+ var Component = _a.Component, data = _a.data, redirect = _a.redirect;
+ if (redirect) {
+ return goto(redirect.location, { replaceState: true });
+ }
+ render(Component, data, scroll_history[id], token);
+ });
+}
+function handle_click(event) {
+ // Adapted from https://github.com/visionmedia/page.js
+ // MIT license https://github.com/visionmedia/page.js#license
+ if (which(event) !== 1)
+ return;
+ if (event.metaKey || event.ctrlKey || event.shiftKey)
+ return;
+ if (event.defaultPrevented)
+ return;
+ var a = findAnchor(event.target);
+ if (!a)
+ return;
+ // check if link is inside an svg
+ // in this case, both href and target are always inside an object
+ var svg = typeof a.href === 'object' && a.href.constructor.name === 'SVGAnimatedString';
+ var href = String(svg ? a.href.baseVal : a.href);
+ if (href === window.location.href) {
+ event.preventDefault();
+ return;
+ }
+ // Ignore if tag has
+ // 1. 'download' attribute
+ // 2. rel='external' attribute
+ if (a.hasAttribute('download') || a.getAttribute('rel') === 'external')
+ return;
+ // Ignore if has a target
+ if (svg ? a.target.baseVal : a.target)
+ return;
+ var url = new URL(href);
+ // Don't handle hash changes
+ if (url.pathname === window.location.pathname && url.search === window.location.search)
+ return;
+ var target = select_route(url);
+ if (target) {
+ navigate(target, null);
+ event.preventDefault();
+ history.pushState({ id: cid }, '', url.href);
+ }
+}
+function handle_popstate(event) {
+ scroll_history[cid] = scroll_state();
+ if (event.state) {
+ var url = new URL(window.location.href);
+ var target_1 = select_route(url);
+ navigate(target_1, event.state.id);
+ }
+ else {
+ // hashchange
+ cid = ++uid;
+ history.replaceState({ id: cid }, '', window.location.href);
+ }
+}
+var prefetching = null;
+function prefetch(href) {
+ var selected = select_route(new URL(href));
+ if (selected) {
+ prefetching = {
+ href: href,
+ promise: selected.route.load().then(function (mod) { return prepare_route(mod["default"], selected.data); })
+ };
+ }
+}
+function handle_touchstart_mouseover(event) {
+ var a = findAnchor(event.target);
+ if (!a || a.rel !== 'prefetch')
+ return;
+ prefetch(a.href);
+}
+var inited;
+function init(_target, _routes) {
+ target = _target;
+ routes = _routes.filter(function (r) { return !r.error; });
+ errors = {
+ '4xx': _routes.find(function (r) { return r.error === '4xx'; }),
+ '5xx': _routes.find(function (r) { return r.error === '5xx'; })
+ };
+ if (!inited) {
+ window.addEventListener('click', handle_click);
+ window.addEventListener('popstate', handle_popstate);
+ // prefetch
+ window.addEventListener('touchstart', handle_touchstart_mouseover);
+ window.addEventListener('mouseover', handle_touchstart_mouseover);
+ inited = true;
+ }
+ return Promise.resolve().then(function () {
+ var _a = window.location, hash = _a.hash, href = _a.href;
+ var deep_linked = hash && document.getElementById(hash.slice(1));
+ scroll_history[uid] = deep_linked ?
+ { x: 0, y: deep_linked.getBoundingClientRect().top } :
+ scroll_state();
+ history.replaceState({ id: uid }, '', href);
+ var target = select_route(new URL(window.location.href));
+ return navigate(target, uid);
+ });
+}
+function goto(href, opts) {
+ if (opts === void 0) { opts = { replaceState: false }; }
+ var target = select_route(new URL(href, window.location.href));
+ if (target) {
+ navigate(target, null);
+ if (history)
+ history[opts.replaceState ? 'replaceState' : 'pushState']({ id: cid }, '', href);
+ }
+ else {
+ window.location.href = href;
+ }
+}
+function prefetchRoutes(pathnames) {
+ if (!routes)
+ throw new Error("You must call init() first");
+ return routes
+ .filter(function (route) {
+ if (!pathnames)
+ return true;
+ return pathnames.some(function (pathname) {
+ return route.error
+ ? route.error === pathname
+ : route.pattern.test(pathname);
+ });
+ })
+ .reduce(function (promise, route) {
+ return promise.then(route.load);
+ }, Promise.resolve());
+}
+
+export { component, prefetch, init, goto, prefetchRoutes, prefetchRoutes as preloadRoutes };
diff --git a/webpack.ts.js b/webpack.ts.js
deleted file mode 100644
index b801fb7..0000000
--- a/webpack.ts.js
+++ /dev/null
@@ -1,54 +0,0 @@
-'use strict';
-
-var __chunk1_js = require('./chunk1.js');
-
-var webpack = {
- dev: __chunk1_js.dev(),
- client: {
- entry: function () {
- return {
- main: './app/client'
- };
- },
- output: function () {
- return {
- path: __chunk1_js.dest() + "/client",
- filename: '[hash]/[name].js',
- chunkFilename: '[hash]/[name].[id].js',
- publicPath: '/client/'
- };
- }
- },
- server: {
- entry: function () {
- return {
- server: './app/server'
- };
- },
- output: function () {
- return {
- path: __chunk1_js.dest(),
- filename: '[name].js',
- chunkFilename: '[hash]/[name].[id].js',
- libraryTarget: 'commonjs2'
- };
- }
- },
- serviceworker: {
- entry: function () {
- return {
- 'service-worker': './app/service-worker'
- };
- },
- output: function () {
- return {
- path: __chunk1_js.dest(),
- filename: '[name].js',
- chunkFilename: '[name].[id].[hash].js'
- };
- }
- }
-};
-
-module.exports = webpack;
-//# sourceMappingURL=./webpack.ts.js.map
diff --git a/webpack/config.js b/webpack/config.js
new file mode 100644
index 0000000..9e50d96
--- /dev/null
+++ b/webpack/config.js
@@ -0,0 +1,2 @@
+// TODO deprecate this file in favour of sapper/webpack.js
+module.exports = require('../webpack.ts.js');
\ No newline at end of file