diff --git a/encheres/server/controller/HtmlResponseBuilder.js b/encheres/server/controller/HtmlResponseBuilder.js deleted file mode 100644 index 4a2b925d9f96850e7e20b74db93624ece5f560ab..0000000000000000000000000000000000000000 --- a/encheres/server/controller/HtmlResponseBuilder.js +++ /dev/null @@ -1,19 +0,0 @@ - -export default class HtmlResponseBuilder { - - request; - response; - url; - - constructor(request, response) { - this.request =request, - this.response =response; - } - - endResponse() { - this.response.write(`<footer>${Date()}</footer>`); - this.response.write(`</body> </html>`); - this.response.end(); - } - -} \ No newline at end of file diff --git a/encheres/server/controller/RequestController.js b/encheres/server/controller/RequestController.js deleted file mode 100644 index 6b323d2d64e004709b7e44510119fb7c79aa1de4..0000000000000000000000000000000000000000 --- a/encheres/server/controller/RequestController.js +++ /dev/null @@ -1,28 +0,0 @@ -import { URL } from 'url'; -import ResponseBuilder from './ResponseBuilder.js' - -export default class RequestController { - - #request; - #response; - #url; - - constructor(request, response) { - this.#request = request, - this.#response = response; - this.#url = new URL(request.url, `http://${request.headers.host}`); - } - - get response() { - return this.#response; - } - - handleRequest() { - this.buildResponse(); - } - - buildResponse() { - new ResponseBuilder(this.#request, this.#response).handleResponse(); - } - -} \ No newline at end of file diff --git a/encheres/server/controller/ResponseBuilder.js b/encheres/server/controller/ResponseBuilder.js deleted file mode 100644 index 15207edbb151fe5fb7a3848e309a02884e695554..0000000000000000000000000000000000000000 --- a/encheres/server/controller/ResponseBuilder.js +++ /dev/null @@ -1,49 +0,0 @@ -import defaultBuilder from './defaultBuilder.js'; -import aboutBuilder from './aboutBuilder.js'; -import auctioneerBuilder from './auctioneerBuilder.js' -import { URL } from 'url'; - -export default class ResponseBuilder { - request; - response; - url; - - constructor(request, response) { - this.request =request, - this.response =response; - this.url = new URL(request.url, `http://${request.headers.host}`); } - - handleResponse() { - this.prepareResponse(); - this.buildResponse(); - } - - prepareResponse() { - this.response.statusCode = 200; - this.response.setHeader( 'Content-Type' , 'text/html'); - } - - buildResponse() { - - // routage "à la main" - if (this.url.pathname.startsWith('/about')){ - const about = new aboutBuilder(this.request, this.response); - about.bresponse(); - about.endResponse(); - } - else if(this.url.pathname.startsWith('/auctioneer')) { - const auctioneer = new auctioneerBuilder(this.request, this.response); - auctioneer.bresponse(); - auctioneer.endResponse(); - } - else if (this.url.pathname.startsWith('/')){ - const def = new defaultBuilder(this.request, this.response); - def.bresponse(); - def.endResponse(); - } - else { - new ErrorResponseBuilder(this.request, this.response, 404).handleError(); - } - } - -} \ No newline at end of file diff --git a/encheres/server/controller/aboutBuilder.js b/encheres/server/controller/aboutBuilder.js deleted file mode 100644 index aa9f2120599bad152517b2b98b0a1c2050b5a68f..0000000000000000000000000000000000000000 --- a/encheres/server/controller/aboutBuilder.js +++ /dev/null @@ -1,22 +0,0 @@ -import HtmlResponseBuilder from "./HtmlResponseBuilder.js"; - -export default class aboutBuilder extends HtmlResponseBuilder{ - - constructor(request, response){ - super(request, response); - } - - bresponse() { - this.response.write(`<html> - <head> - <meta charset="UTF-8"> - <title>Welcome to second node server</title> - <h1>Node server</h1> - </head> - - <body> - <p>Welcome to second trivial server</p> - </body>`); - } - -} \ No newline at end of file diff --git a/encheres/server/controller/auctioneerBuilder.js b/encheres/server/controller/auctioneerBuilder.js deleted file mode 100644 index 3bf760e8f7d581a2a7f152416f4bd766b10d966c..0000000000000000000000000000000000000000 --- a/encheres/server/controller/auctioneerBuilder.js +++ /dev/null @@ -1,22 +0,0 @@ -import HtmlResponseBuilder from "./HtmlResponseBuilder.js"; - -export default class auctioneerBuilder extends HtmlResponseBuilder{ - - constructor(request, response){ - super(request, response); - } - - bresponse() { - this.response.write(`<html> - <head> - <meta charset="UTF-8"> - <title>Welcome to second node server</title> - <h1>Node server</h1> - </head> - - <body> - <p>Welcome to second trivial server</p> - </body>`); - } - -} \ No newline at end of file diff --git a/encheres/server/controller/defaultBuilder.js b/encheres/server/controller/defaultBuilder.js deleted file mode 100644 index b92cf8c3dd225384ffd84b75a0a698388730ac09..0000000000000000000000000000000000000000 --- a/encheres/server/controller/defaultBuilder.js +++ /dev/null @@ -1,29 +0,0 @@ -import HtmlResponseBuilder from "./HtmlResponseBuilder.js"; - - -export default class defaultBuilder extends HtmlResponseBuilder{ - - constructor(request, response){ - super(request, response); - } - - bresponse() { - this.response.write(`<html> - <head> - <meta charset="UTF-8"> - <title>Welcome to first node server </title> - <link href="./public/style/style.css" rel="" type="text/css"> - <h1>Node server</h1> - </head> - - <body> - <p class="ok">Welcome server</p> - <ul> - <li> <a href="http://${this.request.headers.host}/about">about</a> </li> - <li> <a href="http://${this.request.headers.host}/auctioneer">auctioneer</a> </li> - <li> <a href="http://${this.request.headers.host}/bidder">bidder</a> </li> - </ul> - `); - } - -} \ No newline at end of file diff --git a/encheres/server/controllers/ErrorResponseBuilder.js b/encheres/server/controllers/ErrorResponseBuilder.js new file mode 100644 index 0000000000000000000000000000000000000000..b8a86c8c0d85732eb65838ef7efefa47a39ee83e --- /dev/null +++ b/encheres/server/controllers/ErrorResponseBuilder.js @@ -0,0 +1,29 @@ + +export default class ErrorResponseBuilder { + + #response; + #errorStatus; + #url; + + constructor(url, response, errorStatus) { + this.#response = response; + this.#errorStatus = errorStatus; + this.#url = url; + } + + handleError() { + this.prepareResponse(); + this.bResponse(); + } + + prepareResponse() { + this.#response.statusCode = this.#errorStatus; + this.#response.setHeader( 'Content-Type' , 'text/html'); + } + + bResponse() { + this.#response.write(`${this.#errorStatus} : ${this.#url} not found`); + this.#response.end(); + } + +} \ No newline at end of file diff --git a/encheres/server/controllers/HtmlResponseBuilder.js b/encheres/server/controllers/HtmlResponseBuilder.js new file mode 100644 index 0000000000000000000000000000000000000000..a51f8aa2fed272569985b0a1d87fdf2e57a408c5 --- /dev/null +++ b/encheres/server/controllers/HtmlResponseBuilder.js @@ -0,0 +1,12 @@ + +export default class HtmlResponseBuilder { + + response; + url; + + constructor(url, response) { + this.url = url; + this.response =response; + } + +} \ No newline at end of file diff --git a/encheres/server/controllers/RequestController.js b/encheres/server/controllers/RequestController.js new file mode 100644 index 0000000000000000000000000000000000000000..23f0f85dd1114c6fe1a944b1bd23aae41325ac0f --- /dev/null +++ b/encheres/server/controllers/RequestController.js @@ -0,0 +1,39 @@ +import { URL } from 'url'; +import ResponseBuilder from './ResponseBuilder.js' +import { getContentTypeFrom } from '../scripts/contentTypeUtil.js'; + +const BASE = 'http://localhost/'; + +export default class RequestController { + + #request; + #response; + #url; + + constructor(request, response) { + this.#request = request, + this.#response = response; + this.#url = new URL(this.request.url,BASE).pathname; // on ne considère que le "pathname" de l'URL de la requête + } + + get response() { + return this.#response; + } + get request() { + return this.#request; + } + get url() { + return this.#url; + } + + async handleRequest() { + this.response.setHeader("Content-Type" , getContentTypeFrom(this.url) || 'text/html'); + await this.buildResponse(); + this.response.end(); + } + + buildResponse() { + new ResponseBuilder(this.url, this.#response).handleResponse(); + } + +} \ No newline at end of file diff --git a/encheres/server/controllers/ResponseBuilder.js b/encheres/server/controllers/ResponseBuilder.js new file mode 100644 index 0000000000000000000000000000000000000000..c0b10973ee7c4dec0ddbcfc024003aa1189e067a --- /dev/null +++ b/encheres/server/controllers/ResponseBuilder.js @@ -0,0 +1,54 @@ +import defaultBuilder from './default.js'; +import aboutBuilder from './about.js'; +import auctioneerBuilder from './auctioneer.js' +import ErrorResponseBuilder from './ErrorResponseBuilder.js'; +import bidderBuilder from './bidder.js'; +import { URL } from 'url'; + +export default class ResponseBuilder { + #request; + #response; + #url; + + constructor(url, response) { + this.#response =response; + this.#url = url; + } + + get url() { + return this.#url; + } + + get response() { + return this.#response; + } + + get request() { + return this.#request; + } + + handleResponse() { + this.buildResponse(); + } + + buildResponse() { + + // routage "à la main" + if (this.url === '/' ){ + new defaultBuilder(this.url, this.response).buildResponse(); + } + else if (this.url.startsWith('/about')){ + new aboutBuilder(this.url, this.response).buildResponse(); + } + else if(this.url.startsWith('/auctioneer')) { + new auctioneerBuilder(this.url, this.response).buildResponse(); + } + else if(this.url.startsWith('/bidder')) { + new bidderBuilder(this.url, this.response).buildResponse(); + } + else { + new ErrorResponseBuilder(this.url, this.response, 404).handleError(); + } + } + +} \ No newline at end of file diff --git a/encheres/server/controllers/about.js b/encheres/server/controllers/about.js new file mode 100644 index 0000000000000000000000000000000000000000..fd890ab5b1b8c56babca36107ef4baf8ac3538e5 --- /dev/null +++ b/encheres/server/controllers/about.js @@ -0,0 +1,24 @@ +import HtmlResponseBuilder from "./HtmlResponseBuilder.js"; +import * as fs from 'fs'; + + +export default class about extends HtmlResponseBuilder{ + + constructor(url, response){ + super(url, response); + } + + buildResponse() { + let path = `..${this.url}.html`; + try { + fs.accessSync(path, fs.constants.R_OK); + const content = fs.readFileSync(path); + this.response.write(content); + this.response.end(); + }catch(err) { + new ErrorResponseBuilder(this.url, this.response, 404).handleError(); + } + + } + +} \ No newline at end of file diff --git a/encheres/server/controllers/auctioneer.js b/encheres/server/controllers/auctioneer.js new file mode 100644 index 0000000000000000000000000000000000000000..2f52a85f7d8931d0cdf6ac35346d62d9b01f053e --- /dev/null +++ b/encheres/server/controllers/auctioneer.js @@ -0,0 +1,22 @@ +import HtmlResponseBuilder from "./HtmlResponseBuilder.js"; +import * as fs from 'fs'; + +export default class auctioneer extends HtmlResponseBuilder{ + + constructor(url, response){ + super(url, response); + } + + buildResponse() { + let path = `..${this.url}.html`; + try { + fs.accessSync(path, fs.constants.R_OK); + const content = fs.readFileSync(path); + this.response.write(content); + }catch(err) { + new ErrorResponseBuilder(this.url, this.response, 404).handleError(); + } + + } + +} \ No newline at end of file diff --git a/encheres/server/controllers/bidder.js b/encheres/server/controllers/bidder.js new file mode 100644 index 0000000000000000000000000000000000000000..e0f1dbb7964a638a02c0f71056e95b9857400d21 --- /dev/null +++ b/encheres/server/controllers/bidder.js @@ -0,0 +1,22 @@ +import HtmlResponseBuilder from "./HtmlResponseBuilder.js"; +import * as fs from 'fs'; + +export default class bidder extends HtmlResponseBuilder{ + + constructor(url, response){ + super(url, response); + } + + buildResponse() { + let path = `..${this.url}.html`; + try { + fs.accessSync(path, fs.constants.R_OK); + const content = fs.readFileSync(path); + this.response.write(content); + }catch(err) { + new ErrorResponseBuilder(this.url, this.response, 404).handleError(); + } + + } + +} \ No newline at end of file diff --git a/encheres/server/controllers/default.js b/encheres/server/controllers/default.js new file mode 100644 index 0000000000000000000000000000000000000000..59126338c28b99ad20b59f5b1aa1a96dcb783021 --- /dev/null +++ b/encheres/server/controllers/default.js @@ -0,0 +1,29 @@ +import HtmlResponseBuilder from "./HtmlResponseBuilder.js"; +import * as fs from 'fs'; + +import ErrorResponseBuilder from "./ErrorResponseBuilder.js"; + + +export default class defaultBuilder extends HtmlResponseBuilder{ + + constructor(url, response){ + super(url, response); + } + + /** + * send the requested resource as it is, if it exists, else responds with a 404 + */ + buildResponse() { + const path = `..${this.url}index.html`; + try { + console.log(path); + fs.accessSync(path, fs.constants.R_OK); + const content = fs.readFileSync(path); + this.response.write(content); + }catch(err) { + new ErrorResponseBuilder(this.url, this.response, 404).handleError(); + } + + } + +} \ No newline at end of file diff --git a/encheres/server/controllers/ioController.js b/encheres/server/controllers/ioController.js new file mode 100644 index 0000000000000000000000000000000000000000..9ec5381fe1d57e4d03832779281cc19f7ea30e29 --- /dev/null +++ b/encheres/server/controllers/ioController.js @@ -0,0 +1,50 @@ +export default class IOController { + #io; + #clients; + #interval = 2000; + #maxRandomNumber = 8; + + constructor(io) { + this.#io = io; + this.#clients = new Map(); + } + + registerSocket(socket) { + console.log(`new connection with id ${socket.id}`); + socket.emit('ping', 'ping'); + this.setupListeners(socket); + } + + setupListeners(socket) { + socket.on( 'pong', () => this.greatings(socket) ); + socket.on( 'disconnect' , () => this.leave(socket) ); + } + + greatings(socket) { + console.log(`pong received from (id : ${socket.id}) at ${new Date().toLocaleTimeString()}`); + //const timerId = setInterval(this.randomNumber.bind(this), this.#interval); + //const timerId = setInterval(this.randomNumber.bind(this), this.#interval, socket); /**si on veut que le nombre random soit différent */ + this.#clients.set(socket.id, timerId); + } + + leave(socket) { + const timerId = this.#clients.get(socket.id) || 'unknown' ; + console.log(`disconnection from ${socket.id}`); + clearInterval(timerId); + this.#clients.delete(socket.id); + } + + randomNumber(socket=undefined) { + const number = randInt(this.#maxRandomNumber); + if (socket) { + socket.emit('change number', number); + } + else{ + this.#io.emit('change number', number); + } + console.log(`nombre envoyé ${number}`); + } + +} +const randInt = max => Math.floor( Math.random() * max ); + \ No newline at end of file diff --git a/encheres/server/main.js b/encheres/server/main.js index f8525cde071ba0b6ee06859dad275cddbdb8e347..9a1144e0a64c5f275d19f89c37bdb7f4a6b09e0d 100644 --- a/encheres/server/main.js +++ b/encheres/server/main.js @@ -1,8 +1,13 @@ import http from 'http'; -import RequestController from './controller/RequestController.js'; +import RequestController from './controllers/RequestController.js'; +import { Server as ServerIO } from 'socket.io'; +import IOController from './controllers/ioController.js'; + const server = http.createServer( (request, response) => new RequestController(request, response).handleRequest() ); + + server.listen(8080); \ No newline at end of file diff --git a/encheres/server/public/index.html b/encheres/server/public/index.html index f19e6d39d687f01d87643fd27f252a20474a9145..121c59332a0c66f35201924ffb5325947e852f0a 100644 --- a/encheres/server/public/index.html +++ b/encheres/server/public/index.html @@ -1,23 +1 @@ -<!DOCTYPE html> - -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> - -<head> - <meta charset="UTF-8"/> - <title>PAGE TITLE</title> - <meta name="author" content="your name"/> - - <link rel="stylesheet" type="text/css" href="./style/style.css" title="starship style"/> -<script defer src="scripts/bundle.js?298a7feaf160465c83e4"></script></head> - -<body> - - <h1>Your page</h1> - - <p>Write your html code here.</p> - - <p>Consultez la console pour la trace de création du bundle : <kbd>Ctrl+Shift+K</kbd></p> - -</body> - -</html> +<head><script defer src="scripts/bundle.js?50d73e68ded995014797"></script></head> \ No newline at end of file diff --git a/encheres/server/public/scripts/bundle.js b/encheres/server/public/scripts/bundle.js index 99e540b86bb8350a98fe0aaee5421d309e8c52cc..b11f4fd027562d010cd11e1757bcec01a00cdb3d 100644 --- a/encheres/server/public/scripts/bundle.js +++ b/encheres/server/public/scripts/bundle.js @@ -1,2 +1,2 @@ /*! For license information please see bundle.js.LICENSE.txt */ -(()=>{"use strict";var __webpack_modules__={"./src/controller/RequestController.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ RequestController)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js");\n/* harmony import */ var _babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classPrivateFieldGet */ "./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js");\n/* harmony import */ var _babel_runtime_helpers_classPrivateFieldSet__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/classPrivateFieldSet */ "./node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js");\nObject(function webpackMissingModule() { var e = new Error("Cannot find module \'url\'"); e.code = \'MODULE_NOT_FOUND\'; throw e; }());\n/* harmony import */ var _ResponseBuilder_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ResponseBuilder.js */ "./src/controller/ResponseBuilder.js");\n\n\n\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }\n\n\nvar _request = /*#__PURE__*/new WeakMap();\nvar _response = /*#__PURE__*/new WeakMap();\nvar _url = /*#__PURE__*/new WeakMap();\nvar RequestController = /*#__PURE__*/function () {\n function RequestController(request, response) {\n (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__["default"])(this, RequestController);\n _classPrivateFieldInitSpec(this, _request, {\n writable: true,\n value: void 0\n });\n _classPrivateFieldInitSpec(this, _response, {\n writable: true,\n value: void 0\n });\n _classPrivateFieldInitSpec(this, _url, {\n writable: true,\n value: void 0\n });\n (0,_babel_runtime_helpers_classPrivateFieldSet__WEBPACK_IMPORTED_MODULE_3__["default"])(this, _request, request), (0,_babel_runtime_helpers_classPrivateFieldSet__WEBPACK_IMPORTED_MODULE_3__["default"])(this, _response, response);\n (0,_babel_runtime_helpers_classPrivateFieldSet__WEBPACK_IMPORTED_MODULE_3__["default"])(this, _url, new Object(function webpackMissingModule() { var e = new Error("Cannot find module \'url\'"); e.code = \'MODULE_NOT_FOUND\'; throw e; }())(request.url, "http://".concat(request.headers.host)));\n }\n (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__["default"])(RequestController, [{\n key: "response",\n get: function get() {\n return (0,_babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_2__["default"])(this, _response);\n }\n }, {\n key: "handleRequest",\n value: function handleRequest() {\n this.buildResponse();\n }\n }, {\n key: "buildResponse",\n value: function buildResponse() {\n new _ResponseBuilder_js__WEBPACK_IMPORTED_MODULE_5__["default"]((0,_babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_2__["default"])(this, _request), (0,_babel_runtime_helpers_classPrivateFieldGet__WEBPACK_IMPORTED_MODULE_2__["default"])(this, _response)).handleResponse();\n }\n }]);\n return RequestController;\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29udHJvbGxlci9SZXF1ZXN0Q29udHJvbGxlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQTBCO0FBQ3dCO0FBQUEsSUFBQUUsUUFBQSxvQkFBQUMsT0FBQTtBQUFBLElBQUFDLFNBQUEsb0JBQUFELE9BQUE7QUFBQSxJQUFBRSxJQUFBLG9CQUFBRixPQUFBO0FBQUEsSUFFN0JHLGlCQUFpQjtFQU1wQyxTQUFBQSxrQkFBWUMsT0FBTyxFQUFFQyxRQUFRLEVBQUU7SUFBQUMsaUZBQUEsT0FBQUgsaUJBQUE7SUFBQUksMEJBQUEsT0FBQVIsUUFBQTtNQUFBUyxRQUFBO01BQUFDLEtBQUE7SUFBQTtJQUFBRiwwQkFBQSxPQUFBTixTQUFBO01BQUFPLFFBQUE7TUFBQUMsS0FBQTtJQUFBO0lBQUFGLDBCQUFBLE9BQUFMLElBQUE7TUFBQU0sUUFBQTtNQUFBQyxLQUFBO0lBQUE7SUFDN0JDLHVGQUFBLEtBQUksRUFBQVgsUUFBQSxFQUFZSyxPQUFPLEdBQUFNLHVGQUFBLENBQ3ZCLElBQUksRUFBQVQsU0FBQSxFQUFhSSxRQUFRO0lBQ3pCSyx1RkFBQSxLQUFJLEVBQUFSLElBQUEsRUFBUSxJQUFJTCxrSUFBRyxDQUFDTyxPQUFPLENBQUNPLEdBQUcsWUFBQUMsTUFBQSxDQUFZUixPQUFPLENBQUNTLE9BQU8sQ0FBQ0MsSUFBSSxDQUFFLENBQUM7RUFDcEU7RUFBQ0MsOEVBQUEsQ0FBQVosaUJBQUE7SUFBQWEsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFlO01BQ2IsT0FBQUMsdUZBQUEsQ0FBTyxJQUFJLEVBQUFqQixTQUFBO0lBQ2I7RUFBQztJQUFBZSxHQUFBO0lBQUFQLEtBQUEsRUFFRCxTQUFBVSxjQUFBLEVBQWdCO01BQ2QsSUFBSSxDQUFDQyxhQUFhLENBQUMsQ0FBQztJQUN0QjtFQUFDO0lBQUFKLEdBQUE7SUFBQVAsS0FBQSxFQUVELFNBQUFXLGNBQUEsRUFBaUI7TUFDZixJQUFJdEIsMkRBQWUsQ0FBQW9CLHVGQUFBLENBQUMsSUFBSSxFQUFBbkIsUUFBQSxHQUFBbUIsdUZBQUEsQ0FBVyxJQUFJLEVBQUFqQixTQUFBLENBQVUsQ0FBQyxDQUFDb0IsY0FBYyxDQUFDLENBQUM7SUFDckU7RUFBQztFQUFBLE9BQUFsQixpQkFBQTtBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYXBwLy4vc3JjL2NvbnRyb2xsZXIvUmVxdWVzdENvbnRyb2xsZXIuanM/Nzg3NiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVUkwgfSBmcm9tICd1cmwnO1xuaW1wb3J0IFJlc3BvbnNlQnVpbGRlciBmcm9tICcuL1Jlc3BvbnNlQnVpbGRlci5qcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVxdWVzdENvbnRyb2xsZXIge1xuXG4gICNyZXF1ZXN0O1xuICAjcmVzcG9uc2U7XG4gICN1cmw7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICB0aGlzLiNyZXF1ZXN0ID0gcmVxdWVzdCxcbiAgICB0aGlzLiNyZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIHRoaXMuI3VybCA9IG5ldyBVUkwocmVxdWVzdC51cmwsIGBodHRwOi8vJHtyZXF1ZXN0LmhlYWRlcnMuaG9zdH1gKTtcbiAgfVxuXG4gIGdldCByZXNwb25zZSgpIHtcbiAgICByZXR1cm4gdGhpcy4jcmVzcG9uc2U7XG4gIH1cblxuICBoYW5kbGVSZXF1ZXN0KCkge1xuICAgIHRoaXMuYnVpbGRSZXNwb25zZSgpO1xuICB9XG5cbiAgYnVpbGRSZXNwb25zZSgpICB7XG4gICAgbmV3IFJlc3BvbnNlQnVpbGRlcih0aGlzLiNyZXF1ZXN0LCB0aGlzLiNyZXNwb25zZSkuaGFuZGxlUmVzcG9uc2UoKTtcbiAgfVxuXG59Il0sIm5hbWVzIjpbIlVSTCIsIlJlc3BvbnNlQnVpbGRlciIsIl9yZXF1ZXN0IiwiV2Vha01hcCIsIl9yZXNwb25zZSIsIl91cmwiLCJSZXF1ZXN0Q29udHJvbGxlciIsInJlcXVlc3QiLCJyZXNwb25zZSIsIl9jbGFzc0NhbGxDaGVjayIsIl9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjIiwid3JpdGFibGUiLCJ2YWx1ZSIsIl9jbGFzc1ByaXZhdGVGaWVsZFNldCIsInVybCIsImNvbmNhdCIsImhlYWRlcnMiLCJob3N0IiwiX2NyZWF0ZUNsYXNzIiwia2V5IiwiZ2V0IiwiX2NsYXNzUHJpdmF0ZUZpZWxkR2V0IiwiaGFuZGxlUmVxdWVzdCIsImJ1aWxkUmVzcG9uc2UiLCJoYW5kbGVSZXNwb25zZSIsImRlZmF1bHQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/controller/RequestController.js\n')},"./src/controller/ResponseBuilder.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ ResponseBuilder)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js");\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js");\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js");\nObject(function webpackMissingModule() { var e = new Error("Cannot find module \'url\'"); e.code = \'MODULE_NOT_FOUND\'; throw e; }());\n\n\n\n\nvar ResponseBuilder = /*#__PURE__*/function () {\n function ResponseBuilder(request, response) {\n (0,_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__["default"])(this, ResponseBuilder);\n (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])(this, "request", void 0);\n (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])(this, "response", void 0);\n (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])(this, "url", void 0);\n this.request = request, this.response = response;\n this.url = new Object(function webpackMissingModule() { var e = new Error("Cannot find module \'url\'"); e.code = \'MODULE_NOT_FOUND\'; throw e; }())(request.url, "http://".concat(request.headers.host));\n }\n (0,_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__["default"])(ResponseBuilder, [{\n key: "handleResponse",\n value: function handleResponse() {\n this.prepareResponse();\n this.buildResponse();\n }\n }, {\n key: "prepareResponse",\n value: function prepareResponse() {\n this.response.statusCode = 200;\n this.response.setHeader(\'Content-Type\', \'text/html\');\n }\n }, {\n key: "buildResponse",\n value: function buildResponse() {\n // routage "à la main"\n if (this.url.pathname.startsWith(\'/\')) {\n var first = new defaultBuilder(this.request, this.response);\n first.bresponse();\n first.endResponse();\n } else {\n new ErrorResponseBuilder(this.request, this.response, 404).handleError();\n }\n }\n }]);\n return ResponseBuilder;\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvY29udHJvbGxlci9SZXNwb25zZUJ1aWxkZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBMEI7QUFBQSxJQUVMQyxlQUFlO0VBS2hDLFNBQUFBLGdCQUFZQyxPQUFPLEVBQUVDLFFBQVEsRUFBRTtJQUFBQyxpRkFBQSxPQUFBSCxlQUFBO0lBQUFJLGlGQUFBO0lBQUFBLGlGQUFBO0lBQUFBLGlGQUFBO0lBQzNCLElBQUksQ0FBQ0gsT0FBTyxHQUFFQSxPQUFPLEVBQ3JCLElBQUksQ0FBQ0MsUUFBUSxHQUFFQSxRQUFRO0lBQ3ZCLElBQUksQ0FBQ0csR0FBRyxHQUFHLElBQUlOLGtJQUFHLENBQUNFLE9BQU8sQ0FBQ0ksR0FBRyxZQUFBQyxNQUFBLENBQVlMLE9BQU8sQ0FBQ00sT0FBTyxDQUFDQyxJQUFJLENBQUUsQ0FBQztFQUFPO0VBQUNDLDhFQUFBLENBQUFULGVBQUE7SUFBQVUsR0FBQTtJQUFBQyxLQUFBLEVBRTNFLFNBQUFDLGVBQUEsRUFBaUI7TUFDZixJQUFJLENBQUNDLGVBQWUsQ0FBQyxDQUFDO01BQ3RCLElBQUksQ0FBQ0MsYUFBYSxDQUFDLENBQUM7SUFDdEI7RUFBQztJQUFBSixHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBRSxnQkFBQSxFQUFrQjtNQUNoQixJQUFJLENBQUNYLFFBQVEsQ0FBQ2EsVUFBVSxHQUFHLEdBQUc7TUFDOUIsSUFBSSxDQUFDYixRQUFRLENBQUNjLFNBQVMsQ0FBRSxjQUFjLEVBQUcsV0FBVyxDQUFDO0lBQ3hEO0VBQUM7SUFBQU4sR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQUcsY0FBQSxFQUFpQjtNQUVmO01BQ0EsSUFBSSxJQUFJLENBQUNULEdBQUcsQ0FBQ1ksUUFBUSxDQUFDQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUM7UUFDcEMsSUFBTUMsS0FBSyxHQUFHLElBQUlDLGNBQWMsQ0FBQyxJQUFJLENBQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDQyxRQUFRLENBQUM7UUFDN0RpQixLQUFLLENBQUNFLFNBQVMsQ0FBQyxDQUFDO1FBQ2pCRixLQUFLLENBQUNHLFdBQVcsQ0FBQyxDQUFDO01BQ3JCLENBQUMsTUFDSTtRQUNILElBQUlDLG9CQUFvQixDQUFDLElBQUksQ0FBQ3RCLE9BQU8sRUFBRSxJQUFJLENBQUNDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQ3NCLFdBQVcsQ0FBQyxDQUFDO01BQzFFO0lBQ0Y7RUFBQztFQUFBLE9BQUF4QixlQUFBO0FBQUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9hcHAvLi9zcmMvY29udHJvbGxlci9SZXNwb25zZUJ1aWxkZXIuanM/ZGQ1MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVUkwgfSBmcm9tICd1cmwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXNwb25zZUJ1aWxkZXIge1xuICAgIHJlcXVlc3Q7XG4gICAgcmVzcG9uc2U7XG4gICAgdXJsO1xuICAgIFxuICAgIGNvbnN0cnVjdG9yKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdCA9cmVxdWVzdCxcbiAgICAgICAgdGhpcy5yZXNwb25zZSA9cmVzcG9uc2U7IFxuICAgICAgICB0aGlzLnVybCA9IG5ldyBVUkwocmVxdWVzdC51cmwsIGBodHRwOi8vJHtyZXF1ZXN0LmhlYWRlcnMuaG9zdH1gKTsgICAgICB9XG5cbiAgICAgIGhhbmRsZVJlc3BvbnNlKCkge1xuICAgICAgICB0aGlzLnByZXBhcmVSZXNwb25zZSgpO1xuICAgICAgICB0aGlzLmJ1aWxkUmVzcG9uc2UoKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcHJlcGFyZVJlc3BvbnNlKCkge1xuICAgICAgICB0aGlzLnJlc3BvbnNlLnN0YXR1c0NvZGUgPSAyMDA7XG4gICAgICAgIHRoaXMucmVzcG9uc2Uuc2V0SGVhZGVyKCAnQ29udGVudC1UeXBlJyAsICd0ZXh0L2h0bWwnKTtcbiAgICAgIH0gXG5cbiAgICAgIGJ1aWxkUmVzcG9uc2UoKSAgeyAgICBcbiAgICAgICAgXG4gICAgICAgIC8vIHJvdXRhZ2UgXCLDoCBsYSBtYWluXCJcbiAgICAgICAgaWYgKHRoaXMudXJsLnBhdGhuYW1lLnN0YXJ0c1dpdGgoJy8nKSl7XG4gICAgICAgICAgY29uc3QgZmlyc3QgPSBuZXcgZGVmYXVsdEJ1aWxkZXIodGhpcy5yZXF1ZXN0LCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICBmaXJzdC5icmVzcG9uc2UoKTtcbiAgICAgICAgICBmaXJzdC5lbmRSZXNwb25zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIG5ldyBFcnJvclJlc3BvbnNlQnVpbGRlcih0aGlzLnJlcXVlc3QsIHRoaXMucmVzcG9uc2UsIDQwNCkuaGFuZGxlRXJyb3IoKTsgXG4gICAgICAgIH1cbiAgICAgIH0gICAgICBcbiAgICBcbn0iXSwibmFtZXMiOlsiVVJMIiwiUmVzcG9uc2VCdWlsZGVyIiwicmVxdWVzdCIsInJlc3BvbnNlIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnR5IiwidXJsIiwiY29uY2F0IiwiaGVhZGVycyIsImhvc3QiLCJfY3JlYXRlQ2xhc3MiLCJrZXkiLCJ2YWx1ZSIsImhhbmRsZVJlc3BvbnNlIiwicHJlcGFyZVJlc3BvbnNlIiwiYnVpbGRSZXNwb25zZSIsInN0YXR1c0NvZGUiLCJzZXRIZWFkZXIiLCJwYXRobmFtZSIsInN0YXJ0c1dpdGgiLCJmaXJzdCIsImRlZmF1bHRCdWlsZGVyIiwiYnJlc3BvbnNlIiwiZW5kUmVzcG9uc2UiLCJFcnJvclJlc3BvbnNlQnVpbGRlciIsImhhbmRsZUVycm9yIiwiZGVmYXVsdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/controller/ResponseBuilder.js\n')},"./src/scripts/main.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{eval("__webpack_require__.r(__webpack_exports__);\nObject(function webpackMissingModule() { var e = new Error(\"Cannot find module 'http'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }());\n/* harmony import */ var _controller_RequestController_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../controller/RequestController.js */ \"./src/controller/RequestController.js\");\n// write your code here\nconsole.log('le bundle a été généré');\n\n\nvar server = Object(function webpackMissingModule() { var e = new Error(\"Cannot find module 'http'\"); e.code = 'MODULE_NOT_FOUND'; throw e; }())(function (request, response) {\n return new _controller_RequestController_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"](request, response).handleRequest();\n});\nserver.listen(8080);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2NyaXB0cy9tYWluLmpzIiwibWFwcGluZ3MiOiI7OztBQUFBO0FBQ0FBLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLHdCQUF3QixDQUFDO0FBR2I7QUFDMkM7QUFFbkUsSUFBTUcsTUFBTSxHQUFHRixtSUFBaUIsQ0FDL0IsVUFBQ0ksT0FBTyxFQUFFQyxRQUFRO0VBQUEsT0FBSyxJQUFJSix3RUFBaUIsQ0FBQ0csT0FBTyxFQUFFQyxRQUFRLENBQUMsQ0FBQ0MsYUFBYSxDQUFDLENBQUM7QUFBQSxDQUNoRixDQUFDO0FBRURKLE1BQU0sQ0FBQ0ssTUFBTSxDQUFDLElBQUksQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL2FwcC8uL3NyYy9zY3JpcHRzL21haW4uanM/Mjk2MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyB3cml0ZSB5b3VyIGNvZGUgaGVyZVxuY29uc29sZS5sb2coJ2xlIGJ1bmRsZSBhIMOpdMOpIGfDqW7DqXLDqScpO1xuXG5cbmltcG9ydCBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0IFJlcXVlc3RDb250cm9sbGVyIGZyb20gJy4uL2NvbnRyb2xsZXIvUmVxdWVzdENvbnRyb2xsZXIuanMnO1xuXG5jb25zdCBzZXJ2ZXIgPSBodHRwLmNyZWF0ZVNlcnZlcihcblx0KHJlcXVlc3QsIHJlc3BvbnNlKSA9PiBuZXcgUmVxdWVzdENvbnRyb2xsZXIocmVxdWVzdCwgcmVzcG9uc2UpLmhhbmRsZVJlcXVlc3QoKVxuKTtcblxuc2VydmVyLmxpc3Rlbig4MDgwKTsiXSwibmFtZXMiOlsiY29uc29sZSIsImxvZyIsImh0dHAiLCJSZXF1ZXN0Q29udHJvbGxlciIsInNlcnZlciIsImNyZWF0ZVNlcnZlciIsInJlcXVlc3QiLCJyZXNwb25zZSIsImhhbmRsZVJlcXVlc3QiLCJsaXN0ZW4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/scripts/main.js\n")},"./node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ _classApplyDescriptorGet)\n/* harmony export */ });\nfunction _classApplyDescriptorGet(receiver, descriptor) {\n if (descriptor.get) {\n return descriptor.get.call(receiver);\n }\n return descriptor.value;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NBcHBseURlc2NyaXB0b3JHZXQuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2FwcC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0FwcGx5RGVzY3JpcHRvckdldC5qcz9mZjZjIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0FwcGx5RGVzY3JpcHRvckdldChyZWNlaXZlciwgZGVzY3JpcHRvcikge1xuICBpZiAoZGVzY3JpcHRvci5nZXQpIHtcbiAgICByZXR1cm4gZGVzY3JpcHRvci5nZXQuY2FsbChyZWNlaXZlcik7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3IudmFsdWU7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js\n')},"./node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ _classApplyDescriptorSet)\n/* harmony export */ });\nfunction _classApplyDescriptorSet(receiver, descriptor, value) {\n if (descriptor.set) {\n descriptor.set.call(receiver, value);\n } else {\n if (!descriptor.writable) {\n throw new TypeError("attempted to set read only private field");\n }\n descriptor.value = value;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NBcHBseURlc2NyaXB0b3JTZXQuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9hcHAvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NBcHBseURlc2NyaXB0b3JTZXQuanM/NzY2OSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NBcHBseURlc2NyaXB0b3JTZXQocmVjZWl2ZXIsIGRlc2NyaXB0b3IsIHZhbHVlKSB7XG4gIGlmIChkZXNjcmlwdG9yLnNldCkge1xuICAgIGRlc2NyaXB0b3Iuc2V0LmNhbGwocmVjZWl2ZXIsIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWRlc2NyaXB0b3Iud3JpdGFibGUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkXCIpO1xuICAgIH1cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gdmFsdWU7XG4gIH1cbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js\n')},"./node_modules/@babel/runtime/helpers/esm/classCallCheck.js":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ _classCallCheck)\n/* harmony export */ });\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError("Cannot call a class as a function");\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9hcHAvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanM/NDNiMCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/esm/classCallCheck.js\n')},"./node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ _classExtractFieldDescriptor)\n/* harmony export */ });\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) {\n if (!privateMap.has(receiver)) {\n throw new TypeError("attempted to " + action + " private field on non-instance");\n }\n return privateMap.get(receiver);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NFeHRyYWN0RmllbGREZXNjcmlwdG9yLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9hcHAvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NFeHRyYWN0RmllbGREZXNjcmlwdG9yLmpzPzg2MWEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzRXh0cmFjdEZpZWxkRGVzY3JpcHRvcihyZWNlaXZlciwgcHJpdmF0ZU1hcCwgYWN0aW9uKSB7XG4gIGlmICghcHJpdmF0ZU1hcC5oYXMocmVjZWl2ZXIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBcIiArIGFjdGlvbiArIFwiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xuICB9XG4gIHJldHVybiBwcml2YXRlTWFwLmdldChyZWNlaXZlcik7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js\n')},"./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ _classPrivateFieldGet)\n/* harmony export */ });\n/* harmony import */ var _classApplyDescriptorGet_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./classApplyDescriptorGet.js */ "./node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js");\n/* harmony import */ var _classExtractFieldDescriptor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./classExtractFieldDescriptor.js */ "./node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js");\n\n\nfunction _classPrivateFieldGet(receiver, privateMap) {\n var descriptor = (0,_classExtractFieldDescriptor_js__WEBPACK_IMPORTED_MODULE_1__["default"])(receiver, privateMap, "get");\n return (0,_classApplyDescriptorGet_js__WEBPACK_IMPORTED_MODULE_0__["default"])(receiver, descriptor);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NQcml2YXRlRmllbGRHZXQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW1FO0FBQ1E7QUFDNUQ7QUFDZixtQkFBbUIsMkVBQTJCO0FBQzlDLFNBQVMsdUVBQXVCO0FBQ2hDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYXBwLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzUHJpdmF0ZUZpZWxkR2V0LmpzPzQ2Y2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNsYXNzQXBwbHlEZXNjcmlwdG9yR2V0IGZyb20gXCIuL2NsYXNzQXBwbHlEZXNjcmlwdG9yR2V0LmpzXCI7XG5pbXBvcnQgY2xhc3NFeHRyYWN0RmllbGREZXNjcmlwdG9yIGZyb20gXCIuL2NsYXNzRXh0cmFjdEZpZWxkRGVzY3JpcHRvci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gY2xhc3NFeHRyYWN0RmllbGREZXNjcmlwdG9yKHJlY2VpdmVyLCBwcml2YXRlTWFwLCBcImdldFwiKTtcbiAgcmV0dXJuIGNsYXNzQXBwbHlEZXNjcmlwdG9yR2V0KHJlY2VpdmVyLCBkZXNjcmlwdG9yKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js\n')},"./node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ _classPrivateFieldSet)\n/* harmony export */ });\n/* harmony import */ var _classApplyDescriptorSet_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./classApplyDescriptorSet.js */ "./node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js");\n/* harmony import */ var _classExtractFieldDescriptor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./classExtractFieldDescriptor.js */ "./node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js");\n\n\nfunction _classPrivateFieldSet(receiver, privateMap, value) {\n var descriptor = (0,_classExtractFieldDescriptor_js__WEBPACK_IMPORTED_MODULE_1__["default"])(receiver, privateMap, "set");\n (0,_classApplyDescriptorSet_js__WEBPACK_IMPORTED_MODULE_0__["default"])(receiver, descriptor, value);\n return value;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NQcml2YXRlRmllbGRTZXQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW1FO0FBQ1E7QUFDNUQ7QUFDZixtQkFBbUIsMkVBQTJCO0FBQzlDLEVBQUUsdUVBQXVCO0FBQ3pCO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9hcHAvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NQcml2YXRlRmllbGRTZXQuanM/MjZmYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2xhc3NBcHBseURlc2NyaXB0b3JTZXQgZnJvbSBcIi4vY2xhc3NBcHBseURlc2NyaXB0b3JTZXQuanNcIjtcbmltcG9ydCBjbGFzc0V4dHJhY3RGaWVsZERlc2NyaXB0b3IgZnJvbSBcIi4vY2xhc3NFeHRyYWN0RmllbGREZXNjcmlwdG9yLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHByaXZhdGVNYXAsIHZhbHVlKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gY2xhc3NFeHRyYWN0RmllbGREZXNjcmlwdG9yKHJlY2VpdmVyLCBwcml2YXRlTWFwLCBcInNldFwiKTtcbiAgY2xhc3NBcHBseURlc2NyaXB0b3JTZXQocmVjZWl2ZXIsIGRlc2NyaXB0b3IsIHZhbHVlKTtcbiAgcmV0dXJuIHZhbHVlO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js\n')},"./node_modules/@babel/runtime/helpers/esm/createClass.js":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ _createClass)\n/* harmony export */ });\n/* harmony import */ var _toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toPropertyKey.js */ "./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js");\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ("value" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, (0,_toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__["default"])(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, "prototype", {\n writable: false\n });\n return Constructor;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBK0M7QUFDL0M7QUFDQSxrQkFBa0Isa0JBQWtCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLDZEQUFhO0FBQy9DO0FBQ0E7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9hcHAvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanM/OGYwMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCB0b1Byb3BlcnR5S2V5KGRlc2NyaXB0b3Iua2V5KSwgZGVzY3JpcHRvcik7XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICByZXR1cm4gQ29uc3RydWN0b3I7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/esm/createClass.js\n')},"./node_modules/@babel/runtime/helpers/esm/defineProperty.js":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ _defineProperty)\n/* harmony export */ });\n/* harmony import */ var _toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toPropertyKey.js */ "./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js");\n\nfunction _defineProperty(obj, key, value) {\n key = (0,_toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__["default"])(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBK0M7QUFDaEM7QUFDZixRQUFRLDZEQUFhO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9hcHAvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanM/NGE4MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/esm/defineProperty.js\n')},"./node_modules/@babel/runtime/helpers/esm/toPrimitive.js":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ toPrimitive)\n/* harmony export */ });\n/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");\n\nfunction toPrimitive(t, r) {\n if ("object" != (0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__["default"])(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || "default");\n if ("object" != (0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__["default"])(i)) return i;\n throw new TypeError("@@toPrimitive must return a primitive value.");\n }\n return ("string" === r ? String : Number)(t);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBa0M7QUFDbkI7QUFDZixrQkFBa0Isc0RBQU87QUFDekI7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHNEQUFPO0FBQzNCO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYXBwLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzP2FkOTQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/esm/toPrimitive.js\n')},"./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ toPropertyKey)\n/* harmony export */ });\n/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");\n/* harmony import */ var _toPrimitive_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./toPrimitive.js */ "./node_modules/@babel/runtime/helpers/esm/toPrimitive.js");\n\n\nfunction toPropertyKey(t) {\n var i = (0,_toPrimitive_js__WEBPACK_IMPORTED_MODULE_1__["default"])(t, "string");\n return "symbol" == (0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__["default"])(i) ? i : String(i);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBa0M7QUFDUztBQUM1QjtBQUNmLFVBQVUsMkRBQVc7QUFDckIscUJBQXFCLHNEQUFPO0FBQzVCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYXBwLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanM/MzYxZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogU3RyaW5nKGkpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js\n')},"./node_modules/@babel/runtime/helpers/esm/typeof.js":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ "default": () => (/* binding */ _typeof)\n/* harmony export */ });\nfunction _typeof(o) {\n "@babel/helpers - typeof";\n\n return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;\n }, _typeof(o);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9hcHAvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzPzZjZTAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@babel/runtime/helpers/esm/typeof.js\n')}},__webpack_module_cache__={};function __webpack_require__(e){var _=__webpack_module_cache__[e];if(void 0!==_)return _.exports;var s=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](s,s.exports,__webpack_require__),s.exports}__webpack_require__.d=(e,_)=>{for(var s in _)__webpack_require__.o(_,s)&&!__webpack_require__.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:_[s]})},__webpack_require__.o=(e,_)=>Object.prototype.hasOwnProperty.call(e,_),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__=__webpack_require__("./src/scripts/main.js")})(); \ No newline at end of file +(()=>{var __webpack_modules__={"./src/scripts/main.js":()=>{eval("// write your code here\nconsole.log('le bundle a été généré');\nconst socket = io();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2NyaXB0cy9tYWluLmpzIiwibmFtZXMiOlsiY29uc29sZSIsImxvZyIsInNvY2tldCIsImlvIl0sInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9hcHAvLi9zcmMvc2NyaXB0cy9tYWluLmpzPzI5NjMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gd3JpdGUgeW91ciBjb2RlIGhlcmVcbmNvbnNvbGUubG9nKCdsZSBidW5kbGUgYSDDqXTDqSBnw6luw6lyw6knKTtcblxuY29uc3Qgc29ja2V0ID0gaW8oKTtcblxuXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0FBLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLHdCQUF3QixDQUFDO0FBRXJDLE1BQU1DLE1BQU0sR0FBR0MsRUFBRSxDQUFDLENBQUMifQ==\n//# sourceURL=webpack-internal:///./src/scripts/main.js\n")}},__webpack_exports__={};__webpack_modules__["./src/scripts/main.js"]()})(); \ No newline at end of file diff --git a/encheres/server/public/scripts/bundle.js.LICENSE.txt b/encheres/server/public/scripts/bundle.js.LICENSE.txt index 1dcd9c99e4a41f70b6cd48847c55e9da5cc9c58e..3974d88d6383d2ead72e92f1784e9549c0415159 100644 --- a/encheres/server/public/scripts/bundle.js.LICENSE.txt +++ b/encheres/server/public/scripts/bundle.js.LICENSE.txt @@ -1,55 +1,3 @@ /*!*****************************!*\ !*** ./src/scripts/main.js ***! \*****************************/ - -/*!*******************************************!*\ - !*** ./src/controller/ResponseBuilder.js ***! - \*******************************************/ - -/*!*********************************************!*\ - !*** ./src/controller/RequestController.js ***! - \*********************************************/ - -/*!***********************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/typeof.js ***! - \***********************************************************/ - -/*!****************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/createClass.js ***! - \****************************************************************/ - -/*!****************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/toPrimitive.js ***! - \****************************************************************/ - -/*!******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js ***! - \******************************************************************/ - -/*!*******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/classCallCheck.js ***! - \*******************************************************************/ - -/*!*******************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/defineProperty.js ***! - \*******************************************************************/ - -/*!*************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js ***! - \*************************************************************************/ - -/*!*************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js ***! - \*************************************************************************/ - -/*!****************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js ***! - \****************************************************************************/ - -/*!****************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js ***! - \****************************************************************************/ - -/*!********************************************************************************!*\ - !*** ./node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js ***! - \********************************************************************************/ diff --git a/encheres/server/scripts/contentTypeUtil.js b/encheres/server/scripts/contentTypeUtil.js new file mode 100644 index 0000000000000000000000000000000000000000..42e72cead45b5f51723c5b326895ce6e2bf62dd6 --- /dev/null +++ b/encheres/server/scripts/contentTypeUtil.js @@ -0,0 +1,20 @@ +/** + return a content-type deduced from <path> final extension + @param path the path where to look for final extension +*/ +export const getContentTypeFrom = path => { + const lastPointPosition = path.lastIndexOf('.'); + const extension = path.substring(lastPointPosition); + return contentTypes.get(extension) || ''; + } + + // the map that associates extenstion to content-type + const contentTypes = new Map().set('.css', 'text/css') + .set('.html', 'text/html') + .set('.jpg',"image/jpeg") + .set('.jpeg',"image/jpeg") + .set('.txt',"plain/text") + .set('.png',"image/png") + .set('.js', 'application/javascript') + .set('.json', 'application/json'); + \ No newline at end of file