UNPKG

plotly-icons

Version:
1,409 lines (1,137 loc) 46.9 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _from = require('babel-runtime/core-js/array/from'); var _from2 = _interopRequireDefault(_from); var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); var _getIterator2 = require('babel-runtime/core-js/get-iterator'); var _getIterator3 = _interopRequireDefault(_getIterator2); var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); var _promise = require('babel-runtime/core-js/promise'); var _promise2 = _interopRequireDefault(_promise); var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var _typeof2 = require('babel-runtime/helpers/typeof'); var _typeof3 = _interopRequireDefault(_typeof2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _path = require('path'); var _url = require('url'); var _querystring = require('querystring'); var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs); var _fs3 = require('mz/fs'); var _fs4 = _interopRequireDefault(_fs3); var _http = require('http'); var _http2 = _interopRequireDefault(_http); var _checkUpdates = require('@zeit/check-updates'); var _checkUpdates2 = _interopRequireDefault(_checkUpdates); var _render = require('./render'); var _router = require('./router'); var _router2 = _interopRequireDefault(_router); var _utils = require('./utils'); var _config = require('./config'); var _config2 = _interopRequireDefault(_config); var _constants = require('../lib/constants'); var _package = require('../../package'); var _package2 = _interopRequireDefault(_package); var _asset = require('../lib/asset'); var asset = _interopRequireWildcard(_asset); var _runtimeConfig = require('../lib/runtime-config'); var envConfig = _interopRequireWildcard(_runtimeConfig); var _utils2 = require('../lib/utils'); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } require('@zeit/source-map-support').install(); // We need to go up one more level since we are in the `dist` directory var blockedPages = { '/_document': true, '/_error': true }; var Server = function () { function Server() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref$dir = _ref.dir, dir = _ref$dir === undefined ? '.' : _ref$dir, _ref$dev = _ref.dev, dev = _ref$dev === undefined ? false : _ref$dev, _ref$staticMarkup = _ref.staticMarkup, staticMarkup = _ref$staticMarkup === undefined ? false : _ref$staticMarkup, _ref$quiet = _ref.quiet, quiet = _ref$quiet === undefined ? false : _ref$quiet, _ref$conf = _ref.conf, conf = _ref$conf === undefined ? null : _ref$conf; (0, _classCallCheck3.default)(this, Server); this.dir = (0, _path.resolve)(dir); this.dev = dev; this.quiet = quiet; this.router = new _router2.default(); this.http = null; var phase = dev ? _constants.PHASE_DEVELOPMENT_SERVER : _constants.PHASE_PRODUCTION_SERVER; this.nextConfig = (0, _config2.default)(phase, this.dir, conf); this.dist = this.nextConfig.distDir; this.hotReloader = dev ? this.getHotReloader(this.dir, { quiet: quiet, config: this.nextConfig }) : null; if (dev) { (0, _checkUpdates2.default)(_package2.default, 'next'); } // Only serverRuntimeConfig needs the default // publicRuntimeConfig gets it's default in client/index.js var _nextConfig = this.nextConfig, _nextConfig$serverRun = _nextConfig.serverRuntimeConfig, serverRuntimeConfig = _nextConfig$serverRun === undefined ? {} : _nextConfig$serverRun, publicRuntimeConfig = _nextConfig.publicRuntimeConfig, assetPrefix = _nextConfig.assetPrefix, generateEtags = _nextConfig.generateEtags; if (!dev && !_fs2.default.existsSync((0, _path.resolve)(dir, this.dist, 'BUILD_ID'))) { console.error('> Could not find a valid build in the \'' + this.dist + '\' directory! Try building your app with \'next build\' before starting the server.'); process.exit(1); } this.buildId = !dev ? this.readBuildId() : '-'; this.renderOpts = { dev: dev, staticMarkup: staticMarkup, dir: this.dir, dist: this.dist, hotReloader: this.hotReloader, buildId: this.buildId, availableChunks: dev ? {} : (0, _utils.getAvailableChunks)(this.dir, this.dist), generateEtags: generateEtags // Only the `publicRuntimeConfig` key is exposed to the client side // It'll be rendered as part of __NEXT_DATA__ on the client side };if (publicRuntimeConfig) { this.renderOpts.runtimeConfig = publicRuntimeConfig; } // Initialize next/config with the environment configuration envConfig.setConfig({ serverRuntimeConfig: serverRuntimeConfig, publicRuntimeConfig: publicRuntimeConfig }); this.setAssetPrefix(assetPrefix); this.defineRoutes(); } (0, _createClass3.default)(Server, [{ key: 'getHotReloader', value: function getHotReloader(dir, options) { var HotReloader = require('./hot-reloader').default; return new HotReloader(dir, options); } }, { key: 'handleRequest', value: function handleRequest(req, res, parsedUrl) { var _this = this; // Parse url if parsedUrl not provided if (!parsedUrl || (typeof parsedUrl === 'undefined' ? 'undefined' : (0, _typeof3.default)(parsedUrl)) !== 'object') { parsedUrl = (0, _url.parse)(req.url, true); } // Parse the querystring ourselves if the user doesn't handle querystring parsing if (typeof parsedUrl.query === 'string') { parsedUrl.query = (0, _querystring.parse)(parsedUrl.query); } res.statusCode = 200; return this.run(req, res, parsedUrl).catch(function (err) { if (!_this.quiet) console.error(err); res.statusCode = 500; res.end(_http.STATUS_CODES[500]); }); } }, { key: 'getRequestHandler', value: function getRequestHandler() { return this.handleRequest.bind(this); } }, { key: 'setAssetPrefix', value: function setAssetPrefix(prefix) { this.renderOpts.assetPrefix = prefix ? prefix.replace(/\/$/, '') : ''; asset.setAssetPrefix(this.renderOpts.assetPrefix); } }, { key: 'prepare', value: function () { var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() { return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!this.hotReloader) { _context.next = 3; break; } _context.next = 3; return this.hotReloader.start(); case 3: case 'end': return _context.stop(); } } }, _callee, this); })); function prepare() { return _ref2.apply(this, arguments); } return prepare; }() }, { key: 'close', value: function () { var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() { var _this2 = this; return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (!this.hotReloader) { _context2.next = 3; break; } _context2.next = 3; return this.hotReloader.stop(); case 3: if (!this.http) { _context2.next = 6; break; } _context2.next = 6; return new _promise2.default(function (resolve, reject) { _this2.http.close(function (err) { if (err) return reject(err); return resolve(); }); }); case 6: case 'end': return _context2.stop(); } } }, _callee2, this); })); function close() { return _ref3.apply(this, arguments); } return close; }() }, { key: 'defineRoutes', value: function defineRoutes() { var _this3 = this; var routes = { '/_next-prefetcher.js': function () { var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(req, res, params) { var p; return _regenerator2.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: p = (0, _path.join)(__dirname, '../client/next-prefetcher-bundle.js'); _context3.next = 3; return _this3.serveStatic(req, res, p); case 3: case 'end': return _context3.stop(); } } }, _callee3, _this3); })); function _nextPrefetcherJs(_x2, _x3, _x4) { return _ref4.apply(this, arguments); } return _nextPrefetcherJs; }(), // This is to support, webpack dynamic imports in production. '/_next/webpack/chunks/:name': function () { var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(req, res, params) { var p; return _regenerator2.default.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: // Cache aggressively in production if (!_this3.dev) { res.setHeader('Cache-Control', 'max-age=31536000, immutable'); } p = (0, _path.join)(_this3.dir, _this3.dist, 'chunks', params.name); _context4.next = 4; return _this3.serveStatic(req, res, p); case 4: case 'end': return _context4.stop(); } } }, _callee4, _this3); })); function _nextWebpackChunksName(_x5, _x6, _x7) { return _ref5.apply(this, arguments); } return _nextWebpackChunksName; }(), // This is to support, webpack dynamic import support with HMR '/_next/webpack/:id': function () { var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(req, res, params) { var p; return _regenerator2.default.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: p = (0, _path.join)(_this3.dir, _this3.dist, 'chunks', params.id); _context5.next = 3; return _this3.serveStatic(req, res, p); case 3: case 'end': return _context5.stop(); } } }, _callee5, _this3); })); function _nextWebpackId(_x8, _x9, _x10) { return _ref6.apply(this, arguments); } return _nextWebpackId; }(), '/_next/:buildId/manifest.js': function () { var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(req, res, params) { var p; return _regenerator2.default.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: if (_this3.dev) { _context6.next = 2; break; } return _context6.abrupt('return', _this3.send404(res)); case 2: _this3.handleBuildId(params.buildId, res); p = (0, _path.join)(_this3.dir, _this3.dist, 'manifest.js'); _context6.next = 6; return _this3.serveStatic(req, res, p); case 6: case 'end': return _context6.stop(); } } }, _callee6, _this3); })); function _nextBuildIdManifestJs(_x11, _x12, _x13) { return _ref7.apply(this, arguments); } return _nextBuildIdManifestJs; }(), '/_next/:buildId/manifest.js.map': function () { var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(req, res, params) { var p; return _regenerator2.default.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: if (_this3.dev) { _context7.next = 2; break; } return _context7.abrupt('return', _this3.send404(res)); case 2: _this3.handleBuildId(params.buildId, res); p = (0, _path.join)(_this3.dir, _this3.dist, 'manifest.js.map'); _context7.next = 6; return _this3.serveStatic(req, res, p); case 6: case 'end': return _context7.stop(); } } }, _callee7, _this3); })); function _nextBuildIdManifestJsMap(_x14, _x15, _x16) { return _ref8.apply(this, arguments); } return _nextBuildIdManifestJsMap; }(), '/_next/:buildId/main.js': function () { var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(req, res, params) { var p, buildId, error, customFields, _p; return _regenerator2.default.wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: if (!_this3.dev) { _context8.next = 7; break; } _this3.handleBuildId(params.buildId, res); p = (0, _path.join)(_this3.dir, _this3.dist, 'main.js'); _context8.next = 5; return _this3.serveStatic(req, res, p); case 5: _context8.next = 17; break; case 7: buildId = params.buildId; if (_this3.handleBuildId(buildId, res)) { _context8.next = 14; break; } error = new Error('INVALID_BUILD_ID'); customFields = { buildIdMismatched: true }; _context8.next = 13; return (0, _render.renderScriptError)(req, res, '/_error', error, customFields, _this3.renderOpts); case 13: return _context8.abrupt('return', _context8.sent); case 14: _p = (0, _path.join)(_this3.dir, _this3.dist, 'main.js'); _context8.next = 17; return _this3.serveStatic(req, res, _p); case 17: case 'end': return _context8.stop(); } } }, _callee8, _this3); })); function _nextBuildIdMainJs(_x17, _x18, _x19) { return _ref9.apply(this, arguments); } return _nextBuildIdMainJs; }(), '/_next/:buildId/main.js.map': function () { var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(req, res, params) { var p, buildId, _p2; return _regenerator2.default.wrap(function _callee9$(_context9) { while (1) { switch (_context9.prev = _context9.next) { case 0: if (!_this3.dev) { _context9.next = 7; break; } _this3.handleBuildId(params.buildId, res); p = (0, _path.join)(_this3.dir, _this3.dist, 'main.js.map'); _context9.next = 5; return _this3.serveStatic(req, res, p); case 5: _context9.next = 15; break; case 7: buildId = params.buildId; if (_this3.handleBuildId(buildId, res)) { _context9.next = 12; break; } _context9.next = 11; return _this3.render404(req, res); case 11: return _context9.abrupt('return', _context9.sent); case 12: _p2 = (0, _path.join)(_this3.dir, _this3.dist, 'main.js.map'); _context9.next = 15; return _this3.serveStatic(req, res, _p2); case 15: case 'end': return _context9.stop(); } } }, _callee9, _this3); })); function _nextBuildIdMainJsMap(_x20, _x21, _x22) { return _ref10.apply(this, arguments); } return _nextBuildIdMainJsMap; }(), '/_next/:buildId/page/:path*.js.map': function () { var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(req, res, params) { var paths, page, path; return _regenerator2.default.wrap(function _callee10$(_context10) { while (1) { switch (_context10.prev = _context10.next) { case 0: paths = params.path || ['']; page = '/' + paths.join('/'); if (!_this3.dev) { _context10.next = 12; break; } _context10.prev = 3; _context10.next = 6; return _this3.hotReloader.ensurePage(page); case 6: _context10.next = 12; break; case 8: _context10.prev = 8; _context10.t0 = _context10['catch'](3); _context10.next = 12; return _this3.render404(req, res); case 12: path = (0, _path.join)(_this3.dir, _this3.dist, 'bundles', 'pages', page + '.js.map'); _context10.next = 15; return (0, _render.serveStatic)(req, res, path); case 15: case 'end': return _context10.stop(); } } }, _callee10, _this3, [[3, 8]]); })); function _nextBuildIdPagePathJsMap(_x23, _x24, _x25) { return _ref11.apply(this, arguments); } return _nextBuildIdPagePathJsMap; }(), // This is very similar to the following route. // But for this one, the page already built when the Next.js process starts. // There's no need to build it in on-demand manner and check for other things. // So, it's clean to have a seperate route for this. '/_next/:buildId/page/_error.js': function () { var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(req, res, params) { var error, p; return _regenerator2.default.wrap(function _callee11$(_context11) { while (1) { switch (_context11.prev = _context11.next) { case 0: if (_this3.handleBuildId(params.buildId, res)) { _context11.next = 5; break; } error = new Error('INVALID_BUILD_ID'); _context11.next = 4; return (0, _render.renderScriptError)(req, res, '/_error', error); case 4: return _context11.abrupt('return', _context11.sent); case 5: p = (0, _path.join)(_this3.dir, _this3.dist + '/bundles/pages/_error.js'); _context11.next = 8; return _this3.serveStatic(req, res, p); case 8: case 'end': return _context11.stop(); } } }, _callee11, _this3); })); function _nextBuildIdPage_errorJs(_x26, _x27, _x28) { return _ref12.apply(this, arguments); } return _nextBuildIdPage_errorJs; }(), '/_next/:buildId/page/:path*.js': function () { var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(req, res, params) { var paths, page, error, compilationErr, p; return _regenerator2.default.wrap(function _callee12$(_context12) { while (1) { switch (_context12.prev = _context12.next) { case 0: paths = params.path || ['']; page = '/' + paths.join('/'); if (_this3.handleBuildId(params.buildId, res)) { _context12.next = 7; break; } error = new Error('INVALID_BUILD_ID'); _context12.next = 6; return (0, _render.renderScriptError)(req, res, page, error); case 6: return _context12.abrupt('return', _context12.sent); case 7: if (!_this3.dev) { _context12.next = 25; break; } _context12.prev = 8; _context12.next = 11; return _this3.hotReloader.ensurePage(page); case 11: _context12.next = 18; break; case 13: _context12.prev = 13; _context12.t0 = _context12['catch'](8); _context12.next = 17; return (0, _render.renderScriptError)(req, res, page, _context12.t0); case 17: return _context12.abrupt('return', _context12.sent); case 18: _context12.next = 20; return _this3.getCompilationError(); case 20: compilationErr = _context12.sent; if (!compilationErr) { _context12.next = 25; break; } _context12.next = 24; return (0, _render.renderScriptError)(req, res, page, compilationErr); case 24: return _context12.abrupt('return', _context12.sent); case 25: p = (0, _path.join)(_this3.dir, _this3.dist, 'bundles', 'pages', page + '.js'); // [production] If the page is not exists, we need to send a proper Next.js style 404 // Otherwise, it'll affect the multi-zones feature. _context12.next = 28; return _fs4.default.exists(p); case 28: if (_context12.sent) { _context12.next = 32; break; } _context12.next = 31; return (0, _render.renderScriptError)(req, res, page, { code: 'ENOENT' }); case 31: return _context12.abrupt('return', _context12.sent); case 32: _context12.next = 34; return _this3.serveStatic(req, res, p); case 34: case 'end': return _context12.stop(); } } }, _callee12, _this3, [[8, 13]]); })); function _nextBuildIdPagePathJs(_x29, _x30, _x31) { return _ref13.apply(this, arguments); } return _nextBuildIdPagePathJs; }(), '/_next/static/:path*': function () { var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13(req, res, params) { var p; return _regenerator2.default.wrap(function _callee13$(_context13) { while (1) { switch (_context13.prev = _context13.next) { case 0: p = _path.join.apply(undefined, [_this3.dir, _this3.dist, 'static'].concat((0, _toConsumableArray3.default)(params.path || []))); _context13.next = 3; return _this3.serveStatic(req, res, p); case 3: case 'end': return _context13.stop(); } } }, _callee13, _this3); })); function _nextStaticPath(_x32, _x33, _x34) { return _ref14.apply(this, arguments); } return _nextStaticPath; }(), // It's very important keep this route's param optional. // (but it should support as many as params, seperated by '/') // Othewise this will lead to a pretty simple DOS attack. // See more: https://github.com/zeit/next.js/issues/2617 '/_next/:path*': function () { var _ref15 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee14(req, res, params) { var p; return _regenerator2.default.wrap(function _callee14$(_context14) { while (1) { switch (_context14.prev = _context14.next) { case 0: p = _path.join.apply(undefined, [__dirname, '..', 'client'].concat((0, _toConsumableArray3.default)(params.path || []))); _context14.next = 3; return _this3.serveStatic(req, res, p); case 3: case 'end': return _context14.stop(); } } }, _callee14, _this3); })); function _nextPath(_x35, _x36, _x37) { return _ref15.apply(this, arguments); } return _nextPath; }(), // It's very important keep this route's param optional. // (but it should support as many as params, seperated by '/') // Othewise this will lead to a pretty simple DOS attack. // See more: https://github.com/zeit/next.js/issues/2617 '/static/:path*': function () { var _ref16 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee15(req, res, params) { var p; return _regenerator2.default.wrap(function _callee15$(_context15) { while (1) { switch (_context15.prev = _context15.next) { case 0: p = _path.join.apply(undefined, [_this3.dir, 'static'].concat((0, _toConsumableArray3.default)(params.path || []))); _context15.next = 3; return _this3.serveStatic(req, res, p); case 3: case 'end': return _context15.stop(); } } }, _callee15, _this3); })); function staticPath(_x38, _x39, _x40) { return _ref16.apply(this, arguments); } return staticPath; }() }; if (this.nextConfig.useFileSystemPublicRoutes) { routes['/:path*'] = function () { var _ref17 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee16(req, res, params, parsedUrl) { var pathname, query; return _regenerator2.default.wrap(function _callee16$(_context16) { while (1) { switch (_context16.prev = _context16.next) { case 0: pathname = parsedUrl.pathname, query = parsedUrl.query; _context16.next = 3; return _this3.render(req, res, pathname, query); case 3: case 'end': return _context16.stop(); } } }, _callee16, _this3); })); return function (_x41, _x42, _x43, _x44) { return _ref17.apply(this, arguments); }; }(); } var _arr = ['GET', 'HEAD']; for (var _i = 0; _i < _arr.length; _i++) { var method = _arr[_i];var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = (0, _getIterator3.default)((0, _keys2.default)(routes)), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var p = _step.value; this.router.add(method, p, routes[p]); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } } }, { key: 'start', value: function () { var _ref18 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee17(port, hostname) { var _this4 = this; return _regenerator2.default.wrap(function _callee17$(_context17) { while (1) { switch (_context17.prev = _context17.next) { case 0: _context17.next = 2; return this.prepare(); case 2: this.http = _http2.default.createServer(this.getRequestHandler()); _context17.next = 5; return new _promise2.default(function (resolve, reject) { // This code catches EADDRINUSE error if the port is already in use _this4.http.on('error', reject); _this4.http.on('listening', function () { return resolve(); }); _this4.http.listen(port, hostname); }); case 5: case 'end': return _context17.stop(); } } }, _callee17, this); })); function start(_x45, _x46) { return _ref18.apply(this, arguments); } return start; }() }, { key: 'run', value: function () { var _ref19 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee18(req, res, parsedUrl) { var fn; return _regenerator2.default.wrap(function _callee18$(_context18) { while (1) { switch (_context18.prev = _context18.next) { case 0: if (!this.hotReloader) { _context18.next = 3; break; } _context18.next = 3; return this.hotReloader.run(req, res); case 3: fn = this.router.match(req, res, parsedUrl); if (!fn) { _context18.next = 8; break; } _context18.next = 7; return fn(); case 7: return _context18.abrupt('return'); case 8: if (!(req.method === 'GET' || req.method === 'HEAD')) { _context18.next = 13; break; } _context18.next = 11; return this.render404(req, res, parsedUrl); case 11: _context18.next = 15; break; case 13: res.statusCode = 501; res.end(_http.STATUS_CODES[501]); case 15: case 'end': return _context18.stop(); } } }, _callee18, this); })); function run(_x47, _x48, _x49) { return _ref19.apply(this, arguments); } return run; }() }, { key: 'render', value: function () { var _ref20 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee19(req, res, pathname, query, parsedUrl) { var html; return _regenerator2.default.wrap(function _callee19$(_context19) { while (1) { switch (_context19.prev = _context19.next) { case 0: if (!(0, _utils.isInternalUrl)(req.url)) { _context19.next = 2; break; } return _context19.abrupt('return', this.handleRequest(req, res, parsedUrl)); case 2: if (!blockedPages[pathname]) { _context19.next = 6; break; } _context19.next = 5; return this.render404(req, res, parsedUrl); case 5: return _context19.abrupt('return', _context19.sent); case 6: _context19.next = 8; return this.renderToHTML(req, res, pathname, query); case 8: html = _context19.sent; if (!(0, _utils2.isResSent)(res)) { _context19.next = 11; break; } return _context19.abrupt('return'); case 11: if (this.nextConfig.poweredByHeader) { res.setHeader('X-Powered-By', 'Next.js ' + _package2.default.version); } return _context19.abrupt('return', (0, _render.sendHTML)(req, res, html, req.method, this.renderOpts)); case 13: case 'end': return _context19.stop(); } } }, _callee19, this); })); function render(_x50, _x51, _x52, _x53, _x54) { return _ref20.apply(this, arguments); } return render; }() }, { key: 'renderToHTML', value: function () { var _ref21 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee20(req, res, pathname, query) { var compilationErr, out; return _regenerator2.default.wrap(function _callee20$(_context20) { while (1) { switch (_context20.prev = _context20.next) { case 0: if (!this.dev) { _context20.next = 7; break; } _context20.next = 3; return this.getCompilationError(); case 3: compilationErr = _context20.sent; if (!compilationErr) { _context20.next = 7; break; } res.statusCode = 500; return _context20.abrupt('return', this.renderErrorToHTML(compilationErr, req, res, pathname, query)); case 7: _context20.prev = 7; _context20.next = 10; return (0, _render.renderToHTML)(req, res, pathname, query, this.renderOpts); case 10: out = _context20.sent; return _context20.abrupt('return', out); case 14: _context20.prev = 14; _context20.t0 = _context20['catch'](7); if (!(_context20.t0.code === 'ENOENT')) { _context20.next = 21; break; } res.statusCode = 404; return _context20.abrupt('return', this.renderErrorToHTML(null, req, res, pathname, query)); case 21: if (!this.quiet) console.error(_context20.t0); res.statusCode = 500; return _context20.abrupt('return', this.renderErrorToHTML(_context20.t0, req, res, pathname, query)); case 24: case 'end': return _context20.stop(); } } }, _callee20, this, [[7, 14]]); })); function renderToHTML(_x55, _x56, _x57, _x58) { return _ref21.apply(this, arguments); } return renderToHTML; }() }, { key: 'renderError', value: function () { var _ref22 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee21(err, req, res, pathname, query) { var html; return _regenerator2.default.wrap(function _callee21$(_context21) { while (1) { switch (_context21.prev = _context21.next) { case 0: _context21.next = 2; return this.renderErrorToHTML(err, req, res, pathname, query); case 2: html = _context21.sent; return _context21.abrupt('return', (0, _render.sendHTML)(req, res, html, req.method, this.renderOpts)); case 4: case 'end': return _context21.stop(); } } }, _callee21, this); })); function renderError(_x59, _x60, _x61, _x62, _x63) { return _ref22.apply(this, arguments); } return renderError; }() }, { key: 'renderErrorToHTML', value: function () { var _ref23 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee22(err, req, res, pathname, query) { var compilationErr; return _regenerator2.default.wrap(function _callee22$(_context22) { while (1) { switch (_context22.prev = _context22.next) { case 0: if (!this.dev) { _context22.next = 7; break; } _context22.next = 3; return this.getCompilationError(); case 3: compilationErr = _context22.sent; if (!compilationErr) { _context22.next = 7; break; } res.statusCode = 500; return _context22.abrupt('return', (0, _render.renderErrorToHTML)(compilationErr, req, res, pathname, query, this.renderOpts)); case 7: _context22.prev = 7; _context22.next = 10; return (0, _render.renderErrorToHTML)(err, req, res, pathname, query, this.renderOpts); case 10: return _context22.abrupt('return', _context22.sent); case 13: _context22.prev = 13; _context22.t0 = _context22['catch'](7); if (!this.dev) { _context22.next = 21; break; } if (!this.quiet) console.error(_context22.t0); res.statusCode = 500; return _context22.abrupt('return', (0, _render.renderErrorToHTML)(_context22.t0, req, res, pathname, query, this.renderOpts)); case 21: throw _context22.t0; case 22: case 'end': return _context22.stop(); } } }, _callee22, this, [[7, 13]]); })); function renderErrorToHTML(_x64, _x65, _x66, _x67, _x68) { return _ref23.apply(this, arguments); } return renderErrorToHTML; }() }, { key: 'render404', value: function () { var _ref24 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee23(req, res) { var parsedUrl = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : (0, _url.parse)(req.url, true); var pathname, query; return _regenerator2.default.wrap(function _callee23$(_context23) { while (1) { switch (_context23.prev = _context23.next) { case 0: pathname = parsedUrl.pathname, query = parsedUrl.query; res.statusCode = 404; return _context23.abrupt('return', this.renderError(null, req, res, pathname, query)); case 3: case 'end': return _context23.stop(); } } }, _callee23, this); })); function render404(_x70, _x71) { return _ref24.apply(this, arguments); } return render404; }() }, { key: 'serveStatic', value: function () { var _ref25 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee24(req, res, path) { return _regenerator2.default.wrap(function _callee24$(_context24) { while (1) { switch (_context24.prev = _context24.next) { case 0: if (this.isServeableUrl(path)) { _context24.next = 2; break; } return _context24.abrupt('return', this.render404(req, res)); case 2: _context24.prev = 2; _context24.next = 5; return (0, _render.serveStatic)(req, res, path); case 5: return _context24.abrupt('return', _context24.sent); case 8: _context24.prev = 8; _context24.t0 = _context24['catch'](2); if (!(_context24.t0.code === 'ENOENT')) { _context24.next = 14; break; } this.render404(req, res); _context24.next = 15; break; case 14: throw _context24.t0; case 15: case 'end': return _context24.stop(); } } }, _callee24, this, [[2, 8]]); })); function serveStatic(_x72, _x73, _x74) { return _ref25.apply(this, arguments); } return serveStatic; }() }, { key: 'isServeableUrl', value: function isServeableUrl(path) { var resolved = (0, _path.resolve)(path); if (resolved.indexOf((0, _path.join)(this.dir, this.dist) + _path.sep) !== 0 && resolved.indexOf((0, _path.join)(this.dir, 'static') + _path.sep) !== 0) { // Seems like the user is trying to traverse the filesystem. return false; } return true; } }, { key: 'readBuildId', value: function readBuildId() { var buildIdPath = (0, _path.join)(this.dir, this.dist, 'BUILD_ID'); var buildId = _fs2.default.readFileSync(buildIdPath, 'utf8'); return buildId.trim(); } }, { key: 'handleBuildId', value: function handleBuildId(buildId, res) { if (this.dev) { res.setHeader('Cache-Control', 'no-store, must-revalidate'); return true; } if (buildId !== this.renderOpts.buildId) { return false; } res.setHeader('Cache-Control', 'max-age=31536000, immutable'); return true; } }, { key: 'getCompilationError', value: function () { var _ref26 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee25() { var errors; return _regenerator2.default.wrap(function _callee25$(_context25) { while (1) { switch (_context25.prev = _context25.next) { case 0: if (this.hotReloader) { _context25.next = 2; break; } return _context25.abrupt('return'); case 2: _context25.next = 4; return this.hotReloader.getCompilationErrors(); case 4: errors = _context25.sent; if (errors.size) { _context25.next = 7; break; } return _context25.abrupt('return'); case 7: return _context25.abrupt('return', (0, _from2.default)(errors.values())[0][0]); case 8: case 'end': return _context25.stop(); } } }, _callee25, this); })); function getCompilationError() { return _ref26.apply(this, arguments); } return getCompilationError; }() }, { key: 'send404', value: function send404(res) { res.statusCode = 404; res.end('404 - Not Found'); } }]); return Server; }(); exports.default = Server;