From 092d0be525cfea4b2a73af01cee839a123644147 Mon Sep 17 00:00:00 2001 From: Luke Edwards Date: Sun, 21 Apr 2019 22:07:53 -0700 Subject: [PATCH 01/31] =?UTF-8?q?chore:=20install=20=E2=80=9Cpolka/send?= =?UTF-8?q?=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/package-lock.json | 5 +++++ site/package.json | 1 + 2 files changed, 6 insertions(+) diff --git a/site/package-lock.json b/site/package-lock.json index b977151326..bc0363bb6b 100644 --- a/site/package-lock.json +++ b/site/package-lock.json @@ -1360,6 +1360,11 @@ } } }, + "@polka/send": { + "version": "1.0.0-next.1", + "resolved": "https://registry.npmjs.org/@polka/send/-/send-1.0.0-next.1.tgz", + "integrity": "sha512-HCPYOmuP3jdNd/tXO0bsOi5HUAGx0Pcou3levCrflT6KjuFNqYdNoqMjjkrhljDzLMlTcWXCUXUoLA7h3twTJg==" + }, "@polka/url": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@polka/url/-/url-0.5.0.tgz", diff --git a/site/package.json b/site/package.json index 8fff42e6c1..0ac8c96077 100644 --- a/site/package.json +++ b/site/package.json @@ -14,6 +14,7 @@ "testsrc": "mocha -r esm test/**" }, "dependencies": { + "@polka/send": "^1.0.0-next.1", "codemirror": "^5.44.0", "compression": "^1.7.3", "devalue": "^1.1.0", From 999b1f4cdb37f7d529d71a9f35de44b3fb90bfb4 Mon Sep 17 00:00:00 2001 From: Luke Edwards Date: Sun, 21 Apr 2019 22:09:02 -0700 Subject: [PATCH 02/31] refactor: let `send` build output --- site/src/routes/auth/me.json.js | 11 +++--- site/src/routes/blog/[slug].json.js | 19 +++++---- site/src/routes/blog/index.json.js | 6 +-- site/src/routes/blog/rss.xml.js | 4 +- site/src/routes/docs/index.json.js | 11 ++---- site/src/routes/examples/[slug].json.js | 20 +++++----- site/src/routes/examples/index.json.js | 17 +++----- site/src/routes/gist/[id].js | 39 ++++++------------- site/src/routes/gist/create.js | 23 +++-------- site/src/routes/tutorial/[slug]/index.json.js | 22 +++++------ site/src/routes/tutorial/index.json.js | 17 +++----- 11 files changed, 71 insertions(+), 118 deletions(-) diff --git a/site/src/routes/auth/me.json.js b/site/src/routes/auth/me.json.js index 2c9cebe765..44aa7c9a6f 100644 --- a/site/src/routes/auth/me.json.js +++ b/site/src/routes/auth/me.json.js @@ -1,9 +1,10 @@ +import send from '@polka/send'; + export function get(req, res) { if (!req.session || !req.session.passport || !req.session.passport.user) { - res.send('null'); - return; + return send(res, 200, 'null'); } - const { id, username, displayName, photo } = req.session.passport && req.session.passport.user; - res.send({ id, username, displayName, photo }); -} \ No newline at end of file + const { id, username, displayName, photo } = req.session.passport.user; + send(res, 200, { id, username, displayName, photo }); +} diff --git a/site/src/routes/blog/[slug].json.js b/site/src/routes/blog/[slug].json.js index ebc191f2da..ee41d5826d 100644 --- a/site/src/routes/blog/[slug].json.js +++ b/site/src/routes/blog/[slug].json.js @@ -1,3 +1,4 @@ +import send from '@polka/send'; import get_posts from './_posts.js'; let lookup; @@ -6,18 +7,16 @@ export function get(req, res) { if (!lookup || process.env.NODE_ENV !== 'production') { lookup = new Map(); get_posts().forEach(post => { - lookup.set(post.slug, JSON.stringify(post)); + lookup.set(post.slug, post); }); } - if (lookup.has(req.params.slug)) { - res.set({ - 'Content-Type': 'application/json', - 'Cache-Control': `max-age=${5 * 60 * 1e3}` // 5 minutes - }); - res.end(lookup.get(req.params.slug)); + const post = lookup.get(req.params.slug); + + if (post) { + res.setHeader('Cache-Control', `max-age=${5 * 60 * 1e3}`); // 5 minutes + send(res, 200, post); } else { - res.statusCode = 404; - res.end(JSON.stringify({ message: 'not found' })); + send(res, 404, { message: 'not found' }); } -} \ No newline at end of file +} diff --git a/site/src/routes/blog/index.json.js b/site/src/routes/blog/index.json.js index b2609505a4..75180e6e87 100644 --- a/site/src/routes/blog/index.json.js +++ b/site/src/routes/blog/index.json.js @@ -1,3 +1,4 @@ +import send from '@polka/send'; import get_posts from './_posts.js'; let json; @@ -16,9 +17,8 @@ export function get(req, res) { json = JSON.stringify(posts); } - res.set({ + send(res, 200, json, { 'Content-Type': 'application/json', 'Cache-Control': `max-age=${5 * 60 * 1e3}` // 5 minutes }); - res.end(json); -} \ No newline at end of file +} diff --git a/site/src/routes/blog/rss.xml.js b/site/src/routes/blog/rss.xml.js index e41e1131f0..974806ad44 100644 --- a/site/src/routes/blog/rss.xml.js +++ b/site/src/routes/blog/rss.xml.js @@ -1,3 +1,4 @@ +import send from '@polka/send'; import get_posts from '../blog/_posts.js'; const months = ',Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','); @@ -34,9 +35,8 @@ const rss = ` `.replace(/>[^\S]+/gm, '>').replace(/[^\S]+ Date: Sun, 21 Apr 2019 22:12:19 -0700 Subject: [PATCH 03/31] chore: linter fixes --- site/src/routes/docs/_sections.js | 4 ++-- site/src/routes/examples/_examples.js | 3 +-- site/src/routes/tutorial/index.json.js | 2 +- site/src/service-worker.js | 2 +- site/src/utils/events.js | 4 ++-- site/src/utils/markdown.js | 10 +++++----- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/site/src/routes/docs/_sections.js b/site/src/routes/docs/_sections.js index 6a10659a84..588d2f56cf 100644 --- a/site/src/routes/docs/_sections.js +++ b/site/src/routes/docs/_sections.js @@ -56,7 +56,7 @@ export default function() { renderer.link = link_renderer; - renderer.hr = (...args) => { + renderer.hr = () => { block_open = true; return '
'; @@ -92,7 +92,7 @@ export default function() { lang ); - let html = `
${prefix}
${highlighted}
`; + const html = `
${prefix}
${highlighted}
`; if (block_open) { block_open = false; diff --git a/site/src/routes/examples/_examples.js b/site/src/routes/examples/_examples.js index 75c0aab08f..bf23769500 100644 --- a/site/src/routes/examples/_examples.js +++ b/site/src/routes/examples/_examples.js @@ -1,5 +1,4 @@ import fs from 'fs'; -import path from 'path'; let lookup; const titles = new Map(); @@ -48,4 +47,4 @@ export function get_example(slug) { }); return { title, files }; -} \ No newline at end of file +} diff --git a/site/src/routes/tutorial/index.json.js b/site/src/routes/tutorial/index.json.js index 48357729b9..3b5a742d27 100644 --- a/site/src/routes/tutorial/index.json.js +++ b/site/src/routes/tutorial/index.json.js @@ -42,7 +42,7 @@ function get_sections() { throw new Error(`Error building tutorial ${dir}/${tutorial}: ${err.message}`); } }) - } + }; }); return sections; diff --git a/site/src/service-worker.js b/site/src/service-worker.js index e226670753..172fd8cf35 100644 --- a/site/src/service-worker.js +++ b/site/src/service-worker.js @@ -76,7 +76,7 @@ self.addEventListener('fetch', event => { const response = await fetch(event.request); cache.put(event.request, response.clone()); return response; - } catch(err) { + } catch (err) { const response = await cache.match(event.request); if (response) return response; diff --git a/site/src/utils/events.js b/site/src/utils/events.js index c1d2e84199..5575812a95 100644 --- a/site/src/utils/events.js +++ b/site/src/utils/events.js @@ -13,7 +13,7 @@ export function keyEvent(code) { node.removeEventListener('keydown', handleKeydown); } }; - } + }; } -export const enter = keyEvent(13); \ No newline at end of file +export const enter = keyEvent(13); diff --git a/site/src/utils/markdown.js b/site/src/utils/markdown.js index e1021664c3..cbfb6fb550 100644 --- a/site/src/utils/markdown.js +++ b/site/src/utils/markdown.js @@ -48,14 +48,14 @@ export const langs = { export function link_renderer(href,title,text) { let target_attr = ''; let title_attr = ''; - - if(href.startsWith("http")) { + + if (href.startsWith("http")) { target_attr = ' target="_blank"'; } - if(title !== null) { + if (title !== null) { title_attr = ` title="${title}"`; } - + return `${text}`; -}; \ No newline at end of file +} From 030d3c9b0de20b96e241953eae73243bac87855e Mon Sep 17 00:00:00 2001 From: Luke Edwards Date: Sun, 21 Apr 2019 22:15:36 -0700 Subject: [PATCH 04/31] site: install & use polka --- site/package-lock.json | 332 +++++------------------------------------ site/package.json | 2 +- site/src/server.js | 9 +- 3 files changed, 45 insertions(+), 298 deletions(-) diff --git a/site/package-lock.json b/site/package-lock.json index bc0363bb6b..4d1caaba23 100644 --- a/site/package-lock.json +++ b/site/package-lock.json @@ -1497,11 +1497,6 @@ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", "dev": true }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, "array-map": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", @@ -1626,23 +1621,6 @@ "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=", "dev": true }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1949,16 +1927,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, "convert-source-map": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", @@ -2124,16 +2092,6 @@ "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", "optional": true }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, "devalue": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/devalue/-/devalue-1.1.0.tgz", @@ -2161,11 +2119,6 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==" }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, "electron-to-chromium": { "version": "1.3.124", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.124.tgz", @@ -2178,11 +2131,6 @@ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", @@ -2226,11 +2174,6 @@ "is-symbol": "^1.0.2" } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -2267,11 +2210,6 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -2328,43 +2266,6 @@ } } }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, "express-session": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.16.1.tgz", @@ -2502,20 +2403,6 @@ } } }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - } - }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -2557,11 +2444,6 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -2571,11 +2453,6 @@ "map-cache": "^0.2.2" } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, "fs-extra": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", @@ -2622,8 +2499,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -2647,15 +2523,13 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2672,22 +2546,19 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -2818,8 +2689,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -2833,7 +2703,6 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2850,7 +2719,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2859,15 +2727,13 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -2888,7 +2754,6 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -2977,8 +2842,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -2992,7 +2856,6 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -3088,8 +2951,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -3131,7 +2993,6 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -3153,7 +3014,6 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -3202,15 +3062,13 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true, - "optional": true + "dev": true } } }, @@ -3428,31 +3286,12 @@ } } }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, "http-link-header": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/http-link-header/-/http-link-header-1.0.2.tgz", "integrity": "sha512-z6YOZ8ZEnejkcCWlGZzYXNa6i+ZaTfiTg3WhlV/YvnNya3W/RbX1bMVUMTuCrg/DrtTCQxaFCkXCz4FtLpcebg==", "dev": true }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, "ieee754": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", @@ -3498,11 +3337,6 @@ "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", "dev": true }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" - }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -3952,11 +3786,6 @@ "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.2.tgz", "integrity": "sha512-LqxwVH3P/rqKX4EKGz7+c2G9r98WeM/SW34ybhgNGhUQNKtf1GmmSkJ6cDGJ/t6tiyae49qRkpyTw2B9HOrgUA==" }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, "mem": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", @@ -3974,11 +3803,6 @@ "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", "dev": true }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, "merge-stream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", @@ -3988,11 +3812,6 @@ "readable-stream": "^2.0.1" } }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -4017,7 +3836,8 @@ "mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true }, "mime-db": { "version": "1.38.0", @@ -4416,14 +4236,6 @@ "integrity": "sha1-3LcCTazVDFK00wPwSALJHAV8dl8=", "dev": true }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, "on-headers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", @@ -4620,11 +4432,6 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", @@ -4692,6 +4499,22 @@ "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", "dev": true }, + "polka": { + "version": "1.0.0-next.1", + "resolved": "https://registry.npmjs.org/polka/-/polka-1.0.0-next.1.tgz", + "integrity": "sha512-wtogd1Vg4N2kg3Yuj7CztgOBU+Rr1DzeKCVEUsYe0qNN2YB5nVV8Ii0sx3eIH1Zpb6unSYDrnFmZ9Ipf/RdYpA==", + "requires": { + "@polka/url": "^1.0.0-next.1", + "trouter": "^3.0.0" + }, + "dependencies": { + "@polka/url": { + "version": "1.0.0-next.1", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.1.tgz", + "integrity": "sha512-6d8YbKW4hjJMnU6ZJSDLtALWiB4J//OIPaP885ruf5U8MLZHigocDxhjgvLwbV6bGkikhllgTjD9eWioKWAQdA==" + } + } + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -4724,15 +4547,6 @@ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, - "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" - } - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -4743,32 +4557,11 @@ "once": "^1.3.1" } }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, "random-bytes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -4860,6 +4653,11 @@ "integrity": "sha512-nUmxvfJyAODw+0B13hj8CFVAxhe7fDEAgJgaotBu3nnR+IgGgZq59YedJP5VYTlkEfqjuK6TuRpnymKdatLZfQ==", "dev": true }, + "regexparam": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-1.2.1.tgz", + "integrity": "sha512-L/xx/JNXFvejDD9b4FukSh2wCyYUpxSTnLkMpcZc/ygnmaF6ETnphh+FDKZS8XBGmu2e3GoZ1why9qkTYqr1ag==" + }, "regexpu-core": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", @@ -5084,11 +4882,6 @@ "ret": "~0.1.10" } }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "sander": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/sander/-/sander-0.6.0.tgz", @@ -5139,43 +4932,12 @@ "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - } - }, "serialize-javascript": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", "dev": true }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } - }, "session-file-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/session-file-store/-/session-file-store-1.2.0.tgz", @@ -5217,11 +4979,6 @@ } } }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -5522,11 +5279,6 @@ } } }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - }, "string-hash": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", @@ -5731,13 +5483,12 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "trouter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/trouter/-/trouter-3.0.0.tgz", + "integrity": "sha512-j5AJuTJOGu0V9CiJa5vDHeKil45YyAoBNjUaHsMfJ2PdCxm8ARTW5QrkyNTjCA+e5BZDnvu0CYBX60zQz/2WAw==", "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "regexparam": "^1.2.0" } }, "uglify-js": { @@ -5845,11 +5596,6 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", diff --git a/site/package.json b/site/package.json index 0ac8c96077..055d28c919 100644 --- a/site/package.json +++ b/site/package.json @@ -20,7 +20,6 @@ "devalue": "^1.1.0", "do-not-zip": "^1.0.0", "dotenv": "^6.2.0", - "express": "^4.16.4", "express-session": "^1.15.6", "golden-fleece": "^1.0.9", "limax": "^1.7.0", @@ -28,6 +27,7 @@ "node-fetch": "^2.3.0", "passport": "^0.4.0", "passport-github": "^1.1.0", + "polka": "^1.0.0-next.1", "prismjs": "^1.15.0", "session-file-store": "^1.2.0", "shelljs": "^0.8.3", diff --git a/site/src/server.js b/site/src/server.js index 084b52b5b6..4d69d5e11c 100644 --- a/site/src/server.js +++ b/site/src/server.js @@ -1,5 +1,5 @@ import 'dotenv/config'; -import express from 'express'; +import polka from 'polka'; import compression from 'compression'; import session from 'express-session'; import passport from 'passport'; @@ -9,7 +9,7 @@ import serve from 'serve-static'; import devalue from 'devalue'; import * as sapper from '@sapper/server'; -const app = express(); +const app = polka(); if (process.env.GITHUB_CLIENT_ID) { const FileStore = sessionFileStore(session); @@ -67,7 +67,8 @@ if (process.env.GITHUB_CLIENT_ID) { .get('/auth/callback', passport.authenticate('github', { failureRedirect: '/auth/error' }), (req, res) => { const { id, username, displayName, photo } = req.session.passport && req.session.passport.user; - res.set({ 'Content-Type': 'text/html; charset=utf-8' }); + res.setHeader('Content-Type', 'text/html; charset=utf-8'); + res.end(` ``` @@ -18,13 +18,12 @@ It's now possible for the components to 'talk' to each other without any state m ```js onMount(() => { - elements.add(audio); - return () => elements.delete(audio); + currentPlayer = audio; + return () => currentPlayer = null; }); function stopOthers() { - elements.forEach(element => { - if (element !== audio) element.pause(); - }); + if (currentPlayer !== audio) currentPlayer.pause(); + currentPlayer = audio; } -``` \ No newline at end of file +``` From 51f2a3b2317738b0146c3276d19dff2000bdddad Mon Sep 17 00:00:00 2001 From: Conduitry Date: Tue, 23 Apr 2019 11:32:37 -0400 Subject: [PATCH 08/31] handle unknown nodes in extract_identifiers (#2510) (#2514) --- src/compile/utils/scope.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compile/utils/scope.ts b/src/compile/utils/scope.ts index d4427c44ff..20cca46cba 100644 --- a/src/compile/utils/scope.ts +++ b/src/compile/utils/scope.ts @@ -106,7 +106,7 @@ export function extract_names(param: Node) { export function extract_identifiers(param: Node) { const nodes: Node[] = []; - extractors[param.type](nodes, param); + extractors[param.type] && extractors[param.type](nodes, param); return nodes; } From 356a1eb8d935cbf8e11bf6f6dc7086af6644b531 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Tue, 23 Apr 2019 11:39:21 -0400 Subject: [PATCH 09/31] add test --- test/runtime/samples/reactive-value-mutate/_config.js | 3 +++ test/runtime/samples/reactive-value-mutate/main.svelte | 7 +++++++ 2 files changed, 10 insertions(+) create mode 100644 test/runtime/samples/reactive-value-mutate/_config.js create mode 100644 test/runtime/samples/reactive-value-mutate/main.svelte diff --git a/test/runtime/samples/reactive-value-mutate/_config.js b/test/runtime/samples/reactive-value-mutate/_config.js new file mode 100644 index 0000000000..e408816834 --- /dev/null +++ b/test/runtime/samples/reactive-value-mutate/_config.js @@ -0,0 +1,3 @@ +export default { + html: `{"bar":42}` +}; diff --git a/test/runtime/samples/reactive-value-mutate/main.svelte b/test/runtime/samples/reactive-value-mutate/main.svelte new file mode 100644 index 0000000000..59fc5b7eb5 --- /dev/null +++ b/test/runtime/samples/reactive-value-mutate/main.svelte @@ -0,0 +1,7 @@ + + +{JSON.stringify(foo)} From 1865710095241dfe7f8c1f9ebde0323214c75b2b Mon Sep 17 00:00:00 2001 From: Scotty Simpson Date: Tue, 23 Apr 2019 08:40:03 -0700 Subject: [PATCH 10/31] add multiple class toggles example This answers the immediate question I had when I first saw the `class:foo` syntax. --- site/content/docs/02-template-syntax.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/site/content/docs/02-template-syntax.md b/site/content/docs/02-template-syntax.md index 5bbd7b4e1e..47ac9f6f0e 100644 --- a/site/content/docs/02-template-syntax.md +++ b/site/content/docs/02-template-syntax.md @@ -600,6 +600,9 @@ A `class:` directive provides a shorter way of toggling a class on an element.
...
+ + +
...
``` From 644c02eb54016abdd25efedbbbd5411b68cbd47d Mon Sep 17 00:00:00 2001 From: Scotty Simpson Date: Tue, 23 Apr 2019 09:39:49 -0700 Subject: [PATCH 11/31] is-admin => isAdmin --- site/content/docs/02-template-syntax.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/content/docs/02-template-syntax.md b/site/content/docs/02-template-syntax.md index 47ac9f6f0e..37810d0c68 100644 --- a/site/content/docs/02-template-syntax.md +++ b/site/content/docs/02-template-syntax.md @@ -602,7 +602,7 @@ A `class:` directive provides a shorter way of toggling a class on an element.
...
-
...
+
...
``` From 50cf49a8841fc7b9e3e955fef955cb584bf1049f Mon Sep 17 00:00:00 2001 From: Hongarc Date: Wed, 24 Apr 2019 00:56:19 +0700 Subject: [PATCH 12/31] Remove whitespace at end of line --- .../transition-js-if-block-in-each-block-bidi/main.svelte | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/runtime/samples/transition-js-if-block-in-each-block-bidi/main.svelte b/test/runtime/samples/transition-js-if-block-in-each-block-bidi/main.svelte index 5d85e51c73..5e8979b2d4 100644 --- a/test/runtime/samples/transition-js-if-block-in-each-block-bidi/main.svelte +++ b/test/runtime/samples/transition-js-if-block-in-each-block-bidi/main.svelte @@ -11,8 +11,8 @@ } -{#each [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] as number} +{#each [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] as number} {#if threshold >= number}
{number}
{/if} -{/each} \ No newline at end of file +{/each} From 2a2aa428a229616b0d72a89774646e072f39f3c6 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Tue, 23 Apr 2019 14:07:54 -0400 Subject: [PATCH 13/31] fix unit test under Node 12 --- test/runtime/samples/binding-select/_config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/runtime/samples/binding-select/_config.js b/test/runtime/samples/binding-select/_config.js index 6fd7e60b2a..a5995061a0 100644 --- a/test/runtime/samples/binding-select/_config.js +++ b/test/runtime/samples/binding-select/_config.js @@ -31,7 +31,7 @@ export default { const select = target.querySelector('select'); const options = [...target.querySelectorAll('option')]; - assert.deepEqual(options, select.options); + assert.deepEqual(options, [...select.options]); assert.equal(component.selected, 'one'); const change = new window.Event('change'); From 8fa676bfb0d9c77324fd704030af1f7ac55df072 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Tue, 23 Apr 2019 14:48:18 -0400 Subject: [PATCH 14/31] site: in examples.json don't return sections with no title --- site/src/routes/examples/index.json.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/src/routes/examples/index.json.js b/site/src/routes/examples/index.json.js index 4cb4d9c554..8617d70cab 100644 --- a/site/src/routes/examples/index.json.js +++ b/site/src/routes/examples/index.json.js @@ -5,7 +5,7 @@ let cached; export function get(req, res) { try { if (!cached || process.env.NODE_ENV !== 'production') { - cached = JSON.stringify(get_examples()); + cached = JSON.stringify(get_examples().filter(section => section.title)); } res.writeHead(200, { From f2e1b0ea9973d2f012468d31fdbc6efa8e7e13d2 Mon Sep 17 00:00:00 2001 From: Conduitry Date: Tue, 23 Apr 2019 14:49:25 -0400 Subject: [PATCH 15/31] site: move svelte-css-in-js REPL embed into example --- site/content/blog/2018-12-26-svelte-css-in-js.md | 3 +-- .../20181225-blog-svelte-css-in-js/App.svelte | 10 ++++++++++ .../20181225-blog-svelte-css-in-js/Hero.svelte | 15 +++++++++++++++ .../20181225-blog-svelte-css-in-js/meta.json | 3 +++ site/content/examples/99-embeds/meta.json | 1 + 5 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/App.svelte create mode 100644 site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/Hero.svelte create mode 100644 site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/meta.json create mode 100644 site/content/examples/99-embeds/meta.json diff --git a/site/content/blog/2018-12-26-svelte-css-in-js.md b/site/content/blog/2018-12-26-svelte-css-in-js.md index 5e8e6ed71b..f77eb83206 100644 --- a/site/content/blog/2018-12-26-svelte-css-in-js.md +++ b/site/content/blog/2018-12-26-svelte-css-in-js.md @@ -19,7 +19,7 @@ Here, we're using [Emotion](https://emotion.sh) to generate scoped class names t
@@ -27,4 +27,3 @@ Here, we're using [Emotion](https://emotion.sh) to generate scoped class names t It's important to note that most CSS-in-JS libraries have a runtime library, and many don't support statically extracting styles out into a separate .css file at build time (which is essential for the best performance). You should therefore only use CSS-in-JS if it's necessary for your application! Note that you can mix-and-match — you can still use Svelte's built-in CSS handling alongside a CSS-in-JS library. - diff --git a/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/App.svelte b/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/App.svelte new file mode 100644 index 0000000000..c8487abefe --- /dev/null +++ b/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/App.svelte @@ -0,0 +1,10 @@ + + + + +
+

Did you enjoy your lunch, mom? You drank it fast enough. I know, I just call her Annabelle cause she's shaped like a…she's the belle of the ball! YOU'RE the Chiclet! Not me. Caw ca caw, caw ca caw, caw ca caw! A Colombian cartel that WON'T kidnap and kill you. You go buy a tape recorder and record yourself for a whole day. I think you'll be surprised at some of your phrasing.

+
\ No newline at end of file diff --git a/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/Hero.svelte b/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/Hero.svelte new file mode 100644 index 0000000000..9f60c276ce --- /dev/null +++ b/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/Hero.svelte @@ -0,0 +1,15 @@ + + +
+

+
+
+
CSS
+ in JS +
+ in HTML +
+

+
\ No newline at end of file diff --git a/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/meta.json b/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/meta.json new file mode 100644 index 0000000000..eaa2a1da63 --- /dev/null +++ b/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/meta.json @@ -0,0 +1,3 @@ +{ + "title": "-" +} diff --git a/site/content/examples/99-embeds/meta.json b/site/content/examples/99-embeds/meta.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/site/content/examples/99-embeds/meta.json @@ -0,0 +1 @@ +{} From e49db5c65f0013a92e28fd3f749efb587aea17ef Mon Sep 17 00:00:00 2001 From: Conduitry Date: Tue, 23 Apr 2019 14:49:48 -0400 Subject: [PATCH 16/31] site: move write-less-code REPL embed into example --- .../blog/2019-04-20-write-less-code.md | 4 +-- .../20181225-blog-svelte-css-in-js/styles.js | 33 +++++++++++++++++++ .../20190420-blog-write-less-code/App.svelte | 9 +++++ .../20190420-blog-write-less-code/meta.json | 3 ++ 4 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/styles.js create mode 100644 site/content/examples/99-embeds/20190420-blog-write-less-code/App.svelte create mode 100644 site/content/examples/99-embeds/20190420-blog-write-less-code/meta.json diff --git a/site/content/blog/2019-04-20-write-less-code.md b/site/content/blog/2019-04-20-write-less-code.md index daa22b9206..d6c8b77193 100644 --- a/site/content/blog/2019-04-20-write-less-code.md +++ b/site/content/blog/2019-04-20-write-less-code.md @@ -42,7 +42,7 @@ Reducing the amount of code you have to write is an explicit goal of Svelte. To
@@ -161,4 +161,4 @@ In Vue, meanwhile, we have a default export with a `data` function that returns These are just some of the ways that Svelte helps you build user interfaces with a minimum of fuss. There are plenty of others — for example, [reactive declarations](https://svelte.dev/tutorial/reactive-declarations) essentially do the work of React's `useMemo`, `useCallback` and `useEffect` without the boilerplate (or indeed the garbage collection overhead of creating inline functions and arrays on each state change). -How? By choosing a different set of constraints. Because [Svelte is a compiler](blog/frameworks-without-the-framework), we're not bound to the peculiarities of JavaScript: we can *design* a component authoring experience, rather than having to fit it around the semantics of the language. Paradoxically, this results in *more* idiomatic code — for example using variables naturally rather than via proxies or hooks — while delivering significantly more performant apps. \ No newline at end of file +How? By choosing a different set of constraints. Because [Svelte is a compiler](blog/frameworks-without-the-framework), we're not bound to the peculiarities of JavaScript: we can *design* a component authoring experience, rather than having to fit it around the semantics of the language. Paradoxically, this results in *more* idiomatic code — for example using variables naturally rather than via proxies or hooks — while delivering significantly more performant apps. diff --git a/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/styles.js b/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/styles.js new file mode 100644 index 0000000000..faf91b13d4 --- /dev/null +++ b/site/content/examples/99-embeds/20181225-blog-svelte-css-in-js/styles.js @@ -0,0 +1,33 @@ +import { css } from 'emotion/dist/emotion.umd.min.js'; + +const brand = '#74D900'; + +export const title = css` + color: ${brand}; + font-size: 1em; + white-space: nowrap; +`; + +export const comicSans = css` + font-family: 'Comic Sans MS'; +`; + +export const box = css` + position: relative; + display: inline-block; + border: 2px solid ${brand}; + line-height: 1; + padding: 4px; + border-radius: 4px; +`; + +export const link = css` + color: inherit; + font-weight: bold; + text-decoration: none; + border-bottom: 1px solid ${brand}; + &:hover { + text-decoration: none; + background: ${brand}; + } +`; \ No newline at end of file diff --git a/site/content/examples/99-embeds/20190420-blog-write-less-code/App.svelte b/site/content/examples/99-embeds/20190420-blog-write-less-code/App.svelte new file mode 100644 index 0000000000..46cf93b0fc --- /dev/null +++ b/site/content/examples/99-embeds/20190420-blog-write-less-code/App.svelte @@ -0,0 +1,9 @@ + + + + + +

{a} + {b} = {a + b}

\ No newline at end of file diff --git a/site/content/examples/99-embeds/20190420-blog-write-less-code/meta.json b/site/content/examples/99-embeds/20190420-blog-write-less-code/meta.json new file mode 100644 index 0000000000..eaa2a1da63 --- /dev/null +++ b/site/content/examples/99-embeds/20190420-blog-write-less-code/meta.json @@ -0,0 +1,3 @@ +{ + "title": "-" +} From 7b632182c3ef4fccb7acf61f8802960672ae257a Mon Sep 17 00:00:00 2001 From: swyx Date: Tue, 23 Apr 2019 14:50:45 -0400 Subject: [PATCH 17/31] update quick start instructions since the front page links to this slightly out of date blogpost - i copied over and updated instructions so otherse wont be as confused as i was... --- ...17-08-07-the-easiest-way-to-get-started.md | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/site/content/blog/2017-08-07-the-easiest-way-to-get-started.md b/site/content/blog/2017-08-07-the-easiest-way-to-get-started.md index 394cee6a69..e91166430c 100644 --- a/site/content/blog/2017-08-07-the-easiest-way-to-get-started.md +++ b/site/content/blog/2017-08-07-the-easiest-way-to-get-started.md @@ -38,28 +38,21 @@ This will serve your app on [localhost:5000](http://localhost:5000) and rebuild When you download from the REPL, you're getting a customised version of the [sveltejs/template](https://github.com/sveltejs/template) repo. You can skip messing around with zip files by using [degit](https://github.com/Rich-Harris/degit), a project scaffolding tool. -In the terminal, install degit globally (you only need to do this once): +In the terminal, you can instantly create a new project like so: ```bash -npm install -g degit -``` - -After that, you can instantly create a new project like so: - -```bash -degit sveltejs/template my-new-project -cd my-new-project - +npx degit sveltejs/template my-svelte-project +cd my-svelte-project npm install -npm run dev +npm run dev & open http://localhost:5000 ``` Once you've tinkered a bit and understood how everything fits together, you can fork [sveltejs/template](https://github.com/sveltejs/template) and start doing this instead: ```bash -degit your-name/template my-new-project +npx degit your-name/template my-new-project ``` And that's it! Do `npm run build` to create a production-ready version of your app, and check the project template's [README](https://github.com/sveltejs/template/blob/master/README.md) for instructions on how to easily deploy your app to the web with [Now](https://zeit.co/now) or [Surge](http://surge.sh/). -You're not restricted to using Rollup — there are also integrations for [webpack](https://github.com/sveltejs/svelte-loader), [Browserify](https://github.com/tehshrike/sveltify) and others, or you can use the [Svelte CLI](https://github.com/sveltejs/svelte-cli) or the [API](https://github.com/sveltejs/svelte/tree/v2#api) directly. If you make a project template using one of these tools, please share it with the [Svelte Discord chatroom](https://discord.gg/yy75DKs), or via [@sveltejs](https://twitter.com/sveltejs) on Twitter! +You're not restricted to using Rollup — there are also integrations for [webpack](https://github.com/sveltejs/svelte-loader), [Browserify](https://github.com/tehshrike/sveltify) and others, or you can use the [Svelte CLI](https://github.com/sveltejs/svelte-cli) (Update from 2019: with Svelte 3 the CLI was deprecated and we now use [sirv-cli](https://www.npmjs.com/package/sirv-cli) in our template. Feel free to use whatever tool you like!) or the [API](https://github.com/sveltejs/svelte/tree/v2#api) directly. If you make a project template using one of these tools, please share it with the [Svelte Discord chatroom](https://discord.gg/yy75DKs), or via [@sveltejs](https://twitter.com/sveltejs) on Twitter! From 6c0aa3b9ef929200fd25a3f1199731d43f5a9c6e Mon Sep 17 00:00:00 2001 From: Rubens Mariuzzo Date: Tue, 23 Apr 2019 14:47:02 -0400 Subject: [PATCH 18/31] Add missing dot. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ff409c86a9..605eee8fa8 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ npm run test -- -g transition ## svelte.dev -The source code for https://svelte.dev, including all the documentation, lives in the [site](site) directory. The site is built with [Sapper](https://sapper.svelte.technology) To develop locally: +The source code for https://svelte.dev, including all the documentation, lives in the [site](site) directory. The site is built with [Sapper](https://sapper.svelte.technology). To develop locally: ```bash cd site From c3905be8d8d4b098908274e510248ce50ece7c7d Mon Sep 17 00:00:00 2001 From: sidgo Date: Wed, 24 Apr 2019 00:32:07 +0530 Subject: [PATCH 19/31] Add Razorpay to WhosUsingSvelte --- site/src/routes/_components/WhosUsingSvelte.svelte | 1 + site/static/organisations/razorpay.svg | 1 + 2 files changed, 2 insertions(+) create mode 100644 site/static/organisations/razorpay.svg diff --git a/site/src/routes/_components/WhosUsingSvelte.svelte b/site/src/routes/_components/WhosUsingSvelte.svelte index a7d4fec78e..1700312055 100644 --- a/site/src/routes/_components/WhosUsingSvelte.svelte +++ b/site/src/routes/_components/WhosUsingSvelte.svelte @@ -52,6 +52,7 @@ Mustlab logo Nesta logo The New York Times logo + Razorpay logo Stone Payments logo + your company?
diff --git a/site/static/organisations/razorpay.svg b/site/static/organisations/razorpay.svg new file mode 100644 index 0000000000..003a1bfc3d --- /dev/null +++ b/site/static/organisations/razorpay.svg @@ -0,0 +1 @@ + \ No newline at end of file From ce5399a1de9feb6f70b5f2aba98cdc53c76f7240 Mon Sep 17 00:00:00 2001 From: Luca Bonavita Date: Tue, 23 Apr 2019 21:16:15 +0100 Subject: [PATCH 20/31] Site examples: add a cache and show a loading icon Add a loading icon I made in SVG: it uses SMIL animation so it might not be well supported on IE/Edge but I think Edge will be powered by Chromium pretty soon. Also set the REPL orientation based on the width as discussed in #2466 Closes #2527 --- .../routes/examples/_TableOfContents.svelte | 8 ++ site/src/routes/examples/index.svelte | 77 ++++++++++++------- site/static/icons/loading.svg | 6 ++ 3 files changed, 64 insertions(+), 27 deletions(-) create mode 100644 site/static/icons/loading.svg diff --git a/site/src/routes/examples/_TableOfContents.svelte b/site/src/routes/examples/_TableOfContents.svelte index ec7310c5fa..0de742b172 100644 --- a/site/src/routes/examples/_TableOfContents.svelte +++ b/site/src/routes/examples/_TableOfContents.svelte @@ -1,6 +1,7 @@ - +