From 7d721abb2ab8d7d4b566d777290abc8731bcd46c Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sun, 21 Jan 2018 11:15:32 -0500 Subject: [PATCH] wip 2 --- .gitignore | 3 + cli.js | 910 +----------------- middleware.js | 452 +-------- rollup.config.js | 40 +- src/cli/index.js | 3 +- src/{shared => core}/build.js | 0 src/{shared => core}/export.js | 0 src/{shared => core}/generate_asset_cache.js | 0 src/{shared => core}/index.js | 5 +- src/{shared => core}/route_manager.js | 0 src/{shared => core}/templates.js | 0 src/{shared => core}/utils/compilers.js | 0 src/{shared => core}/utils/create_app.js | 0 src/{shared => core}/utils/create_routes.js | 0 .../utils => middleware}/create_watcher.js | 5 +- src/middleware/index.js | 8 +- src/middleware/tmp.json | 154 --- test/unit/create_routes.test.js | 2 +- 18 files changed, 61 insertions(+), 1521 deletions(-) rename src/{shared => core}/build.js (100%) rename src/{shared => core}/export.js (100%) rename src/{shared => core}/generate_asset_cache.js (100%) rename src/{shared => core}/index.js (62%) rename src/{shared => core}/route_manager.js (100%) rename src/{shared => core}/templates.js (100%) rename src/{shared => core}/utils/compilers.js (100%) rename src/{shared => core}/utils/create_app.js (100%) rename src/{shared => core}/utils/create_routes.js (100%) rename src/{shared/utils => middleware}/create_watcher.js (91%) delete mode 100644 src/middleware/tmp.json diff --git a/.gitignore b/.gitignore index a063eeb..13773db 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,6 @@ cypress/screenshots test/app/.sapper runtime.js yarn.lock +cli.js +middleware.js +core.js \ No newline at end of file diff --git a/cli.js b/cli.js index d5af45d..b89ccba 100644 --- a/cli.js +++ b/cli.js @@ -1,915 +1,13 @@ #!/usr/bin/env node 'use strict'; -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var fs = require('fs'); -var path = require('path'); -var mkdirp = _interopDefault(require('mkdirp')); -var rimraf = _interopDefault(require('rimraf')); -var relative = _interopDefault(require('require-relative')); -var glob = _interopDefault(require('glob')); -var chalk = _interopDefault(require('chalk')); -var framer = _interopDefault(require('code-frame')); -var locateCharacter = require('locate-character'); -var sander = require('sander'); -var express = _interopDefault(require('express')); -var cheerio = _interopDefault(require('cheerio')); -var fetch = _interopDefault(require('node-fetch')); -var URL = _interopDefault(require('url-parse')); -var serialize = _interopDefault(require('serialize-javascript')); -var escape_html = _interopDefault(require('escape-html')); - -const webpack = relative('webpack', process.cwd()); - -const client = webpack( - require(path.resolve('webpack.client.config.js')) -); - -const server = webpack( - require(path.resolve('webpack.server.config.js')) -); - -var compilers = Object.freeze({ - client: client, - server: server -}); - -function create_matchers(files) { - const routes = files - .map(file => { - if (/(^|\/|\\)_/.test(file)) return; - - const parts = file.replace(/\.(html|js|mjs)$/, '').split('/'); // glob output is always posix-style - if (parts[parts.length - 1] === 'index') parts.pop(); - - const id = ( - parts.join('_').replace(/[[\]]/g, '$').replace(/^\d/, '_$&').replace(/[^a-zA-Z0-9_$]/g, '_') - ) || '_'; - - const dynamic = parts - .filter(part => part[0] === '[') - .map(part => part.slice(1, -1)); - - let pattern_string = ''; - let i = parts.length; - let nested = true; - while (i--) { - const part = parts[i]; - const dynamic = part[0] === '['; - - if (dynamic) { - pattern_string = nested ? `(?:\\/([^/]+)${pattern_string})?` : `\\/([^/]+)${pattern_string}`; - } else { - nested = false; - pattern_string = `\\/${part}${pattern_string}`; - } - } - - const pattern = new RegExp(`^${pattern_string}\\/?$`); - - const test = url => pattern.test(url); - - const exec = url => { - const match = pattern.exec(url); - if (!match) return; - - const params = {}; - dynamic.forEach((param, i) => { - params[param] = match[i + 1]; - }); - - return params; - }; - - return { - id, - type: path.extname(file) === '.html' ? 'page' : 'route', - file, - pattern, - test, - exec, - parts, - dynamic - }; - }) - .filter(Boolean) - .sort((a, b) => { - let same = true; - - for (let i = 0; true; i += 1) { - const a_part = a.parts[i]; - const b_part = b.parts[i]; - - if (!a_part && !b_part) { - if (same) throw new Error(`The ${a.file} and ${b.file} routes clash`); - return 0; - } - - if (!a_part) return -1; - if (!b_part) return 1; - - const a_is_dynamic = a_part[0] === '['; - const b_is_dynamic = b_part[0] === '['; - - if (a_is_dynamic === b_is_dynamic) { - if (!a_is_dynamic && a_part !== b_part) same = false; - continue; - } - - return a_is_dynamic ? 1 : -1; - } - }); - - return routes; -} - -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 callbacks = []; - -function onchange(fn) { - callbacks.push(fn); -} - -let routes; - -function update() { - routes = create_matchers( - glob.sync('**/*.+(html|js|mjs)', { cwd: src }) - ); - - callbacks.forEach(fn => fn()); -} - -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); -} - - -var route_manager = Object.freeze({ - onchange: onchange, - get routes () { return routes; } -}); - -function posixify(file) { - return file.replace(/[/\\]/g, '/'); -} - -function create_app() { - const { routes: routes$$1 } = route_manager; - - function create_client_main() { - const template = fs.readFileSync('templates/main.js', 'utf-8'); - - const code = `[${ - routes$$1 - .filter(route => route.type === 'page') - .map(route => { - const params = route.dynamic.length === 0 ? - '{}' : - `{ ${route.dynamic.map((part, i) => `${part}: match[${i + 1}]`).join(', ') } }`; - - const file = posixify(`${src}/${route.file}`); - return `{ pattern: ${route.pattern}, params: match => (${params}), load: () => import(/* webpackChunkName: "${route.id}" */ '${file}') }` - }) - .join(', ') - }]`; - - let main = template - .replace(/__app__/g, posixify(path.resolve(__dirname, '../../runtime/app.js'))) - .replace(/__routes__/g, code) - .replace(/__dev__/g, String(dev)); - - if (dev) { - const hmr_client = posixify(require.resolve(`webpack-hot-middleware/client`)); - main += `\n\nimport('${hmr_client}?path=/__webpack_hmr&timeout=20000'); if (module.hot) module.hot.accept();`; - } - - fs.writeFileSync(entry.client, main); - - // need to fudge the mtime, because webpack is soft in the head - const { atime, mtime } = fs.statSync(entry.client); - fs.utimesSync(entry.client, new Date(atime.getTime() - 999999), new Date(mtime.getTime() - 999999)); - } - - function create_server_routes() { - const imports = routes$$1 - .map(route => { - const file = posixify(`${src}/${route.file}`); - return route.type === 'page' ? - `import ${route.id} from '${file}';` : - `import * as ${route.id} from '${file}';`; - }) - .join('\n'); - - const exports = `export { ${routes$$1.map(route => route.id)} };`; - - fs.writeFileSync(entry.server, `${imports}\n\n${exports}`); - - const { atime, mtime } = fs.statSync(entry.server); - fs.utimesSync(entry.server, new Date(atime.getTime() - 999999), new Date(mtime.getTime() - 999999)); - } - - create_client_main(); - create_server_routes(); -} - -if (dev) { - onchange(create_app); - - const watcher = require('chokidar').watch(`templates/main.js`, { - ignoreInitial: true, - persistent: false - }); - - watcher.on('add', create_app); - watcher.on('change', create_app); - watcher.on('unlink', create_app); -} - -let templates$1; - -function error(e) { - if (e.title) console.error(chalk.bold.red(e.title)); - if (e.body) console.error(chalk.red(e.body)); - if (e.url) console.error(chalk.cyan(e.url)); - if (e.frame) console.error(chalk.grey(e.frame)); - - process.exit(1); -} - -function create_templates() { - templates$1 = glob.sync('*.html', { cwd: 'templates' }) - .map(file => { - const template = fs.readFileSync(`templates/${file}`, 'utf-8'); - const status = file.replace('.html', '').toLowerCase(); - - if (!/^[0-9x]{3}$/.test(status)) { - error({ - title: `templates/${file}`, - body: `Bad template — should be a valid status code like 404.html, or a wildcard like 2xx.html` - }); - } - - const index = template.indexOf('%sapper.main%'); - if (index !== -1) { - // TODO remove this in a future version - const { line, column } = locateCharacter.locate(template, index, { offsetLine: 1 }); - const frame = framer(template, line, column); - - error({ - title: `templates/${file}`, - body: ``; - - if (serialized) { - return `${main}`; - } - - return main; - }), - html: promise.then(({ rendered }) => rendered.html), - head: promise.then(({ rendered }) => `${rendered.head}`), - styles: promise.then(({ rendered }) => (rendered.css && rendered.css.code ? `` : '')) - }); - } else { - const { html, head, css } = mod.render(data); - - const page = render(200, { - scripts: ``, - html, - head: `${head}`, - styles: (css && css.code ? `` : '') - }); - - res.end(page); - } - } - - else { - const method = req.method.toLowerCase(); - // 'delete' cannot be exported from a module because it is a keyword, - // so check for 'del' instead - const method_export = method === 'delete' ? 'del' : method; - const handler = mod[method_export]; - if (handler) { - handler(req, res, next); - } else { - // no matching handler for method — 404 - next(); - } - } - } - - return function find_route(req, res, next) { - const url = req.pathname; - - // whatever happens, we're going to serve some HTML - res.setHeader('Content-Type', 'text/html'); - - resolved - .then(() => { - for (const route of routes) { - if (route.test(url)) return handle_route(route, req, res, next, fn()); - } - - // no matching route — 404 - next(); - }) - .catch(err => { - res.statusCode = 500; - res.end(render(500, { - title: (err && err.name) || 'Internal server error', - url, - error: escape_html(err && (err.details || err.message || err) || 'Unknown error'), - stack: err && err.stack.split('\n').slice(1).join('\n') - })); - }); - }; -} - -function get_not_found_handler(fn) { - return function handle_not_found(req, res) { - const asset_cache = fn(); - - res.statusCode = 404; - res.end(render(404, { - title: 'Not found', - status: 404, - method: req.method, - scripts: ``, - url: req.url - })); - }; -} - -function compose_handlers(handlers) { - return (req, res, next) => { - let i = 0; - function go() { - const handler = handlers[i]; - - if (handler) { - handler(req, res, () => { - i += 1; - go(); - }); - } else { - next(); - } - } - - go(); - }; -} - -function read_json$1(file) { - return JSON.parse(fs.readFileSync(file, 'utf-8')); -} - -function try_serialize(data) { - try { - return serialize(data); - } catch (err) { - return null; - } -} - -const { PORT = 3000, OUTPUT_DIR = 'dist' } = process.env; - -const origin = `http://localhost:${PORT}`; - -const app = express(); - -function read_json(file) { - return JSON.parse(sander.readFileSync(file, { encoding: 'utf-8' })); -} - -function exporter() { - // Prep output directory - sander.rimrafSync(OUTPUT_DIR); - - const { service_worker } = generate_asset_cache( - read_json(path.join(dest, 'stats.client.json')), - read_json(path.join(dest, 'stats.server.json')) - ); - - sander.copydirSync('assets').to(OUTPUT_DIR); - sander.copydirSync(dest, 'client').to(OUTPUT_DIR, 'client'); - sander.writeFileSync(OUTPUT_DIR, 'service-worker.js', service_worker); - - // Intercept server route fetches - function save(res) { - res = res.clone(); - - return res.text().then(body => { - const { pathname } = new URL(res.url); - let dest$$1 = OUTPUT_DIR + pathname; - - const type = res.headers.get('Content-Type'); - if (type.startsWith('text/html')) dest$$1 += '/index.html'; - - sander.writeFileSync(dest$$1, body); - - return body; - }); - } - - global.fetch = (url, opts) => { - if (url[0] === '/') { - url = `http://localhost:${PORT}${url}`; - - return fetch(url, opts) - .then(r => { - save(r); - return r; - }); - } - - return fetch(url, opts); - }; - - app.use(middleware()); - const server = app.listen(PORT); - - const seen = new Set(); - - function handle(url) { - if (url.origin !== origin) return; - - if (seen.has(url.pathname)) return; - seen.add(url.pathname); - - return fetch(url.href) - .then(r => { - save(r); - return r.text(); - }) - .then(body => { - const $ = cheerio.load(body); - const hrefs = []; - - $('a[href]').each((i, $a) => { - hrefs.push($a.attribs.href); - }); - - return hrefs.reduce((promise, href) => { - return promise.then(() => handle(new URL(href, url.href))); - }, Promise.resolve()); - }) - .catch(err => { - console.error(`Error rendering ${url.pathname}: ${err.message}`); - }); - } - - return handle(new URL(origin)) // TODO all static routes - .then(() => server.close()); -} +var core_js = require('./core.js'); const cmd = process.argv[2]; const start = Date.now(); if (cmd === 'build') { - build() + core_js.build() .then(() => { const elapsed = Date.now() - start; console.error(`built in ${elapsed}ms`); // TODO beautify this, e.g. 'built in 4.7 seconds' @@ -920,8 +18,8 @@ if (cmd === 'build') { } else if (cmd === 'export') { const start = Date.now(); - build() - .then(() => exporter()) + core_js.build() + .then(() => core_js.export()) .then(() => { const elapsed = Date.now() - start; console.error(`extracted in ${elapsed}ms`); // TODO beautify this, e.g. 'built in 4.7 seconds' diff --git a/middleware.js b/middleware.js index c23539e..4ef5712 100644 --- a/middleware.js +++ b/middleware.js @@ -6,106 +6,14 @@ var fs = require('fs'); var path = require('path'); var serialize = _interopDefault(require('serialize-javascript')); var escape_html = _interopDefault(require('escape-html')); -var glob = _interopDefault(require('glob')); +var core_js = require('./core.js'); +var chalk = _interopDefault(require('chalk')); var mkdirp = _interopDefault(require('mkdirp')); var rimraf = _interopDefault(require('rimraf')); -var chalk = _interopDefault(require('chalk')); -var framer = _interopDefault(require('code-frame')); -var locateCharacter = require('locate-character'); -var relative = _interopDefault(require('require-relative')); - -function create_matchers(files) { - const routes = files - .map(file => { - if (/(^|\/|\\)_/.test(file)) return; - - const parts = file.replace(/\.(html|js|mjs)$/, '').split('/'); // glob output is always posix-style - if (parts[parts.length - 1] === 'index') parts.pop(); - - const id = ( - parts.join('_').replace(/[[\]]/g, '$').replace(/^\d/, '_$&').replace(/[^a-zA-Z0-9_$]/g, '_') - ) || '_'; - - const dynamic = parts - .filter(part => part[0] === '[') - .map(part => part.slice(1, -1)); - - let pattern_string = ''; - let i = parts.length; - let nested = true; - while (i--) { - const part = parts[i]; - const dynamic = part[0] === '['; - - if (dynamic) { - pattern_string = nested ? `(?:\\/([^/]+)${pattern_string})?` : `\\/([^/]+)${pattern_string}`; - } else { - nested = false; - pattern_string = `\\/${part}${pattern_string}`; - } - } - - const pattern = new RegExp(`^${pattern_string}\\/?$`); - - const test = url => pattern.test(url); - - const exec = url => { - const match = pattern.exec(url); - if (!match) return; - - const params = {}; - dynamic.forEach((param, i) => { - params[param] = match[i + 1]; - }); - - return params; - }; - - return { - id, - type: path.extname(file) === '.html' ? 'page' : 'route', - file, - pattern, - test, - exec, - parts, - dynamic - }; - }) - .filter(Boolean) - .sort((a, b) => { - let same = true; - - for (let i = 0; true; i += 1) { - const a_part = a.parts[i]; - const b_part = b.parts[i]; - - if (!a_part && !b_part) { - if (same) throw new Error(`The ${a.file} and ${b.file} routes clash`); - return 0; - } - - if (!a_part) return -1; - if (!b_part) return 1; - - const a_is_dynamic = a_part[0] === '['; - const b_is_dynamic = b_part[0] === '['; - - if (a_is_dynamic === b_is_dynamic) { - if (!a_is_dynamic && a_part !== b_part) same = false; - continue; - } - - return a_is_dynamic ? 1 : -1; - } - }); - - return routes; -} const dev = process.env.NODE_ENV !== 'production'; -const templates = path.resolve(process.env.SAPPER_TEMPLATES || 'templates'); +const templates$1 = path.resolve(process.env.SAPPER_TEMPLATES || 'templates'); const src = path.resolve(process.env.SAPPER_ROUTES || 'routes'); @@ -117,332 +25,10 @@ if (dev) { } const entry = { - client: path.resolve(templates, '.main.rendered.js'), + client: path.resolve(templates$1, '.main.rendered.js'), server: path.resolve(dest, 'server-entry.js') }; -const callbacks = []; - -function onchange(fn) { - callbacks.push(fn); -} - -let routes; - -function update() { - routes = create_matchers( - glob.sync('**/*.+(html|js|mjs)', { cwd: src }) - ); - - callbacks.forEach(fn => fn()); -} - -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); -} - - -var route_manager = Object.freeze({ - onchange: onchange, - get routes () { return routes; } -}); - -let templates$1; - -function error(e) { - if (e.title) console.error(chalk.bold.red(e.title)); - if (e.body) console.error(chalk.red(e.body)); - if (e.url) console.error(chalk.cyan(e.url)); - if (e.frame) console.error(chalk.grey(e.frame)); - - process.exit(1); -} - -function create_templates() { - templates$1 = glob.sync('*.html', { cwd: 'templates' }) - .map(file => { - const template = fs.readFileSync(`templates/${file}`, 'utf-8'); - const status = file.replace('.html', '').toLowerCase(); - - if (!/^[0-9x]{3}$/.test(status)) { - error({ - title: `templates/${file}`, - body: `Bad template — should be a valid status code like 404.html, or a wildcard like 2xx.html` - }); - } - - const index = template.indexOf('%sapper.main%'); - if (index !== -1) { - // TODO remove this in a future version - const { line, column } = locateCharacter.locate(template, index, { offsetLine: 1 }); - const frame = framer(template, line, column); - - error({ - title: `templates/${file}`, - body: ``; + const main = ``; if (serialized) { return `${main}`; @@ -669,8 +255,8 @@ function get_route_handler(fn) { } else { const { html, head, css } = mod.render(data); - const page = render(200, { - scripts: ``, + const page = core_js.templates.render(200, { + scripts: ``, html, head: `${head}`, styles: (css && css.code ? `` : '') @@ -703,7 +289,7 @@ function get_route_handler(fn) { resolved .then(() => { - for (const route of routes) { + for (const route of core_js.route_manager.routes) { if (route.test(url)) return handle_route(route, req, res, next, fn()); } @@ -712,7 +298,7 @@ function get_route_handler(fn) { }) .catch(err => { res.statusCode = 500; - res.end(render(500, { + res.end(core_js.templates.render(500, { title: (err && err.name) || 'Internal server error', url, error: escape_html(err && (err.details || err.message || err) || 'Unknown error'), @@ -727,7 +313,7 @@ function get_not_found_handler(fn) { const asset_cache = fn(); res.statusCode = 404; - res.end(render(404, { + res.end(core_js.templates.render(404, { title: 'Not found', status: 404, method: req.method, diff --git a/rollup.config.js b/rollup.config.js index 8074091..c8fae3b 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -3,9 +3,14 @@ import pkg from './package.json'; const external = [].concat( Object.keys(pkg.dependencies), - Object.keys(process.binding('natives')) + Object.keys(process.binding('natives')), + 'sapper' ); +const paths = { + 'sapper/core.js': './core.js' +}; + export default [ // cli.js { @@ -16,6 +21,7 @@ export default [ banner: '#!/usr/bin/env node' }, external, + paths, plugins: [ typescript({ typescript: require('typescript') @@ -24,20 +30,21 @@ export default [ }, // core.js - // { - // input: 'src/core/index.js', - // output: { - // file: 'core.js', - // format: 'cjs', - // banner: '#!/usr/bin/env node' - // }, - // external, - // plugins: [ - // typescript({ - // typescript: require('typescript') - // }) - // ] - // }, + { + input: 'src/core/index.js', + output: { + file: 'core.js', + format: 'cjs', + banner: '#!/usr/bin/env node' + }, + external, + paths, + plugins: [ + typescript({ + typescript: require('typescript') + }) + ] + }, // middleware.js { @@ -47,6 +54,7 @@ export default [ format: 'cjs' }, external, + paths, plugins: [ typescript({ typescript: require('typescript') @@ -62,6 +70,7 @@ export default [ format: 'es' }, external, + paths, plugins: [ typescript({ typescript: require('typescript') @@ -77,6 +86,7 @@ export default [ format: 'cjs' }, external, + paths, plugins: [ typescript({ typescript: require('typescript') diff --git a/src/cli/index.js b/src/cli/index.js index 1999207..64478c4 100755 --- a/src/cli/index.js +++ b/src/cli/index.js @@ -1,5 +1,4 @@ -import build from '../shared/build.js'; -import exporter from '../shared/export.js'; +import { build, export as exporter } from 'sapper/core.js'; const cmd = process.argv[2]; const start = Date.now(); diff --git a/src/shared/build.js b/src/core/build.js similarity index 100% rename from src/shared/build.js rename to src/core/build.js diff --git a/src/shared/export.js b/src/core/export.js similarity index 100% rename from src/shared/export.js rename to src/core/export.js diff --git a/src/shared/generate_asset_cache.js b/src/core/generate_asset_cache.js similarity index 100% rename from src/shared/generate_asset_cache.js rename to src/core/generate_asset_cache.js diff --git a/src/shared/index.js b/src/core/index.js similarity index 62% rename from src/shared/index.js rename to src/core/index.js index 98c7757..ced82f2 100644 --- a/src/shared/index.js +++ b/src/core/index.js @@ -1,7 +1,10 @@ import * as route_manager from './route_manager.js'; import * as templates from './templates.js'; +import * as compilers from './utils/compilers.js'; export { default as build } from './build.js'; export { default as export } from './export.js'; export { default as generate_asset_cache } from './generate_asset_cache.js'; -export { route_manager, templates }; \ No newline at end of file +export { default as create_app } from './utils/create_app.js'; + +export { compilers, route_manager, templates }; \ No newline at end of file diff --git a/src/shared/route_manager.js b/src/core/route_manager.js similarity index 100% rename from src/shared/route_manager.js rename to src/core/route_manager.js diff --git a/src/shared/templates.js b/src/core/templates.js similarity index 100% rename from src/shared/templates.js rename to src/core/templates.js diff --git a/src/shared/utils/compilers.js b/src/core/utils/compilers.js similarity index 100% rename from src/shared/utils/compilers.js rename to src/core/utils/compilers.js diff --git a/src/shared/utils/create_app.js b/src/core/utils/create_app.js similarity index 100% rename from src/shared/utils/create_app.js rename to src/core/utils/create_app.js diff --git a/src/shared/utils/create_routes.js b/src/core/utils/create_routes.js similarity index 100% rename from src/shared/utils/create_routes.js rename to src/core/utils/create_routes.js diff --git a/src/shared/utils/create_watcher.js b/src/middleware/create_watcher.js similarity index 91% rename from src/shared/utils/create_watcher.js rename to src/middleware/create_watcher.js index c0f3c34..6ae8f08 100644 --- a/src/shared/utils/create_watcher.js +++ b/src/middleware/create_watcher.js @@ -1,9 +1,8 @@ import * as fs from 'fs'; import * as path from 'path'; import chalk from 'chalk'; -import * as compilers from './compilers.js'; -import generate_asset_cache from '../../shared/generate_asset_cache.js'; -import { dest } from '../../config.js'; +import { compilers, generate_asset_cache } from 'sapper/core.js'; +import { dest } from '../config.js'; function deferred() { const d = {}; diff --git a/src/middleware/index.js b/src/middleware/index.js index 87b24b6..89bb113 100644 --- a/src/middleware/index.js +++ b/src/middleware/index.js @@ -2,12 +2,8 @@ import * as fs from 'fs'; import * as path from 'path'; import serialize from 'serialize-javascript'; import escape_html from 'escape-html'; -import * as route_manager from '../shared/route_manager.js'; -import * as templates from '../shared/templates.js'; -import create_app from '../shared/utils/create_app.js'; -import create_watcher from '../shared/utils/create_watcher.js'; -import * as compilers from '../shared/utils/compilers.js'; -import generate_asset_cache from '../shared/generate_asset_cache.js'; +import { route_manager, templates, create_app, compilers, generate_asset_cache } from 'sapper/core.js'; +import create_watcher from './create_watcher.js'; import { dest, dev } from '../config.js'; function connect_dev() { diff --git a/src/middleware/tmp.json b/src/middleware/tmp.json deleted file mode 100644 index 1f3ea02..0000000 --- a/src/middleware/tmp.json +++ /dev/null @@ -1,154 +0,0 @@ -[ - { - "x": 1979, - "y": 7.19 - }, - { - "x": 1980, - "y": 7.83 - }, - { - "x": 1981, - "y": 7.24 - }, - { - "x": 1982, - "y": 7.44 - }, - { - "x": 1983, - "y": 7.51 - }, - { - "x": 1984, - "y": 7.1 - }, - { - "x": 1985, - "y": 6.91 - }, - { - "x": 1986, - "y": 7.53 - }, - { - "x": 1987, - "y": 7.47 - }, - { - "x": 1988, - "y": 7.48 - }, - { - "x": 1989, - "y": 7.03 - }, - { - "x": 1990, - "y": 6.23 - }, - { - "x": 1991, - "y": 6.54 - }, - { - "x": 1992, - "y": 7.54 - }, - { - "x": 1993, - "y": 6.5 - }, - { - "x": 1994, - "y": 7.18 - }, - { - "x": 1995, - "y": 6.12 - }, - { - "x": 1996, - "y": 7.87 - }, - { - "x": 1997, - "y": 6.73 - }, - { - "x": 1998, - "y": 6.55 - }, - { - "x": 1999, - "y": 6.23 - }, - { - "x": 2000, - "y": 6.31 - }, - { - "x": 2001, - "y": 6.74 - }, - { - "x": 2002, - "y": 5.95 - }, - { - "x": 2003, - "y": 6.13 - }, - { - "x": 2004, - "y": 6.04 - }, - { - "x": 2005, - "y": 5.56 - }, - { - "x": 2006, - "y": 5.91 - }, - { - "x": 2007, - "y": 4.29 - }, - { - "x": 2008, - "y": 4.72 - }, - { - "x": 2009, - "y": 5.38 - }, - { - "x": 2010, - "y": 4.92 - }, - { - "x": 2011, - "y": 4.61 - }, - { - "x": 2012, - "y": 3.62 - }, - { - "x": 2013, - "y": 5.35 - }, - { - "x": 2014, - "y": 5.28 - }, - { - "x": 2015, - "y": 4.63 - }, - { - "x": 2016, - "y": 4.72 - } - ] \ No newline at end of file diff --git a/test/unit/create_routes.test.js b/test/unit/create_routes.test.js index cbc4856..8c2b291 100644 --- a/test/unit/create_routes.test.js +++ b/test/unit/create_routes.test.js @@ -1,6 +1,6 @@ import * as assert from 'assert'; -import create_routes from '../../src/shared/utils/create_routes.js'; +import create_routes from '../../src/core/utils/create_routes.js'; describe('create_routes', () => { it('sorts routes correctly', () => {