From 5c292c097b4a6162f3e564e885c60c62b6c868cd Mon Sep 17 00:00:00 2001 From: pngwn Date: Wed, 19 Jun 2019 16:06:23 +0100 Subject: [PATCH 1/4] Allow export to take multiple entrypoints to use when crawling. --- .gitignore | 3 +- package-lock.json | 43 +++++++--- src/api/export.ts | 31 +++++-- src/cli.ts | 3 + .../export-multiple-entry/rollup.config.js | 58 +++++++++++++ test/apps/export-multiple-entry/src/client.js | 9 ++ .../src/routes/_error.svelte | 3 + .../src/routes/about.svelte | 1 + .../src/routes/blog/[slug].html | 13 +++ .../src/routes/blog/[slug].json.js | 19 +++++ .../src/routes/blog/_posts.js | 5 ++ .../src/routes/blog/index.html | 17 ++++ .../src/routes/blog/index.json.js | 9 ++ .../src/routes/boom/[a]/[b].svelte | 12 +++ .../src/routes/boom/[a]/index.svelte | 15 ++++ .../src/routes/boom/index.svelte | 7 ++ .../src/routes/contact.svelte | 1 + .../src/routes/index.svelte | 8 ++ test/apps/export-multiple-entry/src/server.js | 13 +++ .../src/service-worker.js | 82 +++++++++++++++++++ .../export-multiple-entry/src/template.html | 14 ++++ .../export-multiple-entry/static/global.css | 3 + test/apps/export-multiple-entry/test.ts | 48 +++++++++++ 23 files changed, 399 insertions(+), 18 deletions(-) create mode 100644 test/apps/export-multiple-entry/rollup.config.js create mode 100644 test/apps/export-multiple-entry/src/client.js create mode 100644 test/apps/export-multiple-entry/src/routes/_error.svelte create mode 100644 test/apps/export-multiple-entry/src/routes/about.svelte create mode 100644 test/apps/export-multiple-entry/src/routes/blog/[slug].html create mode 100644 test/apps/export-multiple-entry/src/routes/blog/[slug].json.js create mode 100644 test/apps/export-multiple-entry/src/routes/blog/_posts.js create mode 100644 test/apps/export-multiple-entry/src/routes/blog/index.html create mode 100644 test/apps/export-multiple-entry/src/routes/blog/index.json.js create mode 100644 test/apps/export-multiple-entry/src/routes/boom/[a]/[b].svelte create mode 100644 test/apps/export-multiple-entry/src/routes/boom/[a]/index.svelte create mode 100644 test/apps/export-multiple-entry/src/routes/boom/index.svelte create mode 100644 test/apps/export-multiple-entry/src/routes/contact.svelte create mode 100644 test/apps/export-multiple-entry/src/routes/index.svelte create mode 100644 test/apps/export-multiple-entry/src/server.js create mode 100644 test/apps/export-multiple-entry/src/service-worker.js create mode 100644 test/apps/export-multiple-entry/src/template.html create mode 100644 test/apps/export-multiple-entry/static/global.css create mode 100644 test/apps/export-multiple-entry/test.ts diff --git a/.gitignore b/.gitignore index e25b13b6c..b27c6edea 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,5 @@ runtime.js dist !rollup.config.js /runtime/app.mjs -/runtime/server.mjs \ No newline at end of file +/runtime/server.mjs +.vscode diff --git a/package-lock.json b/package-lock.json index 33164fb0c..fd470c09d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "sapper", - "version": "0.27.3", + "version": "0.27.4", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -2076,7 +2076,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -2097,12 +2098,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2117,17 +2120,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -2244,7 +2250,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -2256,6 +2263,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2270,6 +2278,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2277,12 +2286,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -2301,6 +2312,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -2381,7 +2393,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -2393,6 +2406,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -2478,7 +2492,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -2514,6 +2529,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -2533,6 +2549,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -2576,12 +2593,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, diff --git a/src/api/export.ts b/src/api/export.ts index 921b51d80..abc5563c6 100644 --- a/src/api/export.ts +++ b/src/api/export.ts @@ -22,6 +22,7 @@ type Opts = { concurrent?: number, oninfo?: ({ message }: { message: string }) => void; onfile?: ({ file, size, status }: { file: string, size: number, status: number }) => void; + entry?: string; }; type Ref = { @@ -34,6 +35,10 @@ function resolve(from: string, to: string) { return url.parse(url.resolve(from, to)); } +function cleanPath(path: string) { + return path.replace(/^\/|\/$|\/*index(.html)*$|.html$/g, '') +} + type URL = url.UrlWithStringQuery; export { _export as export }; @@ -47,7 +52,8 @@ async function _export({ timeout = 5000, concurrent = 8, oninfo = noop, - onfile = noop + onfile = noop, + entry = '/' }: Opts = {}) { basepath = basepath.replace(/^\//, '') @@ -74,10 +80,17 @@ async function _export({ const root = resolve(origin, basepath); if (!root.href.endsWith('/')) root.href += '/'; - oninfo({ - message: `Crawling ${root.href}` + + + const entryPoints = entry.split(' ').map(entryPoint => { + const entry = resolve(origin, `${basepath}/${cleanPath(entryPoint)}`); + if (!entry.href.endsWith('/')) entry.href += '/'; + + return entry; }); + let currentRoot = 0; + const proc = child_process.fork(path.resolve(`${build_dir}/server/server.js`), [], { cwd, env: Object.assign({ @@ -201,7 +214,7 @@ async function _export({ type = 'text/html'; body = ``; - tasks.push(handle(resolve(root.href, location))); + tasks.push(handle(resolve(entryPoints[currentRoot].href, location))); } save(pathname, r.status, type, body); @@ -211,7 +224,15 @@ async function _export({ try { await ports.wait(port); - await handle(root); + + for (let i = 0; i < entryPoints.length; i++) { + oninfo({ + message: `Crawling ${entryPoints[currentRoot].href}` + }); + await handle(entryPoints[currentRoot]); + currentRoot++; + } + await handle(resolve(root.href, 'service-worker-index.html')); await q.close(); diff --git a/src/cli.ts b/src/cli.ts index 045bd3683..f077a4fbf 100755 --- a/src/cli.ts +++ b/src/cli.ts @@ -205,6 +205,7 @@ prog.command('export [dest]') .option('--output', 'Sapper output directory', 'src/node_modules/@sapper') .option('--build-dir', 'Intermediate build directory', '__sapper__/build') .option('--ext', 'Custom Route Extension', '.svelte .html') + .option('--entry', 'Custom entry points', '/') .action(async (dest = '__sapper__/export', opts: { build: boolean, legacy: boolean, @@ -219,6 +220,7 @@ prog.command('export [dest]') output: string, 'build-dir': string, ext: string + entry: string }) => { try { if (opts.build) { @@ -238,6 +240,7 @@ prog.command('export [dest]') basepath: opts.basepath, timeout: opts.timeout, concurrent: opts.concurrent, + entry: opts.entry, oninfo: event => { console.log(colors.bold().cyan(`> ${event.message}`)); diff --git a/test/apps/export-multiple-entry/rollup.config.js b/test/apps/export-multiple-entry/rollup.config.js new file mode 100644 index 000000000..66d3e5913 --- /dev/null +++ b/test/apps/export-multiple-entry/rollup.config.js @@ -0,0 +1,58 @@ +import resolve from 'rollup-plugin-node-resolve'; +import replace from 'rollup-plugin-replace'; +import svelte from 'rollup-plugin-svelte'; + +const mode = process.env.NODE_ENV; +const dev = mode === 'development'; + +const config = require('../../../config/rollup.js'); + +export default { + client: { + input: config.client.input(), + output: config.client.output(), + plugins: [ + replace({ + 'process.browser': true, + 'process.env.NODE_ENV': JSON.stringify(mode) + }), + svelte({ + dev, + hydratable: true, + emitCss: true + }), + resolve() + ] + }, + + server: { + input: config.server.input(), + output: config.server.output(), + plugins: [ + replace({ + 'process.browser': false, + 'process.env.NODE_ENV': JSON.stringify(mode) + }), + svelte({ + generate: 'ssr', + dev + }), + resolve({ + preferBuiltins: true + }) + ], + external: ['sirv', 'polka'] + }, + + serviceworker: { + input: config.serviceworker.input(), + output: config.serviceworker.output(), + plugins: [ + resolve(), + replace({ + 'process.browser': true, + 'process.env.NODE_ENV': JSON.stringify(mode) + }) + ] + } +}; \ No newline at end of file diff --git a/test/apps/export-multiple-entry/src/client.js b/test/apps/export-multiple-entry/src/client.js new file mode 100644 index 000000000..6cce7e658 --- /dev/null +++ b/test/apps/export-multiple-entry/src/client.js @@ -0,0 +1,9 @@ +import * as sapper from '@sapper/app'; + +window.start = () => sapper.start({ + target: document.querySelector('#sapper') +}); + +window.prefetchRoutes = () => sapper.prefetchRoutes(); +window.prefetch = href => sapper.prefetch(href); +window.goto = href => sapper.goto(href); \ No newline at end of file diff --git a/test/apps/export-multiple-entry/src/routes/_error.svelte b/test/apps/export-multiple-entry/src/routes/_error.svelte new file mode 100644 index 000000000..4cd55d28d --- /dev/null +++ b/test/apps/export-multiple-entry/src/routes/_error.svelte @@ -0,0 +1,3 @@ +

{status}

+ +

{error.message}

\ No newline at end of file diff --git a/test/apps/export-multiple-entry/src/routes/about.svelte b/test/apps/export-multiple-entry/src/routes/about.svelte new file mode 100644 index 000000000..e41bdf9c8 --- /dev/null +++ b/test/apps/export-multiple-entry/src/routes/about.svelte @@ -0,0 +1 @@ +

I am an about page

diff --git a/test/apps/export-multiple-entry/src/routes/blog/[slug].html b/test/apps/export-multiple-entry/src/routes/blog/[slug].html new file mode 100644 index 000000000..2febdf20d --- /dev/null +++ b/test/apps/export-multiple-entry/src/routes/blog/[slug].html @@ -0,0 +1,13 @@ + + + + +

{post.title}

\ No newline at end of file diff --git a/test/apps/export-multiple-entry/src/routes/blog/[slug].json.js b/test/apps/export-multiple-entry/src/routes/blog/[slug].json.js new file mode 100644 index 000000000..66781ad28 --- /dev/null +++ b/test/apps/export-multiple-entry/src/routes/blog/[slug].json.js @@ -0,0 +1,19 @@ +import posts from './_posts.js'; + +export function get(req, res) { + const post = posts.find(post => post.slug === req.params.slug); + + if (post) { + res.writeHead(200, { + 'Content-Type': 'application/json' + }); + + res.end(JSON.stringify(post)); + } else { + res.writeHead(404, { + 'Content-Type': 'application/json' + }); + + res.end(JSON.stringify({ message: 'not found' })); + } +} \ No newline at end of file diff --git a/test/apps/export-multiple-entry/src/routes/blog/_posts.js b/test/apps/export-multiple-entry/src/routes/blog/_posts.js new file mode 100644 index 000000000..d283aa6cf --- /dev/null +++ b/test/apps/export-multiple-entry/src/routes/blog/_posts.js @@ -0,0 +1,5 @@ +export default [ + { slug: 'foo', title: 'once upon a foo' }, + { slug: 'bar', title: 'a bar is born' }, + { slug: 'baz', title: 'bazzily ever after' } +]; \ No newline at end of file diff --git a/test/apps/export-multiple-entry/src/routes/blog/index.html b/test/apps/export-multiple-entry/src/routes/blog/index.html new file mode 100644 index 000000000..d12e4321d --- /dev/null +++ b/test/apps/export-multiple-entry/src/routes/blog/index.html @@ -0,0 +1,17 @@ + + + + +

blog

+ +{#each posts as post} +

{post.title}

+{/each} \ No newline at end of file diff --git a/test/apps/export-multiple-entry/src/routes/blog/index.json.js b/test/apps/export-multiple-entry/src/routes/blog/index.json.js new file mode 100644 index 000000000..0097f7793 --- /dev/null +++ b/test/apps/export-multiple-entry/src/routes/blog/index.json.js @@ -0,0 +1,9 @@ +import posts from './_posts.js'; + +export function get(req, res) { + res.writeHead(200, { + 'Content-Type': 'application/json' + }); + + res.end(JSON.stringify(posts)); +} \ No newline at end of file diff --git a/test/apps/export-multiple-entry/src/routes/boom/[a]/[b].svelte b/test/apps/export-multiple-entry/src/routes/boom/[a]/[b].svelte new file mode 100644 index 000000000..9b7b9b45f --- /dev/null +++ b/test/apps/export-multiple-entry/src/routes/boom/[a]/[b].svelte @@ -0,0 +1,12 @@ + + + + +

{a}/{b}

\ No newline at end of file diff --git a/test/apps/export-multiple-entry/src/routes/boom/[a]/index.svelte b/test/apps/export-multiple-entry/src/routes/boom/[a]/index.svelte new file mode 100644 index 000000000..5c18250cc --- /dev/null +++ b/test/apps/export-multiple-entry/src/routes/boom/[a]/index.svelte @@ -0,0 +1,15 @@ + + + + +{#each list as b} + {a}/{b} +{/each} \ No newline at end of file diff --git a/test/apps/export-multiple-entry/src/routes/boom/index.svelte b/test/apps/export-multiple-entry/src/routes/boom/index.svelte new file mode 100644 index 000000000..84ed15847 --- /dev/null +++ b/test/apps/export-multiple-entry/src/routes/boom/index.svelte @@ -0,0 +1,7 @@ + + +{#each list as a} + {a} +{/each} \ No newline at end of file diff --git a/test/apps/export-multiple-entry/src/routes/contact.svelte b/test/apps/export-multiple-entry/src/routes/contact.svelte new file mode 100644 index 000000000..467b9e107 --- /dev/null +++ b/test/apps/export-multiple-entry/src/routes/contact.svelte @@ -0,0 +1 @@ +

I am a contact page

diff --git a/test/apps/export-multiple-entry/src/routes/index.svelte b/test/apps/export-multiple-entry/src/routes/index.svelte new file mode 100644 index 000000000..ac7a90108 --- /dev/null +++ b/test/apps/export-multiple-entry/src/routes/index.svelte @@ -0,0 +1,8 @@ +

Great success!

+ +empty anchor +empty anchor #2 +empty anchor #3 +empty anchor #4 +empty anchor #5 +empty anchor #6 diff --git a/test/apps/export-multiple-entry/src/server.js b/test/apps/export-multiple-entry/src/server.js new file mode 100644 index 000000000..4ccaf34a1 --- /dev/null +++ b/test/apps/export-multiple-entry/src/server.js @@ -0,0 +1,13 @@ +import sirv from 'sirv'; +import polka from 'polka'; +import * as sapper from '@sapper/server'; + +import { start, dev } from '../../common.js'; + +const app = polka() + .use( + sirv('static', { dev }), + sapper.middleware() + ); + +start(app); diff --git a/test/apps/export-multiple-entry/src/service-worker.js b/test/apps/export-multiple-entry/src/service-worker.js new file mode 100644 index 000000000..8adb97a43 --- /dev/null +++ b/test/apps/export-multiple-entry/src/service-worker.js @@ -0,0 +1,82 @@ +import * as sapper from '@sapper/service-worker'; + +const ASSETS = `cache${sapper.timestamp}`; + +// `shell` is an array of all the files generated by webpack, +// `files` is an array of everything in the `static` directory +const to_cache = sapper.shell.concat(sapper.files); +const cached = new Set(to_cache); + +self.addEventListener('install', event => { + event.waitUntil( + caches + .open(ASSETS) + .then(cache => cache.addAll(to_cache)) + .then(() => { + self.skipWaiting(); + }) + ); +}); + +self.addEventListener('activate', event => { + event.waitUntil( + caches.keys().then(async keys => { + // delete old caches + for (const key of keys) { + if (key !== ASSETS) await caches.delete(key); + } + + self.clients.claim(); + }) + ); +}); + +self.addEventListener('fetch', event => { + if (event.request.method !== 'GET') return; + + const url = new URL(event.request.url); + + // don't try to handle e.g. data: URIs + if (!url.protocol.startsWith('http')) return; + + // ignore dev server requests + if (url.hostname === self.location.hostname && url.port !== self.location.port) return; + + // always serve assets and webpack-generated files from cache + if (url.host === self.location.host && cached.has(url.pathname)) { + event.respondWith(caches.match(event.request)); + return; + } + + // for pages, you might want to serve a shell `index.html` file, + // which Sapper has generated for you. It's not right for every + // app, but if it's right for yours then uncomment this section + /* + if (url.origin === self.origin && routes.find(route => route.pattern.test(url.pathname))) { + event.respondWith(caches.match('/index.html')); + return; + } + */ + + if (event.request.cache === 'only-if-cached') return; + + // for everything else, try the network first, falling back to + // cache if the user is offline. (If the pages never change, you + // might prefer a cache-first approach to a network-first one.) + event.respondWith( + caches + .open(`offline${sapper.timestamp}`) + .then(async cache => { + try { + const response = await fetch(event.request); + cache.put(event.request, response.clone()); + return response; + } catch(err) { + const response = await cache.match(event.request); + if (response) return response; + + throw err; + } + }) + ); +}); diff --git a/test/apps/export-multiple-entry/src/template.html b/test/apps/export-multiple-entry/src/template.html new file mode 100644 index 000000000..0eb1f3ba4 --- /dev/null +++ b/test/apps/export-multiple-entry/src/template.html @@ -0,0 +1,14 @@ + + + + + + %sapper.base% + %sapper.styles% + %sapper.head% + + +
%sapper.html%
+ %sapper.scripts% + + diff --git a/test/apps/export-multiple-entry/static/global.css b/test/apps/export-multiple-entry/static/global.css new file mode 100644 index 000000000..800f57ad1 --- /dev/null +++ b/test/apps/export-multiple-entry/static/global.css @@ -0,0 +1,3 @@ +body { + font-family: 'Comic Sans MS'; +} \ No newline at end of file diff --git a/test/apps/export-multiple-entry/test.ts b/test/apps/export-multiple-entry/test.ts new file mode 100644 index 000000000..b7427f125 --- /dev/null +++ b/test/apps/export-multiple-entry/test.ts @@ -0,0 +1,48 @@ +import * as assert from 'assert'; +import { walk } from '../../utils'; +import * as api from '../../../api'; + +describe('export multiple entrypoints', function () { + this.timeout(10000); + + // hooks + before('build app', () => api.build({ cwd: __dirname })); + before('export app', () => api.export({ cwd: __dirname, entry: '/index.html /boom blog about.html contact' })); + + // tests + it('crawls a site when given unlinked entrypoints', () => { + const files = walk(`${__dirname}/__sapper__/export`); + + const client_assets = files.filter(file => file.startsWith('client/')); + const non_client_assets = files.filter(file => !file.startsWith('client/')).sort(); + + assert.ok(client_assets.length > 0); + + const boom = ['boom/index.html']; + for (let a = 1; a <= 20; a += 1) { + boom.push(`boom/${a}/index.html`); + for (let b = 1; b <= 20; b += 1) { + boom.push(`boom/${a}/${b}/index.html`); + } + } + + assert.deepEqual(non_client_assets.sort(), [ + 'blog.json', + 'blog/bar.json', + 'blog/bar/index.html', + 'blog/baz.json', + 'blog/baz/index.html', + 'blog/foo.json', + 'blog/foo/index.html', + 'blog/index.html', + 'global.css', + 'index.html', + 'about/index.html', + 'contact/index.html', + 'service-worker-index.html', + 'service-worker.js', + ...boom + ].sort()); + }); + +}); From 5f143159f4555613099012449768314a77b00168 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Sun, 28 Jul 2019 15:30:58 -0400 Subject: [PATCH 2/4] tidy --- .gitignore | 3 +-- package-lock.json | 43 ++++++++++++------------------------------- src/api/export.ts | 2 -- 3 files changed, 13 insertions(+), 35 deletions(-) diff --git a/.gitignore b/.gitignore index b27c6edea..e25b13b6c 100644 --- a/.gitignore +++ b/.gitignore @@ -9,5 +9,4 @@ runtime.js dist !rollup.config.js /runtime/app.mjs -/runtime/server.mjs -.vscode +/runtime/server.mjs \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index fd470c09d..33164fb0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "sapper", - "version": "0.27.4", + "version": "0.27.3", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -2076,8 +2076,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -2098,14 +2097,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2120,20 +2117,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -2250,8 +2244,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -2263,7 +2256,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2278,7 +2270,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2286,14 +2277,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -2312,7 +2301,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -2393,8 +2381,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -2406,7 +2393,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -2492,8 +2478,7 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -2529,7 +2514,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -2549,7 +2533,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -2593,14 +2576,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, diff --git a/src/api/export.ts b/src/api/export.ts index abc5563c6..2a90df3e6 100644 --- a/src/api/export.ts +++ b/src/api/export.ts @@ -80,8 +80,6 @@ async function _export({ const root = resolve(origin, basepath); if (!root.href.endsWith('/')) root.href += '/'; - - const entryPoints = entry.split(' ').map(entryPoint => { const entry = resolve(origin, `${basepath}/${cleanPath(entryPoint)}`); if (!entry.href.endsWith('/')) entry.href += '/'; From 1cdb3c0cb336af57ccf95de5217ca98c414cb260 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Sun, 28 Jul 2019 16:01:22 -0400 Subject: [PATCH 3/4] tidy --- src/api/export.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/api/export.ts b/src/api/export.ts index 2a90df3e6..695460f35 100644 --- a/src/api/export.ts +++ b/src/api/export.ts @@ -87,8 +87,6 @@ async function _export({ return entry; }); - let currentRoot = 0; - const proc = child_process.fork(path.resolve(`${build_dir}/server/server.js`), [], { cwd, env: Object.assign({ @@ -212,7 +210,7 @@ async function _export({ type = 'text/html'; body = ``; - tasks.push(handle(resolve(entryPoints[currentRoot].href, location))); + tasks.push(handle(resolve(root.href, location))); } save(pathname, r.status, type, body); @@ -223,12 +221,11 @@ async function _export({ try { await ports.wait(port); - for (let i = 0; i < entryPoints.length; i++) { + for (const entryPoint of entryPoints) { oninfo({ - message: `Crawling ${entryPoints[currentRoot].href}` + message: `Crawling ${entryPoint.href}` }); - await handle(entryPoints[currentRoot]); - currentRoot++; + await handle(entryPoint); } await handle(resolve(root.href, 'service-worker-index.html')); From 842098304adbfdce757de8f0e24e3a9d3305634c Mon Sep 17 00:00:00 2001 From: Conduitry Date: Sun, 28 Jul 2019 16:05:55 -0400 Subject: [PATCH 4/4] adjust cli option descriptions --- src/cli.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cli.ts b/src/cli.ts index f077a4fbf..eede74936 100755 --- a/src/cli.ts +++ b/src/cli.ts @@ -154,7 +154,7 @@ prog.command('build [dest]') .option('--src', 'Source directory', 'src') .option('--routes', 'Routes directory', 'src/routes') .option('--output', 'Sapper output directory', 'src/node_modules/@sapper') - .option('--ext', 'Custom Route Extension', '.svelte .html') + .option('--ext', 'Custom page route extensions (space separated)', '.svelte .html') .example(`build custom-dir -p 4567`) .action(async (dest = '__sapper__/build', opts: { port: string, @@ -204,8 +204,8 @@ prog.command('export [dest]') .option('--static', 'Static files directory', 'static') .option('--output', 'Sapper output directory', 'src/node_modules/@sapper') .option('--build-dir', 'Intermediate build directory', '__sapper__/build') - .option('--ext', 'Custom Route Extension', '.svelte .html') - .option('--entry', 'Custom entry points', '/') + .option('--ext', 'Custom page route extensions (space separated)', '.svelte .html') + .option('--entry', 'Custom entry points (space separated)', '/') .action(async (dest = '__sapper__/export', opts: { build: boolean, legacy: boolean,