diff --git a/.env b/.env index 1286eec..b21ec73 100644 --- a/.env +++ b/.env @@ -2,6 +2,7 @@ NODE_ENV=development PORT=8080 AUTH_MODE=false JWT_SECRET_KEY=secret-key +USE_FASTIFY=false # Set your database connection information here # Local database DB_HOST=localhost @@ -16,4 +17,4 @@ POSTGRES_USER=postgres POSTGRES_PASSWORD=postgres POSTGRES_DB=postgres PGADMIN_DEFAULT_PASSWORD='password1234' -PGADMIN_DEFAULT_EMAIL='postgres@test.com' \ No newline at end of file +PGADMIN_DEFAULT_EMAIL='postgres@test.com' diff --git a/.env.example b/.env.pg similarity index 100% rename from .env.example rename to .env.pg diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..2b8d8b3 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,26 @@ +module.exports = { + parser: '@typescript-eslint/parser', + parserOptions: { + project: 'tsconfig.json', + sourceType: 'module', + }, + plugins: ['@typescript-eslint/eslint-plugin'], + extends: [ + 'plugin:@typescript-eslint/recommended', + 'plugin:prettier/recommended', + ], + root: true, + env: { + node: true, + jest: true, + }, + ignorePatterns: ['.eslintrc.js'], + rules: { + 'class-methods-use-this': 'off', + '@typescript-eslint/interface-name-prefix': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-var-requires':'off' + }, +}; \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index db8b90b..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "root": true, - "env": { - "es2020": true, - "jasmine": true, - "jest": true, - "node": true - }, - "parserOptions": { - "project": "./tsconfig.json", - "sourceType": "module", - "ecmaVersion": 2021, - "ecmaFeatures": { - "impliedStrict": true - } - }, - "settings": { - "noInlineConfig": true, - "node": { - "tryExtensions": [".js", ".json", ".node", ".ts", ".d.ts"] - } - }, - "extends": [ - "eslint:recommended", - "plugin:node/recommended", - "airbnb-base", - "prettier", - "airbnb-typescript/base", - "plugin:@typescript-eslint/recommended" - ], - "rules": { - "import/no-cycle":0, - "comma-dangle": ["error", { - "arrays": "never", - "objects": "never", - "imports": "never", - "exports": "never", - "functions": "never" - }], - "@typescript-eslint/comma-dangle": "off", - "import/extensions": "off", - "linebreak-style": "off", - "node/no-unsupported-features/es-syntax": "off", - "no-underscore-dangle": "off", - "import/prefer-default-export": "off" - } -} diff --git a/.prettierrc copy b/.prettierrc copy new file mode 100644 index 0000000..dcb7279 --- /dev/null +++ b/.prettierrc copy @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "trailingComma": "all" +} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index d5ff9df..753026d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,4 +4,4 @@ COPY package*.json ./ RUN npm install COPY . . EXPOSE 8080 -CMD ["npm", "run", "dev"] \ No newline at end of file +CMD ["npm", "run", "start:dev"] \ No newline at end of file diff --git a/README.md b/README.md index 2b0a740..7b21fea 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,48 @@ # RS School REST service -to run - npm i => docker-compose up :) \ No newline at end of file +to run - npm i => docker-compose up :) + +tests : + +express + +Summary report @ 08:04:06(+0300) 2021-07-12 + Scenarios launched: 182 + Scenarios completed: 182 + Requests completed: 1092 + Mean response/sec: 33.63 + Response time (msec): + min: 17 + max: 2386 + median: 1017 + p95: 1754.8 + p99: 2020 + Scenario counts: + Users test: 182 (100%) + Codes: + 200: 728 + 201: 364 + +Log file: test.express.json + +fastify: + +All virtual users finished +Summary report @ 08:06:36(+0300) 2021-07-12 + Scenarios launched: 190 + Scenarios completed: 190 + Requests completed: 1140 + Mean response/sec: 34.59 + Response time (msec): + min: 14 + max: 2471 + median: 949.5 + p95: 1768.5 + p99: 2073.4 + Scenario counts: + Users test: 190 (100%) + Codes: + 200: 760 + 201: 380 + +Log file: test.fastify.json \ No newline at end of file diff --git a/build/app.js b/build/app.js deleted file mode 100644 index bff8078..0000000 --- a/build/app.js +++ /dev/null @@ -1,43 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const express_1 = __importDefault(require("express")); -const swagger_ui_express_1 = __importDefault(require("swagger-ui-express")); -const path_1 = __importDefault(require("path")); -const yamljs_1 = __importDefault(require("yamljs")); -const logger_1 = require("./middlewares/logger"); -const user_router_1 = __importDefault(require("./resources/users/user.router")); -const board_router_1 = __importDefault(require("./resources/boards/board.router")); -const tasks_router_1 = __importDefault(require("./resources/tasks/tasks.router")); -const error_handler_1 = require("./middlewares/error.handler"); -const app = express_1.default(); -const swaggerDocument = yamljs_1.default.load(path_1.default.join(__dirname, '../doc/api.yaml')); -app.use(express_1.default.json()); -app.use('/doc', swagger_ui_express_1.default.serve, swagger_ui_express_1.default.setup(swaggerDocument)); -app.use(logger_1.logerRequests); -app.use('/', (req, res, next) => { - if (req.originalUrl === '/') { - res.send('Service is running!'); - return; - } - next(); -}); -app.use('/users', user_router_1.default); -app.use('/boards', board_router_1.default); -app.use('/boards/:boardsId/tasks', tasks_router_1.default); -app.use((err, _req, res, next) => { - error_handler_1.handleError(err, res); - next(); -}); -process.on('uncaughtException', error_handler_1.uncaughtException); -process.on('unhandledRejection', error_handler_1.unhandledRejection); -// setTimeout(() => { -// throw new Error('Oops!'); -// }, 1500); -// setTimeout(() => { -// Promise.reject(new Error(' Reject Oops!')); -// }, 1500); -exports.default = app; -//# sourceMappingURL=app.js.map \ No newline at end of file diff --git a/build/app.js.map b/build/app.js.map deleted file mode 100644 index b54cbf2..0000000 --- a/build/app.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":";;;;;AAAA,sDAAmE;AACnE,4EAA2C;AAC3C,gDAAwB;AACxB,oDAA0B;AAC1B,iDAAqD;AACrD,gFAAuD;AACvD,mFAA0D;AAC1D,kFAAwD;AACxD,+DAEqC;AAErC,MAAM,GAAG,GAAG,iBAAO,EAAE,CAAC;AACtB,MAAM,eAAe,GAAG,gBAAI,CAAC,IAAI,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAC3E,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAExB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,4BAAS,CAAC,KAAK,EAAE,4BAAS,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;AAEnE,GAAG,CAAC,GAAG,CAAC,sBAAa,CAAC,CAAC;AAEvB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAC9B,IAAI,GAAG,CAAC,WAAW,KAAK,GAAG,EAAE;QAC3B,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAChC,OAAO;KACR;IAAC,IAAI,EAAE,CAAC;AACX,CAAC,CAAC,CAAC;AAEH,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,qBAAU,CAAC,CAAC;AAC9B,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,sBAAW,CAAC,CAAC;AAChC,GAAG,CAAC,GAAG,CAAC,yBAAyB,EAAE,sBAAU,CAAC,CAAC;AAC/C,GAAG,CAAC,GAAG,CAAC,CAAC,GAAgB,EAAE,IAAY,EAAE,GAAY,EAAE,IAAiB,EAAE,EAAE;IAC1E,2BAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtB,IAAI,EAAE,CAAC;AACT,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,iCAAiB,CAAC,CAAC;AACnD,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,kCAAkB,CAAC,CAAC;AAErD,qBAAqB;AACrB,8BAA8B;AAC9B,YAAY;AAEZ,qBAAqB;AACrB,gDAAgD;AAChD,YAAY;AAEZ,kBAAe,GAAG,CAAC"} \ No newline at end of file diff --git a/build/common/config.js b/build/common/config.js deleted file mode 100644 index e4d7e3e..0000000 --- a/build/common/config.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -var _a; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AUTH_MODE = exports.JWT_SECRET_KEY = exports.MONGO_CONNECTION_STRING = exports.NODE_ENV = exports.PORT = void 0; -const dotenv_1 = __importDefault(require("dotenv")); -const path_1 = __importDefault(require("path")); -dotenv_1.default.config({ - path: path_1.default.join(__dirname, '../../.env') -}); -_a = process.env, exports.PORT = _a.PORT, exports.NODE_ENV = _a.NODE_ENV, exports.MONGO_CONNECTION_STRING = _a.MONGO_CONNECTION_STRING, exports.JWT_SECRET_KEY = _a.JWT_SECRET_KEY; -exports.AUTH_MODE = process.env['AUTH_MODE'] === 'true'; -//# sourceMappingURL=config.js.map \ No newline at end of file diff --git a/build/common/config.js.map b/build/common/config.js.map deleted file mode 100644 index 2b83d76..0000000 --- a/build/common/config.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/common/config.ts"],"names":[],"mappings":";;;;;;;AAAA,oDAA4B;AAC5B,gDAAwB;AAExB,gBAAM,CAAC,MAAM,CAAC;IACZ,IAAI,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;CACzC,CAAC,CAAC;AAEU,KAMT,OAAO,CAAC,GAAG,EALb,YAAI,YACJ,gBAAQ,gBACR,+BAAuB,+BACvB,sBAAc,qBAEA;AAEH,QAAA,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,MAAM,CAAC"} \ No newline at end of file diff --git a/build/middlewares/error.handler.js b/build/middlewares/error.handler.js deleted file mode 100644 index 247392b..0000000 --- a/build/middlewares/error.handler.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.unhandledRejection = exports.uncaughtException = exports.handleError = exports.ErrorHandler = void 0; -const fs_1 = __importDefault(require("fs")); -const logger_1 = require("./logger"); -const CODE = 500; -class ErrorHandler extends Error { - constructor(statusCode, message) { - super(); - this.statusCode = statusCode || CODE; - if (message) { - this.message = message; - } - } -} -exports.ErrorHandler = ErrorHandler; -const handleError = (err, res) => { - const { statusCode, message } = err; - logger_1.loggerErrors(statusCode, message); - res.status(statusCode).json({ - status: 'error', - statusCode, - message - }); -}; -exports.handleError = handleError; -const uncaughtException = (err, origin) => { - fs_1.default.writeFileSync('./crash-data.log', `Caught exception: ${err}\nException origin: ${origin}`); - logger_1.uncaughtExceptionLogger(err, origin); - process.exit(1); -}; -exports.uncaughtException = uncaughtException; -const unhandledRejection = (reason) => { - fs_1.default.writeFileSync('./crash-data.log', `Caught exception: ${reason.message})`); - logger_1.unhandledRejectionLogger(reason.message); - process.exit(1); -}; -exports.unhandledRejection = unhandledRejection; -//# sourceMappingURL=error.handler.js.map \ No newline at end of file diff --git a/build/middlewares/error.handler.js.map b/build/middlewares/error.handler.js.map deleted file mode 100644 index d06009c..0000000 --- a/build/middlewares/error.handler.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"error.handler.js","sourceRoot":"","sources":["../../src/middlewares/error.handler.ts"],"names":[],"mappings":";;;;;;AACA,4CAAoB;AACpB,qCAA2F;AAE3F,MAAM,IAAI,GAAG,GAAG,CAAC;AAEjB,MAAa,YAAa,SAAQ,KAAK;IAGrC,YAAY,UAAkB,EAAE,OAAgB;QAC9C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,IAAI,CAAC;QACrC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;SACxB;IACH,CAAC;CACF;AAVD,oCAUC;AAEM,MAAM,WAAW,GAAG,CAAC,GAAiB,EAAE,GAAa,EAAQ,EAAE;IACpE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;IACpC,qBAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAClC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;QAC1B,MAAM,EAAE,OAAO;QACf,UAAU;QACV,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC;AARW,QAAA,WAAW,eAQtB;AAEK,MAAM,iBAAiB,GAAG,CAAC,GAAU,EAAE,MAAc,EAAO,EAAE;IACnE,YAAE,CAAC,aAAa,CACd,kBAAkB,EAClB,qBAAqB,GAAG,uBAAuB,MAAM,EAAE,CACxD,CAAC;IACF,gCAAuB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AAPW,QAAA,iBAAiB,qBAO5B;AAEK,MAAM,kBAAkB,GAAG,CAAC,MAAyB,EAAO,EAAE;IACnE,YAAE,CAAC,aAAa,CACd,kBAAkB,EAClB,qBAAqB,MAAM,CAAC,OAAO,GAAG,CACvC,CAAC;IACF,iCAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AAPW,QAAA,kBAAkB,sBAO7B"} \ No newline at end of file diff --git a/build/middlewares/logger.js b/build/middlewares/logger.js deleted file mode 100644 index 5162a0f..0000000 --- a/build/middlewares/logger.js +++ /dev/null @@ -1,48 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.unhandledRejectionLogger = exports.uncaughtExceptionLogger = exports.loggerErrors = exports.logerRequests = void 0; -const winston_1 = require("winston"); -const stream_1 = require("stream"); -const logger = winston_1.createLogger({ - level: 'silly', - format: winston_1.format.combine(winston_1.format.colorize(), winston_1.format.cli()), - transports: [ - new winston_1.transports.Console(), - new winston_1.transports.File({ - filename: 'error.log', - level: 'error', - format: winston_1.format.combine(winston_1.format.uncolorize(), winston_1.format.json()) - }), - new winston_1.transports.File({ - filename: 'info.log', - level: 'info', - format: winston_1.format.combine(winston_1.format.uncolorize(), winston_1.format.json()) - }) - ] -}); -const logerRequests = (req, res, next) => { - const { method, url } = req; - const body = JSON.stringify(req.body); - const query = JSON.stringify(req.query); - const start = Date.now(); - next(); - stream_1.finished(res, () => { - const ms = Date.now() - start; - const { statusCode } = res; - logger.info(`\n METHOD: ${method}\n URL: ${url} \n STATUS: ${statusCode} \n QUERY: ${query} \n BODY: ${body} \n TIME: ${ms}`); - }); -}; -exports.logerRequests = logerRequests; -const loggerErrors = (statusCode, message) => { - logger.warn(`\n CODE: ${statusCode}\n MESSAGE: ${message}`); -}; -exports.loggerErrors = loggerErrors; -const uncaughtExceptionLogger = (error, origin) => { - logger.error(`${error} origin ${origin}`); -}; -exports.uncaughtExceptionLogger = uncaughtExceptionLogger; -const unhandledRejectionLogger = (message) => { - logger.error(`Unhandled rejection detected: ${message}`); -}; -exports.unhandledRejectionLogger = unhandledRejectionLogger; -//# sourceMappingURL=logger.js.map \ No newline at end of file diff --git a/build/middlewares/logger.js.map b/build/middlewares/logger.js.map deleted file mode 100644 index 5dc7e76..0000000 --- a/build/middlewares/logger.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/middlewares/logger.ts"],"names":[],"mappings":";;;AAAA,qCAA2D;AAE3D,mCAAkC;AAElC,MAAM,MAAM,GAAG,sBAAY,CAAC;IAC1B,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,gBAAM,CAAC,OAAO,CAAC,gBAAM,CAAC,QAAQ,EAAE,EAAE,gBAAM,CAAC,GAAG,EAAE,CAAC;IACvD,UAAU,EAAE;QACV,IAAI,oBAAU,CAAC,OAAO,EAAE;QACxB,IAAI,oBAAU,CAAC,IAAI,CAAC;YAClB,QAAQ,EAAE,WAAW;YACrB,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,gBAAM,CAAC,OAAO,CAAC,gBAAM,CAAC,UAAU,EAAE,EAAE,gBAAM,CAAC,IAAI,EAAE,CAAC;SAC3D,CAAC;QACF,IAAI,oBAAU,CAAC,IAAI,CAAC;YAClB,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,gBAAM,CAAC,OAAO,CAAC,gBAAM,CAAC,UAAU,EAAE,EAAE,gBAAM,CAAC,IAAI,EAAE,CAAC;SAC3D,CAAC;KACH;CACF,CAAC,CAAC;AAEI,MAAM,aAAa,GAAG,CAC3B,GAAY,EACZ,GAAa,EACb,IAAkB,EACZ,EAAE;IACR,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,EAAE,CAAC;IAEP,iBAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;QACjB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAC9B,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,cAAc,MAAM,WAAW,GAAG,eAAe,UAAU,cAAc,KAAK,aAAa,IAAI,aAAa,EAAE,EAAE,CAAC,CAAC;IAChI,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAhBW,QAAA,aAAa,iBAgBxB;AAEK,MAAM,YAAY,GAAG,CAAC,UAAkB,EAAE,OAAe,EAAO,EAAE;IACvE,MAAM,CAAC,IAAI,CAAC,YAAY,UAAU,eAAe,OAAO,EAAE,CAAC,CAAC;AAC9D,CAAC,CAAC;AAFW,QAAA,YAAY,gBAEvB;AAEK,MAAM,uBAAuB,GAAG,CAAC,KAAW,EAAE,MAAa,EAAO,EAAE;IACzE,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,WAAW,MAAM,EAAE,CAAC,CAAC;AAC5C,CAAC,CAAC;AAFW,QAAA,uBAAuB,2BAElC;AAEK,MAAM,wBAAwB,GAAG,CAAC,OAAe,EAAO,EAAE;IAC/D,MAAM,CAAC,KAAK,CAAC,iCAAiC,OAAO,EAAE,CAAC,CAAC;AAC3D,CAAC,CAAC;AAFW,QAAA,wBAAwB,4BAEnC"} \ No newline at end of file diff --git a/build/resources/boards/board.memory.repository.js b/build/resources/boards/board.memory.repository.js deleted file mode 100644 index 9577f8e..0000000 --- a/build/resources/boards/board.memory.repository.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const BOARDS = []; -const getAll = async () => BOARDS; -const getBoard = async (id) => BOARDS.find((el) => el.id === id); -const createNewBoard = async (board) => { - BOARDS.push(board); - return BOARDS[BOARDS.length - 1]; -}; -const updateBoard = async (obj) => { - const boardIndex = BOARDS.findIndex((board) => obj.id === board.id); - BOARDS[boardIndex] = { ...BOARDS[boardIndex], ...obj }; - return BOARDS[boardIndex]; -}; -const deleteBoard = async (id) => { - const boardIndex = BOARDS.findIndex((el) => el.id === id); - if (boardIndex !== -1) { - BOARDS.splice(boardIndex, 1); - return true; - } - return false; -}; -exports.default = { - deleteBoard, updateBoard, createNewBoard, getBoard, getAll, -}; -//# sourceMappingURL=board.memory.repository.js.map \ No newline at end of file diff --git a/build/resources/boards/board.memory.repository.js.map b/build/resources/boards/board.memory.repository.js.map deleted file mode 100644 index 14e8d05..0000000 --- a/build/resources/boards/board.memory.repository.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"board.memory.repository.js","sourceRoot":"","sources":["../../../src/resources/boards/board.memory.repository.ts"],"names":[],"mappings":";;AAEA,MAAM,MAAM,GAAW,EAAE,CAAC;AAE1B,MAAM,MAAM,GAAG,KAAK,IAAqB,EAAE,CAAC,MAAM,CAAC;AAEnD,MAAM,QAAQ,GAAG,KAAK,EAAE,EAAS,EAAsB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAE5F,MAAM,cAAc,GAAG,KAAK,EAAE,KAAW,EAAsB,EAAE;IAC/D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnB,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,KAAK,EAAE,GAAS,EAAsB,EAAE;IAC1D,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;IACpE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;IAEvD,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,KAAK,EAAE,EAAS,EAAmB,EAAE;IACvD,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;QACrB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,kBAAe;IACb,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM;CAC3D,CAAC"} \ No newline at end of file diff --git a/build/resources/boards/board.model.js b/build/resources/boards/board.model.js deleted file mode 100644 index 4a25107..0000000 --- a/build/resources/boards/board.model.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const uuid_1 = require("uuid"); -class Board { - constructor({ title = 'BOARD', columns = [] }) { - this.id = uuid_1.v4(); - this.title = title; - this.columns = [...columns]; - } - static toResponse(board) { - const { id, title, columns } = board; - return { id, title, columns }; - } -} -exports.default = Board; -//# sourceMappingURL=board.model.js.map \ No newline at end of file diff --git a/build/resources/boards/board.model.js.map b/build/resources/boards/board.model.js.map deleted file mode 100644 index 63d153a..0000000 --- a/build/resources/boards/board.model.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"board.model.js","sourceRoot":"","sources":["../../../src/resources/boards/board.model.ts"],"names":[],"mappings":";;AAAA,+BAAkC;AAOlC,MAAqB,KAAK;IAOxB,YAAY,EAAE,KAAK,GAAG,OAAO,EAAE,OAAO,GAAG,EAAE,EAAQ;QACjD,IAAI,CAAC,EAAE,GAAG,SAAI,EAAE,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,KAAW;QAC3B,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QACrC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAChC,CAAC;CACF;AAjBD,wBAiBC"} \ No newline at end of file diff --git a/build/resources/boards/board.router.js b/build/resources/boards/board.router.js deleted file mode 100644 index 9305ad9..0000000 --- a/build/resources/boards/board.router.js +++ /dev/null @@ -1,57 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const express_1 = __importDefault(require("express")); -const board_service_1 = require("./board.service"); -const board_model_1 = __importDefault(require("./board.model")); -const tasks_service_1 = require("../tasks/tasks.service"); -const error_handler_1 = require("../../middlewares/error.handler"); -const router = express_1.default.Router(); -router.route('/').get(async (_req, res, next) => { - const boards = await board_service_1.getAll(); - if (boards) { - res.json(boards.map(board_model_1.default.toResponse)); - } - else - next(new error_handler_1.ErrorHandler(404)); -}); -router.route('/:boardId').get(async (req, res, next) => { - const board = await board_service_1.getBoard(req.params.boardId); - if (board) { - res.json(board_model_1.default.toResponse(board)); - } - else - next(new error_handler_1.ErrorHandler(404, 'Board not found')); -}); -router.route('/').post(async (req, res, next) => { - const newBoard = await board_service_1.createBoard(new board_model_1.default(req.body)); - if (newBoard) { - res.status(201).json(board_model_1.default.toResponse(newBoard)); - } - else - next(new error_handler_1.ErrorHandler(404)); -}); -router.route('/:boardId').put(async (req, res, next) => { - const newBoard = await board_service_1.updateBoard({ - ...req.body, - id: req.params.boardId - }); - if (newBoard) { - res.status(200).json(board_model_1.default.toResponse(newBoard)); - } - else - next(new error_handler_1.ErrorHandler(401)); -}); -router.route('/:boardId').delete(async (req, res, next) => { - const boardFinded = await board_service_1.deleteBoard(req.params.boardId); - if (boardFinded) { - await tasks_service_1.deleteAllTasks(req.params.boardId); - res.status(204).send('The board has been deleted'); - } - else - next(new error_handler_1.ErrorHandler(404, 'Board not found')); -}); -exports.default = router; -//# sourceMappingURL=board.router.js.map \ No newline at end of file diff --git a/build/resources/boards/board.router.js.map b/build/resources/boards/board.router.js.map deleted file mode 100644 index 0960de8..0000000 --- a/build/resources/boards/board.router.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"board.router.js","sourceRoot":"","sources":["../../../src/resources/boards/board.router.ts"],"names":[],"mappings":";;;;;AAAA,sDAA8B;AAC9B,mDAEyB;AACzB,gEAAkC;AAClC,0DAAwD;AACxD,mEAA+D;AAE/D,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAC;AAEhC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAC9C,MAAM,MAAM,GAAG,MAAM,sBAAM,EAAE,CAAC;IAC9B,IAAI,MAAM,EAAE;QACV,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAK,CAAC,UAAU,CAAC,CAAC,CAAC;KACxC;;QAAM,IAAI,CAAC,IAAI,4BAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACrD,MAAM,KAAK,GAAG,MAAM,wBAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,KAAK,EAAE;QACT,GAAG,CAAC,IAAI,CAAC,qBAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;KACnC;;QAAM,IAAI,CAAC,IAAI,4BAAY,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAC9C,MAAM,QAAQ,GAAG,MAAM,2BAAW,CAAC,IAAI,qBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,IAAI,QAAQ,EAAE;QACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;KAClD;;QAAM,IAAI,CAAC,IAAI,4BAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACrD,MAAM,QAAQ,GAAG,MAAM,2BAAW,CAAC;QACjC,GAAG,GAAG,CAAC,IAAI;QACX,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO;KACvB,CAAC,CAAC;IACH,IAAI,QAAQ,EAAE;QACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;KAClD;;QAAM,IAAI,CAAC,IAAI,4BAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACxD,MAAM,WAAW,GAAG,MAAM,2BAAW,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1D,IAAI,WAAW,EAAE;QACf,MAAM,8BAAc,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;KACpD;;QAAM,IAAI,CAAC,IAAI,4BAAY,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAC"} \ No newline at end of file diff --git a/build/resources/boards/board.service.js b/build/resources/boards/board.service.js deleted file mode 100644 index 3f9a5f1..0000000 --- a/build/resources/boards/board.service.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.deleteBoard = exports.updateBoard = exports.createBoard = exports.getBoard = exports.getAll = void 0; -const board_memory_repository_1 = __importDefault(require("./board.memory.repository")); -const getAll = async () => board_memory_repository_1.default.getAll(); -exports.getAll = getAll; -const getBoard = (id) => board_memory_repository_1.default.getBoard(id); -exports.getBoard = getBoard; -const createBoard = (board) => board_memory_repository_1.default.createNewBoard(board); -exports.createBoard = createBoard; -const updateBoard = (board) => board_memory_repository_1.default.updateBoard(board); -exports.updateBoard = updateBoard; -const deleteBoard = (id) => board_memory_repository_1.default.deleteBoard(id); -exports.deleteBoard = deleteBoard; -//# sourceMappingURL=board.service.js.map \ No newline at end of file diff --git a/build/resources/boards/board.service.js.map b/build/resources/boards/board.service.js.map deleted file mode 100644 index e3bc307..0000000 --- a/build/resources/boards/board.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"board.service.js","sourceRoot":"","sources":["../../../src/resources/boards/board.service.ts"],"names":[],"mappings":";;;;;;AACA,wFAAkD;AAE3C,MAAM,MAAM,GAAG,KAAK,IAAqB,EAAE,CAAC,iCAAS,CAAC,MAAM,EAAE,CAAC;AAAzD,QAAA,MAAM,UAAmD;AAC/D,MAAM,QAAQ,GAAG,CAAC,EAAS,EAAsB,EAAE,CAAC,iCAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAArE,QAAA,QAAQ,YAA6D;AAC3E,MAAM,WAAW,GAAG,CAAC,KAAW,EAAsB,EAAE,CAAC,iCAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAAnF,QAAA,WAAW,eAAwE;AACzF,MAAM,WAAW,GAAG,CAAC,KAAW,EAAsB,EAAE,CAAC,iCAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAAhF,QAAA,WAAW,eAAqE;AACtF,MAAM,WAAW,GAAG,CAAC,EAAS,EAAmB,EAAE,CAAC,iCAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAAxE,QAAA,WAAW,eAA6D"} \ No newline at end of file diff --git a/build/resources/tasks/tasks.memory.repository.js b/build/resources/tasks/tasks.memory.repository.js deleted file mode 100644 index 51ddbe5..0000000 --- a/build/resources/tasks/tasks.memory.repository.js +++ /dev/null @@ -1,56 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const TASKS = []; -const getAll = async (boardsId) => { - const filtered = TASKS.filter((el) => el.boardId === boardsId); - return filtered; -}; -const createTask = async (task) => { - TASKS.push(task); - return TASKS[TASKS.length - 1]; -}; -const getTask = async (id) => { - const currentTask = TASKS.find((task) => task.id === id); - return currentTask; -}; -const updateTask = async (obj) => { - const taskIndex = TASKS.findIndex((user) => obj.id === user.id); - if (taskIndex !== -1) { - TASKS[taskIndex] = { ...TASKS[taskIndex], ...obj }; - return TASKS[taskIndex]; - } - return null; -}; -const deleteTask = async (id) => { - const taskIndex = TASKS.findIndex((user) => id === user.id); - if (taskIndex !== -1) { - TASKS.splice(taskIndex, 1); - return true; - } - return false; -}; -const deleteAllTasks = async (boardsId) => { - TASKS.forEach((task, i) => { - if (task.boardId === boardsId) { - TASKS.splice(i, 1); - } - }); -}; -const ifUserDeleted = async (userId) => { - TASKS.forEach((task, i) => { - if (task.userId === userId) { - const currentTask = { ...task, userId: null }; - TASKS[i] = { ...currentTask }; - } - }); -}; -exports.default = { - getAll, - createTask, - getTask, - updateTask, - deleteTask, - deleteAllTasks, - ifUserDeleted -}; -//# sourceMappingURL=tasks.memory.repository.js.map \ No newline at end of file diff --git a/build/resources/tasks/tasks.memory.repository.js.map b/build/resources/tasks/tasks.memory.repository.js.map deleted file mode 100644 index 14c7bac..0000000 --- a/build/resources/tasks/tasks.memory.repository.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tasks.memory.repository.js","sourceRoot":"","sources":["../../../src/resources/tasks/tasks.memory.repository.ts"],"names":[],"mappings":";;AAEA,MAAM,KAAK,GAAW,EAAE,CAAC;AAEzB,MAAM,MAAM,GAAG,KAAK,EAAE,QAAgB,EAAmB,EAAE;IACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC;IAC/D,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,KAAK,EAAE,IAAU,EAAqB,EAAE;IACzD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,KAAK,EAAE,EAAU,EAAqB,EAAE;IACtD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,KAAK,EAAE,GAAS,EAA0B,EAAE;IAC7D,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;IAChE,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;QACpB,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC;KACzB;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,KAAK,EAAE,EAAU,EAAmB,EAAE;IACvD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5D,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;QACpB,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,KAAK,EAAE,QAAgB,EAAgB,EAAE;IAC9D,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACxB,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;YAC7B,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACpB;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,KAAK,EAAE,MAAc,EAAgB,EAAE;IAC3D,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACxB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;YAC1B,MAAM,WAAW,GAAQ,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACnD,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;SAC/B;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,kBAAe;IACb,MAAM;IACN,UAAU;IACV,OAAO;IACP,UAAU;IACV,UAAU;IACV,cAAc;IACd,aAAa;CACd,CAAC"} \ No newline at end of file diff --git a/build/resources/tasks/tasks.model.js b/build/resources/tasks/tasks.model.js deleted file mode 100644 index 65cdcfb..0000000 --- a/build/resources/tasks/tasks.model.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const uuid_1 = require("uuid"); -class Task { - constructor({ title, order, description, userId, boardId, columnId }) { - this.id = uuid_1.v4(); - this.title = title; - this.order = order; - this.description = description; - this.userId = userId; - this.boardId = boardId; - this.columnId = columnId; - } - static toResponse(task) { - const { id, title, order, description, userId, boardId, columnId } = task; - return { - id, title, order, description, userId, boardId, columnId - }; - } -} -exports.default = Task; -//# sourceMappingURL=tasks.model.js.map \ No newline at end of file diff --git a/build/resources/tasks/tasks.model.js.map b/build/resources/tasks/tasks.model.js.map deleted file mode 100644 index 4472a30..0000000 --- a/build/resources/tasks/tasks.model.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tasks.model.js","sourceRoot":"","sources":["../../../src/resources/tasks/tasks.model.ts"],"names":[],"mappings":";;AAAA,+BAAkC;AAElC,MAAqB,IAAI;IAevB,YAAY,EACV,KAAK,EACL,KAAK,EACL,WAAW,EACX,MAAM,EACN,OAAO,EACP,QAAQ,EACJ;QACJ,IAAI,CAAC,EAAE,GAAG,SAAI,EAAE,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,IAAS;QACzB,MAAM,EACJ,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EACzD,GAAG,IAAI,CAAC;QACT,OAAO;YACL,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ;SACzD,CAAC;IACJ,CAAC;CACF;AAxCD,uBAwCC"} \ No newline at end of file diff --git a/build/resources/tasks/tasks.router.js b/build/resources/tasks/tasks.router.js deleted file mode 100644 index 9c23ee9..0000000 --- a/build/resources/tasks/tasks.router.js +++ /dev/null @@ -1,70 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const express_1 = __importDefault(require("express")); -const tasks_model_1 = __importDefault(require("./tasks.model")); -const board_service_1 = require("../boards/board.service"); -const tasks_service_1 = __importDefault(require("./tasks.service")); -const error_handler_1 = require("../../middlewares/error.handler"); -const router = express_1.default.Router({ mergeParams: true }); -router.route('/').get(async (req, res, next) => { - const { boardsId } = req.params; - if (boardsId) { - const boardCheck = await board_service_1.getBoard(boardsId); - const tasks = await tasks_service_1.default.getAll(boardsId); - if (tasks && boardCheck) - res.status(200).json(tasks.map(tasks_model_1.default.toResponse)); - } - else - next(new error_handler_1.ErrorHandler(404, 'Tasks not found')); -}); -router.route('/:taskId').get(async (req, res, next) => { - const { boardsId, taskId } = req.params; - if (boardsId && taskId) { - const boardCheck = await board_service_1.getBoard(boardsId); - const task = await tasks_service_1.default.getTask(taskId); - if (task && boardCheck) { - res.status(200).json(tasks_model_1.default.toResponse(task)); - } - else - next(new error_handler_1.ErrorHandler(404, 'Task not found')); - } - else - next(new error_handler_1.ErrorHandler(404, 'Task not found')); -}); -router.route('/').post(async (req, res, next) => { - const { boardsId } = req.params; - if (boardsId) { - const boardCheck = await board_service_1.getBoard(boardsId); - const newTask = await tasks_service_1.default.createTask(new tasks_model_1.default({ ...req.body, boardId: boardsId })); - if (newTask && boardCheck) - res.status(201).json(tasks_model_1.default.toResponse(newTask)); - } - else - next(new error_handler_1.ErrorHandler(404, 'Bad result')); -}); -router.route('/:taskId').put(async (req, res, next) => { - const updatedTask = await tasks_service_1.default.updateTask({ - ...req.body, - id: req.params['taskId'] - }); - if (updatedTask) - res.status(200).json(tasks_model_1.default.toResponse(updatedTask)); - else - next(new error_handler_1.ErrorHandler(404, 'Task not found')); -}); -router.route('/:taskId').delete(async (req, res, next) => { - const { taskId } = req.params; - if (taskId) { - const taskFinded = await tasks_service_1.default.deleteTask(taskId); - if (taskFinded) { - res.status(204).send('The task has been deleted'); - } - } - else - next(new error_handler_1.ErrorHandler(404, 'Board not found')); -}); -exports.default = router; -//# sourceMappingURL=tasks.router.js.map \ No newline at end of file diff --git a/build/resources/tasks/tasks.router.js.map b/build/resources/tasks/tasks.router.js.map deleted file mode 100644 index 904159e..0000000 --- a/build/resources/tasks/tasks.router.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tasks.router.js","sourceRoot":"","sources":["../../../src/resources/tasks/tasks.router.ts"],"names":[],"mappings":";;;;;AAAA,sDAAqD;AACrD,gEAAiC;AACjC,2DAAmD;AACnD,oEAA0C;AAC1C,mEAA+D;AAE/D,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;AAErD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAI,EAAE,EAAE;IAChE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IAChC,IAAI,QAAQ,EAAE;QACZ,MAAM,UAAU,GAAG,MAAM,wBAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,uBAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,KAAK,IAAI,UAAU;YAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAI,CAAC,UAAU,CAAC,CAAC,CAAC;KAC3E;;QAAM,IAAI,CAAC,IAAI,4BAAY,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAI,EAAE,EAAE;IACvE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IACxC,IAAI,QAAQ,IAAI,MAAM,EAAE;QACtB,MAAM,UAAU,GAAG,MAAM,wBAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,uBAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,IAAI,IAAI,UAAU,EAAE;YACtB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;SAC7C;;YAAM,IAAI,CAAC,IAAI,4BAAY,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC;KACtD;;QAAM,IAAI,CAAC,IAAI,4BAAY,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAI,EAAE,EAAE;IACjE,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IAEhC,IAAI,QAAQ,EAAE;QACZ,MAAM,UAAU,GAAG,MAAM,wBAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,uBAAW,CAAC,UAAU,CAC1C,IAAI,qBAAI,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAC7C,CAAC;QACF,IAAI,OAAO,IAAI,UAAU;YAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;KAC3E;;QAAM,IAAI,CAAC,IAAI,4BAAY,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAI,EAAE,EAAE;IACvE,MAAM,WAAW,GAAG,MAAM,uBAAW,CAAC,UAAU,CAAC;QAC/C,GAAG,GAAG,CAAC,IAAI;QACX,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;KACzB,CAAC,CAAC;IACH,IAAI,WAAW;QAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;;QAC/D,IAAI,CAAC,IAAI,4BAAY,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAI,EAAE,EAAE;IAC1E,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IAC9B,IAAI,MAAM,EAAE;QACV,MAAM,UAAU,GAAG,MAAM,uBAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,UAAU,EAAE;YACd,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;SACnD;KACF;;QAAM,IAAI,CAAC,IAAI,4BAAY,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAC"} \ No newline at end of file diff --git a/build/resources/tasks/tasks.service.js b/build/resources/tasks/tasks.service.js deleted file mode 100644 index d5ed7fb..0000000 --- a/build/resources/tasks/tasks.service.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ifUserDeleted = exports.deleteAllTasks = void 0; -const tasks_memory_repository_1 = __importDefault(require("./tasks.memory.repository")); -const getAll = (boardsId) => tasks_memory_repository_1.default.getAll(boardsId); -const createTask = (task) => tasks_memory_repository_1.default.createTask(task); -const getTask = (id) => tasks_memory_repository_1.default.getTask(id); -const updateTask = (obj) => tasks_memory_repository_1.default.updateTask(obj); -const deleteTask = (id) => tasks_memory_repository_1.default.deleteTask(id); -const deleteAllTasks = (boardId) => tasks_memory_repository_1.default.deleteAllTasks(boardId); -exports.deleteAllTasks = deleteAllTasks; -const ifUserDeleted = (userId) => tasks_memory_repository_1.default.ifUserDeleted(userId); -exports.ifUserDeleted = ifUserDeleted; -exports.default = { - getAll, - createTask, - getTask, - updateTask, - deleteTask, -}; -//# sourceMappingURL=tasks.service.js.map \ No newline at end of file diff --git a/build/resources/tasks/tasks.service.js.map b/build/resources/tasks/tasks.service.js.map deleted file mode 100644 index 4519509..0000000 --- a/build/resources/tasks/tasks.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"tasks.service.js","sourceRoot":"","sources":["../../../src/resources/tasks/tasks.service.ts"],"names":[],"mappings":";;;;;;AAAA,wFAAiD;AAGjD,MAAM,MAAM,GAAG,CAAC,QAAe,EAAmB,EAAE,CAAC,iCAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/E,MAAM,UAAU,GAAG,CAAC,IAAS,EAAqB,EAAE,CAAC,iCAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC/E,MAAM,OAAO,GAAG,CAAC,EAAS,EAAqB,EAAE,CAAC,iCAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACvE,MAAM,UAAU,GAAG,CAAC,GAAQ,EAA0B,EAAE,CAAC,iCAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAClF,MAAM,UAAU,GAAG,CAAC,EAAS,EAAmB,EAAE,CAAC,iCAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AACpE,MAAM,cAAc,GAAG,CAAC,OAAc,EAAgB,EAAE,CAAC,iCAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAApF,QAAA,cAAc,kBAAsE;AAC1F,MAAM,aAAa,GAAG,CAAC,MAAc,EAAgB,EAAE,CAAC,iCAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAAjF,QAAA,aAAa,iBAAoE;AAE9F,kBAAe;IACb,MAAM;IACN,UAAU;IACV,OAAO;IACP,UAAU;IACV,UAAU;CACX,CAAC"} \ No newline at end of file diff --git a/build/resources/users/user.memory.repository.js b/build/resources/users/user.memory.repository.js deleted file mode 100644 index b296138..0000000 --- a/build/resources/users/user.memory.repository.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const USERS = []; -const getAll = async () => USERS; -const createNewUser = (user) => { - const newUser = USERS.push(user); - return USERS[newUser - 1]; -}; -const getOneUser = async (id) => USERS - .find((user) => id === user['id']); -const updateUser = (obj) => { - const userIndex = USERS.findIndex((user) => obj.id === user['id']); - USERS[userIndex] = { ...USERS[userIndex], ...obj }; - return USERS[userIndex]; -}; -const deleteUser = async (id) => USERS - .splice(USERS.findIndex((user) => id === user['id']), 1); -exports.default = { - getAll, createNewUser, getOneUser, updateUser, deleteUser, -}; -//# sourceMappingURL=user.memory.repository.js.map \ No newline at end of file diff --git a/build/resources/users/user.memory.repository.js.map b/build/resources/users/user.memory.repository.js.map deleted file mode 100644 index a1779a1..0000000 --- a/build/resources/users/user.memory.repository.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"user.memory.repository.js","sourceRoot":"","sources":["../../../src/resources/users/user.memory.repository.ts"],"names":[],"mappings":";;AAEA,MAAM,KAAK,GAAW,EAAE,CAAC;AACzB,MAAM,MAAM,GAAG,KAAK,IAAqB,EAAE,CAAC,KAAK,CAAC;AAClD,MAAM,aAAa,GAAG,CAAC,IAAU,EAAe,EAAE;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAC5B,CAAC,CAAC;AACF,MAAM,UAAU,GAAG,KAAK,EAAE,EAAU,EAAwB,EAAE,CAAC,KAAK;KACjE,IAAI,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3C,MAAM,UAAU,GAAG,CAAC,GACwC,EAAe,EAAE;IAC3E,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;IACnD,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC;AAC1B,CAAC,CAAC;AACF,MAAM,UAAU,GAAG,KAAK,EAAE,EAAU,EAAmB,EAAE,CAAC,KAAK;KAC5D,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE3D,kBAAe;IACb,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;CAC1D,CAAC"} \ No newline at end of file diff --git a/build/resources/users/user.model.js b/build/resources/users/user.model.js deleted file mode 100644 index d5163ee..0000000 --- a/build/resources/users/user.model.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const uuid_1 = require("uuid"); -class User { - constructor({ id = uuid_1.v4(), name = 'USER', login = 'user', password = 'P@55w0rd' } = {}) { - this['id'] = id; - this['name'] = name; - this['login'] = login; - this['password'] = password; - } - static toResponse(user) { - const { id, name, login } = user; - if (id && name && login) { - return { id, name, login }; - } - return null; - } -} -exports.default = User; -//# sourceMappingURL=user.model.js.map \ No newline at end of file diff --git a/build/resources/users/user.model.js.map b/build/resources/users/user.model.js.map deleted file mode 100644 index f926b02..0000000 --- a/build/resources/users/user.model.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"user.model.js","sourceRoot":"","sources":["../../../src/resources/users/user.model.ts"],"names":[],"mappings":";;AAAA,+BAAkC;AAElC,MAAqB,IAAI;IACvB,YAAY,EACV,EAAE,GAAG,SAAI,EAAE,EACX,IAAI,GAAG,MAAM,EACb,KAAK,GAAG,MAAM,EACd,QAAQ,GAAG,UAAU,EACtB,GAAG,EAAE;QACJ,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;IAC9B,CAAC;IAID,MAAM,CAAC,UAAU,CACf,IAAU;QAMV,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACjC,IAAI,EAAE,IAAI,IAAI,IAAI,KAAK,EAAE;YACvB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;SAC5B;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA5BD,uBA4BC"} \ No newline at end of file diff --git a/build/resources/users/user.router.js b/build/resources/users/user.router.js deleted file mode 100644 index 43d87b0..0000000 --- a/build/resources/users/user.router.js +++ /dev/null @@ -1,57 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const express_1 = __importDefault(require("express")); -const error_handler_1 = require("../../middlewares/error.handler"); -const user_model_1 = __importDefault(require("./user.model")); -const user_service_1 = require("./user.service"); -const tasks_service_1 = require("../tasks/tasks.service"); -const router = express_1.default.Router(); -router.route('/').get(async (_req, res, next) => { - const users = await user_service_1.getAll(); - if (users) { - res.json(users.map(user_model_1.default.toResponse)); - } - else - next(new error_handler_1.ErrorHandler(404)); -}); -router.route('/:userId').get(async (req, res, next) => { - const user = await user_service_1.getUser(req.params.userId); - if (user) { - res.json(user_model_1.default.toResponse(user)); - } - else - next(new error_handler_1.ErrorHandler(404, 'User not found')); -}); -router.route('/').post(async (req, res, next) => { - const newUser = await user_service_1.createUser(new user_model_1.default(req.body)); - if (newUser) { - res.status(201).json(user_model_1.default.toResponse(newUser)); - } - else - next(new error_handler_1.ErrorHandler(404, 'bad result')); -}); -router.route('/:userId').put(async (req, res, next) => { - const newBoard = await user_service_1.updateUser({ - ...req.body, - id: req.params.userId - }); - if (newBoard) { - res.status(200).json(user_model_1.default.toResponse(newBoard)); - } - else - next(new error_handler_1.ErrorHandler(401, 'bad result')); -}); -router.route('/:userId').delete(async (req, res, next) => { - const userFinded = await user_service_1.deleteUser(req.params.userId); - if (userFinded) { - await tasks_service_1.ifUserDeleted(req.params.userId); - res.status(204).send('The board has been deleted'); - } - else - next(new error_handler_1.ErrorHandler(404, 'Board not found')); -}); -exports.default = router; -//# sourceMappingURL=user.router.js.map \ No newline at end of file diff --git a/build/resources/users/user.router.js.map b/build/resources/users/user.router.js.map deleted file mode 100644 index 3fb5bec..0000000 --- a/build/resources/users/user.router.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"user.router.js","sourceRoot":"","sources":["../../../src/resources/users/user.router.ts"],"names":[],"mappings":";;;;;AAAA,sDAA8B;AAC9B,mEAA+D;AAC/D,8DAAgC;AAChC,iDAMwB;AACxB,0DAAuD;AAEvD,MAAM,MAAM,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAC;AAEhC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAC9C,MAAM,KAAK,GAAG,MAAM,qBAAM,EAAE,CAAC;IAC7B,IAAI,KAAK,EAAE;QACT,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAI,CAAC,UAAU,CAAC,CAAC,CAAC;KACtC;;QAAM,IAAI,CAAC,IAAI,4BAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACpD,MAAM,IAAI,GAAG,MAAM,sBAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,IAAI,EAAE;QACR,GAAG,CAAC,IAAI,CAAC,oBAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;KACjC;;QAAM,IAAI,CAAC,IAAI,4BAAY,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAC9C,MAAM,OAAO,GAAG,MAAM,yBAAU,CAAC,IAAI,oBAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,IAAI,OAAO,EAAE;QACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,oBAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;KAChD;;QAAM,IAAI,CAAC,IAAI,4BAAY,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACpD,MAAM,QAAQ,GAAG,MAAM,yBAAU,CAAC;QAChC,GAAG,GAAG,CAAC,IAAI;QACX,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;IACH,IAAI,QAAQ,EAAE;QACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,oBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;KACjD;;QAAM,IAAI,CAAC,IAAI,4BAAY,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACvD,MAAM,UAAU,GAAG,MAAM,yBAAU,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,UAAU,EAAE;QACd,MAAM,6BAAa,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;KACpD;;QAAM,IAAI,CAAC,IAAI,4BAAY,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,kBAAe,MAAM,CAAC"} \ No newline at end of file diff --git a/build/resources/users/user.service.js b/build/resources/users/user.service.js deleted file mode 100644 index 29e52d5..0000000 --- a/build/resources/users/user.service.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.deleteUser = exports.updateUser = exports.createUser = exports.getUser = exports.getAll = void 0; -const user_memory_repository_1 = __importDefault(require("./user.memory.repository")); -const getAll = () => user_memory_repository_1.default.getAll(); -exports.getAll = getAll; -const getUser = (id) => user_memory_repository_1.default.getOneUser(id); -exports.getUser = getUser; -const createUser = (user) => user_memory_repository_1.default.createNewUser(user); -exports.createUser = createUser; -const updateUser = (obj) => user_memory_repository_1.default.updateUser(obj); -exports.updateUser = updateUser; -const deleteUser = (id) => user_memory_repository_1.default.deleteUser(id); -exports.deleteUser = deleteUser; -//# sourceMappingURL=user.service.js.map \ No newline at end of file diff --git a/build/resources/users/user.service.js.map b/build/resources/users/user.service.js.map deleted file mode 100644 index 5eea757..0000000 --- a/build/resources/users/user.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"user.service.js","sourceRoot":"","sources":["../../../src/resources/users/user.service.ts"],"names":[],"mappings":";;;;;;AACA,sFAAiD;AAE1C,MAAM,MAAM,GAAG,GAAoB,EAAE,CAAC,gCAAS,CAAC,MAAM,EAAE,CAAC;AAAnD,QAAA,MAAM,UAA6C;AACzD,MAAM,OAAO,GAAG,CAAC,EAAU,EAAuB,EAAE,CAAC,gCAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAAxE,QAAA,OAAO,WAAiE;AAC9E,MAAM,UAAU,GAAG,CAAC,IAAU,EAAc,EAAE,CAAC,gCAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAAvE,QAAA,UAAU,cAA6D;AAC7E,MAAM,UAAU,GAAG,CAAC,GAKV,EAAc,EAAE,CAAC,gCAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAL/C,QAAA,UAAU,cAKqC;AACrD,MAAM,UAAU,GAAG,CAAC,EAAU,EAAkB,EAAE,CAAC,gCAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAAtE,QAAA,UAAU,cAA4D"} \ No newline at end of file diff --git a/build/server.js b/build/server.js deleted file mode 100644 index 1258a2a..0000000 --- a/build/server.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const config_1 = require("./common/config"); -const app_1 = __importDefault(require("./app")); -app_1.default.listen(config_1.PORT, () => console.log(`App is running on http://localhost:${config_1.PORT}`)); -//# sourceMappingURL=server.js.map \ No newline at end of file diff --git a/build/server.js.map b/build/server.js.map deleted file mode 100644 index b84b71b..0000000 --- a/build/server.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;;AAAA,4CAAuC;AACvC,gDAAwB;AAExB,aAAG,CAAC,MAAM,CAAC,aAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,sCAAsC,aAAI,EAAE,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/crash-data.log b/crash-data.log index 95a7e96..6c796a7 100644 --- a/crash-data.log +++ b/crash-data.log @@ -1,2 +1 @@ -Caught exception: Error: listen EADDRINUSE: address already in use :::8080 -Exception origin: uncaughtException \ No newline at end of file +Caught exception: getaddrinfo ENOTFOUND postgres) \ No newline at end of file diff --git a/dist/app.controller.d.ts b/dist/app.controller.d.ts new file mode 100644 index 0000000..8435160 --- /dev/null +++ b/dist/app.controller.d.ts @@ -0,0 +1,6 @@ +import { AppService } from './app.service'; +export declare class AppController { + private readonly appService; + constructor(appService: AppService); + getHello(): string; +} diff --git a/dist/app.controller.js b/dist/app.controller.js new file mode 100644 index 0000000..e9e08c0 --- /dev/null +++ b/dist/app.controller.js @@ -0,0 +1,34 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AppController = void 0; +const common_1 = require("@nestjs/common"); +const app_service_1 = require("./app.service"); +let AppController = class AppController { + constructor(appService) { + this.appService = appService; + } + getHello() { + return this.appService.getHello(); + } +}; +__decorate([ + common_1.Get(), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", String) +], AppController.prototype, "getHello", null); +AppController = __decorate([ + common_1.Controller(), + __metadata("design:paramtypes", [app_service_1.AppService]) +], AppController); +exports.AppController = AppController; +//# sourceMappingURL=app.controller.js.map \ No newline at end of file diff --git a/dist/app.controller.js.map b/dist/app.controller.js.map new file mode 100644 index 0000000..6ffd2bb --- /dev/null +++ b/dist/app.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"app.controller.js","sourceRoot":"","sources":["../src/app.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAiD;AACjD,+CAA2C;AAG3C,IAAa,aAAa,GAA1B,MAAa,aAAa;IAExB,YAAY,UAAsB;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAGD,QAAQ;QACN,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IACpC,CAAC;CACF,CAAA;AAHC;IADC,YAAG,EAAE;;;;6CAGL;AATU,aAAa;IADzB,mBAAU,EAAE;qCAGa,wBAAU;GAFvB,aAAa,CAUzB;AAVY,sCAAa"} \ No newline at end of file diff --git a/dist/app.module.d.ts b/dist/app.module.d.ts new file mode 100644 index 0000000..63d39fd --- /dev/null +++ b/dist/app.module.d.ts @@ -0,0 +1,2 @@ +export declare class AppModule { +} diff --git a/dist/app.module.js b/dist/app.module.js new file mode 100644 index 0000000..66146f3 --- /dev/null +++ b/dist/app.module.js @@ -0,0 +1,58 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AppModule = void 0; +const http_error_filter_1 = require("./shared/http-error.filter"); +const common_1 = require("@nestjs/common"); +const config_1 = require("@nestjs/config"); +const typeorm_1 = require("@nestjs/typeorm"); +const app_controller_1 = require("./app.controller"); +const app_service_1 = require("./app.service"); +const users_module_1 = require("./resources/users/users.module"); +const boards_module_1 = require("./resources/boards/boards.module"); +const tasks_module_1 = require("./resources/tasks/tasks.module"); +const login_module_1 = require("./resources/auth/login.module"); +const core_1 = require("@nestjs/core"); +const logging_interceptor_1 = require("./shared/logging.interceptor"); +const ormconfig_1 = __importDefault(require("./common/ormconfig")); +console.log(ormconfig_1.default.password); +let AppModule = class AppModule { +}; +AppModule = __decorate([ + common_1.Module({ + imports: [ + config_1.ConfigModule.forRoot({ isGlobal: true }), + typeorm_1.TypeOrmModule.forRootAsync({ + imports: [config_1.ConfigModule], + useFactory: () => ormconfig_1.default, + inject: [config_1.ConfigService] + }), + users_module_1.UsersModule, + boards_module_1.BoardsModule, + tasks_module_1.TasksModule, + login_module_1.LoginModule + ], + controllers: [app_controller_1.AppController], + providers: [ + app_service_1.AppService, + { + provide: core_1.APP_FILTER, + useClass: http_error_filter_1.HttpErrorFilter + }, + { + provide: core_1.APP_INTERCEPTOR, + useClass: logging_interceptor_1.LoggingInterceptor + } + ] + }) +], AppModule); +exports.AppModule = AppModule; +//# sourceMappingURL=app.module.js.map \ No newline at end of file diff --git a/dist/app.module.js.map b/dist/app.module.js.map new file mode 100644 index 0000000..0cddfe4 --- /dev/null +++ b/dist/app.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kEAA6D;AAC7D,2CAAwC;AACxC,2CAA6D;AAC7D,6CAAsE;AACtE,qDAAiD;AACjD,+CAA2C;AAC3C,iEAA6D;AAC7D,oEAAgE;AAChE,iEAA6D;AAC7D,gEAA4D;AAC5D,uCAA2D;AAC3D,sEAAkE;AAClE,mEAAwC;AAExC,OAAO,CAAC,GAAG,CAAC,mBAAM,CAAC,QAAQ,CAAC,CAAA;AA4B5B,IAAa,SAAS,GAAtB,MAAa,SAAS;CAAG,CAAA;AAAZ,SAAS;IA1BrB,eAAM,CAAC;QACN,OAAO,EAAE;YACP,qBAAY,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YACxC,uBAAa,CAAC,YAAY,CAAC;gBACzB,OAAO,EAAE,CAAC,qBAAY,CAAC;gBACvB,UAAU,EAAE,GAAG,EAAE,CAAE,mBAAgC;gBACnD,MAAM,EAAE,CAAC,sBAAa,CAAC;aACxB,CAAC;YACF,0BAAW;YACX,4BAAY;YACZ,0BAAW;YACX,0BAAW;SACZ;QACD,WAAW,EAAE,CAAC,8BAAa,CAAC;QAC5B,SAAS,EAAE;YACT,wBAAU;YACV;gBACE,OAAO,EAAE,iBAAU;gBACnB,QAAQ,EAAE,mCAAe;aAC1B;YACD;gBACE,OAAO,EAAE,sBAAe;gBACxB,QAAQ,EAAE,wCAAkB;aAC7B;SACF;KACF,CAAC;GACW,SAAS,CAAG;AAAZ,8BAAS"} \ No newline at end of file diff --git a/dist/app.service.d.ts b/dist/app.service.d.ts new file mode 100644 index 0000000..ee906e8 --- /dev/null +++ b/dist/app.service.d.ts @@ -0,0 +1,3 @@ +export declare class AppService { + getHello(): string; +} diff --git a/dist/app.service.js b/dist/app.service.js new file mode 100644 index 0000000..b0972a0 --- /dev/null +++ b/dist/app.service.js @@ -0,0 +1,20 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AppService = void 0; +const common_1 = require("@nestjs/common"); +let AppService = class AppService { + getHello() { + return 'Hello World!'; + } +}; +AppService = __decorate([ + common_1.Injectable() +], AppService); +exports.AppService = AppService; +//# sourceMappingURL=app.service.js.map \ No newline at end of file diff --git a/dist/app.service.js.map b/dist/app.service.js.map new file mode 100644 index 0000000..b57bb36 --- /dev/null +++ b/dist/app.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"app.service.js","sourceRoot":"","sources":["../src/app.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAG5C,IAAa,UAAU,GAAvB,MAAa,UAAU;IACrB,QAAQ;QACN,OAAO,cAAc,CAAC;IACxB,CAAC;CACF,CAAA;AAJY,UAAU;IADtB,mBAAU,EAAE;GACA,UAAU,CAItB;AAJY,gCAAU"} \ No newline at end of file diff --git a/dist/common/ormconfig.d.ts b/dist/common/ormconfig.d.ts new file mode 100644 index 0000000..3d8dc4e --- /dev/null +++ b/dist/common/ormconfig.d.ts @@ -0,0 +1,20 @@ +import { User } from '../resources/users/entities/user.entity'; +import { Board } from '../resources/boards/entities/board.entity'; +import { Task } from '../resources/tasks/entities/task.entity'; +declare const config: { + type: string; + host: string; + port: number; + username: string; + password: string; + database: string; + entities: (typeof User | typeof Board | typeof Task)[]; + synchronize: boolean; + migrations: string[]; + migrationsTableName: string; + migrationsRun: boolean; + cli: { + migrationsDir: string; + }; +}; +export default config; diff --git a/dist/common/ormconfig.js b/dist/common/ormconfig.js new file mode 100644 index 0000000..c20fcbc --- /dev/null +++ b/dist/common/ormconfig.js @@ -0,0 +1,32 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const dotenv_1 = __importDefault(require("dotenv")); +const path_1 = __importDefault(require("path")); +const user_entity_1 = require("../resources/users/entities/user.entity"); +const board_entity_1 = require("../resources/boards/entities/board.entity"); +const task_entity_1 = require("../resources/tasks/entities/task.entity"); +dotenv_1.default.config({ + path: path_1.default.join(__dirname, '../../.env') +}); +const config = { + type: 'postgres', + host: process.env.POSTGRES_HOST || process.env.DB_HOST, + port: parseInt(process.env.POSTGRES_PORT) || + parseInt(process.env.DB_PORT), + username: process.env.POSTGRES_USER || process.env.DB_USERNAME, + password: process.env.POSTGRES_PASSWORD || process.env.DB_PASSWORD, + database: process.env.POSTGRES_DB || process.env.DB_NAME, + entities: [user_entity_1.User, board_entity_1.Board, task_entity_1.Task], + synchronize: false, + migrations: ['../../dist/migration/**.{js,ts}'], + migrationsTableName: 'migrations_typeorm', + migrationsRun: true, + cli: { + migrationsDir: "src/migration" + } +}; +exports.default = config; +//# sourceMappingURL=ormconfig.js.map \ No newline at end of file diff --git a/dist/common/ormconfig.js.map b/dist/common/ormconfig.js.map new file mode 100644 index 0000000..14a8404 --- /dev/null +++ b/dist/common/ormconfig.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ormconfig.js","sourceRoot":"","sources":["../../src/common/ormconfig.ts"],"names":[],"mappings":";;;;;AAAA,oDAA4B;AAC5B,gDAAwB;AACxB,yEAA+D;AAC/D,4EAAkE;AAClE,yEAA+D;AAE/D,gBAAM,CAAC,MAAM,CAAC;IACZ,IAAI,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;CACzC,CAAC,CAAC;AAEH,MAAM,MAAM,GAAI;IACd,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO;IACtD,IAAI,EACF,QAAQ,CAAS,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAC3C,QAAQ,CAAS,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IACvC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW;IAC9D,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW;IAClE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO;IACxD,QAAQ,EAAE,CAAC,kBAAI,EAAE,oBAAK,EAAE,kBAAI,CAAC;IAC7B,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,CAAC,iCAAiC,CAAC;IAC/C,mBAAmB,EAAE,oBAAoB;IACzC,aAAa,EAAE,IAAI;IACnB,GAAG,EAAE;QACH,aAAa,EAAE,eAAe;KAC/B;CACF,CAAC;AAEF,kBAAe,MAAM,CAAC"} \ No newline at end of file diff --git a/dist/main.d.ts b/dist/main.d.ts new file mode 100644 index 0000000..509db18 --- /dev/null +++ b/dist/main.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/dist/main.js b/dist/main.js new file mode 100644 index 0000000..a45a1f3 --- /dev/null +++ b/dist/main.js @@ -0,0 +1,25 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const core_1 = require("@nestjs/core"); +const app_module_1 = require("./app.module"); +const admin_creator_1 = require("./utils/admin.creator"); +const platform_fastify_1 = require("@nestjs/platform-fastify"); +const dotenv_1 = __importDefault(require("dotenv")); +const path_1 = __importDefault(require("path")); +dotenv_1.default.config({ + path: path_1.default.join(__dirname, '../.env') +}); +async function bootstrap() { + const isFastify = JSON.parse(process.env.USE_FASTIFY.toLowerCase()); + const app = isFastify + ? await core_1.NestFactory.create(app_module_1.AppModule, new platform_fastify_1.FastifyAdapter()) + : await core_1.NestFactory.create(app_module_1.AppModule); + admin_creator_1.createUserAdmin(); + await app.listen(8080, '0.0.0.0'); + console.log(`enabled ${isFastify ? 'fastify' : 'express'}`); +} +bootstrap(); +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/dist/main.js.map b/dist/main.js.map new file mode 100644 index 0000000..6c8c574 --- /dev/null +++ b/dist/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;;;AAAA,uCAA2C;AAC3C,6CAAyC;AACzC,yDAAwD;AACxD,+DAGkC;AAClC,oDAA4B;AAC5B,gDAAwB;AAExB,gBAAM,CAAC,MAAM,CAAC;IACZ,IAAI,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;CACtC,CAAC,CAAC;AAEH,KAAK,UAAU,SAAS;IACtB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IACpE,MAAM,GAAG,GAAG,SAAS;QACnB,CAAC,CAAC,MAAM,kBAAW,CAAC,MAAM,CACtB,sBAAS,EACT,IAAI,iCAAc,EAAE,CACrB;QACH,CAAC,CAAC,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,CAAC,CAAC;IACxC,+BAAe,EAAE,CAAC;IAClB,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;AAC9D,CAAC;AACD,SAAS,EAAE,CAAC"} \ No newline at end of file diff --git a/dist/migration/1626057786688-Trello_db.d.ts b/dist/migration/1626057786688-Trello_db.d.ts new file mode 100644 index 0000000..660d317 --- /dev/null +++ b/dist/migration/1626057786688-Trello_db.d.ts @@ -0,0 +1,6 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; +export declare class TrelloDb1626057786688 implements MigrationInterface { + name: string; + up(queryRunner: QueryRunner): Promise; + down(queryRunner: QueryRunner): Promise; +} diff --git a/dist/migration/1626057786688-Trello_db.js b/dist/migration/1626057786688-Trello_db.js new file mode 100644 index 0000000..f7e9916 --- /dev/null +++ b/dist/migration/1626057786688-Trello_db.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TrelloDb1626057786688 = void 0; +class TrelloDb1626057786688 { + constructor() { + this.name = 'TrelloDb1626057786688'; + } + async up(queryRunner) { + await queryRunner.query(`CREATE TABLE "board" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "title" character varying(200) NOT NULL, "columns" jsonb, CONSTRAINT "PK_865a0f2e22c140d261b1df80eb1" PRIMARY KEY ("id"))`); + await queryRunner.query(`CREATE TABLE "task" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "title" character varying(200) NOT NULL, "order" integer NOT NULL, "description" character varying(200) NOT NULL, "columnId" uuid, "userIdId" uuid, "boardIdId" uuid, CONSTRAINT "PK_fb213f79ee45060ba925ecd576e" PRIMARY KEY ("id"))`); + await queryRunner.query(`CREATE TABLE "user" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "name" character varying(40), "login" character varying(40) NOT NULL, "password" character varying(200) NOT NULL, CONSTRAINT "PK_cace4a159ff9f2512dd42373760" PRIMARY KEY ("id"))`); + await queryRunner.query(`ALTER TABLE "task" ADD CONSTRAINT "FK_29c593b244774c65824ae1df648" FOREIGN KEY ("userIdId") REFERENCES "user"("id") ON DELETE SET NULL ON UPDATE NO ACTION`); + await queryRunner.query(`ALTER TABLE "task" ADD CONSTRAINT "FK_61a750180758aaf4a589ccefaa9" FOREIGN KEY ("boardIdId") REFERENCES "board"("id") ON DELETE CASCADE ON UPDATE NO ACTION`); + } + async down(queryRunner) { + await queryRunner.query(`ALTER TABLE "task" DROP CONSTRAINT "FK_61a750180758aaf4a589ccefaa9"`); + await queryRunner.query(`ALTER TABLE "task" DROP CONSTRAINT "FK_29c593b244774c65824ae1df648"`); + await queryRunner.query(`DROP TABLE "user"`); + await queryRunner.query(`DROP TABLE "task"`); + await queryRunner.query(`DROP TABLE "board"`); + } +} +exports.TrelloDb1626057786688 = TrelloDb1626057786688; +//# sourceMappingURL=1626057786688-Trello_db.js.map \ No newline at end of file diff --git a/dist/migration/1626057786688-Trello_db.js.map b/dist/migration/1626057786688-Trello_db.js.map new file mode 100644 index 0000000..e90cb25 --- /dev/null +++ b/dist/migration/1626057786688-Trello_db.js.map @@ -0,0 +1 @@ +{"version":3,"file":"1626057786688-Trello_db.js","sourceRoot":"","sources":["../../src/migration/1626057786688-Trello_db.ts"],"names":[],"mappings":";;;AAEA,MAAa,qBAAqB;IAAlC;QACI,SAAI,GAAG,uBAAuB,CAAA;IAkBlC,CAAC;IAhBU,KAAK,CAAC,EAAE,CAAC,WAAwB;QACpC,MAAM,WAAW,CAAC,KAAK,CAAC,gMAAgM,CAAC,CAAC;QAC1N,MAAM,WAAW,CAAC,KAAK,CAAC,2SAA2S,CAAC,CAAC;QACrU,MAAM,WAAW,CAAC,KAAK,CAAC,uPAAuP,CAAC,CAAC;QACjR,MAAM,WAAW,CAAC,KAAK,CAAC,4JAA4J,CAAC,CAAC;QACtL,MAAM,WAAW,CAAC,KAAK,CAAC,6JAA6J,CAAC,CAAC;IAC3L,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAwB;QACtC,MAAM,WAAW,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QAC/F,MAAM,WAAW,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;QAC/F,MAAM,WAAW,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC7C,MAAM,WAAW,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC7C,MAAM,WAAW,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAClD,CAAC;CAEJ;AAnBD,sDAmBC"} \ No newline at end of file diff --git a/dist/resources/auth/auth.controller.d.ts b/dist/resources/auth/auth.controller.d.ts new file mode 100644 index 0000000..f5bce99 --- /dev/null +++ b/dist/resources/auth/auth.controller.d.ts @@ -0,0 +1,7 @@ +import { UsersService } from '../users/users.service'; +import { UserLoginDto } from './dto/user-login.dto'; +export declare class AuthController { + private readonly loginService; + constructor(loginService: UsersService); + create(login: UserLoginDto['login'], password: UserLoginDto['password']): Promise; +} diff --git a/dist/resources/auth/auth.controller.js b/dist/resources/auth/auth.controller.js new file mode 100644 index 0000000..e2c5d8e --- /dev/null +++ b/dist/resources/auth/auth.controller.js @@ -0,0 +1,43 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AuthController = void 0; +const common_1 = require("@nestjs/common"); +const users_service_1 = require("../users/users.service"); +let AuthController = class AuthController { + constructor(loginService) { + this.loginService = loginService; + } + async create(login, password) { + const isLogin = await this.loginService.auth({ login, password }); + if (isLogin) { + return isLogin; + } + throw new common_1.HttpException('Unauthorized', common_1.HttpStatus.UNAUTHORIZED); + } +}; +__decorate([ + common_1.Post(), + __param(0, common_1.Body('login')), + __param(1, common_1.Body('password')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, Object]), + __metadata("design:returntype", Promise) +], AuthController.prototype, "create", null); +AuthController = __decorate([ + common_1.Controller('login'), + __metadata("design:paramtypes", [users_service_1.UsersService]) +], AuthController); +exports.AuthController = AuthController; +//# sourceMappingURL=auth.controller.js.map \ No newline at end of file diff --git a/dist/resources/auth/auth.controller.js.map b/dist/resources/auth/auth.controller.js.map new file mode 100644 index 0000000..bc75ac4 --- /dev/null +++ b/dist/resources/auth/auth.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../../src/resources/auth/auth.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAMwB;AACxB,0DAAsD;AAItD,IAAa,cAAc,GAA3B,MAAa,cAAc;IAGzB,YAAY,YAA0B;QACpC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAGD,KAAK,CAAC,MAAM,CACK,KAA4B,EACzB,QAAkC;QAEpD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClE,IAAI,OAAO,EAAE;YACX,OAAO,OAAO,CAAC;SAChB;QACD,MAAM,IAAI,sBAAa,CAAC,cAAc,EAAE,mBAAU,CAAC,YAAY,CAAC,CAAC;IACnE,CAAC;CACF,CAAA;AAVC;IADC,aAAI,EAAE;IAEJ,WAAA,aAAI,CAAC,OAAO,CAAC,CAAA;IACb,WAAA,aAAI,CAAC,UAAU,CAAC,CAAA;;;;4CAOlB;AAjBU,cAAc;IAD1B,mBAAU,CAAC,OAAO,CAAC;qCAIQ,4BAAY;GAH3B,cAAc,CAkB1B;AAlBY,wCAAc"} \ No newline at end of file diff --git a/dist/resources/auth/auth.guard.d.ts b/dist/resources/auth/auth.guard.d.ts new file mode 100644 index 0000000..1dd8333 --- /dev/null +++ b/dist/resources/auth/auth.guard.d.ts @@ -0,0 +1,4 @@ +import { CanActivate, ExecutionContext } from '@nestjs/common'; +export declare class AuthGuard implements CanActivate { + canActivate(context: ExecutionContext): Promise; +} diff --git a/dist/resources/auth/auth.guard.js b/dist/resources/auth/auth.guard.js new file mode 100644 index 0000000..aff2300 --- /dev/null +++ b/dist/resources/auth/auth.guard.js @@ -0,0 +1,42 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AuthGuard = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("typeorm"); +const user_entity_1 = require("../users/entities/user.entity"); +const jsonwebtoken_1 = __importDefault(require("jsonwebtoken")); +class AuthGuard { + async canActivate(context) { + const req = context.switchToHttp().getRequest(); + const header = req.headers['x-access-token'] || req.headers.authorization; + const sessionToken = header ? header.replace(/^Bearer\s+/, '') : ''; + if (!sessionToken) { + throw new common_1.HttpException('Unauthorized', common_1.HttpStatus.UNAUTHORIZED); + } + else { + return new Promise(resolve => { + jsonwebtoken_1.default.verify(sessionToken, process.env.JWT_SECRET_KEY, (_err, decoded) => { + if (decoded) { + typeorm_1.getRepository(user_entity_1.User) + .findOne({ + where: { id: decoded.id } + }) + .then(() => { + resolve(true); + }, () => { + throw new common_1.HttpException('Unauthorized error', common_1.HttpStatus.UNAUTHORIZED); + }); + } + else { + throw new common_1.HttpException('Unauthorized error', common_1.HttpStatus.UNAUTHORIZED); + } + }); + }); + } + } +} +exports.AuthGuard = AuthGuard; +//# sourceMappingURL=auth.guard.js.map \ No newline at end of file diff --git a/dist/resources/auth/auth.guard.js.map b/dist/resources/auth/auth.guard.js.map new file mode 100644 index 0000000..70c62de --- /dev/null +++ b/dist/resources/auth/auth.guard.js.map @@ -0,0 +1 @@ +{"version":3,"file":"auth.guard.js","sourceRoot":"","sources":["../../../src/resources/auth/auth.guard.ts"],"names":[],"mappings":";;;;;;AAAA,2CAKwB;AACxB,qCAAwC;AACxC,+DAAqD;AACrD,gEAA+B;AAE/B,MAAa,SAAS;IACpB,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,MAAM,GACF,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;QACrE,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,YAAY,EAAE;YACjB,MAAM,IAAI,sBAAa,CAAC,cAAc,EAAE,mBAAU,CAAC,YAAY,CAAC,CAAC;SAClE;aAAM;YACL,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC3B,sBAAG,CAAC,MAAM,CACR,YAAY,EACZ,OAAO,CAAC,GAAG,CAAC,cAAwB,EACpC,CAAC,IAAI,EAAE,OAAe,EAAE,EAAE;oBACxB,IAAI,OAAO,EAAE;wBACX,uBAAa,CAAC,kBAAI,CAAC;6BAChB,OAAO,CAAC;4BACP,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;yBAC1B,CAAC;6BACD,IAAI,CACH,GAAG,EAAE;4BACH,OAAO,CAAC,IAAI,CAAC,CAAC;wBAChB,CAAC,EACD,GAAG,EAAE;4BACH,MAAM,IAAI,sBAAa,CACrB,oBAAoB,EACpB,mBAAU,CAAC,YAAY,CACxB,CAAC;wBACJ,CAAC,CACF,CAAC;qBACL;yBAAM;wBACL,MAAM,IAAI,sBAAa,CACrB,oBAAoB,EACpB,mBAAU,CAAC,YAAY,CACxB,CAAC;qBACH;gBACH,CAAC,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;CACF;AAzCD,8BAyCC"} \ No newline at end of file diff --git a/dist/resources/auth/dto/login.dto.d.ts b/dist/resources/auth/dto/login.dto.d.ts new file mode 100644 index 0000000..55793dd --- /dev/null +++ b/dist/resources/auth/dto/login.dto.d.ts @@ -0,0 +1,4 @@ +export declare class LoginDto { + login: string; + password: string; +} diff --git a/dist/resources/auth/dto/login.dto.js b/dist/resources/auth/dto/login.dto.js new file mode 100644 index 0000000..ea602ab --- /dev/null +++ b/dist/resources/auth/dto/login.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LoginDto = void 0; +class LoginDto { +} +exports.LoginDto = LoginDto; +//# sourceMappingURL=login.dto.js.map \ No newline at end of file diff --git a/dist/resources/auth/dto/login.dto.js.map b/dist/resources/auth/dto/login.dto.js.map new file mode 100644 index 0000000..6b3a51e --- /dev/null +++ b/dist/resources/auth/dto/login.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"login.dto.js","sourceRoot":"","sources":["../../../../src/resources/auth/dto/login.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,QAAQ;CAGpB;AAHD,4BAGC"} \ No newline at end of file diff --git a/dist/resources/auth/dto/user-login.dto.d.ts b/dist/resources/auth/dto/user-login.dto.d.ts new file mode 100644 index 0000000..9201e38 --- /dev/null +++ b/dist/resources/auth/dto/user-login.dto.d.ts @@ -0,0 +1,4 @@ +export declare class UserLoginDto { + login: string; + password: string; +} diff --git a/dist/resources/auth/dto/user-login.dto.js b/dist/resources/auth/dto/user-login.dto.js new file mode 100644 index 0000000..2113ad5 --- /dev/null +++ b/dist/resources/auth/dto/user-login.dto.js @@ -0,0 +1,25 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UserLoginDto = void 0; +const class_validator_1 = require("class-validator"); +class UserLoginDto { +} +__decorate([ + class_validator_1.IsNotEmpty(), + __metadata("design:type", String) +], UserLoginDto.prototype, "login", void 0); +__decorate([ + class_validator_1.IsNotEmpty(), + __metadata("design:type", String) +], UserLoginDto.prototype, "password", void 0); +exports.UserLoginDto = UserLoginDto; +//# sourceMappingURL=user-login.dto.js.map \ No newline at end of file diff --git a/dist/resources/auth/dto/user-login.dto.js.map b/dist/resources/auth/dto/user-login.dto.js.map new file mode 100644 index 0000000..944978f --- /dev/null +++ b/dist/resources/auth/dto/user-login.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user-login.dto.js","sourceRoot":"","sources":["../../../../src/resources/auth/dto/user-login.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAA6C;AAE7C,MAAa,YAAY;CAMxB;AAJC;IADC,4BAAU,EAAE;;2CACC;AAGd;IADC,4BAAU,EAAE;;8CACI;AALnB,oCAMC"} \ No newline at end of file diff --git a/dist/resources/auth/entities/login.entity.d.ts b/dist/resources/auth/entities/login.entity.d.ts new file mode 100644 index 0000000..0bce0cf --- /dev/null +++ b/dist/resources/auth/entities/login.entity.d.ts @@ -0,0 +1,2 @@ +export declare class Login { +} diff --git a/dist/resources/auth/entities/login.entity.js b/dist/resources/auth/entities/login.entity.js new file mode 100644 index 0000000..5c55095 --- /dev/null +++ b/dist/resources/auth/entities/login.entity.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Login = void 0; +class Login { +} +exports.Login = Login; +//# sourceMappingURL=login.entity.js.map \ No newline at end of file diff --git a/dist/resources/auth/entities/login.entity.js.map b/dist/resources/auth/entities/login.entity.js.map new file mode 100644 index 0000000..dfabd5f --- /dev/null +++ b/dist/resources/auth/entities/login.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"login.entity.js","sourceRoot":"","sources":["../../../../src/resources/auth/entities/login.entity.ts"],"names":[],"mappings":";;;AAAA,MAAa,KAAK;CAAG;AAArB,sBAAqB"} \ No newline at end of file diff --git a/dist/resources/auth/login.module.d.ts b/dist/resources/auth/login.module.d.ts new file mode 100644 index 0000000..9c382fc --- /dev/null +++ b/dist/resources/auth/login.module.d.ts @@ -0,0 +1,2 @@ +export declare class LoginModule { +} diff --git a/dist/resources/auth/login.module.js b/dist/resources/auth/login.module.js new file mode 100644 index 0000000..ce84a2e --- /dev/null +++ b/dist/resources/auth/login.module.js @@ -0,0 +1,23 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LoginModule = void 0; +const users_module_1 = require("../users/users.module"); +const common_1 = require("@nestjs/common"); +const auth_controller_1 = require("./auth.controller"); +let LoginModule = class LoginModule { +}; +LoginModule = __decorate([ + common_1.Module({ + controllers: [auth_controller_1.AuthController], + providers: [], + imports: [users_module_1.UsersModule] + }) +], LoginModule); +exports.LoginModule = LoginModule; +//# sourceMappingURL=login.module.js.map \ No newline at end of file diff --git a/dist/resources/auth/login.module.js.map b/dist/resources/auth/login.module.js.map new file mode 100644 index 0000000..412e3b7 --- /dev/null +++ b/dist/resources/auth/login.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"login.module.js","sourceRoot":"","sources":["../../../src/resources/auth/login.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,wDAAoD;AACpD,2CAAwC;AACxC,uDAAmD;AAOnD,IAAa,WAAW,GAAxB,MAAa,WAAW;CAAG,CAAA;AAAd,WAAW;IALvB,eAAM,CAAC;QACN,WAAW,EAAE,CAAC,gCAAc,CAAC;QAC7B,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,CAAC,0BAAW,CAAC;KACvB,CAAC;GACW,WAAW,CAAG;AAAd,kCAAW"} \ No newline at end of file diff --git a/dist/resources/boards/boards.controller.d.ts b/dist/resources/boards/boards.controller.d.ts new file mode 100644 index 0000000..e09099d --- /dev/null +++ b/dist/resources/boards/boards.controller.d.ts @@ -0,0 +1,11 @@ +import { Board } from './entities/board.entity'; +import { BoardsService } from './boards.service'; +export declare class BoardsController { + private readonly boardsService; + constructor(boardsService: BoardsService); + findAll(): Promise; + findOne(id: string): Promise; + create(body: Board): Promise; + update(id: string, body: Body): Promise; + remove(id: string): Promise; +} diff --git a/dist/resources/boards/boards.controller.js b/dist/resources/boards/boards.controller.js new file mode 100644 index 0000000..1b439a2 --- /dev/null +++ b/dist/resources/boards/boards.controller.js @@ -0,0 +1,103 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BoardsController = void 0; +const common_1 = require("@nestjs/common"); +const board_entity_1 = require("./entities/board.entity"); +const boards_service_1 = require("./boards.service"); +const auth_guard_1 = require("../auth/auth.guard"); +let BoardsController = class BoardsController { + constructor(boardsService) { + this.boardsService = boardsService; + } + async findAll() { + const boards = await this.boardsService.findAll(); + if (boards) { + return boards; + } + throw new common_1.HttpException('Boards not found', common_1.HttpStatus.NOT_FOUND); + } + async findOne(id) { + const board = await this.boardsService.findOne(id); + if (board) { + return board; + } + throw new common_1.HttpException('Board not found', common_1.HttpStatus.NOT_FOUND); + } + async create(body) { + const newBoard = await this.boardsService.create({ ...body }); + if (newBoard) { + return newBoard; + } + throw new common_1.HttpException('board not created', common_1.HttpStatus.BAD_REQUEST); + } + async update(id, body) { + const newBoard = await this.boardsService.update({ + ...body, + id + }); + if (newBoard) { + return newBoard; + } + throw new common_1.HttpException('board not found', common_1.HttpStatus.BAD_REQUEST); + } + async remove(id) { + const boardFinded = await this.boardsService.remove(id); + if (boardFinded) { + return 'The board has been deleted'; + } + throw new common_1.HttpException('board not found', common_1.HttpStatus.BAD_REQUEST); + } +}; +__decorate([ + common_1.Get(), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", Promise) +], BoardsController.prototype, "findAll", null); +__decorate([ + common_1.Get(':id'), + __param(0, common_1.Param('id')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String]), + __metadata("design:returntype", Promise) +], BoardsController.prototype, "findOne", null); +__decorate([ + common_1.Post(), + __param(0, common_1.Body()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [board_entity_1.Board]), + __metadata("design:returntype", Promise) +], BoardsController.prototype, "create", null); +__decorate([ + common_1.Put(':id'), + __param(0, common_1.Param('id')), __param(1, common_1.Body()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String, Object]), + __metadata("design:returntype", Promise) +], BoardsController.prototype, "update", null); +__decorate([ + common_1.Delete(':id'), + __param(0, common_1.Param('id')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String]), + __metadata("design:returntype", Promise) +], BoardsController.prototype, "remove", null); +BoardsController = __decorate([ + common_1.Controller('boards'), + common_1.UseGuards(auth_guard_1.AuthGuard), + __metadata("design:paramtypes", [boards_service_1.BoardsService]) +], BoardsController); +exports.BoardsController = BoardsController; +//# sourceMappingURL=boards.controller.js.map \ No newline at end of file diff --git a/dist/resources/boards/boards.controller.js.map b/dist/resources/boards/boards.controller.js.map new file mode 100644 index 0000000..1522c86 --- /dev/null +++ b/dist/resources/boards/boards.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"boards.controller.js","sourceRoot":"","sources":["../../../src/resources/boards/boards.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAWwB;AACxB,0DAAgD;AAChD,qDAAiD;AACjD,mDAA+C;AAI/C,IAAa,gBAAgB,GAA7B,MAAa,gBAAgB;IAC3B,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAG7D,KAAK,CAAC,OAAO;QACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAClD,IAAI,MAAM,EAAE;YACV,OAAO,MAAM,CAAC;SACf;QACD,MAAM,IAAI,sBAAa,CAAC,kBAAkB,EAAE,mBAAU,CAAC,SAAS,CAAC,CAAC;IACpE,CAAC;IAGD,KAAK,CAAC,OAAO,CAAc,EAAU;QACnC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnD,IAAI,KAAK,EAAE;YACT,OAAO,KAAK,CAAC;SACd;QACD,MAAM,IAAI,sBAAa,CAAC,iBAAiB,EAAE,mBAAU,CAAC,SAAS,CAAC,CAAC;IACnE,CAAC;IAGD,KAAK,CAAC,MAAM,CAAS,IAAW;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAC9D,IAAI,QAAQ,EAAE;YACZ,OAAO,QAAQ,CAAC;SACjB;QACD,MAAM,IAAI,sBAAa,CAAC,mBAAmB,EAAE,mBAAU,CAAC,WAAW,CAAC,CAAC;IACvE,CAAC;IAGD,KAAK,CAAC,MAAM,CAAc,EAAU,EAAU,IAAU;QACtD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAC/C,GAAG,IAAI;YACP,EAAE;SACH,CAAC,CAAC;QACH,IAAI,QAAQ,EAAE;YACZ,OAAO,QAAQ,CAAC;SACjB;QACD,MAAM,IAAI,sBAAa,CAAC,iBAAiB,EAAE,mBAAU,CAAC,WAAW,CAAC,CAAC;IACrE,CAAC;IAGD,KAAK,CAAC,MAAM,CAAc,EAAU;QAClC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxD,IAAI,WAAW,EAAE;YACf,OAAO,4BAA4B,CAAC;SACrC;QACD,MAAM,IAAI,sBAAa,CAAC,iBAAiB,EAAE,mBAAU,CAAC,WAAW,CAAC,CAAC;IACrE,CAAC;CACF,CAAA;AA9CC;IADC,YAAG,EAAE;;;;+CAOL;AAGD;IADC,YAAG,CAAC,KAAK,CAAC;IACI,WAAA,cAAK,CAAC,IAAI,CAAC,CAAA;;;;+CAMzB;AAGD;IADC,aAAI,EAAE;IACO,WAAA,aAAI,EAAE,CAAA;;qCAAO,oBAAK;;8CAM/B;AAGD;IADC,YAAG,CAAC,KAAK,CAAC;IACG,WAAA,cAAK,CAAC,IAAI,CAAC,CAAA,EAAc,WAAA,aAAI,EAAE,CAAA;;;;8CAS5C;AAGD;IADC,eAAM,CAAC,KAAK,CAAC;IACA,WAAA,cAAK,CAAC,IAAI,CAAC,CAAA;;;;8CAMxB;AAjDU,gBAAgB;IAF5B,mBAAU,CAAC,QAAQ,CAAC;IACpB,kBAAS,CAAC,sBAAS,CAAC;qCAEyB,8BAAa;GAD9C,gBAAgB,CAkD5B;AAlDY,4CAAgB"} \ No newline at end of file diff --git a/dist/resources/boards/boards.module.d.ts b/dist/resources/boards/boards.module.d.ts new file mode 100644 index 0000000..9ed12e9 --- /dev/null +++ b/dist/resources/boards/boards.module.d.ts @@ -0,0 +1,2 @@ +export declare class BoardsModule { +} diff --git a/dist/resources/boards/boards.module.js b/dist/resources/boards/boards.module.js new file mode 100644 index 0000000..7c9e4c3 --- /dev/null +++ b/dist/resources/boards/boards.module.js @@ -0,0 +1,25 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BoardsModule = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("@nestjs/typeorm"); +const boards_service_1 = require("./boards.service"); +const boards_controller_1 = require("./boards.controller"); +const board_entity_1 = require("./entities/board.entity"); +let BoardsModule = class BoardsModule { +}; +BoardsModule = __decorate([ + common_1.Module({ + imports: [typeorm_1.TypeOrmModule.forFeature([board_entity_1.Board])], + controllers: [boards_controller_1.BoardsController], + providers: [boards_service_1.BoardsService] + }) +], BoardsModule); +exports.BoardsModule = BoardsModule; +//# sourceMappingURL=boards.module.js.map \ No newline at end of file diff --git a/dist/resources/boards/boards.module.js.map b/dist/resources/boards/boards.module.js.map new file mode 100644 index 0000000..9b43751 --- /dev/null +++ b/dist/resources/boards/boards.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"boards.module.js","sourceRoot":"","sources":["../../../src/resources/boards/boards.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,6CAAgD;AAChD,qDAAiD;AACjD,2DAAuD;AACvD,0DAAgD;AAOhD,IAAa,YAAY,GAAzB,MAAa,YAAY;CAAG,CAAA;AAAf,YAAY;IALxB,eAAM,CAAC;QACN,OAAO,EAAE,CAAC,uBAAa,CAAC,UAAU,CAAC,CAAC,oBAAK,CAAC,CAAC,CAAC;QAC5C,WAAW,EAAE,CAAC,oCAAgB,CAAC;QAC/B,SAAS,EAAE,CAAC,8BAAa,CAAC;KAC3B,CAAC;GACW,YAAY,CAAG;AAAf,oCAAY"} \ No newline at end of file diff --git a/dist/resources/boards/boards.service.d.ts b/dist/resources/boards/boards.service.d.ts new file mode 100644 index 0000000..8d38023 --- /dev/null +++ b/dist/resources/boards/boards.service.d.ts @@ -0,0 +1,11 @@ +import { Repository } from 'typeorm'; +import { Board } from './entities/board.entity'; +export declare class BoardsService { + private readonly boardsRepository; + constructor(boardsRepository: Repository); + findAll(): Promise; + create(board: Board): Promise; + findOne(id: string): Promise; + update(obj: any): Promise; + remove(id: string): Promise; +} diff --git a/dist/resources/boards/boards.service.js b/dist/resources/boards/boards.service.js new file mode 100644 index 0000000..472d457 --- /dev/null +++ b/dist/resources/boards/boards.service.js @@ -0,0 +1,62 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BoardsService = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("typeorm"); +const typeorm_2 = require("@nestjs/typeorm"); +const board_entity_1 = require("./entities/board.entity"); +let BoardsService = class BoardsService { + constructor(boardsRepository) { + this.boardsRepository = boardsRepository; + } + async findAll() { + const boards = await this.boardsRepository.find({ where: {} }); + return boards.map(board_entity_1.Board.toResponse); + } + async create(board) { + const newUser = this.boardsRepository.create(board); + const createdBoard = await this.boardsRepository.save(newUser); + return board_entity_1.Board.toResponse(createdBoard); + } + async findOne(id) { + const board = await this.boardsRepository.findOne(id); + if (board) + return board_entity_1.Board.toResponse(board); + return null; + } + async update(obj) { + const findedTask = await this.boardsRepository.findOne(obj.id); + if (!findedTask) + return null; + const reducedData = { ...findedTask, ...obj }; + const updatedBoard = await this.boardsRepository.update(obj.id, reducedData); + if (updatedBoard.affected) + return board_entity_1.Board.toResponse(reducedData); + return null; + } + async remove(id) { + const deletionRes = await this.boardsRepository.delete(id); + if (deletionRes.affected) + return true; + return false; + } +}; +BoardsService = __decorate([ + common_1.Injectable(), + __param(0, typeorm_2.InjectRepository(board_entity_1.Board)), + __metadata("design:paramtypes", [typeorm_1.Repository]) +], BoardsService); +exports.BoardsService = BoardsService; +//# sourceMappingURL=boards.service.js.map \ No newline at end of file diff --git a/dist/resources/boards/boards.service.js.map b/dist/resources/boards/boards.service.js.map new file mode 100644 index 0000000..3c247f7 --- /dev/null +++ b/dist/resources/boards/boards.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"boards.service.js","sourceRoot":"","sources":["../../../src/resources/boards/boards.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,qCAAqC;AACrC,6CAAmD;AACnD,0DAAgD;AAGhD,IAAa,aAAa,GAA1B,MAAa,aAAa;IACxB,YAEmB,gBAAmC;QAAnC,qBAAgB,GAAhB,gBAAgB,CAAmB;IACnD,CAAC;IAEJ,KAAK,CAAC,OAAO;QACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/D,OAAO,MAAM,CAAC,GAAG,CAAC,oBAAK,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAY;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/D,OAAO,oBAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtD,IAAI,KAAK;YAAE,OAAO,oBAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAG;QACd,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAC7B,MAAM,WAAW,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,GAAG,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CACrD,GAAG,CAAC,EAAE,EACN,WAAW,CACZ,CAAC;QACF,IAAI,YAAY,CAAC,QAAQ;YAAE,OAAO,oBAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3D,IAAI,WAAW,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAA;AAxCY,aAAa;IADzB,mBAAU,EAAE;IAGR,WAAA,0BAAgB,CAAC,oBAAK,CAAC,CAAA;qCACW,oBAAU;GAHpC,aAAa,CAwCzB;AAxCY,sCAAa"} \ No newline at end of file diff --git a/dist/resources/boards/dto/create-board.dto.d.ts b/dist/resources/boards/dto/create-board.dto.d.ts new file mode 100644 index 0000000..aefefef --- /dev/null +++ b/dist/resources/boards/dto/create-board.dto.d.ts @@ -0,0 +1,2 @@ +export declare class CreateBoardDto { +} diff --git a/dist/resources/boards/dto/create-board.dto.js b/dist/resources/boards/dto/create-board.dto.js new file mode 100644 index 0000000..166dcfb --- /dev/null +++ b/dist/resources/boards/dto/create-board.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateBoardDto = void 0; +class CreateBoardDto { +} +exports.CreateBoardDto = CreateBoardDto; +//# sourceMappingURL=create-board.dto.js.map \ No newline at end of file diff --git a/dist/resources/boards/dto/create-board.dto.js.map b/dist/resources/boards/dto/create-board.dto.js.map new file mode 100644 index 0000000..51fc200 --- /dev/null +++ b/dist/resources/boards/dto/create-board.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-board.dto.js","sourceRoot":"","sources":["../../../../src/resources/boards/dto/create-board.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,cAAc;CAAG;AAA9B,wCAA8B"} \ No newline at end of file diff --git a/dist/resources/boards/dto/update-board.dto.d.ts b/dist/resources/boards/dto/update-board.dto.d.ts new file mode 100644 index 0000000..75e03e9 --- /dev/null +++ b/dist/resources/boards/dto/update-board.dto.d.ts @@ -0,0 +1,5 @@ +import { CreateBoardDto } from './create-board.dto'; +declare const UpdateBoardDto_base: import("@nestjs/mapped-types").MappedType>; +export declare class UpdateBoardDto extends UpdateBoardDto_base { +} +export {}; diff --git a/dist/resources/boards/dto/update-board.dto.js b/dist/resources/boards/dto/update-board.dto.js new file mode 100644 index 0000000..e3e1799 --- /dev/null +++ b/dist/resources/boards/dto/update-board.dto.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UpdateBoardDto = void 0; +const mapped_types_1 = require("@nestjs/mapped-types"); +const create_board_dto_1 = require("./create-board.dto"); +class UpdateBoardDto extends mapped_types_1.PartialType(create_board_dto_1.CreateBoardDto) { +} +exports.UpdateBoardDto = UpdateBoardDto; +//# sourceMappingURL=update-board.dto.js.map \ No newline at end of file diff --git a/dist/resources/boards/dto/update-board.dto.js.map b/dist/resources/boards/dto/update-board.dto.js.map new file mode 100644 index 0000000..75f7699 --- /dev/null +++ b/dist/resources/boards/dto/update-board.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"update-board.dto.js","sourceRoot":"","sources":["../../../../src/resources/boards/dto/update-board.dto.ts"],"names":[],"mappings":";;;AAAA,uDAAmD;AACnD,yDAAoD;AAEpD,MAAa,cAAe,SAAQ,0BAAW,CAAC,iCAAc,CAAC;CAAG;AAAlE,wCAAkE"} \ No newline at end of file diff --git a/dist/resources/boards/entities/board.entity.d.ts b/dist/resources/boards/entities/board.entity.d.ts new file mode 100644 index 0000000..eff7082 --- /dev/null +++ b/dist/resources/boards/entities/board.entity.d.ts @@ -0,0 +1,13 @@ +import { Task } from '../../tasks/entities/task.entity'; +interface IColumn { + title: string; + order: number; +} +export declare class Board { + id: string; + title: string; + columns: IColumn[]; + tasks: Task[]; + static toResponse(board: Board): Board; +} +export {}; diff --git a/dist/resources/boards/entities/board.entity.js b/dist/resources/boards/entities/board.entity.js new file mode 100644 index 0000000..68dc5d4 --- /dev/null +++ b/dist/resources/boards/entities/board.entity.js @@ -0,0 +1,51 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Board = void 0; +const typeorm_1 = require("typeorm"); +const task_entity_1 = require("../../tasks/entities/task.entity"); +let Board = class Board { + constructor() { + this.title = 'BOARD'; + } + static toResponse(board) { + const { id, title, columns, tasks } = board; + return { + id, + title, + columns, + tasks + }; + } +}; +__decorate([ + typeorm_1.PrimaryGeneratedColumn('uuid'), + __metadata("design:type", String) +], Board.prototype, "id", void 0); +__decorate([ + typeorm_1.Column('varchar', { length: 200 }), + __metadata("design:type", Object) +], Board.prototype, "title", void 0); +__decorate([ + typeorm_1.Column({ type: 'jsonb', nullable: true }), + __metadata("design:type", Array) +], Board.prototype, "columns", void 0); +__decorate([ + typeorm_1.OneToMany(() => task_entity_1.Task, (task) => task.boardId), + __metadata("design:type", Array) +], Board.prototype, "tasks", void 0); +Board = __decorate([ + typeorm_1.Entity({ + name: 'board' + }) +], Board); +exports.Board = Board; +//# sourceMappingURL=board.entity.js.map \ No newline at end of file diff --git a/dist/resources/boards/entities/board.entity.js.map b/dist/resources/boards/entities/board.entity.js.map new file mode 100644 index 0000000..bd4e558 --- /dev/null +++ b/dist/resources/boards/entities/board.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"board.entity.js","sourceRoot":"","sources":["../../../../src/resources/boards/entities/board.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAA4E;AAC5E,kEAAwD;AAUxD,IAAa,KAAK,GAAlB,MAAa,KAAK;IAAlB;QAKE,UAAK,GAAG,OAAO,CAAC;IAiBlB,CAAC;IATC,MAAM,CAAC,UAAU,CAAC,KAAY;QAC5B,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;QAC5C,OAAO;YACL,EAAE;YACF,KAAK;YACL,OAAO;YACP,KAAK;SACN,CAAC;IACJ,CAAC;CACF,CAAA;AApBC;IADC,gCAAsB,CAAC,MAAM,CAAC;;iCACpB;AAGX;IADC,gBAAM,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;oCACnB;AAGhB;IADC,gBAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sCACvB;AAGnB;IADC,mBAAS,CAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;;oCACtC;AAXH,KAAK;IAHjB,gBAAM,CAAC;QACN,IAAI,EAAE,OAAO;KACd,CAAC;GACW,KAAK,CAsBjB;AAtBY,sBAAK"} \ No newline at end of file diff --git a/dist/resources/tasks/dto/create-task.dto.d.ts b/dist/resources/tasks/dto/create-task.dto.d.ts new file mode 100644 index 0000000..6c2a693 --- /dev/null +++ b/dist/resources/tasks/dto/create-task.dto.d.ts @@ -0,0 +1,2 @@ +export declare class CreateTaskDto { +} diff --git a/dist/resources/tasks/dto/create-task.dto.js b/dist/resources/tasks/dto/create-task.dto.js new file mode 100644 index 0000000..c695df9 --- /dev/null +++ b/dist/resources/tasks/dto/create-task.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateTaskDto = void 0; +class CreateTaskDto { +} +exports.CreateTaskDto = CreateTaskDto; +//# sourceMappingURL=create-task.dto.js.map \ No newline at end of file diff --git a/dist/resources/tasks/dto/create-task.dto.js.map b/dist/resources/tasks/dto/create-task.dto.js.map new file mode 100644 index 0000000..59cd5e9 --- /dev/null +++ b/dist/resources/tasks/dto/create-task.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-task.dto.js","sourceRoot":"","sources":["../../../../src/resources/tasks/dto/create-task.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAa;CAAG;AAA7B,sCAA6B"} \ No newline at end of file diff --git a/dist/resources/tasks/dto/update-task.dto.d.ts b/dist/resources/tasks/dto/update-task.dto.d.ts new file mode 100644 index 0000000..0ac71a8 --- /dev/null +++ b/dist/resources/tasks/dto/update-task.dto.d.ts @@ -0,0 +1,5 @@ +import { CreateTaskDto } from './create-task.dto'; +declare const UpdateTaskDto_base: import("@nestjs/mapped-types").MappedType>; +export declare class UpdateTaskDto extends UpdateTaskDto_base { +} +export {}; diff --git a/dist/resources/tasks/dto/update-task.dto.js b/dist/resources/tasks/dto/update-task.dto.js new file mode 100644 index 0000000..3dfbbc1 --- /dev/null +++ b/dist/resources/tasks/dto/update-task.dto.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UpdateTaskDto = void 0; +const mapped_types_1 = require("@nestjs/mapped-types"); +const create_task_dto_1 = require("./create-task.dto"); +class UpdateTaskDto extends mapped_types_1.PartialType(create_task_dto_1.CreateTaskDto) { +} +exports.UpdateTaskDto = UpdateTaskDto; +//# sourceMappingURL=update-task.dto.js.map \ No newline at end of file diff --git a/dist/resources/tasks/dto/update-task.dto.js.map b/dist/resources/tasks/dto/update-task.dto.js.map new file mode 100644 index 0000000..2b22453 --- /dev/null +++ b/dist/resources/tasks/dto/update-task.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"update-task.dto.js","sourceRoot":"","sources":["../../../../src/resources/tasks/dto/update-task.dto.ts"],"names":[],"mappings":";;;AAAA,uDAAmD;AACnD,uDAAkD;AAElD,MAAa,aAAc,SAAQ,0BAAW,CAAC,+BAAa,CAAC;CAAG;AAAhE,sCAAgE"} \ No newline at end of file diff --git a/dist/resources/tasks/entities/task.entity.d.ts b/dist/resources/tasks/entities/task.entity.d.ts new file mode 100644 index 0000000..25748aa --- /dev/null +++ b/dist/resources/tasks/entities/task.entity.d.ts @@ -0,0 +1,10 @@ +export declare class Task { + id: string; + title: string; + order: number; + description: string; + columnId: string | null; + userId: string | null; + boardId: string; + static toResponse(task: Task): Task; +} diff --git a/dist/resources/tasks/entities/task.entity.js b/dist/resources/tasks/entities/task.entity.js new file mode 100644 index 0000000..1e29c0b --- /dev/null +++ b/dist/resources/tasks/entities/task.entity.js @@ -0,0 +1,66 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Task = void 0; +const typeorm_1 = require("typeorm"); +const board_entity_1 = require("../../boards/entities/board.entity"); +const user_entity_1 = require("../../users/entities/user.entity"); +let Task = class Task { + constructor() { + this.columnId = null; + } + static toResponse(task) { + return { + ...task + }; + } +}; +__decorate([ + typeorm_1.PrimaryGeneratedColumn('uuid'), + __metadata("design:type", String) +], Task.prototype, "id", void 0); +__decorate([ + typeorm_1.Column('varchar', { length: 200 }), + __metadata("design:type", String) +], Task.prototype, "title", void 0); +__decorate([ + typeorm_1.Column('integer'), + __metadata("design:type", Number) +], Task.prototype, "order", void 0); +__decorate([ + typeorm_1.Column('varchar', { length: 200 }), + __metadata("design:type", String) +], Task.prototype, "description", void 0); +__decorate([ + typeorm_1.Column('uuid', { nullable: true }), + __metadata("design:type", String) +], Task.prototype, "columnId", void 0); +__decorate([ + typeorm_1.ManyToOne(() => user_entity_1.User, user => user.tasks, { + onDelete: 'SET NULL', + nullable: true + }), + typeorm_1.Column('uuid', { name: 'userIdId', nullable: true }), + __metadata("design:type", String) +], Task.prototype, "userId", void 0); +__decorate([ + typeorm_1.ManyToOne(() => board_entity_1.Board, board => board.tasks, { + onDelete: 'CASCADE', + nullable: true + }), + typeorm_1.Column('uuid', { name: 'boardIdId', nullable: true }), + __metadata("design:type", String) +], Task.prototype, "boardId", void 0); +Task = __decorate([ + typeorm_1.Entity() +], Task); +exports.Task = Task; +//# sourceMappingURL=task.entity.js.map \ No newline at end of file diff --git a/dist/resources/tasks/entities/task.entity.js.map b/dist/resources/tasks/entities/task.entity.js.map new file mode 100644 index 0000000..42d3728 --- /dev/null +++ b/dist/resources/tasks/entities/task.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"task.entity.js","sourceRoot":"","sources":["../../../../src/resources/tasks/entities/task.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAA4E;AAC5E,qEAA2D;AAC3D,kEAAwD;AAGxD,IAAa,IAAI,GAAjB,MAAa,IAAI;IAAjB;QAcE,aAAQ,GAAkB,IAAI,CAAC;IAqBjC,CAAC;IALC,MAAM,CAAC,UAAU,CAAC,IAAU;QAC1B,OAAO;YACL,GAAG,IAAI;SACR,CAAC;IACJ,CAAC;CACF,CAAA;AAjCC;IADC,gCAAsB,CAAC,MAAM,CAAC;;gCACpB;AAGX;IADC,gBAAM,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;mCACrB;AAGd;IADC,gBAAM,CAAC,SAAS,CAAC;;mCACJ;AAGd;IADC,gBAAM,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;yCACf;AAGpB;IADC,gBAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sCACJ;AAO/B;IALC,mBAAS,CAAC,GAAG,EAAE,CAAC,kBAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE;QACzC,QAAQ,EAAE,UAAU;QACpB,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,gBAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;oCAC/B;AAOtB;IALC,mBAAS,CAAC,GAAG,EAAE,CAAC,oBAAK,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE;QAC5C,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,gBAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qCACtC;AA5BL,IAAI;IADhB,gBAAM,EAAE;GACI,IAAI,CAmChB;AAnCY,oBAAI"} \ No newline at end of file diff --git a/dist/resources/tasks/tasks.controller.d.ts b/dist/resources/tasks/tasks.controller.d.ts new file mode 100644 index 0000000..c2aad48 --- /dev/null +++ b/dist/resources/tasks/tasks.controller.d.ts @@ -0,0 +1,11 @@ +import { TasksService } from './tasks.service'; +import { Task } from './entities/task.entity'; +export declare class TasksController { + private readonly tasksService; + constructor(tasksService: TasksService); + findAll(boardId: string): Promise; + create(boardId: string, body: Task): Promise; + findOne(boardId: string, taskId: string): Promise; + update(taskId: string, body: Task): Promise; + remove(id: string): Promise; +} diff --git a/dist/resources/tasks/tasks.controller.js b/dist/resources/tasks/tasks.controller.js new file mode 100644 index 0000000..b7c431f --- /dev/null +++ b/dist/resources/tasks/tasks.controller.js @@ -0,0 +1,102 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TasksController = void 0; +const common_1 = require("@nestjs/common"); +const tasks_service_1 = require("./tasks.service"); +const task_entity_1 = require("./entities/task.entity"); +const auth_guard_1 = require("../auth/auth.guard"); +let TasksController = class TasksController { + constructor(tasksService) { + this.tasksService = tasksService; + } + async findAll(boardId) { + const tasks = await this.tasksService.findAll(boardId); + if (tasks.length) + return tasks; + throw new common_1.HttpException('Task not found', common_1.HttpStatus.NOT_FOUND); + } + async create(boardId, body) { + const newTask = await this.tasksService.create({ ...body, boardId }); + if (newTask) + return newTask; + throw new common_1.HttpException('Task not found', common_1.HttpStatus.NOT_FOUND); + } + async findOne(boardId, taskId) { + const task = await this.tasksService.findOne(boardId, taskId); + if (task) { + return task; + } + throw new common_1.HttpException('Task not found', common_1.HttpStatus.NOT_FOUND); + } + async update(taskId, body) { + const updatedTask = await this.tasksService.update({ + ...body, + id: taskId + }); + if (updatedTask) + return updatedTask; + throw new common_1.HttpException('Task not found', common_1.HttpStatus.NOT_FOUND); + } + async remove(id) { + const taskFinded = await this.tasksService.removeTask(id); + if (taskFinded) { + return 'The task has been deleted'; + } + throw new common_1.HttpException('Task not found', common_1.HttpStatus.NOT_FOUND); + } +}; +__decorate([ + common_1.Get(), + __param(0, common_1.Param('boardId')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String]), + __metadata("design:returntype", Promise) +], TasksController.prototype, "findAll", null); +__decorate([ + common_1.Post(), + __param(0, common_1.Param('boardId')), __param(1, common_1.Body()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String, task_entity_1.Task]), + __metadata("design:returntype", Promise) +], TasksController.prototype, "create", null); +__decorate([ + common_1.Get(':taskId'), + __param(0, common_1.Param('boardId')), + __param(1, common_1.Param('taskId')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String, String]), + __metadata("design:returntype", Promise) +], TasksController.prototype, "findOne", null); +__decorate([ + common_1.Put(':taskId'), + __param(0, common_1.Param('taskId')), __param(1, common_1.Body()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String, task_entity_1.Task]), + __metadata("design:returntype", Promise) +], TasksController.prototype, "update", null); +__decorate([ + common_1.Delete(':id'), + __param(0, common_1.Param('id')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String]), + __metadata("design:returntype", Promise) +], TasksController.prototype, "remove", null); +TasksController = __decorate([ + common_1.Controller('/boards/:boardId/tasks'), + common_1.UseGuards(auth_guard_1.AuthGuard), + __metadata("design:paramtypes", [tasks_service_1.TasksService]) +], TasksController); +exports.TasksController = TasksController; +//# sourceMappingURL=tasks.controller.js.map \ No newline at end of file diff --git a/dist/resources/tasks/tasks.controller.js.map b/dist/resources/tasks/tasks.controller.js.map new file mode 100644 index 0000000..77aa8c0 --- /dev/null +++ b/dist/resources/tasks/tasks.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tasks.controller.js","sourceRoot":"","sources":["../../../src/resources/tasks/tasks.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAWwB;AACxB,mDAA+C;AAC/C,wDAA8C;AAC9C,mDAA+C;AAI/C,IAAa,eAAe,GAA5B,MAAa,eAAe;IAC1B,YAA6B,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAG3D,KAAK,CAAC,OAAO,CAAmB,OAAe;QAC7C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC/B,MAAM,IAAI,sBAAa,CAAC,gBAAgB,EAAE,mBAAU,CAAC,SAAS,CAAC,CAAC;IAClE,CAAC;IAGD,KAAK,CAAC,MAAM,CAAmB,OAAe,EAAU,IAAU;QAChE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACrE,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAC5B,MAAM,IAAI,sBAAa,CAAC,gBAAgB,EAAE,mBAAU,CAAC,SAAS,CAAC,CAAC;IAClE,CAAC;IAGD,KAAK,CAAC,OAAO,CACO,OAAe,EAChB,MAAc;QAE/B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9D,IAAI,IAAI,EAAE;YACR,OAAO,IAAI,CAAC;SACb;QACD,MAAM,IAAI,sBAAa,CAAC,gBAAgB,EAAE,mBAAU,CAAC,SAAS,CAAC,CAAC;IAClE,CAAC;IAGD,KAAK,CAAC,MAAM,CAAkB,MAAc,EAAU,IAAU;QAC9D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YACjD,GAAG,IAAI;YACP,EAAE,EAAE,MAAM;SACX,CAAC,CAAC;QACH,IAAI,WAAW;YAAE,OAAO,WAAW,CAAC;QACpC,MAAM,IAAI,sBAAa,CAAC,gBAAgB,EAAE,mBAAU,CAAC,SAAS,CAAC,CAAC;IAClE,CAAC;IAGD,KAAK,CAAC,MAAM,CAAc,EAAU;QAClC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC1D,IAAI,UAAU,EAAE;YACd,OAAO,2BAA2B,CAAC;SACpC;QACD,MAAM,IAAI,sBAAa,CAAC,gBAAgB,EAAE,mBAAU,CAAC,SAAS,CAAC,CAAC;IAClE,CAAC;CACF,CAAA;AA3CC;IADC,YAAG,EAAE;IACS,WAAA,cAAK,CAAC,SAAS,CAAC,CAAA;;;;8CAI9B;AAGD;IADC,aAAI,EAAE;IACO,WAAA,cAAK,CAAC,SAAS,CAAC,CAAA,EAAmB,WAAA,aAAI,EAAE,CAAA;;6CAAO,kBAAI;;6CAIjE;AAGD;IADC,YAAG,CAAC,SAAS,CAAC;IAEZ,WAAA,cAAK,CAAC,SAAS,CAAC,CAAA;IAChB,WAAA,cAAK,CAAC,QAAQ,CAAC,CAAA;;;;8CAOjB;AAGD;IADC,YAAG,CAAC,SAAS,CAAC;IACD,WAAA,cAAK,CAAC,QAAQ,CAAC,CAAA,EAAkB,WAAA,aAAI,EAAE,CAAA;;6CAAO,kBAAI;;6CAO/D;AAGD;IADC,eAAM,CAAC,KAAK,CAAC;IACA,WAAA,cAAK,CAAC,IAAI,CAAC,CAAA;;;;6CAMxB;AA9CU,eAAe;IAF3B,mBAAU,CAAC,wBAAwB,CAAC;IACpC,kBAAS,CAAC,sBAAS,CAAC;qCAEwB,4BAAY;GAD5C,eAAe,CA+C3B;AA/CY,0CAAe"} \ No newline at end of file diff --git a/dist/resources/tasks/tasks.module.d.ts b/dist/resources/tasks/tasks.module.d.ts new file mode 100644 index 0000000..b977041 --- /dev/null +++ b/dist/resources/tasks/tasks.module.d.ts @@ -0,0 +1,2 @@ +export declare class TasksModule { +} diff --git a/dist/resources/tasks/tasks.module.js b/dist/resources/tasks/tasks.module.js new file mode 100644 index 0000000..e16d10d --- /dev/null +++ b/dist/resources/tasks/tasks.module.js @@ -0,0 +1,25 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TasksModule = void 0; +const common_1 = require("@nestjs/common"); +const tasks_service_1 = require("./tasks.service"); +const tasks_controller_1 = require("./tasks.controller"); +const typeorm_module_1 = require("@nestjs/typeorm/dist/typeorm.module"); +const task_entity_1 = require("./entities/task.entity"); +let TasksModule = class TasksModule { +}; +TasksModule = __decorate([ + common_1.Module({ + imports: [typeorm_module_1.TypeOrmModule.forFeature([task_entity_1.Task])], + controllers: [tasks_controller_1.TasksController], + providers: [tasks_service_1.TasksService] + }) +], TasksModule); +exports.TasksModule = TasksModule; +//# sourceMappingURL=tasks.module.js.map \ No newline at end of file diff --git a/dist/resources/tasks/tasks.module.js.map b/dist/resources/tasks/tasks.module.js.map new file mode 100644 index 0000000..9e4e49c --- /dev/null +++ b/dist/resources/tasks/tasks.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tasks.module.js","sourceRoot":"","sources":["../../../src/resources/tasks/tasks.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,mDAA+C;AAC/C,yDAAqD;AACrD,wEAAoE;AACpE,wDAA8C;AAO9C,IAAa,WAAW,GAAxB,MAAa,WAAW;CAAG,CAAA;AAAd,WAAW;IALvB,eAAM,CAAC;QACN,OAAO,EAAE,CAAC,8BAAa,CAAC,UAAU,CAAC,CAAC,kBAAI,CAAC,CAAC,CAAC;QAC3C,WAAW,EAAE,CAAC,kCAAe,CAAC;QAC9B,SAAS,EAAE,CAAC,4BAAY,CAAC;KAC1B,CAAC;GACW,WAAW,CAAG;AAAd,kCAAW"} \ No newline at end of file diff --git a/dist/resources/tasks/tasks.service.d.ts b/dist/resources/tasks/tasks.service.d.ts new file mode 100644 index 0000000..15f8c2f --- /dev/null +++ b/dist/resources/tasks/tasks.service.d.ts @@ -0,0 +1,11 @@ +import { Task } from './entities/task.entity'; +import { Repository } from 'typeorm'; +export declare class TasksService { + private readonly tasksRepository; + constructor(tasksRepository: Repository); + findAll(boardId: string): Promise; + create(task: Task): Promise; + findOne(boardId: string, id: string): Promise; + update(obj: Task): Promise; + removeTask(id: string): Promise; +} diff --git a/dist/resources/tasks/tasks.service.js b/dist/resources/tasks/tasks.service.js new file mode 100644 index 0000000..2265216 --- /dev/null +++ b/dist/resources/tasks/tasks.service.js @@ -0,0 +1,62 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TasksService = void 0; +const common_1 = require("@nestjs/common"); +const task_entity_1 = require("./entities/task.entity"); +const typeorm_1 = require("@nestjs/typeorm"); +const typeorm_2 = require("typeorm"); +let TasksService = class TasksService { + constructor(tasksRepository) { + this.tasksRepository = tasksRepository; + } + async findAll(boardId) { + const tasks = await this.tasksRepository.find({ boardId }); + return tasks.map(task_entity_1.Task.toResponse); + } + async create(task) { + const newTask = this.tasksRepository.create(task); + const createdTask = await this.tasksRepository.save(newTask); + return task_entity_1.Task.toResponse(createdTask); + } + async findOne(boardId, id) { + const findTask = await this.tasksRepository.findOne({ boardId, id }); + if (findTask) + return task_entity_1.Task.toResponse(findTask); + return null; + } + async update(obj) { + const findedTask = await this.tasksRepository.findOne(obj.id); + if (!findedTask) + return null; + const reducedData = { ...findedTask, ...obj }; + const updatedTask = await this.tasksRepository.update(obj.id, reducedData); + if (updatedTask.affected) + return task_entity_1.Task.toResponse(reducedData); + return null; + } + async removeTask(id) { + const deletionRes = await this.tasksRepository.delete(id); + if (deletionRes.affected) + return true; + return false; + } +}; +TasksService = __decorate([ + common_1.Injectable(), + __param(0, typeorm_1.InjectRepository(task_entity_1.Task)), + __metadata("design:paramtypes", [typeorm_2.Repository]) +], TasksService); +exports.TasksService = TasksService; +//# sourceMappingURL=tasks.service.js.map \ No newline at end of file diff --git a/dist/resources/tasks/tasks.service.js.map b/dist/resources/tasks/tasks.service.js.map new file mode 100644 index 0000000..1afc607 --- /dev/null +++ b/dist/resources/tasks/tasks.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tasks.service.js","sourceRoot":"","sources":["../../../src/resources/tasks/tasks.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,wDAA8C;AAC9C,6CAAmD;AACnD,qCAAqC;AAGrC,IAAa,YAAY,GAAzB,MAAa,YAAY;IACvB,YAEmB,eAAiC;QAAjC,oBAAe,GAAf,eAAe,CAAkB;IACjD,CAAC;IACJ,KAAK,CAAC,OAAO,CAAC,OAAe;QAC3B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC,GAAG,CAAC,kBAAI,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAU;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7D,OAAO,kBAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,EAAU;QACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACrE,IAAI,QAAQ;YAAE,OAAO,kBAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAS;QACpB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAC7B,MAAM,WAAW,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,GAAG,EAAE,CAAC;QAC9C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAC3E,IAAI,WAAW,CAAC,QAAQ;YAAE,OAAO,kBAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1D,IAAI,WAAW,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAA;AApCY,YAAY;IADxB,mBAAU,EAAE;IAGR,WAAA,0BAAgB,CAAC,kBAAI,CAAC,CAAA;qCACW,oBAAU;GAHnC,YAAY,CAoCxB;AApCY,oCAAY"} \ No newline at end of file diff --git a/dist/resources/users/dto/create-user.dto.d.ts b/dist/resources/users/dto/create-user.dto.d.ts new file mode 100644 index 0000000..088334f --- /dev/null +++ b/dist/resources/users/dto/create-user.dto.d.ts @@ -0,0 +1,2 @@ +export declare class CreateUserDto { +} diff --git a/dist/resources/users/dto/create-user.dto.js b/dist/resources/users/dto/create-user.dto.js new file mode 100644 index 0000000..ff24b4d --- /dev/null +++ b/dist/resources/users/dto/create-user.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateUserDto = void 0; +class CreateUserDto { +} +exports.CreateUserDto = CreateUserDto; +//# sourceMappingURL=create-user.dto.js.map \ No newline at end of file diff --git a/dist/resources/users/dto/create-user.dto.js.map b/dist/resources/users/dto/create-user.dto.js.map new file mode 100644 index 0000000..d77b422 --- /dev/null +++ b/dist/resources/users/dto/create-user.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-user.dto.js","sourceRoot":"","sources":["../../../../src/resources/users/dto/create-user.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAa;CAAG;AAA7B,sCAA6B"} \ No newline at end of file diff --git a/dist/resources/users/dto/login.dto.d.ts b/dist/resources/users/dto/login.dto.d.ts new file mode 100644 index 0000000..55793dd --- /dev/null +++ b/dist/resources/users/dto/login.dto.d.ts @@ -0,0 +1,4 @@ +export declare class LoginDto { + login: string; + password: string; +} diff --git a/dist/resources/users/dto/login.dto.js b/dist/resources/users/dto/login.dto.js new file mode 100644 index 0000000..ea602ab --- /dev/null +++ b/dist/resources/users/dto/login.dto.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LoginDto = void 0; +class LoginDto { +} +exports.LoginDto = LoginDto; +//# sourceMappingURL=login.dto.js.map \ No newline at end of file diff --git a/dist/resources/users/dto/login.dto.js.map b/dist/resources/users/dto/login.dto.js.map new file mode 100644 index 0000000..8166d5f --- /dev/null +++ b/dist/resources/users/dto/login.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"login.dto.js","sourceRoot":"","sources":["../../../../src/resources/users/dto/login.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,QAAQ;CAIpB;AAJD,4BAIC"} \ No newline at end of file diff --git a/dist/resources/users/dto/update-user.dto.d.ts b/dist/resources/users/dto/update-user.dto.d.ts new file mode 100644 index 0000000..fadf9fd --- /dev/null +++ b/dist/resources/users/dto/update-user.dto.d.ts @@ -0,0 +1,5 @@ +import { CreateUserDto } from './create-user.dto'; +declare const UpdateUserDto_base: import("@nestjs/mapped-types").MappedType>; +export declare class UpdateUserDto extends UpdateUserDto_base { +} +export {}; diff --git a/dist/resources/users/dto/update-user.dto.js b/dist/resources/users/dto/update-user.dto.js new file mode 100644 index 0000000..050c6f6 --- /dev/null +++ b/dist/resources/users/dto/update-user.dto.js @@ -0,0 +1,9 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UpdateUserDto = void 0; +const mapped_types_1 = require("@nestjs/mapped-types"); +const create_user_dto_1 = require("./create-user.dto"); +class UpdateUserDto extends mapped_types_1.PartialType(create_user_dto_1.CreateUserDto) { +} +exports.UpdateUserDto = UpdateUserDto; +//# sourceMappingURL=update-user.dto.js.map \ No newline at end of file diff --git a/dist/resources/users/dto/update-user.dto.js.map b/dist/resources/users/dto/update-user.dto.js.map new file mode 100644 index 0000000..4b18c6c --- /dev/null +++ b/dist/resources/users/dto/update-user.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"update-user.dto.js","sourceRoot":"","sources":["../../../../src/resources/users/dto/update-user.dto.ts"],"names":[],"mappings":";;;AAAA,uDAAmD;AACnD,uDAAkD;AAElD,MAAa,aAAc,SAAQ,0BAAW,CAAC,+BAAa,CAAC;CAAG;AAAhE,sCAAgE"} \ No newline at end of file diff --git a/dist/resources/users/entities/user.entity.d.ts b/dist/resources/users/entities/user.entity.d.ts new file mode 100644 index 0000000..b447423 --- /dev/null +++ b/dist/resources/users/entities/user.entity.d.ts @@ -0,0 +1,15 @@ +import { Task } from '../../tasks/entities/task.entity'; +export interface IUserToRes extends Omit { + token: string; + message: string; +} +export declare class User { + id: string; + name: string | null; + login: string; + password: string; + tasks: Task[]; + private static _toResponse; + static get toResponse(): (user: User) => IUserToRes; + static set toResponse(value: (user: User) => IUserToRes); +} diff --git a/dist/resources/users/entities/user.entity.js b/dist/resources/users/entities/user.entity.js new file mode 100644 index 0000000..59b882e --- /dev/null +++ b/dist/resources/users/entities/user.entity.js @@ -0,0 +1,67 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var User_1; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.User = void 0; +const typeorm_1 = require("typeorm"); +const task_entity_1 = require("../../tasks/entities/task.entity"); +const jsonwebtoken_1 = __importDefault(require("jsonwebtoken")); +let User = User_1 = class User { + static get toResponse() { + return User_1._toResponse; + } + static set toResponse(value) { + User_1._toResponse = value; + } +}; +User._toResponse = (user) => { + const { id, name, login, tasks } = user; + const token = jsonwebtoken_1.default.sign({ id: user.id }, process.env['JWT_SECRET_KEY'], { expiresIn: 60 * 60 * 24 }); + return { + id, + name, + login, + token, + tasks + }; +}; +__decorate([ + typeorm_1.PrimaryGeneratedColumn('uuid'), + __metadata("design:type", String) +], User.prototype, "id", void 0); +__decorate([ + typeorm_1.Column('varchar', { length: 40, nullable: true }), + __metadata("design:type", String) +], User.prototype, "name", void 0); +__decorate([ + typeorm_1.Column('varchar', { length: 40 }), + __metadata("design:type", String) +], User.prototype, "login", void 0); +__decorate([ + typeorm_1.Column('varchar', { length: 200 }), + __metadata("design:type", String) +], User.prototype, "password", void 0); +__decorate([ + typeorm_1.OneToMany(() => task_entity_1.Task, (task) => task.userId, { + cascade: true + }), + __metadata("design:type", Array) +], User.prototype, "tasks", void 0); +User = User_1 = __decorate([ + typeorm_1.Entity({ + name: 'user' + }) +], User); +exports.User = User; +//# sourceMappingURL=user.entity.js.map \ No newline at end of file diff --git a/dist/resources/users/entities/user.entity.js.map b/dist/resources/users/entities/user.entity.js.map new file mode 100644 index 0000000..64fb151 --- /dev/null +++ b/dist/resources/users/entities/user.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"user.entity.js","sourceRoot":"","sources":["../../../../src/resources/users/entities/user.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qCAA4E;AAC5E,kEAAwD;AACxD,gEAA+B;AAU/B,IAAa,IAAI,YAAjB,MAAa,IAAI;IAiCR,MAAM,KAAK,UAAU;QAC1B,OAAO,MAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACM,MAAM,KAAK,UAAU,CAAC,KAAK;QAChC,MAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;CACF,CAAA;AArBgB,gBAAW,GAAG,CAAC,IAAU,EAAc,EAAE;IACtD,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACxC,MAAM,KAAK,GAAG,sBAAG,CAAC,IAAI,CACpB,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EACf,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAW,EACvC,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAC5B,CAAC;IACF,OAAO;QACL,EAAE;QACF,IAAI;QACJ,KAAK;QACL,KAAK;QACL,KAAK;KACQ,CAAC;AAClB,CAAC,CAAC;AA9BF;IADC,gCAAsB,CAAC,MAAM,CAAC;;gCACpB;AAGX;IADC,gBAAM,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kCAC9B;AAGpB;IADC,gBAAM,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;mCACpB;AAGd;IADC,gBAAM,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;sCAClB;AAKjB;IAHC,mBAAS,CAAO,GAAG,EAAE,CAAC,kBAAI,EAAE,CAAC,IAAU,EAAiB,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE;QACvE,OAAO,EAAE,IAAI;KACd,CAAC;;mCACY;AAhBH,IAAI;IAHhB,gBAAM,CAAC;QACN,IAAI,EAAE,MAAM;KACb,CAAC;GACW,IAAI,CAuChB;AAvCY,oBAAI"} \ No newline at end of file diff --git a/dist/resources/users/users.controller.d.ts b/dist/resources/users/users.controller.d.ts new file mode 100644 index 0000000..e5dd2fb --- /dev/null +++ b/dist/resources/users/users.controller.d.ts @@ -0,0 +1,11 @@ +import { UsersService } from './users.service'; +import { IUserToRes, User } from './entities/user.entity'; +export declare class UsersController { + private readonly usersService; + constructor(usersService: UsersService); + create(body: User): Promise; + findAll(): Promise[] | void>; + findOne(id: string): Promise; + update(id: string, body: User): Promise; + remove(id: string): Promise; +} diff --git a/dist/resources/users/users.controller.js b/dist/resources/users/users.controller.js new file mode 100644 index 0000000..0f11f46 --- /dev/null +++ b/dist/resources/users/users.controller.js @@ -0,0 +1,99 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UsersController = void 0; +const common_1 = require("@nestjs/common"); +const users_service_1 = require("./users.service"); +const user_entity_1 = require("./entities/user.entity"); +const auth_guard_1 = require("../auth/auth.guard"); +let UsersController = class UsersController { + constructor(usersService) { + this.usersService = usersService; + } + async create(body) { + const newUser = await this.usersService.createUser(body); + if (newUser) { + return newUser; + } + } + async findAll() { + const users = await this.usersService.getAll(); + if (users) { + return users; + } + } + async findOne(id) { + const user = this.usersService.getUser(id); + if (user) { + return user; + } + } + async update(id, body) { + const newBoard = await this.usersService.updateUser({ + ...body, + id + }); + if (newBoard) { + return newBoard; + } + } + async remove(id) { + const userFinded = await this.usersService.deleteUser(id); + if (userFinded) { + return 'The board has been deleted'; + } + } +}; +__decorate([ + common_1.Post(), + __param(0, common_1.Body()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [user_entity_1.User]), + __metadata("design:returntype", Promise) +], UsersController.prototype, "create", null); +__decorate([ + common_1.Get(), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", Promise) +], UsersController.prototype, "findAll", null); +__decorate([ + common_1.Get(':id'), + __param(0, common_1.Param('id')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String]), + __metadata("design:returntype", Promise) +], UsersController.prototype, "findOne", null); +__decorate([ + common_1.Put(':id'), + __param(0, common_1.Param('id')), + __param(1, common_1.Body()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String, user_entity_1.User]), + __metadata("design:returntype", Promise) +], UsersController.prototype, "update", null); +__decorate([ + common_1.Delete(':id'), + __param(0, common_1.Param('id')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String]), + __metadata("design:returntype", Promise) +], UsersController.prototype, "remove", null); +UsersController = __decorate([ + common_1.Controller('users'), + common_1.UseGuards(auth_guard_1.AuthGuard), + __metadata("design:paramtypes", [users_service_1.UsersService]) +], UsersController); +exports.UsersController = UsersController; +//# sourceMappingURL=users.controller.js.map \ No newline at end of file diff --git a/dist/resources/users/users.controller.js.map b/dist/resources/users/users.controller.js.map new file mode 100644 index 0000000..23f46d9 --- /dev/null +++ b/dist/resources/users/users.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"users.controller.js","sourceRoot":"","sources":["../../../src/resources/users/users.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CASwB;AACxB,mDAA+C;AAC/C,wDAA0D;AAC1D,mDAA+C;AAI/C,IAAa,eAAe,GAA5B,MAAa,eAAe;IAC1B,YAA6B,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAG3D,KAAK,CAAC,MAAM,CAAS,IAAU;QAC7B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,OAAO,EAAE;YACX,OAAO,OAAO,CAAC;SAChB;IACH,CAAC;IAGD,KAAK,CAAC,OAAO;QACX,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAC/C,IAAI,KAAK,EAAE;YACT,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAGD,KAAK,CAAC,OAAO,CAAc,EAAU;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,IAAI,EAAE;YACR,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAGD,KAAK,CAAC,MAAM,CACG,EAAU,EACf,IAAU;QAElB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;YAClD,GAAG,IAAI;YACP,EAAE;SACH,CAAC,CAAC;QACH,IAAI,QAAQ,EAAE;YACZ,OAAO,QAAQ,CAAC;SACjB;IACH,CAAC;IAGD,KAAK,CAAC,MAAM,CAAc,EAAU;QAClC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC1D,IAAI,UAAU,EAAE;YACd,OAAO,4BAA4B,CAAC;SACrC;IACH,CAAC;CACF,CAAA;AA5CC;IADC,aAAI,EAAE;IACO,WAAA,aAAI,EAAE,CAAA;;qCAAO,kBAAI;;6CAK9B;AAGD;IADC,YAAG,EAAE;;;;8CAML;AAGD;IADC,YAAG,CAAC,KAAK,CAAC;IACI,WAAA,cAAK,CAAC,IAAI,CAAC,CAAA;;;;8CAKzB;AAGD;IADC,YAAG,CAAC,KAAK,CAAC;IAER,WAAA,cAAK,CAAC,IAAI,CAAC,CAAA;IACX,WAAA,aAAI,EAAE,CAAA;;6CAAO,kBAAI;;6CASnB;AAGD;IADC,eAAM,CAAC,KAAK,CAAC;IACA,WAAA,cAAK,CAAC,IAAI,CAAC,CAAA;;;;6CAKxB;AA/CU,eAAe;IAF3B,mBAAU,CAAC,OAAO,CAAC;IACnB,kBAAS,CAAC,sBAAS,CAAC;qCAEwB,4BAAY;GAD5C,eAAe,CAgD3B;AAhDY,0CAAe"} \ No newline at end of file diff --git a/dist/resources/users/users.module.d.ts b/dist/resources/users/users.module.d.ts new file mode 100644 index 0000000..2e3a7cf --- /dev/null +++ b/dist/resources/users/users.module.d.ts @@ -0,0 +1,2 @@ +export declare class UsersModule { +} diff --git a/dist/resources/users/users.module.js b/dist/resources/users/users.module.js new file mode 100644 index 0000000..76e41ef --- /dev/null +++ b/dist/resources/users/users.module.js @@ -0,0 +1,26 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UsersModule = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("@nestjs/typeorm"); +const users_service_1 = require("./users.service"); +const users_controller_1 = require("./users.controller"); +const user_entity_1 = require("./entities/user.entity"); +let UsersModule = class UsersModule { +}; +UsersModule = __decorate([ + common_1.Module({ + imports: [typeorm_1.TypeOrmModule.forFeature([user_entity_1.User])], + controllers: [users_controller_1.UsersController], + providers: [users_service_1.UsersService], + exports: [users_service_1.UsersService] + }) +], UsersModule); +exports.UsersModule = UsersModule; +//# sourceMappingURL=users.module.js.map \ No newline at end of file diff --git a/dist/resources/users/users.module.js.map b/dist/resources/users/users.module.js.map new file mode 100644 index 0000000..dcd7702 --- /dev/null +++ b/dist/resources/users/users.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"users.module.js","sourceRoot":"","sources":["../../../src/resources/users/users.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,6CAAgD;AAChD,mDAA+C;AAC/C,yDAAqD;AACrD,wDAA8C;AAQ9C,IAAa,WAAW,GAAxB,MAAa,WAAW;CAAG,CAAA;AAAd,WAAW;IANvB,eAAM,CAAC;QACN,OAAO,EAAE,CAAC,uBAAa,CAAC,UAAU,CAAC,CAAC,kBAAI,CAAC,CAAC,CAAC;QAC3C,WAAW,EAAE,CAAC,kCAAe,CAAC;QAC9B,SAAS,EAAE,CAAC,4BAAY,CAAC;QACzB,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,WAAW,CAAG;AAAd,kCAAW"} \ No newline at end of file diff --git a/dist/resources/users/users.service.d.ts b/dist/resources/users/users.service.d.ts new file mode 100644 index 0000000..81f862f --- /dev/null +++ b/dist/resources/users/users.service.d.ts @@ -0,0 +1,15 @@ +import { Repository } from 'typeorm'; +import { User } from './entities/user.entity'; +export declare class UsersService { + private readonly userRepository; + constructor(userRepository: Repository); + getAll(): Promise[]>; + createUser(user: User): Promise; + getUser(id: string): Promise; + updateUser(obj: Omit): Promise; + deleteUser(id: string): Promise; + auth({ login, password }: { + login: any; + password: any; + }): Promise; +} diff --git a/dist/resources/users/users.service.js b/dist/resources/users/users.service.js new file mode 100644 index 0000000..5953c1a --- /dev/null +++ b/dist/resources/users/users.service.js @@ -0,0 +1,91 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UsersService = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("@nestjs/typeorm"); +const typeorm_2 = require("typeorm"); +const user_entity_1 = require("./entities/user.entity"); +const bcrypt_1 = __importDefault(require("bcrypt")); +const jsonwebtoken_1 = __importDefault(require("jsonwebtoken")); +let UsersService = class UsersService { + constructor(userRepository) { + this.userRepository = userRepository; + } + async getAll() { + const userRepository = await this.userRepository.find({ where: {} }); + const toResponse = userRepository.map(user_entity_1.User.toResponse); + return toResponse; + } + async createUser(user) { + const newUser = this.userRepository.create({ + name: user.name, + login: user.login, + password: bcrypt_1.default.hashSync(user.password, 10) + }); + const updatedUser = await this.userRepository.save(newUser); + return user_entity_1.User.toResponse(updatedUser); + } + async getUser(id) { + const user = await this.userRepository.findOne(id); + if (user) + return user_entity_1.User.toResponse(user); + return null; + } + async updateUser(obj) { + const findedUser = await this.userRepository.findOne(obj.id); + if (!findedUser) + return null; + const reducedData = { ...findedUser, ...obj }; + const updatedUser = await this.userRepository.update(obj.id, reducedData); + if (updatedUser.affected) + return user_entity_1.User.toResponse(reducedData); + return null; + } + async deleteUser(id) { + const deletionRes = await this.userRepository.delete(id); + if (deletionRes.affected) + return true; + return false; + } + async auth({ login, password }) { + console.log(login); + const user = await this.userRepository.findOne({ login }); + return new Promise((resolve, reject) => { + if (user) { + bcrypt_1.default.compare(password, user.password, (_err, matches) => { + if (matches) { + const token = jsonwebtoken_1.default.sign({ id: user.id }, process.env.JWT_SECRET_KEY, { expiresIn: 60 * 60 * 24 }); + resolve({ + ...user_entity_1.User.toResponse(user), + token, + message: 'Successfully authenticated.' + }); + } + reject(); + }); + } + }); + } +}; +UsersService = __decorate([ + common_1.Injectable(), + __param(0, typeorm_1.InjectRepository(user_entity_1.User)), + __metadata("design:paramtypes", [typeorm_2.Repository]) +], UsersService); +exports.UsersService = UsersService; +//# sourceMappingURL=users.service.js.map \ No newline at end of file diff --git a/dist/resources/users/users.service.js.map b/dist/resources/users/users.service.js.map new file mode 100644 index 0000000..87472bd --- /dev/null +++ b/dist/resources/users/users.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"users.service.js","sourceRoot":"","sources":["../../../src/resources/users/users.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAmD;AACnD,qCAAqC;AACrC,wDAA8C;AAC9C,oDAA4B;AAC5B,gEAA+B;AAG/B,IAAa,YAAY,GAAzB,MAAa,YAAY;IACvB,YAEmB,cAAgC;QAAhC,mBAAc,GAAd,cAAc,CAAkB;IAChD,CAAC;IAEJ,KAAK,CAAC,MAAM;QACV,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,kBAAI,CAAC,UAAU,CAGlD,CAAC;QACJ,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAU;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;YACzC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,gBAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;SAC7C,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5D,OAAO,kBAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnD,IAAI,IAAI;YAAE,OAAO,kBAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAA8C;QAC7D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAC7B,MAAM,WAAW,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,GAAG,EAAE,CAAC;QAC9C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAC1E,IAAI,WAAW,CAAC,QAAQ;YAAE,OAAO,kBAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzD,IAAI,WAAW,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,IAAI,EAAE;gBACR,gBAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;oBACxD,IAAI,OAAO,EAAE;wBACX,MAAM,KAAK,GAAG,sBAAG,CAAC,IAAI,CACpB,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EACf,OAAO,CAAC,GAAG,CAAC,cAAwB,EACpC,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAC5B,CAAC;wBACF,OAAO,CAAC;4BACN,GAAG,kBAAI,CAAC,UAAU,CAAC,IAAI,CAAC;4BACxB,KAAK;4BACL,OAAO,EAAE,6BAA6B;yBACvC,CAAC,CAAC;qBACJ;oBACD,MAAM,EAAE,CAAC;gBACX,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AArEY,YAAY;IADxB,mBAAU,EAAE;IAGR,WAAA,0BAAgB,CAAC,kBAAI,CAAC,CAAA;qCACU,oBAAU;GAHlC,YAAY,CAqExB;AArEY,oCAAY"} \ No newline at end of file diff --git a/dist/shared/http-error.filter.d.ts b/dist/shared/http-error.filter.d.ts new file mode 100644 index 0000000..ba6879b --- /dev/null +++ b/dist/shared/http-error.filter.d.ts @@ -0,0 +1,4 @@ +import { ArgumentsHost, ExceptionFilter, HttpException } from '@nestjs/common'; +export declare class HttpErrorFilter implements ExceptionFilter { + catch(exception: HttpException, host: ArgumentsHost): void; +} diff --git a/dist/shared/http-error.filter.js b/dist/shared/http-error.filter.js new file mode 100644 index 0000000..6b1d466 --- /dev/null +++ b/dist/shared/http-error.filter.js @@ -0,0 +1,32 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.HttpErrorFilter = void 0; +const common_1 = require("@nestjs/common"); +let HttpErrorFilter = class HttpErrorFilter { + catch(exception, host) { + const ctx = host.switchToHttp(); + const request = ctx.getRequest(); + const responce = ctx.getResponse(); + const status = exception.getStatus(); + const errorResponse = { + code: status, + timestamp: new Date().toLocaleDateString(), + path: request.url, + method: request.method, + message: exception.message || null + }; + common_1.Logger.error(`${request.method} ${request.url}`, JSON.stringify(errorResponse), 'ExceprionFilter'); + responce.status(status).json(errorResponse); + } +}; +HttpErrorFilter = __decorate([ + common_1.Catch(common_1.HttpException) +], HttpErrorFilter); +exports.HttpErrorFilter = HttpErrorFilter; +//# sourceMappingURL=http-error.filter.js.map \ No newline at end of file diff --git a/dist/shared/http-error.filter.js.map b/dist/shared/http-error.filter.js.map new file mode 100644 index 0000000..49b617b --- /dev/null +++ b/dist/shared/http-error.filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"http-error.filter.js","sourceRoot":"","sources":["../../src/shared/http-error.filter.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAMwB;AAGxB,IAAa,eAAe,GAA5B,MAAa,eAAe;IAC1B,KAAK,CAAC,SAAwB,EAAE,IAAmB;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;QAErC,MAAM,aAAa,GAAG;YACpB,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE;YAC1C,IAAI,EAAE,OAAO,CAAC,GAAG;YACjB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,IAAI;SACnC,CAAC;QAEF,eAAM,CAAC,KAAK,CACV,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,EAClC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAC7B,iBAAiB,CAClB,CAAC;QACF,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC;CACF,CAAA;AAtBY,eAAe;IAD3B,cAAK,CAAC,sBAAa,CAAC;GACR,eAAe,CAsB3B;AAtBY,0CAAe"} \ No newline at end of file diff --git a/dist/shared/logging.interceptor.d.ts b/dist/shared/logging.interceptor.d.ts new file mode 100644 index 0000000..ba68998 --- /dev/null +++ b/dist/shared/logging.interceptor.d.ts @@ -0,0 +1,5 @@ +import { CallHandler, ExecutionContext, NestInterceptor } from '@nestjs/common'; +import { Observable } from 'rxjs'; +export declare class LoggingInterceptor implements NestInterceptor { + intercept(context: ExecutionContext, next: CallHandler): Observable; +} diff --git a/dist/shared/logging.interceptor.js b/dist/shared/logging.interceptor.js new file mode 100644 index 0000000..12bad60 --- /dev/null +++ b/dist/shared/logging.interceptor.js @@ -0,0 +1,28 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LoggingInterceptor = void 0; +const common_1 = require("@nestjs/common"); +const operators_1 = require("rxjs/operators"); +let LoggingInterceptor = class LoggingInterceptor { + intercept(context, next) { + const req = context.switchToHttp().getRequest(); + const method = req.method; + const url = req.url; + const now = Date.now(); + const body = req.body; + return next.handle().pipe(operators_1.tap(() => common_1.Logger.log(`${method} ${url} ${Date.now() - now}ms + ${JSON.stringify(body)} + `, context.getClass().name))); + } +}; +LoggingInterceptor = __decorate([ + common_1.Injectable() +], LoggingInterceptor); +exports.LoggingInterceptor = LoggingInterceptor; +//# sourceMappingURL=logging.interceptor.js.map \ No newline at end of file diff --git a/dist/shared/logging.interceptor.js.map b/dist/shared/logging.interceptor.js.map new file mode 100644 index 0000000..c591bd4 --- /dev/null +++ b/dist/shared/logging.interceptor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"logging.interceptor.js","sourceRoot":"","sources":["../../src/shared/logging.interceptor.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAMwB;AAExB,8CAAqC;AAGrC,IAAa,kBAAkB,GAA/B,MAAa,kBAAkB;IAC7B,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,eAAG,CAAC,GAAG,EAAE,CACP,eAAM,CAAC,GAAG,CACR,GAAG,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG;cAChC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aACrB,EACH,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CACxB,CACF,CACF,CAAC;IACJ,CAAC;CACF,CAAA;AAlBY,kBAAkB;IAD9B,mBAAU,EAAE;GACA,kBAAkB,CAkB9B;AAlBY,gDAAkB"} \ No newline at end of file diff --git a/dist/tsconfig.build.tsbuildinfo b/dist/tsconfig.build.tsbuildinfo new file mode 100644 index 0000000..4458144 --- /dev/null +++ b/dist/tsconfig.build.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.es2020.full.d.ts","../node_modules/reflect-metadata/index.d.ts","../node_modules/@nestjs/common/cache/cache.constants.d.ts","../node_modules/@nestjs/common/interfaces/abstract.interface.d.ts","../node_modules/@nestjs/common/interfaces/controllers/controller-metadata.interface.d.ts","../node_modules/@nestjs/common/interfaces/controllers/controller.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/arguments-host.interface.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/exception-filter.interface.d.ts","../node_modules/rxjs/dist/types/internal/subscription.d.ts","../node_modules/rxjs/dist/types/internal/subscriber.d.ts","../node_modules/rxjs/dist/types/internal/operator.d.ts","../node_modules/rxjs/dist/types/internal/observable.d.ts","../node_modules/rxjs/dist/types/internal/types.d.ts","../node_modules/rxjs/dist/types/internal/operators/audit.d.ts","../node_modules/rxjs/dist/types/internal/operators/audittime.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffer.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffercount.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffertime.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffertoggle.d.ts","../node_modules/rxjs/dist/types/internal/operators/bufferwhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/catcherror.d.ts","../node_modules/rxjs/dist/types/internal/operators/combinelatestall.d.ts","../node_modules/rxjs/dist/types/internal/operators/combineall.d.ts","../node_modules/rxjs/dist/types/internal/operators/combinelatest.d.ts","../node_modules/rxjs/dist/types/internal/operators/combinelatestwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/concat.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatall.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatmapto.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/connect.d.ts","../node_modules/rxjs/dist/types/internal/operators/count.d.ts","../node_modules/rxjs/dist/types/internal/operators/debounce.d.ts","../node_modules/rxjs/dist/types/internal/operators/debouncetime.d.ts","../node_modules/rxjs/dist/types/internal/operators/defaultifempty.d.ts","../node_modules/rxjs/dist/types/internal/operators/delay.d.ts","../node_modules/rxjs/dist/types/internal/operators/delaywhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/dematerialize.d.ts","../node_modules/rxjs/dist/types/internal/operators/distinct.d.ts","../node_modules/rxjs/dist/types/internal/operators/distinctuntilchanged.d.ts","../node_modules/rxjs/dist/types/internal/operators/distinctuntilkeychanged.d.ts","../node_modules/rxjs/dist/types/internal/operators/elementat.d.ts","../node_modules/rxjs/dist/types/internal/operators/endwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/every.d.ts","../node_modules/rxjs/dist/types/internal/operators/exhaustall.d.ts","../node_modules/rxjs/dist/types/internal/operators/exhaust.d.ts","../node_modules/rxjs/dist/types/internal/operators/exhaustmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/expand.d.ts","../node_modules/rxjs/dist/types/internal/operators/filter.d.ts","../node_modules/rxjs/dist/types/internal/operators/finalize.d.ts","../node_modules/rxjs/dist/types/internal/operators/find.d.ts","../node_modules/rxjs/dist/types/internal/operators/findindex.d.ts","../node_modules/rxjs/dist/types/internal/operators/first.d.ts","../node_modules/rxjs/dist/types/internal/subject.d.ts","../node_modules/rxjs/dist/types/internal/operators/groupby.d.ts","../node_modules/rxjs/dist/types/internal/operators/ignoreelements.d.ts","../node_modules/rxjs/dist/types/internal/operators/isempty.d.ts","../node_modules/rxjs/dist/types/internal/operators/last.d.ts","../node_modules/rxjs/dist/types/internal/operators/map.d.ts","../node_modules/rxjs/dist/types/internal/operators/mapto.d.ts","../node_modules/rxjs/dist/types/internal/notification.d.ts","../node_modules/rxjs/dist/types/internal/operators/materialize.d.ts","../node_modules/rxjs/dist/types/internal/operators/max.d.ts","../node_modules/rxjs/dist/types/internal/operators/merge.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergeall.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergemap.d.ts","../node_modules/rxjs/dist/types/internal/operators/flatmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergemapto.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergescan.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergewith.d.ts","../node_modules/rxjs/dist/types/internal/operators/min.d.ts","../node_modules/rxjs/dist/types/internal/observable/connectableobservable.d.ts","../node_modules/rxjs/dist/types/internal/operators/multicast.d.ts","../node_modules/rxjs/dist/types/internal/operators/observeon.d.ts","../node_modules/rxjs/dist/types/internal/operators/onerrorresumenext.d.ts","../node_modules/rxjs/dist/types/internal/operators/pairwise.d.ts","../node_modules/rxjs/dist/types/internal/operators/partition.d.ts","../node_modules/rxjs/dist/types/internal/operators/pluck.d.ts","../node_modules/rxjs/dist/types/internal/operators/publish.d.ts","../node_modules/rxjs/dist/types/internal/operators/publishbehavior.d.ts","../node_modules/rxjs/dist/types/internal/operators/publishlast.d.ts","../node_modules/rxjs/dist/types/internal/operators/publishreplay.d.ts","../node_modules/rxjs/dist/types/internal/operators/race.d.ts","../node_modules/rxjs/dist/types/internal/operators/racewith.d.ts","../node_modules/rxjs/dist/types/internal/operators/reduce.d.ts","../node_modules/rxjs/dist/types/internal/operators/repeat.d.ts","../node_modules/rxjs/dist/types/internal/operators/repeatwhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/retry.d.ts","../node_modules/rxjs/dist/types/internal/operators/retrywhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/refcount.d.ts","../node_modules/rxjs/dist/types/internal/operators/sample.d.ts","../node_modules/rxjs/dist/types/internal/operators/sampletime.d.ts","../node_modules/rxjs/dist/types/internal/operators/scan.d.ts","../node_modules/rxjs/dist/types/internal/operators/sequenceequal.d.ts","../node_modules/rxjs/dist/types/internal/operators/share.d.ts","../node_modules/rxjs/dist/types/internal/operators/sharereplay.d.ts","../node_modules/rxjs/dist/types/internal/operators/single.d.ts","../node_modules/rxjs/dist/types/internal/operators/skip.d.ts","../node_modules/rxjs/dist/types/internal/operators/skiplast.d.ts","../node_modules/rxjs/dist/types/internal/operators/skipuntil.d.ts","../node_modules/rxjs/dist/types/internal/operators/skipwhile.d.ts","../node_modules/rxjs/dist/types/internal/operators/startwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/subscribeon.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchall.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchmapto.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchscan.d.ts","../node_modules/rxjs/dist/types/internal/operators/take.d.ts","../node_modules/rxjs/dist/types/internal/operators/takelast.d.ts","../node_modules/rxjs/dist/types/internal/operators/takeuntil.d.ts","../node_modules/rxjs/dist/types/internal/operators/takewhile.d.ts","../node_modules/rxjs/dist/types/internal/operators/tap.d.ts","../node_modules/rxjs/dist/types/internal/operators/throttle.d.ts","../node_modules/rxjs/dist/types/internal/operators/throttletime.d.ts","../node_modules/rxjs/dist/types/internal/operators/throwifempty.d.ts","../node_modules/rxjs/dist/types/internal/operators/timeinterval.d.ts","../node_modules/rxjs/dist/types/internal/operators/timeout.d.ts","../node_modules/rxjs/dist/types/internal/operators/timeoutwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/timestamp.d.ts","../node_modules/rxjs/dist/types/internal/operators/toarray.d.ts","../node_modules/rxjs/dist/types/internal/operators/window.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowcount.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowtime.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowtoggle.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowwhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/withlatestfrom.d.ts","../node_modules/rxjs/dist/types/internal/operators/zip.d.ts","../node_modules/rxjs/dist/types/internal/operators/zipall.d.ts","../node_modules/rxjs/dist/types/internal/operators/zipwith.d.ts","../node_modules/rxjs/dist/types/operators/index.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/action.d.ts","../node_modules/rxjs/dist/types/internal/scheduler.d.ts","../node_modules/rxjs/dist/types/internal/testing/testmessage.d.ts","../node_modules/rxjs/dist/types/internal/testing/subscriptionlog.d.ts","../node_modules/rxjs/dist/types/internal/testing/subscriptionloggable.d.ts","../node_modules/rxjs/dist/types/internal/testing/coldobservable.d.ts","../node_modules/rxjs/dist/types/internal/testing/hotobservable.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asyncscheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asyncaction.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/virtualtimescheduler.d.ts","../node_modules/rxjs/dist/types/internal/testing/testscheduler.d.ts","../node_modules/rxjs/dist/types/testing/index.d.ts","../node_modules/rxjs/dist/types/internal/symbol/observable.d.ts","../node_modules/rxjs/dist/types/internal/observable/dom/animationframes.d.ts","../node_modules/rxjs/dist/types/internal/behaviorsubject.d.ts","../node_modules/rxjs/dist/types/internal/replaysubject.d.ts","../node_modules/rxjs/dist/types/internal/asyncsubject.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asapscheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asap.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/async.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/queuescheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/queue.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/animationframescheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/animationframe.d.ts","../node_modules/rxjs/dist/types/internal/util/identity.d.ts","../node_modules/rxjs/dist/types/internal/util/pipe.d.ts","../node_modules/rxjs/dist/types/internal/util/noop.d.ts","../node_modules/rxjs/dist/types/internal/util/isobservable.d.ts","../node_modules/rxjs/dist/types/internal/lastvaluefrom.d.ts","../node_modules/rxjs/dist/types/internal/firstvaluefrom.d.ts","../node_modules/rxjs/dist/types/internal/util/argumentoutofrangeerror.d.ts","../node_modules/rxjs/dist/types/internal/util/emptyerror.d.ts","../node_modules/rxjs/dist/types/internal/util/notfounderror.d.ts","../node_modules/rxjs/dist/types/internal/util/objectunsubscribederror.d.ts","../node_modules/rxjs/dist/types/internal/util/sequenceerror.d.ts","../node_modules/rxjs/dist/types/internal/util/unsubscriptionerror.d.ts","../node_modules/rxjs/dist/types/internal/observable/bindcallback.d.ts","../node_modules/rxjs/dist/types/internal/observable/bindnodecallback.d.ts","../node_modules/rxjs/dist/types/internal/anycatcher.d.ts","../node_modules/rxjs/dist/types/internal/observable/combinelatest.d.ts","../node_modules/rxjs/dist/types/internal/observable/concat.d.ts","../node_modules/rxjs/dist/types/internal/observable/connectable.d.ts","../node_modules/rxjs/dist/types/internal/observable/defer.d.ts","../node_modules/rxjs/dist/types/internal/observable/empty.d.ts","../node_modules/rxjs/dist/types/internal/observable/forkjoin.d.ts","../node_modules/rxjs/dist/types/internal/observable/from.d.ts","../node_modules/rxjs/dist/types/internal/observable/fromevent.d.ts","../node_modules/rxjs/dist/types/internal/observable/fromeventpattern.d.ts","../node_modules/rxjs/dist/types/internal/observable/generate.d.ts","../node_modules/rxjs/dist/types/internal/observable/iif.d.ts","../node_modules/rxjs/dist/types/internal/observable/interval.d.ts","../node_modules/rxjs/dist/types/internal/observable/merge.d.ts","../node_modules/rxjs/dist/types/internal/observable/never.d.ts","../node_modules/rxjs/dist/types/internal/observable/of.d.ts","../node_modules/rxjs/dist/types/internal/observable/onerrorresumenext.d.ts","../node_modules/rxjs/dist/types/internal/observable/pairs.d.ts","../node_modules/rxjs/dist/types/internal/observable/partition.d.ts","../node_modules/rxjs/dist/types/internal/observable/race.d.ts","../node_modules/rxjs/dist/types/internal/observable/range.d.ts","../node_modules/rxjs/dist/types/internal/observable/throwerror.d.ts","../node_modules/rxjs/dist/types/internal/observable/timer.d.ts","../node_modules/rxjs/dist/types/internal/observable/using.d.ts","../node_modules/rxjs/dist/types/internal/observable/zip.d.ts","../node_modules/rxjs/dist/types/internal/scheduled/scheduled.d.ts","../node_modules/rxjs/dist/types/internal/config.d.ts","../node_modules/rxjs/dist/types/index.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter.interface.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/ws-exception-filter.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/validation-error.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/execution-context.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/can-activate.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/custom-route-param-factory.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/nest-interceptor.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/paramtype.interface.d.ts","../node_modules/@nestjs/common/interfaces/type.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/pipe-transform.interface.d.ts","../node_modules/@nestjs/common/enums/request-method.enum.d.ts","../node_modules/@nestjs/common/enums/http-status.enum.d.ts","../node_modules/@nestjs/common/enums/shutdown-signal.enum.d.ts","../node_modules/@nestjs/common/enums/version-type.enum.d.ts","../node_modules/@nestjs/common/enums/index.d.ts","../node_modules/@nestjs/common/interfaces/middleware/middleware-configuration.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/middleware-consumer.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/middleware-config-proxy.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/nest-middleware.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/index.d.ts","../node_modules/@nestjs/common/interfaces/global-prefix-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/before-application-shutdown.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-application-bootstrap.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-application-shutdown.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-destroy.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-init.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/index.d.ts","../node_modules/@nestjs/common/interfaces/external/cors-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/https-options.interface.d.ts","../node_modules/@nestjs/common/services/logger.service.d.ts","../node_modules/@nestjs/common/interfaces/nest-application-context-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/nest-application-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/http-server.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/message-event.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/index.d.ts","../node_modules/@nestjs/common/interfaces/injectable.interface.d.ts","../node_modules/@nestjs/common/interfaces/microservices/nest-hybrid-application-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/forward-reference.interface.d.ts","../node_modules/@nestjs/common/interfaces/scope-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/provider.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/module-metadata.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/dynamic-module.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/introspection-result.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/nest-module.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/index.d.ts","../node_modules/@nestjs/common/interfaces/nest-application-context.interface.d.ts","../node_modules/@nestjs/common/interfaces/version-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/websockets/web-socket-adapter.interface.d.ts","../node_modules/@nestjs/common/interfaces/nest-application.interface.d.ts","../node_modules/@nestjs/common/interfaces/nest-microservice.interface.d.ts","../node_modules/@nestjs/common/interfaces/index.d.ts","../node_modules/@nestjs/common/cache/interfaces/cache-manager.interface.d.ts","../node_modules/@nestjs/common/cache/interfaces/cache-module.interface.d.ts","../node_modules/@nestjs/common/cache/cache.module.d.ts","../node_modules/@nestjs/common/decorators/core/bind.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/catch.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/controller.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/dependencies.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/exception-filters.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/inject.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/injectable.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/optional.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/set-metadata.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/use-guards.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/use-interceptors.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/use-pipes.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/apply-decorators.d.ts","../node_modules/@nestjs/common/decorators/core/version.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/index.d.ts","../node_modules/@nestjs/common/decorators/modules/global.decorator.d.ts","../node_modules/@nestjs/common/decorators/modules/module.decorator.d.ts","../node_modules/@nestjs/common/decorators/modules/index.d.ts","../node_modules/@nestjs/common/decorators/http/request-mapping.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/route-params.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/http-code.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/create-route-param-metadata.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/render.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/header.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/redirect.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/sse.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/index.d.ts","../node_modules/@nestjs/common/decorators/index.d.ts","../node_modules/@nestjs/common/cache/decorators/cache-key.decorator.d.ts","../node_modules/@nestjs/common/cache/decorators/cache-ttl.decorator.d.ts","../node_modules/@nestjs/common/cache/decorators/index.d.ts","../node_modules/@nestjs/common/cache/interceptors/cache.interceptor.d.ts","../node_modules/@nestjs/common/cache/interceptors/index.d.ts","../node_modules/@nestjs/common/cache/interfaces/index.d.ts","../node_modules/@nestjs/common/cache/index.d.ts","../node_modules/@nestjs/common/exceptions/http.exception.d.ts","../node_modules/@nestjs/common/exceptions/bad-request.exception.d.ts","../node_modules/@nestjs/common/exceptions/unauthorized.exception.d.ts","../node_modules/@nestjs/common/exceptions/method-not-allowed.exception.d.ts","../node_modules/@nestjs/common/exceptions/not-found.exception.d.ts","../node_modules/@nestjs/common/exceptions/forbidden.exception.d.ts","../node_modules/@nestjs/common/exceptions/not-acceptable.exception.d.ts","../node_modules/@nestjs/common/exceptions/request-timeout.exception.d.ts","../node_modules/@nestjs/common/exceptions/conflict.exception.d.ts","../node_modules/@nestjs/common/exceptions/gone.exception.d.ts","../node_modules/@nestjs/common/exceptions/payload-too-large.exception.d.ts","../node_modules/@nestjs/common/exceptions/unsupported-media-type.exception.d.ts","../node_modules/@nestjs/common/exceptions/unprocessable-entity.exception.d.ts","../node_modules/@nestjs/common/exceptions/internal-server-error.exception.d.ts","../node_modules/@nestjs/common/exceptions/not-implemented.exception.d.ts","../node_modules/@nestjs/common/exceptions/http-version-not-supported.exception.d.ts","../node_modules/@nestjs/common/exceptions/bad-gateway.exception.d.ts","../node_modules/@nestjs/common/exceptions/service-unavailable.exception.d.ts","../node_modules/@nestjs/common/exceptions/gateway-timeout.exception.d.ts","../node_modules/@nestjs/common/exceptions/im-a-teapot.exception.d.ts","../node_modules/@nestjs/common/exceptions/precondition-failed.exception.d.ts","../node_modules/@nestjs/common/exceptions/misdirected.exception.d.ts","../node_modules/@nestjs/common/exceptions/index.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostic_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/util/types.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/ts3.6/base.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/base.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@nestjs/common/file-stream/streamable-file.d.ts","../node_modules/@nestjs/common/file-stream/index.d.ts","../node_modules/axios/index.d.ts","../node_modules/@nestjs/common/http/interfaces/http-module.interface.d.ts","../node_modules/@nestjs/common/http/interfaces/index.d.ts","../node_modules/@nestjs/common/http/http.module.d.ts","../node_modules/@nestjs/common/http/http.service.d.ts","../node_modules/@nestjs/common/http/index.d.ts","../node_modules/@nestjs/common/pipes/default-value.pipe.d.ts","../node_modules/@nestjs/common/interfaces/external/class-transform-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/validator-options.interface.d.ts","../node_modules/@nestjs/common/utils/http-error-by-code.util.d.ts","../node_modules/@nestjs/common/pipes/validation.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-array.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-bool.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-int.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-float.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-enum.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-uuid.pipe.d.ts","../node_modules/@nestjs/common/pipes/index.d.ts","../node_modules/@nestjs/common/serializer/class-serializer.interceptor.d.ts","../node_modules/@nestjs/common/serializer/decorators/serialize-options.decorator.d.ts","../node_modules/@nestjs/common/serializer/decorators/index.d.ts","../node_modules/@nestjs/common/serializer/index.d.ts","../node_modules/@nestjs/common/services/console-logger.service.d.ts","../node_modules/@nestjs/common/services/index.d.ts","../node_modules/@nestjs/common/utils/forward-ref.util.d.ts","../node_modules/@nestjs/common/utils/index.d.ts","../node_modules/@nestjs/common/index.d.ts","../src/app.service.ts","../src/app.controller.ts","../src/shared/http-error.filter.ts","../node_modules/@nestjs/config/dist/types/config-object.type.d.ts","../node_modules/@nestjs/config/dist/types/config.type.d.ts","../node_modules/@nestjs/config/dist/types/no-infer.type.d.ts","../node_modules/@nestjs/config/dist/types/path-value.type.d.ts","../node_modules/@nestjs/config/dist/types/index.d.ts","../node_modules/@nestjs/config/dist/interfaces/config-factory.interface.d.ts","../node_modules/@nestjs/config/dist/interfaces/config-module-options.interface.d.ts","../node_modules/@nestjs/config/dist/interfaces/index.d.ts","../node_modules/@nestjs/config/dist/config.module.d.ts","../node_modules/@nestjs/config/dist/config.service.d.ts","../node_modules/@nestjs/config/dist/utils/register-as.util.d.ts","../node_modules/@nestjs/config/dist/utils/get-config-token.util.d.ts","../node_modules/@nestjs/config/dist/utils/index.d.ts","../node_modules/@nestjs/config/dist/index.d.ts","../node_modules/@nestjs/config/index.d.ts","../node_modules/typeorm/schema-builder/options/tablecolumnoptions.d.ts","../node_modules/typeorm/schema-builder/table/tablecolumn.d.ts","../node_modules/typeorm/common/objectliteral.d.ts","../node_modules/typeorm/find-options/orderbycondition.d.ts","../node_modules/typeorm/metadata/types/tabletypes.d.ts","../node_modules/typeorm/metadata-args/tablemetadataargs.d.ts","../node_modules/typeorm/metadata/types/treetypes.d.ts","../node_modules/typeorm/driver/types/columntypes.d.ts","../node_modules/typeorm/metadata/types/relationtypes.d.ts","../node_modules/typeorm/naming-strategy/namingstrategyinterface.d.ts","../node_modules/typeorm/metadata/types/deferrabletype.d.ts","../node_modules/typeorm/metadata/types/ondeletetype.d.ts","../node_modules/typeorm/metadata/types/onupdatetype.d.ts","../node_modules/typeorm/metadata/foreignkeymetadata.d.ts","../node_modules/typeorm/decorator/options/relationoptions.d.ts","../node_modules/typeorm/metadata/types/propertytypeinfunction.d.ts","../node_modules/typeorm/metadata/types/relationtypeinfunction.d.ts","../node_modules/typeorm/metadata-args/relationmetadataargs.d.ts","../node_modules/typeorm/metadata/relationmetadata.d.ts","../node_modules/typeorm/metadata-args/embeddedmetadataargs.d.ts","../node_modules/typeorm/query-builder/alias.d.ts","../node_modules/typeorm/query-builder/joinattribute.d.ts","../node_modules/typeorm/query-builder/relation-id/relationidattribute.d.ts","../node_modules/typeorm/query-builder/relation-count/relationcountattribute.d.ts","../node_modules/typeorm/query-builder/selectquery.d.ts","../node_modules/typeorm/query-builder/selectquerybuilderoption.d.ts","../node_modules/typeorm/query-builder/queryexpressionmap.d.ts","../node_modules/typeorm/query-builder/brackets.d.ts","../node_modules/typeorm/query-builder/whereexpression.d.ts","../node_modules/typeorm/query-builder/result/updateresult.d.ts","../node_modules/typeorm/query-builder/querypartialentity.d.ts","../node_modules/typeorm/query-builder/updatequerybuilder.d.ts","../node_modules/typeorm/common/objecttype.d.ts","../node_modules/typeorm/common/entitytarget.d.ts","../node_modules/typeorm/query-builder/result/deleteresult.d.ts","../node_modules/typeorm/query-builder/deletequerybuilder.d.ts","../node_modules/typeorm/query-builder/softdeletequerybuilder.d.ts","../node_modules/typeorm/query-builder/result/insertresult.d.ts","../node_modules/typeorm/query-builder/insertquerybuilder.d.ts","../node_modules/typeorm/query-builder/relationquerybuilder.d.ts","../node_modules/typeorm/find-options/findoperatortype.d.ts","../node_modules/typeorm/find-options/findoperator.d.ts","../node_modules/typeorm/query-builder/querybuilder.d.ts","../node_modules/typeorm/platform/platformtools.d.ts","../node_modules/typeorm/query-builder/selectquerybuilder.d.ts","../node_modules/typeorm/metadata-args/relationidmetadataargs.d.ts","../node_modules/typeorm/metadata/relationidmetadata.d.ts","../node_modules/typeorm/metadata-args/relationcountmetadataargs.d.ts","../node_modules/typeorm/metadata/relationcountmetadata.d.ts","../node_modules/typeorm/metadata/types/eventlistenertypes.d.ts","../node_modules/typeorm/metadata-args/entitylistenermetadataargs.d.ts","../node_modules/typeorm/metadata/entitylistenermetadata.d.ts","../node_modules/typeorm/metadata-args/uniquemetadataargs.d.ts","../node_modules/typeorm/metadata/uniquemetadata.d.ts","../node_modules/typeorm/metadata/embeddedmetadata.d.ts","../node_modules/typeorm/decorator/options/valuetransformer.d.ts","../node_modules/typeorm/decorator/options/columncommonoptions.d.ts","../node_modules/typeorm/decorator/options/columnoptions.d.ts","../node_modules/typeorm/metadata-args/types/columnmode.d.ts","../node_modules/typeorm/metadata-args/columnmetadataargs.d.ts","../node_modules/typeorm/metadata/columnmetadata.d.ts","../node_modules/typeorm/metadata/types/closuretreeoptions.d.ts","../node_modules/typeorm/metadata-args/treemetadataargs.d.ts","../node_modules/typeorm/metadata-args/checkmetadataargs.d.ts","../node_modules/typeorm/metadata/checkmetadata.d.ts","../node_modules/typeorm/metadata-args/exclusionmetadataargs.d.ts","../node_modules/typeorm/metadata/exclusionmetadata.d.ts","../node_modules/typeorm/metadata/entitymetadata.d.ts","../node_modules/typeorm/metadata-args/indexmetadataargs.d.ts","../node_modules/typeorm/metadata/indexmetadata.d.ts","../node_modules/typeorm/schema-builder/options/tableindexoptions.d.ts","../node_modules/typeorm/schema-builder/table/tableindex.d.ts","../node_modules/typeorm/schema-builder/options/tableforeignkeyoptions.d.ts","../node_modules/typeorm/schema-builder/table/tableforeignkey.d.ts","../node_modules/typeorm/schema-builder/options/tableuniqueoptions.d.ts","../node_modules/typeorm/schema-builder/options/tablecheckoptions.d.ts","../node_modules/typeorm/schema-builder/options/tableexclusionoptions.d.ts","../node_modules/typeorm/schema-builder/options/tableoptions.d.ts","../node_modules/typeorm/schema-builder/table/tableunique.d.ts","../node_modules/typeorm/schema-builder/table/tablecheck.d.ts","../node_modules/typeorm/schema-builder/table/tableexclusion.d.ts","../node_modules/typeorm/schema-builder/table/table.d.ts","../node_modules/typeorm/common/entityfieldsnames.d.ts","../node_modules/typeorm/find-options/joinoptions.d.ts","../node_modules/typeorm/find-options/findconditions.d.ts","../node_modules/typeorm/find-options/findoneoptions.d.ts","../node_modules/typeorm/find-options/findmanyoptions.d.ts","../node_modules/typeorm/common/deeppartial.d.ts","../node_modules/typeorm/repository/removeoptions.d.ts","../node_modules/typeorm/repository/saveoptions.d.ts","../node_modules/typeorm/driver/mongodb/typings.d.ts","../node_modules/typeorm/repository/repository.d.ts","../node_modules/typeorm/schema-builder/options/viewoptions.d.ts","../node_modules/typeorm/schema-builder/view/view.d.ts","../node_modules/typeorm/driver/query.d.ts","../node_modules/typeorm/driver/sqlinmemory.d.ts","../node_modules/typeorm/subscriber/event/transactioncommitevent.d.ts","../node_modules/typeorm/subscriber/event/transactionrollbackevent.d.ts","../node_modules/typeorm/subscriber/event/transactionstartevent.d.ts","../node_modules/typeorm/subscriber/event/updateevent.d.ts","../node_modules/typeorm/subscriber/event/removeevent.d.ts","../node_modules/typeorm/subscriber/event/insertevent.d.ts","../node_modules/typeorm/subscriber/event/loadevent.d.ts","../node_modules/typeorm/subscriber/entitysubscriberinterface.d.ts","../node_modules/typeorm/subscriber/broadcasterresult.d.ts","../node_modules/typeorm/subscriber/broadcaster.d.ts","../node_modules/typeorm/driver/mongodb/mongoqueryrunner.d.ts","../node_modules/typeorm/entity-manager/mongoentitymanager.d.ts","../node_modules/typeorm/repository/mongorepository.d.ts","../node_modules/typeorm/repository/treerepository.d.ts","../node_modules/typeorm/query-builder/transformer/plainobjecttonewentitytransformer.d.ts","../node_modules/typeorm/driver/types/isolationlevel.d.ts","../node_modules/typeorm/entity-manager/entitymanager.d.ts","../node_modules/typeorm/query-runner/queryrunner.d.ts","../node_modules/typeorm/driver/types/mappedcolumntypes.d.ts","../node_modules/typeorm/schema-builder/schemabuilder.d.ts","../node_modules/typeorm/driver/types/datatypedefaults.d.ts","../node_modules/typeorm/entity-schema/entityschemaindexoptions.d.ts","../node_modules/typeorm/decorator/options/spatialcolumnoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemacolumnoptions.d.ts","../node_modules/typeorm/decorator/options/joincolumnoptions.d.ts","../node_modules/typeorm/decorator/options/jointablemultiplecolumnsoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemarelationoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemauniqueoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemacheckoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemaexclusionoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemaoptions.d.ts","../node_modules/typeorm/entity-schema/entityschema.d.ts","../node_modules/typeorm/logger/loggeroptions.d.ts","../node_modules/typeorm/driver/types/databasetype.d.ts","../node_modules/typeorm/logger/logger.d.ts","../node_modules/typeorm/cache/queryresultcacheoptions.d.ts","../node_modules/typeorm/cache/queryresultcache.d.ts","../node_modules/typeorm/connection/baseconnectionoptions.d.ts","../node_modules/typeorm/driver/types/replicationmode.d.ts","../node_modules/typeorm/driver/driver.d.ts","../node_modules/typeorm/migration/migrationinterface.d.ts","../node_modules/typeorm/migration/migration.d.ts","../node_modules/typeorm/driver/cockroachdb/cockroachconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/cockroachdb/cockroachconnectionoptions.d.ts","../node_modules/typeorm/driver/mysql/mysqlconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/mysql/mysqlconnectionoptions.d.ts","../node_modules/typeorm/driver/postgres/postgresconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/postgres/postgresconnectionoptions.d.ts","../node_modules/typeorm/driver/sqlite/sqliteconnectionoptions.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/defaultauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectoryaccesstokenauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectorymsiappserviceauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectorymsivmauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectorypasswordauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectoryserviceprincipalsecret.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/ntlmauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/sqlserverconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/sqlserver/sqlserverconnectionoptions.d.ts","../node_modules/typeorm/driver/oracle/oracleconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/oracle/oracleconnectionoptions.d.ts","../node_modules/typeorm/driver/mongodb/mongoconnectionoptions.d.ts","../node_modules/typeorm/driver/cordova/cordovaconnectionoptions.d.ts","../node_modules/typeorm/driver/sqljs/sqljsconnectionoptions.d.ts","../node_modules/typeorm/driver/react-native/reactnativeconnectionoptions.d.ts","../node_modules/typeorm/driver/nativescript/nativescriptconnectionoptions.d.ts","../node_modules/typeorm/driver/expo/expoconnectionoptions.d.ts","../node_modules/typeorm/driver/aurora-data-api/auroradataapiconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/aurora-data-api/auroradataapiconnectionoptions.d.ts","../node_modules/typeorm/driver/sap/sapconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/sap/sapconnectionoptions.d.ts","../node_modules/typeorm/driver/aurora-data-api-pg/auroradataapipostgresconnectionoptions.d.ts","../node_modules/typeorm/driver/better-sqlite3/bettersqlite3connectionoptions.d.ts","../node_modules/typeorm/driver/capacitor/capacitorconnectionoptions.d.ts","../node_modules/typeorm/connection/connectionoptions.d.ts","../node_modules/typeorm/entity-manager/sqljsentitymanager.d.ts","../node_modules/typeorm/query-builder/relationloader.d.ts","../node_modules/typeorm/query-builder/relationidloader.d.ts","../node_modules/typeorm/connection/connection.d.ts","../node_modules/typeorm/connection/connectionmanager.d.ts","../node_modules/typeorm/metadata-args/namingstrategymetadataargs.d.ts","../node_modules/typeorm/metadata-args/joincolumnmetadataargs.d.ts","../node_modules/typeorm/metadata-args/jointablemetadataargs.d.ts","../node_modules/typeorm/metadata-args/entitysubscribermetadataargs.d.ts","../node_modules/typeorm/metadata-args/inheritancemetadataargs.d.ts","../node_modules/typeorm/metadata-args/discriminatorvaluemetadataargs.d.ts","../node_modules/typeorm/metadata-args/entityrepositorymetadataargs.d.ts","../node_modules/typeorm/metadata-args/transactionentitymetadataargs.d.ts","../node_modules/typeorm/metadata-args/transactionrepositorymetadataargs.d.ts","../node_modules/typeorm/metadata-args/generatedmetadataargs.d.ts","../node_modules/typeorm/metadata-args/metadataargsstorage.d.ts","../node_modules/typeorm/container.d.ts","../node_modules/typeorm/error/cannotreflectmethodparametertypeerror.d.ts","../node_modules/typeorm/error/alreadyhasactiveconnectionerror.d.ts","../node_modules/typeorm/persistence/subjectchangemap.d.ts","../node_modules/typeorm/persistence/subject.d.ts","../node_modules/typeorm/error/subjectwithoutidentifiererror.d.ts","../node_modules/typeorm/error/cannotconnectalreadyconnectederror.d.ts","../node_modules/typeorm/error/locknotsupportedongivendrivererror.d.ts","../node_modules/typeorm/error/connectionisnotseterror.d.ts","../node_modules/typeorm/error/cannotcreateentityidmaperror.d.ts","../node_modules/typeorm/error/metadataalreadyexistserror.d.ts","../node_modules/typeorm/error/cannotdetermineentityerror.d.ts","../node_modules/typeorm/error/updatevaluesmissingerror.d.ts","../node_modules/typeorm/error/treerepositorynotsupportederror.d.ts","../node_modules/typeorm/error/customrepositorynotfounderror.d.ts","../node_modules/typeorm/error/transactionnotstartederror.d.ts","../node_modules/typeorm/error/transactionalreadystartederror.d.ts","../node_modules/typeorm/error/entitynotfounderror.d.ts","../node_modules/typeorm/error/entitymetadatanotfounderror.d.ts","../node_modules/typeorm/error/mustbeentityerror.d.ts","../node_modules/typeorm/error/optimisticlockversionmismatcherror.d.ts","../node_modules/typeorm/error/limitonupdatenotsupportederror.d.ts","../node_modules/typeorm/error/primarycolumncannotbenullableerror.d.ts","../node_modules/typeorm/error/customrepositorycannotinheritrepositoryerror.d.ts","../node_modules/typeorm/error/queryrunnerprovideralreadyreleasederror.d.ts","../node_modules/typeorm/error/cannotattachtreechildrenentityerror.d.ts","../node_modules/typeorm/error/customrepositorydoesnothaveentityerror.d.ts","../node_modules/typeorm/error/missingdeletedatecolumnerror.d.ts","../node_modules/typeorm/error/noconnectionforrepositoryerror.d.ts","../node_modules/typeorm/error/circularrelationserror.d.ts","../node_modules/typeorm/error/returningstatementnotsupportederror.d.ts","../node_modules/typeorm/error/usingjointableisnotallowederror.d.ts","../node_modules/typeorm/error/missingjoincolumnerror.d.ts","../node_modules/typeorm/error/missingprimarycolumnerror.d.ts","../node_modules/typeorm/error/entitycolumnnotfound.d.ts","../node_modules/typeorm/error/missingdrivererror.d.ts","../node_modules/typeorm/error/driverpackagenotinstallederror.d.ts","../node_modules/typeorm/error/cannotgetentitymanagernotconnectederror.d.ts","../node_modules/typeorm/error/connectionnotfounderror.d.ts","../node_modules/typeorm/error/noversionorupdatedatecolumnerror.d.ts","../node_modules/typeorm/error/insertvaluesmissingerror.d.ts","../node_modules/typeorm/error/optimisticlockcannotbeusederror.d.ts","../node_modules/typeorm/error/metadatawithsuchnamealreadyexistserror.d.ts","../node_modules/typeorm/error/driveroptionnotseterror.d.ts","../node_modules/typeorm/error/findrelationsnotfounderror.d.ts","../node_modules/typeorm/error/repositorynotfounderror.d.ts","../node_modules/typeorm/error/namingstrategynotfounderror.d.ts","../node_modules/typeorm/error/pessimisticlocktransactionrequirederror.d.ts","../node_modules/typeorm/error/repositorynottreeerror.d.ts","../node_modules/typeorm/error/datatypenotsupportederror.d.ts","../node_modules/typeorm/error/initializedrelationerror.d.ts","../node_modules/typeorm/error/missingjointableerror.d.ts","../node_modules/typeorm/error/queryfailederror.d.ts","../node_modules/typeorm/error/noneedtoreleaseentitymanagererror.d.ts","../node_modules/typeorm/error/usingjoincolumnonlyononesideallowederror.d.ts","../node_modules/typeorm/error/usingjointableonlyononesideallowederror.d.ts","../node_modules/typeorm/error/subjectremovedandupdatederror.d.ts","../node_modules/typeorm/error/persistedentitynotfounderror.d.ts","../node_modules/typeorm/error/usingjoincolumnisnotallowederror.d.ts","../node_modules/typeorm/error/columntypeundefinederror.d.ts","../node_modules/typeorm/error/queryrunneralreadyreleasederror.d.ts","../node_modules/typeorm/error/offsetwithoutlimitnotsupportederror.d.ts","../node_modules/typeorm/error/cannotexecutenotconnectederror.d.ts","../node_modules/typeorm/error/noconnectionoptionerror.d.ts","../node_modules/typeorm/error/index.d.ts","../node_modules/typeorm/decorator/options/columnwithlengthoptions.d.ts","../node_modules/typeorm/decorator/options/columnnumericoptions.d.ts","../node_modules/typeorm/decorator/options/columnenumoptions.d.ts","../node_modules/typeorm/decorator/options/columnembeddedoptions.d.ts","../node_modules/typeorm/decorator/options/columnhstoreoptions.d.ts","../node_modules/typeorm/decorator/options/columnwithwidthoptions.d.ts","../node_modules/typeorm/decorator/columns/column.d.ts","../node_modules/typeorm/decorator/columns/createdatecolumn.d.ts","../node_modules/typeorm/decorator/columns/deletedatecolumn.d.ts","../node_modules/typeorm/decorator/options/primarygeneratedcolumnnumericoptions.d.ts","../node_modules/typeorm/decorator/options/primarygeneratedcolumnuuidoptions.d.ts","../node_modules/typeorm/decorator/columns/primarygeneratedcolumn.d.ts","../node_modules/typeorm/decorator/columns/primarycolumn.d.ts","../node_modules/typeorm/decorator/columns/updatedatecolumn.d.ts","../node_modules/typeorm/decorator/columns/versioncolumn.d.ts","../node_modules/typeorm/decorator/options/viewcolumnoptions.d.ts","../node_modules/typeorm/decorator/columns/viewcolumn.d.ts","../node_modules/typeorm/decorator/columns/objectidcolumn.d.ts","../node_modules/typeorm/decorator/listeners/afterinsert.d.ts","../node_modules/typeorm/decorator/listeners/afterload.d.ts","../node_modules/typeorm/decorator/listeners/afterremove.d.ts","../node_modules/typeorm/decorator/listeners/afterupdate.d.ts","../node_modules/typeorm/decorator/listeners/beforeinsert.d.ts","../node_modules/typeorm/decorator/listeners/beforeremove.d.ts","../node_modules/typeorm/decorator/listeners/beforeupdate.d.ts","../node_modules/typeorm/decorator/listeners/eventsubscriber.d.ts","../node_modules/typeorm/decorator/options/indexoptions.d.ts","../node_modules/typeorm/decorator/options/jointableoptions.d.ts","../node_modules/typeorm/decorator/options/entityoptions.d.ts","../node_modules/typeorm/decorator/relations/joincolumn.d.ts","../node_modules/typeorm/decorator/relations/jointable.d.ts","../node_modules/typeorm/decorator/relations/manytomany.d.ts","../node_modules/typeorm/decorator/relations/manytoone.d.ts","../node_modules/typeorm/decorator/relations/onetomany.d.ts","../node_modules/typeorm/decorator/relations/onetoone.d.ts","../node_modules/typeorm/decorator/relations/relationcount.d.ts","../node_modules/typeorm/decorator/relations/relationid.d.ts","../node_modules/typeorm/decorator/entity/entity.d.ts","../node_modules/typeorm/decorator/entity/childentity.d.ts","../node_modules/typeorm/decorator/entity/tableinheritance.d.ts","../node_modules/typeorm/decorator/options/viewentityoptions.d.ts","../node_modules/typeorm/decorator/entity-view/viewentity.d.ts","../node_modules/typeorm/decorator/options/transactionoptions.d.ts","../node_modules/typeorm/decorator/transaction/transaction.d.ts","../node_modules/typeorm/decorator/transaction/transactionmanager.d.ts","../node_modules/typeorm/decorator/transaction/transactionrepository.d.ts","../node_modules/typeorm/decorator/tree/treelevelcolumn.d.ts","../node_modules/typeorm/decorator/tree/treeparent.d.ts","../node_modules/typeorm/decorator/tree/treechildren.d.ts","../node_modules/typeorm/decorator/tree/tree.d.ts","../node_modules/typeorm/decorator/index.d.ts","../node_modules/typeorm/decorator/unique.d.ts","../node_modules/typeorm/decorator/check.d.ts","../node_modules/typeorm/decorator/exclusion.d.ts","../node_modules/typeorm/decorator/generated.d.ts","../node_modules/typeorm/decorator/entityrepository.d.ts","../node_modules/typeorm/find-options/operator/any.d.ts","../node_modules/typeorm/find-options/operator/between.d.ts","../node_modules/typeorm/find-options/operator/equal.d.ts","../node_modules/typeorm/find-options/operator/in.d.ts","../node_modules/typeorm/find-options/operator/isnull.d.ts","../node_modules/typeorm/find-options/operator/lessthan.d.ts","../node_modules/typeorm/find-options/operator/lessthanorequal.d.ts","../node_modules/typeorm/find-options/operator/ilike.d.ts","../node_modules/typeorm/find-options/operator/like.d.ts","../node_modules/typeorm/find-options/operator/morethan.d.ts","../node_modules/typeorm/find-options/operator/morethanorequal.d.ts","../node_modules/typeorm/find-options/operator/not.d.ts","../node_modules/typeorm/find-options/operator/raw.d.ts","../node_modules/typeorm/find-options/findoptionsutils.d.ts","../node_modules/typeorm/logger/advancedconsolelogger.d.ts","../node_modules/typeorm/logger/simpleconsolelogger.d.ts","../node_modules/typeorm/logger/filelogger.d.ts","../node_modules/typeorm/repository/abstractrepository.d.ts","../node_modules/typeorm/repository/baseentity.d.ts","../node_modules/typeorm/driver/sqlserver/mssqlparameter.d.ts","../node_modules/typeorm/connection/connectionoptionsreader.d.ts","../node_modules/typeorm/migration/migrationexecutor.d.ts","../node_modules/typeorm/naming-strategy/defaultnamingstrategy.d.ts","../node_modules/typeorm/index.d.ts","../node_modules/@nestjs/typeorm/dist/interfaces/entity-class-or-schema.type.d.ts","../node_modules/@nestjs/typeorm/dist/common/typeorm.decorators.d.ts","../node_modules/@nestjs/typeorm/dist/common/typeorm.utils.d.ts","../node_modules/@nestjs/typeorm/dist/common/index.d.ts","../node_modules/@nestjs/typeorm/dist/interfaces/typeorm-options.interface.d.ts","../node_modules/@nestjs/typeorm/dist/interfaces/index.d.ts","../node_modules/@nestjs/typeorm/dist/typeorm.module.d.ts","../node_modules/@nestjs/typeorm/dist/index.d.ts","../node_modules/@nestjs/typeorm/index.d.ts","../src/resources/boards/entities/board.entity.ts","../src/resources/tasks/entities/task.entity.ts","../node_modules/@types/jsonwebtoken/index.d.ts","../src/resources/users/entities/user.entity.ts","../node_modules/@types/bcrypt/index.d.ts","../src/resources/users/users.service.ts","../src/resources/auth/auth.guard.ts","../src/resources/users/users.controller.ts","../src/resources/users/users.module.ts","../src/resources/boards/boards.service.ts","../src/resources/boards/boards.controller.ts","../src/resources/boards/boards.module.ts","../src/resources/tasks/tasks.service.ts","../src/resources/tasks/tasks.controller.ts","../src/resources/tasks/tasks.module.ts","../node_modules/class-validator/types/validation/validationerror.d.ts","../node_modules/class-validator/types/validation/validatoroptions.d.ts","../node_modules/class-validator/types/validation-schema/validationschema.d.ts","../node_modules/class-validator/types/container.d.ts","../node_modules/class-validator/types/validation/validationarguments.d.ts","../node_modules/class-validator/types/decorator/validationoptions.d.ts","../node_modules/class-validator/types/decorator/common/allow.d.ts","../node_modules/class-validator/types/decorator/common/isdefined.d.ts","../node_modules/class-validator/types/decorator/common/isoptional.d.ts","../node_modules/class-validator/types/decorator/common/validate.d.ts","../node_modules/class-validator/types/validation/validatorconstraintinterface.d.ts","../node_modules/class-validator/types/decorator/common/validateby.d.ts","../node_modules/class-validator/types/decorator/common/validateif.d.ts","../node_modules/class-validator/types/decorator/common/validatenested.d.ts","../node_modules/class-validator/types/decorator/common/validatepromise.d.ts","../node_modules/class-validator/types/decorator/common/islatlong.d.ts","../node_modules/class-validator/types/decorator/common/islatitude.d.ts","../node_modules/class-validator/types/decorator/common/islongitude.d.ts","../node_modules/class-validator/types/decorator/common/equals.d.ts","../node_modules/class-validator/types/decorator/common/notequals.d.ts","../node_modules/class-validator/types/decorator/common/isempty.d.ts","../node_modules/class-validator/types/decorator/common/isnotempty.d.ts","../node_modules/class-validator/types/decorator/common/isin.d.ts","../node_modules/class-validator/types/decorator/common/isnotin.d.ts","../node_modules/class-validator/types/decorator/number/isdivisibleby.d.ts","../node_modules/class-validator/types/decorator/number/ispositive.d.ts","../node_modules/class-validator/types/decorator/number/isnegative.d.ts","../node_modules/class-validator/types/decorator/number/max.d.ts","../node_modules/class-validator/types/decorator/number/min.d.ts","../node_modules/class-validator/types/decorator/date/mindate.d.ts","../node_modules/class-validator/types/decorator/date/maxdate.d.ts","../node_modules/class-validator/types/decorator/string/contains.d.ts","../node_modules/class-validator/types/decorator/string/notcontains.d.ts","../node_modules/@types/validator/index.d.ts","../node_modules/class-validator/types/decorator/string/isalpha.d.ts","../node_modules/class-validator/types/decorator/string/isalphanumeric.d.ts","../node_modules/class-validator/types/decorator/string/isdecimal.d.ts","../node_modules/class-validator/types/decorator/string/isascii.d.ts","../node_modules/class-validator/types/decorator/string/isbase64.d.ts","../node_modules/class-validator/types/decorator/string/isbytelength.d.ts","../node_modules/class-validator/types/decorator/string/iscreditcard.d.ts","../node_modules/class-validator/types/decorator/string/iscurrency.d.ts","../node_modules/class-validator/types/decorator/string/isemail.d.ts","../node_modules/class-validator/types/decorator/string/isfqdn.d.ts","../node_modules/class-validator/types/decorator/string/isfullwidth.d.ts","../node_modules/class-validator/types/decorator/string/ishalfwidth.d.ts","../node_modules/class-validator/types/decorator/string/isvariablewidth.d.ts","../node_modules/class-validator/types/decorator/string/ishexcolor.d.ts","../node_modules/class-validator/types/decorator/string/ishexadecimal.d.ts","../node_modules/class-validator/types/decorator/string/ismacaddress.d.ts","../node_modules/class-validator/types/decorator/string/isip.d.ts","../node_modules/class-validator/types/decorator/string/isport.d.ts","../node_modules/class-validator/types/decorator/string/isisbn.d.ts","../node_modules/class-validator/types/decorator/string/isisin.d.ts","../node_modules/class-validator/types/decorator/string/isiso8601.d.ts","../node_modules/class-validator/types/decorator/string/isjson.d.ts","../node_modules/class-validator/types/decorator/string/isjwt.d.ts","../node_modules/class-validator/types/decorator/string/islowercase.d.ts","../node_modules/class-validator/types/decorator/string/ismobilephone.d.ts","../node_modules/class-validator/types/decorator/string/isiso31661alpha2.d.ts","../node_modules/class-validator/types/decorator/string/isiso31661alpha3.d.ts","../node_modules/class-validator/types/decorator/string/ismongoid.d.ts","../node_modules/class-validator/types/decorator/string/ismultibyte.d.ts","../node_modules/class-validator/types/decorator/string/issurrogatepair.d.ts","../node_modules/class-validator/types/decorator/string/isurl.d.ts","../node_modules/class-validator/types/decorator/string/isuuid.d.ts","../node_modules/class-validator/types/decorator/string/isfirebasepushid.d.ts","../node_modules/class-validator/types/decorator/string/isuppercase.d.ts","../node_modules/class-validator/types/decorator/string/length.d.ts","../node_modules/class-validator/types/decorator/string/maxlength.d.ts","../node_modules/class-validator/types/decorator/string/minlength.d.ts","../node_modules/class-validator/types/decorator/string/matches.d.ts","../node_modules/libphonenumber-js/types.d.ts","../node_modules/libphonenumber-js/index.d.ts","../node_modules/class-validator/types/decorator/string/isphonenumber.d.ts","../node_modules/class-validator/types/decorator/string/ismilitarytime.d.ts","../node_modules/class-validator/types/decorator/string/ishash.d.ts","../node_modules/class-validator/types/decorator/string/isissn.d.ts","../node_modules/class-validator/types/decorator/string/isdatestring.d.ts","../node_modules/class-validator/types/decorator/string/isbooleanstring.d.ts","../node_modules/class-validator/types/decorator/string/isnumberstring.d.ts","../node_modules/class-validator/types/decorator/string/isbase32.d.ts","../node_modules/class-validator/types/decorator/string/isbic.d.ts","../node_modules/class-validator/types/decorator/string/isbtcaddress.d.ts","../node_modules/class-validator/types/decorator/string/isdatauri.d.ts","../node_modules/class-validator/types/decorator/string/isean.d.ts","../node_modules/class-validator/types/decorator/string/isethereumaddress.d.ts","../node_modules/class-validator/types/decorator/string/ishsl.d.ts","../node_modules/class-validator/types/decorator/string/isiban.d.ts","../node_modules/class-validator/types/decorator/string/isidentitycard.d.ts","../node_modules/class-validator/types/decorator/string/isisrc.d.ts","../node_modules/class-validator/types/decorator/string/islocale.d.ts","../node_modules/class-validator/types/decorator/string/ismagneturi.d.ts","../node_modules/class-validator/types/decorator/string/ismimetype.d.ts","../node_modules/class-validator/types/decorator/string/isoctal.d.ts","../node_modules/class-validator/types/decorator/string/ispassportnumber.d.ts","../node_modules/class-validator/types/decorator/string/ispostalcode.d.ts","../node_modules/class-validator/types/decorator/string/isrfc3339.d.ts","../node_modules/class-validator/types/decorator/string/isrgbcolor.d.ts","../node_modules/class-validator/types/decorator/string/issemver.d.ts","../node_modules/class-validator/types/decorator/typechecker/isboolean.d.ts","../node_modules/class-validator/types/decorator/typechecker/isdate.d.ts","../node_modules/class-validator/types/decorator/typechecker/isnumber.d.ts","../node_modules/class-validator/types/decorator/typechecker/isenum.d.ts","../node_modules/class-validator/types/decorator/typechecker/isint.d.ts","../node_modules/class-validator/types/decorator/typechecker/isstring.d.ts","../node_modules/class-validator/types/decorator/typechecker/isarray.d.ts","../node_modules/class-validator/types/decorator/typechecker/isobject.d.ts","../node_modules/class-validator/types/decorator/array/arraycontains.d.ts","../node_modules/class-validator/types/decorator/array/arraynotcontains.d.ts","../node_modules/class-validator/types/decorator/array/arraynotempty.d.ts","../node_modules/class-validator/types/decorator/array/arrayminsize.d.ts","../node_modules/class-validator/types/decorator/array/arraymaxsize.d.ts","../node_modules/class-validator/types/decorator/array/arrayunique.d.ts","../node_modules/class-validator/types/decorator/object/isnotemptyobject.d.ts","../node_modules/class-validator/types/decorator/object/isinstance.d.ts","../node_modules/class-validator/types/decorator/decorators.d.ts","../node_modules/class-validator/types/validation/validationtypes.d.ts","../node_modules/class-validator/types/validation/validator.d.ts","../node_modules/class-validator/types/register-decorator.d.ts","../node_modules/class-validator/types/metadata/validationmetadataargs.d.ts","../node_modules/class-validator/types/metadata/validationmetadata.d.ts","../node_modules/class-validator/types/metadata/constraintmetadata.d.ts","../node_modules/class-validator/types/metadata/metadatastorage.d.ts","../node_modules/class-validator/types/index.d.ts","../src/resources/auth/dto/user-login.dto.ts","../src/resources/auth/auth.controller.ts","../src/resources/auth/login.module.ts","../node_modules/@nestjs/core/adapters/http-adapter.d.ts","../node_modules/@nestjs/core/adapters/index.d.ts","../node_modules/@nestjs/core/injector/module-token-factory.d.ts","../node_modules/@nestjs/core/injector/compiler.d.ts","../node_modules/@nestjs/core/injector/modules-container.d.ts","../node_modules/@nestjs/core/injector/container.d.ts","../node_modules/@nestjs/core/injector/module-ref.d.ts","../node_modules/@nestjs/core/injector/module.d.ts","../node_modules/@nestjs/core/injector/instance-wrapper.d.ts","../node_modules/@nestjs/core/router/interfaces/exclude-route-metadata.interface.d.ts","../node_modules/@nestjs/core/application-config.d.ts","../node_modules/@nestjs/core/constants.d.ts","../node_modules/@nestjs/core/discovery/discovery-module.d.ts","../node_modules/@nestjs/core/discovery/discovery-service.d.ts","../node_modules/@nestjs/core/discovery/index.d.ts","../node_modules/@nestjs/core/helpers/http-adapter-host.d.ts","../node_modules/@nestjs/core/exceptions/base-exception-filter.d.ts","../node_modules/@nestjs/core/exceptions/index.d.ts","../node_modules/@nestjs/core/helpers/context-id-factory.d.ts","../node_modules/@nestjs/core/helpers/index.d.ts","../node_modules/@nestjs/core/injector/inquirer/inquirer-constants.d.ts","../node_modules/@nestjs/core/injector/inquirer/index.d.ts","../node_modules/@nestjs/core/metadata-scanner.d.ts","../node_modules/@nestjs/core/scanner.d.ts","../node_modules/@nestjs/core/injector/instance-loader.d.ts","../node_modules/@nestjs/core/injector/lazy-module-loader.d.ts","../node_modules/@nestjs/core/injector/index.d.ts","../node_modules/@nestjs/core/middleware/routes-mapper.d.ts","../node_modules/@nestjs/core/middleware/builder.d.ts","../node_modules/@nestjs/core/middleware/index.d.ts","../node_modules/@nestjs/core/injector/injector.d.ts","../node_modules/@nestjs/core/nest-application-context.d.ts","../node_modules/@nestjs/core/nest-application.d.ts","../node_modules/@nestjs/common/interfaces/microservices/nest-microservice-options.interface.d.ts","../node_modules/@nestjs/core/nest-factory.d.ts","../node_modules/@nestjs/core/router/interfaces/routes.interface.d.ts","../node_modules/@nestjs/core/router/interfaces/index.d.ts","../node_modules/@nestjs/core/router/request/request-constants.d.ts","../node_modules/@nestjs/core/router/request/index.d.ts","../node_modules/@nestjs/core/router/router-module.d.ts","../node_modules/@nestjs/core/router/index.d.ts","../node_modules/@nestjs/core/services/reflector.service.d.ts","../node_modules/@nestjs/core/services/index.d.ts","../node_modules/@nestjs/core/index.d.ts","../src/shared/logging.interceptor.ts","../node_modules/dotenv/types/index.d.ts","../src/common/ormconfig.ts","../src/app.module.ts","../src/utils/admin.creator.ts","../node_modules/find-my-way/index.d.ts","../node_modules/fastify-error/index.d.ts","../node_modules/fastify/types/utils.d.ts","../node_modules/light-my-request/index.d.ts","../node_modules/fastify/types/schema.d.ts","../node_modules/fastify/types/plugin.d.ts","../node_modules/fastify/types/register.d.ts","../node_modules/fastify/types/context.d.ts","../node_modules/fastify/types/reply.d.ts","../node_modules/fastify/types/hooks.d.ts","../node_modules/fastify/types/content-type-parser.d.ts","../node_modules/fastify/types/instance.d.ts","../node_modules/fastify/types/route.d.ts","../node_modules/fastify/types/logger.d.ts","../node_modules/fastify/types/request.d.ts","../node_modules/fastify/types/serverfactory.d.ts","../node_modules/ajv/lib/ajv.d.ts","../node_modules/@fastify/ajv-compiler/index.d.ts","../node_modules/fastify/fastify.d.ts","../node_modules/@nestjs/platform-fastify/interfaces/external/fastify-static-options.interface.d.ts","../node_modules/@nestjs/platform-fastify/interfaces/external/point-of-view-options.interface.d.ts","../node_modules/@nestjs/platform-fastify/interfaces/external/index.d.ts","../node_modules/@nestjs/platform-fastify/adapters/fastify-adapter.d.ts","../node_modules/@nestjs/platform-fastify/adapters/index.d.ts","../node_modules/@nestjs/platform-fastify/interfaces/nest-fastify-application.interface.d.ts","../node_modules/@nestjs/platform-fastify/interfaces/index.d.ts","../node_modules/@nestjs/platform-fastify/index.d.ts","../src/main.ts","../src/migration/1626057786688-trello_db.ts","../src/resources/auth/dto/login.dto.ts","../src/resources/auth/entities/login.entity.ts","../src/resources/boards/dto/create-board.dto.ts","../node_modules/@nestjs/mapped-types/dist/mapped-type.interface.d.ts","../node_modules/@nestjs/mapped-types/dist/intersection-type.helper.d.ts","../node_modules/@nestjs/mapped-types/dist/omit-type.helper.d.ts","../node_modules/@nestjs/mapped-types/dist/partial-type.helper.d.ts","../node_modules/@nestjs/mapped-types/dist/pick-type.helper.d.ts","../node_modules/@nestjs/mapped-types/dist/type-helpers.utils.d.ts","../node_modules/@nestjs/mapped-types/dist/index.d.ts","../node_modules/@nestjs/mapped-types/index.d.ts","../src/resources/boards/dto/update-board.dto.ts","../src/resources/tasks/dto/create-task.dto.ts","../src/resources/tasks/dto/update-task.dto.ts","../src/resources/users/dto/create-user.dto.ts","../src/resources/users/dto/login.dto.ts","../src/resources/users/dto/update-user.dto.ts","../node_modules/@babel/types/lib/index.d.ts","../node_modules/@types/babel__generator/index.d.ts","../node_modules/@babel/parser/typings/babel-parser.d.ts","../node_modules/@types/babel__template/index.d.ts","../node_modules/@types/babel__traverse/index.d.ts","../node_modules/@types/babel__core/index.d.ts","../node_modules/@types/connect/index.d.ts","../node_modules/@types/body-parser/index.d.ts","../node_modules/@types/cookiejar/index.d.ts","../node_modules/@types/eslint/helpers.d.ts","../node_modules/@types/eslint/lib/rules/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/estree/index.d.ts","../node_modules/@types/eslint/index.d.ts","../node_modules/@types/eslint-scope/index.d.ts","../node_modules/@types/range-parser/index.d.ts","../node_modules/@types/qs/index.d.ts","../node_modules/@types/express-serve-static-core/index.d.ts","../node_modules/@types/mime/index.d.ts","../node_modules/@types/serve-static/index.d.ts","../node_modules/@types/express/index.d.ts","../node_modules/@types/graceful-fs/index.d.ts","../node_modules/@types/istanbul-lib-coverage/index.d.ts","../node_modules/@types/istanbul-lib-report/index.d.ts","../node_modules/@types/istanbul-reports/index.d.ts","../node_modules/jest-diff/build/cleanupsemantic.d.ts","../node_modules/jest-diff/build/types.d.ts","../node_modules/jest-diff/build/difflines.d.ts","../node_modules/jest-diff/build/printdiffs.d.ts","../node_modules/jest-diff/build/index.d.ts","../node_modules/pretty-format/build/types.d.ts","../node_modules/pretty-format/build/index.d.ts","../node_modules/@types/jest/index.d.ts","../node_modules/@types/json5/index.d.ts","../node_modules/@types/normalize-package-data/index.d.ts","../node_modules/@types/parse-json/index.d.ts","../node_modules/@types/prettier/index.d.ts","../node_modules/@types/stack-utils/index.d.ts","../node_modules/@types/superagent/index.d.ts","../node_modules/@types/supertest/index.d.ts","../node_modules/@types/swagger-ui-express/index.d.ts","../node_modules/@types/uuid/index.d.ts","../node_modules/@types/yamljs/index.d.ts","../node_modules/@types/yargs-parser/index.d.ts","../node_modules/@types/yargs/index.d.ts","../node_modules/@types/zen-observable/index.d.ts"],"fileInfos":[{"version":"ac3a8c4040e183ce38da69d23b96939112457d1936198e6542672b7963cf0fce","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940",{"version":"1dad4fe1561d99dfd6709127608b99a76e5c2643626c800434f99c48038567ee","affectsGlobalScope":true},{"version":"a8fe23ae87c3e9d2877032cafeb290f2ebe0c51e216d175a0408b10915ebe9f0","affectsGlobalScope":true},{"version":"7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481","affectsGlobalScope":true},{"version":"097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd","affectsGlobalScope":true},{"version":"cce43d02223f8049864f8568bed322c39424013275cd3bcc3f51492d8b546cb3","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"8dff1b4c2df638fcd976cbb0e636f23ab5968e836cd45084cc31d47d1ab19c49","affectsGlobalScope":true},{"version":"2bb4b3927299434052b37851a47bf5c39764f2ba88a888a107b32262e9292b7c","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"8f4c9f651c8294a2eb1cbd12581fe25bfb901ab1d474bb93cd38c7e2f4be7a30","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"df9c8a72ca8b0ed62f5470b41208a0587f0f73f0a7db28e5a1272cf92537518e","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"93544ca2f26a48716c1b6c5091842cad63129daac422dfa4bc52460465f22bb1","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"60761e6ea886034af0f294f025a7199360ce4e2c8ba4ec6408bc049cf9b89799","affectsGlobalScope":true},{"version":"7435b75fdf3509622e79622dbe5091cf4b09688410ee2034e4fc17d0c99d0862","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"9f1817f7c3f02f6d56e0f403b927e90bb133f371dcebc36fa7d6d208ef6899da","affectsGlobalScope":true},{"version":"506b80b9951c9381dc5f11897b31fca5e2a65731d96ddefa19687fbc26b23c6e","affectsGlobalScope":true},"f58c6d0669d1ee04b2fcb0e87fb949b6828602f3f29c7bf6c76a214f16fd50d5",{"version":"8d6d51a5118d000ed3bfe6e1dd1335bebfff3fef23cd2af2f84a24d30f90cc90","affectsGlobalScope":true},"3346a737f29b700e7c6c2a694973ceb70a738c3ac5212ffbefac8a27048fa8d6","e89535c3ec439608bcd0f68af555d0e5ddf121c54abe69343549718bd7506b9c","622a984b60c294ffb2f9152cf1d4d12e91d2b733d820eec949cf54d63a3c1025","1a25c4d02a013b4690efa24ab48184a2c10b1906a379565ba558b2c3ba679a6d","ba6f9c5491bcf018dbbc813e1dd488beb26f876b825007ba76db485df341a8ee","75b57b109d774acca1e151df21cf5cb54c7a1df33a273f0457b9aee4ebd36fb9","9935be445530b0ac76c84ebf5337abf7555bb297ed8f922c17c986d67b266e29","e3fd84e6470b7e0679c4073ee5ce971d324182486dde5a49b67cae29168b51d2","dd8331d0a5190a4735ce6c152e420230188c4966067a756673c36dd7ba72b10e","8e0f1e7305467e5ab930818f3ac6a002a279e3eccb7db35d97b244caa7bdebf2",{"version":"45ccc6d2dbb41cf6bc165d92b765e708ef8a8c0ab0c256dc0361cf5ecf851200","affectsGlobalScope":true},"6d629d3853de19f72eb84c16b427ab4b00c95ea39566054c6b9a2b05cf10dc51","6004bfe7520b0bb42c289170b8ac3e89e0dee655c0e754abdcd56c976f8020d0","a21d697161ed60d8a537c92063c5c3efe25a08e515d1cd349c05652de286e6e1","c813f07926439a4f98a057d9c4a0b3e413e870c3b938bc0aab524a5d2ab9534d","4d59c6a10b6c79a0927c79efa89b3c9f71d174ec14ec2792076cfd2330d0cf8e","7813d5f70dfa0ca0287b80a5341828f6a426d1c8c2832ee2e3baeee74e14639f","57b7d2a70d4cac657d439d6786681b4e3fa74c8f12d6568596f72a0d0856bbe3","06a38095ad4368314366bc08f7cbc0fe274ef7321ec611005d0bdd9c6565e4d5","4599793db9aed9b84677f0ca1cf7ef3c69bb91cda4fe4329cbab778ca4d80a58","ad0028f96921778931fb8419d8de33b10908314fa99699de1702020f69235da1","ccd2a35321c0786bd3808042dc43b960cac13f2cc660ac37a0087e12bc97d2fc","b8c963678032739754978cc88ab9a6e6b36ae2554ffb3fdade7d520e67f75212","2e3981b9cee48174ff85ae15019fd72933f7023a4ed05094740f7e6f7775623c","c8b5373f0f3f3162784dd2b4aa2eacb8f856b8677f4e57271be2c094decdeee1","2cc6b617c6120ba64b5778ccd4b74c951adc3a3941bb6b39f47d48701c44af39","7fe2c219d91d260ca64e6ad3246276d809250869f834276a8cd6fc2b0b53e5a5","b0184ade4ffe10ff26baa48cfb192e2ad8f29f06836eedd8eb1eaed9cb5fea0b","b89a8993685e3c61bd96b588bcb06bdd8bc611262e8adb3251b5d9be10870a92","3718a0ed712943bd688582b1837058f36730923bf78a965c2f11b732ce82cda2","9ec1f655cb1c1ef93527d7845efe00541556934493f2e33c455be82d9ece36e2","311300c03627250fb17ecc07d0d79a1875317a67ead482a21af21827ccaf477a","e0b4d1bfc13d92eca1d23702d3b1c1b1fba414d80ed790500dd7ea3c1ffbdda0","28b38121cc626d93bf1dc4297ce1d13fc3754d2c264134720832bed9600fe77c","d07ea953cfea0c4bd11641912846bd955f4fd26ad2b7b8a279d69c7ab9cb3add","847077313ccb5dbdd810ca057c90643b274077cda92e9de70e6ca722bc0676f7","65fe597e5f6a3672c47d07a3e95dcd41fbfffcd9094b4e6083f80f16fd4fe7b7","7d2fc5b63c7436471a7f5061243ad3e434b780c42bcb9ddb85fa11a574a3fff7","7f5cb3a03588ed46d52a6c2138315d930cd6ffb5c2134247cd07bc23cbea0b5a","227777582dfff8cdf1a19e21b37e90909da522588e499e656a31cbdf398ceb68","f39fb20b83c3f9853c13d4ac95533760979d3023c0a5affe2c0a62d91ab3afd8","e4fca08aed8afb32bb8643d7469810bc8681115fe398e56a028df9e73b2d867f","8eb79914fc224c0394b35eb879798bb2100d1404c4ecf7920fc7408b30110ca3","078966067552650f44ca96c68eddbb8539f30ee48a9ab3f24abdcf0a4037b535","2cd6250c43dba360377481c98d48db6ab1532a7527339edb0deffddc28ba66b1","7a9d600990fbe263a23daebed9ba1bbc5761e45679a7e2b2774a42756ef077a2","66bc155515fbea8c31a4efccbbac44de7c037b01f3aa00b76312cf7252725d30","98f3293221421077b404de2549ef6ef2a3f3873b270de05cf9930c0db318a763","0dfd353f0c16dd5107a7e0713dc52d0a2538293b0a0eac6000a017f9c0a60b56","9cd683a4663ef4d9c6486f1b8a34c73bdbc344d69490931bfe2fbcada12ab35b","42f6a409bad5259ece69df25d2b8ace2ff2ade45fe6386ee45203bdd9329f971","dc9a862a8f7868881ece56ae35d5d8ad3e7180446b5bbeec5e2c4641fcb6de01","513d5918665e36551581f60cd80c58cd0eb8b9ecf4dd67aa69f1e2af735fbdae","a0987071a387fa67e6426817e6ee28f7d98f1ff8713b9a08d3d208c2c80606ca","938b202a0a6786782356b185e1640d0b22c6fb97683efcde80765766ca97a3aa","e7bf975a98cecefe2e8902fb7da9314675ecdce553aea722aaec97327668e18b","3d36f93648518338c875d9f77a8eab52905365483dbb3afe43ed68f1b712b67c","5154b3f86a87dac7c9b9c6faa8d52ed5c693e78c0bc842637ebc8e2e6f21ed2c","b4e32bd5e3b493e4ea6b5ec69a4c02aa1fdaa78e1df9a863bb07604de8f9d123","779f863af62e1e32865416a9068fd755d7b2f015b54e7e736c7359fab906febc","a9d2b00ff0b3a9915195f902673fa77d9f4f0e269ffc4a27c9b4b04c5b50f35a","fbdc8d7cc7daf4101bf567512c67fb990d8fe300e0ba7f213171192177f44aa0","ae1cbedc8c69b75cb9a1efdbd97ef0d569cf2363e4b9a4afdc7c4102b1fe44ca","3b6457fb3866562d279377f923cf3758c80ed7bfcc19414b72a24d0a98188e0c","4fb5d7efb3520b92c1b767ce18968057c5e70886d7fb3416c487231df9275af9","3130616be54242cce3cb9b885a03776a1b53ab9b5c536979383188bafe8945e4","96305a7c4105c96444cab66c839e5cd7d08f9ba2692f43c4c5effb9b110e8b62","bbb7f19fa617d3a9c09542dd43437efcd583e18650d566c862415b858e010439","c1e8042adf5ee99a5b11458e43535676f83e7877fb4e181a7c3d1e0585826596","1a39e51e3362aec7d4edec9b317ff83916fe0471f86ddf2d3ef3af5952e87d9e","4b3f36b96f129a8e125c91d41a05f711e73b3285f80bceb3a1aecb13c97c4502","bb0378011a2d8b274589611f18ce692cab68a8b482736418ec30d3456f1b6c8d","9a82e1b959524c1abfeeb024ee1a400234130a341f2b90a313ce4e37833b7dd2","cb0b4d6295be36ee1bab0ff7877590d871980e43f8fcb720a92c517fa1a6ff38","86814239bc5c49036ceef4de961121376f97f48954e0a02ce849ec5fb740daa3","7a5bfc619b1ad803f11c50668574b16baba8f0e8ce1c3e8ebf16421e910474d2","644addd4811636da491c9546654bc005ba8599f23df6d731d91eba86f3137fc2","a9249493114b181814728cbfeb7234738193a4169b654ec4705d48d7a4d25222","94aebcdc8ed510062887894a9872875ab88bbd165056adb4a582820ce73ba2d9","876fbedec2f494eb6f834ce8636b07d581c657d205d81a3ba894eff0facc6b84","58527aa45f11c9b259a6a9d78b397f35020bfbb104f4d3bb177039b5c18146bd","e9bbf9ba271617496e49f6b481acbe27cb9cd722407a7638869451072594277f","2744532f8fb960eb78497ac660db719f503a10c801f87131d26fd9cbef75dcef","3de846037f1850e848a8a4a5c539cbdbdcde9092625fcd40f2825047c28a0062","40961a837a4593ad8e73fb6e8e4d727846e2e0b0c049ec1120356b3728a892b7","abd9a7eb945c2fab77f0c60cb700e4f174c73eeb414523fe0e7d92da3de7fd3a","003e15b5bb740b6e64f2e7456d7965134986de439dd74f11d8db6c2043f53f3e","948e229fa121869a1626a00b44403ac10bfab95fd0a5459bb924a9c433264a7c","074f34b9f579125ce814bd49e29cd5d030f94d8e70518901dfe4d00961cc908b","f1a9ecdd9e5155f4a5bc32310f7960f60e4c9f454ee4d077f928abe8a7d0ba05","f2d3567210ca4d559d8297d6c4402599c93e3bc7485054192d38db5e132fbc0a","8bec671f45a79c5952f1f357e51e7df4c76e9934c23407b97f7eac27fcbe5c68","ad27aa59d346179ac449bd3077d245f213152879e4027356306ccf1722d61d51","ea546a7ed9eaa71ba78d4d392509dadea4bafed283269dd6c4b09e7d8824e986","4ec0f2a141a9ae7d3557b8efe630ac2021bc3a9ac61238b59293f4cf2f196e82","d3ca7ca5358e528bafe526cb36c6d8cdaf3a4eeaae8c8bfb7878456966386ba2","1cc712218ef11f8077c24204df1683aa3281b97eeb1595abad05a3a73340f6be","13e84c5dd1aa42f42e2247704f1dfe9e8e8855fb9e8e381246343627fa353d44","ba9c46725e2a0bd9df59d3a1e801cc60f90db3ef7817131c53945dce2b8c0c56","281d373eeabf80c4851f8de991e6abe4d385c30379d80897bbc3df3dcac99cee","a1531dbf5fe1477101816ebcc194f9aa7e6a42539a8cfa330de479ec536418a2","9c236339bea3f02289b508658fd55f4578471e83d6b9136fb8e79399982de6e7","605dd288c636cf9b5317fe76dec75d3c7fb855fdcd3ee8cb4fea7d7091ca6fb4","f0f608c51771227ac59fac5d63ddf40e44f3938e2885577bb5aa174d8114a818","6bd47fe1f8921d2929181158281881faa0bb22671bcddc05930ee54737b9ecc9","4e2c0696146c17f66b35146eb70c20369af11299982df9d99efd40a37604b99f","7559e5864a22c9c338efeea6200e048dac91e08bbfc16fa79a2a8421d60b1730","05b67ba7c698619a46649f09ec47d555b2615e128ccc99ac46b0d603cee0d6ed","a0cf59033f506c9f6d167a6f3c4ff52012a324bceb6b7c415b94017f32807d68","3b4c0ede4c645c5d25e415441224e0c4b52cb45a4ac759ad0c36acc34710f866","b54b7fbc7a1d8b9082a7728aa13ebff565f4b097665ea87c23cad9f8aba8c5f7","0866f32a043fdfe79dbc5bc3ed83f765339e1414cf0bb08cfd7290e46207ae26","576fc7e1986ddf2353a3a0663aa13e7974ce3ce3d373637e6e88b4063c81b537","ec25703ad4c2c0b0d82e13140816c76172a9ef9a8ca5530fb93f24250a0d9a93","2d2c4fe7ef7e6ce427f7af00379e848dc3105c221254a1ef8d08a141d2b7ec9e","b306e5b2eb98471337973082d85cb66c652dd5bb8098f268d144acdb3a3e147b","3b94f525f7d816f304424f89b7361715ba9598a85cb297ccefdb2e2ff2b1538e","a2824c030a93b24c7b8ffde0311dacc4c685c3d6a8d21f78c6b6f524adaf5e1e","edd3978ee130eb220c033c35aae5cb215983f0ea5d21bd809108952d6153cf92","7694a662d862bcd77430971468984237464c74cd0b74895c339855fb8ebe2eb2","89e253db2c2cc9a510c521f14dd2b1aae4de2556ee5159ad8d118d3587e3a880","fa037d7b37cc1f188f487ebdc68ecc10d00cc341bce3cb0905f8da239581e5b3","901559b466b5b570611cecb556176ffd130301c579abffd7101c5eab64d112b3","6fdc88b1287c276b55b7f7c4c7b49587813c763eea9751ce0baf0a7e61cd5d89","6a02443704052768bd021f24783aa104b02ae4444e9b735317bf13c6b857a11e","37987b0fe9800cf25473c882ce07bccdab2763c5681c1a2d16816aead46aa8d1","c84c03c721154068e1a60d83e9e85819bd3ef70b824ac2edc498aa31c06e5781","5804d7468bea956dfd6a581077e013d853574c710013778d88babe8b21679dd8","c96fb6a0c1e879f95634ab0ff439cbb6fff6227b26bbf0153bef9ed0aabba60d","db936079fe6396aad9bf7ad0479ffc9220cec808a26a745baebb5f9e2ef9dbc7","06bc0b9cc7bf0b92534f1517fe5adde1f23f60cc6cc5c59f8e1c65db48a40067","919a753b0cbb12ccc606c62e2d34884d75a48ba19b1dda497c72621b11dac088","2c27e33ee0bf722988da00abd582cc9b806ce3fd9153a864800a339ad13f3fcf","92d7b3a5aa5dc872e54cbad2a7094b3ea4f72c7901de1d07b4c334ff658297f0","7a52922b38e9686d5bdc6e75774929eec6688d26c1dfe4a03ddec77ede468e87","aa5efca2833d89b55248f1889a6433dab1b1f41768e9a75f8ce35f9bf56c5ec4","0ba3b34cbe39c6fe3ba89f7f6559f10c05f78cd5368477d9c95d25c390b65931","4e82f599b0cff3741e5a4f45889d04753a8bb3b0f95d0f3328bcfbb4f995b2a1","8354bb3a9465dc2e9ccb848564945e0818d3698b2844cfd69b0435080871fd25","1218398da7c8dc4add10bdb3aa2856aad54b123d847eaf574d1d694ac269bfb5","189014f3213ee7457dbeea04dca10ca5d9ed2062cd39641aca5f3b4c75de9d99","5b825ee191f38bd904e62c7e1814af3d49df7bbf2b60ab057bf7b5dceeb47364","7061e83d6792897077bcac039fccf7325234004769f591c63a8cf8478bf551bb","f2d2c194c4c6ba8cfbacf893e371cd8482102b368c1a5ea4771fc956bd0a6a19","277a358d61376fce7ac3392402909c96cf6a0a613146549fc0165ccff953e012","50614c808e099a1d4413786f3783d9eeaaa74b267f2c87fcf8a893287e91c301","f4cb6530f248e87cefa74ef623206fec805f6252f885f8e14ef3d1a5872cef2d","38c332caadd8391566552395d592076470a5e7423f70964620eabf05c02907cd","eb17b5bf1fc763a644c21d76572c0e41e351c3f6dfcde649428d5d829f7294d2","cb124162c87b29ff5121e3ee5bb29c782f101e0135d6c2644ab1b31d530a435e","406d6f5d3707c488362fb40d1c1f8a7b0a42b70554b427160185d93e430228f5","2e9776410c5bc290d9432a9215c67398a273e514a79b9e15f32ecddfde8a03be","b09f944ac37276adf242685b88e47123e958cf3072d7d97ba0881c5a29b8599b","c718475bca06806cc243e77777641cb67ba68f2c57321a4773ebb47760a3bcf2","96e6bf811343caab5112b68880905c5d20d9257054afac6c18e718a4c549ed27","a2793bc73ba63ca7d259cb0f0b61d0023820170d08a1f9715006c8042d060165","d5011b38165771fdf75a9a06d6d379a1fc7edd7eb695ebdc52319fb6e3c6d81f","88417fb19d339304e9616a38ea513251047c9e300c81f9467fc317df8a582e71","3e8e2d132f726dddbda57819f5391504e585cb3beab6b32203064e7e40618583","6e23627cd3f10418b5b2db102fdcf557b75f2837f266d88afac6b18f333bb1bc","866046dcea88f23d766a65487ee7870c4cf8285a4c75407c80a5c26ed250ef8d","019f4f1cbc781cc15c6173f8be5ef907405722194ab297127b3c3426e5368339","41f4413eac08210dfc1b1cdb5891ad08b05c79f5038bdf8c06e4aedaa85b943d","c79f1c8b51d8475dde8d2973f740f43ca34b1f0a95d93649cd76c1ee20abba19","35f0d2bd2c5c05c0cb19095bf5b7c44365b1c88efe6285370855b90417277a64","8264b129f4c4eb4799703f8e5ee2223a184d1cdbfc782158b1f40a88a4435a1f","527ddda6f8be1279f3294714534c49d6e90f238cea325519882ebf88d7ec5bd2","b23877792e8bd00271d0ec5d401b68e4228540a4316de3d9dfb697b955c161a4","35b2eb1de01633db90d41abe93730b29984856fcc840b4c2801bfd3761a2097b","2286ad8ec56fc62c9541ecca4cab5ec4e5cae7db9984505eac78c6c6699cba97","80071b83978711d5c6f392bf30ea0affacac42552d0d4e2a502bb032f6aa0fd6","a40465980e5f1b15e895a46cf34938c42893d1d53cd7b0d39abc23029e9a37d7","d505055b8fadd42da235c85947911d8d198ad70c5f5775991e7821d4f89c90f5","60e06661a767c3349a6de908271951e3c4d3ecc13acee23cc8fb8fd1eecd2d3e","0d1aa3341d1ad2064adada71c5d01a2f572e4aac09410e5616d90894105a0eb9","52494ca5a884da3bf11b8165ab31429715f0970d9c6383240c5666f4bd713e01","12e56c8e4ebbca564c01111fb453d7016f06629cc1eef9c832b1592f19e89d55","260f6fd0152c0f59735626b5778f45e3bcb3a970069a1e3fa0237dbd68f98f3b","aa01e521ff15c12dbe71918882948b38bd5bbcc525be46988fec5614dedae889","c76053984b39150d00ade365b096a8bc21a4a7f2ee9e0a926711b00f8e7bf701","02471f11b2d262f546482867d2138611cb2c889e74c127e486963312040e8e79","cd1a8ff61f5063d7e6e2094e25d35c90b499961b63911f2f4ae0ff5555c2b4d7","1cf09b5945779e9bc75c4dcd805fb149c28fc90da3335186ef620647a3c540e1","9cdc0b9a313090ec45b34ea1eb02fbace433f509e753634b043e9b83038261e6","c93474cff0088351a65d3cad24037874a26a5371a48528563e56efe31cb3d8bb","b4580df8ea7f62d7b06588001952bf69426e6b03cf3d2569f5f608e45f29ba08","de27f7bb9be9d8a2b4557ec6503b8a315f74d598ce9a0ab81b5ed5610e1a8e81","20a2880c3f9cd8cd7bed2d22f119efaf98e83610b4ca81ca84bdb0cf9a12327d","43f5c97e6ad84521aebf0423d7ece96f3c78f09156bf57a96f2fdd4328252e70","a5fbf3bc5c16ab5c84465ba7a043a4bee4c2b20bd3633d50d80118a3844edbaf","0923e4ac8c894ad507bd2daee0df66b699de88467201381ece011ba5a080e1ff","e4f6626f827ea509255647e1b6db82145a2eb1a6b46202655e7d9bb19145c33b","26e23972c40f378f0301d8d7025ea895557c2865a1a31c8ea9c3fff0dbc27075","112547f3832dd095dccb9533f24a5c25f0ec63abd724af6fa57365a1e0714ede","795a08ae4e193f345073b49f68826ab6a9b280400b440906e4ec5c237ae777e6","8153df63cf65122809db17128e5918f59d6bb43a371b5218f4430c4585f64085","a8150bc382dd12ce58e00764d2366e1d59a590288ee3123af8a4a2cb4ef7f9df","5adfaf2f9f33957264ad199a186456a4676b2724ed700fc313ff945d03372169","d5c41a741cd408c34cb91f84468f70e9bda3dfeabf33251a61039b3cdb8b22d8","6e87c0c1cf06fe7dd6e545d72edefd61d86b4f13d2f9d34140e8168af94a7b7d","cbaf4a4aa8a8c02aa681c5870d5c69127974de29b7e01df570edec391a417959","b8d9df5c49858df86ffa6c497f1840528963c14ca0dea7684e813b008fe797b3","340a45cd77b41d8a6deda248167fa23d3dc67ec798d411bd282f7b3d555b1695","b1f8c85b27619ccfae9064e433b3b32a11d93d54de5a1afdaeca23c8b30e38a5","0ed6417b905cddb85f98281cb3b5b137d393955521993d9ce069d5e2d6b26ee8","838e56d3fa57441618e56eb979b0e8e8c6213f5d7c73c03b218fff3e6e90e167","99d99a765426accf8133737843fb024a154dc6545fc0ffbba968a7c0b848959d","7004a79fff3fe69e67d2085f387b307650f29201af5087912a7b35a312a0bb35","883d2104e448bb351c49dd9689a7e8117b480b614b2622732655cef03021bf6d","8e1453c4f07194ab558fa0648cc30356c7536b134a8d7516edf86fd93706c222","eee530aaa93e9ec362e3941ee8355e2d073c7b21d88c2af4713e3d701dab8fef","ebf6ea6f412af15674333149f7f6561c0de9e36a4d4b350daccf6c5acbbf9fa3","3d26959cb8d1c11bf3cbaf17f8d2cb0c0488ab787fac1b222e924e04bd235965","7a0e4cd92545ad03910fd019ae9838718643bd4dde39881c745f236914901dfa","c99ebd20316217e349004ee1a0bc74d32d041fb6864093f10f31984c737b8cad","6f622e7f054f5ab86258362ac0a64a2d6a27f1e88732d6f5f052f422e08a70e7","d62d2ef93ceeb41cf9dfab25989a1e5f9ca5160741aac7f1453c69a6c14c69be","1491e80d72873fc586605283f2d9056ee59b166333a769e64378240df130d1c9","c32c073d389cfaa3b3e562423e16c2e6d26b8edebbb7d73ccffff4aa66f2171d","eca72bf229eecadb63e758613c62fab13815879053539a22477d83a48a21cd73","633db46fd1765736409a4767bfc670861468dde60dbb9a501fba4c1b72f8644d","1f9cc8013b709369d82a9f19813cd09cd478481553a0e8262b3b7f28ab52b0b2","a314a39426700ba2b5a76c01bab321bbe79cfef898dae996e930b017fc2b0af9","0dd6f973d2c00951d7cecc5b134a6be8c69e189a81add27997759015b1279991","88cdf97026d346751530dafe3e305e44e09f7535912878ff858832e6261cf002","9aee949dd6fab5a9910aa0675b7c0dc99f8e877146873832f5cd884e464eed01","44326789b0917971cb4b2513b3f7124042b6004b237697b450665025ccc36df8","5c4c5b49bbb01828402bb04af1d71673b18852c11b7e95bfd5cf4c3d80d352c8","8a4a75382ad915be014991cffdfef0e8d78572fe6dfa7f8f8eb748288bec27e2","44ec212fbf43580505de3d6054376ced252c534ced872c53698047387213efb9","4880c2a2caa941aff7f91f51948ebfb10f15283ff0b163f8ea2a74499add61aa","19c3760af3cbc9da99d5b7763b9e33aaf8d018bc2ed843287b7ff4343adf4634","c3befd91fe65a95f9a70f9fb62cdc98f0ffd28bebbc12ab09298de70f9cddc66","d1e22bc4ba2142678ca7e7a57b0df2952363cf6ee2546b820f38d46c2148cc72","9ddf8e9069327faa75d20135cab675779844f66590249769c3d35dd2a38c2ba9","d7c30f0abfe9e197e376b016086cf66b2ffb84015139963f37301ed0da9d3d0d","ff75bba0148f07775bcb54bf4823421ed4ebdb751b3bf79cc003bd22e49d7d73","69196fa55fab9cd52c4eecba6051902bd5adff63ecf65e0546cb484b5a279fb1","65cc10e9ccfba05590414409f6117b1cd945212ccf37dfb4bd1f0b8d3f8b0fe0","55156d64d3e528149e154b365e9589fd2f3a96149d33946979451941134c7a5c","31d46fc6e4ea500ee80960b7bdc35c6482500d0080c00d43469b776b646d1cfd","b75aa590b103f8491e1c943f9bc4989df55323d7e68fba393d3de11f4aae6bb8","b494648c291d0fb42660e97cca99fdb65d722cebf30c0eeb7fa390f205af0d51","970866cb5213e259a6c10b736d96cdfaeb65697bf2e80b4461f4edb34e4f463f","90433c678bc26751eb7a5d54a2bb0a14be6f5717f69abb5f7a04afc75dce15a4","e1d4f935e7b0e318ba0494b263852f82b3994a157bb117cb0f633f23341e021a","5a4b002e196dbeb469c1857c0e554db6a9cb96399e690e2bcefae00d1399cefa","e04fed17398173e5baca3e7b003b677ff9263cae758bcb5049870cc8a850a1fe","6d8dedbec739bc79642c1e96e9bfc0b83b25b104a0486aebf016fc7b85b39f48","da339d9811a07a5923c48e10f2e2668d043fdf085bea59d88ed25e34708e6267","c18f4f72a68275b7602e5968b862cb9b7b76ea4a1ac1b3e622f99e0b672569e8","0fdb1ed509382bd388896d3770655b0cda8c80c36f8c54b3899992f7a3a8665c","d97b96b6ecd4ee03f9f1170722c825ef778430a6a0d7aab03b8929012bf773cd","f55fc3e536ab193aaabb9b6ded5f93181f81294ee65fe3199c9f4415f0f1e53c","ec8053ec564993a885ba2e2c31408369270a190a332a29fac7a825bb7e60b37c","542ecc66e4fcc33f46695ae22b1d14c075054a78c019915d556636be642465af","476b5c25e85b94e15d761bb9503f55fb11e81167df451f187f5080fca825273b","72636f59b635c378dc9ea5246b9b3517b1214e340e468e54cb80126353053b2e","ebb79f267a3bf2de5f8edc1995c5d31777b539935fab8b7d863e8efb06c8e9ea","ada033e6a4c7f4e147e6d76bb881069dc66750619f8cc2472d65beeec1100145","52ff5e1ea35c54428b46c75fd14f87b7a7158a8f4a1ecfc4a9b996a03185c738","605d29d619180fbec287d1701e8b1f51f2d16747ec308d20aba3e9a0dac43a0f","67c19848b442d77c767414084fc571ce118b08301c4ddff904889d318f3a3363","c704ff0e0cb86d1b791767a88af21dadfee259180720a14c12baee668d0eb8fb","035297b9574f4c15f2eb0ec28b631ffd242236c3feedf58602209b245045d94e","da665f00b6877ae4adb39cd548257f487a76e3d99e006a702a4f38b4b39431cb","0d276d377a0bf0f35e8d7a5b871922ebfa6aff1757d1bbe27a7982b15ce78516","9cbb45413acfdf0cc384d884de88c3f951319004450c88a2bcdad62a11bd21d9","d7a4309673b06223537bc9544b1a5fe9425628e1c8ab5605f3c5ebc27ecb8074","ced87f58b05e2b07e314754f0a7ab17e2df9c37ee2d429948024b2c6418d6c9f","daaed996a21f3bf223f5897e9555ab5388e47cf4dc2a46d646de98b254a80e24","3ac0b94ba8f884f63d38450ce9e29ecd59ff00805ffdd609193d7532b8605459","a3684ea9719122f9477902acd08cd363a6f3cff6d493df89d4dc12fa58204e27","2828dabf17a6507d39ebcc58fef847e111dcf2d51b8e4ff0d32732c72be032b3","c0c46113b4cd5ec9e7cf56e6dbfb3930ef6cbba914c0883eeced396988ae8320","118ea3f4e7b9c12e92551be0766706f57a411b4f18a1b4762cfde3cd6d4f0a96","473bf3574a48185f71b70fe839fb1a340a176d80ea7f50dee489c2dc8e81613f","2b14b50de7e32a9882511d1b06be4eb036303bc72ce4a10f93a224382731500d","eeb24fa259f000f6b51a1fe89123f55de081eb2a0ef8d8f847afd67af49cfb68","91d8f3c1c3ae5efb8564ec7cb1f8ac8bf5714eb94078fb50a761ab811963e324","e21bb2cfbcdd8ce7eebb72422f3660806724f2b16cd6ce126d527511abb3a379","c04146836a55ea071b435298335e47f569db0e4d3ae420e35c83e448f944192f","31f71fe23daabea143fc8bd21dae0d5908227180fcda38ad3674df70351f9761","760408bb4f8dccdabcec197d1a3ccd453c70b0a877f49fb9586d56e57972d4c1","5e708f74430b99f0d7234aad17a03ea3f20953b70a9d483e944cf6fd4c5bcad8","c73024f77467e950214c5ccded56b9f52a30413795f0673d55ed34d4a3abbb80","44119efe5bff6e427cebd594b5ed141b70e4725c12d0f0bdab9f422433b82534","6c32e45004393346be19d018d5f6935cce22bfeadbba88f47dd5455120566f56","38241b58e1f9b3a9dcc7d868bbfa4a6aeeab8ed6631259533f9133111c382cba","a2d7ab8f8ce3402f04c53565dd0bd3bcf54915fa823e7e2bb354c8be30e77531","5135b998e8a38739e35e277b9cf7c099700356d2e67f49aeacf469e26fc67914","c9a309f77585b4bc473a6119c0b278dff3dd601f150e0eb47df7fbee1fc57ca3","17520948e5661a97753b251b6c8f120c5dec3146a8e6fd311fb7a0fc29d05c62","3c50345b73a7f3e26b9f934050d9345d6138259b6a33ad4c76c767e831e6fa2c","d2230911663e190e544bc83a64467abe2c723969a687f19d55bdeff068f07be9","8a316369d7d99cdd3c94c05dd13945edf81cbc254b307a808c1bb6cff4bb32ed","19f53dd3a4fe3a0d14b4921d881fcf7b4b6d5e93c1b59b007cf17ee81b72b9ce","24d03528b32b500a938ed85963becf5032d0fe554c70c29a55d533224ba9150e","12417842c8569d29558df33faf50b3d43b1d1f4d5ff0ebec0647620442d27081","8c57da766ebfe9477023e0e6dd8b3b17bafad363cd4abf220e27df01fba5eba8","5341c8e84b5e75615ec1b9443b2b3485048fb3536a64c468c7d86be8f8d535d9","c7c0814aac0ffff6415448abef7ca8ce3ed78bc290f6d4d400bde64103350a5c","5046e6a3ee887d2037d6417a6a2a7deb674064f19e5b6c917711198597ce905e","d43e759e21c40c06f5228ddaa6a35ef1ea711c4fa1d2f3380789d27312b0bbfe","1874e5bc5f6f0b4007608ea8cfa36c8883d3f9be8d51c0881ef1c913ea0ff169","b9c89b4a2435c171e0a9a56668f510a376cb7991eaecef08b619e6d484841735","c7bdc99177a2a94d25fb13722adaaf5b3291bf70b4d1b27584ba189dd3889ba3",{"version":"41a44aa1929121f5c3124733b5ca9c59717a092b899b3771cc983939ae99eeb2","affectsGlobalScope":true},"e23424b97418eca3226fd24de079f1203eb70360622e4e093af2aff14d4be6ec","a473cf45c3d9809518f8af913312139d9f4db6887dc554e0d06d0f4e52722e6b","297f4ea4e4a5161a6627bc65c83040a91e0792e92bdc4764e24650831cc9867c","04eaa93bd75f937f9184dcb95a7983800c5770cf8ddd8ac0f3734dc02f5b20ef",{"version":"c8155caf28fc7b0a564156a5df28ad8a844a3bd32d331d148d8f3ce88025c870","affectsGlobalScope":true},"45ac321f2e15d268fd74a90ddaa6467dcaaff2c5b13f95b4b85831520fb7a491","5375c30f03b01e610f7370e40ccf3ade1d96de99e9a9a9a0cb0f96fc98aefb71","797a9d37eb1f76143311c3f0a186ce5c0d8735e94c0ca08ff8712a876c9b4f9e","5cc0a492da3602510b8f5ed1852b1e0390002780d8758fbc8c0cd023ca7085f8","ec7dafafe751a5121f8f1c80201ebe7e7238c47e6329280a73c4d1ca4bb7fa28","64debeb10e4b7ae4ec9e89bfb4e04c6101ab98c3cc806d14e5488607cfec2753",{"version":"2866a528b2708aa272ec3eaafd3c980abb23aec1ef831cfc5eb2186b98c37ce5","affectsGlobalScope":true},{"version":"a5782d6cea81fe43d2db7ed41e789458c933ab3ab60602f7b5b14c4da3370496","affectsGlobalScope":true},"bd30510d2d803f453e10604277088a46327f5f0b6aa2b957306c458d7428f8f7","214cf066391a5a651001ebcee2c21ee4d45e8124579d271c59d7c2343bb9d29a","d28c8598067b15c7643558b936e68caefe5d171d0e629e19e2aa6ca870bb4b00","15543feaed3ce6b96bc0508f3e3f8b8f729fae62d0609bddacd483145e71c594","13257840c0850d4ebd7c2b17604a9e006f752de76c2400ebc752bc465c330452","42176966283d3835c34278b9b5c0f470d484c0c0c6a55c20a2c916a1ce69b6e8","0cff7901aedfe78e314f7d44088f07e2afa1b6e4f0473a4169b8456ca2fb245d","6ea59cf5479f3fad5db2caa4513d8d06d6cfee8d8df69e7a040c9b5b7f25f39c","69640cc2e76dad52daeb9914e6b70c5c9a5591a3a65190a2d3ea432cf0015e16","3ec1e108d587a5661ec790db607f482605ba9f3830e118ce578e3ffa3c42e22b","2e37dc691cb5511f49be0f8ba0df3259aa0b453b0098b436e478e60c06567ae0",{"version":"dd3f82b87fa256e7c5a66c9b8ddcc9b53275b3531c10a769722c5103a30a97e9","affectsGlobalScope":true},"7f77304372efe3c9967e5f9ea2061f1b4bf41dc3cda3c83cdd676f2e5af6b7e6","992c6f6be16c0a1d2eec13ece33adeea2c747ba27fcd078353a8f4bb5b4fea58","f6ea38ddcee37ec1bebde700e3a4d85040bf2d239600c877ecefd9b265066b24","a6b0abdb67d63ebe964ba5fee31bc3daf10c12eecd46b24d778426010c04c67e","1a63584d6605d1d5b5fd5c4fa2dc2fa5a2134aa775fcfd95fbdb705971c9ca29","fd2298fba0640e7295e7bd545e2dfbfcccbb00c27019e501c87965a02bbdebf6","4fd3c4debadce3e9ab9dec3eb45f7f5e2e3d4ad65cf975a6d938d883cfb25a50","f49709e8c096b05aca0674d39f471aa05261de7c756df9abdf4a53ed0fa98901","baca27d1de400e027cdc70217ca73e414002baef5798aa24a921097c20066fa1","75b9229192e6da08f6e06daa2b9243c251e14f179dfcc9cc9bf02dd70eabeb48","7df562288f949945cf69c21cd912100c2afedeeb7cdb219085f7f4b46cb7dde4","9d16690485ff1eb4f6fc57aebe237728fd8e03130c460919da3a35f4d9bd97f5","dcc6910d95a3625fd2b0487fda055988e46ab46c357a1b3618c27b4a8dd739c9","f4149f1aa299474c7040a35fe8f8ac2ad078cc1b190415adc1fff3ed52d490ea","3730099ed008776216268a97771de31753ef71e0a7d0ec650f588cba2a06ce44","8d649dbc429d7139a1d9a14ea2bf8af1dc089e0a879447539587463d4b6c248c","60c9e27816ec8ac8df7240598bb086e95b47edfb454c5cbf4003c812e0ed6e39","0431a29ecc5bb615e6d6d1709941bdf16e708f760099d017f5408a1e68e2d248","4926467de88a92a4fc9971d8c6f21b91eca1c0e7fc2a46cc4638ab9440c73875",{"version":"2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1","affectsGlobalScope":true},"4e0a4d84b15692ea8669fe4f3d05a4f204567906b1347da7a58b75f45bae48d3","1288f8ee930c03fd535824f8fe852375ec7181d73e4c1f445b82b414c95c5bbe","b3593bd345ebea5e4d0a894c03251a3774b34df3d6db57075c18e089a599ba76","e61a21e9418f279bc480394a94d1581b2dee73747adcbdef999b6737e34d721b","30368d3789ec56ef3006c5f2115bd00faa21471aed6cbe6fec54a5683e5497ed","d22248ab663792d0c58721fa29e6516e9e04c8981971390bca1981ba7ae069f2","89049878a456b5e0870bb50289ea8ece28a2abd0255301a261fa8ab6a3e9a07d","0d892f035dbee4534f0ba096407136877595ca592f67ec9bb8a5c912b9c967e8","fb986dd9763020d8b0bb92257a2be89f18d286947762d93788b8518c4a3db2ef","7d80d85fbd6b4e0fe11dde5fcc9aa875547f1ec1a499ca536a39b55d4e1ba803","89d8275e44668b0869d4009258aeb1949f6efc5fa12bd9cdb9d57bd3b868cc72","fa39c1480d2cc6b9474b6a5d7d56a5db98ae9c6433a05581551722a603773ce9","3a93e73ecbb7a89241c58fcf30ecfbf788c3e98d01f5eab4573ce0f8635b6506","66e351f3739da4f30b9a0274e16b3a850014931896f31d568746a3056076fcef","ebbe6765a836bfa7f03181bc433c8984ca29626270ca1e240c009851222cb8a7","b2f2311d7085a1feec3f6a85d7cc8bdaf1d976de1874c1f92940ad8ce6a34d39","4ee1e0fea72cd6a832c65af93b62fbf39b009e3711384bb371b48c9abba66781","89df6c6a92c4501a0455a9d94784da870bdfb4034a139c4878bbf5fcaaf4f19e","8f0ab38ea72ffbd177ac897c1b559334362373261b8bffda7950ed3961a8fcc5","425208368b07a6a747f13975d261688c6a874a67555a3fb518fb52f42867e394","36a789256b8e764f16c089ca9da548fea3e21fb268cefcd1ee7118fbea39cbd1","19143973da1c331e9208a76c80a4ca57877ca15bee0d0803b4d17a021ee92dcc","8aa451aa2c6e762f359e6fae74e2903f6e3304b1a5ae19c1da548128ddf25add","e3f5060e98d678e320df7fed7391e6c1291849df4b9e36c8b2ab6dc5604d8f37","380970ed12c5382fa1bd36a84c8562b042aeafa6de618a64d27e682e493965c2","8988b098a2a3a905dd81fb70a9317dbf201a617755b080f78fe57fb4f225b414","9c89ab413cd620c91d82ef9a9631eca3fe3b65090df1cc729a43e1fdc9f8ed37","5a44788293f9165116c9c183be66cefef0dc5d718782a04847de53bf664f3cc1","0b7109542117ad1529021dc091535820f0c2c42cc2399a751ba8af5c119af6a9","f17306a88cec446c77ea62278ad8b687421364ebe8389bc20e285d986bd42be9","9f96b9fd0362a7bfe6a3aa70baa883c47ae167469c904782c99ccc942f62f0dc","5df9a68835c1e020625127d8c951c90808d319c811fc3a780d24f64053192ea4","71807b208e5f15feffb3ff530bec5b46b1217af0d8cc96dde00d549353bcb864","0e002af73ea5935edb79a3ec0bbfa4b4d40531024b6337cef9820e03ddec03a9","eaf8514ce110fa428a93a27408df4d06d133dbd9ed0a775c315ddfdd507853a9","19cd9f158ce1e57a4600e50acb510d51088a32a96c06240f86fe748e42f8e19d","e8397706c86e292c91da56e667d74bd4d002162ef530b2066306109e1e14c96f","ef7487702b8defa3ee39f8fdabec8c9d1b71c38876eead531d2b5b16b56d887f","839d15098cc51d756b67acda281788779645cbf8e95571897951afb52ea6535a","443e3123c41da4e34ba5bd439b892f01c8af842692bb943a1c5f5dccd4d3c764","88269322ab6ae98db5f1a3e8613ffc6fc2c9bcf1847cb48049e17041be9327e2","b4896cee83379e159f83021e262223354db79e439092e485611163e2082224ff","5ca76111f37c0dc0c45d61af5d0f3617f5e5bb2005038613d5b2567f10007c34","024a824b366266620afacf0471dd2c93cc6451206c28a3e700879639ad1be523","ced3404358800496232fbeb884d609b9ba7e2a4d7aca3dfe33beea0e59f1785a","6731c20a2276ec2eadc75b4a5cd108a56850a686a540c229c25a3bcd00c3fc57","4de07e8ce11484459d8b81dc331a4d8c41ff6876ec8cab81c39a3c16e260a5da","59bc40dd2befe9acb76a7d9b6c9438e9ee1c470d3d8f11605a8d449fe93e2161","aadc9a99a877b842474c622500d983eb1927f6ca27374f1b94e561bef54e5997","f9e034b1ae29825c00532e08ea852b0c72885c343ee48d2975db0a6481218ab3","2d83f7d8b38d5941370e769e98492fa28c1112cbc976958522bc92a11b8234aa","8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","222ebf19b1260582fd2023a65c5b7da77f730021f05afb9c4ead4b0b339a8c98","6fa89ecb38fbf2aedef350744e230b68cc4a884ef7b7eb4cd347691b032fe3e4","ad4277862bdcbe1cf5c1e0d43b39770e1ccc033da92f5b9ff75ca8c3a03a569b","c0dc3e6460b765ad7a83b30afd15e1ecb70c5875e539f0219c4147aadcee419f","9f9a648ac2640595ea3d2278f9640c6d628a34bdd679a859ecd31e965bef0d93","bed6c7b84b7481bf4c63b75f04cd156baf3a1e563c12fc66a6fc2aa2d7c6a889","244511898fec5159e9e5d00880e33745a947a09cb9007922dbecc60e007cda6c","02904a3994118d5f9b45699aca81a6caf7d630e1b97f7806770c772a0d89f045","266f841bfbb4358874546e9b55f87c99f0b88e28c42544be9cdf7676a9bbdc9a","f10f3eaf960d85799ad9e65d8a1d0ac75c07a04991fb527ea17454eb4601d129","905fd426fbc5b7ed3d7f7caa57e1bb66f515f54c7a7e52e79bfdc5599fd62025","c3218428a1422d031abb242c791f76882a959391d676697c52c58feb123cc739","8744deeec972d07732ef9260eff40135ef860660f5613440a0e2060f9263c39e","4cea506dcbfb8f7b84d27aa211776d19659075bbf68f898a8643fc461b120c04","fd6c35310a36015681c832280d6583cb3571b04b5523e033a6f010b34db4c1bb","f855d47e6066386d0c85b891c9ee4870b34b43d55dcb3563e59e60c0759be6e4","63d8839c609a48c023dea11798a38e09e3b9227ba99756d45930178e740757b6","3d9d985d41e536fcf79fc95082925c2f1ae5ade75814ad2bd70c0944747f7ac4","bc1084ef11aadc2199b7bd85c5fd2ebb5dc772983bb3e42db784cd3696868d81","fff823cca0eb5103f7bd05413e50c1ad99ebe62e8edb273de0c43b507e91e097","cf4dc15ca9dc6c0995dd2a9264e5ec37d09d9d551c85f395034e812abdf60a99","e74babac0be57a8e13eb69efb67286c6e954625978c67449e679267180ded327","4cb49e79595c6413fcb01af55a8a574705bf385bd2ec5cf8b777778952e2914a","d6b44382b2670f38c8473e7c16b6e8a9bfa546b396b920afc4c53410eeb22abf","3b5c6f451b7ad87e3fcd2008d3a6cb69bd33803e541e9c0fe35754201389158f","548ef4a7ba09bdd5a03e3be32ecfd4efac910d86691444f80f56d95bd65d6d9d","acfb4ffe871c6fa06d1dc0412cc8fa808fcd8a05140941ed9e5346004470b6e6","6469c21248f776364ab445effc4d1fe989d267315d4659a55a889e217c64f579","887f9008110a20d9d4d92bff1690a03da2850d66fc7a6132c216340bcdf201e5","b84e95b1ee751a809025e8ded4953cd577befdabd95960d89dea4574418eb128","4d26f8d4e5c2a8de9285e82ea0ce5f5ed986866b4a77b9082536a732e7f40c36","83764e497171dc4d91dd7c7041c09005eaadbe43ddcff075d771ade44a1dafe0","42f44c5a2957b5ebddf155f15c111f281c3446e55bddd6a6cb9505d7a683ee58","b19fc2f23b90bdec3fd4c82e4925531bbcb14faf01b5b193177c400589cc3e38","e1785750052b51cfc48f5b782125479d52645146d58805688b46becabf2f6c81","edc60810bdaf64cfc55c1dfa18e1da2057e4cffe392d7096ac399502598e7449","41aba617a085c1a44c755475b21d44fd000b56f64d8d7c0729e46d66e685bb10","215004d34fc5418fa2d047440992c6a55993dd1d808a0c7991a7cd7688f49681","072f911feca3ef3dff9db1f67c356165252406d2197b43e159048b514c14b7b5","921274e649ce4eafc40a63f0f155bd5d26d4ed8e6d3002c9f0fc066fbcb718d9","7d659e9b2e21d1ead6a231cccd32fe699e3010bbd4b12b98557f689eff8ac239","7fb70d7f30c470727131eabaf523607414b952b959f74cc446bbcfead5682e12","2224fbc4f081b1d05545253cb258eef7f1d01aaf33363b9187cf3bcfffd9869e","2646e316872aa61ed09e6272fb07ecd766a7977fbf37080aa6429be40907c1e7","eba381266cc05466c11fd964a22cde9258aa38c5dfa03cdc5964b3913e33b38a","91464e0beb8309e6694eb09b58777bd1d86a058b69a5752d4600e1550fc5b22c","6a219f12b3e853398d51192736707e320699a355052687bad4729784649ff519","c86fea295c21ea01c93410eba2ec6e4f918b97d0c3bf9f1bb1960eabe417e7eb","4294a84634c56529e67301a3258448019e41c101de6b9646ea41c0ecdc70df92","55f75f5fa3413eb3a94bc35dd1493643a69c8696af0a817166210a80b01841b6","27f24ba43083d406b372e9eff72dbc378afa0503dac1c1dd32499cc92fc9cb22","12594611a054ca7fe69962f690a4e79922d563b4b434716eb855d63a9d11a78f","276265ce4c584e1c48a326adde8c28256988f1e46f8b2bb44e864353dbddc372","c1936ce89b6aac997231b46d32228e924573d023db7b48504060bbb8604d42f1","4d2644244dc91caad6af16b433cc6bf3bc3100f560edf8e579d95d6dd21ce10c","b0e6f1b1569779cf567317c2265d67460d1d3b4de4e79126533109d87dc16d50","cdd8bcdd627ca9923b440262b4e3d9be61ab110b5778e92ee72ca83f59bf061a","7a8d78ea4e51c14996d9e405158495454fb6f32682660f5ee35a9676a6988585","4c608b30e56a915fa9ae7392127d2c2dc1c6840eb5b031f4c52f1011403ecc79","80c538ee6a62249e77ba3de07efb23d4a7ca8946499c065261bf5079f1cd3cf0","cd35dd975be415abae8a5d80ab2c7522efba3bd991aaaa40f2e9708c8fb53d93","90d202ace592f7b51b131a5890ec93e4df774c8677a485391c280cef0ea53f48","b34e1861949a545916696ef40f4a7fe71793661e72dd4db5e04cacc60ef23f7a","5994ed389d7fc28c03dad647ecb62e5349160bde443b0c7a54e0e10d6368bcbd","e1ff7df643e1aa1dbf1863113a913358844ed66f1af452e774834b0008e578b2","c349cea980e28566998972522156daac849af8a9e4a9d59074845e319b975f5d","0370682454d1d243b75a7c7031bc8589531a472e927b67854c1b53b55ee496ea","5936606abb65de6fd40229a5f19975b23e09bad3bb4a56c7d122cf3569038f13","66e6c7792fb75f40b2721367b9b5db188614487cafd30008088ae50a85618f1e","f7aae4a6c2b1f77c184dac096c3a4b9f2e32d4d23fe73ce7f30141912a679097","81dfa060d1bd2af2a0ca909edf133b88c06b783b07378b68f1e7750677aa30ce","86038e3a6821c05532dd1dbe8183f735a26585137af10fed17807a20df861ab8","1489106535f442d603fc3a51b79e82fb02271ed6b9a86ad16a701125232d4944","5171b8b63146618b3163b9422fe4478b99e296362957d1bbbd7891670cdf6dff","c0df860f73695699aadf57bf4ed9884de07e4744bdf9b0f74f0707ad9a5f0c0d","5eb09226bfa1928721a438e37c004647fc19d8d1f4817bddcc350e57fb32935f","2752e949c871f2cbd146efa21ebc34e4693c0ac8020401f90a45d4e150682181","cdc8f77efe2cf6361d2b79395ee8ba15adf8bdc22e8c3bebf7bcd0af9dedddb8","1f19859b5b619258d8d83f7634ec0c326f95e282726562918da4b089b24daa26","338eef608f7e8c0d1c1b5f7729572289008875288a7a86a922aa0e94c104ca10","a09ceb2a8c55f2dac2c2e2aadf0a2e209ddc88015b40fc57bf4135d38bab1083","38238f963c0d8f15f865c831d3adae1a33ea8773bc8ca55717efd4d9bf2b0165","1c92595b30c0ff3f7d358f4328571a08aafd5cdb13ff69763a6df25dc358cf52","a152b47027da5f278b1feee0e9abff8f026fb911c0e848b6273980812272b571","c341d6286cbb548e9910ab0c1ba1b9985df138419a515d671f49b1fd4d65b29a","e246b14be6df6cbd0076f1e9f2e42193e56481579c554c7d361dac0c3a6d01d2","b96760c030c41fa078b35ea05fc3e7e4d2a81710a8329271d42b6abc110d5dbe","e48c779f2ed51010907b3be4015586a6c2ab72055edb26897984379d939ede98","174a3381f98fc78c451528cb1aa1baaa37a51852ec6fa90d42efd876301537c1","1154ed167b954ffb24a95ec3b11b1519a597024e7fda1df63c144962bc523aaf","113a6b4ff18eef30defc70772d63cb27f54a1b42aee75a7d22987d2bd040b073","b6bec0d2022c0f9b923d125fe833b1171b5a43acc8e2ff94ca8fd1528e6ea675","50aa3a76572abfac7b911ded8153dc9257ddf4fd49b797479beef3b8b9aa1d28","c9b422ed938d62f1af18290949ee2184b9338011f36cb299e1950f6da52621d2","3d855ca51e9e1b40140265a003600488d723d926d7c1a04736a5883fd23767ef","04d5bfb0a0eecd66c0b3f522477bf69065a9703be8300fbea5566a0fc4a97b9d","09423fcf77b1f327971c2b22ee16e744736a403b33e414fe54325296537ac9ac","f3f4278ff190e4896f44e1853bb6846be75e2fdca494a6d553f375f97424a516","a945caa7e11a3671c7b9bf3f383e5f8ebeb90f35b66ac395bab48faf9752aec7","0886e9de5fccd636d23bfe8223dd8d616d653c1c40a801a28f9c87be6d6a901d","a4bc52405b5e5e7b1371ed38baf9dc693833cb531402da9cc633c48ab14d4d4c","15640a3fd0e6bc66cde18ed25f0cdd44c015bd0ac68ac0809b4ae30c20460d9f","a0b52388e287a453c333dcdbdfd9e450174d1a00026152e9f25641e7f3a98d4c","bf933fac182d47797b18f8fe63e56a300f924f1bc1fc1243e55ab7ea045a5fd6","77a1010705f6cf4be6cc24701d8daa472ae2ea855f6e3d40409150eb3d687509","fcdb3b7823e8cd2da703a7eef46e7f7de53470c60b8ea0659c608022e8f6ad68","73c552edf6829902c0c8ac9ddc658e9180e28ad1f97e45c576b9e2d2f5c0098c","e8548661f677e96836b9b864b6fa7ed94e2a62b8c05284bd689ef23934573841","3fb97479497f8ca1c32d2a42ca3dffdf9e1622b570a3c3ad86676d8e11e3f6c1","22d3e253886bab94c7c452865c8c9ee2592acf37a7f497e48d6a7963262be2af","247ee0b7d2796444a3481811b5ce830a5fa289f40b310f0dd024251e91c7e179","7173502081d153bd441c3c6e053984bf390961fc248e5f7d4b41ae7747839359","d0e7cdb03d554da843a370d4101b67773cf46562eab79a359d92b58baea83bfd","4a27d7d364f9674aaf07e6275cd1a2061b1c3ebccfe1e7b143233948160d9ea7","ac3a69c529ab256532825b08902aec65d0d88c66963e39ae19a3d214953aedc5","d5e3e13faca961679bed01d80bc38b3336e7de598ebf9b03ec7d31081af735ad","de05a488fb501de32c1ec0af2a6ddfe0fdef46935b9f4ffb3922d355b15da674","733f5fed6c0e8717a32e8f4145566fc9819dd7b39c9d88973c834bcdc111f454","1cf086abc7abb48f994d986b3cc6bdf70c343a5661315f6bb982378b21b55435","4707c2fd3cc63371167c5b935c3dc66b10ed13c0106f4527d910892837929ebd","74fe5c4fb7d9ee01e8690638e4b60a14b909240c14632ac4e7662995ad004b90","3c725b4c73af44a1eedda6cbbea47d8fdc71d464e13633750aebe0af76bc2469","2ace4de1fab34cf97be8a9e6416b58e931d163d26dee881deadbe2571e40a401","76a53f6b4062f3cc3c54d2a8b731f4b8d2782a7d3524115d3c977ca181306f39","b3ded8e50b3cdf548d7c8d3b3b5b2105932b04a2f08b392564f4bc499407e4e5","4ed2d8fb4c598719985b8fbef65f7de9c3f5ae6a233fc0fe20bd00193c490908","53a86aae1d9aaee78c042d6ed6695f301663114f62b16b9d061fbd711ef69d36","1e9dd4dc39eb80dacd5573944aa8b3f84854e8397ac3ec0a86feadd4e2ce40d4","c20fe75426bf9281b4b5ac93243ca7d93c55d9e9f5146b755028a2136302bef7","b94900f0dd2fdbe8f59ea6cccb6a5c851f4abff9e77fbb3c48a5a92056c32069","a49e3af85d547004bcd8535e19b328cd39f7164abcb4e10e52763e167740abbb","9b1f38160faedf5b9fa8b547c095c9f657c64f0704d8cc9b0691627cee7aee90","abcb5db28886eec7437cb341a42fec07580fb1fbc927d1bd4f0f22b558a7aa9a","dfc6bb11e082c55d793f64c4b35d25c81663a36a1442e1f4e46db25af695d034","9d1d33309b69e7a14fcaff4c9e948071a3de86492d6a45ab74a6b5106d093fee","80dd7db750a7bbe85e298bd4fd2bfa4043d1845c826940049ae052fbb29d07e2","833f0c05b6f98feea4028eda2de08ea075a5094c01805399a6d93657dbab1ccf","371ab2e2daed8d299bfe0c5fbf1e5a588235854c5f705704540f61e3127cdbb4","ab159dda8873292919fb0d498cafd4c922c2969928eced2b834062b4ffc2d7c7","c10324442297210833600b677d3c5478e839c0cf5c86630588c5079d81ce9446","3e855437e99a09e54d2813e8e0ddcc78caf14dc9709c35ac93cdc35f2b581abd","c5f040a3f96cb9e644fe69e77a017f69833c891d9943dfb75f7b9707337e7cc2","32f9169fb6cad29917b3f1670550df48ba30dee34dcb0bffaed13947b2e0d2d2","4027d780bc319848cd04dd650d7d458654e49c8675ce60eb42ce9850107cb68a","c1fa8be5a9ffa9bd54b74a682971f33dd99224e7238caf1ba07746bac2426592","59c2cbf84c22fae87f4f506f36a7258a72b931b602115067dfd6008ee526f8c0","0df643bb575cd1f04cf2df32613dc6f0c29b9b941a69d2656bfe2868c55f1872","88273e80cf190b22384a954487c3d401595c4a67e939bfd92d1f5c4d5a589d26","6aee50a5285d7d0ffb297c4696bc3f808b834693f9af5e406836184954162acb","252a2d81491b049f72d868d5c6fdf084eaf69fce4cd76d59d380e4552e6359ff","69ec6331ee3a7cd6bade5d5f683f1705c1041ff77432aa18c50d2097e61f93db","06f34a0f2151b619314fc8a54e4352a40fd5606bda50623c326c3be365cc1ef9","7ef2a14da62d77cb343dc94f7b0dd394030f779a8009c4d0bb7ea829f26973b4","acf681c7f70b9a51256aecbfeace13b4b1341f0f2f646252d80810eebc7d54d6","3b3865dfc48b75d6d8e2f59ff29d3253509a8efbc51cf7d1ef13bf6b3f52c0a2","74b79c7994a5db331a82cc4c062d65923fbd34f33f03fb50e66cd20b60e2d28f","c1ec0ba6d8f3af762f96c29feca5da12de892f231c0216aad20f0fbc18f07c27","0e3aa780aee28b1eb2b2bba6c087e92d8a93eddf6aeee81e2810b6e40b0d6fa7","99f5e2875ce5aea1a61d0141504c56ccc31891d7a646d30cb73c8bbba382e9d2","3d4e239b17f413be13c0e53e557cf14183d422723edd401973971a375150c8c2","6efaeec542f15491c801163235112984c76e2972b09a88ce07eb9b3a71db6270","d20af22b435bd3687cdecbd30178707cab80a8d9a46a303a6b128b855178326a","b2efafe67c811e8e2d8d35f7597cf42bf2b3aea2b9541efbaadf082c3c5a9cf5","f13e2c4f2801a74e3c3c49abf7263aafeefd0259790e2d6a98b6a729e7cd5391","d51a2e050c8a131b13ec9330a0869e5ac75b9ac4ebde52d5f474e819510b5263","e8673f544fbdf3fcdefe68fb3f91321b2fc899437b4b2798232654a3a0f55dbf","b321411107b4e737d1590ea1a5ea33c668c06cf15caf182ee10a9adff4b36796","e78aaddd9e825e66ee7e7a1cb1553a7ff0cfb4c23dab6cdf11af3a6823c9cbc0","05e02584e052f30a263a141de067b59328b021a1814a74c3529d7e434949da54","908186650911cbfe9a5aa005ad1ee610d13d02cb2e4a27a9e1d442dfc21909bc","66bf4f1c2021505f93b884d58bab7b99cac6fc580e615009020583fa51d79912","6526c8e71000d8ede48d01458a1cfb4f74908d94787d67fc96b76ad6eb8c1008","24613a9b486960ea40f97c17a5178d2af64c808c36009be79c60d24f207b2029","6be41273ee5b875922797a963876abeae8a0809f1a2ba778fcd99ad5f3bd0131","a1f0b34cc15f90860a4e5fec964c38b8a31c9eb7856898f6d9cf30151c251f35","05d41b3e7789381ff4d7f06d8739bf54cc8e75b835cb28f22e59c1d212e48ff3","ff8c485f6d39157c29e9196f99b0e69b13508b84bde6b51b01f8f3f7cb35f4b8","94169a40e1ac690c161c8e61b388d298ab202c9b95a885532d2e54686e24adb3","f63be9b46a22ee5894316cf71a4ba7581809dd98cf046109060a1214ee9e2977","dd3cc41b5764c9435b7cae3cc830be4ee6071f41a607188e43aa1edeba4fbb3e","b2dbb9485701a1d8250d9a35b74afd41b9a403c32484ed40ed195e8aa369ae70","5aa7565991c306061181bd0148c458bcce3472d912e2af6a98a0a54904cd84fc","9629e70ae80485928a562adb978890c53c7be47c3b3624dbb82641e1da48fd2f","c33d86e1d4753d035c4ea8d0fdb2377043bc894e4227be3ceabc8e6a5411ab2e","f9ec74382c95cbc85804daf0e9dabed56511a6dfb72f8a2868aa46a0b9b5eafc","be32c0a0576265a4dee467f328c5945805a832e6268d312ed768cae1f2666fa6","4dc6a62b37bbe4af66ef387690b6493c984eee96d0e5e9979f17ecdc098f520e","2fd2d6c802eb50c397fddd625001c6e3f3ffffac0326143cec351ad3b6429d5f","12557af6479bb03b8cf4702c197050d8e9afa0cf5ae7a41ba9af62634069883d","868914e3630910e58d4ad917f44b045d05303adc113931e4b197357f59c3e93e","247a6d07530c7f4496d74afde8e25dddece9f20222dfb1f028a2faa65b90fd04","b9143dafe34190ae4b07eb05bbcaf4fbf7fb95b22e773c97d54d6f94cacf1ab4","cf296ae7bacd8f44c8b6343138ae9d796bfcea93d9f2cef342e70d3ae8706e8e","cb6a7a9b06fb90459fa9539f6a99b302934b8912ad0357ecdd0e6ec4d352e653","07ef532c5927b7e329865eecd5837684b57389a1012640ce4fedb259449082b1","43cc75e1e827af9f25fb39605f886a5d44ac8e1f89799270de7a6dc0c108fb56","bc5b5249535d4e1fd2006fe276262b8f98b2fbbce6b2994e576bc5ecb79c8efe","900db255f98f3f64e0b0e21a446303b2523598e6ab169228b936d5173de0f35e","ac78a07fe80c68b6114e7ef6c7c7bbccd0d4f3c53c2ea3d3fc9cf0fd39ae6fba","76499b47b4e04efbe12ca9c89c539a8cb8d05201b15c8d58a7083b1cffaf7d8c","f2d8613726a4313bdbab41f5071726ff22ba39fe07723f2aeffc00953509f2cd","804acb136672c1b0a75df9f656f9d444e748db31e6010e02dd03981118261ca9","aa2fee22956751e0e65970ca7c10b06cdfc2d2742ee4a66c324e9ddc0b66a0ec","9d120725253c04a327608b5c18d5abc2b82df67d938032366b551634fb752fcc","880e2f9ea08ba1bee62a6729b8fe4082bc8c50cda90b3ba5198d9b60c96f251e","f12bcf467f01af35df2c732543dfa471891ac615187310e5e0571cd23ea011f7","0f0f9ad469fbc5fd164586ce19088d46aed960777b7e7e7921f4626ff9c27a38","266f97911f989957f3144332d9322f1f58823332c11fa9092614e3f7cfc962ea","3acb0f8fa4ec3a2498deef4d78769df5397b3cf354838b243af05ce99ffc4be3","64f9086c68148af9143224a8f638eae03e6e7debc140b1f7ebd85e358bcee292","1e728ba8b1584ecb2af2507a97b8dd13061e01e792ac3867e078dda317986c54","63558d04cb89b7af8f279d94c890c27e501854d9a943881bfccefe96864dae4f","e9b8c2b72610d1dece0cf10b83aa065313780ddb9863e780109e0be12761bf4e","d50c6c834d60ffbc6c20540deb936040cb28bbebb45ff92b841ae937d45b0a48","eee4835e9a6c984d694040dc30372647eed5dd5bb09352e73a44862619c84a5f","79f60b3b9b11b2ebc4483db70648d71cbc5fce76bcbe65fd010318ada95c1e0f","427d7d54cb1481f44b48f3661805cc6d50435ea3f29812de25511e0426f72c04","81f810c7f9f23588b2a57625d25a4b65950cf98e51eadc6a570544f3befdf680","ecb503f53fcb866039826985d7b7540be2cf71a08ae7a306d21412cc99a82ef6","ca1964768318a06ea190727562cde1b651a7fd88ff584971b59def24f5bdad5b","1dc0d932f268d4f634f7301e75d2ed596c52b365a9fd2d00db3afb1df4d5f329","8fe1ce6ecd9052d4e5cfdb98910bf3c156aaeef4675aa15b788c50ac87bd8b9f","ca7086366f09990302ae18e99744bc0947e718432c7ae56fd13f6a206b711af5","de18b90507c9abf92b35d24be845341a972bfb8d9688eeca1ff64d06ffe8ce1d","e3c5ca71c9e18cc66b9e325fac6726537780079286ecddc7b3669c17f3d381e5","297b12076b02ade317acce682f3e34dd39d06eb0a5433f470cd588e4272ed26c","7576255f1f6e93b6788695345e8e8e25690658f15fe5304970c1795a05b5ca57","cc64faa8fdc11442d0c0c1addc04100cb73fe781550997e7a31e1c4910d1c27b","bba103e98bd8c39b2c310ab209b56b7268def74da07a1f08d1fc97af221180ed","c256d35d925dd191e91199671d12e9453abdbe253af59ba947ee7f1ebcf3bb04","75e6a8c4c6eba4b4d10418400a840e9bdebd07ec7947cfe525f37def7ffa332e","f8eba0f1559913c9a241a36dc2bc97497f4988723f8252bafecaa419d6168f2b","1b1d92712645dfbc00d41f6627c3da56a8f58cba2708ac102d4b4dbbcdbc4baa","7440bb52701f566a5c879638373d5ccf83ac40ad85064757aa0f06f92fee9956","9a4b10eebab8ad6b64a18a1fe5f7d34850e77eefa7c5e8b957467008576c1616","7324d7cab96c1b05ff17a33858fe7937a4a3839640fdf107b17c76a66a991642","62832252be664217a5670018190c4695f5ce1b570e647b4c104ca0114de1fb27","e7d39d33b2c6bf3738685255afc5ac5437583630d6e01e3104ead20d72600527","3757d24cea62dd3cd4c51e483d4a512363466850e3d0f1babe3c94d8666b027d","95d670cd1ef78a1b3e4dc1b642734c0bf46157e6734582d3ffe1bac726f6ad05","b4bdba36a2f72f60ef2da684a2151a715e606615e4fb6bcb84ec843b84f8fe1e","820dbc24a40176b3726e6383f5ada60d94ca0e2a0ce7f9fe4d207a3590940c66","b335996df2a18faa9030c4d5d23f6034f788c299ae58cef98888634b44269256","9141368ea43007b55fda04feffc9de95c7a1f44f62a0e4e86265280c5b884e17","f1d2da9acce89f190a176cdf1969c2efec47fbda01ef921754861fd99faac3b8","ab1a6683e4561bc4b0fa849b628c26b5a45f7804ead3f75f16e4de39aac90a90","e64d6a9a413087c43fa8ebdb00bab212f032a45532e13adf34aa4ad53e1a227f","c5c29b9eccc3608fb57974b4a173973853468116977f3978f39192293f5bd25c","0f258659e0d19140f50b4f3388ce12944ec8ef1cbe5c8336002d66a1b9df0012","88efe46a69afd37e8e2fdfabff98a88eeed0e2a1e4a91457bc30140693d677ee","98fdac71748fc528c178126e6897283ccd06ea062bd59124d6044f42af44d898","5cd5a999e218c635ea6c3e0d64da34a0f112757e793f29bc097fd18b5267f427","cc14b99b4e1bbedab2e3fbf058ed95231d8ced691f0645f2a206c32464f1bd7b","e6db934da4b03c1f4f1da6f4165a981ec004e9e7d956c585775326b392d4d886","b6fc349d28704d5698d749902fe3c4da99468036f995c08d0f88df70be84b304","6ecb85c8cbb289fe72e1d302684e659cc01ef76ae8e0ad01e8b2203706af1d56","35ab64ba795a16668247552da22f2efe1c5fbc5bc775392c534747be7f91df04","0fefee52e503cba24b1ed714f9a9fb4efb95e6ae92451a5f38a126f0555f4211","38b57fe5488d0f13d344dcb414e2d656159b4fb750176dbb1cc968014ba05d7a","25f9195f774ab2f4c3edf99c17510a93f901247debc4b339146f284142d8ab91","08521fb4e5e7f3c47bbe7dea62b2696422f816ca1b7f90bf55a3d6e9d9d42047","dd661e118e549293177ef4531d54328624229e7a5aefa8f0c6194e033db3bd19","11e21e674001320d403c1d7f33154b6391f61ab5ea3667cd942ef6c37f39da81","4c4d9fab1cf2201e3a15fddf55a4386d8e00995049a792eff8b8fecf57d81cae","18e4a3732858ec92577862fd2d2a68798578f9ae1d0933f3efafcde05850e0bb","09c6d666af0e746ace0267b5ef7f9aea0bc99842faf5138e0d1293a9efbc5378","0dcd8a4a8314acf13bfb6074f9a7ccafef02ff93294c0c033643f99687cd121a","6392ce794eef6f9b57818264bb0eeb24a46cf923f7695a957c15d3d087fbb6cc","b29f1c2aa76833193b06212fb4668a3813da54e1480a48da6835c870f0acc213","93d20368cdb5fff7f7398bfc9b2b474b2a2d5867277a0631a33b7db7fd53d5b4","b1e69b9834104482fabf7fba40e86a282ee10e0600ffd75123622f4610b0ef9e","ad5bb6c450cb574289db945ff82be103ed5d0ad8ee8c76164cee7999c695ae01","e9aa5ccb42e118f5418721d2ac8c0ebdebeb9502007db9b4c1b7c9b8d493013e","d300868212b3cc4d13228f5dc2e9880d5959dc742c0c55be2fc43bcda8504c8f","0c55daad827669843bd2401f1ddd163b74d9f922680b08ae6e162ceb6c11b078","5055e86e689cfe39104ab71298757e5aac839c2ea9d1f12299e76fa79303d47d","42266c387025558423c19d624f671352aac3e449c23906cb636f9ae317b72d7e","365647ed7b113e727b2ced995e856678d8276f20adae6457ab50a8fe806b06b2","d8b8f783622d25039d66c910e13dc683914f384dcff6a5e959c41ee2be6085bc","af1af59e70d7cd03669420193574e8b8d2667213e1c874f17fcbf78e3e96d185","55160bd492e46f5fcb305dcd26405ea0affa861fc3c0db96c5bc955e41c4b13d","f7d76c6ae021b7325eed4ae1c2e4ef682a9ed7357db25c3eeaf0b109eb6d7c1f","fcbb33d4880cc5690aa0654b669ed1c91798be55fd362e29b73d52df8f10f7f3","64f1781c36ca9e789b49229e95c447111fc13057989f3b1b47cda4adc25b463b","a569c32726ee6c0e2fa6d6027ab50ca9a072de028c09ffce63c5e7ad6558e10a","414384be54bb1f80dd5469acaec5a7b6387f149e40da617065b9c87a609e045a","56943d425bdfff3cc5182eca50942e328add0cb718219fca179a8c547458380b","683936ba33231260b16899afd87668171698f42683c3cd1413f5847c785f332f","abf8381c92ecec6fd58bc2530aa20b270f2179637aea1adff7c6037de55ca0c9","c30ca82112586c5dae7477d7e82cc91a7e0d1e658c581f9ec3df07c4485bba84","d980a3dc415fc1e3195f4857774631b17e385ba8cbe66dd1b0e4ee15e4e87f63","2a1718499352fe9fca401d6f99bf7bac822daa7eea58bd68286dedcfaabc80f8","561067dc7b6b7635277d3cad0a0e11f698d377063dd2c15dfac43ef78847eef4","a236ad8ee2cc7e31b0436f3502750adadcbc3342d5cccd6b4e6b2ae5c5b20fc6","2968f1800b627803e0a6744a0a9d58cf7a8ca4d7820dcd24840fbf14e9a99923","fc9b2868b6707a9fe0329b1fc7448644faef6412d042323938616b33e3f10591","125c3b5ad822db90ecd9215f1b64cf8e365afda31ecef9a7141300e48f183e0c","438247e782a8a9b9abdce618e963667cf95157cc6d3f5194a452d3c7d9e9655c","253f79802f33f405c1807f33efa7d78e0a26143ee694297d4f8e1477c7ed5e28","f1e8eca509487806fdf979349cfcdb6ffdeb20f11b7e95666c4309d12dcd9ba6","83724b26b711d85d6cfc9dd92fd5d666ffaae27fcfb1a0110401b98814ea26c0","f91667b00e86eddd4dd30f970571cfb8dfcc8e03b57c1f72fdf484dd5e21cc06","596366db50dfeb7ec8a1da8650030809c2938c8efef5cf1f2b897443ecdbe71c","85e2808cc73ab3ac07774802b34a6ff0d7e1e46c26de7bc2dbe08e04b3340edb","f766e5cdea938e0c9d214533fd4501ab0ee23ab4efca9edba334fa02d2869f11","eb380820a3a1feda3a182a3d078da18e0d5b7da08ae531ce11133a84b479678c","17250426320eef8842ec175088abe01460312cacf97c8dabca7cb1c919be1e1b","ddaa88853f1ee35622267a9d95450cd00c80d6d920ff7acb438c5a6d265ba549","f780879a2ca63dbb59b36f772bc28dccd2840f1377d8d632e8c978b99c26a45f","2c0639b28386cb90bc9f5ffa210c55beaef22b196096820cc11d971f33dc6ca9","1f6b42497e897d0e703464f75d264e5b7efbc54e0060e48811630e8e34c4bf78","c90f8038c75600e55db93d97bab73c0ab8fb618d75392d1d1ad32e2f6e9c7908","ca083f3bf68e813b5bded56ecbf177636aa75833eb86c7b40e3d75b8ce4c2f78","3c8bf00283ef468da8389119d3f5662c81106e302c8810f40ea86b1018df647e","67b248e4bac845c5139898b44cbd3e1213674bcc9831039701b5f0f957243a24","4eafa9b29603f99f816a686872bd2c7dec00d0250eb3b1c0c9987fc12c6b999f","9f5f256c7b5cc4a98ef557ea9720f81e96319d569f731c897ddb4514936242b4","a20ded6c920f6e566537e93d69cbad79bc57d7e3ce85686003078cf88c1c9cfc","b90ba7f5713afd494546fb053186dc077993b8b56ba46c08007b0e67e9f7212d","45bf5ca176cbdba570fdb372fd44343743a263f5fee80ce64876f9dcfc8eb374","408bf1d233f81244fc0f626a4d7de48fee4f7f579f42e90a5f20a4993e756a6f","bda2fb4d78fbec5ebb7397460a4c9e05da0e94ed11f1a2f9e8e401924ca53578","88331dcab25eb03a0de8ea2d2a48b7d1df81b380e043c6560469d14c5452745b","2b0efa367149a530075699e9b146c625958ec3df1305405c9dd9f98dbc468180","b75db76c1ac0d59dbe5ed5848e7a09cd452ca5dec918313becf7dacc420dbfa7","cdabd37d1c6b90d392ddfc3b1fe7a956262f5b0b9530ba47d53bb5a8a0eb976e","b250d34cdebe2744cf32c7eecfe58c48496f1650fe7e944eb745a80b1347377e","f4ccbddbaaaef62bdb3e0e4455321957069fe84995aeac8d0c386a761741c4f6","3adea9938c543eb49bf983cb2ff26192802d04e2a73e2c01110c813fc8c03146","4e2b9a0126d6b1163f0931fee7369f08209c49e8a6cc5333a47d6beb2ea94fc8","1f956ff5e76bced84fffad27c121cfe12ecca23de8081c9ab9377ead7167a57d","e15db0d01139d39213a40639352debd92786f311e0421c21ac97c2ca4003a299","cd2afab7b5206a624ef3a603568ce42a7c65e7e4958f1c9518b70580523db653","56e3630d77b2f8e63f628f6aeb81d4eadfdd5308f6e70c6194b06b07e1da367d","9a7638d62db8cfa1466093d7d413fdf85c5e4a7c663ed76f2bfc8739c8e01505","a8014c84b35c0ea214b8f8e474f7ee35e8510b64590ebad1796be646f9d1b65a","c338859b98f8a11f80e3e47e33767299e7a4facdf0870c01c8694fa8fa048d16","506ddc141d91c4155d39ce3125a92b4636ed10db070c0cfdac7e54376178c30c","b113e9770d5be136c5e2add9e6cdf40d85051762ff2391f71d552975e66b1500","8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","19438ff41349d85aeda3eb1de849a2bb3db79529451b260ba53bc4014d7ee655","02d518df2cbb3604208eff62962eabca6fa5ed7df99efa098fa4bae81e9ff5ba","b77aadb530010c3abe2f96fe97fb6ab7215b0efbc53cda06abd6befcd45fbbf9","f6515386d553f6ca39f9b16d8be14d9a32e9d106f1576ae628d54e448b38ad80","57ddc4e066366bbe04f497f9afce1c88e088dbd09be0618e072754450de3acbb","a127cfa28598524f7167602e531c0d2e9b5f916d77d75638ad3f20ea3aa0424d","d2cfa47dfb80b48953fde25ff9c760f6fdd39cbbaa916a079c30c0b69e6857a3","599b136ad1278b651c9b3f183592a4755d8944dfa5f59b52f60c69bdd70311a9","26dd40c0ac4110a888c5d68bf49fc3d646c4f227ba3c9f4fed2d8368d63ddc3f","0a89051c5cb93ad9783bdbd3289ce2fccc5f54f94c280ec4bdbedeb9e1c9a93a","0bd3a96268a583faf034e693307688827e6a88ebfaa20dc89e51ff22c72277e5","7f1cde9653da7210879e63e3fb1fb5e43773ef59b9d41f033d6fc2a4603e7305","cba65164e48b806f3f0e6c07b89deaa3115eb7a3d70faa9c65cedf3ab0fc6283","81054cb2d89f665a7c9588f2a2268d8f4ecf54c3f5e02f58fdbcb22740c498a0","e776b1b721bf89e1b5b5559622f9e44346e4e6b69d119a42c2ad988001ecc971","e69d0b59db23f59172cb087ee44a71438f809bd214d4f4105abd6090b341cbdc","d5c1d4db425938fb1e0ff528b3edb945d4d851c001ab6e1528c62eb16813d96e","86f89124a90fae1b90421bcce1e0ba58614383ca72403bfc03ff89761b050a4d","5a6fbec8c8e62c37e9685a91a6ef0f6ecaddb1ee90f7b2c2b71b454b40a0d9a6","e7435f2f56c50688250f3b6ef99d8f3a1443f4e3d65b4526dfb31dfd4ba532f8","6fc56a681a637069675b2e11b4aa105efe146f7a88876f23537e9ea139297cf9","33b7f4106cf45ae7ccbb95acd551e9a5cd3c27f598d48216bda84213b8ae0c7e","542c82f0d719084ec6dde3ce4a69be8db0f5fa3ea1e38129f95ee6897b82de78","c5079a23a0200a682ec3db25bc789d6cee4275b676a86ec1a3964d919b977e6a","8bcb884d06860a129dbffa3500d51116d9d1040bb3bf1c9762eb2f1e7fd5c85c","e55c0f31407e1e4eee10994001a4f570e1817897a707655f0bbe4d4a66920e9e","a37c2194c586faa8979f50a5c5ca165b0903d31ee62a9fe65e4494aa099712c0","6602339ddc9cd7e54261bda0e70fb356d9cdc10e3ec7feb5fa28982f8a4d9e34","7ffaa736b8a04b0b8af66092da536f71ef13a5ef0428c7711f32b94b68f7c8c8","7b4930d666bbe5d10a19fcc8f60cfa392d3ad3383b7f61e979881d2c251bc895","46342f04405a2be3fbfb5e38fe3411325769f14482b8cd48077f2d14b64abcfb","8fa675c4f44e6020328cf85fdf25419300f35d591b4f56f56e00f9d52b6fbb3b","ba98f23160cfa6b47ee8072b8f54201f21a1ee9addc2ef461ebadf559fe5c43a","45a4591b53459e21217dc9803367a651e5a1c30358a015f27de0b3e719db816b","9ef22bee37885193b9fae7f4cad9502542c12c7fe16afe61e826cdd822643d84","b0451895b894c102eed19d50bd5fcb3afd116097f77a7d83625624fafcca8939","bce17120b679ff4f1be70f5fe5c56044e07ed45f1e555db6486c6ded8e1da1c8","7590477bfa2e309e677ff7f31cb466f377fcd0e10a72950439c3203175309958","3f9ebd554335d2c4c4e7dc67af342d37dc8f2938afa64605d8a93236022cc8a5","1c077c9f6c0bc02a36207994a6e92a8fbf72d017c4567f640b52bf32984d2392","600b42323925b32902b17563654405968aa12ee39e665f83987b7759224cc317","32c8f85f6b4e145537dfe61b94ddd98b47dbdd1d37dc4b7042a8d969cd63a1aa","0da77bc7e34afccd7d35dcc0d99db05b56235a536c69082c15f2a07ceb7ceae0","f364fb93abf1e50fa93e38b4cb32c99adb43e8c8044482da5b9bf29aa27eaf75","a460b56ced5a21969a819245f9f36b2b55aa2129e87159957d400d3dc0847529","e53e817cec71dc843700a1571356271d3e13abf8cb9d32f33b4a214c6dcdd1e0","252eb4750d0439d1674ad0dc30d2a2a3e4655e08ad9e58a7e236b21e78d1d540","e344b4a389bb2dfa98f144f3f195387a02b6bdb69deed4a96d16cc283c567778","40bc9bf6808edd4fed3703f1ce7b50f1eb9124d2ac168f85fc4adbb4bd77e291","d618d077158335a50ae6bb789d93dd29b62f930195a2e909e94f0afadad5680a","ae0eeabdb4b4129356ba04ce086c675af383a9ab2b275950d73067842ccd91e4","54f664311746f12a5b0b93a6a58b12a52660e3ff74f06aa0e9c275f46bd22d0e","506bc8f4d2d639bebb120e18d3752ddeee11321fd1070ad2ce05612753c628d6","4069e28d9ec7bb86c714d2d11b5811ebca88c114c12df3fb56b8fec4423dcf18","1977f62a560f3b0fc824281fd027a97ce06c4b2d47b408f3a439c29f1e9f7e10","627570f2487bd8d899dd4f36ecb20fe0eb2f8c379eff297e24caba0c985a6c43","445bbd11741254b30eb904776cbebc72b9d13b35e6a04a0dda331a7bbafe2428","85c9be6b38726347f80c528c950302900db744b558a95206c4de12e1d99b2dee","735baa325c8211ac962fa5927fa69d3702666d1247ceb16bf94c789ccd7bef26","9e82194af3a7d314ccbc64bb94bfb62f4bfea047db3422a7f6c5caf2d06540a9","c32373a44722e84517acd1f923284ce32514fecf3dd93cc5ae52111dc6aa682a","952a9eab21103b79b7a6cca8ad970c3872883aa71273f540285cad360c35da40","8ba48776335db39e0329018c04486907069f3d7ee06ce8b1a6134b7d745271cc","e6d5809e52ed7ef1860d1c483e005d1f71bab36772ef0fd80d5df6db1da0e815","6ee38318bdaa2852d9309e92842f099a9f40c5d3c5aff3833066c02ffd42dade","12ae46c46c5e2405ad3d7e96e2638f1d183095fa8cf8a876d3b3b4d6ba985f5b","e4b1e912737472765e6d2264b8721995f86a463a1225f5e2a27f783ecc013a7b","da09c0171b55ccdf5329e38c5249c0878e7aec151c2a4390c630a2bc1383e768","c40d552bd2a4644b0617ec2f0f1c58618a25d098d2d4aa7c65fb446f3c305b54","ecb4c715f74eb8b0e289c87483f8a4933dfa566f0745b4c86231a077e2f13fea","424ddba00938bb9ae68138f1d03c669f43556fc3e9448ed676866c864ca3f1d6","a0fe12181346c8404aab9d9a938360133b770a0c08b75a2fce967d77ca4b543f","3cc6eb7935ff45d7628b93bb6aaf1a32e8cb3b24287f9e75694b607484b377b3","51451e948351903941a53ed002977984413a3e6a24f748339dd1ed156a6122bf","efd463021ccc91579ed8ae62584176baab2cd407c555c69214152480531a2072","29647c3b79320cfeecb5862e1f79220e059b26db2be52ea256df9cf9203fb401","e8cdefd2dc293cb4866ee8f04368e7001884650bb0f43357c4fe044cc2e1674f","582a3578ebba9238eb0c5d30b4d231356d3e8116fea497119920208fb48ccf85","185eae4a1e8a54e38f36cd6681cfa54c975a2fc3bc2ba6a39bf8163fac85188d","e6e7ac06b50b2693488813f8de73613934d9aa2eb355cdffd2ef898db60c9af1","5b504f247d6388daa92ffb5bbd3ffc5fc5a1ebd3ff928f90b6285b620455dd04","cee72255e129896f0240ceb58c22e207b83d2cc81d8446190d1b4ef9b507ccd6","3b54670e11a8d3512f87e46645aa9c83ae93afead4a302299a192ac5458aa586","c2fc4d3a130e9dc0e40f7e7d192ef2494a39c37da88b5454c8adf143623e5979","2e693158fc1eedba3a5766e032d3620c0e9c8ad0418e4769be8a0f103fdb52cd","516275ccf3e66dc391533afd4d326c44dd750345b68bb573fc592e4e4b74545f","07c342622568693847f6cb898679402dd19740f815fd43bec996daf24a1e2b85","5ec047e40127f1e3c3743c757738c47128f4034cbc5d18e860a54ca15892cbf0","681fc121c5b11626b3f1f4cd5ab4f375fb866c050a6b66331b3dc57da0bcbdc5","6aacd53b14c96a0cd21435cae68eabe6d9a3d78dc5442ec6edcf391efd7989ef","a4096686f982f6977433ee9759ecbef49da29d7e6a5d8278f0fbc7b9f70fce12","2eb279b2ae63cf59b419eb41c4ccd8f0850a7114c0a6a0da386286799f62c38b","9c9b902ae773d4c1ca6bb8f05e06b1dc6ffe7514463e3ee9b9e28153014836ee","86df53d43eccf5f18b4bc8f876932bd8a4a2a9601eb06bbba13f937f3b2a2377","2147f8d114cf58c05106c3dccea9924d069c69508b5980ed4011d2b648af2ffe","edb8332e0c7c7ec8f8f321c96d29c80d5e90de63efdb1b96ad8299d383d4b6b9","fe61f001bd4bd0a374daa75a2ba6d1bb12c849060a607593a3d9a44e6b1df590","cfe8221c909ad721b3da6080570553dea2f0e729afbdbcf2c141252cf22f39b5","34e89249b6d840032b9acdec61d136877f84f2cd3e3980355b8a18f119809956","6f36ff8f8a898184277e7c6e3bf6126f91c7a8b6a841f5b5e6cb415cfc34820e","4b6378c9b1b3a2521316c96f5c777e32a1b14d05b034ccd223499e26de8a379c","07be5ae9bf5a51f3d98ffcfacf7de2fe4842a7e5016f741e9fad165bb929be93","cb1b37eda1afc730d2909a0f62cac4a256276d5e62fea36db1473981a5a65ab1","195f855b39c8a6e50eb1f37d8f794fbd98e41199dffbc98bf629506b6def73d7","da32b37d9dec18a1e66ce7a540c1a466c0a7499a02819a78c049810f8c80ec8f","108314a60f3cb2454f2d889c1fb8b3826795399e5d92e87b2918f14d70c01e69","d75cc838286d6b1260f0968557cd5f28495d7341c02ac93989fb5096deddfb47","d531dc11bb3a8a577bd9ff83e12638098bfc9e0856b25852b91aac70b0887f2a","19968b998a2ab7dfd39de0c942fc738b2b610895843fec25477bc393687babd8","c0e6319f0839d76beed6e37b45ec4bb80b394d836db308ae9db4dea0fe8a9297","1a7b11be5c442dab3f4af9faf20402798fddf1d3c904f7b310f05d91423ba870","48709e4ac55179f5f6789207691759f44e8e0d2bfbadd1ceecb93d4123a12cef","2c817fa37b3d2aa72f01ce4d3f93413a7fbdecafe1b9fb7bd7baaa1bbd46eb08","682203aed293a0986cc2fccc6321d862742b48d7359118ac8f36b290d28920d2","7406d75a4761b34ce126f099eafe6643b929522e9696e5db5043f4e5c74a9e40","ad74043d72ed605cecf58a589112083c78dfd97452b80cd0a81b31c57976af12","9bc363b91528a169b3d9451fba33f865c339a3397da80a44a754547962f4a210","64efb52cb6cf86c8a05ceec920db05f9ebdaac4dff5980d9a62227eb6d2ebc11","3286cf198cf5f068cd74cb0b6648c8cba440dade2fc55eb819e50e5ea9b3f92e","16a6d4efcce5bb20d42134ce52855a46cd4783668c6d6a67a86397eb670ad0d2","46bd71615bdf9bfa8499b9cfce52da03507f7140c93866805d04155fa19caa1b","334b49c56ad2d1285a113ae3df77733d304853afcf7328367f320934e37559af","a0e74be326371c0d49be38e1ca065441fb587c26ca49772d1c96db7b77a1bb14","bb1e5cf70d99c277c9f1fe7a216b527dd6bd2f26b307a8ab65d24248fb3319f5","817547eacf93922e22570ba411f23e9164544dead83e379c7ae9c1cfc700c2cf","a728478cb11ab09a46e664c0782610d7dd5c9db3f9a249f002c92918ca0308f7","9e91ef9c3e057d6d9df8bcbfbba0207e83ef9ab98aa302cf9223e81e32fdfe8d","66d30ef7f307f95b3f9c4f97e6c1a5e4c462703de03f2f81aca8a1a2f8739dbd","0f562669bc473ed1e1e2804f12d09831e6bf506181d7684fb386f60f22989057","90a4be0e17ba5824558c38c93894e7f480b3adf5edd1fe04877ab56c56111595","fadd55cddab059940934df39ce2689d37110cfe37cc6775f06b0e8decf3092d7","9115cfffd8ea095accd6edf950d4bdfabbd5118e7604be2e13fe07150344bb9d","b4f3b4e20e2193179481ab325b8bd0871b986e1e8a8ed2961ce020c2dba7c02d","41744c67366a0482db029a21f0df4b52cd6f1c85cbc426b981b83b378ccb6e65","c3f3cf7561dd31867635c22f3c47c8491af4cfa3758c53e822a136828fc24e5d","1a3f603fedd85d20c65eb7ca522dd6f0e264dbb6e1bfa9fb4f214f2e61b8bdf8","82a74e031ab992424f8874ceacbb43ad33bdcf69538a0fbddc28145e54980f5a","5515f17f45c6aafe6459afa3318bba040cb466a8d91617041566808a5fd77a44","4df1f0c17953b0450aa988c9930061f8861b114e1649e1a16cfd70c5cbdf8d83","441104b363d80fe57eb79a50d495e0b7e3ebeb45a5f0d1a4067d71ef75e8fbfa","8a3270e206ad85c3d98ed39c0447129a9de4a4c0fa73735c55055c279cb0672e","aa994366bb344c1b17d5d96214ff68e21da40cd74d406da80e2eeb9eda97c34f","d78e3c181a76cdf355f4f9183d551fb6bd58ca708da5e6ccfc99de80011ca1a6","1ed821af5f8f1d7c7180beeefc93c3a429f9ff73c6fd8a6ff6fabf53a0d2e333","8b0b6a4c032a56d5651f7dd02ba3f05fbfe4131c4095093633cda3cae0991972","27484cb3aa328bc5d0957fcb34df68a5db1be280af510d9ed3a282b1a0a93b38","6c2b8c78eb1476ad2668898923fda9c3e67b295b9a6dc7a7312ead2582a76883","d8fb0821bcebbcc5ef87655a6442e8909313eb0bd7960f696b10cdb31576fdaa","1053398d8fd9b1a45170b5cca30bd54abe7ec7061ef2929c4da9feaa71737930","9473e83a3ccd24983ca2bc517ad41d81542f5a8215288be71bcd73655ee5ace0","3b0e75cde1f3a18976c76de3b11ff0ec76f59e561c107d4d304c1555a4bacdad","7c6b9f82c3c62d67c3311301ec6f618b1773373201aefea8ec33e7d607b308d1","c86ad86cc7a3ec3794deab9b943a823d9aaf09b846bb581a06bf263117e8d6d9","cfe88132f67aa055a3f49d59b01585fa8d890f5a66a0a13bb71973d57573eee7","f23601713615719b1a1394deae884fb9f507de819a086d5a019c63793da9efc6","50fd11b764194f06977c162c37e5a70bcf0d3579bf82dd4de4eee3ac68d0f82f","ad5ad568f2f537a43dcc1588b2379f9dc79539ae36b8821b13a5d03625211eb2","99579aa074ed298e7a3d6a47e68f0cd099e92411212d5081ce88344a5b1b528d","d2d58166965f631fa203f405f3713b0f86f1f8b80755e9daea43057a25311e16","ce7dbf31739cc7bca35ca50e4f0cbd75cd31fd6c05c66841f8748e225dc73aaf","942ab34f62ac3f3d20014615b6442b6dc51815e30a878ebc390dd70e0dec63bf","a4d05f346ba48f5685f9142fdd90b1e12e463535c38bdea74fce64813f2a8661","0256d60785ede7860b5262f504f139aa68f74db44ba9f03807b752864580772c","396c1e5a39706999ec8cc582916e05fcb4f901631d2c192c1292e95089a494d9","89df75d28f34fc698fe261f9489125b4e5828fbd62d863bbe93373d3ed995056","7cb9b6d5c1e3508fbc81e7bbab314eac54715f9326ac72fd0eb65f17a4393d50","1a2f63e6b67578536d0102c8ff351191cda459676b3f6e459c0cbf99d7c99264","1747d2d57e94676bc6b3ae6962439013ffd7ff26f6c12a30a1ace54f003ccbab","50183ad09541522ef0471069f8900599767392678fe3a1a62570ab7c82e604a1","e8b556459403cfae6d8d14eefbb85c6246bccc41ecde7be616d643df513aed6b","903bb69c5e5ce0cb8f8159a86acca9116275f8c78253db80004fe0d78f436ef4","9daabcf8cac2bd41d4cb83511c0358fc24650fd08f9ae73e888582285a116a3f","82d3e00d56a71fc169f3cf9ec5f5ffcc92f6c0e67d4dfc130dafe9f1886d5515","0d87794dd5d3cc5788f8cd400a69c5ce4c96b098c73e8375c1c61ee2f5b66253","c8bdc9b7fb85eb9704c17d3316a95844e543db9742044c2b1a0fc88d8d620fe6","862b3a5f6637c3826ea615378ba203a3cb4e8320bb2f4422aa055f69c7e7422f","e3d221660c0b79a9a3ba1111b3dfbb1136c0b52d7609b0054d3ce09ce711a3e6","892adfd3427fa4ed24bede88e8e46e4cb67e53e794365023fd473f3be796981d","992fda06eebba15d37625007500bef5b3fdd1c5e2f5a334064efeb1604c7bce3","07bc8a3551e39e70c38e7293b1a09916867d728043e352b119f951742cb91624","e47adc2176f43c617c0ab47f2d9b2bb1706d9e0669bf349a30c3fe09ddd63261","7fec79dfd7319fec7456b1b53134edb54c411ba493a0aef350eee75a4f223eeb","caf283077c49d8b5569d63020babf83272e5b854e191d8fdc66fe81ba199ee97","98f4b1074567341764b580bf14c5aabe82a4390d11553780814f7e932970a6f7","abdc0a8843b28c3cafbefb90079690b17b7b4e2a9c9bbf2cd8762e11a3958034","2e252235037a2cd8feebfbf74aa460f783e5d423895d13f29a934d7655a1f8be","7b5ed961a0e03965299591d73de8b8c41e8a68105ff4fc07a240b0dfb94a5a3d","ccced68ef43b87f46a597eef10a50a2601fd2d5d282883066857d5872354ce10","40b741dd397d635ee3df8b4880f30f15fa7394b9da31d4454805e47692438ff3",{"version":"6a67b32a1f009ebb2b89d10bf60a175f9b7e7f4d8dc7bf2b31f2375efb590784","signature":"9db6ed2ba7d26698c27a0f568d08c864e2f5f03b9333d05f5c0f4f9e63825854"},{"version":"8280953eaebdfc65cb3f499fb84edb2796a3957331a62f0675973d0e77eccbbb","signature":"9fc7f7b6ad854404973b8cba8e6d883f758237991968e9a3965d716d46f1da88"},"602c0d36ff0e030fb5436d39740b55926ffd9ec4a79f24f5e4e151c087b97621","cc42049d12b9cfcc0d8bd3d97607733b0f855628f4d4c2cb725674308a735892","9002835091d89820393047c362a939b11a84f0f50bf9c16e564a06e89d4ad406","3d04a113cb67cdb802916104969c9b29e1b58d417a69a58b84a1ed01f182d83a","75f918141839fc96412d89cf67401cd2cea0385ec8f296e6f16ab4f929353509","8e74ae879181aa93fb7723040ebbb8736624a7e899b642e1e6c7e4e467400640","e90f40b3312977f56d853fd595c97494e7504bf502a2c5b6f198f06c5ff1fd07","321029165fc9b11768bb0e57272165b1a981872654321669f2ba6c7ab1ff7d65","ca30175a9d850c2e0987ea442f3224b831277221c699b5b564dd00cd3b0f8ea7","88802db05e38b3b7ebeabfa6766fdad29a91493b8cae3bcbf6e63372af54ad86","de0eb39bb2f79083d3ee34b665365034f7d37b395dfd367d37664fba60a16109","a9dda93f00c8bc6448fbdba59ab8144f295cbf8c8b142220069b085aa5c071b7","3352298d608bcd7fe0cef73c1c64ee46a6075b9d6f98df085d6a2372fa7d0af7","761f8b0d70916473bda573926cb4439c7512eeea2bbf2baed3810d100d699f1d","74504f862428df026f31e706fc874db6d5bb132aedd4fa8b9b10feb5d4262c19","e4ecadbb7d090da11ff638b7daf2f501d9ef7349d776f70d7e722a8009270249","7247fd1853426de8fdc38a7027b488498bb00ea62c9a99037a760520e3944a26","67f129ed8b372622ff36b8b10e39d03e09e363a5ff7821105f92f085b8d1ccba","420f957bea33fed0e8e349b5aaab0f3477377f6b9756197b25cd511e1c5f32cf","00649ce744f15f48521b3fe2e63e4236d5ef50b3c0cb56c5e9f7fbd0ba93a16d","372a8b9f061c3cdf6b40386265f5bdb952daa7bc48cfe894dd1cdda99e143c86","3626a90c9744ba78b07f28f39d06d0643973fbad0164dff9f4a706c5959a5c2d","08366971a48b29aa44a65f537d3d62cb91ea6bbf11e0d2100b75bd3af2832715","5e00d91bdf622f3e8729c578cdf5d3f64dde0e14927761585f787c0dd1f72a98","99918776c91e50e7f2d297f128794d04da73ad27b4d4c03337d1ea95950a427a","b07b183df9a6911602724b9f2a52f309cd69f1783adce95b126fb56cb7171d61","05237aa882c8c40e1fbce46e2a0f2f98f11b5b6fdfcbbc058094ee161703195f","1526c4260fa14e247f2abfcf26d76fd0c1e3d01ee69007424073c9da4f526b33",{"version":"b18c0c3386246337c4d2acdc81dea543c80b375893e4cd7f81a4df6c0defaa2e","signature":"f761c91419d0a89422a0004ef1a92929dd4d2d5e5c16758654d8b0467d1998c6"},"8bd5a56f233a753f660098480ba2f1f29ddec4d65f84ea4546a1a3be529d88cf","2287575f580e42be54df9aefc4389176b2c77792aece320bed340eb30e414b9a","f6704a0418418deb868d95d9c8f81e9527d3aa1de7db1952a94c254a9b580564","3a2b93d1ef41bbb45a1499f00206e4a0be5cd5b2d37a6d8793e1cd94a10b00c7","2bad09c4dc0810666ef5b6150aa910dd711051ce5f2184050c9859c708092a36","e376362028ad356611d42f843c7490321f0b658efa0e4e993550fb05f0ebd28f","c938dac97b83703e7bd03862b5bc558425acc9f16ad9e24220771df184d25fcf","8941525aa2f1e097f0352e586bb9c755e2d533e9945508b7518346759b26e1b8","8acfefd1aec7626a3016ce7e82e3ac1a0e5b57248cffd8255b833503c29954c7","3cf73a203d499608e5b91d0c8f6ec729a39dd547cc2651a0d4647cdb420cc1fc","17f1d99666811b576261c5c9399cf2a643220188d6dcd0e6fe605a68a696d2c8","8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","599b0d75f89715151039036b14a3678b26d3d0ad9465e4a2064760fea9503dec","e7dc7a1487a6a34247d07385767e50eb2e91f595d754716e5bf66d252d0fd321","0789a3519a36d8293ad4364a02c663e8ab97c418d93e2e6f4e09745141d35580","300448b092e3ae1ead491aa6e3e2d39a38b0a332f81e318b64476ea3fc8ee975","98ba170f84b05a7582a96187cd0f91e56a23c6f4af89488fb317f3460b1d5e30","7ae221f2ac29a269c32baa485f4bfbd13b97d63159c6bb0471b0789104858642","4606c6d854002b409744140a996a49c4a607c1eb0396855529836161892abef5","b25c5f2970d06c729f464c0aeaa64b1a5b5f1355aa93554bb5f9c199b8624b1e","3e6297bcddf37e373d40ddb4c2b9e6fc98901b2a44c01b2d96af142874973c43","3051751533eee92572241b3cef28333212401408c4e7aa21718714b793c0f4ed","691aea9772797ca98334eb743e7686e29325b02c6931391bcee4cc7bf27a9f3b","6f1d39d26959517da3bd105c552eded4c34702705c64d75b03f54d864b6e41c2","81c14b89fa607b86dd726e2e3e91360cf8155ce97468404324d404a5bd65b2eb","ebddbd167c2fabd0151f50e5df94ca6d845149c47521280d8867afe3429dd078","8d48b8f8a377ade8dd1f000625bc276eea067f2529cc9cafdf082d17142107d6",{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true},"0133ebdd17a823ae56861948870cde4dac18dd8818ab641039c85bbb720429e0","3a1e165b22a1cb8df82c44c9a09502fd2b33f160cd277de2cd3a055d8e5c6b27","745a853d60bf782583a58584f59e202cae5c7a898b0c92696442602a3ef17a87","3372eed4eff275b4f61515d1fc9cc4d8e04a8d4665313a66a98f37ed8f2528bb","82772e5d55062a042a2715a555d347275a663940926fc785705eb082010cb9f6","4e88b833be14c7f384e0dcd57bb30acd799e8e34d212635d693e41a75a71164b","98437d5a640b67c41534f0de2dcb64c75433dcdff54ff8f8432e613663619a2e",{"version":"4881fd217f43f5bb1aedb124875448db8af1d5da1a25cd805946238d2f6038f7","affectsGlobalScope":true},"84e3bbd6f80983d468260fdbfeeb431cc81f7ea98d284d836e4d168e36875e86","3b02517f9be71f255eadab9892406055d069167891f1e1ea16c96c4ff1ddda01","3b05c396564e51753e921e1cc4aae1cf7cd9be53c891cf2e81fa29f11c0bd373","3ebae8c00411116a66fca65b08228ea0cf0b72724701f9b854442100aab55aba","de18acda71730bac52f4b256ce7511bb56cc21f6f114c59c46782eff2f632857","7eb06594824ada538b1d8b48c3925a83e7db792f47a081a62cf3e5c4e23cf0ee","905c3e8f7ddaa6c391b60c05b2f4c3931d7127ad717a080359db3df510b7bdab","d8aab31ba8e618cc3eea10b0945de81cb93b7e8150a013a482332263b9305322","69da61a7b5093dac77fa3bec8be95dcf9a74c95a0e9161edb98bb24e30e439d2","561eca7a381b96d6ccac6e4061e6d2ae53f5bc44203f3fd9f5b26864c32ae6e9","62ea38627e3ebab429f7616812a9394d327c2bc271003dfba985de9b4137369f","b4439890c168d646357928431100daac5cbdee1d345a34e6bf6eca9f3abe22bc","5d72971a459517c44c1379dab9ed248e87a61ba0a1e0f25c9d67e1e640cd9a09","02d734976af36f4273d930bea88b3e62adf6b078cf120c1c63d49aa8d8427c5c",{"version":"516a426e3960379f310107635b8f3a7e8c307c6c665080b128039d9299ec4087","affectsGlobalScope":true},"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","c9ad058b2cc9ce6dc2ed92960d6d009e8c04bef46d3f5312283debca6869f613","2b8264b2fefd7367e0f20e2c04eed5d3038831fe00f5efbc110ff0131aab899b","08b428a44bc98005536a12456518797e9afe2a08e8b5d9785641713a54475881","c6c4fea9acc55d5e38ff2b70d57ab0b5cdbd08f8bc5d7a226e322cea128c5b57","52ad710c9ed579f32f3311c90fda2f23b7e833053eb32c2ab4938ab16ef00a27","e57360b3f53ec41ed30cfb0eaed6e689be92bf311d7c25175a4e127f46158079","0b9112295d348f3a4e712a97dfc36867ff7816c68280bea697333b3879fc17c2","96b49a9de749afcf92b5bce1d8cc42cfae6816cdf5ea36584fd9256b8b2e5292","bbe2107a96f15b2cfebcfebfc8933619cb285c43bf1ef6946f78fd92b2de6893","3bdd93ec24853e61bfa4c63ebaa425ff3e474156e87a47d90122e1d8cc717c1f","5a2a25feca554a8f289ed62114771b8c63d89f2b58325e2f8b7043e4e0160d11",{"version":"70c1b4a47ac88b6a165b57398db4609f1ac8af446e7dbf38939c7c08524d0c1d","affectsGlobalScope":true}],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"module":1,"noImplicitReturns":true,"outDir":"./","removeComments":true,"sourceMap":true,"target":7},"fileIdsList":[[1028],[998],[289,291],[320],[242,320],[321,322],[45,292,323,325,326],[238,289],[324],[289,290],[290,291],[289],[277,285],[431],[293,294,295,296,297,298,299,300,301,302,303,304,305,306],[247,277],[285],[244,289,431],[311,312,313,314,315,316,317,318],[249],[289,431],[307,310,319],[308,309],[279],[249,250,251,252],[328],[328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349],[403],[382,402],[289,407],[238,405],[407,408,409],[289,405],[406],[44,253,289,320,327,350,404,410,422,426,428,430],[49],[49,238],[238,242],[49,289],[246,247],[258],[260,261,262,263,264],[253,266,270],[271,272],[46,47,48,49,50,239,240,241,242,243,244,245,246,247,248,258,259,265,270,273,274,275,277,283,284,285,286,287,288],[269],[254,255,256,257],[247,254,255],[247,253],[247,256],[247,279],[276,278,279,280,281,282],[277],[46,247,276,278,280],[255],[46,247,277],[268],[46,247,251,268,283],[266,267,269],[243,245,259,266,271,284,285,286,289],[50,243,245,248,284,286],[252],[238],[248],[411,415,416,417,418,419,420,421],[248,289,415],[248,414],[248,414,431],[241,247,248,412,413,414],[238,289,412],[424],[320,412],[423,425],[268,427],[276],[253,289],[429],[431,442],[439],[439,442,443,444,447],[440],[440,441],[435,436,437,438],[445,446],[439,442],[448],[266,270,289,431],[933],[289,431,941,942],[937,940,941],[945,946],[431,934,948],[949],[941],[948,951],[44,934,943,944,947,950,952,955,959,962,964,965,967,973,975],[289,935],[247,274,431,935,936,937,940,941,943,976],[937,938,939,941,954,958],[48,247,274,940,941],[953],[431,938,940],[431,940],[431,936,937,939,956,957],[431,938,940,941],[247,431],[247,289,938,939,941],[940],[274],[254,258,289,960],[961],[289,938],[247,289,431,938,940,941,963],[259,266,270,431,934,938,943,964],[269,270,431,933,966],[969,971,972],[968],[970],[431,937,940,969],[48,247,274,289,431,938,940,943,955],[974],[1014,1015,1016,1017,1018,1019],[431,1014],[1020],[266,368,369,370,402,431,933,985,994,1000,1003],[1004],[1005,1007],[1001,1002],[1006],[431,985,1000,1003],[782,783],[780,781],[238,431,780,781],[784,786,787],[780],[785],[289,431,780],[431,780,781,785],[788],[1028,1029,1030,1031,1032],[1028,1030],[402],[368,402,1034],[368,402],[1040,1041],[1037,1038,1039,1040],[1041],[365,368,402,1043,1044],[1035,1044,1045,1047],[366,402],[1050],[1051],[1057,1059],[400],[399,400],[365,366,373,382],[355,365,373],[391],[359,366,374],[382,387],[362,365,373],[363],[362],[365],[365,367,382,390],[365,366],[373,382,390],[365,366,368,373,382,387,390],[368,387,390],[401],[390],[362,365,382],[375],[353],[389],[380,391,394],[365,383],[382],[385],[373],[351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398],[379],[392],[359,365,367,376,382,390,394],[368,402,1046],[366,368,382,402,1036],[1066],[1047,1048],[1071],[810],[809,810,815],[811,812,813,814,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920],[810,838],[810,878],[809],[805,806,807,808,809,810,815,921,922,923,924,928],[815],[807,926,927],[809,925],[810,815],[805,806],[368,369,370,373,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,999],[984,994,996],[984],[382,983,984,990,993,994,995,996],[983,984,985,986,988,990,991,992,994,995,996],[983,984,990,994,996],[984,993],[987,995],[984,989,994,995,996],[984,994,995],[983,984,986,989,990,991,993,995,996],[368,369,370,984],[368,369,370],[368,369],[1053,1054],[1053,1054,1055,1056],[877],[368,382],[1058],[51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,67,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,107,108,109,110,111,112,113,114,115,116,118,120,121,122,123,124,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,170,171,172,174,182,184,185,186,187,188,189,191,192,194,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237],[96],[52,55],[54],[54,55],[51,52,53,55],[52,54,55,211],[51,54,55],[51,54,96],[54,55,211],[54,219],[52,54,55],[55],[64],[87],[108],[54,55,96],[55,103],[54,55,96,114],[54,55,114],[55,155],[55,96],[51,55,173],[51,55,174],[195],[180,181],[190],[180],[51,55,173,180],[173,174,181],[193],[51,55,180,181],[53,54,55],[51,55],[52,54,174,175,176,177],[96,174,175,176,177],[174,176],[54,175,176,178,179,182],[51,54],[55,197],[56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,104,105,106,107,108,109,110,111,112,113,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171],[183],[563,581],[482,780],[459,577,578,579,580,582,623],[459,482,483,494,517,541,553,557,558,559,561,562,563,580,582,584,585,586,587,619,620,621,622],[619,623],[589,591,593,594,603,605,606,607,608,609,610,611,613,615,616,617,618],[619],[457,506,568,701,702,703,704,705,706,780],[710,711],[716],[741],[577],[505],[457,505,506],[453],[570],[457],[460,461,462],[561],[571,780],[743],[456,511],[461],[583],[583,612],[387],[583,588],[451,452,457,510,517,563,564,565,566,583,584],[540,583],[451,452,493,521,523,528,529,530,531,540,543,545,555,557,563,623],[493],[583,590],[583,604],[583,592],[583,614],[544],[595,596,597,598,599,600,601],[583,602],[479,480,482,483,484,487,494,534,535,536,537,538,539,540,541,558,559,560,561,563,623],[452,479,480,483,484,487,517,535,536,537,540,556,562,623,780],[562,563,623],[576],[457,505,568],[453,454,567,569,572,573,574,575,780],[458,460,461,462,570,571,780],[517],[457,510,579],[483],[637,638,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699],[468],[468,517],[640],[585],[491],[535],[452,532,533,534],[452,490],[494,517,535,536],[452,491],[44,451,452,453,457,459,464,477,478,479,481,482,483,484,485,487,488,489,490,491,492,494,505,507,517,521,523,528,529,530,531,533,534,535,536,537,538,539,540,541,549,550,551,552,553,557,558,559,562,563,567,569,570,572,577,578,579,580,584,585,586,587,619,620,623,624,635,636,700,707,708,709,712,713,714,715,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,742,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779],[563,578,580],[563],[507,508],[499],[507],[626],[455,467,469,495,497,500,502,509,512,513,515,518,625,626,627,628,629,630,631,632,633,634],[494],[458,464,465,466],[453,454,780],[459,513,517],[452,457,468,504,505,509,517,623],[468,469,496,498,501,503,510,517,519,623],[452,499,500,504,517],[452,453,454,455,456,463,468,496,498,501,503,504,510,511,512,514,516,519,623,780],[459,515,517],[459,460,461,462,510,517],[459,504,510,517,518],[468,494,497,517],[452,468,494,495,517],[452,458,460,461,462,463,465,467,504,510,517],[510],[459,502,504,510,517],[586],[563,587,623],[459,531],[531],[452,468,510,517,639],[468,510,640],[365,366,382],[478],[452,477,478,483,484,492,563,623],[452,480,483,487,492,510],[468,470,476,517,623],[452,470,476,477,480,481,483,485,486,488,489,491,494,510,563,623],[452,453,468,470,471,472,473,474,475,492,510,517,623],[468,476,494,517],[468,780],[492],[452],[452,453,474,475,476,477,478,483,492,493,517,563],[452,453,477,478,479,483,492,563,623],[452,517],[452,453,477,478,479,480,492,563,623],[452,477],[451,452,493,521,523,528,529,530,531,543,545,555,561,562,623],[452,482,494,541,559,562],[479,480,482,484,487,494,535,536,537,538,539,540,541,623,780],[452,494,535,536,540,541,557,563],[452,479,480,484,487,494,517,534,535,536,537,538,539,540,562,563],[494,541],[450,520,522,524,525,526],[545],[451,517,521,523,527,528,529,530,585],[514,525],[450],[516,526],[463,522],[519,520],[503,524],[542,780],[452,468,510,517,553,554,563],[546,547,548,549,550,551,552],[517,562,563,623],[468,510,517,562,563,623],[431,432],[431,432,433,434,449,789,798,801,804,932,976,977,979],[375,790,791,793,978],[375,976,978,980,981,1008],[431,795,930],[431,780,792,793],[929],[431,798,931],[431,790,796,799],[431,789,790,799,800],[431,780,789,790],[1013,1021],[780,791],[1021,1023],[780,790,793],[431,791,796,802],[431,787,791,802,803],[431,780,789,791],[1021,1025],[780,791,792],[431,793,795,796],[431,789,793,795,797],[431,780,789,792,793,794],[172,238,431],[780,793,794],[790,791,793]],"referencedMap":[[1030,1],[999,2],[292,3],[321,4],[322,5],[323,6],[327,7],[324,8],[325,9],[291,10],[326,11],[294,12],[295,13],[297,14],[307,15],[299,16],[302,12],[303,12],[304,12],[306,17],[314,18],[319,19],[311,20],[312,21],[320,22],[310,23],[309,24],[253,25],[344,26],[329,26],[336,26],[333,26],[346,26],[337,26],[343,26],[347,26],[350,27],[341,26],[331,26],[349,26],[334,26],[332,26],[342,26],[338,26],[348,26],[335,26],[345,26],[330,26],[340,26],[339,26],[404,28],[403,29],[408,30],[409,31],[410,32],[406,33],[407,34],[431,35],[50,36],[239,37],[240,36],[243,38],[242,39],[245,38],[248,40],[259,41],[265,42],[271,43],[273,44],[289,45],[966,46],[258,47],[256,48],[254,49],[255,50],[280,51],[283,52],[281,53],[279,54],[282,55],[278,56],[269,57],[284,58],[270,59],[287,60],[288,61],[285,62],[286,63],[411,64],[422,65],[416,66],[417,67],[420,68],[419,68],[418,67],[421,67],[415,69],[423,70],[425,71],[424,72],[426,73],[427,57],[428,74],[429,75],[414,76],[430,77],[443,78],[444,79],[448,80],[440,79],[441,81],[442,82],[439,83],[447,84],[445,85],[449,86],[933,87],[934,88],[943,89],[946,90],[947,91],[949,92],[950,93],[951,94],[948,88],[952,95],[976,96],[936,97],[938,98],[959,99],[963,100],[954,101],[957,102],[941,103],[958,104],[939,105],[935,106],[940,107],[937,108],[955,109],[961,110],[962,111],[960,112],[964,113],[965,114],[967,115],[973,116],[942,14],[969,117],[968,14],[971,118],[972,119],[956,120],[975,121],[974,14],[1020,122],[1015,123],[1014,14],[1016,123],[1017,123],[1018,123],[1019,14],[1021,124],[1004,125],[1005,126],[1008,127],[1003,128],[1007,129],[1006,130],[784,131],[782,132],[783,133],[788,134],[781,135],[786,136],[785,137],[787,138],[789,139],[1033,140],[1029,1],[1031,141],[1032,1],[794,142],[1035,143],[1034,144],[1042,145],[1041,146],[1038,147],[1045,148],[1048,149],[1049,150],[1051,151],[1052,152],[1060,153],[792,142],[351,154],[401,155],[355,156],[356,157],[357,158],[358,159],[359,160],[360,161],[362,162],[363,163],[364,164],[365,164],[366,165],[367,166],[368,167],[369,168],[370,169],[402,170],[371,164],[372,171],[373,172],[375,173],[376,174],[377,175],[380,164],[381,176],[382,177],[383,178],[386,179],[387,180],[399,181],[389,180],[390,182],[391,183],[393,178],[395,184],[396,178],[1047,185],[1066,186],[1067,187],[1068,188],[1072,189],[913,190],[917,190],[916,190],[914,190],[915,190],[918,190],[811,190],[823,190],[812,190],[825,190],[827,190],[821,190],[820,190],[822,190],[826,190],[828,190],[813,190],[824,190],[814,190],[816,191],[817,190],[818,190],[819,190],[835,190],[834,190],[921,192],[829,190],[831,190],[830,190],[832,190],[833,190],[920,190],[919,190],[836,190],[839,193],[840,193],[842,190],[886,190],[843,190],[887,190],[884,190],[888,190],[844,190],[845,190],[846,193],[889,190],[883,193],[841,193],[890,190],[847,193],[891,190],[871,190],[848,193],[849,190],[850,190],[881,193],[853,190],[852,190],[892,190],[893,190],[894,193],[855,190],[857,190],[858,190],[864,190],[865,190],[859,193],[895,190],[882,193],[860,190],[861,190],[896,190],[862,190],[854,193],[897,190],[880,190],[898,190],[863,193],[866,190],[867,190],[885,193],[899,190],[900,190],[879,194],[856,190],[901,193],[902,190],[903,190],[904,190],[868,190],[872,190],[869,193],[870,190],[851,190],[873,190],[876,190],[874,190],[875,190],[837,190],[911,190],[905,190],[906,190],[908,190],[909,190],[907,190],[912,190],[910,190],[810,195],[929,196],[927,197],[928,198],[926,199],[925,190],[924,200],[923,201],[815,195],[978,142],[1000,202],[992,203],[989,204],[991,205],[993,206],[995,207],[987,208],[988,209],[990,210],[996,211],[994,212],[997,213],[984,214],[982,215],[1055,216],[1057,217],[1056,216],[878,218],[985,219],[1059,220],[238,221],[189,222],[187,222],[237,223],[202,224],[201,224],[103,225],[54,226],[209,225],[210,225],[212,227],[213,225],[214,228],[114,229],[215,225],[186,225],[216,225],[217,230],[218,225],[219,224],[220,231],[221,225],[222,225],[223,225],[224,225],[225,224],[226,225],[227,225],[228,225],[229,225],[230,232],[231,225],[232,225],[233,225],[234,225],[235,225],[53,223],[56,233],[57,233],[58,225],[59,233],[60,233],[61,233],[62,233],[63,225],[65,234],[66,233],[64,233],[67,233],[68,233],[69,233],[70,233],[71,233],[72,233],[73,225],[74,233],[75,233],[76,233],[77,233],[78,233],[79,225],[80,233],[81,225],[82,233],[83,233],[84,233],[85,233],[86,225],[88,235],[87,233],[89,233],[90,233],[91,233],[92,233],[93,232],[94,225],[95,225],[109,236],[97,237],[98,233],[99,233],[100,225],[101,233],[102,233],[104,238],[105,233],[106,233],[107,233],[108,233],[110,233],[111,233],[112,233],[113,233],[115,239],[116,233],[117,233],[118,233],[119,225],[120,233],[121,240],[122,240],[123,240],[124,225],[125,233],[126,233],[127,233],[132,233],[128,233],[129,225],[130,233],[131,225],[133,225],[134,233],[135,233],[136,225],[137,225],[138,233],[139,225],[140,233],[141,233],[142,225],[143,233],[144,233],[145,233],[146,233],[147,233],[148,233],[149,233],[150,233],[151,233],[152,233],[153,233],[154,233],[155,233],[156,241],[157,233],[158,233],[159,233],[160,233],[161,233],[162,233],[163,225],[164,225],[165,225],[166,225],[167,225],[168,233],[169,233],[170,233],[171,233],[188,242],[236,225],[174,243],[173,244],[196,245],[195,246],[191,247],[190,246],[192,248],[181,249],[180,250],[194,251],[193,248],[182,252],[96,253],[52,254],[51,233],[178,255],[179,256],[177,257],[175,233],[183,258],[55,259],[200,224],[198,260],[172,261],[184,262],[582,263],[483,264],[583,265],[623,266],[624,267],[619,268],[777,269],[707,270],[708,135],[709,135],[718,135],[713,135],[712,271],[714,135],[715,135],[717,272],[742,273],[738,135],[740,135],[756,274],[751,135],[506,275],[507,276],[729,277],[571,278],[728,278],[710,279],[464,280],[743,281],[741,135],[730,135],[731,282],[732,135],[733,135],[734,135],[735,135],[736,135],[737,135],[744,283],[750,284],[748,285],[616,286],[613,287],[617,286],[618,286],[588,288],[589,289],[607,286],[585,290],[611,286],[606,291],[556,292],[540,293],[591,294],[610,286],[605,295],[592,288],[593,296],[609,286],[615,297],[545,298],[594,286],[608,286],[602,299],[603,300],[564,279],[562,301],[557,302],[620,303],[577,304],[569,305],[576,306],[572,307],[645,308],[685,309],[654,310],[653,310],[700,311],[686,312],[663,308],[668,313],[687,313],[669,308],[681,310],[684,310],[692,314],[641,314],[649,315],[694,313],[690,313],[667,313],[691,313],[534,316],[536,317],[535,318],[491,319],[770,320],[757,316],[758,316],[759,316],[764,316],[760,316],[761,316],[762,316],[763,316],[765,316],[766,316],[767,316],[768,316],[769,321],[780,322],[771,323],[773,323],[580,324],[772,323],[509,325],[500,326],[631,310],[629,327],[627,328],[635,329],[497,330],[495,330],[467,331],[455,332],[512,284],[514,333],[510,334],[504,335],[501,336],[517,337],[516,338],[463,339],[519,340],[498,341],[496,342],[468,343],[511,344],[503,345],[587,346],[778,347],[586,324],[779,348],[459,349],[640,350],[639,351],[493,352],[470,308],[477,353],[485,354],[488,355],[471,356],[492,357],[476,358],[473,359],[472,359],[622,360],[621,360],[489,361],[487,362],[479,362],[494,363],[486,364],[560,365],[481,366],[478,367],[563,368],[774,369],[775,370],[558,371],[541,372],[559,373],[527,374],[542,135],[565,375],[531,376],[529,377],[451,378],[530,379],[523,380],[521,381],[528,382],[543,383],[555,384],[553,385],[551,386],[552,386],[550,386],[546,303],[547,303],[548,303],[549,387],[433,388],[980,389],[432,14],[979,390],[1009,391],[1010,135],[931,392],[796,393],[930,394],[932,395],[800,396],[801,397],[799,398],[1022,399],[790,400],[1024,401],[791,402],[803,403],[804,404],[802,405],[1027,406],[793,407],[797,408],[798,409],[795,410],[434,14],[977,411],[981,412]],"exportedModulesMap":[[1030,1],[999,2],[292,3],[321,4],[322,5],[323,6],[327,7],[324,8],[325,9],[291,10],[326,11],[294,12],[295,13],[297,14],[307,15],[299,16],[302,12],[303,12],[304,12],[306,17],[314,18],[319,19],[311,20],[312,21],[320,22],[310,23],[309,24],[253,25],[344,26],[329,26],[336,26],[333,26],[346,26],[337,26],[343,26],[347,26],[350,27],[341,26],[331,26],[349,26],[334,26],[332,26],[342,26],[338,26],[348,26],[335,26],[345,26],[330,26],[340,26],[339,26],[404,28],[403,29],[408,30],[409,31],[410,32],[406,33],[407,34],[431,35],[50,36],[239,37],[240,36],[243,38],[242,39],[245,38],[248,40],[259,41],[265,42],[271,43],[273,44],[289,45],[966,46],[258,47],[256,48],[254,49],[255,50],[280,51],[283,52],[281,53],[279,54],[282,55],[278,56],[269,57],[284,58],[270,59],[287,60],[288,61],[285,62],[286,63],[411,64],[422,65],[416,66],[417,67],[420,68],[419,68],[418,67],[421,67],[415,69],[423,70],[425,71],[424,72],[426,73],[427,57],[428,74],[429,75],[414,76],[430,77],[443,78],[444,79],[448,80],[440,79],[441,81],[442,82],[439,83],[447,84],[445,85],[449,86],[933,87],[934,88],[943,89],[946,90],[947,91],[949,92],[950,93],[951,94],[948,88],[952,95],[976,96],[936,97],[938,98],[959,99],[963,100],[954,101],[957,102],[941,103],[958,104],[939,105],[935,106],[940,107],[937,108],[955,109],[961,110],[962,111],[960,112],[964,113],[965,114],[967,115],[973,116],[942,14],[969,117],[968,14],[971,118],[972,119],[956,120],[975,121],[974,14],[1020,122],[1015,123],[1014,14],[1016,123],[1017,123],[1018,123],[1019,14],[1021,124],[1004,125],[1005,126],[1008,127],[1003,128],[1007,129],[1006,130],[784,131],[782,132],[783,133],[788,134],[781,135],[786,136],[785,137],[787,138],[789,139],[1033,140],[1029,1],[1031,141],[1032,1],[794,142],[1035,143],[1034,144],[1042,145],[1041,146],[1038,147],[1045,148],[1048,149],[1049,150],[1051,151],[1052,152],[1060,153],[792,142],[351,154],[401,155],[355,156],[356,157],[357,158],[358,159],[359,160],[360,161],[362,162],[363,163],[364,164],[365,164],[366,165],[367,166],[368,167],[369,168],[370,169],[402,170],[371,164],[372,171],[373,172],[375,173],[376,174],[377,175],[380,164],[381,176],[382,177],[383,178],[386,179],[387,180],[399,181],[389,180],[390,182],[391,183],[393,178],[395,184],[396,178],[1047,185],[1066,186],[1067,187],[1068,188],[1072,189],[913,190],[917,190],[916,190],[914,190],[915,190],[918,190],[811,190],[823,190],[812,190],[825,190],[827,190],[821,190],[820,190],[822,190],[826,190],[828,190],[813,190],[824,190],[814,190],[816,191],[817,190],[818,190],[819,190],[835,190],[834,190],[921,192],[829,190],[831,190],[830,190],[832,190],[833,190],[920,190],[919,190],[836,190],[839,193],[840,193],[842,190],[886,190],[843,190],[887,190],[884,190],[888,190],[844,190],[845,190],[846,193],[889,190],[883,193],[841,193],[890,190],[847,193],[891,190],[871,190],[848,193],[849,190],[850,190],[881,193],[853,190],[852,190],[892,190],[893,190],[894,193],[855,190],[857,190],[858,190],[864,190],[865,190],[859,193],[895,190],[882,193],[860,190],[861,190],[896,190],[862,190],[854,193],[897,190],[880,190],[898,190],[863,193],[866,190],[867,190],[885,193],[899,190],[900,190],[879,194],[856,190],[901,193],[902,190],[903,190],[904,190],[868,190],[872,190],[869,193],[870,190],[851,190],[873,190],[876,190],[874,190],[875,190],[837,190],[911,190],[905,190],[906,190],[908,190],[909,190],[907,190],[912,190],[910,190],[810,195],[929,196],[927,197],[928,198],[926,199],[925,190],[924,200],[923,201],[815,195],[978,142],[1000,202],[992,203],[989,204],[991,205],[993,206],[995,207],[987,208],[988,209],[990,210],[996,211],[994,212],[997,213],[984,214],[982,215],[1055,216],[1057,217],[1056,216],[878,218],[985,219],[1059,220],[238,221],[189,222],[187,222],[237,223],[202,224],[201,224],[103,225],[54,226],[209,225],[210,225],[212,227],[213,225],[214,228],[114,229],[215,225],[186,225],[216,225],[217,230],[218,225],[219,224],[220,231],[221,225],[222,225],[223,225],[224,225],[225,224],[226,225],[227,225],[228,225],[229,225],[230,232],[231,225],[232,225],[233,225],[234,225],[235,225],[53,223],[56,233],[57,233],[58,225],[59,233],[60,233],[61,233],[62,233],[63,225],[65,234],[66,233],[64,233],[67,233],[68,233],[69,233],[70,233],[71,233],[72,233],[73,225],[74,233],[75,233],[76,233],[77,233],[78,233],[79,225],[80,233],[81,225],[82,233],[83,233],[84,233],[85,233],[86,225],[88,235],[87,233],[89,233],[90,233],[91,233],[92,233],[93,232],[94,225],[95,225],[109,236],[97,237],[98,233],[99,233],[100,225],[101,233],[102,233],[104,238],[105,233],[106,233],[107,233],[108,233],[110,233],[111,233],[112,233],[113,233],[115,239],[116,233],[117,233],[118,233],[119,225],[120,233],[121,240],[122,240],[123,240],[124,225],[125,233],[126,233],[127,233],[132,233],[128,233],[129,225],[130,233],[131,225],[133,225],[134,233],[135,233],[136,225],[137,225],[138,233],[139,225],[140,233],[141,233],[142,225],[143,233],[144,233],[145,233],[146,233],[147,233],[148,233],[149,233],[150,233],[151,233],[152,233],[153,233],[154,233],[155,233],[156,241],[157,233],[158,233],[159,233],[160,233],[161,233],[162,233],[163,225],[164,225],[165,225],[166,225],[167,225],[168,233],[169,233],[170,233],[171,233],[188,242],[236,225],[174,243],[173,244],[196,245],[195,246],[191,247],[190,246],[192,248],[181,249],[180,250],[194,251],[193,248],[182,252],[96,253],[52,254],[51,233],[178,255],[179,256],[177,257],[175,233],[183,258],[55,259],[200,224],[198,260],[172,261],[184,262],[582,263],[483,264],[583,265],[623,266],[624,267],[619,268],[777,269],[707,270],[708,135],[709,135],[718,135],[713,135],[712,271],[714,135],[715,135],[717,272],[742,273],[738,135],[740,135],[756,274],[751,135],[506,275],[507,276],[729,277],[571,278],[728,278],[710,279],[464,280],[743,281],[741,135],[730,135],[731,282],[732,135],[733,135],[734,135],[735,135],[736,135],[737,135],[744,283],[750,284],[748,285],[616,286],[613,287],[617,286],[618,286],[588,288],[589,289],[607,286],[585,290],[611,286],[606,291],[556,292],[540,293],[591,294],[610,286],[605,295],[592,288],[593,296],[609,286],[615,297],[545,298],[594,286],[608,286],[602,299],[603,300],[564,279],[562,301],[557,302],[620,303],[577,304],[569,305],[576,306],[572,307],[645,308],[685,309],[654,310],[653,310],[700,311],[686,312],[663,308],[668,313],[687,313],[669,308],[681,310],[684,310],[692,314],[641,314],[649,315],[694,313],[690,313],[667,313],[691,313],[534,316],[536,317],[535,318],[491,319],[770,320],[757,316],[758,316],[759,316],[764,316],[760,316],[761,316],[762,316],[763,316],[765,316],[766,316],[767,316],[768,316],[769,321],[780,322],[771,323],[773,323],[580,324],[772,323],[509,325],[500,326],[631,310],[629,327],[627,328],[635,329],[497,330],[495,330],[467,331],[455,332],[512,284],[514,333],[510,334],[504,335],[501,336],[517,337],[516,338],[463,339],[519,340],[498,341],[496,342],[468,343],[511,344],[503,345],[587,346],[778,347],[586,324],[779,348],[459,349],[640,350],[639,351],[493,352],[470,308],[477,353],[485,354],[488,355],[471,356],[492,357],[476,358],[473,359],[472,359],[622,360],[621,360],[489,361],[487,362],[479,362],[494,363],[486,364],[560,365],[481,366],[478,367],[563,368],[774,369],[775,370],[558,371],[541,372],[559,373],[527,374],[542,135],[565,375],[531,376],[529,377],[451,378],[530,379],[523,380],[521,381],[528,382],[543,383],[555,384],[553,385],[551,386],[552,386],[550,386],[546,303],[547,303],[548,303],[549,387],[433,388],[432,14],[979,413],[1010,135],[931,392],[796,393],[930,394],[932,395],[800,396],[801,397],[799,398],[1022,399],[790,400],[1024,401],[791,402],[803,403],[804,404],[802,405],[1027,406],[793,407],[797,408],[798,409],[795,410],[434,14],[977,411],[981,412]],"semanticDiagnosticsPerFile":[1030,1028,999,45,292,321,322,323,327,324,325,290,291,326,305,293,294,295,296,297,307,298,299,300,301,302,303,304,306,314,316,313,319,317,315,311,312,318,320,308,310,309,250,253,249,251,252,344,329,336,333,346,337,343,328,347,350,341,331,349,334,332,342,338,348,335,345,330,340,339,404,403,408,409,410,406,407,431,46,47,48,50,239,240,412,266,267,241,413,49,243,244,242,245,246,248,259,260,265,261,262,263,264,271,273,272,289,274,275,966,258,256,254,255,257,280,276,283,281,279,282,278,269,284,270,287,288,277,247,285,286,411,422,416,417,420,419,418,421,415,423,425,424,426,427,428,268,429,414,430,443,444,448,440,441,442,435,436,439,437,438,446,447,445,449,933,934,943,944,945,946,947,949,950,951,948,952,976,936,938,959,963,954,953,957,941,958,939,935,940,937,955,961,962,960,964,965,967,973,942,969,968,971,970,972,956,975,974,1020,1015,1014,1016,1017,1018,1019,1021,1004,1005,1008,1001,1003,1002,1007,1006,784,782,783,788,781,786,785,787,789,1033,1029,1031,1032,794,1035,1034,1036,1042,1037,1041,1038,1040,1045,1048,1049,1050,1051,1052,1060,1039,1061,792,1046,400,351,353,401,354,355,356,357,358,359,360,361,362,363,364,365,366,367,352,397,368,369,370,402,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,399,389,390,391,392,393,394,398,395,396,1062,1063,1064,1044,1043,1047,1065,1066,1067,1068,1069,838,1070,1071,1072,1073,998,405,808,913,917,916,914,915,918,811,823,812,825,827,821,820,822,826,828,813,824,814,816,817,818,819,835,834,921,829,831,830,832,833,920,919,836,839,840,842,886,843,887,884,888,844,845,846,889,883,841,890,847,891,871,848,849,850,881,853,852,892,893,894,855,857,858,864,865,859,895,882,860,861,896,862,854,897,880,898,863,866,867,885,899,900,879,856,901,902,903,904,868,872,869,870,851,873,876,874,875,837,911,905,906,908,909,907,912,910,810,929,927,928,926,925,924,807,809,805,922,923,815,806,978,983,1000,992,989,991,993,995,987,988,990,996,994,986,997,984,982,1053,1055,1057,1056,1054,878,877,985,1059,1058,44,238,211,189,187,237,202,201,103,54,209,210,212,213,214,114,215,186,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,53,56,57,58,59,60,61,62,63,65,66,64,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,88,87,89,90,91,92,93,94,95,109,97,98,99,100,101,102,104,105,106,107,108,110,111,112,113,115,116,117,118,119,120,121,122,123,124,125,126,127,132,128,129,130,131,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,188,236,174,173,196,195,191,190,192,181,180,194,193,182,96,52,51,185,178,179,176,177,175,183,55,203,204,197,200,199,205,206,198,207,208,172,184,582,581,537,532,483,452,482,583,623,624,619,777,636,753,707,708,709,718,713,712,714,715,717,742,739,738,740,756,754,755,751,719,720,721,722,723,724,725,726,506,704,703,705,702,507,701,706,729,727,570,571,728,710,711,464,568,743,505,716,741,730,731,732,733,734,735,736,737,744,745,746,750,749,747,748,752,616,612,613,617,618,588,589,607,585,611,606,556,540,590,591,610,604,605,592,593,544,609,614,615,545,594,608,596,597,598,599,600,595,601,776,602,603,457,579,566,561,564,584,562,557,620,577,574,569,575,567,576,572,573,638,661,642,645,647,698,673,637,665,695,644,674,659,662,650,685,679,672,670,654,653,680,700,686,676,657,643,646,678,663,671,668,687,669,655,682,664,699,689,675,697,677,656,693,683,658,688,696,660,681,684,666,692,641,652,651,649,648,694,690,667,691,534,536,535,491,490,770,533,757,758,759,764,760,761,762,763,765,766,767,768,769,453,780,771,773,580,578,772,513,509,630,469,500,631,628,515,634,518,629,626,627,635,625,497,495,467,455,632,633,512,508,502,514,510,504,501,517,516,463,519,498,496,468,511,460,499,461,462,465,466,458,454,456,503,587,778,586,779,459,640,639,493,470,477,485,488,471,492,476,480,473,472,622,621,489,484,487,479,474,494,475,486,560,481,478,563,774,775,558,538,541,539,559,525,450,526,522,520,527,524,542,565,531,529,451,530,523,521,528,543,555,554,553,551,552,550,546,547,548,549,8,9,13,12,2,14,15,16,17,18,19,20,21,3,4,25,22,23,24,26,27,28,5,29,30,31,32,6,33,34,35,36,7,43,41,37,38,39,40,1,42,11,10,433,980,432,979,1009,1010,931,796,1011,930,1012,932,800,801,799,1013,1022,790,1023,1024,791,803,804,802,1025,1026,1027,793,797,798,795,434,977,981]},"version":"4.3.2"} \ No newline at end of file diff --git a/dist/utils/admin.creator.d.ts b/dist/utils/admin.creator.d.ts new file mode 100644 index 0000000..e8f6260 --- /dev/null +++ b/dist/utils/admin.creator.d.ts @@ -0,0 +1 @@ +export declare const createUserAdmin: () => Promise; diff --git a/dist/utils/admin.creator.js b/dist/utils/admin.creator.js new file mode 100644 index 0000000..b4ab73e --- /dev/null +++ b/dist/utils/admin.creator.js @@ -0,0 +1,26 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createUserAdmin = void 0; +const typeorm_1 = require("typeorm"); +const bcrypt_1 = __importDefault(require("bcrypt")); +const user_entity_1 = require("../resources/users/entities/user.entity"); +const createUserAdmin = async () => { + const userRepository = typeorm_1.getRepository(user_entity_1.User); + const findedUser = await userRepository.findOne({ login: 'admin' }); + if (!findedUser) { + const newUser = userRepository.create({ + name: 'admin', + login: 'admin', + password: bcrypt_1.default.hashSync('admin', 10) + }); + await userRepository.save(newUser); + console.log('user admin was succsesful created'); + return; + } + console.log('user admin is exists in database'); +}; +exports.createUserAdmin = createUserAdmin; +//# sourceMappingURL=admin.creator.js.map \ No newline at end of file diff --git a/dist/utils/admin.creator.js.map b/dist/utils/admin.creator.js.map new file mode 100644 index 0000000..86d841c --- /dev/null +++ b/dist/utils/admin.creator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admin.creator.js","sourceRoot":"","sources":["../../src/utils/admin.creator.ts"],"names":[],"mappings":";;;;;;AAAA,qCAAwC;AACxC,oDAA4B;AAC5B,yEAA+D;AAExD,MAAM,eAAe,GAAG,KAAK,IAAmB,EAAE;IACvD,MAAM,cAAc,GAAG,uBAAa,CAAC,kBAAI,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACpE,IAAI,CAAC,UAAU,EAAE;QACf,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC;YACpC,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,gBAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;SACvC,CAAC,CAAC;QACH,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,OAAO;KACR;IACD,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;AAClD,CAAC,CAAC;AAdW,QAAA,eAAe,mBAc1B"} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 6f079e5..3557e7b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,6 +11,8 @@ services: volumes: - ./src:/usr/app/src restart: always + env_file: + - .env networks: - mynetwork postgres: diff --git a/error.log b/error.log index c781c68..8688a6b 100644 --- a/error.log +++ b/error.log @@ -22,3 +22,4 @@ {"message":" Error: listen EADDRINUSE: address already in use :::8080 origin uncaughtException","level":"error"} {"message":" Error: listen EADDRINUSE: address already in use :::8080 origin uncaughtException","level":"error"} {"message":" Error: listen EADDRINUSE: address already in use :::8080 origin uncaughtException","level":"error"} +{"message":" Unhandled rejection detected: getaddrinfo ENOTFOUND postgres","level":"error"} diff --git a/info.log b/info.log index 7066de1..b91cba5 100644 --- a/info.log +++ b/info.log @@ -1081,3 +1081,287 @@ {"message":" \n METHOD: GET\n URL: /boards/12f94ac7-29f2-4f1b-a1bb-c6443701a2e9/tasks/7b4fe75b-8812-4add-b5f7-bfc10e6d2945 \n STATUS: 404 \n QUERY: {} \n BODY: {} \n TIME: 45","level":"info"} {"message":" \n METHOD: DELETE\n URL: /boards/8e9fba61-6347-4ac4-8739-8c88432c6a4d \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 6","level":"info"} {"message":" \n METHOD: DELETE\n URL: /boards/aa2a9358-b9c0-4e16-a8c1-e7e4c72c7217 \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 11","level":"info"} +{"message":" Unhandled rejection detected: getaddrinfo ENOTFOUND postgres","level":"error"} +{"message":" \n METHOD: GET\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 9","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: PUT\n URL: /users/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"Autotest updated TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /users/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 2","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 1","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 1","level":"info"} +{"message":" \n METHOD: PUT\n URL: /boards/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {\"auth\":false,\"message\":\"Unauthorized error\",\"title\":\"Autotest updated board\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 0","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 0","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/undefined/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 1","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/undefined/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 0","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/undefined/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 0","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/undefined/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/undefined/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 1","level":"info"} +{"message":" \n METHOD: PUT\n URL: /boards/undefined/tasks/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {\"auth\":false,\"message\":\"Unauthorized error\",\"title\":\"Autotest updated task\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/undefined/tasks/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 0","level":"info"} +{"message":" \n METHOD: GET\n URL: /users \n STATUS: 400 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 4","level":"info"} +{"message":" \n CODE: 401\n MESSAGE: Unauthorized","level":"warn"} +{"message":" \n METHOD: POST\n URL: /login \n STATUS: 401 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 280","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards \n STATUS: 400 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards \n STATUS: 400 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: GET\n URL: /users \n STATUS: 400 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: GET\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 7","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 0","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: PUT\n URL: /users/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"Autotest updated TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /users/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 2","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 0","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 0","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 1","level":"info"} +{"message":" \n METHOD: PUT\n URL: /boards/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {\"auth\":false,\"message\":\"Unauthorized error\",\"title\":\"Autotest updated board\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 0","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 1","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/undefined/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 0","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/undefined/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/undefined/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 0","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/undefined/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/undefined/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 1","level":"info"} +{"message":" \n METHOD: PUT\n URL: /boards/undefined/tasks/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {\"auth\":false,\"message\":\"Unauthorized error\",\"title\":\"Autotest updated task\"} \n TIME: 0","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/undefined/tasks/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 0","level":"info"} +{"message":" \n CODE: 401\n MESSAGE: Unauthorized","level":"warn"} +{"message":" \n METHOD: POST\n URL: /login \n STATUS: 401 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 307","level":"info"} +{"message":" \n METHOD: GET\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 0","level":"info"} +{"message":" \n METHOD: GET\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 1","level":"info"} +{"message":" \n CODE: 401\n MESSAGE: Unauthorized","level":"warn"} +{"message":" \n METHOD: POST\n URL: /login \n STATUS: 401 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 281","level":"info"} +{"message":" \n CODE: 401\n MESSAGE: Unauthorized","level":"warn"} +{"message":" \n METHOD: POST\n URL: /login \n STATUS: 401 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 250","level":"info"} +{"message":" \n CODE: 401\n MESSAGE: Unauthorized","level":"warn"} +{"message":" \n METHOD: POST\n URL: /login \n STATUS: 401 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 248","level":"info"} +{"message":" \n CODE: 401\n MESSAGE: Unauthorized","level":"warn"} +{"message":" \n METHOD: POST\n URL: /login \n STATUS: 401 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 274","level":"info"} +{"message":" \n METHOD: POST\n URL: /login \n STATUS: 201 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 143","level":"info"} +{"message":" \n METHOD: GET\n URL: /users \n STATUS: 200 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 140","level":"info"} +{"message":" \n METHOD: GET\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 2","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 2","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: PUT\n URL: /users/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"Autotest updated TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 2","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /users/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 3","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 2","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 2","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 1","level":"info"} +{"message":" \n METHOD: PUT\n URL: /boards/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {\"auth\":false,\"message\":\"Unauthorized error\",\"title\":\"Autotest updated board\"} \n TIME: 2","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 1","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 2","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/undefined/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 1","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/undefined/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/undefined/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/undefined/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/undefined/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 1","level":"info"} +{"message":" \n METHOD: PUT\n URL: /boards/undefined/tasks/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {\"auth\":false,\"message\":\"Unauthorized error\",\"title\":\"Autotest updated task\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/undefined/tasks/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/undefined \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: GET\n URL: /users \n STATUS: 200 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 142","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/12345/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 2","level":"info"} +{"message":" \n METHOD: GET\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 3","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/12345/tasks/12345 \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 2","level":"info"} +{"message":" \n METHOD: GET\n URL: /users/123 \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/12345/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 2","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: PUT\n URL: /boards/12345/tasks/12345 \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 2","level":"info"} +{"message":" \n METHOD: PUT\n URL: /users/12345 \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 5","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/12345/tasks/12345 \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 2","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /users/12345 \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 2","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 2","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/12345 \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 2","level":"info"} +{"message":" \n METHOD: PUT\n URL: /boards/12345 \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 2","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/12345 \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 2","level":"info"} +{"message":" \n METHOD: POST\n URL: /login \n STATUS: 201 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 347","level":"info"} +{"message":" \n METHOD: POST\n URL: /login \n STATUS: 201 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 371","level":"info"} +{"message":" \n METHOD: POST\n URL: /login \n STATUS: 201 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 369","level":"info"} +{"message":" \n METHOD: GET\n URL: /users \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 15","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 46","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 42","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 14","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 201 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 154","level":"info"} +{"message":" \n METHOD: GET\n URL: /users/f2b6981b-f063-4547-822e-6b69033ebfff \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 12","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 13","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /users/f2b6981b-f063-4547-822e-6b69033ebfff \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 23","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/6c065159-e7a5-471d-adef-60163b36cbc4/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 71","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/00f5b5b8-ccb0-49f7-9582-fd51c3e73353 \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 16","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 201 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 158","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/6c065159-e7a5-471d-adef-60163b36cbc4/tasks \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 22","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 22","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /users/8990fa1a-d4b6-4d7d-8e90-779c3db7ab6c \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 9","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/ad872982-8124-4045-b4f9-6ec5853c54db \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 16","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/6c065159-e7a5-471d-adef-60163b36cbc4/tasks \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 146","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 201 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 148","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 24","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/6c065159-e7a5-471d-adef-60163b36cbc4/tasks/a378204b-8e30-473b-82f9-1c8a58ff1fdc \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 26","level":"info"} +{"message":" \n METHOD: PUT\n URL: /users/78a8a99d-587d-43d5-a736-0000b588aa8e \n STATUS: 200 \n QUERY: {} \n BODY: {\"name\":\"Autotest updated TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\",\"id\":\"78a8a99d-587d-43d5-a736-0000b588aa8e\"} \n TIME: 29","level":"info"} +{"message":" \n METHOD: PUT\n URL: /boards/f8d5fb11-65c2-439a-9991-ef084d799fde \n STATUS: 200 \n QUERY: {} \n BODY: {\"id\":\"f8d5fb11-65c2-439a-9991-ef084d799fde\",\"title\":\"Autotest updated board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 20","level":"info"} +{"message":" \n METHOD: GET\n URL: /users/78a8a99d-587d-43d5-a736-0000b588aa8e \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 11","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/6c065159-e7a5-471d-adef-60163b36cbc4/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 32","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/f8d5fb11-65c2-439a-9991-ef084d799fde \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 27","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /users/78a8a99d-587d-43d5-a736-0000b588aa8e \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 40","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/f8d5fb11-65c2-439a-9991-ef084d799fde \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 139","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/6c065159-e7a5-471d-adef-60163b36cbc4/tasks/2acc3bb1-8497-4fca-a971-779482434661 \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 149","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 201 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 149","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /users/71a9b7dc-9341-4c81-ba99-087cefa2194b \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 8","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 22","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/6c065159-e7a5-471d-adef-60163b36cbc4/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 158","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/e3f5f51b-a186-4e66-b5ef-443dcd920ebd \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 136","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 201 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 153","level":"info"} +{"message":" \n CODE: 404\n MESSAGE: Board not found","level":"warn"} +{"message":" \n METHOD: GET\n URL: /boards/e3f5f51b-a186-4e66-b5ef-443dcd920ebd \n STATUS: 404 \n QUERY: {} \n BODY: {} \n TIME: 14","level":"info"} +{"message":" \n METHOD: PUT\n URL: /boards/6c065159-e7a5-471d-adef-60163b36cbc4/tasks/83a415cb-ab5f-4b39-9a0d-83801b3e802d \n STATUS: 200 \n QUERY: {} \n BODY: {\"columnId\":null,\"title\":\"Autotest updated task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":\"6c065159-e7a5-471d-adef-60163b36cbc4\",\"id\":\"83a415cb-ab5f-4b39-9a0d-83801b3e802d\"} \n TIME: 27","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 18","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/6c065159-e7a5-471d-adef-60163b36cbc4/tasks/83a415cb-ab5f-4b39-9a0d-83801b3e802d \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 12","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 19","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/6c065159-e7a5-471d-adef-60163b36cbc4/tasks/a378204b-8e30-473b-82f9-1c8a58ff1fdc \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 30","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/9f5ccccc-dae5-49a9-bd3d-4798ab5b11cc/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Task #1\",\"order\":1,\"description\":\"Lorem ipsum\",\"userId\":\"d7275a74-493e-43cd-91f9-2dcccc8230df\",\"boardId\":\"9f5ccccc-dae5-49a9-bd3d-4798ab5b11cc\"} \n TIME: 60","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/6c065159-e7a5-471d-adef-60163b36cbc4/tasks/a378204b-8e30-473b-82f9-1c8a58ff1fdc \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 25","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/9f5ccccc-dae5-49a9-bd3d-4798ab5b11cc/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Task #2\",\"order\":2,\"description\":\"Lorem ipsum\",\"userId\":\"d7275a74-493e-43cd-91f9-2dcccc8230df\",\"boardId\":\"9f5ccccc-dae5-49a9-bd3d-4798ab5b11cc\"} \n TIME: 72","level":"info"} +{"message":" \n CODE: 404\n MESSAGE: Task not found","level":"warn"} +{"message":" \n METHOD: GET\n URL: /boards/6c065159-e7a5-471d-adef-60163b36cbc4/tasks/a378204b-8e30-473b-82f9-1c8a58ff1fdc \n STATUS: 404 \n QUERY: {} \n BODY: {} \n TIME: 18","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /users/d7275a74-493e-43cd-91f9-2dcccc8230df \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 16","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/6c065159-e7a5-471d-adef-60163b36cbc4 \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 9","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/9f5ccccc-dae5-49a9-bd3d-4798ab5b11cc/tasks/5e0e7da2-4d79-435a-8d5d-1ab6567fa733 \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 13","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/9f5ccccc-dae5-49a9-bd3d-4798ab5b11cc/tasks/ad162997-6273-4ad8-9c3b-2d6d8761c814 \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 240","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/9f5ccccc-dae5-49a9-bd3d-4798ab5b11cc/tasks/ad162997-6273-4ad8-9c3b-2d6d8761c814 \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 28","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/9f5ccccc-dae5-49a9-bd3d-4798ab5b11cc/tasks/5e0e7da2-4d79-435a-8d5d-1ab6567fa733 \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 37","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/e22db94c-ff77-4eec-9b81-78d57ef4cff6/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Task #1\",\"order\":1,\"description\":\"Lorem ipsum\",\"boardId\":\"e22db94c-ff77-4eec-9b81-78d57ef4cff6\",\"userId\":null,\"columnId\":null} \n TIME: 419","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/e22db94c-ff77-4eec-9b81-78d57ef4cff6/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Task #2\",\"order\":2,\"description\":\"Lorem ipsum\",\"boardId\":\"e22db94c-ff77-4eec-9b81-78d57ef4cff6\",\"userId\":null,\"columnId\":null} \n TIME: 424","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/e22db94c-ff77-4eec-9b81-78d57ef4cff6/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Task #4\",\"order\":4,\"description\":\"Lorem ipsum\",\"boardId\":\"e22db94c-ff77-4eec-9b81-78d57ef4cff6\",\"userId\":null,\"columnId\":null} \n TIME: 422","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/e22db94c-ff77-4eec-9b81-78d57ef4cff6/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Task #3\",\"order\":3,\"description\":\"Lorem ipsum\",\"boardId\":\"e22db94c-ff77-4eec-9b81-78d57ef4cff6\",\"userId\":null,\"columnId\":null} \n TIME: 427","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/e22db94c-ff77-4eec-9b81-78d57ef4cff6/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Task #5\",\"order\":5,\"description\":\"Lorem ipsum\",\"boardId\":\"e22db94c-ff77-4eec-9b81-78d57ef4cff6\",\"userId\":null,\"columnId\":null} \n TIME: 426","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/9f5ccccc-dae5-49a9-bd3d-4798ab5b11cc \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 17","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/e22db94c-ff77-4eec-9b81-78d57ef4cff6/tasks/73c541bc-8e7f-4e23-869e-ef584ba2f6ca \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 36","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/e22db94c-ff77-4eec-9b81-78d57ef4cff6/tasks/8fe73002-6373-40ef-9e30-784737589646 \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 37","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/e22db94c-ff77-4eec-9b81-78d57ef4cff6/tasks/b864b414-8b47-42fb-b93a-314c15fd2347 \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 36","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/e22db94c-ff77-4eec-9b81-78d57ef4cff6/tasks/ad7095bb-aa0a-49e7-9a6a-fd37219fd872 \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 41","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/e22db94c-ff77-4eec-9b81-78d57ef4cff6/tasks/c38e214d-54ee-4823-80b4-58813d76706a \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 42","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/e22db94c-ff77-4eec-9b81-78d57ef4cff6 \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 7","level":"info"} +{"message":" \n CODE: 404\n MESSAGE: Task not found","level":"warn"} +{"message":" \n METHOD: GET\n URL: /boards/e22db94c-ff77-4eec-9b81-78d57ef4cff6/tasks/73c541bc-8e7f-4e23-869e-ef584ba2f6ca \n STATUS: 404 \n QUERY: {} \n BODY: {} \n TIME: 31","level":"info"} +{"message":" \n CODE: 404\n MESSAGE: Task not found","level":"warn"} +{"message":" \n METHOD: GET\n URL: /boards/e22db94c-ff77-4eec-9b81-78d57ef4cff6/tasks/8fe73002-6373-40ef-9e30-784737589646 \n STATUS: 404 \n QUERY: {} \n BODY: {} \n TIME: 33","level":"info"} +{"message":" \n CODE: 404\n MESSAGE: Task not found","level":"warn"} +{"message":" \n METHOD: GET\n URL: /boards/e22db94c-ff77-4eec-9b81-78d57ef4cff6/tasks/ad7095bb-aa0a-49e7-9a6a-fd37219fd872 \n STATUS: 404 \n QUERY: {} \n BODY: {} \n TIME: 35","level":"info"} +{"message":" \n CODE: 404\n MESSAGE: Task not found","level":"warn"} +{"message":" \n METHOD: GET\n URL: /boards/e22db94c-ff77-4eec-9b81-78d57ef4cff6/tasks/b864b414-8b47-42fb-b93a-314c15fd2347 \n STATUS: 404 \n QUERY: {} \n BODY: {} \n TIME: 36","level":"info"} +{"message":" \n CODE: 404\n MESSAGE: Task not found","level":"warn"} +{"message":" \n METHOD: GET\n URL: /boards/e22db94c-ff77-4eec-9b81-78d57ef4cff6/tasks/c38e214d-54ee-4823-80b4-58813d76706a \n STATUS: 404 \n QUERY: {} \n BODY: {} \n TIME: 36","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/00f5b5b8-ccb0-49f7-9582-fd51c3e73353 \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 7","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 12","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/12345 \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 1","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/12345/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: GET\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: PUT\n URL: /boards/12345 \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 1","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/12345 \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/12345/tasks/12345 \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: GET\n URL: /users/123 \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 3","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/12345/tasks \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 1","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: PUT\n URL: /boards/12345/tasks/12345 \n STATUS: 401 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 1","level":"info"} +{"message":" \n METHOD: PUT\n URL: /users/12345 \n STATUS: 401 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 1","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/12345/tasks/12345 \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 1","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /users/12345 \n STATUS: 401 \n QUERY: {} \n BODY: {} \n TIME: 5","level":"info"} +{"message":" \n METHOD: POST\n URL: /login \n STATUS: 201 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 399","level":"info"} +{"message":" \n METHOD: POST\n URL: /login \n STATUS: 201 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 427","level":"info"} +{"message":" \n METHOD: POST\n URL: /login \n STATUS: 201 \n QUERY: {} \n BODY: {\"login\":\"admin\",\"password\":\"admin\"} \n TIME: 403","level":"info"} +{"message":" \n METHOD: GET\n URL: /users \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 16","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 46","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 35","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 11","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 201 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 157","level":"info"} +{"message":" \n METHOD: GET\n URL: /users/99a458c3-6d30-4aab-a85d-e80d222653e9 \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 6","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 16","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /users/99a458c3-6d30-4aab-a85d-e80d222653e9 \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 15","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/6a0f8c10-2465-4b57-80d3-54ee5c1cce31/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 196","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/1403f263-5884-4b74-ba2b-e4ab63b7b3c6 \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 7","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/6a0f8c10-2465-4b57-80d3-54ee5c1cce31/tasks \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 15","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 201 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 158","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 20","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /users/cfcc3502-da3a-43df-97a3-e2ee3e9c10bb \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 10","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/52a73ee5-8399-4bcb-8fc0-231fa4a46688 \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 12","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/6a0f8c10-2465-4b57-80d3-54ee5c1cce31/tasks \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 23","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 201 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 151","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/6a0f8c10-2465-4b57-80d3-54ee5c1cce31/tasks/17609f10-a0c1-4bb9-9c36-0d20e7630289 \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 15","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 156","level":"info"} +{"message":" \n METHOD: PUT\n URL: /users/d34a71e3-2808-4a36-a2dd-80953ca957fd \n STATUS: 200 \n QUERY: {} \n BODY: {\"name\":\"Autotest updated TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\",\"id\":\"d34a71e3-2808-4a36-a2dd-80953ca957fd\"} \n TIME: 29","level":"info"} +{"message":" \n METHOD: PUT\n URL: /boards/472340ce-b39f-4b00-bab1-10e3ffb578f7 \n STATUS: 200 \n QUERY: {} \n BODY: {\"id\":\"472340ce-b39f-4b00-bab1-10e3ffb578f7\",\"title\":\"Autotest updated board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 30","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/6a0f8c10-2465-4b57-80d3-54ee5c1cce31/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 31","level":"info"} +{"message":" \n METHOD: GET\n URL: /users/d34a71e3-2808-4a36-a2dd-80953ca957fd \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 11","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/472340ce-b39f-4b00-bab1-10e3ffb578f7 \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 14","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/6a0f8c10-2465-4b57-80d3-54ee5c1cce31/tasks/d0db5d54-8a64-46d3-87a9-26000b0bec4e \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 13","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /users/d34a71e3-2808-4a36-a2dd-80953ca957fd \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 17","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/472340ce-b39f-4b00-bab1-10e3ffb578f7 \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 20","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 201 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 162","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 162","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/6a0f8c10-2465-4b57-80d3-54ee5c1cce31/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":null,\"columnId\":null} \n TIME: 177","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /users/c6602ef1-61a5-4e61-8b1c-aca32231694f \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 8","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/1ad4d552-e120-42b5-bf27-a9267596af81 \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 15","level":"info"} +{"message":" \n METHOD: PUT\n URL: /boards/6a0f8c10-2465-4b57-80d3-54ee5c1cce31/tasks/c11cc46f-cce8-42b8-8eb3-53569f6ae9db \n STATUS: 200 \n QUERY: {} \n BODY: {\"columnId\":null,\"title\":\"Autotest updated task\",\"order\":0,\"description\":\"Lorem ipsum\",\"userId\":null,\"boardId\":\"6a0f8c10-2465-4b57-80d3-54ee5c1cce31\",\"id\":\"c11cc46f-cce8-42b8-8eb3-53569f6ae9db\"} \n TIME: 148","level":"info"} +{"message":" \n CODE: 404\n MESSAGE: Board not found","level":"warn"} +{"message":" \n METHOD: GET\n URL: /boards/1ad4d552-e120-42b5-bf27-a9267596af81 \n STATUS: 404 \n QUERY: {} \n BODY: {} \n TIME: 12","level":"info"} +{"message":" \n METHOD: POST\n URL: /users \n STATUS: 201 \n QUERY: {} \n BODY: {\"name\":\"TEST_USER\",\"login\":\"test_user\",\"password\":\"T35t_P@55w0rd\"} \n TIME: 148","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/6a0f8c10-2465-4b57-80d3-54ee5c1cce31/tasks/c11cc46f-cce8-42b8-8eb3-53569f6ae9db \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 14","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 61","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Autotest board\",\"columns\":[{\"title\":\"Backlog\",\"order\":1},{\"title\":\"Sprint\",\"order\":2}]} \n TIME: 58","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/6a0f8c10-2465-4b57-80d3-54ee5c1cce31/tasks/17609f10-a0c1-4bb9-9c36-0d20e7630289 \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 23","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/e6a158ff-b575-4ffb-ab1a-13e4428fb1ee/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Task #2\",\"order\":2,\"description\":\"Lorem ipsum\",\"boardId\":\"e6a158ff-b575-4ffb-ab1a-13e4428fb1ee\",\"userId\":null,\"columnId\":null} \n TIME: 49","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/e6a158ff-b575-4ffb-ab1a-13e4428fb1ee/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Task #1\",\"order\":1,\"description\":\"Lorem ipsum\",\"boardId\":\"e6a158ff-b575-4ffb-ab1a-13e4428fb1ee\",\"userId\":null,\"columnId\":null} \n TIME: 55","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/e6a158ff-b575-4ffb-ab1a-13e4428fb1ee/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Task #3\",\"order\":3,\"description\":\"Lorem ipsum\",\"boardId\":\"e6a158ff-b575-4ffb-ab1a-13e4428fb1ee\",\"userId\":null,\"columnId\":null} \n TIME: 55","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/6a0f8c10-2465-4b57-80d3-54ee5c1cce31/tasks/17609f10-a0c1-4bb9-9c36-0d20e7630289 \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 398","level":"info"} +{"message":" \n CODE: 404\n MESSAGE: Task not found","level":"warn"} +{"message":" \n METHOD: GET\n URL: /boards/6a0f8c10-2465-4b57-80d3-54ee5c1cce31/tasks/17609f10-a0c1-4bb9-9c36-0d20e7630289 \n STATUS: 404 \n QUERY: {} \n BODY: {} \n TIME: 12","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/e6a158ff-b575-4ffb-ab1a-13e4428fb1ee/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Task #4\",\"order\":4,\"description\":\"Lorem ipsum\",\"boardId\":\"e6a158ff-b575-4ffb-ab1a-13e4428fb1ee\",\"userId\":null,\"columnId\":null} \n TIME: 431","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/e6a158ff-b575-4ffb-ab1a-13e4428fb1ee/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Task #5\",\"order\":5,\"description\":\"Lorem ipsum\",\"boardId\":\"e6a158ff-b575-4ffb-ab1a-13e4428fb1ee\",\"userId\":null,\"columnId\":null} \n TIME: 435","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/cd2de6a1-5724-47d5-9034-169efae974ef/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Task #1\",\"order\":1,\"description\":\"Lorem ipsum\",\"userId\":\"0c5c48ea-04cc-4f77-a6b4-18a2be6cab8b\",\"boardId\":\"cd2de6a1-5724-47d5-9034-169efae974ef\"} \n TIME: 437","level":"info"} +{"message":" \n METHOD: POST\n URL: /boards/cd2de6a1-5724-47d5-9034-169efae974ef/tasks \n STATUS: 201 \n QUERY: {} \n BODY: {\"title\":\"Task #2\",\"order\":2,\"description\":\"Lorem ipsum\",\"userId\":\"0c5c48ea-04cc-4f77-a6b4-18a2be6cab8b\",\"boardId\":\"cd2de6a1-5724-47d5-9034-169efae974ef\"} \n TIME: 439","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/6a0f8c10-2465-4b57-80d3-54ee5c1cce31 \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 15","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /users/0c5c48ea-04cc-4f77-a6b4-18a2be6cab8b \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 17","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/e6a158ff-b575-4ffb-ab1a-13e4428fb1ee/tasks/8a383e81-bfe6-4e4b-83dc-09bc900e38cd \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 26","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/e6a158ff-b575-4ffb-ab1a-13e4428fb1ee/tasks/26f8d4ae-c9d5-4825-a6a6-bbc8c9226d48 \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 38","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/e6a158ff-b575-4ffb-ab1a-13e4428fb1ee/tasks/a6ae9a5a-b688-4445-9d70-95a590d68f6a \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 42","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/e6a158ff-b575-4ffb-ab1a-13e4428fb1ee/tasks/dd392e25-7510-427a-8d1b-71eab996496e \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 42","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/e6a158ff-b575-4ffb-ab1a-13e4428fb1ee/tasks/1ba7fb03-ab4f-4df4-916b-d658ea516984 \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 46","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/cd2de6a1-5724-47d5-9034-169efae974ef/tasks/6e82503c-55b4-44a9-8e1d-d935d652031c \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 41","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/e6a158ff-b575-4ffb-ab1a-13e4428fb1ee \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 17","level":"info"} +{"message":" \n METHOD: GET\n URL: /boards/cd2de6a1-5724-47d5-9034-169efae974ef/tasks/67c05563-7979-4832-91df-189fbd665364 \n STATUS: 200 \n QUERY: {} \n BODY: {} \n TIME: 9","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/cd2de6a1-5724-47d5-9034-169efae974ef/tasks/6e82503c-55b4-44a9-8e1d-d935d652031c \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 30","level":"info"} +{"message":" \n CODE: 404\n MESSAGE: Task not found","level":"warn"} +{"message":" \n METHOD: GET\n URL: /boards/e6a158ff-b575-4ffb-ab1a-13e4428fb1ee/tasks/26f8d4ae-c9d5-4825-a6a6-bbc8c9226d48 \n STATUS: 404 \n QUERY: {} \n BODY: {} \n TIME: 31","level":"info"} +{"message":" \n CODE: 404\n MESSAGE: Task not found","level":"warn"} +{"message":" \n METHOD: GET\n URL: /boards/e6a158ff-b575-4ffb-ab1a-13e4428fb1ee/tasks/a6ae9a5a-b688-4445-9d70-95a590d68f6a \n STATUS: 404 \n QUERY: {} \n BODY: {} \n TIME: 34","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/cd2de6a1-5724-47d5-9034-169efae974ef/tasks/67c05563-7979-4832-91df-189fbd665364 \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 48","level":"info"} +{"message":" \n CODE: 404\n MESSAGE: Task not found","level":"warn"} +{"message":" \n METHOD: GET\n URL: /boards/e6a158ff-b575-4ffb-ab1a-13e4428fb1ee/tasks/8a383e81-bfe6-4e4b-83dc-09bc900e38cd \n STATUS: 404 \n QUERY: {} \n BODY: {} \n TIME: 45","level":"info"} +{"message":" \n CODE: 404\n MESSAGE: Task not found","level":"warn"} +{"message":" \n METHOD: GET\n URL: /boards/e6a158ff-b575-4ffb-ab1a-13e4428fb1ee/tasks/dd392e25-7510-427a-8d1b-71eab996496e \n STATUS: 404 \n QUERY: {} \n BODY: {} \n TIME: 52","level":"info"} +{"message":" \n CODE: 404\n MESSAGE: Task not found","level":"warn"} +{"message":" \n METHOD: GET\n URL: /boards/e6a158ff-b575-4ffb-ab1a-13e4428fb1ee/tasks/1ba7fb03-ab4f-4df4-916b-d658ea516984 \n STATUS: 404 \n QUERY: {} \n BODY: {} \n TIME: 54","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/cd2de6a1-5724-47d5-9034-169efae974ef \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 9","level":"info"} +{"message":" \n METHOD: DELETE\n URL: /boards/1403f263-5884-4b74-ba2b-e4ab63b7b3c6 \n STATUS: 204 \n QUERY: {} \n BODY: {} \n TIME: 11","level":"info"} diff --git a/nest-cli.json b/nest-cli.json new file mode 100644 index 0000000..56167b3 --- /dev/null +++ b/nest-cli.json @@ -0,0 +1,4 @@ +{ + "collection": "@nestjs/schematics", + "sourceRoot": "src" +} diff --git a/package-lock.json b/package-lock.json index 5d74279..ee33777 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,89 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@angular-devkit/core": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.6.tgz", + "integrity": "sha512-3dA0Z6sIIxCDjZS/DucgmIKti7EZ/LgHoHgCO72Q50H5ZXbUSNBz5wGl5hVq2+gzrnFgU/0u40MIs6eptk30ZA==", + "dev": true, + "requires": { + "ajv": "6.12.6", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.3", + "source-map": "0.7.3" + }, + "dependencies": { + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "@angular-devkit/schematics": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-11.2.6.tgz", + "integrity": "sha512-bhi2+5xtVAjtr3bsXKT8pnoBamQrArd/Y20ueA4Od7cd38YT97nzTA1wyHBFG0vWd0HMyg42ZS0aycNBuOebaA==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.2.6", + "ora": "5.3.0", + "rxjs": "6.6.3" + }, + "dependencies": { + "ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } + } + }, + "@angular-devkit/schematics-cli": { + "version": "0.1102.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-0.1102.6.tgz", + "integrity": "sha512-86PmafA9mYDeM08cNWHcJCEY1Yqo5aq/YaBzCak93luByDQ4Ao4Jqts9l/xBCZBGUdVrczCNzcdwr/Y/6JPPzA==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.2.6", + "@angular-devkit/schematics": "11.2.6", + "@schematics/schematics": "0.1102.6", + "ansi-colors": "4.1.1", + "inquirer": "7.3.3", + "minimist": "1.2.5", + "symbol-observable": "3.0.0" + } + }, "@babel/code-frame": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", @@ -435,6 +518,48 @@ "kuler": "^2.0.0" } }, + "@eslint/eslintrc": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", + "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + } + }, + "@fastify/ajv-compiler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-1.1.0.tgz", + "integrity": "sha512-gvCOUNpXsWrIQ3A4aXCLIdblL0tDq42BG/2Xw7oxbil9h11uow10ztS2GuFazNBfjbrsZ5nl+nPl5jDSjj5TSg==", + "requires": { + "ajv": "^6.12.6" + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -748,6 +873,325 @@ } } }, + "@nestjs/cli": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-7.6.0.tgz", + "integrity": "sha512-lW1px2gSHkRoBpKSxzP6IJNQscRKs97OAaVyV46OAP6oUR996E0EPkIslIaa16kKLJ3SFOUeZo5xl5nYbqp43g==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.2.6", + "@angular-devkit/schematics": "11.2.6", + "@angular-devkit/schematics-cli": "0.1102.6", + "@nestjs/schematics": "^7.3.0", + "chalk": "3.0.0", + "chokidar": "3.5.1", + "cli-table3": "0.5.1", + "commander": "4.1.1", + "fork-ts-checker-webpack-plugin": "6.2.0", + "inquirer": "7.3.3", + "node-emoji": "1.10.0", + "ora": "5.4.0", + "os-name": "4.0.0", + "rimraf": "3.0.2", + "shelljs": "0.8.4", + "tree-kill": "1.2.2", + "tsconfig-paths": "3.9.0", + "tsconfig-paths-webpack-plugin": "3.5.1", + "typescript": "4.2.3", + "webpack": "5.28.0", + "webpack-node-externals": "2.5.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "typescript": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", + "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", + "dev": true + } + } + }, + "@nestjs/common": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-8.0.1.tgz", + "integrity": "sha512-7v6FkqDkOEHOzV7K69ftJ/F469VMLC94+1OD0BpcNKysvizbWOdaikrCFxocqyuREuejLCfILYMfcU+keEVIow==", + "requires": { + "axios": "0.21.1", + "iterare": "1.2.1", + "tslib": "2.3.0", + "uuid": "8.3.2" + }, + "dependencies": { + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + } + }, + "@nestjs/config": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-1.0.0.tgz", + "integrity": "sha512-Id5dQsCISMxWu0oPKcEP4ltQ5Z6eY748WHIXNOFc2Q9qehvHVk8iMRMmTIzTJ+eCOB6qKBAdhTI4KuRyRlwAuQ==", + "requires": { + "dotenv": "10.0.0", + "dotenv-expand": "5.1.0", + "lodash.get": "4.4.2", + "lodash.has": "4.5.2", + "lodash.set": "4.3.2", + "uuid": "8.3.2" + }, + "dependencies": { + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" + } + } + }, + "@nestjs/core": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-8.0.1.tgz", + "integrity": "sha512-5ikIdzHp8axcodDsMxBI8Bx+Fx/1HP9opDT8eltHs5FWG1gbhUZnjjI82A7mcrrlt9PkPyoInuX6d/F4DTeuAg==", + "requires": { + "@nuxtjs/opencollective": "0.3.2", + "fast-safe-stringify": "2.0.7", + "iterare": "1.2.1", + "object-hash": "2.2.0", + "path-to-regexp": "3.2.0", + "tslib": "2.3.0", + "uuid": "8.3.2" + }, + "dependencies": { + "path-to-regexp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", + "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==" + }, + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + } + }, + "@nestjs/mapped-types": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-1.0.0.tgz", + "integrity": "sha512-26AW5jHadLXtvHs+M+Agd9KZ92dDlBrmD0rORlBlvn2KvsWs4JRaKl2mUsrW7YsdZeAu3Hc4ukqyYyDdyCmMWQ==" + }, + "@nestjs/platform-express": { + "version": "7.6.18", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-7.6.18.tgz", + "integrity": "sha512-Dty2bBhsW7EInMRPS1pkXKJ3GBBusEj6fnEpb0UfkaT3E7asay9c64kCmZE+8hU430qQjY+fhBb1RNWWPnUiwQ==", + "requires": { + "body-parser": "1.19.0", + "cors": "2.8.5", + "express": "4.17.1", + "multer": "1.4.2", + "tslib": "2.2.0" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + } + } + }, + "@nestjs/platform-fastify": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/platform-fastify/-/platform-fastify-8.0.1.tgz", + "integrity": "sha512-JjdyItpzuzO8/CigT5LQJ62DIpRcA20LU/d+TKnIqSlQQodvOLcQXv+NZQFUhtt24N3zbq1KrhehJeO2b122tg==", + "requires": { + "fastify": "3.18.1", + "fastify-cors": "6.0.1", + "fastify-formbody": "5.0.0", + "light-my-request": "4.4.1", + "middie": "5.3.0", + "path-to-regexp": "3.2.0", + "tslib": "2.3.0" + }, + "dependencies": { + "path-to-regexp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", + "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==" + }, + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + } + }, + "@nestjs/schematics": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-7.3.1.tgz", + "integrity": "sha512-eyBjJstAjecpdzRuBLiqnwomwXIAEV3+kPkpaphOieRUM6nBhjnXCCl3Qf8Dul2QUQK4NOVPd8FFxWtGP5XNlg==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.2.4", + "@angular-devkit/schematics": "11.2.4", + "fs-extra": "9.1.0", + "jsonc-parser": "3.0.0", + "pluralize": "8.0.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.4.tgz", + "integrity": "sha512-98mGDV4XtKWiQ/2D6yzvOHrnJovXchaAN9AjscAHd2an8Fkiq72d9m2wREpk+2J40NWTDB6J5iesTh3qbi8+CA==", + "dev": true, + "requires": { + "ajv": "6.12.6", + "fast-json-stable-stringify": "2.1.0", + "magic-string": "0.25.7", + "rxjs": "6.6.3", + "source-map": "0.7.3" + } + }, + "@angular-devkit/schematics": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-11.2.4.tgz", + "integrity": "sha512-M9Ike1TYawOIHzenlZS1ufQbsS+Z11/doj5w/UrU0q2OEKc6U375t5qVGgKo3PLHHS8osb9aW9xYwBfVlKrryQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.2.4", + "ora": "5.3.0", + "rxjs": "6.6.3" + } + }, + "ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "@nestjs/swagger": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-5.0.0.tgz", + "integrity": "sha512-LWKDmiEwNzIIaWj1Tq2x+RXTZdN4trhaafI0pA3JtBosYlx1klgzsrV/vsNvcTnD2RNd9P5u8yRPApJVpSWr5A==", + "requires": { + "@nestjs/mapped-types": "1.0.0", + "lodash": "4.17.21", + "path-to-regexp": "3.2.0" + }, + "dependencies": { + "path-to-regexp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", + "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==" + } + } + }, + "@nestjs/testing": { + "version": "7.6.18", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-7.6.18.tgz", + "integrity": "sha512-1AVk9vWZlPpx4CmzY6z9z0DHFgGCadfr01QdisGFAN740JwKqZWEqz12cVd+nsXDlYQPFRkp2ICBIS/6k1qZGQ==", + "dev": true, + "requires": { + "optional": "0.1.4", + "tslib": "2.2.0" + }, + "dependencies": { + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "dev": true + } + } + }, + "@nestjs/typeorm": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-8.0.1.tgz", + "integrity": "sha512-710zOLk4j5kkv7STkKVNPpqBaGAhFjDblLaUHllqogw9z4gkjuPv59xfnqzwle4oAex25nihh0QGqtpB21zw7w==", + "requires": { + "uuid": "8.3.2" + } + }, "@nodelib/fs.scandir": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", @@ -774,6 +1218,26 @@ "fastq": "^1.6.0" } }, + "@nuxtjs/opencollective": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "requires": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + } + }, + "@schematics/schematics": { + "version": "0.1102.6", + "resolved": "https://registry.npmjs.org/@schematics/schematics/-/schematics-0.1102.6.tgz", + "integrity": "sha512-x77kbJL/HqR4gx0tbt35VCOGLyMvB7jD/x7eB1njhQRF8E/xynEOk3i+7A5VmK67QP5NJxU8BQKlPkJ55tBDmg==", + "dev": true, + "requires": { + "@angular-devkit/core": "11.2.6", + "@angular-devkit/schematics": "11.2.6" + } + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -812,30 +1276,6 @@ "defer-to-connect": "^1.0.1" } }, - "@tsconfig/node10": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.7.tgz", - "integrity": "sha512-aBvUmXLQbayM4w3A8TrjwrXs4DZ8iduJnuJLLRGdkWlyakCf1q6uHZJBzXoRA/huAEknG5tcUyQxN3A+In5euQ==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.7.tgz", - "integrity": "sha512-dgasobK/Y0wVMswcipr3k0HpevxFJLijN03A8mYfEPvWvOs14v0ZlYTR4kIgMx8g4+fTyTFv8/jLCIfRqLDJ4A==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.0.tgz", - "integrity": "sha512-RKkL8eTdPv6t5EHgFKIVQgsDapugbuOptNd9OOunN/HAkzmmTnZELx1kNCK0rSdUYGmiFMM3rRQMAWiyp023LQ==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.1.tgz", - "integrity": "sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==", - "dev": true - }, "@types/babel__core": { "version": "7.1.14", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", @@ -904,6 +1344,38 @@ "@types/node": "*" } }, + "@types/cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==", + "dev": true + }, + "@types/eslint": { + "version": "7.2.14", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.14.tgz", + "integrity": "sha512-pESyhSbUOskqrGcaN+bCXIQDyT5zTaRWfj5ZjjSlMatgGjIn3QQPfocAu4WSabUR7CGyLZ2CQaZyISOEX7/saw==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.46", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz", + "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==", + "dev": true + }, "@types/express": { "version": "4.17.12", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.12.tgz", @@ -960,6 +1432,16 @@ "@types/istanbul-lib-report": "*" } }, + "@types/jest": { + "version": "26.0.24", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz", + "integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==", + "dev": true, + "requires": { + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" + } + }, "@types/json-schema": { "version": "7.0.7", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", @@ -973,9 +1455,9 @@ "dev": true }, "@types/jsonwebtoken": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.2.tgz", - "integrity": "sha512-X8BOCkp+WJVNYCYIBugREtVZa4Y09Or9HDx6xqRZem5F8jJV8FuJgNessXyMuv9+U8pjnvdezASwU28uw+1scw==", + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.4.tgz", + "integrity": "sha512-4L8msWK31oXwdtC81RmRBAULd0ShnAHjBuKT9MRQpjP0piNrZdXyTRcKY9/UIfhGeKIT4PvF5amOOUbbT/9Wpg==", "dev": true, "requires": { "@types/node": "*" @@ -1038,6 +1520,25 @@ "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", "dev": true }, + "@types/superagent": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.12.tgz", + "integrity": "sha512-1GQvD6sySQPD6p9EopDFI3f5OogdICl1sU/2ij3Esobz/RtL9fWZZDPmsuv7eiy5ya+XNiPAxUcI3HIUTJa+3A==", + "dev": true, + "requires": { + "@types/cookiejar": "*", + "@types/node": "*" + } + }, + "@types/supertest": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.11.tgz", + "integrity": "sha512-uci4Esokrw9qGb9bvhhSVEjd6rkny/dk5PK/Qz4yxKiyppEI+dOPlNrZBahE3i+PoKFYyDxChVXZ/ysS/nrm1Q==", + "dev": true, + "requires": { + "@types/superagent": "*" + } + }, "@types/swagger-ui-express": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/@types/swagger-ui-express/-/swagger-ui-express-4.1.2.tgz", @@ -1054,6 +1555,11 @@ "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==", "dev": true }, + "@types/validator": { + "version": "13.6.3", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.6.3.tgz", + "integrity": "sha512-fWG42pMJOL4jKsDDZZREnXLjc3UE0R8LOJfARWYg6U966rxDT7TYejYzLnUF5cvSObGg34nd0+H2wHHU5Omdfw==" + }, "@types/yamljs": { "version": "0.2.31", "resolved": "https://registry.npmjs.org/@types/yamljs/-/yamljs-0.2.31.tgz", @@ -1171,6 +1677,164 @@ } } }, + "@webassemblyjs/ast": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, "abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", @@ -1182,6 +1846,11 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, + "abstract-logging": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", + "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==" + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -1208,9 +1877,9 @@ } }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true }, "acorn-walk": { @@ -1241,7 +1910,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1249,6 +1917,12 @@ "uri-js": "^4.2.2" } }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, "ansi-align": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", @@ -1355,11 +2029,21 @@ "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz", "integrity": "sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==" }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" + }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", @@ -1494,9 +2178,9 @@ "dev": true }, "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "async": { @@ -1510,12 +2194,34 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, + "atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" + }, + "avvio": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-7.2.2.tgz", + "integrity": "sha512-XW2CMCmZaCmCCsIaJaLKxAzPwF37fXi1KGxNOvedOpeisLdmxZnblGc3hpHWYnlP+KOUxZsazh43WXNHgXpbqw==", + "requires": { + "archy": "^1.0.0", + "debug": "^4.0.0", + "fastq": "^1.6.1", + "queue-microtask": "^1.1.2" + } + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -1528,6 +2234,14 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "requires": { + "follow-redirects": "^1.10.0" + } + }, "babel-jest": { "version": "26.6.3", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", @@ -1682,12 +2396,47 @@ "tweetnacl": "^0.14.3" } }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + } + } + }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -1819,6 +2568,15 @@ "node-releases": "^1.1.71" } }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, "bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -1845,14 +2603,44 @@ "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "buffer-writer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", - "dev": true + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" + }, + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } }, "bytes": { "version": "3.1.0", @@ -2049,6 +2837,12 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -2084,6 +2878,16 @@ } } }, + "class-validator": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.13.1.tgz", + "integrity": "sha512-zWIeYFhUitvAHBwNhDdCRK09hWx+P0HUwFE8US8/CxFpMVzkUK8RJl7yOIE+BVu2lxyPNgeOaFv78tLE47jBIg==", + "requires": { + "@types/validator": "^13.1.3", + "libphonenumber-js": "^1.9.7", + "validator": "^13.5.2" + } + }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -2190,6 +2994,56 @@ } } }, + "cli-spinners": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", + "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", + "dev": true + }, + "cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "cli-truncate": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", @@ -2260,6 +3114,12 @@ "wrap-ansi": "^6.2.0" } }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, "clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", @@ -2379,6 +3239,41 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "configstore": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", @@ -2399,6 +3294,11 @@ "integrity": "sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==", "dev": true }, + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -2646,8 +3546,16 @@ "deepmerge": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } }, "defer-to-connect": { "version": "1.1.3", @@ -2737,6 +3645,38 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -2820,6 +3760,16 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.0.tgz", "integrity": "sha512-yy3x9XjojW8ROTBePD25AcMoHqGHsvHmtfw8QWlpEXyMMXXPj6brUA464AptUvHuTPRmNz6Sd3ZLNLeJl6dHJA==" }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + }, + "duplex-child-process": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/duplex-child-process/-/duplex-child-process-0.0.5.tgz", + "integrity": "sha1-HCRiuOyP0B5DKDbrvVkrzf+7Zek=" + }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", @@ -2866,6 +3816,12 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, "enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", @@ -2885,6 +3841,24 @@ "once": "^1.4.0" } }, + "enhanced-resolve": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "dependencies": { + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "dev": true + } + } + }, "enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -2894,6 +3868,15 @@ "ansi-colors": "^4.1.1" } }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2927,6 +3910,12 @@ "unbox-primitive": "^1.0.0" } }, + "es-module-lexer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", + "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", + "dev": true + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -3020,36 +4009,40 @@ } }, "eslint": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.2.0.tgz", - "integrity": "sha512-B3BtEyaDKC5MlfDa2Ha8/D6DsS4fju95zs0hjS3HdGazw+LNayai38A25qMppK37wWGWNYSPOR6oYzlz5MHsRQ==", + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", + "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.2", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^5.1.0", - "eslint-utils": "^2.0.0", - "eslint-visitor-keys": "^1.2.0", - "espree": "^7.1.0", - "esquery": "^1.2.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", "is-glob": "^4.0.0", "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.14", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -3058,9 +4051,32 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^5.2.3", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } } }, "eslint-config-airbnb": { @@ -3326,6 +4342,12 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, "exec-sh": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", @@ -3644,11 +4666,15 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, + "fast-decode-uri-component": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==" + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-diff": { "version": "1.2.0", @@ -3673,8 +4699,18 @@ "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-json-stringify": { + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-2.7.7.tgz", + "integrity": "sha512-2kiwC/hBlK7QiGALsvj0QxtYwaReLOmAwOWJIxt5WHBB9EwXsqbsu8LCel47yh8NV8CEcFmnZYcXh4BionJcwQ==", + "requires": { + "ajv": "^6.11.0", + "deepmerge": "^4.2.2", + "rfdc": "^1.2.0", + "string-similarity": "^4.0.1" + } }, "fast-levenshtein": { "version": "2.0.6", @@ -3682,16 +4718,101 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fast-redact": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.1.tgz", + "integrity": "sha512-kYpn4Y/valC9MdrISg47tZOpYBNoTXKgT9GYXFpHN/jYFs+lFkPoisY+LcBODdKVMY96ATzvzsWv+ES/4Kmufw==" + }, "fast-safe-stringify": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" }, + "fastify": { + "version": "3.18.1", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-3.18.1.tgz", + "integrity": "sha512-OA0imy/bQCMzf7LUCb/1JI3ZSoA0Jo0MLpYULxV7gpppOpJ8NBxDp2PQoQ0FDqJevZPb7tlZf5JacIQft8x9yw==", + "requires": { + "@fastify/ajv-compiler": "^1.0.0", + "abstract-logging": "^2.0.0", + "avvio": "^7.1.2", + "fast-json-stringify": "^2.5.2", + "fastify-error": "^0.3.0", + "fastify-warning": "^0.2.0", + "find-my-way": "^4.0.0", + "flatstr": "^1.0.12", + "light-my-request": "^4.2.0", + "pino": "^6.2.1", + "proxy-addr": "^2.0.7", + "readable-stream": "^3.4.0", + "rfdc": "^1.1.4", + "secure-json-parse": "^2.0.0", + "semver": "^7.3.2", + "tiny-lru": "^7.0.0" + }, + "dependencies": { + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + } + } + }, + "fastify-cors": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fastify-cors/-/fastify-cors-6.0.1.tgz", + "integrity": "sha512-eeNTdQNmBsqHL87we+X74n9+H0hTDX0cXGVdyZjGf9om2pZfigAZwuSxaUUE2pLP9tp5+rEd5kejKQ8+ZCvAoA==", + "requires": { + "fastify-plugin": "^3.0.0", + "vary": "^1.1.2" + } + }, + "fastify-error": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/fastify-error/-/fastify-error-0.3.1.tgz", + "integrity": "sha512-oCfpcsDndgnDVgiI7bwFKAun2dO+4h84vBlkWsWnz/OUK9Reff5UFoFl241xTiLeHWX/vU9zkDVXqYUxjOwHcQ==" + }, + "fastify-formbody": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fastify-formbody/-/fastify-formbody-5.0.0.tgz", + "integrity": "sha512-W79/hq6xGyV4lFsgt+qgKHPorGu4RzAhFQ5GKXI0T8DbkEMx+7gjFAD2y+q194vMMiIvMhuE7j6JyCEZVMOHYw==", + "requires": { + "fastify-plugin": "^2.3.2" + }, + "dependencies": { + "fastify-plugin": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-2.3.4.tgz", + "integrity": "sha512-I+Oaj6p9oiRozbam30sh39BiuiqBda7yK2nmSPVwDCfIBlKnT8YB3MY+pRQc2Fcd07bf6KPGklHJaQ2Qu81TYQ==", + "requires": { + "semver": "^7.3.2" + } + } + } + }, + "fastify-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-3.0.0.tgz", + "integrity": "sha512-ZdCvKEEd92DNLps5n0v231Bha8bkz1DjnPP/aEz37rz/q42Z5JVLmgnqR4DYuNn3NXAO3IDCPyRvgvxtJ4Ym4w==" + }, + "fastify-warning": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/fastify-warning/-/fastify-warning-0.2.0.tgz", + "integrity": "sha512-s1EQguBw/9qtc1p/WTY4eq9WMRIACkj+HTcOIK1in4MV5aFaQC9ZCIt0dJ7pr5bIf4lPpHvAtP2ywpTNgs7hqw==" + }, "fastq": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", - "dev": true, "requires": { "reusify": "^1.0.4" } @@ -3725,12 +4846,12 @@ } }, "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { - "flat-cache": "^2.0.1" + "flat-cache": "^3.0.4" } }, "fill-range": { @@ -3766,6 +4887,17 @@ } } }, + "find-my-way": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-4.3.2.tgz", + "integrity": "sha512-hjd9Oe7cJUknsm4cj91RLjz4TDsgFDkTTeKax44059GPI/nBYbGVG5RvCMDLcXLJhq1561QqknstRUwup0INzg==", + "requires": { + "fast-decode-uri-component": "^1.0.1", + "fast-deep-equal": "^3.1.3", + "safe-regex2": "^2.0.0", + "semver-store": "^0.3.0" + } + }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -3785,20 +4917,24 @@ } }, "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.1.0", + "rimraf": "^3.0.2" } }, + "flatstr": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", + "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" + }, "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz", + "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==", "dev": true }, "fn.name": { @@ -3806,6 +4942,11 @@ "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, + "follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==" + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -3818,6 +4959,59 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, + "fork-ts-checker-webpack-plugin": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.2.0.tgz", + "integrity": "sha512-DTNbOhq6lRdjYprukX54JMeYJgQ0zMow+R5BMLwWxEX2NAXthIkwnV8DBmsWjwNLSUItKZM4TCCJbtgrtKBu2Q==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", @@ -3854,6 +5048,26 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, "fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -3862,6 +5076,12 @@ "minipass": "^3.0.0" } }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4020,6 +5240,12 @@ "is-glob": "^4.0.1" } }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "global-dirs": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", @@ -4030,12 +5256,20 @@ } }, "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", "dev": true, "requires": { - "type-fest": "^0.8.1" + "type-fest": "^0.20.2" + }, + "dependencies": { + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } } }, "globby": { @@ -4523,8 +5757,25 @@ "string-width": "^4.1.0", "strip-ansi": "^6.0.0", "through": "^2.3.6" + }, + "dependencies": { + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + } } }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -4704,6 +5955,12 @@ "is-path-inside": "^3.0.1" } }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, "is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", @@ -4923,6 +6180,11 @@ "istanbul-lib-report": "^3.0.0" } }, + "iterare": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==" + }, "jest": { "version": "26.6.3", "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", @@ -5596,6 +6858,12 @@ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "dev": true }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -5611,8 +6879,7 @@ "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -5635,6 +6902,30 @@ "minimist": "^1.2.0" } }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, "jsonwebtoken": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", @@ -5746,6 +7037,23 @@ "type-check": "~0.4.0" } }, + "libphonenumber-js": { + "version": "1.9.21", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.9.21.tgz", + "integrity": "sha512-hMt+UTcXjRj7ETZBCxdPSw362Lq16Drf4R9vYgw19WoJLLpi/gMwseW62tevBKfF3pfXfr5rNnbc/hSl7XgWnQ==" + }, + "light-my-request": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-4.4.1.tgz", + "integrity": "sha512-FDNRF2mYjthIRWE7O8d/X7AzDx4otQHl4/QXbu3Q/FRwBFcgb+ZoDaUd5HwN53uQXLAiw76osN+Va0NEaOW6rQ==", + "requires": { + "ajv": "^6.12.2", + "cookie": "^0.4.0", + "fastify-warning": "^0.2.0", + "readable-stream": "^3.6.0", + "set-cookie-parser": "^2.4.1" + } + }, "lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", @@ -5859,6 +7167,15 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -5884,6 +7201,34 @@ "strip-bom": "^3.0.0" } }, + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } + } + }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -5897,9 +7242,24 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, + "lodash.has": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", + "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=" + }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -5930,11 +7290,34 @@ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, + "lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" + }, + "lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -6033,6 +7416,21 @@ "yallist": "^4.0.0" } }, + "macos-release": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz", + "integrity": "sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==", + "dev": true + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -6083,6 +7481,51 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "memfs": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz", + "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==", + "dev": true, + "requires": { + "fs-monkey": "1.0.3" + } + }, + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -6115,6 +7558,23 @@ "picomatch": "^2.2.3" } }, + "middie": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/middie/-/middie-5.3.0.tgz", + "integrity": "sha512-uq6Ob4dmmHeT6rJpBDWVwSxBzxzKlBvnrZdLSRJeuhHzljvZ6ccgLP/HaShgfiYrQvekRH0KUe/G1WTu/IrXsQ==", + "requires": { + "fastify-plugin": "^3.0.0", + "path-to-regexp": "^6.1.0", + "reusify": "^1.0.4" + }, + "dependencies": { + "path-to-regexp": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.0.tgz", + "integrity": "sha512-f66KywYG6+43afgE/8j/GoiNyygk/bnoCbps++3ErRKsIYkGGupyv07R2Ok5m9i67Iqc+T2g1eAUGUPzWhYTyg==" + } + } + }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -6156,8 +7616,7 @@ "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "minipass": { "version": "3.1.3", @@ -6201,7 +7660,6 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, "requires": { "minimist": "^1.2.5" } @@ -6211,6 +7669,21 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "multer": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", + "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + } + }, "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", @@ -6257,6 +7730,12 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -6268,6 +7747,15 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" }, + "node-emoji": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", + "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "dev": true, + "requires": { + "lodash.toarray": "^4.4.0" + } + }, "node-fetch": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", @@ -6306,10 +7794,18 @@ "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", "dev": true }, + "node-vegeta": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/node-vegeta/-/node-vegeta-1.0.7.tgz", + "integrity": "sha512-BLGdJUobqC3wEPHF2TV4a6XSzxIC0+qrmT2zqFDHVUVRlQ7/WNQmoMDmEhUns9niI/Y0lHHnjV8gVVORxIgLbw==", + "requires": { + "duplex-child-process": "^0.0.5" + } + }, "nodemon": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz", - "integrity": "sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", + "integrity": "sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==", "dev": true, "requires": { "chokidar": "^3.2.2", @@ -6383,9 +7879,9 @@ "dev": true }, "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "dev": true }, "npm-run-path": { @@ -6469,6 +7965,11 @@ } } }, + "object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" + }, "object-inspect": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.2.tgz", @@ -6574,6 +8075,12 @@ "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", "dev": true }, + "optional": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/optional/-/optional-0.1.4.tgz", + "integrity": "sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw==", + "dev": true + }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -6588,6 +8095,33 @@ "word-wrap": "^1.2.3" } }, + "ora": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.0.tgz", + "integrity": "sha512-1StwyXQGoU6gdjYkyVcqOLnVlbKj+6yPNNOxJVgpt9t4eksKjiriiHuxktLYkgllwk+D6MbC4ihH84L1udRXPg==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + } + }, + "os-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.0.tgz", + "integrity": "sha512-caABzDdJMbtykt7GmSogEat3faTKQhmZf0BS5l/pZGmP0vPWQjXWqOhbLyK+b6j2/DQPmEvYdzLXJXXLJNVDNg==", + "dev": true, + "requires": { + "macos-release": "^2.2.0", + "windows-release": "^4.0.0" + } + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -6668,8 +8202,7 @@ "packet-reader": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==", - "dev": true + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" }, "parent-module": { "version": "1.0.1", @@ -6770,7 +8303,6 @@ "version": "8.6.0", "resolved": "https://registry.npmjs.org/pg/-/pg-8.6.0.tgz", "integrity": "sha512-qNS9u61lqljTDFvmk/N66EeGq3n6Ujzj0FFyNMGQr6XuEv4tgNTXvJQTfJdcvGit5p5/DWPu+wj920hAJFI+QQ==", - "dev": true, "requires": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", @@ -6784,32 +8316,27 @@ "pg-connection-string": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", - "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==", - "dev": true + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" }, "pg-int8": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "dev": true + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" }, "pg-pool": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.3.0.tgz", - "integrity": "sha512-0O5huCql8/D6PIRFAlmccjphLYWC+JIzvUhSzXSpGaf+tjTZc4nn+Lr7mLXBbFJfvwbP0ywDv73EiaBsxn7zdg==", - "dev": true + "integrity": "sha512-0O5huCql8/D6PIRFAlmccjphLYWC+JIzvUhSzXSpGaf+tjTZc4nn+Lr7mLXBbFJfvwbP0ywDv73EiaBsxn7zdg==" }, "pg-protocol": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz", - "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==", - "dev": true + "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" }, "pg-types": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "dev": true, "requires": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", @@ -6822,7 +8349,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.4.tgz", "integrity": "sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w==", - "dev": true, "requires": { "split2": "^3.1.1" } @@ -6839,6 +8365,31 @@ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, + "pino": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.12.0.tgz", + "integrity": "sha512-5NGopOcUusGuklGHVVv9az0Hv/Dj3urHhD3G+zhl5pBGIRYAeGCi/Ej6YCl16Q2ko28cmYiJz+/qRoJiwy62Rw==", + "requires": { + "fast-redact": "^3.0.0", + "fast-safe-stringify": "^2.0.8", + "flatstr": "^1.0.12", + "pino-std-serializers": "^3.1.0", + "quick-format-unescaped": "^4.0.3", + "sonic-boom": "^1.0.2" + }, + "dependencies": { + "fast-safe-stringify": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz", + "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==" + } + } + }, + "pino-std-serializers": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", + "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==" + }, "pirates": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", @@ -6866,6 +8417,12 @@ "semver-compare": "^1.0.0" } }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -6875,26 +8432,22 @@ "postgres-array": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "dev": true + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" }, "postgres-bytea": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=", - "dev": true + "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" }, "postgres-date": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "dev": true + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" }, "postgres-interval": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "dev": true, "requires": { "xtend": "^4.0.0" } @@ -6994,6 +8547,12 @@ "ipaddr.js": "1.9.1" } }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -7019,8 +8578,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "pupa": { "version": "2.1.1", @@ -7039,8 +8597,21 @@ "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "quick-format-unescaped": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.3.tgz", + "integrity": "sha512-MaL/oqh02mhEo5m5J2rwsVL23Iw2PEaGVHgT2vFt8AAsr0lfvQA5dpXo9TPu0rz7tSBdUPgkbam0j/fj5ZM8yg==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } }, "range-parser": { "version": "1.2.1", @@ -7124,6 +8695,15 @@ "picomatch": "^2.2.1" } }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, "reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -7270,6 +8850,12 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -7343,14 +8929,17 @@ "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { "glob": "^7.1.3" } @@ -7377,12 +8966,18 @@ } }, "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.2.0.tgz", + "integrity": "sha512-aX8w9OpKrQmiPKfT1bqETtUr9JygIz6GZ+gql8v7CijClsP0laoFUdKzxFAoWuRdSlOdU2+crss+cMf+cqMTnw==", "requires": { - "tslib": "^1.9.0" + "tslib": "~2.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" + } } }, "safe-buffer": { @@ -7399,6 +8994,21 @@ "ret": "~0.1.10" } }, + "safe-regex2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz", + "integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==", + "requires": { + "ret": "~0.2.0" + }, + "dependencies": { + "ret": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", + "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==" + } + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -7559,6 +9169,22 @@ "xmlchars": "^2.2.0" } }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "secure-json-parse": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.4.0.tgz", + "integrity": "sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg==" + }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -7596,6 +9222,11 @@ "integrity": "sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA==", "dev": true }, + "semver-store": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/semver-store/-/semver-store-0.3.0.tgz", + "integrity": "sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg==" + }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -7638,6 +9269,15 @@ } } }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "serve-static": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", @@ -7654,6 +9294,11 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, + "set-cookie-parser": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz", + "integrity": "sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg==" + }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -7704,6 +9349,17 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, + "shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, "shellwords": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", @@ -7755,20 +9411,38 @@ "dev": true }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true } } @@ -7895,6 +9569,21 @@ } } }, + "sonic-boom": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", + "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", + "requires": { + "atomic-sleep": "^1.0.0", + "flatstr": "^1.0.12" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -7930,6 +9619,12 @@ "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -7975,7 +9670,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, "requires": { "readable-stream": "^3.0.0" } @@ -8056,6 +9750,11 @@ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", "dev": true }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, "string-argv": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", @@ -8072,6 +9771,11 @@ "strip-ansi": "^6.0.0" } }, + "string-similarity": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz", + "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==" + }, "string-width": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", @@ -8266,6 +9970,12 @@ "swagger-ui-dist": "^3.18.1" } }, + "symbol-observable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-3.0.0.tgz", + "integrity": "sha512-6tDOXSHiVjuCaasQSWTmHUWn4PuG7qa3+1WT031yTc/swT7+rLiw3GOrFxaH1E3lLP09dH3bVuVDf2gK5rxG3Q==", + "dev": true + }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -8273,57 +9983,45 @@ "dev": true }, "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", "dev": true, "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "ajv": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", + "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true } } }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, "tar": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", @@ -8360,6 +10058,93 @@ "supports-hyperlinks": "^2.0.0" } }, + "terser": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", + "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.4.tgz", + "integrity": "sha512-C2WkFwstHDhVEmsmlCxrXUtVklS+Ir1A7twrYzrDrQQOIMOaVAYykaoo/Aq1K0QRkMoY2hhvDQY1cm4jnIMFwA==", + "dev": true, + "requires": { + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-worker": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz", + "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "schema-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -8410,6 +10195,11 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, + "tiny-lru": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-7.0.6.tgz", + "integrity": "sha512-zNYO0Kvgn5rXzWpL0y3RS09sMK67eGaQj9805jlK9G6pSadfriTczzLHFXa/xcW4mIRfmlB9HyQ/+SgL0V1uow==" + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -8512,21 +10302,90 @@ "punycode": "^2.1.1" } }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, "triple-beam": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, + "ts-jest": { + "version": "26.5.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz", + "integrity": "sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^26.1.0", + "json5": "2.x", + "lodash": "4.x", + "make-error": "1.x", + "mkdirp": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "dependencies": { + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } + }, + "ts-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz", + "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^2.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + } + } + } + }, "ts-node": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.0.0.tgz", - "integrity": "sha512-ROWeOIUvfFbPZkoDis0L/55Fk+6gFQNZwwKPLinacRl6tsxstTF1DbAcLKkovwnpKMVvOMHP1TIbnwXwtLg1gg==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", "dev": true, "requires": { - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", @@ -8547,6 +10406,17 @@ "strip-bom": "^3.0.0" } }, + "tsconfig-paths-webpack-plugin": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.5.1.tgz", + "integrity": "sha512-n5CMlUUj+N5pjBhBACLq4jdr9cPTitySCjIosoQm0zwK99gmrcTGAfY9CwxRFT9+9OleNWXPRUcxsKP4AYExxQ==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^3.9.0" + } + }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -8607,6 +10477,11 @@ "mime-types": "~2.1.24" } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -8921,7 +10796,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "requires": { "punycode": "^2.1.0" } @@ -8997,6 +10871,11 @@ "spdx-expression-parse": "^3.0.0" } }, + "validator": { + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.6.0.tgz", + "integrity": "sha512-gVgKbdbHgtxpRyR8K0O6oFZPhhB5tT1jeEHZR0Znr9Svg03U0+r9DXWMrnRAB+HtCStDQKlaIZm42tVsVjqtjg==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -9040,12 +10919,103 @@ "makeerror": "1.0.x" } }, + "watchpack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, "webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true }, + "webpack": { + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.28.0.tgz", + "integrity": "sha512-1xllYVmA4dIvRjHzwELgW4KjIU1fW4PEuEnjsylz7k7H5HgPOctIq7W1jrt3sKH9yG5d72//XWzsHhfoWvsQVg==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.46", + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/wasm-edit": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "acorn": "^8.0.4", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.7.0", + "es-module-lexer": "^0.4.0", + "eslint-scope": "^5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.1", + "watchpack": "^2.0.0", + "webpack-sources": "^2.1.1" + }, + "dependencies": { + "acorn": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", + "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", + "dev": true + }, + "schema-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.0.tgz", + "integrity": "sha512-tTEaeYkyIhEZ9uWgAjDerWov3T9MgX8dhhy2r0IGeeX4W8ngtGl1++dUve/RUqzuaASSh7shwCDJjEzthxki8w==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "dev": true + } + } + }, + "webpack-node-externals": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-2.5.2.tgz", + "integrity": "sha512-aHdl/y2N7PW2Sx7K+r3AxpJO+aDMcYzMQd60Qxefq3+EwhewSbTBqNumOsCE1JsCUNoyfGj5465N0sSf6hc/5w==", + "dev": true + }, + "webpack-sources": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", + "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + } + }, "whatwg-encoding": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", @@ -9151,6 +11121,58 @@ "string-width": "^4.0.0" } }, + "windows-release": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", + "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", + "dev": true, + "requires": { + "execa": "^4.0.2" + }, + "dependencies": { + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + } + } + }, "winston": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz", @@ -9255,15 +11277,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -9317,8 +11330,7 @@ "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { "version": "4.0.3", diff --git a/package.json b/package.json index 546585d..ed6ac0c 100644 --- a/package.json +++ b/package.json @@ -9,13 +9,22 @@ "description": "REST service starter for RS School", "main": "src/server.js", "scripts": { - "dev": "nodemon -L ./src/server.ts", - "build": "tsc --project .", - "start": "ts-node ./src/server.ts", + "prebuild": "rimraf dist", + "build": "nest build", + "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "start": "nest start", + "start:dev": "nest start --watch", + "start:debug": "nest start --debug --watch", + "start:prod": "node dist/main", "lint": "eslint --ext .js,.ts --fix src/", "test": "cross-env DEBUG=rs:* jest --testMatch \"/test/e2e/test/*.test.js\" --noStackTrace --runInBand", "test:auth": "cross-env DEBUG=rs:* TEST_MODE=auth jest --noStackTrace", - "migration:generate": "npx ts-node ./node_modules/typeorm/cli.js --config=src/common/ormconfig.ts migration:generate -n Trello_db" + "migration:generate": "npx ts-node ./node_modules/typeorm/cli.js --config=src/common/ormconfig.ts migration:generate -n Trello_db", + "test:watch": "jest --watch", + "test:cov": "jest --coverage", + "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", + "test:e2e": "jest --config ./test/jest-e2e.json", + "start:dev:db": "./src/scripts/start-db.sh" }, "keywords": [ "rs", @@ -47,14 +56,28 @@ ] }, "dependencies": { + "@nestjs/common": "^8.0.1", + "@nestjs/config": "^1.0.0", + "@nestjs/core": "^8.0.1", + "@nestjs/mapped-types": "^1.0.0", + "@nestjs/platform-express": "^7.6.15", + "@nestjs/platform-fastify": "^8.0.1", + "@nestjs/swagger": "^5.0.0", + "@nestjs/typeorm": "^8.0.0", "@types/bcrypt": "^5.0.0", "@types/node": "^15.6.1", "bcrypt": "^5.0.1", + "class-validator": "^0.13.1", "cors": "^2.8.5", "cross-env": "7.0.3", - "dotenv": "9.0.0", + "dotenv": "^9.0.0", "express": "4.17.1", "jsonwebtoken": "^8.5.1", + "node-vegeta": "^1.0.7", + "pg": "^8.6.0", + "reflect-metadata": "^0.1.13", + "rimraf": "^3.0.2", + "rxjs": "^7.2.0", "swagger-ui-express": "4.1.6", "typeorm": "^0.2.34", "uuid": "8.3.2", @@ -62,31 +85,41 @@ "yamljs": "0.3.0" }, "devDependencies": { - "@types/express": "^4.17.12", - "@types/jsonwebtoken": "^8.5.2", + "@nestjs/cli": "^7.6.0", + "@nestjs/schematics": "^7.3.0", + "@nestjs/testing": "^7.6.15", + "@types/express": "^4.17.11", + "@types/jest": "^26.0.22", + "@types/jsonwebtoken": "^8.5.4", + "@types/node": "^14.14.36", + "@types/supertest": "^2.0.10", "@types/swagger-ui-express": "^4.1.2", "@types/uuid": "^8.3.0", "@types/yamljs": "^0.2.31", - "@typescript-eslint/eslint-plugin": "^4.25.0", + "@typescript-eslint/eslint-plugin": "^4.19.0", + "@typescript-eslint/parser": "^4.19.0", "chai": "4.3.4", "debug": "4.3.1", "dirty-chai": "2.0.1", - "eslint": "7.2.0", + "eslint": "^7.22.0", "eslint-config-airbnb-base": "14.2.1", "eslint-config-airbnb-typescript": "^12.3.1", - "eslint-config-prettier": "8.3.0", + "eslint-config-prettier": "^8.1.0", "eslint-plugin-import": "2.22.1", "eslint-plugin-node": "11.1.0", - "eslint-plugin-prettier": "3.4.0", + "eslint-plugin-prettier": "^3.3.1", "http-status-codes": "^2.1.4", "husky": "4.3.8", - "jest": "26.6.3", + "jest": "^26.6.3", "lint-staged": "10.5.4", - "nodemon": "2.0.7", + "nodemon": "^2.0.9", "pg": "^8.6.0", - "prettier": "2.2.1", - "supertest": "6.1.3", - "ts-node": "^10.0.0", - "typescript": "^4.3.2" + "prettier": "^2.2.1", + "supertest": "^6.1.3", + "ts-jest": "^26.5.4", + "ts-loader": "^8.0.18", + "ts-node": "^9.1.1", + "tsconfig-paths": "^3.9.0", + "typescript": "^4.2.3" } } diff --git a/src/app.controller.ts b/src/app.controller.ts new file mode 100644 index 0000000..7f42734 --- /dev/null +++ b/src/app.controller.ts @@ -0,0 +1,15 @@ +import { Controller, Get } from '@nestjs/common'; +import { AppService } from './app.service'; + +@Controller() +export class AppController { + private readonly appService: AppService; + constructor(appService: AppService) { + this.appService = appService; + } + + @Get() + getHello(): string { + return this.appService.getHello(); + } +} diff --git a/src/app.module.ts b/src/app.module.ts new file mode 100644 index 0000000..769851b --- /dev/null +++ b/src/app.module.ts @@ -0,0 +1,43 @@ +import { HttpErrorFilter } from './shared/http-error.filter'; +import { Module } from '@nestjs/common'; +import { ConfigModule, ConfigService } from '@nestjs/config'; +import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm'; +import { AppController } from './app.controller'; +import { AppService } from './app.service'; +import { UsersModule } from './resources/users/users.module'; +import { BoardsModule } from './resources/boards/boards.module'; +import { TasksModule } from './resources/tasks/tasks.module'; +import { LoginModule } from './resources/auth/login.module'; +import { APP_FILTER, APP_INTERCEPTOR } from '@nestjs/core'; +import { LoggingInterceptor } from './shared/logging.interceptor'; +import config from './common/ormconfig'; + +console.log(config.password) + +@Module({ + imports: [ + ConfigModule.forRoot({ isGlobal: true }), + TypeOrmModule.forRootAsync({ + imports: [ConfigModule], + useFactory: () => (config as TypeOrmModuleOptions ), + inject: [ConfigService] + }), + UsersModule, + BoardsModule, + TasksModule, + LoginModule + ], + controllers: [AppController], + providers: [ + AppService, + { + provide: APP_FILTER, + useClass: HttpErrorFilter + }, + { + provide: APP_INTERCEPTOR, + useClass: LoggingInterceptor + } + ] +}) +export class AppModule {} diff --git a/src/app.service.ts b/src/app.service.ts new file mode 100644 index 0000000..927d7cc --- /dev/null +++ b/src/app.service.ts @@ -0,0 +1,8 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class AppService { + getHello(): string { + return 'Hello World!'; + } +} diff --git a/src/app.ts b/src/app.ts deleted file mode 100644 index c238098..0000000 --- a/src/app.ts +++ /dev/null @@ -1,41 +0,0 @@ -import express, { Request, Response, NextFunction } from 'express'; -import swaggerUI from 'swagger-ui-express'; -import path from 'path'; -import YAML from 'yamljs'; -import { logerRequests } from './middlewares/logger'; -import userRouter from './resources/users/user.router'; -import boardRouter from './resources/boards/board.router'; -import taskRouter from './resources/tasks/tasks.router'; -import { - handleError, ErrorHandler, uncaughtException, unhandledRejection -} from './middlewares/error.handler'; -import { validateSession } from './middlewares/validate.session'; -import { userLogin } from './resources/login/login.service'; - -const app = express(); -const swaggerDocument = YAML.load(path.join(__dirname, '../doc/api.yaml')); -app.use(express.json()); - -app.use('/doc', swaggerUI.serve, swaggerUI.setup(swaggerDocument)); - -app.use(logerRequests); - -app.use('/', (req, res, next) => { - if (req.originalUrl === '/') { - res.send('Service is running!'); - return; - } next(); -}); -app.use('/login', userLogin); -app.use('/users', validateSession, userRouter); -app.use('/boards', validateSession, boardRouter); -app.use('/boards/:boardsId/tasks', validateSession, taskRouter); -app.use((err:ErrorHandler, _req:Request, res:Response, next:NextFunction) => { - handleError(err, res); - next(); -}); - -process.on('uncaughtException', uncaughtException); -process.on('unhandledRejection', unhandledRejection); - -export default app; diff --git a/src/common/config.ts b/src/common/config.ts deleted file mode 100644 index 423d5d9..0000000 --- a/src/common/config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import dotenv from 'dotenv'; -import path from 'path'; - -dotenv.config({ - path: path.join(__dirname, '../../.env') -}); - -export const { - PORT, - NODE_ENV, - MONGO_CONNECTION_STRING, - JWT_SECRET_KEY - -} = process.env; - -export const AUTH_MODE = process.env['AUTH_MODE'] === 'true'; diff --git a/src/common/ormconfig.ts b/src/common/ormconfig.ts index 0e8caa4..ba67e59 100644 --- a/src/common/ormconfig.ts +++ b/src/common/ormconfig.ts @@ -1,31 +1,32 @@ -import { ConnectionOptions } from 'typeorm'; -import dotenv from 'dotenv'; -import path from 'path'; -import { User } from '../entities/user.entity'; -import { Board } from '../entities/board.entity'; -import { Task } from '../entities/task.entity'; - -dotenv.config({ - path: path.join(__dirname, '../../.env') -}); - -const config = { - type: 'postgres', - synchronize: false, - host: process.env['POSTGRES_HOST'] || process.env['DB_HOST'], - port: process.env['POSTGRES_PORT'] || process.env['DB_PORT'], - username: process.env['POSTGRES_USER'] || process.env['DB_USERNAME'], - password: process.env['POSTGRES_PASSWORD'] || process.env['DB_PASSWORD'], - database: process.env['POSTGRES_DB'] || process.env['DB_NAME'], - entities: [User, Board, Task], - autoReconnect: true, - reconnectTries: Number.MAX_VALUE, - reconnectionInterval: 1000, - migrationsRun: true, - migrations: ['src/migration/*.ts'], - cli: { - migrationsDir: '/src/migration' - } -} as ConnectionOptions; - -export=config; +import dotenv from 'dotenv'; +import path from 'path'; +import { User } from '../resources/users/entities/user.entity'; +import { Board } from '../resources/boards/entities/board.entity'; +import { Task } from '../resources/tasks/entities/task.entity'; +import { TrelloDb1626057786688 as Tables } from '../migration/1626057786688-Trello_db' + +dotenv.config({ + path: path.join(__dirname, '../../.env') +}); + +const config = { + type: 'postgres', + host: process.env.POSTGRES_HOST || process.env.DB_HOST, + port: + parseInt(process.env.POSTGRES_PORT) || + parseInt(process.env.DB_PORT), + username: process.env.POSTGRES_USER || process.env.DB_USERNAME, + password: process.env.POSTGRES_PASSWORD || process.env.DB_PASSWORD, + database: process.env.POSTGRES_DB || process.env.DB_NAME, + entities: [User, Board, Task], + migrations: [Tables], + migrationsTableName: 'migrations_typeorm', + synchronize: false, + migrationsRun: true, + cli: { + migrationsDir: 'src/migration' + } +}; + +export default config; + diff --git a/src/entities/board.entity.ts b/src/entities/board.entity.ts deleted file mode 100644 index f6c8974..0000000 --- a/src/entities/board.entity.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { - Entity, Column, PrimaryGeneratedColumn, OneToMany -} from 'typeorm'; -// eslint-disable-next-line import/no-cycle -import { Task } from './task.entity'; - -interface IColumn { - title: string; - order:number; -} - -@Entity({ - name: 'board' -}) -export class Board { - @PrimaryGeneratedColumn('uuid') - id: string; - - @Column('varchar', { length: 200 }) - title = 'BOARD'; - - @Column({ type: 'jsonb', nullable: true }) - columns: IColumn[]; - - @OneToMany(() => Task, (task:Task) => task.boardId) - tasks: Task[]; - - static toResponse(board:Board):Board { - const { - id, title, columns, tasks - } = board; - return { - id, title, columns, tasks - }; - } -} diff --git a/src/entities/user.entity.ts b/src/entities/user.entity.ts deleted file mode 100644 index 84945ea..0000000 --- a/src/entities/user.entity.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { - Entity, Column, PrimaryGeneratedColumn, OneToMany -} from 'typeorm'; -import jwt from 'jsonwebtoken'; -import { Task } from './task.entity'; - -export interface IUserToRes extends Omit { - token:string, - message?:string -} - -@Entity({ - name: 'user' -}) -export class User { - @PrimaryGeneratedColumn('uuid') - id: string; - - @Column('varchar', { length: 40, nullable: true }) - name: string | null; - - @Column('varchar', { length: 40 }) - login: string; - - @Column('varchar', { length: 200 }) - password: string; - - @OneToMany(() => Task, (task: Task): string | null => task.userId, { cascade: true }) - tasks: Task[]; - - static toResponse = (user: User):IUserToRes => { - const { - id, name, login, tasks - } = user; - const token = jwt.sign({ id: user.id }, process.env['JWT_SECRET_KEY'] as string, { expiresIn: 60 * 60 * 24 }); - return { - id, name, login, token, tasks - }; - }; -} diff --git a/src/helpers/db.ts b/src/helpers/db.ts deleted file mode 100644 index 6b92319..0000000 --- a/src/helpers/db.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { createConnection } from 'typeorm'; -import config from '../common/ormconfig'; - -const connectToDB = async () => { - await createConnection(config); - console.log('Success'); -}; - -export const tryBDConnect = async (cb: () => void): Promise => { - await connectToDB(); - cb(); -}; diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..ad90742 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,27 @@ +import { NestFactory } from '@nestjs/core'; +import { AppModule } from './app.module'; +import { createUserAdmin } from './utils/admin.creator'; +import { + FastifyAdapter, + NestFastifyApplication +} from '@nestjs/platform-fastify'; +import dotenv from 'dotenv'; +import path from 'path'; + +dotenv.config({ + path: path.join(__dirname, '../.env') +}); + +async function bootstrap() { + const isFastify = JSON.parse(process.env.USE_FASTIFY.toLowerCase()); + const app = isFastify + ? await NestFactory.create( + AppModule, + new FastifyAdapter() + ) + : await NestFactory.create(AppModule); + createUserAdmin(); + await app.listen(8080, '0.0.0.0'); + console.log(`enabled ${isFastify ? 'fastify' : 'express'}`); +} +bootstrap(); diff --git a/src/middlewares/error.handler.ts b/src/middlewares/error.handler.ts deleted file mode 100644 index 1899503..0000000 --- a/src/middlewares/error.handler.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Response } from 'express'; -import fs from 'fs'; -import { loggerErrors, uncaughtExceptionLogger, unhandledRejectionLogger } from './logger'; - -const CODE = 500; - -export class ErrorHandler extends Error { - statusCode: number; - - constructor(statusCode: number, message?: string) { - super(); - this.statusCode = statusCode || CODE; - if (message) { - this.message = message; - } - } -} - -export const handleError = (err: ErrorHandler, res: Response): void => { - const { statusCode, message } = err; - loggerErrors(statusCode, message); - res.status(statusCode).json({ - status: 'error', - statusCode, - message - }); -}; - -export const uncaughtException = (err: Error, origin: string):void => { - fs.writeFileSync( - './crash-data.log', - `Caught exception: ${err}\nException origin: ${origin}` - ); - uncaughtExceptionLogger(err, origin); - process.exit(1); -}; - -export const unhandledRejection = (reason:{ message:string }):void => { - fs.writeFileSync( - './crash-data.log', - `Caught exception: ${reason.message})` - ); - unhandledRejectionLogger(reason.message); - process.exit(1); -}; diff --git a/src/middlewares/logger.ts b/src/middlewares/logger.ts deleted file mode 100644 index 845cb70..0000000 --- a/src/middlewares/logger.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { createLogger, format, transports } from 'winston'; -import { Request, Response, NextFunction } from 'express'; -import { finished } from 'stream'; - -const logger = createLogger({ - level: 'silly', - format: format.combine(format.colorize(), format.cli()), - transports: [ - new transports.Console(), - new transports.File({ - filename: 'error.log', - level: 'error', - format: format.combine(format.uncolorize(), format.json()) - }), - new transports.File({ - filename: 'info.log', - level: 'info', - format: format.combine(format.uncolorize(), format.json()) - }) - ] -}); - -export const logerRequests = ( - req: Request, - res: Response, - next: NextFunction -): void => { - const { method, url } = req; - const body = JSON.stringify(req.body); - const query = JSON.stringify(req.query); - const start = Date.now(); - next(); - - finished(res, () => { - const ms = Date.now() - start; - const { statusCode } = res; - logger.info(`\n METHOD: ${method}\n URL: ${url} \n STATUS: ${statusCode} \n QUERY: ${query} \n BODY: ${body} \n TIME: ${ms}`); - }); -}; - -export const loggerErrors = (statusCode: number, message: string):void => { - logger.warn(`\n CODE: ${statusCode}\n MESSAGE: ${message}`); -}; - -export const uncaughtExceptionLogger = (error:Error, origin:string):void => { - logger.error(`${error} origin ${origin}`); -}; - -export const unhandledRejectionLogger = (message: string):void => { - logger.error(`Unhandled rejection detected: ${message}`); -}; diff --git a/src/middlewares/validate.session.ts b/src/middlewares/validate.session.ts deleted file mode 100644 index 35cce3d..0000000 --- a/src/middlewares/validate.session.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Request, Response, NextFunction } from 'express'; -import jwt from 'jsonwebtoken'; -import { getUser } from '../resources/users/user.service'; - -export const validateSession = (req:Request, res:Response, next:NextFunction):void => { - if (req.method === 'OPTIONS') { - next(); - } else { - const header = req.headers['x-access-token'] || req.headers.authorization; - const sessionToken = header ? header.replace(/^Bearer\s+/, '') : ''; - if (!sessionToken) { - res - .status(401) - .send({ auth: false, message: 'Unauthorized error' }); - } else { - jwt.verify(sessionToken, process.env['JWT_SECRET_KEY'] as string, (_err, decoded) => { - if (decoded) { - getUser(decoded['id']).then( - () => { - next(); - }, - () => { - res.status(401).send({ error: 'Unauthorized error' }); - } - ); - } else { - res.status(400).send({ error: 'not authorized' }); - } - }); - } - } -}; diff --git a/src/migration/1624756844708-Trello_db.ts b/src/migration/1626057786688-Trello_db.ts similarity index 86% rename from src/migration/1624756844708-Trello_db.ts rename to src/migration/1626057786688-Trello_db.ts index 114849f..6a43f2f 100644 --- a/src/migration/1624756844708-Trello_db.ts +++ b/src/migration/1626057786688-Trello_db.ts @@ -1,12 +1,12 @@ import {MigrationInterface, QueryRunner} from "typeorm"; -export class TrelloDb1624756844708 implements MigrationInterface { - name = 'TrelloDb1624756844708' +export class TrelloDb1626057786688 implements MigrationInterface { + name = 'TrelloDb1626057786688' public async up(queryRunner: QueryRunner): Promise { await queryRunner.query(`CREATE TABLE "board" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "title" character varying(200) NOT NULL, "columns" jsonb, CONSTRAINT "PK_865a0f2e22c140d261b1df80eb1" PRIMARY KEY ("id"))`); await queryRunner.query(`CREATE TABLE "task" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "title" character varying(200) NOT NULL, "order" integer NOT NULL, "description" character varying(200) NOT NULL, "columnId" uuid, "userIdId" uuid, "boardIdId" uuid, CONSTRAINT "PK_fb213f79ee45060ba925ecd576e" PRIMARY KEY ("id"))`); - await queryRunner.query(`CREATE TABLE "user" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "name" character varying(40) NOT NULL, "login" character varying(40) NOT NULL, "password" character varying(200) NOT NULL, CONSTRAINT "PK_cace4a159ff9f2512dd42373760" PRIMARY KEY ("id"))`); + await queryRunner.query(`CREATE TABLE "user" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "name" character varying(40), "login" character varying(40) NOT NULL, "password" character varying(200) NOT NULL, CONSTRAINT "PK_cace4a159ff9f2512dd42373760" PRIMARY KEY ("id"))`); await queryRunner.query(`ALTER TABLE "task" ADD CONSTRAINT "FK_29c593b244774c65824ae1df648" FOREIGN KEY ("userIdId") REFERENCES "user"("id") ON DELETE SET NULL ON UPDATE NO ACTION`); await queryRunner.query(`ALTER TABLE "task" ADD CONSTRAINT "FK_61a750180758aaf4a589ccefaa9" FOREIGN KEY ("boardIdId") REFERENCES "board"("id") ON DELETE CASCADE ON UPDATE NO ACTION`); } diff --git a/src/resources/auth/auth.controller.ts b/src/resources/auth/auth.controller.ts new file mode 100644 index 0000000..a1655da --- /dev/null +++ b/src/resources/auth/auth.controller.ts @@ -0,0 +1,30 @@ +import { + Controller, + Post, + Body, + HttpException, + HttpStatus +} from '@nestjs/common'; +import { UsersService } from '../users/users.service'; +import { UserLoginDto } from './dto/user-login.dto'; + +@Controller('login') +export class AuthController { + private readonly loginService: UsersService; + + constructor(loginService: UsersService) { + this.loginService = loginService; + } + + @Post() + async create( + @Body('login') login: UserLoginDto['login'], + @Body('password') password: UserLoginDto['password'] + ) { + const isLogin = await this.loginService.auth({ login, password }); + if (isLogin) { + return isLogin; + } + throw new HttpException('Unauthorized', HttpStatus.UNAUTHORIZED); + } +} diff --git a/src/resources/auth/auth.guard.ts b/src/resources/auth/auth.guard.ts new file mode 100644 index 0000000..1110787 --- /dev/null +++ b/src/resources/auth/auth.guard.ts @@ -0,0 +1,52 @@ +import { + CanActivate, + ExecutionContext, + HttpStatus, + HttpException +} from '@nestjs/common'; +import { getRepository } from 'typeorm'; +import { User } from '../users/entities/user.entity'; +import jwt from 'jsonwebtoken'; + +export class AuthGuard implements CanActivate { + async canActivate(context: ExecutionContext): Promise { + const req = context.switchToHttp().getRequest(); + const header = + req.headers['x-access-token'] || req.headers.authorization; + const sessionToken = header ? header.replace(/^Bearer\s+/, '') : ''; + if (!sessionToken) { + throw new HttpException('Unauthorized', HttpStatus.UNAUTHORIZED); + } else { + return new Promise(resolve => { + jwt.verify( + sessionToken, + process.env.JWT_SECRET_KEY as string, + (_err, decoded: { id }) => { + if (decoded) { + getRepository(User) + .findOne({ + where: { id: decoded.id } + }) + .then( + () => { + resolve(true); + }, + () => { + throw new HttpException( + 'Unauthorized error', + HttpStatus.UNAUTHORIZED + ); + } + ); + } else { + throw new HttpException( + 'Unauthorized error', + HttpStatus.UNAUTHORIZED + ); + } + } + ); + }); + } + } +} diff --git a/src/resources/auth/dto/login.dto.ts b/src/resources/auth/dto/login.dto.ts new file mode 100644 index 0000000..7a48ae3 --- /dev/null +++ b/src/resources/auth/dto/login.dto.ts @@ -0,0 +1,4 @@ +export class LoginDto { + login: string; + password: string; +} diff --git a/src/resources/auth/dto/user-login.dto.ts b/src/resources/auth/dto/user-login.dto.ts new file mode 100644 index 0000000..b8aea33 --- /dev/null +++ b/src/resources/auth/dto/user-login.dto.ts @@ -0,0 +1,9 @@ +import { IsNotEmpty } from 'class-validator'; + +export class UserLoginDto { + @IsNotEmpty() + login: string; + + @IsNotEmpty() + password: string; +} diff --git a/src/resources/auth/entities/login.entity.ts b/src/resources/auth/entities/login.entity.ts new file mode 100644 index 0000000..792f38c --- /dev/null +++ b/src/resources/auth/entities/login.entity.ts @@ -0,0 +1 @@ +export class Login {} diff --git a/src/resources/auth/login.module.ts b/src/resources/auth/login.module.ts new file mode 100644 index 0000000..081efae --- /dev/null +++ b/src/resources/auth/login.module.ts @@ -0,0 +1,10 @@ +import { UsersModule } from '../users/users.module'; +import { Module } from '@nestjs/common'; +import { AuthController } from './auth.controller'; + +@Module({ + controllers: [AuthController], + providers: [], + imports: [UsersModule] +}) +export class LoginModule {} diff --git a/src/resources/boards/board.memory.repository.ts b/src/resources/boards/board.memory.repository.ts deleted file mode 100644 index d7c37f0..0000000 --- a/src/resources/boards/board.memory.repository.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { getRepository } from 'typeorm'; -import { Board } from '../../entities/board.entity'; - -const getAll = async ():Promise => (await getRepository(Board).find({ where: {} })) - .map(Board.toResponse); - -const getBoard = async (id:string):Promise => { - const board = await getRepository(Board).findOne(id); - if (board) return Board.toResponse(board); - return null; -}; - -const createNewBoard = async (board:Board):Promise => { - const boardRepository = getRepository(Board); - const newUser = boardRepository.create(board); - const createdBoard = await boardRepository.save(newUser); - return Board.toResponse(createdBoard); -}; - -const updateBoard = async (obj:Board):Promise => { - const boardRepository = getRepository(Board); - const findedTask = await boardRepository.findOne(obj.id); - if (!findedTask) return null; - const reducedData = { ...findedTask, ...obj }; - const updatedBoard = await boardRepository.update(obj.id, reducedData); - if (updatedBoard.affected) return Board.toResponse(reducedData); - return null; -}; - -const deleteBoard = async (id:string):Promise => { - const studentRepositiory = getRepository(Board); - const deletionRes = await studentRepositiory.delete(id); - if (deletionRes.affected) return true; - return false; -}; - -export default { - deleteBoard, updateBoard, createNewBoard, getBoard, getAll -}; diff --git a/src/resources/boards/board.model.ts b/src/resources/boards/board.model.ts deleted file mode 100644 index f9864b3..0000000 --- a/src/resources/boards/board.model.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { v4 as uuid } from 'uuid'; - -interface IColumn { - title: string; - order:number; -} - -export default class Board { - id:string; - - title:string; - - columns:IColumn[]; - - constructor({ title = 'BOARD', columns = [] }:Board) { - this.id = uuid(); - this.title = title; - this.columns = [...columns]; - } - - static toResponse(board:Board):Board { - const { id, title, columns } = board; - return { id, title, columns }; - } -} diff --git a/src/resources/boards/board.router.ts b/src/resources/boards/board.router.ts deleted file mode 100644 index 282131b..0000000 --- a/src/resources/boards/board.router.ts +++ /dev/null @@ -1,49 +0,0 @@ -import express from 'express'; -import { - getAll, getBoard, createBoard, updateBoard, deleteBoard -} from './board.service'; -import { deleteAllTasks } from '../tasks/tasks.service'; -import { ErrorHandler } from '../../middlewares/error.handler'; - -const router = express.Router(); - -router.route('/').get(async (_req, res, next) => { - const boards = await getAll(); - if (boards) { - res.json(boards); - } else next(new ErrorHandler(404)); -}); - -router.route('/:boardId').get(async (req, res, next) => { - const board = await getBoard(req.params.boardId); - if (board) { - res.json(board); - } else next(new ErrorHandler(404, 'Board not found')); -}); - -router.route('/').post(async (req, res, next) => { - const newBoard = await createBoard({ ...req.body }); - if (newBoard) { - res.status(201).json(newBoard); - } else next(new ErrorHandler(404)); -}); - -router.route('/:boardId').put(async (req, res, next) => { - const newBoard = await updateBoard({ - ...req.body, - id: req.params.boardId - }); - if (newBoard) { - res.status(200).json(newBoard); - } else next(new ErrorHandler(401)); -}); - -router.route('/:boardId').delete(async (req, res, next) => { - const boardFinded = await deleteBoard(req.params.boardId); - if (boardFinded) { - await deleteAllTasks(req.params.boardId); - res.status(204).send('The board has been deleted'); - } else next(new ErrorHandler(404, 'Board not found')); -}); - -export default router; diff --git a/src/resources/boards/board.service.ts b/src/resources/boards/board.service.ts deleted file mode 100644 index c81da78..0000000 --- a/src/resources/boards/board.service.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Board } from '../../entities/board.entity'; -import boardRepo from './board.memory.repository'; - -export const getAll = async ():Promise => boardRepo.getAll(); -export const getBoard = (id:string):Promise => boardRepo.getBoard(id); -export const createBoard = (board:Board):Promise => boardRepo.createNewBoard(board); -export const updateBoard = (board:Board):Promise => boardRepo.updateBoard(board); -export const deleteBoard = (id:string):Promise => boardRepo.deleteBoard(id); diff --git a/src/resources/boards/boards.controller.ts b/src/resources/boards/boards.controller.ts new file mode 100644 index 0000000..48631b9 --- /dev/null +++ b/src/resources/boards/boards.controller.ts @@ -0,0 +1,69 @@ +import { + Controller, + Get, + Post, + Body, + Param, + Delete, + Put, + HttpException, + HttpStatus, + UseGuards +} from '@nestjs/common'; +import { Board } from './entities/board.entity'; +import { BoardsService } from './boards.service'; +import { AuthGuard } from '../auth/auth.guard'; + +@Controller('boards') +@UseGuards(AuthGuard) +export class BoardsController { + constructor(private readonly boardsService: BoardsService) {} + + @Get() + async findAll() { + const boards = await this.boardsService.findAll(); + if (boards) { + return boards; + } + throw new HttpException('Boards not found', HttpStatus.NOT_FOUND); + } + + @Get(':id') + async findOne(@Param('id') id: string) { + const board = await this.boardsService.findOne(id); + if (board) { + return board; + } + throw new HttpException('Board not found', HttpStatus.NOT_FOUND); + } + + @Post() + async create(@Body() body: Board) { + const newBoard = await this.boardsService.create({ ...body }); + if (newBoard) { + return newBoard; + } + throw new HttpException('board not created', HttpStatus.BAD_REQUEST); + } + + @Put(':id') + async update(@Param('id') id: string, @Body() body: Body) { + const newBoard = await this.boardsService.update({ + ...body, + id + }); + if (newBoard) { + return newBoard; + } + throw new HttpException('board not found', HttpStatus.BAD_REQUEST); + } + + @Delete(':id') + async remove(@Param('id') id: string) { + const boardFinded = await this.boardsService.remove(id); + if (boardFinded) { + return 'The board has been deleted'; + } + throw new HttpException('board not found', HttpStatus.BAD_REQUEST); + } +} diff --git a/src/resources/boards/boards.module.ts b/src/resources/boards/boards.module.ts new file mode 100644 index 0000000..5220e9d --- /dev/null +++ b/src/resources/boards/boards.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { BoardsService } from './boards.service'; +import { BoardsController } from './boards.controller'; +import { Board } from './entities/board.entity'; + +@Module({ + imports: [TypeOrmModule.forFeature([Board])], + controllers: [BoardsController], + providers: [BoardsService] +}) +export class BoardsModule {} diff --git a/src/resources/boards/boards.service.ts b/src/resources/boards/boards.service.ts new file mode 100644 index 0000000..c4ecd74 --- /dev/null +++ b/src/resources/boards/boards.service.ts @@ -0,0 +1,47 @@ +import { Injectable } from '@nestjs/common'; +import { Repository } from 'typeorm'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Board } from './entities/board.entity'; + +@Injectable() +export class BoardsService { + constructor( + @InjectRepository(Board) + private readonly boardsRepository: Repository + ) {} + + async findAll() { + const boards = await this.boardsRepository.find({ where: {} }); + return boards.map(Board.toResponse); + } + + async create(board: Board) { + const newUser = this.boardsRepository.create(board); + const createdBoard = await this.boardsRepository.save(newUser); + return Board.toResponse(createdBoard); + } + + async findOne(id: string) { + const board = await this.boardsRepository.findOne(id); + if (board) return Board.toResponse(board); + return null; + } + + async update(obj) { + const findedTask = await this.boardsRepository.findOne(obj.id); + if (!findedTask) return null; + const reducedData = { ...findedTask, ...obj }; + const updatedBoard = await this.boardsRepository.update( + obj.id, + reducedData + ); + if (updatedBoard.affected) return Board.toResponse(reducedData); + return null; + } + + async remove(id: string) { + const deletionRes = await this.boardsRepository.delete(id); + if (deletionRes.affected) return true; + return false; + } +} diff --git a/src/resources/boards/dto/create-board.dto.ts b/src/resources/boards/dto/create-board.dto.ts new file mode 100644 index 0000000..463a254 --- /dev/null +++ b/src/resources/boards/dto/create-board.dto.ts @@ -0,0 +1 @@ +export class CreateBoardDto {} diff --git a/src/resources/boards/dto/update-board.dto.ts b/src/resources/boards/dto/update-board.dto.ts new file mode 100644 index 0000000..9ef755d --- /dev/null +++ b/src/resources/boards/dto/update-board.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/mapped-types'; +import { CreateBoardDto } from './create-board.dto'; + +export class UpdateBoardDto extends PartialType(CreateBoardDto) {} diff --git a/src/resources/boards/entities/board.entity.ts b/src/resources/boards/entities/board.entity.ts new file mode 100644 index 0000000..5fe1d55 --- /dev/null +++ b/src/resources/boards/entities/board.entity.ts @@ -0,0 +1,34 @@ +import { Entity, Column, PrimaryGeneratedColumn, OneToMany } from 'typeorm'; +import { Task } from '../../tasks/entities/task.entity'; + +interface IColumn { + title: string; + order: number; +} + +@Entity({ + name: 'board' +}) +export class Board { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column('varchar', { length: 200 }) + title = 'BOARD'; + + @Column({ type: 'jsonb', nullable: true }) + columns: IColumn[]; + + @OneToMany(() => Task, (task: Task) => task.boardId) + tasks: Task[]; + + static toResponse(board: Board): Board { + const { id, title, columns, tasks } = board; + return { + id, + title, + columns, + tasks + }; + } +} diff --git a/src/resources/login/login.controller.ts b/src/resources/login/login.controller.ts deleted file mode 100644 index 42dd4a4..0000000 --- a/src/resources/login/login.controller.ts +++ /dev/null @@ -1,40 +0,0 @@ -import bcrypt from 'bcrypt'; -import jwt from 'jsonwebtoken'; -import { getRepository } from 'typeorm'; -import { User } from '../../entities/user.entity'; - -interface ILogin { - login: string; - password: string; -} - -interface IAuth extends User { - token: string; - message: string; -} - -export const userLoginController = async ({ - login, - password -}: ILogin): Promise => { - const user = await getRepository(User).findOne({ login }); - return new Promise((resolve, reject) => { - if (user) { - bcrypt.compare(password, user.password, (_err, matches) => { - if (matches) { - const token = jwt.sign( - { id: user.id }, - process.env['JWT_SECRET_KEY'] as string, - { expiresIn: 60 * 60 * 24 } - ); - resolve({ - ...User.toResponse(user), - token, - message: 'Successfully authenticated.' - } as IAuth); - } - reject(); - }); - } - }); -}; diff --git a/src/resources/login/login.service.ts b/src/resources/login/login.service.ts deleted file mode 100644 index 1b8fa7f..0000000 --- a/src/resources/login/login.service.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Response, Request, NextFunction } from 'express'; -import { ErrorHandler } from '../../middlewares/error.handler'; -import { userLoginController } from './login.controller'; - -export const userLogin = async ( - req: Request, - res: Response, - next: NextFunction -): Promise => { - const login = await userLoginController({ - login: req.body.login, - password: req.body.password - }); - if (login) { - res.status(201).json(login); - } - next(new ErrorHandler(401, 'Unauthorized')); -}; diff --git a/src/resources/tasks/dto/create-task.dto.ts b/src/resources/tasks/dto/create-task.dto.ts new file mode 100644 index 0000000..1d3c804 --- /dev/null +++ b/src/resources/tasks/dto/create-task.dto.ts @@ -0,0 +1 @@ +export class CreateTaskDto {} diff --git a/src/resources/tasks/dto/update-task.dto.ts b/src/resources/tasks/dto/update-task.dto.ts new file mode 100644 index 0000000..e519e1d --- /dev/null +++ b/src/resources/tasks/dto/update-task.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/mapped-types'; +import { CreateTaskDto } from './create-task.dto'; + +export class UpdateTaskDto extends PartialType(CreateTaskDto) {} diff --git a/src/entities/task.entity.ts b/src/resources/tasks/entities/task.entity.ts similarity index 63% rename from src/entities/task.entity.ts rename to src/resources/tasks/entities/task.entity.ts index c58d446..84c27fb 100644 --- a/src/entities/task.entity.ts +++ b/src/resources/tasks/entities/task.entity.ts @@ -1,46 +1,41 @@ -import { - Column, - Entity, - PrimaryGeneratedColumn, - ManyToOne -} from 'typeorm'; -import { Board } from './board.entity'; -import { User } from './user.entity'; - -@Entity() -export class Task { - @PrimaryGeneratedColumn('uuid') - id: string; - - @Column('varchar', { length: 200 }) - title: string; - - @Column('integer') - order: number; - - @Column('varchar', { length: 200 }) - description: string; - - @Column('uuid', { nullable: true }) - columnId: string | null = null; - - @ManyToOne(() => User, (user) => user.tasks, { - onDelete: 'SET NULL', - nullable: true - }) - @Column('uuid', { name: 'userIdId', nullable: true }) - userId: string | null; - - @ManyToOne(() => Board, (board) => board.tasks, { - onDelete: 'CASCADE', - nullable: true - }) - @Column('uuid', { name: 'boardIdId', nullable: true }) - boardId: string; - - static toResponse(task:Task):Task { - return { - ...task - }; - } -} +import { Column, Entity, PrimaryGeneratedColumn, ManyToOne } from 'typeorm'; +import { Board } from '../../boards/entities/board.entity'; +import { User } from '../../users/entities/user.entity'; + +@Entity() +export class Task { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column('varchar', { length: 200 }) + title: string; + + @Column('integer') + order: number; + + @Column('varchar', { length: 200 }) + description: string; + + @Column('uuid', { nullable: true }) + columnId: string | null = null; + + @ManyToOne(() => User, user => user.tasks, { + onDelete: 'SET NULL', + nullable: true + }) + @Column('uuid', { name: 'userIdId', nullable: true }) + userId: string | null; + + @ManyToOne(() => Board, board => board.tasks, { + onDelete: 'CASCADE', + nullable: true + }) + @Column('uuid', { name: 'boardIdId', nullable: true }) + boardId: string; + + static toResponse(task: Task): Task { + return { + ...task + }; + } +} diff --git a/src/resources/tasks/tasks.controller.ts b/src/resources/tasks/tasks.controller.ts new file mode 100644 index 0000000..00044a4 --- /dev/null +++ b/src/resources/tasks/tasks.controller.ts @@ -0,0 +1,66 @@ +import { + Controller, + Get, + Post, + Body, + Param, + Delete, + Put, + HttpException, + HttpStatus, + UseGuards +} from '@nestjs/common'; +import { TasksService } from './tasks.service'; +import { Task } from './entities/task.entity'; +import { AuthGuard } from '../auth/auth.guard'; + +@Controller('/boards/:boardId/tasks') +@UseGuards(AuthGuard) +export class TasksController { + constructor(private readonly tasksService: TasksService) {} + + @Get() + async findAll(@Param('boardId') boardId: string) { + const tasks = await this.tasksService.findAll(boardId); + if (tasks.length) return tasks; + throw new HttpException('Task not found', HttpStatus.NOT_FOUND); + } + + @Post() + async create(@Param('boardId') boardId: string, @Body() body: Task) { + const newTask = await this.tasksService.create({ ...body, boardId }); + if (newTask) return newTask; + throw new HttpException('Task not found', HttpStatus.NOT_FOUND); + } + + @Get(':taskId') + async findOne( + @Param('boardId') boardId: string, + @Param('taskId') taskId: string + ) { + const task = await this.tasksService.findOne(boardId, taskId); + if (task) { + return task; + } + throw new HttpException('Task not found', HttpStatus.NOT_FOUND); + } + + @Put(':taskId') + async update(@Param('taskId') taskId: string, @Body() body: Task) { + const updatedTask = await this.tasksService.update({ + ...body, + id: taskId + }); + if (updatedTask) return updatedTask; + throw new HttpException('Task not found', HttpStatus.NOT_FOUND); + } + + @Delete(':id') + async remove(@Param('id') id: string) { + const taskFinded = await this.tasksService.removeTask(id); + if (taskFinded) { + return 'The task has been deleted'; + } + throw new HttpException('Task not found', HttpStatus.NOT_FOUND); + } +} diff --git a/src/resources/tasks/tasks.memory.repository.ts b/src/resources/tasks/tasks.memory.repository.ts deleted file mode 100644 index b5a5016..0000000 --- a/src/resources/tasks/tasks.memory.repository.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { getRepository } from 'typeorm'; -import { Task } from '../../entities/task.entity'; - -const TASKS: Task[] = []; - -const getAll = async (boardId: string): Promise => (await getRepository(Task) - .find({ boardId })) - .map(Task.toResponse); - -const createTask = async (task: Task):Promise => { - const taskRepository = getRepository(Task); - const newTask = taskRepository.create(task); - const createdTask = await taskRepository.save(newTask); - return Task.toResponse(createdTask); -}; - -const getTask = async (boardId:string, id: string):Promise => { - const tasksRepository = getRepository(Task); - const findTask = await tasksRepository.findOne({ boardId, id }); - if (findTask) return Task.toResponse(findTask); - return null; -}; - -const updateTask = async (obj: Task):Promise => { - const tasksRepository = getRepository(Task); - const findedTask = await tasksRepository.findOne(obj.id); - if (!findedTask) return null; - const reducedData = { ...findedTask, ...obj }; - const updatedTask = await tasksRepository.update(obj.id, reducedData); - if (updatedTask.affected) return Task.toResponse(reducedData); - return null; -}; - -const deleteTask = async (id: string):Promise => { - const taskRepository = getRepository(Task); - const deletionRes = await taskRepository.delete(id); - if (deletionRes.affected) return true; - return false; -}; - -const deleteAllTasks = async (boardsId: string):Promise => { - TASKS.forEach((task, i) => { - if (task.boardId === boardsId) { - TASKS.splice(i, 1); - } - }); -}; - -const ifUserDeleted = async (userId: string):Promise => { - TASKS.forEach((task, i) => { - if (task.userId === userId) { - const currentTask:Task = { ...task, userId: null }; - TASKS[i] = { ...currentTask }; - } - }); -}; - -export default { - getAll, - createTask, - getTask, - updateTask, - deleteTask, - deleteAllTasks, - ifUserDeleted -}; diff --git a/src/resources/tasks/tasks.model.ts b/src/resources/tasks/tasks.model.ts deleted file mode 100644 index f8579ea..0000000 --- a/src/resources/tasks/tasks.model.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { v4 as uuid } from 'uuid'; - -export default class Task { - title:string; - - order:number; - - description:string; - - userId:string | null; - - boardId:string; - - columnId:string; - - id: string; - - constructor({ - title, - order, - description, - userId, - boardId, - columnId - }:Task) { - this.id = uuid(); - this.title = title; - this.order = order; - this.description = description; - this.userId = userId; - this.boardId = boardId; - this.columnId = columnId; - } - - static toResponse(task:Task):Task { - const { - id, title, order, description, userId, boardId, columnId - } = task; - return { - id, title, order, description, userId, boardId, columnId - }; - } -} diff --git a/src/resources/tasks/tasks.module.ts b/src/resources/tasks/tasks.module.ts new file mode 100644 index 0000000..8149e4a --- /dev/null +++ b/src/resources/tasks/tasks.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { TasksService } from './tasks.service'; +import { TasksController } from './tasks.controller'; +import { TypeOrmModule } from '@nestjs/typeorm/dist/typeorm.module'; +import { Task } from './entities/task.entity'; + +@Module({ + imports: [TypeOrmModule.forFeature([Task])], + controllers: [TasksController], + providers: [TasksService] +}) +export class TasksModule {} diff --git a/src/resources/tasks/tasks.router.ts b/src/resources/tasks/tasks.router.ts deleted file mode 100644 index 79c761a..0000000 --- a/src/resources/tasks/tasks.router.ts +++ /dev/null @@ -1,58 +0,0 @@ -import express, { Request, Response } from 'express'; -import { getBoard } from '../boards/board.service'; -import taskService from './tasks.service'; -import { ErrorHandler } from '../../middlewares/error.handler'; - -const router = express.Router({ mergeParams: true }); - -router.route('/').get(async (req: Request, res: Response, next) => { - const { boardsId } = req.params; - if (boardsId) { - const boardCheck = await getBoard(boardsId); - const tasks = await taskService.getAll(boardsId); - if (tasks && boardCheck) res.status(200).json(tasks); - } else next(new ErrorHandler(404, 'Tasks not found')); -}); - -router.route('/:taskId').get(async (req: Request, res: Response, next) => { - const { boardsId, taskId } = req.params; - if (boardsId && taskId) { - const task = await taskService.getTask(boardsId, taskId); - if (task) { - res.status(200).json(task); - } else next(new ErrorHandler(404, 'Task not found')); - } else next(new ErrorHandler(404, 'Task not found')); -}); - -router.route('/').post(async (req: Request, res: Response, next) => { - const { boardsId } = req.params; - - if (boardsId) { - const boardCheck = await getBoard(boardsId); - const newTask = await taskService.createTask( - { ...req.body, boardId: boardsId } - ); - if (newTask && boardCheck) res.status(201).json(newTask); - } else next(new ErrorHandler(404, 'Bad result')); -}); - -router.route('/:taskId').put(async (req: Request, res: Response, next) => { - const updatedTask = await taskService.updateTask({ - ...req.body, - id: req.params['taskId'] - }); - if (updatedTask) res.status(200).json(updatedTask); - else next(new ErrorHandler(404, 'Task not found')); -}); - -router.route('/:taskId').delete(async (req: Request, res: Response, next) => { - const { taskId } = req.params; - if (taskId) { - const taskFinded = await taskService.deleteTask(taskId); - if (taskFinded) { - res.status(204).send('The task has been deleted'); - } - } else next(new ErrorHandler(404, 'Board not found')); -}); - -export default router; diff --git a/src/resources/tasks/tasks.service.ts b/src/resources/tasks/tasks.service.ts index f60895f..d7e4dd3 100644 --- a/src/resources/tasks/tasks.service.ts +++ b/src/resources/tasks/tasks.service.ts @@ -1,18 +1,43 @@ -import taskRepo from './tasks.memory.repository'; -import { Task } from '../../entities/task.entity'; - -const getAll = (boardsId:string): Promise => taskRepo.getAll(boardsId); -const createTask = (task:Task):Promise => taskRepo.createTask(task); -const getTask = (boardsId:string, id:string):Promise => taskRepo.getTask(boardsId, id); -const updateTask = (obj:Task):Promise => taskRepo.updateTask(obj); -const deleteTask = (id:string):Promise => taskRepo.deleteTask(id); -export const deleteAllTasks = (boardId:string):Promise => taskRepo.deleteAllTasks(boardId); -export const ifUserDeleted = (userId: string):Promise => taskRepo.ifUserDeleted(userId); - -export default { - getAll, - createTask, - getTask, - updateTask, - deleteTask -}; +import { Injectable } from '@nestjs/common'; +import { Task } from './entities/task.entity'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; + +@Injectable() +export class TasksService { + constructor( + @InjectRepository(Task) + private readonly tasksRepository: Repository + ) {} + async findAll(boardId: string) { + const tasks = await this.tasksRepository.find({ boardId }); + return tasks.map(Task.toResponse); + } + + async create(task: Task) { + const newTask = this.tasksRepository.create(task); + const createdTask = await this.tasksRepository.save(newTask); + return Task.toResponse(createdTask); + } + + async findOne(boardId: string, id: string) { + const findTask = await this.tasksRepository.findOne({ boardId, id }); + if (findTask) return Task.toResponse(findTask); + return null; + } + + async update(obj: Task) { + const findedTask = await this.tasksRepository.findOne(obj.id); + if (!findedTask) return null; + const reducedData = { ...findedTask, ...obj }; + const updatedTask = await this.tasksRepository.update(obj.id, reducedData); + if (updatedTask.affected) return Task.toResponse(reducedData); + return null; + } + + async removeTask(id: string) { + const deletionRes = await this.tasksRepository.delete(id); + if (deletionRes.affected) return true; + return false; + } +} diff --git a/src/resources/users/dto/create-user.dto.ts b/src/resources/users/dto/create-user.dto.ts new file mode 100644 index 0000000..0311be1 --- /dev/null +++ b/src/resources/users/dto/create-user.dto.ts @@ -0,0 +1 @@ +export class CreateUserDto {} diff --git a/src/resources/users/dto/login.dto.ts b/src/resources/users/dto/login.dto.ts new file mode 100644 index 0000000..b8453f4 --- /dev/null +++ b/src/resources/users/dto/login.dto.ts @@ -0,0 +1,5 @@ +export class LoginDto { + login: string; + + password: string; +} diff --git a/src/resources/users/dto/update-user.dto.ts b/src/resources/users/dto/update-user.dto.ts new file mode 100644 index 0000000..dfd37fb --- /dev/null +++ b/src/resources/users/dto/update-user.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/mapped-types'; +import { CreateUserDto } from './create-user.dto'; + +export class UpdateUserDto extends PartialType(CreateUserDto) {} diff --git a/src/resources/users/entities/user.entity.ts b/src/resources/users/entities/user.entity.ts new file mode 100644 index 0000000..83b897b --- /dev/null +++ b/src/resources/users/entities/user.entity.ts @@ -0,0 +1,52 @@ +import { Entity, Column, PrimaryGeneratedColumn, OneToMany } from 'typeorm'; +import { Task } from '../../tasks/entities/task.entity'; +import jwt from 'jsonwebtoken'; + +export interface IUserToRes extends Omit { + token: string; + message: string; +} + +@Entity({ + name: 'user' +}) +export class User { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column('varchar', { length: 40, nullable: true }) + name: string | null; + + @Column('varchar', { length: 40 }) + login: string; + + @Column('varchar', { length: 200 }) + password: string; + + @OneToMany(() => Task, (task: Task): string | null => task.userId, { + cascade: true + }) + tasks: Task[]; + + private static _toResponse = (user: User): IUserToRes => { + const { id, name, login, tasks } = user; + const token = jwt.sign( + { id: user.id }, + process.env['JWT_SECRET_KEY'] as string, + { expiresIn: 60 * 60 * 24 } + ); + return { + id, + name, + login, + token, + tasks + } as IUserToRes; + }; + public static get toResponse() { + return User._toResponse; + } + public static set toResponse(value) { + User._toResponse = value; + } +} diff --git a/src/resources/users/user.memory.repository.ts b/src/resources/users/user.memory.repository.ts deleted file mode 100644 index fc4799f..0000000 --- a/src/resources/users/user.memory.repository.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { getRepository } from 'typeorm'; -import bcrypt from 'bcrypt'; -import { User } from '../../entities/user.entity'; - -const getAll = async (): Promise[]> => { - const userRepository = await getRepository(User).find({ where: {} }); - const toResponse = userRepository - .map(User.toResponse) as Omit[]; - return toResponse; -}; - -const getOneUser = async (id: string): -Promise | null> => { - const user = await getRepository(User).findOne(id); - if (user) return User.toResponse(user); - return null; -}; - -const createNewUser = async (user: User): Promise> => { - const userRepository = getRepository(User); - const newUser = userRepository.create({ - name: user.name, - login: user.login, - password: bcrypt.hashSync(user.password, 10) - }); - const updatedUser = await userRepository.save(newUser); - return User.toResponse(updatedUser); -}; - -const updateUser = async (obj: -{ id:string, name?:string, password?:string, login?:string }): Promise | null> => { - const userRepository = getRepository(User); - const findedUser = await userRepository.findOne(obj.id); - if (!findedUser) return null; - const reducedData = { ...findedUser, ...obj }; - const updatedUser = await userRepository.update(obj.id, reducedData); - if (updatedUser.affected) return User.toResponse(reducedData); - return null; -}; - -const deleteUser = async (id: string): Promise => { - const studentRepositiory = getRepository(User); - const deletionRes = await studentRepositiory.delete(id); - if (deletionRes.affected) return true; - return false; -}; - -export default { - getAll, createNewUser, getOneUser, updateUser, deleteUser -}; diff --git a/src/resources/users/user.model.ts b/src/resources/users/user.model.ts deleted file mode 100644 index 9d28278..0000000 --- a/src/resources/users/user.model.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { User } from '../../entities/user.entity'; - -export const toResponse = ( - user: User -): { - id: string; - name: string; - login: string; -} | null => { - const { id, name, login } = user; - if (id && name && login) { - return { id, name, login }; - } - return null; -}; diff --git a/src/resources/users/user.router.ts b/src/resources/users/user.router.ts deleted file mode 100644 index fe3dc1d..0000000 --- a/src/resources/users/user.router.ts +++ /dev/null @@ -1,54 +0,0 @@ -import express from 'express'; -import { ErrorHandler } from '../../middlewares/error.handler'; -import { - getAll, - getUser, - createUser, - updateUser, - deleteUser -} from './user.service'; -import { ifUserDeleted } from '../tasks/tasks.service'; - -const router = express.Router(); - -router.route('/').get(async (_req, res, next) => { - const users = await getAll(); - if (users) { - res.json(users); - } else next(new ErrorHandler(404)); -}); - -router.route('/:userId').get(async (req, res, next) => { - const user = await getUser(req.params.userId); - if (user) { - res.json(user); - } else next(new ErrorHandler(404, 'User not found')); -}); - -router.route('/').post(async (req, res, next) => { - const newUser = await createUser(req.body); - if (newUser) { - res.status(201).json(newUser); - } else next(new ErrorHandler(404, 'bad result')); -}); - -router.route('/:userId').put(async (req, res, next) => { - console.log(req.body); - const newBoard = await updateUser({ - ...req.body, - id: req.params.userId - }); - if (newBoard) { - res.status(200).json(newBoard); - } else next(new ErrorHandler(401, 'bad result')); -}); - -router.route('/:userId').delete(async (req, res, next) => { - const userFinded = await deleteUser(req.params.userId); - if (userFinded) { - await ifUserDeleted(req.params.userId); - res.status(204).send('The board has been deleted'); - } else next(new ErrorHandler(404, 'Board not found')); -}); - -export default router; diff --git a/src/resources/users/user.service.ts b/src/resources/users/user.service.ts deleted file mode 100644 index 45ff94a..0000000 --- a/src/resources/users/user.service.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { User } from '../../entities/user.entity'; -import usersRepo from './user.memory.repository'; - -export const getAll = (): Promise[]> => usersRepo.getAll(); -export const getUser = (id: string):Promise | null> => usersRepo.getOneUser(id); -export const createUser = (user: User):Promise> => usersRepo.createNewUser(user); -export const updateUser = (obj: -{ - id:string, - name?:string, - password?:string, - login?:string }):Promise | null> => usersRepo.updateUser(obj); -export const deleteUser = (id: string):Promise => usersRepo.deleteUser(id); diff --git a/src/resources/users/users.controller.ts b/src/resources/users/users.controller.ts new file mode 100644 index 0000000..cd2557a --- /dev/null +++ b/src/resources/users/users.controller.ts @@ -0,0 +1,65 @@ +import { + Controller, + Get, + Post, + Body, + Put, + Param, + Delete, + UseGuards +} from '@nestjs/common'; +import { UsersService } from './users.service'; +import { IUserToRes, User } from './entities/user.entity'; +import { AuthGuard } from '../auth/auth.guard'; + +@Controller('users') +@UseGuards(AuthGuard) +export class UsersController { + constructor(private readonly usersService: UsersService) {} + + @Post() + async create(@Body() body: User): Promise { + const newUser = await this.usersService.createUser(body); + if (newUser) { + return newUser; + } + } + + @Get() + async findAll(): Promise[] | void> { + const users = await this.usersService.getAll(); + if (users) { + return users; + } + } + + @Get(':id') + async findOne(@Param('id') id: string): Promise { + const user = this.usersService.getUser(id); + if (user) { + return user; + } + } + + @Put(':id') + async update( + @Param('id') id: string, + @Body() body: User + ): Promise { + const newBoard = await this.usersService.updateUser({ + ...body, + id + }); + if (newBoard) { + return newBoard; + } + } + + @Delete(':id') + async remove(@Param('id') id: string): Promise { + const userFinded = await this.usersService.deleteUser(id); + if (userFinded) { + return 'The board has been deleted'; + } + } +} diff --git a/src/resources/users/users.module.ts b/src/resources/users/users.module.ts new file mode 100644 index 0000000..54696cc --- /dev/null +++ b/src/resources/users/users.module.ts @@ -0,0 +1,13 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { UsersService } from './users.service'; +import { UsersController } from './users.controller'; +import { User } from './entities/user.entity'; + +@Module({ + imports: [TypeOrmModule.forFeature([User])], + controllers: [UsersController], + providers: [UsersService], + exports: [UsersService] +}) +export class UsersModule {} diff --git a/src/resources/users/users.service.ts b/src/resources/users/users.service.ts new file mode 100644 index 0000000..33e0b2d --- /dev/null +++ b/src/resources/users/users.service.ts @@ -0,0 +1,78 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { User } from './entities/user.entity'; +import bcrypt from 'bcrypt'; +import jwt from 'jsonwebtoken'; + +@Injectable() +export class UsersService { + constructor( + @InjectRepository(User) + private readonly userRepository: Repository + ) {} + + async getAll() { + const userRepository = await this.userRepository.find({ where: {} }); + const toResponse = userRepository.map(User.toResponse) as Omit< + User, + 'password' + >[]; + return toResponse; + } + + async createUser(user: User) { + const newUser = this.userRepository.create({ + name: user.name, + login: user.login, + password: bcrypt.hashSync(user.password, 10) + }); + const updatedUser = await this.userRepository.save(newUser); + return User.toResponse(updatedUser); + } + + async getUser(id: string) { + const user = await this.userRepository.findOne(id); + if (user) return User.toResponse(user); + return null; + } + + async updateUser(obj: Omit) { + const findedUser = await this.userRepository.findOne(obj.id); + if (!findedUser) return null; + const reducedData = { ...findedUser, ...obj }; + const updatedUser = await this.userRepository.update(obj.id, reducedData); + if (updatedUser.affected) return User.toResponse(reducedData); + return null; + } + + async deleteUser(id: string) { + const deletionRes = await this.userRepository.delete(id); + if (deletionRes.affected) return true; + return false; + } + + async auth({ login, password }) { + console.log(login); + const user = await this.userRepository.findOne({ login }); + return new Promise((resolve, reject) => { + if (user) { + bcrypt.compare(password, user.password, (_err, matches) => { + if (matches) { + const token = jwt.sign( + { id: user.id }, + process.env.JWT_SECRET_KEY as string, + { expiresIn: 60 * 60 * 24 } + ); + resolve({ + ...User.toResponse(user), + token, + message: 'Successfully authenticated.' + }); + } + reject(); + }); + } + }); + } +} diff --git a/src/server.ts b/src/server.ts deleted file mode 100644 index 963c2e6..0000000 --- a/src/server.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { PORT } from './common/config'; -import app from './app'; -import { tryBDConnect } from './helpers/db'; -import { createUserAdmin } from './middlewares/admin.creator'; - -tryBDConnect(() => { - createUserAdmin(); - app.listen(PORT, () => console.log(`App is running on http://localhost:${PORT}`)); -}); diff --git a/src/shared/http-error.filter.ts b/src/shared/http-error.filter.ts new file mode 100644 index 0000000..97c5f2d --- /dev/null +++ b/src/shared/http-error.filter.ts @@ -0,0 +1,32 @@ +import { + ArgumentsHost, + Catch, + ExceptionFilter, + HttpException, + Logger +} from '@nestjs/common'; + +@Catch(HttpException) +export class HttpErrorFilter implements ExceptionFilter { + catch(exception: HttpException, host: ArgumentsHost) { + const ctx = host.switchToHttp(); + const request = ctx.getRequest(); + const responce = ctx.getResponse(); + const status = exception.getStatus(); + + const errorResponse = { + code: status, + timestamp: new Date().toLocaleDateString(), + path: request.url, + method: request.method, + message: exception.message || null + }; + + Logger.error( + `${request.method} ${request.url}`, + JSON.stringify(errorResponse), + 'ExceprionFilter' + ); + responce.status(status).json(errorResponse); + } +} diff --git a/src/shared/logging.interceptor.ts b/src/shared/logging.interceptor.ts new file mode 100644 index 0000000..7a24fe3 --- /dev/null +++ b/src/shared/logging.interceptor.ts @@ -0,0 +1,30 @@ +import { + CallHandler, + ExecutionContext, + Injectable, + Logger, + NestInterceptor +} from '@nestjs/common'; +import { Observable } from 'rxjs'; +import { tap } from 'rxjs/operators'; + +@Injectable() +export class LoggingInterceptor implements NestInterceptor { + intercept(context: ExecutionContext, next: CallHandler): Observable { + const req = context.switchToHttp().getRequest(); + const method = req.method; + const url = req.url; + const now = Date.now(); + const body = req.body; + return next.handle().pipe( + tap(() => + Logger.log( + `${method} ${url} ${Date.now() - now}ms + ${JSON.stringify(body)} + `, + context.getClass().name + ) + ) + ); + } +} diff --git a/src/middlewares/admin.creator.ts b/src/utils/admin.creator.ts similarity index 73% rename from src/middlewares/admin.creator.ts rename to src/utils/admin.creator.ts index 3dd8811..df7af97 100644 --- a/src/middlewares/admin.creator.ts +++ b/src/utils/admin.creator.ts @@ -1,19 +1,19 @@ -import { getRepository } from 'typeorm'; -import bcrypt from 'bcrypt'; -import { User } from '../entities/user.entity'; - -export const createUserAdmin = async (): Promise => { - const userRepository = getRepository(User); - const findedUser = await userRepository.findOne({ login: 'admin' }); - if (!findedUser) { - const newUser = userRepository.create({ - name: 'admin', - login: 'admin', - password: bcrypt.hashSync('admin', 10) - }); - await userRepository.save(newUser); - console.log('user admin was succsesful created'); - return; - } - console.log('user admin is exists in database'); -}; +import { getRepository } from 'typeorm'; +import bcrypt from 'bcrypt'; +import { User } from '../resources/users/entities/user.entity'; + +export const createUserAdmin = async (): Promise => { + const userRepository = getRepository(User); + const findedUser = await userRepository.findOne({ login: 'admin' }); + if (!findedUser) { + const newUser = userRepository.create({ + name: 'admin', + login: 'admin', + password: bcrypt.hashSync('admin', 10) + }); + await userRepository.save(newUser); + console.log('user admin was successfully created'); + return; + } + console.log('user admin already exists'); +}; diff --git a/test.express.json b/test.express.json new file mode 100644 index 0000000..07f99e8 --- /dev/null +++ b/test.express.json @@ -0,0 +1,1297 @@ +{ + "aggregate": { + "timestamp": "2021-07-12T05:04:06.446Z", + "scenariosCreated": 182, + "scenariosCompleted": 182, + "requestsCompleted": 1092, + "latency": { + "min": 17, + "max": 2386, + "median": 1017, + "p95": 1754.8, + "p99": 2020 + }, + "rps": { + "count": 1092, + "mean": 33.62 + }, + "scenarioDuration": { + "min": 759.5, + "max": 8351.4, + "median": 6604.2, + "p95": 7155.7, + "p99": 7537.3 + }, + "scenarioCounts": { + "Users test": 182 + }, + "errors": {}, + "codes": { + "200": 728, + "201": 364 + }, + "matches": 0, + "customStats": {}, + "counters": {}, + "scenariosAvoided": 118, + "phases": [ + { + "duration": 30, + "arrivalRate": 10, + "maxVusers": 40 + } + ] + }, + "intermediate": [ + { + "timestamp": "2021-07-12T05:03:43.850Z", + "scenariosCreated": 68, + "scenariosCompleted": 33, + "requestsCompleted": 298, + "latency": { + "min": 17, + "max": 2306, + "median": 929, + "p95": 1774.6, + "p99": 1974.2 + }, + "rps": { + "count": 333, + "mean": 33.7 + }, + "scenarioDuration": { + "min": 759.5, + "max": 7328.8, + "median": 6268.9, + "p95": 7061.7, + "p99": 7328.8 + }, + "scenarioCounts": { + "Users test": 68 + }, + "errors": {}, + "codes": { + "200": 183, + "201": 115 + }, + "matches": 0, + "latencies": [ + 174000000, + 20000000, + 250000000, + 17000000, + 155000000, + 325000000, + 244000000, + 150000000, + 164000000, + 25000000, + 21000000, + 34000000, + 223000000, + 195000000, + 171000000, + 162000000, + 176000000, + 179000000, + 510000000, + 319000000, + 170000000, + 295000000, + 318000000, + 175000000, + 195000000, + 211000000, + 199000000, + 68000000, + 281000000, + 423000000, + 734000000, + 329000000, + 348000000, + 335000000, + 78000000, + 92000000, + 114000000, + 104000000, + 114000000, + 681000000, + 784000000, + 448000000, + 487000000, + 102000000, + 570000000, + 674000000, + 478000000, + 328000000, + 439000000, + 472000000, + 416000000, + 427000000, + 435000000, + 180000000, + 491000000, + 180000000, + 208000000, + 525000000, + 111000000, + 122000000, + 782000000, + 588000000, + 494000000, + 623000000, + 830000000, + 814000000, + 841000000, + 843000000, + 1263000000, + 785000000, + 829000000, + 854000000, + 627000000, + 632000000, + 813000000, + 647000000, + 1051000000, + 471000000, + 1104000000, + 361000000, + 359000000, + 1111000000, + 1026000000, + 937000000, + 801000000, + 376000000, + 572000000, + 808000000, + 636000000, + 634000000, + 651000000, + 1123000000, + 1033000000, + 942000000, + 856000000, + 617000000, + 1008000000, + 1028000000, + 881000000, + 1077000000, + 993000000, + 1220000000, + 923000000, + 903000000, + 944000000, + 1200000000, + 927000000, + 943000000, + 969000000, + 675000000, + 975000000, + 571000000, + 598000000, + 1035000000, + 615000000, + 633000000, + 1056000000, + 929000000, + 929000000, + 963000000, + 1165000000, + 870000000, + 1074000000, + 777000000, + 679000000, + 583000000, + 483000000, + 967000000, + 563000000, + 558000000, + 656000000, + 674000000, + 689000000, + 702000000, + 956000000, + 957000000, + 948000000, + 1368000000, + 1320000000, + 1307000000, + 1308000000, + 1371000000, + 1257000000, + 1223000000, + 1779000000, + 1766000000, + 1572000000, + 1639000000, + 1838000000, + 1749000000, + 1768000000, + 1594000000, + 1753000000, + 1604000000, + 1630000000, + 1640000000, + 1655000000, + 1667000000, + 1935000000, + 1689000000, + 1704000000, + 1992000000, + 1719000000, + 1706000000, + 1461000000, + 1719000000, + 1535000000, + 1637000000, + 1439000000, + 805000000, + 1780000000, + 1779000000, + 1496000000, + 1487000000, + 1474000000, + 1219000000, + 1281000000, + 1281000000, + 1272000000, + 1688000000, + 1793000000, + 1387000000, + 1378000000, + 2306000000, + 1389000000, + 1394000000, + 1392000000, + 1420000000, + 1409000000, + 1955000000, + 1948000000, + 1351000000, + 1448000000, + 1407000000, + 1426000000, + 1342000000, + 1404000000, + 1326000000, + 1431000000, + 1479000000, + 1435000000, + 1542000000, + 1457000000, + 1531000000, + 1607000000, + 1515000000, + 1460000000, + 1464000000, + 1547000000, + 1649000000, + 1717000000, + 1715000000, + 1711000000, + 1832000000, + 1351000000, + 1841000000, + 1369000000, + 781000000, + 2013000000, + 882000000, + 1197000000, + 1196000000, + 1264000000, + 1930000000, + 1193000000, + 1192000000, + 1191000000, + 1940000000, + 1280000000, + 1261000000, + 1192000000, + 1347000000, + 1064000000, + 1093000000, + 1361000000, + 1184000000, + 1462000000, + 1202000000, + 1444000000, + 1409000000, + 1358000000, + 1130000000, + 1331000000, + 1180000000, + 1063000000, + 1245000000, + 1246000000, + 1291000000, + 1301000000, + 847000000, + 874000000, + 739000000, + 1163000000, + 866000000, + 1054000000, + 1056000000, + 1055000000, + 905000000, + 503000000, + 502000000, + 1062000000, + 500000000, + 839000000, + 440000000, + 517000000, + 643000000, + 642000000, + 618000000, + 619000000, + 602000000, + 605000000, + 606000000, + 727000000, + 937000000, + 943000000, + 940000000, + 743000000, + 770000000, + 764000000, + 799000000, + 750000000, + 753000000, + 999000000, + 976000000, + 980000000, + 859000000, + 730000000, + 743000000, + 847000000, + 745000000, + 749000000, + 749000000, + 750000000, + 838000000, + 898000000, + 815000000, + 903000000, + 632000000 + ], + "customStats": {}, + "counters": {}, + "concurrency": 35, + "pendingRequests": 35, + "scenariosAvoided": 31 + }, + { + "timestamp": "2021-07-12T05:03:53.842Z", + "scenariosCreated": 64, + "scenariosCompleted": 60, + "requestsCompleted": 349, + "latency": { + "min": 364, + "max": 2386, + "median": 1048, + "p95": 1732.1, + "p99": 2111 + }, + "rps": { + "count": 353, + "mean": 35.37 + }, + "scenarioDuration": { + "min": 5818, + "max": 7568, + "median": 6761.5, + "p95": 7214.5, + "p99": 7558.4 + }, + "scenarioCounts": { + "Users test": 64 + }, + "errors": {}, + "codes": { + "200": 228, + "201": 121 + }, + "matches": 0, + "latencies": [ + 899000000, + 912000000, + 941000000, + 1090000000, + 694000000, + 799000000, + 904000000, + 615000000, + 810000000, + 762000000, + 834000000, + 833000000, + 1286000000, + 795000000, + 1151000000, + 1152000000, + 804000000, + 807000000, + 803000000, + 802000000, + 858000000, + 859000000, + 983000000, + 828000000, + 936000000, + 1269000000, + 1268000000, + 1205000000, + 1192000000, + 1280000000, + 1171000000, + 1189000000, + 1185000000, + 1188000000, + 878000000, + 891000000, + 902000000, + 1272000000, + 917000000, + 924000000, + 986000000, + 965000000, + 649000000, + 697000000, + 1030000000, + 1086000000, + 1263000000, + 1181000000, + 668000000, + 669000000, + 642000000, + 643000000, + 577000000, + 499000000, + 983000000, + 1422000000, + 1343000000, + 941000000, + 1149000000, + 854000000, + 756000000, + 1045000000, + 661000000, + 790000000, + 792000000, + 785000000, + 791000000, + 791000000, + 1421000000, + 963000000, + 1069000000, + 942000000, + 948000000, + 1150000000, + 1138000000, + 1124000000, + 1114000000, + 1102000000, + 1158000000, + 1086000000, + 1097000000, + 1246000000, + 1129000000, + 1153000000, + 1173000000, + 851000000, + 727000000, + 739000000, + 754000000, + 779000000, + 784000000, + 805000000, + 828000000, + 843000000, + 1120000000, + 1222000000, + 1020000000, + 1326000000, + 1298000000, + 481000000, + 1341000000, + 1338000000, + 625000000, + 618000000, + 617000000, + 618000000, + 1061000000, + 1654000000, + 1215000000, + 1215000000, + 1221000000, + 1680000000, + 1788000000, + 1891000000, + 1594000000, + 1394000000, + 1502000000, + 1707000000, + 1907000000, + 1903000000, + 1658000000, + 1753000000, + 1717000000, + 1776000000, + 1706000000, + 1686000000, + 1673000000, + 1659000000, + 1634000000, + 1565000000, + 1576000000, + 1593000000, + 1617000000, + 1700000000, + 1683000000, + 1782000000, + 1768000000, + 1890000000, + 1761000000, + 1753000000, + 1755000000, + 1472000000, + 876000000, + 865000000, + 877000000, + 1298000000, + 1313000000, + 1437000000, + 1449000000, + 2109000000, + 2111000000, + 2111000000, + 1482000000, + 968000000, + 965000000, + 2183000000, + 2386000000, + 981000000, + 960000000, + 963000000, + 961000000, + 1552000000, + 1554000000, + 963000000, + 973000000, + 990000000, + 992000000, + 993000000, + 928000000, + 1048000000, + 942000000, + 941000000, + 1290000000, + 1585000000, + 1628000000, + 1616000000, + 1604000000, + 1591000000, + 1590000000, + 1543000000, + 950000000, + 1073000000, + 1667000000, + 1085000000, + 1097000000, + 1085000000, + 1119000000, + 1096000000, + 1107000000, + 1308000000, + 1327000000, + 1622000000, + 1731000000, + 1434000000, + 1532000000, + 1135000000, + 1164000000, + 1134000000, + 568000000, + 459000000, + 457000000, + 458000000, + 458000000, + 1189000000, + 1191000000, + 1181000000, + 1111000000, + 1213000000, + 1013000000, + 1323000000, + 1298000000, + 773000000, + 1302000000, + 1311000000, + 1306000000, + 1180000000, + 1168000000, + 1172000000, + 526000000, + 654000000, + 651000000, + 636000000, + 631000000, + 633000000, + 610000000, + 609000000, + 612000000, + 625000000, + 676000000, + 654000000, + 676000000, + 762000000, + 719000000, + 710000000, + 653000000, + 650000000, + 645000000, + 658000000, + 671000000, + 734000000, + 698000000, + 567000000, + 566000000, + 563000000, + 562000000, + 554000000, + 695000000, + 690000000, + 691000000, + 692000000, + 568000000, + 922000000, + 922000000, + 909000000, + 815000000, + 719000000, + 624000000, + 526000000, + 946000000, + 1307000000, + 1170000000, + 1376000000, + 1257000000, + 1257000000, + 1125000000, + 1365000000, + 1362000000, + 1330000000, + 1308000000, + 1300000000, + 1442000000, + 1305000000, + 1266000000, + 1435000000, + 1434000000, + 1389000000, + 1193000000, + 1223000000, + 1245000000, + 1267000000, + 1262000000, + 1274000000, + 1492000000, + 1528000000, + 1309000000, + 1312000000, + 1323000000, + 1434000000, + 1537000000, + 1301000000, + 1241000000, + 944000000, + 1520000000, + 660000000, + 657000000, + 656000000, + 493000000, + 1437000000, + 1239000000, + 1353000000, + 1156000000, + 1058000000, + 958000000, + 762000000, + 865000000, + 758000000, + 757000000, + 757000000, + 751000000, + 1099000000, + 1100000000, + 1333000000, + 1006000000, + 1142000000, + 1169000000, + 934000000, + 1029000000, + 937000000, + 947000000, + 1025000000, + 964000000, + 1034000000, + 1245000000, + 1019000000, + 994000000, + 1028000000, + 990000000, + 1025000000, + 1032000000, + 749000000, + 760000000, + 770000000, + 808000000, + 826000000, + 830000000, + 845000000, + 875000000, + 364000000, + 1062000000, + 1158000000, + 1267000000, + 970000000, + 773000000, + 876000000, + 679000000, + 584000000, + 1193000000, + 505000000, + 505000000 + ], + "customStats": {}, + "counters": {}, + "concurrency": 39, + "pendingRequests": 39, + "scenariosAvoided": 36 + }, + { + "timestamp": "2021-07-12T05:04:03.864Z", + "scenariosCreated": 50, + "scenariosCompleted": 49, + "requestsCompleted": 316, + "latency": { + "min": 427, + "max": 2337, + "median": 1206.5, + "p95": 1801.7, + "p99": 2090.9 + }, + "rps": { + "count": 317, + "mean": 31.64 + }, + "scenarioDuration": { + "min": 5526, + "max": 8351.4, + "median": 6709.9, + "p95": 7134.9, + "p99": 8351.4 + }, + "scenarioCounts": { + "Users test": 50 + }, + "errors": {}, + "codes": { + "200": 212, + "201": 104 + }, + "matches": 0, + "latencies": [ + 643000000, + 1075000000, + 1323000000, + 1323000000, + 873000000, + 848000000, + 949000000, + 1538000000, + 1538000000, + 1539000000, + 1542000000, + 1655000000, + 1532000000, + 1824000000, + 1862000000, + 1867000000, + 1801000000, + 1790000000, + 1756000000, + 1743000000, + 1793000000, + 1739000000, + 1688000000, + 1734000000, + 1715000000, + 1543000000, + 1581000000, + 1576000000, + 1607000000, + 1618000000, + 1623000000, + 1634000000, + 1657000000, + 1823000000, + 1802000000, + 1639000000, + 1750000000, + 1952000000, + 1548000000, + 1521000000, + 1513000000, + 1267000000, + 1271000000, + 1274000000, + 561000000, + 558000000, + 2079000000, + 677000000, + 669000000, + 669000000, + 668000000, + 1534000000, + 2334000000, + 2337000000, + 1309000000, + 1303000000, + 1304000000, + 1627000000, + 1628000000, + 1316000000, + 1428000000, + 1425000000, + 1419000000, + 1428000000, + 1748000000, + 1303000000, + 1565000000, + 1532000000, + 1532000000, + 1515000000, + 1506000000, + 1495000000, + 1484000000, + 1474000000, + 1471000000, + 1488000000, + 1504000000, + 1522000000, + 1522000000, + 1116000000, + 459000000, + 455000000, + 1500000000, + 513000000, + 481000000, + 623000000, + 1707000000, + 1612000000, + 1414000000, + 1518000000, + 1314000000, + 1222000000, + 1126000000, + 505000000, + 590000000, + 590000000, + 1575000000, + 1570000000, + 589000000, + 1287000000, + 603000000, + 603000000, + 602000000, + 601000000, + 601000000, + 944000000, + 949000000, + 946000000, + 946000000, + 827000000, + 831000000, + 834000000, + 834000000, + 824000000, + 581000000, + 764000000, + 807000000, + 771000000, + 754000000, + 723000000, + 587000000, + 595000000, + 609000000, + 629000000, + 637000000, + 655000000, + 836000000, + 675000000, + 427000000, + 427000000, + 440000000, + 837000000, + 545000000, + 741000000, + 649000000, + 445000000, + 445000000, + 446000000, + 431000000, + 431000000, + 428000000, + 436000000, + 529000000, + 449000000, + 536000000, + 441000000, + 1026000000, + 1006000000, + 918000000, + 815000000, + 1026000000, + 1032000000, + 1028000000, + 1033000000, + 819000000, + 812000000, + 1185000000, + 1411000000, + 1507000000, + 1203000000, + 1356000000, + 1178000000, + 1332000000, + 1324000000, + 1308000000, + 1293000000, + 1286000000, + 1218000000, + 1228000000, + 1248000000, + 1315000000, + 1305000000, + 1285000000, + 1236000000, + 740000000, + 1248000000, + 918000000, + 930000000, + 916000000, + 923000000, + 918000000, + 1059000000, + 1655000000, + 1759000000, + 1560000000, + 1862000000, + 1466000000, + 1369000000, + 1272000000, + 1174000000, + 1075000000, + 981000000, + 883000000, + 784000000, + 1401000000, + 1002000000, + 840000000, + 822000000, + 829000000, + 844000000, + 837000000, + 834000000, + 1442000000, + 855000000, + 1030000000, + 1024000000, + 1319000000, + 1151000000, + 1087000000, + 1077000000, + 1056000000, + 1047000000, + 1144000000, + 472000000, + 489000000, + 502000000, + 515000000, + 539000000, + 563000000, + 575000000, + 591000000, + 607000000, + 617000000, + 1068000000, + 1056000000, + 1212000000, + 1015000000, + 1117000000, + 918000000, + 658000000, + 619000000, + 562000000, + 826000000, + 823000000, + 822000000, + 822000000, + 822000000, + 822000000, + 1055000000, + 1348000000, + 1348000000, + 1351000000, + 1534000000, + 1641000000, + 1422000000, + 1342000000, + 1249000000, + 1151000000, + 1361000000, + 1847000000, + 1608000000, + 1611000000, + 1708000000, + 1773000000, + 1756000000, + 1744000000, + 1730000000, + 1706000000, + 1687000000, + 1618000000, + 1617000000, + 1628000000, + 1638000000, + 1706000000, + 1692000000, + 1654000000, + 1690000000, + 1683000000, + 1693000000, + 1697000000, + 914000000, + 915000000, + 913000000, + 1539000000, + 1184000000, + 1194000000, + 1210000000, + 1224000000, + 1234000000, + 1359000000, + 2114000000, + 1519000000, + 1623000000, + 2025000000, + 1372000000, + 883000000, + 884000000, + 881000000, + 759000000, + 630000000, + 631000000, + 752000000, + 753000000, + 1805000000, + 1811000000, + 1811000000, + 1572000000, + 782000000, + 781000000, + 765000000, + 765000000, + 750000000, + 749000000, + 1513000000, + 1504000000, + 1502000000, + 1554000000, + 1468000000, + 1560000000, + 1457000000, + 1447000000, + 1212000000, + 1031000000, + 1120000000, + 1122000000, + 1123000000 + ], + "customStats": {}, + "counters": {}, + "concurrency": 40, + "pendingRequests": 40, + "scenariosAvoided": 50 + }, + { + "timestamp": "2021-07-12T05:04:06.429Z", + "scenariosCreated": 0, + "scenariosCompleted": 40, + "requestsCompleted": 129, + "latency": { + "min": 30, + "max": 1720, + "median": 691, + "p95": 1470.8, + "p99": 1680.5 + }, + "rps": { + "count": 89, + "mean": 34.77 + }, + "scenarioDuration": { + "min": 2839, + "max": 6848, + "median": 6009.3, + "p95": 6764.9, + "p99": 6848 + }, + "scenarioCounts": {}, + "errors": {}, + "codes": { + "200": 105, + "201": 24 + }, + "matches": 0, + "latencies": [ + 1347000000, + 1200000000, + 1369000000, + 1393000000, + 1351000000, + 1048000000, + 1055000000, + 1046000000, + 1042000000, + 1566000000, + 1469000000, + 1670000000, + 312000000, + 311000000, + 1115000000, + 1244000000, + 1244000000, + 305000000, + 312000000, + 1461000000, + 1460000000, + 1504000000, + 685000000, + 695000000, + 1460000000, + 1459000000, + 1459000000, + 1458000000, + 1720000000, + 1620000000, + 1526000000, + 1430000000, + 1332000000, + 803000000, + 798000000, + 854000000, + 857000000, + 653000000, + 756000000, + 761000000, + 755000000, + 679000000, + 691000000, + 689000000, + 686000000, + 659000000, + 672000000, + 699000000, + 712000000, + 719000000, + 705000000, + 328000000, + 329000000, + 326000000, + 318000000, + 318000000, + 317000000, + 317000000, + 200000000, + 208000000, + 767000000, + 234000000, + 244000000, + 250000000, + 225000000, + 224000000, + 820000000, + 805000000, + 418000000, + 433000000, + 433000000, + 439000000, + 564000000, + 646000000, + 646000000, + 852000000, + 824000000, + 1176000000, + 1177000000, + 1154000000, + 1149000000, + 1094000000, + 1147000000, + 1118000000, + 1110000000, + 1057000000, + 1059000000, + 1057000000, + 1107000000, + 1100000000, + 1091000000, + 692000000, + 692000000, + 454000000, + 854000000, + 853000000, + 453000000, + 94000000, + 95000000, + 854000000, + 725000000, + 88000000, + 84000000, + 79000000, + 77000000, + 76000000, + 63000000, + 49000000, + 65000000, + 71000000, + 46000000, + 51000000, + 68000000, + 57000000, + 51000000, + 55000000, + 61000000, + 71000000, + 48000000, + 54000000, + 71000000, + 30000000, + 44000000, + 33000000, + 38000000, + 43000000, + 35000000, + 33000000, + 32000000 + ], + "customStats": {}, + "counters": {}, + "concurrency": 0, + "pendingRequests": 0, + "scenariosAvoided": 1 + } + ] +} \ No newline at end of file diff --git a/test.fastify.json b/test.fastify.json new file mode 100644 index 0000000..b58e365 --- /dev/null +++ b/test.fastify.json @@ -0,0 +1,1345 @@ +{ + "aggregate": { + "timestamp": "2021-07-12T05:06:36.791Z", + "scenariosCreated": 190, + "scenariosCompleted": 190, + "requestsCompleted": 1140, + "latency": { + "min": 14, + "max": 2471, + "median": 949.5, + "p95": 1768.5, + "p99": 2073.4 + }, + "rps": { + "count": 1140, + "mean": 34.58 + }, + "scenarioDuration": { + "min": 935.4, + "max": 7450.4, + "median": 6353.8, + "p95": 7180.9, + "p99": 7381.7 + }, + "scenarioCounts": { + "Users test": 190 + }, + "errors": {}, + "codes": { + "200": 760, + "201": 380 + }, + "matches": 0, + "customStats": {}, + "counters": {}, + "scenariosAvoided": 110, + "phases": [ + { + "duration": 30, + "arrivalRate": 10, + "maxVusers": 40 + } + ] + }, + "intermediate": [ + { + "timestamp": "2021-07-12T05:06:13.717Z", + "scenariosCreated": 66, + "scenariosCompleted": 27, + "requestsCompleted": 289, + "latency": { + "min": 14, + "max": 2274, + "median": 879, + "p95": 1875.3, + "p99": 2065.8 + }, + "rps": { + "count": 328, + "mean": 33.16 + }, + "scenarioDuration": { + "min": 935.4, + "max": 7266, + "median": 5256.1, + "p95": 7075.7, + "p99": 7266 + }, + "scenarioCounts": { + "Users test": 66 + }, + "errors": {}, + "codes": { + "200": 175, + "201": 114 + }, + "matches": 0, + "latencies": [ + 201000000, + 153000000, + 22000000, + 14000000, + 213000000, + 298000000, + 294000000, + 164000000, + 29000000, + 167000000, + 260000000, + 465000000, + 369000000, + 186000000, + 190000000, + 47000000, + 61000000, + 60000000, + 46000000, + 62000000, + 384000000, + 293000000, + 223000000, + 239000000, + 401000000, + 389000000, + 218000000, + 400000000, + 402000000, + 244000000, + 58000000, + 71000000, + 525000000, + 639000000, + 444000000, + 316000000, + 427000000, + 618000000, + 592000000, + 1010000000, + 585000000, + 598000000, + 340000000, + 343000000, + 64000000, + 81000000, + 77000000, + 92000000, + 710000000, + 813000000, + 518000000, + 622000000, + 585000000, + 259000000, + 726000000, + 589000000, + 493000000, + 1091000000, + 425000000, + 401000000, + 202000000, + 346000000, + 355000000, + 559000000, + 599000000, + 550000000, + 378000000, + 519000000, + 628000000, + 431000000, + 252000000, + 267000000, + 399000000, + 403000000, + 567000000, + 641000000, + 650000000, + 832000000, + 771000000, + 631000000, + 777000000, + 772000000, + 958000000, + 759000000, + 849000000, + 994000000, + 1061000000, + 1079000000, + 1035000000, + 1038000000, + 1080000000, + 893000000, + 787000000, + 781000000, + 1227000000, + 1087000000, + 1082000000, + 1090000000, + 1266000000, + 1191000000, + 1018000000, + 853000000, + 543000000, + 791000000, + 792000000, + 557000000, + 558000000, + 838000000, + 525000000, + 1223000000, + 1028000000, + 1132000000, + 939000000, + 1001000000, + 762000000, + 759000000, + 567000000, + 949000000, + 852000000, + 1051000000, + 572000000, + 579000000, + 607000000, + 1030000000, + 936000000, + 890000000, + 864000000, + 877000000, + 878000000, + 882000000, + 881000000, + 614000000, + 631000000, + 637000000, + 633000000, + 716000000, + 785000000, + 782000000, + 595000000, + 1085000000, + 919000000, + 712000000, + 716000000, + 953000000, + 725000000, + 969000000, + 727000000, + 1084000000, + 973000000, + 1264000000, + 1200000000, + 804000000, + 906000000, + 1135000000, + 1133000000, + 879000000, + 880000000, + 879000000, + 1564000000, + 1638000000, + 1442000000, + 1543000000, + 1343000000, + 1704000000, + 1705000000, + 1433000000, + 1682000000, + 1674000000, + 1671000000, + 1513000000, + 1520000000, + 1860000000, + 1736000000, + 1986000000, + 1780000000, + 1875000000, + 2022000000, + 1946000000, + 2056000000, + 2072000000, + 1790000000, + 1771000000, + 1766000000, + 1762000000, + 1771000000, + 1776000000, + 1988000000, + 1788000000, + 1793000000, + 1842000000, + 1842000000, + 1873000000, + 1881000000, + 1037000000, + 923000000, + 929000000, + 945000000, + 1500000000, + 959000000, + 943000000, + 946000000, + 1512000000, + 1513000000, + 935000000, + 680000000, + 1456000000, + 689000000, + 1054000000, + 2274000000, + 1032000000, + 1048000000, + 1051000000, + 1047000000, + 1049000000, + 1378000000, + 1416000000, + 1326000000, + 1401000000, + 1863000000, + 1864000000, + 1523000000, + 1496000000, + 1575000000, + 1575000000, + 1573000000, + 1514000000, + 1513000000, + 1515000000, + 1464000000, + 1726000000, + 1706000000, + 1726000000, + 1683000000, + 1676000000, + 1622000000, + 1663000000, + 1654000000, + 1914000000, + 1833000000, + 1635000000, + 1740000000, + 1543000000, + 2025000000, + 1982000000, + 1230000000, + 2022000000, + 860000000, + 870000000, + 2051000000, + 852000000, + 1303000000, + 1290000000, + 1286000000, + 896000000, + 2098000000, + 1733000000, + 743000000, + 742000000, + 750000000, + 1359000000, + 606000000, + 1366000000, + 1013000000, + 1118000000, + 756000000, + 754000000, + 732000000, + 739000000, + 736000000, + 475000000, + 916000000, + 720000000, + 824000000, + 500000000, + 505000000, + 746000000, + 1264000000, + 1264000000, + 774000000, + 1254000000, + 685000000, + 1078000000, + 667000000, + 1057000000, + 676000000, + 657000000, + 654000000, + 655000000, + 755000000 + ], + "customStats": {}, + "counters": {}, + "concurrency": 39, + "pendingRequests": 39, + "scenariosAvoided": 33 + }, + { + "timestamp": "2021-07-12T05:06:23.712Z", + "scenariosCreated": 68, + "scenariosCompleted": 67, + "requestsCompleted": 349, + "latency": { + "min": 372, + "max": 2169, + "median": 1008, + "p95": 1724, + "p99": 1952.1 + }, + "rps": { + "count": 350, + "mean": 35.04 + }, + "scenarioDuration": { + "min": 5916.9, + "max": 7450.4, + "median": 6673.5, + "p95": 7351.6, + "p99": 7440.1 + }, + "scenarioCounts": { + "Users test": 68 + }, + "errors": {}, + "codes": { + "200": 236, + "201": 113 + }, + "matches": 0, + "latencies": [ + 838000000, + 775000000, + 774000000, + 1235000000, + 1227000000, + 1129000000, + 1033000000, + 1126000000, + 1115000000, + 1108000000, + 1109000000, + 1082000000, + 1096000000, + 1109000000, + 852000000, + 1368000000, + 1369000000, + 1360000000, + 1340000000, + 851000000, + 1161000000, + 858000000, + 1159000000, + 1157000000, + 920000000, + 888000000, + 1261000000, + 1261000000, + 898000000, + 1269000000, + 1263000000, + 949000000, + 1273000000, + 884000000, + 1336000000, + 1127000000, + 748000000, + 753000000, + 1295000000, + 1097000000, + 1008000000, + 1192000000, + 712000000, + 792000000, + 794000000, + 1345000000, + 1344000000, + 1343000000, + 611000000, + 610000000, + 611000000, + 621000000, + 621000000, + 598000000, + 704000000, + 607000000, + 602000000, + 703000000, + 691000000, + 857000000, + 759000000, + 732000000, + 723000000, + 730000000, + 989000000, + 980000000, + 982000000, + 595000000, + 578000000, + 578000000, + 583000000, + 900000000, + 701000000, + 806000000, + 1005000000, + 604000000, + 624000000, + 623000000, + 622000000, + 621000000, + 684000000, + 1083000000, + 731000000, + 731000000, + 603000000, + 691000000, + 599000000, + 698000000, + 605000000, + 477000000, + 976000000, + 899000000, + 804000000, + 773000000, + 1235000000, + 1236000000, + 938000000, + 1042000000, + 845000000, + 1386000000, + 1387000000, + 914000000, + 933000000, + 935000000, + 937000000, + 1112000000, + 1108000000, + 1102000000, + 1174000000, + 1086000000, + 1151000000, + 1126000000, + 1071000000, + 1074000000, + 1041000000, + 1171000000, + 1300000000, + 1329000000, + 1133000000, + 1237000000, + 1308000000, + 1405000000, + 1407000000, + 1414000000, + 1105000000, + 1102000000, + 1104000000, + 1105000000, + 1108000000, + 1268000000, + 1458000000, + 1176000000, + 1377000000, + 1081000000, + 1748000000, + 1778000000, + 998000000, + 997000000, + 1794000000, + 1484000000, + 1790000000, + 844000000, + 843000000, + 1042000000, + 841000000, + 1168000000, + 1166000000, + 1163000000, + 1229000000, + 1233000000, + 1233000000, + 1235000000, + 1534000000, + 1336000000, + 1439000000, + 1324000000, + 1344000000, + 1351000000, + 950000000, + 953000000, + 956000000, + 963000000, + 1044000000, + 1041000000, + 1035000000, + 1723000000, + 1033000000, + 1033000000, + 1032000000, + 1471000000, + 1018000000, + 1010000000, + 1013000000, + 985000000, + 985000000, + 986000000, + 1018000000, + 1627000000, + 1128000000, + 1350000000, + 1352000000, + 1359000000, + 1744000000, + 1848000000, + 1950000000, + 1552000000, + 1235000000, + 1239000000, + 1240000000, + 2169000000, + 2169000000, + 2158000000, + 1757000000, + 1289000000, + 1289000000, + 1294000000, + 1290000000, + 1795000000, + 1408000000, + 1352000000, + 1356000000, + 1351000000, + 1346000000, + 1416000000, + 1409000000, + 1838000000, + 1330000000, + 1333000000, + 1333000000, + 1335000000, + 1343000000, + 1778000000, + 1611000000, + 1694000000, + 1495000000, + 1600000000, + 784000000, + 792000000, + 799000000, + 803000000, + 1854000000, + 1847000000, + 661000000, + 672000000, + 691000000, + 684000000, + 1742000000, + 990000000, + 986000000, + 1504000000, + 769000000, + 817000000, + 1517000000, + 1511000000, + 823000000, + 1015000000, + 819000000, + 819000000, + 821000000, + 821000000, + 842000000, + 841000000, + 841000000, + 1406000000, + 1405000000, + 1409000000, + 1282000000, + 905000000, + 909000000, + 912000000, + 910000000, + 1393000000, + 1405000000, + 1363000000, + 1416000000, + 892000000, + 890000000, + 832000000, + 712000000, + 713000000, + 716000000, + 713000000, + 968000000, + 943000000, + 722000000, + 722000000, + 978000000, + 971000000, + 735000000, + 1411000000, + 1319000000, + 1225000000, + 1115000000, + 1026000000, + 932000000, + 1316000000, + 594000000, + 591000000, + 1157000000, + 601000000, + 1293000000, + 1287000000, + 1294000000, + 1290000000, + 727000000, + 712000000, + 712000000, + 1289000000, + 1289000000, + 720000000, + 709000000, + 767000000, + 764000000, + 761000000, + 808000000, + 709000000, + 709000000, + 696000000, + 840000000, + 457000000, + 462000000, + 473000000, + 911000000, + 485000000, + 938000000, + 936000000, + 728000000, + 828000000, + 925000000, + 642000000, + 527000000, + 531000000, + 513000000, + 526000000, + 374000000, + 376000000, + 584000000, + 377000000, + 388000000, + 962000000, + 373000000, + 372000000, + 595000000, + 595000000, + 594000000, + 799000000, + 840000000, + 932000000, + 1047000000, + 847000000, + 752000000, + 915000000, + 923000000, + 913000000, + 911000000, + 909000000, + 921000000, + 928000000, + 932000000, + 1012000000, + 1024000000, + 1013000000, + 1002000000, + 1216000000, + 1216000000, + 1214000000, + 1028000000, + 1050000000, + 1169000000 + ], + "customStats": {}, + "counters": {}, + "concurrency": 40, + "pendingRequests": 40, + "scenariosAvoided": 32 + }, + { + "timestamp": "2021-07-12T05:06:33.716Z", + "scenariosCreated": 56, + "scenariosCompleted": 56, + "requestsCompleted": 380, + "latency": { + "min": 204, + "max": 2471, + "median": 1016, + "p95": 1651, + "p99": 2166.1 + }, + "rps": { + "count": 380, + "mean": 38.19 + }, + "scenarioDuration": { + "min": 5084.4, + "max": 7072.6, + "median": 6351.3, + "p95": 6835.2, + "p99": 7061.5 + }, + "scenarioCounts": { + "Users test": 56 + }, + "errors": {}, + "codes": { + "200": 250, + "201": 130 + }, + "matches": 0, + "latencies": [ + 1140000000, + 1015000000, + 1019000000, + 1026000000, + 1012000000, + 1017000000, + 1323000000, + 1646000000, + 1648000000, + 1714000000, + 1623000000, + 1525000000, + 1431000000, + 1334000000, + 1244000000, + 1147000000, + 1046000000, + 953000000, + 855000000, + 1382000000, + 1381000000, + 800000000, + 785000000, + 787000000, + 785000000, + 1029000000, + 1028000000, + 1026000000, + 1136000000, + 1075000000, + 1103000000, + 1496000000, + 1490000000, + 1479000000, + 1328000000, + 1384000000, + 828000000, + 831000000, + 842000000, + 843000000, + 852000000, + 857000000, + 929000000, + 867000000, + 858000000, + 872000000, + 872000000, + 866000000, + 869000000, + 870000000, + 881000000, + 873000000, + 968000000, + 961000000, + 964000000, + 994000000, + 1365000000, + 1566000000, + 1272000000, + 610000000, + 604000000, + 611000000, + 275000000, + 518000000, + 525000000, + 1180000000, + 1184000000, + 1184000000, + 1184000000, + 2150000000, + 1647000000, + 1160000000, + 1264000000, + 1068000000, + 868000000, + 1459000000, + 1431000000, + 1577000000, + 1608000000, + 1604000000, + 1546000000, + 1584000000, + 1585000000, + 1654000000, + 1642000000, + 1604000000, + 1624000000, + 1636000000, + 1623000000, + 1632000000, + 1628000000, + 1626000000, + 1622000000, + 1626000000, + 1627000000, + 1631000000, + 1631000000, + 1346000000, + 1345000000, + 1342000000, + 1370000000, + 996000000, + 1668000000, + 1002000000, + 1002000000, + 1003000000, + 1006000000, + 1010000000, + 1717000000, + 1687000000, + 1438000000, + 243000000, + 240000000, + 1444000000, + 1714000000, + 264000000, + 362000000, + 376000000, + 375000000, + 2011000000, + 1920000000, + 744000000, + 743000000, + 731000000, + 969000000, + 711000000, + 709000000, + 709000000, + 946000000, + 1442000000, + 1434000000, + 1579000000, + 1575000000, + 1532000000, + 1591000000, + 1633000000, + 1635000000, + 1571000000, + 1553000000, + 1565000000, + 1534000000, + 1659000000, + 1562000000, + 1592000000, + 1550000000, + 1549000000, + 1600000000, + 1544000000, + 1552000000, + 1181000000, + 1191000000, + 1059000000, + 1057000000, + 1470000000, + 1627000000, + 1625000000, + 1489000000, + 1605000000, + 1488000000, + 1571000000, + 1675000000, + 1476000000, + 1123000000, + 204000000, + 204000000, + 1125000000, + 1241000000, + 1249000000, + 484000000, + 334000000, + 333000000, + 330000000, + 781000000, + 569000000, + 564000000, + 564000000, + 1820000000, + 1423000000, + 1525000000, + 584000000, + 590000000, + 575000000, + 572000000, + 661000000, + 540000000, + 601000000, + 540000000, + 536000000, + 539000000, + 717000000, + 710000000, + 730000000, + 696000000, + 695000000, + 689000000, + 693000000, + 698000000, + 703000000, + 716000000, + 590000000, + 579000000, + 323000000, + 311000000, + 308000000, + 314000000, + 761000000, + 764000000, + 743000000, + 485000000, + 485000000, + 482000000, + 532000000, + 399000000, + 395000000, + 564000000, + 905000000, + 748000000, + 951000000, + 853000000, + 1057000000, + 644000000, + 563000000, + 635000000, + 631000000, + 629000000, + 555000000, + 838000000, + 987000000, + 887000000, + 939000000, + 933000000, + 932000000, + 898000000, + 895000000, + 903000000, + 771000000, + 771000000, + 899000000, + 1056000000, + 905000000, + 760000000, + 916000000, + 820000000, + 1019000000, + 776000000, + 777000000, + 781000000, + 786000000, + 1106000000, + 794000000, + 796000000, + 793000000, + 626000000, + 877000000, + 882000000, + 929000000, + 367000000, + 932000000, + 940000000, + 368000000, + 358000000, + 355000000, + 347000000, + 355000000, + 800000000, + 591000000, + 694000000, + 695000000, + 698000000, + 1448000000, + 1355000000, + 1257000000, + 1559000000, + 1163000000, + 1063000000, + 969000000, + 868000000, + 1074000000, + 1116000000, + 1249000000, + 1241000000, + 1241000000, + 1267000000, + 1242000000, + 1147000000, + 1143000000, + 1533000000, + 1404000000, + 1506000000, + 1595000000, + 1647000000, + 1559000000, + 1531000000, + 1580000000, + 898000000, + 902000000, + 902000000, + 904000000, + 910000000, + 921000000, + 921000000, + 923000000, + 1092000000, + 1645000000, + 1091000000, + 1648000000, + 1635000000, + 690000000, + 1113000000, + 1644000000, + 1248000000, + 575000000, + 570000000, + 576000000, + 570000000, + 571000000, + 1128000000, + 1133000000, + 1140000000, + 1143000000, + 1145000000, + 1142000000, + 2471000000, + 2173000000, + 2275000000, + 2383000000, + 1986000000, + 2086000000, + 1891000000, + 1495000000, + 1398000000, + 1198000000, + 1153000000, + 1124000000, + 1171000000, + 1170000000, + 1196000000, + 1191000000, + 1190000000, + 1146000000, + 1146000000, + 1146000000, + 1147000000, + 1178000000, + 1183000000, + 1180000000, + 1156000000, + 1252000000, + 1529000000, + 1528000000, + 1129000000, + 529000000, + 531000000, + 531000000, + 539000000, + 542000000, + 591000000, + 585000000, + 581000000, + 552000000, + 555000000, + 558000000, + 558000000, + 561000000, + 1616000000, + 1616000000, + 1610000000, + 1612000000, + 1612000000, + 551000000, + 546000000, + 653000000, + 654000000, + 570000000, + 572000000, + 572000000, + 558000000, + 561000000, + 1646000000, + 569000000 + ], + "customStats": {}, + "counters": {}, + "concurrency": 40, + "pendingRequests": 40, + "scenariosAvoided": 44 + }, + { + "timestamp": "2021-07-12T05:06:36.765Z", + "scenariosCreated": 0, + "scenariosCompleted": 40, + "requestsCompleted": 122, + "latency": { + "min": 16, + "max": 2017, + "median": 685.5, + "p95": 1591.2, + "p99": 1903.2 + }, + "rps": { + "count": 82, + "mean": 30.26 + }, + "scenarioDuration": { + "min": 2694.8, + "max": 6739.2, + "median": 5718.5, + "p95": 6594.2, + "p99": 6739.2 + }, + "scenarioCounts": {}, + "errors": {}, + "codes": { + "200": 99, + "201": 23 + }, + "matches": 0, + "latencies": [ + 806000000, + 1131000000, + 1106000000, + 1849000000, + 1819000000, + 1623000000, + 1727000000, + 1433000000, + 1859000000, + 1444000000, + 1445000000, + 1444000000, + 1474000000, + 1466000000, + 1496000000, + 1494000000, + 1481000000, + 1450000000, + 1451000000, + 1485000000, + 1481000000, + 1453000000, + 1484000000, + 1485000000, + 1484000000, + 1467000000, + 1463000000, + 1451000000, + 1449000000, + 1441000000, + 951000000, + 955000000, + 1516000000, + 1515000000, + 204000000, + 204000000, + 203000000, + 206000000, + 1512000000, + 1517000000, + 1518000000, + 1518000000, + 222000000, + 209000000, + 1521000000, + 1517000000, + 1570000000, + 196000000, + 182000000, + 195000000, + 193000000, + 184000000, + 286000000, + 285000000, + 280000000, + 280000000, + 284000000, + 359000000, + 361000000, + 361000000, + 2017000000, + 732000000, + 731000000, + 715000000, + 772000000, + 725000000, + 723000000, + 747000000, + 745000000, + 729000000, + 719000000, + 719000000, + 767000000, + 730000000, + 766000000, + 586000000, + 593000000, + 596000000, + 758000000, + 758000000, + 758000000, + 763000000, + 770000000, + 250000000, + 651000000, + 656000000, + 652000000, + 656000000, + 646000000, + 122000000, + 227000000, + 229000000, + 230000000, + 168000000, + 174000000, + 185000000, + 193000000, + 198000000, + 222000000, + 369000000, + 306000000, + 309000000, + 304000000, + 304000000, + 307000000, + 313000000, + 192000000, + 191000000, + 337000000, + 186000000, + 45000000, + 183000000, + 32000000, + 31000000, + 31000000, + 29000000, + 34000000, + 30000000, + 43000000, + 25000000, + 17000000, + 16000000 + ], + "customStats": {}, + "counters": {}, + "concurrency": 0, + "pendingRequests": 0, + "scenariosAvoided": 1 + } + ] +} \ No newline at end of file diff --git a/test.yaml b/test.yaml new file mode 100644 index 0000000..5207614 --- /dev/null +++ b/test.yaml @@ -0,0 +1,47 @@ +config: + target: "http://localhost:8080" + phases: + - duration: 30 + arrivalRate: 10 + maxVusers: 40 +scenarios: + - name: 'Users test' + flow: + - post: + url: '/login' + json: + login: 'admin' + password: 'admin' + capture: + - json: '$.token' + as: token + - get: + url: '/users' + headers: + Authorization: 'Bearer {{ token }}' + - post: + url: '/users' + headers: + Authorization: 'Bearer {{ token }}' + json: + login: 'lol' + password: 'lol' + capture: + - json: '$.id' + as: id + - get: + url: '/users/{{ id }}' + headers: + Authorization: 'Bearer {{ token }}' + - put: + url: '/users/{{ id }}' + headers: + Authorization: 'Bearer {{ token }}' + json: + login: 'loh' + name: 'loh' + - delete: + url: '/users/{{ id }}' + headers: + Authorization: 'Bearer {{ token }}' + diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..64f86c6 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] +} diff --git a/tsconfig.json b/tsconfig.json index 24db0a5..ba7045a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,31 +1,24 @@ -{ - "compilerOptions": { - "target": "es2020", - "module": "commonjs", - "allowJs": false, - "outDir": "./build", - "rootDir": "./src", - "downlevelIteration": false, - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noPropertyAccessFromIndexSignature": true, - "moduleResolution": "node", - "esModuleInterop": true, - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "sourceMap": true, - "strictPropertyInitialization":false, - }, - "exclude": [ - "node_modules/" - ], - "include": [ - "./src/**/*.ts" -, "src/middlewares/logger.requeststs" ] -} \ No newline at end of file +{ + "compilerOptions": { + "module": "commonjs", + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "target": "es2020", + "sourceMap": true, + "outDir": "./dist", + "baseUrl": "./src", + "incremental": true, + "noImplicitReturns": true, + "moduleResolution": "node", + "esModuleInterop": true + }, + "exclude": [ + "node_modules/" + ], + "include": [ + "./src/**/*.ts" +, "src/middlewares/logger.requeststs" ] +}