diff --git a/site/package-lock.json b/site/package-lock.json index bffc2628b7..a96697a7f2 100644 --- a/site/package-lock.json +++ b/site/package-lock.json @@ -1360,6 +1360,11 @@ } } }, + "@polka/send": { + "version": "1.0.0-next.2", + "resolved": "https://registry.npmjs.org/@polka/send/-/send-1.0.0-next.2.tgz", + "integrity": "sha512-eq8gUzykpYPuOMrnyAzsL4KunhQXZKFiNsbThAwh19PrBAz2v8mECsj3YnxjYYifbB1w1vhR74nsXQWDi80oAg==" + }, "@polka/url": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/@polka/url/-/url-0.5.0.tgz", @@ -1492,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", @@ -1621,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", @@ -1922,16 +1905,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", @@ -2097,16 +2070,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", @@ -2135,11 +2098,6 @@ "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", "dev": true }, - "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", @@ -2152,11 +2110,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", @@ -2200,11 +2153,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", @@ -2241,11 +2189,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", @@ -2302,43 +2245,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", @@ -2476,20 +2382,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", @@ -2531,11 +2423,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", @@ -2545,11 +2432,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", @@ -3373,31 +3255,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", @@ -3443,11 +3306,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", @@ -3897,11 +3755,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", @@ -3919,11 +3772,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", @@ -3933,11 +3781,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", @@ -3962,7 +3805,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", @@ -4361,14 +4205,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", @@ -4565,11 +4401,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", @@ -4637,6 +4468,22 @@ "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", "dev": true }, + "polka": { + "version": "1.0.0-next.2", + "resolved": "https://registry.npmjs.org/polka/-/polka-1.0.0-next.2.tgz", + "integrity": "sha512-y82w42/8IA7bc4YwGwAmnbrXj8ZWWDGvnfwq1b0eCtFielZSSSJv7OXUIKQuc/vw5OCCM1hPIgrYsNPzbwDaJw==", + "requires": { + "@polka/url": "^1.0.0-next.1", + "trouter": "^3.0.1" + }, + "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", @@ -4669,15 +4516,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", @@ -4688,32 +4526,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", @@ -4805,6 +4622,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", @@ -5029,11 +4851,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", @@ -5084,43 +4901,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", @@ -5162,11 +4948,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", @@ -5466,11 +5247,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", @@ -5666,13 +5442,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.1", + "resolved": "https://registry.npmjs.org/trouter/-/trouter-3.0.1.tgz", + "integrity": "sha512-9IBGrlL5bW65xhWufCCf4AsZyxGVIxv7Jy+PTwNtfPHJo+8hAp4wvt/+ersAHE//0Lgjy7obPROfgasNocoYuA==", "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "regexparam": "^1.2.0" } }, "uglify-js": { @@ -5780,11 +5555,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 0249fd6c8d..437cf0680d 100644 --- a/site/package.json +++ b/site/package.json @@ -14,10 +14,10 @@ "testsrc": "mocha -r esm test/**" }, "dependencies": { + "@polka/send": "^1.0.0-next.2", "codemirror": "^5.44.0", "devalue": "^1.1.0", "do-not-zip": "^1.0.0", - "express": "^4.16.4", "express-session": "^1.15.6", "golden-fleece": "^1.0.9", "limax": "^1.7.0", @@ -25,6 +25,7 @@ "node-fetch": "^2.3.0", "passport": "^0.4.0", "passport-github": "^1.1.0", + "polka": "^1.0.0-next.2", "prismjs": "^1.15.0", "session-file-store": "^1.2.0", "shelljs": "^0.8.3", 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]+ { + renderer.hr = () => { block_open = true; return '
'; @@ -94,7 +94,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/docs/index.json.js b/site/src/routes/docs/index.json.js index e2b74e82a7..66d588a949 100644 --- a/site/src/routes/docs/index.json.js +++ b/site/src/routes/docs/index.json.js @@ -1,15 +1,12 @@ +import send from '@polka/send'; import get_sections from './_sections.js'; let json; export function get(req, res) { if (!json || process.env.NODE_ENV !== 'production') { - json = JSON.stringify(get_sections()); + json = get_sections(); } - res.set({ - 'Content-Type': 'application/json' - }); - - res.end(json); -} \ No newline at end of file + send(res, 200, json); +} diff --git a/site/src/routes/examples/[slug].json.js b/site/src/routes/examples/[slug].json.js index 818a038cb1..2cb0958982 100644 --- a/site/src/routes/examples/[slug].json.js +++ b/site/src/routes/examples/[slug].json.js @@ -1,3 +1,4 @@ +import send from '@polka/send'; import { get_example } from './_examples.js'; const cache = new Map(); @@ -6,20 +7,17 @@ export function get(req, res) { const { slug } = req.params; try { - if (!cache.has(slug) || process.env.NODE_ENV !== 'production') { - cache.set(slug, JSON.stringify(get_example(slug))); - } + let example = cache.get(slug); - res.writeHead(200, { - 'Content-Type': 'application/json' - }); + if (!example || process.env.NODE_ENV !== 'production') { + example = get_example(slug); + cache.set(slug, example); + } - res.end(cache.get(slug)); + send(res, 200, example); } catch (err) { - res.writeHead(404, { - 'Content-Type': 'application/json' + send(res, 404, { + error: 'not found' }); - - res.end(JSON.stringify({ error: 'not found' })); } } 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/examples/index.json.js b/site/src/routes/examples/index.json.js index 8617d70cab..09876e1993 100644 --- a/site/src/routes/examples/index.json.js +++ b/site/src/routes/examples/index.json.js @@ -1,3 +1,4 @@ +import send from '@polka/send'; import { get_examples } from './_examples.js'; let cached; @@ -5,19 +6,13 @@ let cached; export function get(req, res) { try { if (!cached || process.env.NODE_ENV !== 'production') { - cached = JSON.stringify(get_examples().filter(section => section.title)); + cached = get_examples().filter(section => section.title); } - res.writeHead(200, { - 'Content-Type': 'application/json' - }); - - res.end(cached); + send(res, 200, cached); } catch (e) { - res.writeHead(e.status || 500, { - 'Content-Type': 'application/json' + send(res, e.status || 500, { + message: e.message }); - - res.end(JSON.stringify({ message: e.message })); } -} \ No newline at end of file +} diff --git a/site/src/routes/gist/[id].js b/site/src/routes/gist/[id].js index a03302fb8d..9e237d7b39 100644 --- a/site/src/routes/gist/[id].js +++ b/site/src/routes/gist/[id].js @@ -1,5 +1,6 @@ import fetch from 'node-fetch'; import { body } from './_utils.js'; +import send from '@polka/send'; export async function get(req, res) { const { id } = req.params; @@ -14,22 +15,18 @@ export async function get(req, res) { headers }); - res.writeHead(r.status, { - 'Content-Type': 'application/json' - }); - const result = await r.json(); if (r.status === 200) { - res.end(JSON.stringify({ + send(res, 200, { id: result.id, description: result.description, owner: result.owner, html_url: result.html_url, files: result.files - })); + }); } else { - res.end(JSON.stringify(result)); + send(res, r.status, result); } } @@ -37,11 +34,7 @@ export async function patch(req, res) { const user = req.session && req.session.passport && req.session.passport.user; if (!user) { - res.writeHead(403, { - 'Content-Type': 'application/json' - }); - res.end(JSON.stringify({ error: 'unauthorized' })); - return; + return send(res, 403, { error: 'unauthorized' }); } try { @@ -58,24 +51,16 @@ export async function patch(req, res) { }) }); - res.writeHead(r.status, { - 'Content-Type': 'application/json' - }); - if (r.status === 200) { - res.end(JSON.stringify({ - ok: true - })); + send(res, 200, { ok: true }); } else { - res.end(await r.text()); + send(res, r.status, await r.text(), { + 'Content-Type': 'application/json' + }); } } catch (err) { - res.writeHead(500, { - 'Content-Type': 'application/json' - }); - - res.end(JSON.stringify({ + send(res, 500, { error: err.message - })); + }); } -} \ No newline at end of file +} diff --git a/site/src/routes/gist/create.js b/site/src/routes/gist/create.js index d93a067316..d67ea9b313 100644 --- a/site/src/routes/gist/create.js +++ b/site/src/routes/gist/create.js @@ -1,15 +1,12 @@ import fetch from 'node-fetch'; import { body } from './_utils.js'; +import send from '@polka/send'; export async function post(req, res) { const user = req.session.passport && req.session.passport.user; if (!user) { - res.writeHead(403, { - 'Content-Type': 'application/json' - }); - res.end(JSON.stringify({ error: 'unauthorized' })); - return; + return send(res, 403, { error: 'unauthorized' }); } try { @@ -45,26 +42,18 @@ export async function post(req, res) { }) }); - res.writeHead(r.status, { - 'Content-Type': 'application/json' - }); - const gist = await r.json(); - res.end(JSON.stringify({ + send(res, r.status, { id: gist.id, description: gist.description, owner: gist.owner, html_url: gist.html_url, files: gist.files - })); - } catch (err) { - res.writeHead(500, { - 'Content-Type': 'application/json' }); - - res.end(JSON.stringify({ + } catch (err) { + send(res, 500, { error: err.message - })); + }); } } diff --git a/site/src/routes/tutorial/[slug]/index.json.js b/site/src/routes/tutorial/[slug]/index.json.js index 7076ce1170..888647d66f 100644 --- a/site/src/routes/tutorial/[slug]/index.json.js +++ b/site/src/routes/tutorial/[slug]/index.json.js @@ -2,6 +2,7 @@ import * as fs from 'fs'; import * as path from 'path'; import marked from 'marked'; import PrismJS from 'prismjs'; +import send from '@polka/send'; import { extract_frontmatter, extract_metadata, langs, link_renderer } from '../../../utils/markdown'; const cache = new Map(); @@ -94,20 +95,15 @@ function get_tutorial(slug) { export function get(req, res) { const { slug } = req.params; - if (!cache.has(slug) || process.env.NODE_ENV !== 'production') { - cache.set(slug, JSON.stringify(get_tutorial(slug))); + let tut = cache.get(slug); + if (!tut || process.env.NODE_ENV !== 'production') { + tut = get_tutorial(slug); + cache.set(slug, tut); } - const json = cache.get(slug); - - res.set({ - 'Content-Type': 'application/json' - }); - - if (json) { - res.end(json); + if (tut) { + send(res, 200, tut); } 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/tutorial/index.json.js b/site/src/routes/tutorial/index.json.js index 52b9e8aa33..3b5a742d27 100644 --- a/site/src/routes/tutorial/index.json.js +++ b/site/src/routes/tutorial/index.json.js @@ -1,4 +1,5 @@ import * as fs from 'fs'; +import send from '@polka/send'; import { extract_frontmatter } from '../../utils/markdown'; let json; @@ -41,7 +42,7 @@ function get_sections() { throw new Error(`Error building tutorial ${dir}/${tutorial}: ${err.message}`); } }) - } + }; }); return sections; @@ -50,21 +51,13 @@ function get_sections() { export function get(req, res) { try { if (!json || process.env.NODE_ENV !== 'production') { - json = JSON.stringify(get_sections()); + json = get_sections(); } - res.set({ - 'Content-Type': 'application/json' - }); - - res.end(json); + send(res, 200, json); } catch (err) { - res.writeHead(500, { - 'Content-Type': 'application/json' - }); - - res.end(JSON.stringify({ + send(res, 500, { message: err.message - })); + }); } } diff --git a/site/src/server.js b/site/src/server.js index 0a3e467d48..3413e218d8 100644 --- a/site/src/server.js +++ b/site/src/server.js @@ -1,14 +1,14 @@ import 'dotenv/config'; import sirv from 'sirv'; -import express from 'express'; +import polka from 'polka'; +import devalue from 'devalue'; import session from 'express-session'; import passport from 'passport'; import { Strategy } from 'passport-github'; import sessionFileStore from 'session-file-store'; -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); @@ -66,7 +66,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(`