From 69ddc7fb5f620e0cb7aee1f49fde42c0015fe78b Mon Sep 17 00:00:00 2001 From: Fabricio Leonardo Sodano Pascazi Date: Tue, 28 Jul 2020 11:51:23 +1000 Subject: [PATCH 01/10] JSON en vez de SQLite --- .env.dist | 1 + package-lock.json | 21 +++- package.json | 3 +- src/cli/init.db.js | 1 - src/config/associations.js | 6 -- src/config/di.js | 27 ++--- src/module/club/controller/clubController.js | 4 +- src/module/club/mapper/clubMapper.js | 2 +- src/module/club/module.js | 4 +- .../club/repository/json/clubRepository.js | 102 ++++++++++++++++++ .../sqlite/__test__/clubMapper.test.js | 12 --- .../sqlite/__test__/clubModel.test.js | 13 --- .../sqlite/__test__/clubRepository.test.js | 81 -------------- .../club/repository/sqlite/clubMapper.js | 11 -- .../club/repository/sqlite/clubModel.js | 68 ------------ .../club/repository/sqlite/clubRepository.js | 68 ------------ 16 files changed, 142 insertions(+), 282 deletions(-) delete mode 100644 src/config/associations.js create mode 100644 src/module/club/repository/json/clubRepository.js delete mode 100644 src/module/club/repository/sqlite/__test__/clubMapper.test.js delete mode 100644 src/module/club/repository/sqlite/__test__/clubModel.test.js delete mode 100644 src/module/club/repository/sqlite/__test__/clubRepository.test.js delete mode 100644 src/module/club/repository/sqlite/clubMapper.js delete mode 100644 src/module/club/repository/sqlite/clubModel.js delete mode 100644 src/module/club/repository/sqlite/clubRepository.js diff --git a/.env.dist b/.env.dist index 9e9a88b..8b9c3db 100644 --- a/.env.dist +++ b/.env.dist @@ -1,4 +1,5 @@ DB_PATH=./data/database.db +JSON_DB_PATH=./data/clubs.json API_FOOTBALL_DATA= SESSION_DB_PATH=./data/session.db SESSION_SECRET=secreto por default (que puede tener espacios y caracteres no alfanuméricos) diff --git a/package-lock.json b/package-lock.json index d4fde6e..03b584d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -440,6 +440,14 @@ "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } } }, "@cypress/xvfb": { @@ -7836,6 +7844,13 @@ "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } } }, "request-progress": { @@ -9382,9 +9397,9 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz", + "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==" }, "v8-compile-cache": { "version": "2.1.1", diff --git a/package.json b/package.json index 62db138..74959d6 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "nunjucks": "^3.2.1", "rsdi": "^1.0.5", "sequelize": "^6.3.3", - "sqlite3": "^5.0.0" + "sqlite3": "^5.0.0", + "uuid": "^8.3.0" } } diff --git a/src/cli/init.db.js b/src/cli/init.db.js index 4baa161..ee3c2b7 100644 --- a/src/cli/init.db.js +++ b/src/cli/init.db.js @@ -11,7 +11,6 @@ const container = configureDependencyInjection(app); const mainDb = container.get('Sequelize'); container.get('AreaModel'); -container.get('ClubModel'); mainDb.sync(); diff --git a/src/config/associations.js b/src/config/associations.js deleted file mode 100644 index 19c602e..0000000 --- a/src/config/associations.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @param {import('sequelize').Sequelize} sequelizeInstance - */ -module.exports = async function setupAssociations(ClubModel, AreaModel) { - ClubModel.belongsTo(AreaModel, { foreignKey: 'area_id' }); -}; diff --git a/src/config/di.js b/src/config/di.js index 49e115f..ea6a4c8 100644 --- a/src/config/di.js +++ b/src/config/di.js @@ -1,15 +1,20 @@ // configure DI container const path = require('path'); +const uuid = require('uuid'); +const fs = require('fs'); const { default: DIContainer, object, get, factory } = require('rsdi'); const { Sequelize } = require('sequelize'); const multer = require('multer'); const session = require('express-session'); const SequelizeStore = require('connect-session-sequelize')(session.Store); -const { ClubController, ClubService, ClubRepository, ClubModel } = require('../module/club/module'); +const { default: FactoryDefinition } = require('rsdi/definitions/FactoryDefinition'); +const { ClubController, ClubService, ClubRepository } = require('../module/club/module'); const { AreaController, AreaService, AreaRepository, AreaModel } = require('../module/area/module'); -const setupSequelizeModelAssociations = require('./associations'); +function configureMainJSONDatabase() { + return process.env.JSON_DB_PATH; +} function configureMainSequelizeDatabase() { const sequelize = new Sequelize({ @@ -27,13 +32,6 @@ function configureSessionSequelizeDatabase() { return sequelize; } -/** - * @param {DIContainer} container - */ -function configureClubModel(container) { - return ClubModel.setup(container.get('Sequelize')); -} - /** * @param {DIContainer} container */ @@ -73,11 +71,18 @@ function configureMulter() { return multer({ storage }); } +function configureUuid() { + return uuid.v4; +} + /** * @param {DIContainer} container */ function addCommonDefinitions(container) { container.addDefinitions({ + fs, + uuid: factory(configureUuid), + JSONDatabase: factory(configureMainJSONDatabase), Sequelize: factory(configureMainSequelizeDatabase), SessionSequelize: factory(configureSessionSequelizeDatabase), Session: factory(configureSession), @@ -96,8 +101,7 @@ function addClubModuleDefinitions(container) { get('AreaService') ), ClubService: object(ClubService).construct(get('ClubRepository')), - ClubRepository: object(ClubRepository).construct(get('ClubModel'), get('AreaModel')), - ClubModel: factory(configureClubModel), + ClubRepository: object(ClubRepository).construct(get('uuid'), get('fs'), get('JSONDatabase')), }); } @@ -118,6 +122,5 @@ module.exports = function configureDI() { addCommonDefinitions(container); addAreaModuleDefinitions(container); addClubModuleDefinitions(container); - setupSequelizeModelAssociations(container.get('ClubModel'), container.get('AreaModel')); return container; }; diff --git a/src/module/club/controller/clubController.js b/src/module/club/controller/clubController.js index ace016c..074ab43 100644 --- a/src/module/club/controller/clubController.js +++ b/src/module/club/controller/clubController.js @@ -97,7 +97,7 @@ module.exports = class ClubController extends AbstractController { } res.redirect('/club'); } catch (e) { - req.session.errors = [e.message]; + req.session.errors = [e.message, e.name, e.stack]; res.redirect('/club'); } } @@ -113,7 +113,7 @@ module.exports = class ClubController extends AbstractController { await this.clubService.delete(club); req.session.messages = [`Se eliminó el club ID: ${id} (${club.name})`]; } catch (e) { - req.session.errors = [e.message]; + req.session.errors = [e.message, e.type, e.stack]; } res.redirect('/club'); } diff --git a/src/module/club/mapper/clubMapper.js b/src/module/club/mapper/clubMapper.js index 3a0d4f9..a4421de 100644 --- a/src/module/club/mapper/clubMapper.js +++ b/src/module/club/mapper/clubMapper.js @@ -28,7 +28,7 @@ function fromDataToEntity({ area_id, }) { return new Club({ - id: Number(id), + id, name, shortName, tla, diff --git a/src/module/club/module.js b/src/module/club/module.js index e694cef..0ed620f 100644 --- a/src/module/club/module.js +++ b/src/module/club/module.js @@ -1,7 +1,6 @@ const ClubController = require('./controller/clubController'); -const ClubRepository = require('./repository/sqlite/clubRepository'); +const ClubRepository = require('./repository/json/clubRepository'); const ClubService = require('./service/clubService'); -const ClubModel = require('./repository/sqlite/clubModel'); /** * @param {import('express').Application} app @@ -20,5 +19,4 @@ module.exports = { ClubController, ClubService, ClubRepository, - ClubModel, }; diff --git a/src/module/club/repository/json/clubRepository.js b/src/module/club/repository/json/clubRepository.js new file mode 100644 index 0000000..34803cb --- /dev/null +++ b/src/module/club/repository/json/clubRepository.js @@ -0,0 +1,102 @@ +const AbstractClubRepository = require('../abstractClubRepository'); +const ClubNotFoundError = require('../error/clubNotFoundError'); +const ClubIdNotDefinedError = require('../error/clubIdNotDefinedError'); +const Club = require('../../entity/club'); + +module.exports = class ClubRepository extends AbstractClubRepository { + /** + * @param {import('uuid/v4')} uuid + * @param {import('fs')} fileSystem + * @param {String} dbFilePath + */ + constructor(uuid, fileSystem, dbFilePath) { + super(); + this.uuid = uuid; + this.fileSystem = fileSystem; + this.dbFilePath = dbFilePath; + } + + /** + * @param {import('../../entity/club')} club + * @returns {Promise} + */ + async save(club) { + const clubs = await this.getData(); + let clubToSave; + + if (club.id) { + const clubIndex = clubs.findIndex((tmpClub) => tmpClub.id === club.id); + if (clubIndex === -1) { + throw new ClubNotFoundError( + `No se pudo actualizar el club club con id ${club.id} porque no se encontró` + ); + } + clubs[clubIndex] = club; + clubToSave = club; + } else { + clubToSave = { ...club, ...{ id: this.uuid() } }; + clubs.push(clubToSave); + } + + this.saveData(clubs); + return new Club(clubToSave); + } + + /** + * @param {import('../../entity/club')} club + * @returns {Boolean} devuelve true si se borró algo, false si no se borró nada. + */ + async delete(club) { + if (!club || !club.id) { + throw new ClubIdNotDefinedError('El ID del club no está definido'); + } + + const clubs = this.getData(); + const clubIndex = clubs.findIndex((tmpClub) => tmpClub.id === club.id); + clubs.splice(clubIndex, 1); + + this.saveData(clubs); + + return true; + } + + /** + * @param {Number} id + * @returns {Promise} + */ + async getById(id) { + const clubs = this.getData(); + + const club = clubs.find((tmpClub) => tmpClub.id === id); + if (!club) { + throw new ClubNotFoundError(`No se encontró club con id ${id}`); + } + + return new Club(club); + } + + /** + * @return {Promise>} + */ + async getAll() { + return this.getData().map((clubData) => new Club(clubData)); + } + + /** + * @returns {Array { - expect( - fromModelToEntity({ - toJSON() { - return {}; - }, - }) - ).toBeInstanceOf(ClubEntity); -}); diff --git a/src/module/club/repository/sqlite/__test__/clubModel.test.js b/src/module/club/repository/sqlite/__test__/clubModel.test.js deleted file mode 100644 index b454221..0000000 --- a/src/module/club/repository/sqlite/__test__/clubModel.test.js +++ /dev/null @@ -1,13 +0,0 @@ -const Sequelize = require('sequelize'); -const ClubModel = require('../clubModel'); - -const sequelizeInstance = new Sequelize('sqlite::memory'); - -test('Después de hacerle un setup a Club Model y sincronizar el modelo, la tabla Clubs existe ', async () => { - const TEST_ID = 1; - ClubModel.setup(sequelizeInstance); - await ClubModel.sync({ force: true }); - await ClubModel.create({ id: 1 }); - const club = await ClubModel.findOne({ where: { id: TEST_ID } }); - expect(club.id).toEqual(TEST_ID); -}); diff --git a/src/module/club/repository/sqlite/__test__/clubRepository.test.js b/src/module/club/repository/sqlite/__test__/clubRepository.test.js deleted file mode 100644 index 00865c7..0000000 --- a/src/module/club/repository/sqlite/__test__/clubRepository.test.js +++ /dev/null @@ -1,81 +0,0 @@ -const { Sequelize } = require('sequelize'); -const ClubRepository = require('../clubRepository'); -const ClubModel = require('../clubModel'); -const AreaModel = require('../../../../area/repository/sqlite/areaModel'); -const ClubEntity = require('../../../entity/club'); -const ClubNotFoundError = require('../../error/clubNotFoundError'); -const ClubIdNotDefinedError = require('../../error/clubIdNotDefinedError'); - -const sequelizeInstance = new Sequelize('sqlite::memory'); - -/** - * @type ClubRepository - */ -let repository; - -const sampleClub = new ClubEntity({ - name: 'Arsenal FC', - shortName: 'Arsenal', - tla: 'ARS', - crestUrl: 'https://upload.wikimedia.org/wikipedia/en/5/53/Arsenal_FC.svg', - address: '75 Drayton Park London N5 1BU', - phone: '+44 (020) 76195003', - website: 'http://www.arsenal.com', - email: 'info@arsenal.co.uk', - founded: 1886, - clubColors: 'Red / White', - venue: 'Emirates Stadium', - lastUpdated: '2020-05-14T02:41:34Z', - Area: { id: 1 }, -}); - -beforeAll(() => { - const club = ClubModel.setup(sequelizeInstance); - const area = AreaModel.setup(sequelizeInstance); - club.belongsTo(area); - - repository = new ClubRepository(club, area); -}); - -beforeEach(async (done) => { - await sequelizeInstance.sync({ force: true }); - done(); -}); - -test('Crea un equipo cuando la entidad no tiene id', async () => { - const NEW_AUTOGENERATED_ID = 1; - const newClub = await repository.save(sampleClub); - expect(newClub.id).toEqual(NEW_AUTOGENERATED_ID); -}); - -test('Actualiza un equipo cuando la entidad tiene un id', async () => { - const NEW_AUTOGENERATED_ID = 1; - const newClub = await repository.save(sampleClub); - expect(newClub.id).toEqual(NEW_AUTOGENERATED_ID); - - newClub.name = 'Independiente'; - console.log(newClub); - const modifiedClub = await repository.save(newClub); - expect(modifiedClub.id).toEqual(NEW_AUTOGENERATED_ID); - expect(modifiedClub.name).toEqual('Independiente'); -}); - -test('Borrar un equipo existente devuelve true', async () => { - const NEW_AUTOGENERATED_ID = 1; - const newClub = await repository.save(sampleClub); - expect(newClub.id).toEqual(NEW_AUTOGENERATED_ID); - await expect(repository.delete(newClub)).resolves.toEqual(true); - await expect(repository.getById(NEW_AUTOGENERATED_ID)).rejects.toThrow(ClubNotFoundError); -}); - -test('Borrar un equipo sin parámetros da error', async () => { - await expect(repository.delete()).rejects.toThrow(ClubIdNotDefinedError); -}); - -test('Borrar un equipo sin id da error', async () => { - await expect(repository.delete({})).rejects.toThrow(ClubIdNotDefinedError); -}); - -test('Borrar un equipo con id inexistente devuelve false', async () => { - await expect(repository.delete({ id: 1 })).resolves.toEqual(false); -}); diff --git a/src/module/club/repository/sqlite/clubMapper.js b/src/module/club/repository/sqlite/clubMapper.js deleted file mode 100644 index 8c41528..0000000 --- a/src/module/club/repository/sqlite/clubMapper.js +++ /dev/null @@ -1,11 +0,0 @@ -const Club = require('../../entity/club'); - -module.exports = { - /** - * @param {import('./clubModel')} model - * @returns {import('../../entity/club')} - */ - fromModelToEntity(model) { - return new Club(model.toJSON()); - }, -}; diff --git a/src/module/club/repository/sqlite/clubModel.js b/src/module/club/repository/sqlite/clubModel.js deleted file mode 100644 index 252ff98..0000000 --- a/src/module/club/repository/sqlite/clubModel.js +++ /dev/null @@ -1,68 +0,0 @@ -const { Sequelize, Model, DataTypes } = require('sequelize'); - -module.exports = class ClubModel extends Model { - /** - * @param {import('sequelize').Sequelize} sequelizeInstance - * @returns {typeof ClubModel} - */ - static setup(sequelizeInstance) { - ClubModel.init( - { - id: { - type: DataTypes.INTEGER, - allowNull: false, - primaryKey: true, - autoIncrement: true, - unique: true, - }, - name: { - type: DataTypes.STRING, - }, - shortName: { - type: DataTypes.STRING, - }, - tla: { - type: DataTypes.STRING, - }, - crestUrl: { - type: DataTypes.STRING, - }, - address: { - type: DataTypes.STRING, - }, - phone: { - type: DataTypes.STRING, - }, - website: { - type: DataTypes.STRING, - }, - email: { - type: DataTypes.STRING, - }, - founded: { - type: DataTypes.INTEGER, - }, - clubColors: { - type: DataTypes.STRING, - }, - venue: { - type: DataTypes.STRING, - }, - lastUpdated: { - type: DataTypes.DATE, - defaultValue: Sequelize.NOW, - }, - createdAt: { - type: DataTypes.DATE, - defaultValue: Sequelize.NOW, - }, - }, - { - sequelize: sequelizeInstance, - modelName: 'Club', - timestamps: false, - } - ); - return ClubModel; - } -}; diff --git a/src/module/club/repository/sqlite/clubRepository.js b/src/module/club/repository/sqlite/clubRepository.js deleted file mode 100644 index 5f20da9..0000000 --- a/src/module/club/repository/sqlite/clubRepository.js +++ /dev/null @@ -1,68 +0,0 @@ -const { fromModelToEntity } = require('./clubMapper'); -const AbstractClubRepository = require('../abstractClubRepository'); -const ClubNotFoundError = require('../error/clubNotFoundError'); -const ClubIdNotDefinedError = require('../error/clubIdNotDefinedError'); - -module.exports = class ClubRepository extends AbstractClubRepository { - /** - * @param {typeof import('./clubModel')} clubModel - * * @param {typeof import('../../../area/repository/sqlite/areaModel')} areaModel - */ - constructor(clubModel, areaModel) { - super(); - this.clubModel = clubModel; - this.areaModel = areaModel; - } - - /** - * @param {import('../../entity/club')} club - * @returns {Promise} - */ - async save(club) { - let clubModel; - - const buildOptions = { isNewRecord: !club.id, include: this.areaModel }; - clubModel = this.clubModel.build(club, buildOptions); - clubModel.setDataValue('area_id', club.Area.id); - clubModel = await clubModel.save(); - - return fromModelToEntity(clubModel); - } - - /** - * @param {import('../../entity/club')} club - * @returns {Boolean} devuelve true si se borró algo, false si no se borró nada. - */ - async delete(club) { - if (!club || !club.id) { - throw new ClubIdNotDefinedError(); - } - - return Boolean(await this.clubModel.destroy({ where: { id: club.id } })); - } - - /** - * @param {Number} id - * @returns {Promise} - */ - async getById(id) { - const clubModel = await this.clubModel.findOne({ - where: { id }, - include: this.areaModel, - }); - - if (!clubModel) { - throw new ClubNotFoundError(`No se encontró club con id ${id}`); - } - - return fromModelToEntity(clubModel); - } - - /** - * @return {Promise>} - */ - async getAll() { - const clubs = await this.clubModel.findAll(); - return clubs.map(fromModelToEntity); - } -}; From 777dcf19d1b8bf601f011ce31a428dd489a4a574 Mon Sep 17 00:00:00 2001 From: Fabricio Leonardo Sodano Pascazi Date: Thu, 6 Aug 2020 08:42:47 +1000 Subject: [PATCH 02/10] =?UTF-8?q?Quita=20referencias=20al=20m=C3=B3dulo=20?= =?UTF-8?q?de=20area?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 5 +- src/app.js | 2 - src/cli/init.db.js | 21 ---- src/config/di.js | 55 +-------- src/module/area/controller/areaController.js | 104 ------------------ .../controller/error/areaIdNotDefinedError.js | 1 - src/module/area/entity/area.js | 6 - src/module/area/mapper/areaMapper.js | 5 - src/module/area/module.js | 24 ---- .../area/repository/abstractAreaRepository.js | 35 ------ .../error/abstractAreaRepositoryError.js | 1 - .../repository/error/areaIdNotDefinedError.js | 1 - .../repository/error/areaNotFoundError.js | 1 - .../area/repository/sqlite/areaMapper.js | 11 -- .../area/repository/sqlite/areaModel.js | 38 ------- .../area/repository/sqlite/areaRepository.js | 62 ----------- src/module/area/service/areaService.js | 51 --------- .../service/error/areaIdNotDefinedError.js | 1 - .../area/service/error/areaNotDefinedError.js | 1 - src/module/area/view/form.html | 34 ------ src/module/area/view/index.html | 73 ------------ .../club/controller/__tests__/club.test.js | 19 +--- src/module/club/controller/clubController.js | 16 +-- src/module/club/entity/club.js | 5 - src/module/club/mapper/clubMapper.js | 9 -- .../club/repository/json/clubRepository.js | 6 + .../service/error/clubIdNotDefinedError.js | 2 +- src/module/club/view/form.html | 18 --- src/module/view/layout/base.html | 15 --- 29 files changed, 14 insertions(+), 608 deletions(-) delete mode 100644 src/cli/init.db.js delete mode 100644 src/module/area/controller/areaController.js delete mode 100644 src/module/area/controller/error/areaIdNotDefinedError.js delete mode 100644 src/module/area/entity/area.js delete mode 100644 src/module/area/mapper/areaMapper.js delete mode 100644 src/module/area/module.js delete mode 100644 src/module/area/repository/abstractAreaRepository.js delete mode 100644 src/module/area/repository/error/abstractAreaRepositoryError.js delete mode 100644 src/module/area/repository/error/areaIdNotDefinedError.js delete mode 100644 src/module/area/repository/error/areaNotFoundError.js delete mode 100644 src/module/area/repository/sqlite/areaMapper.js delete mode 100644 src/module/area/repository/sqlite/areaModel.js delete mode 100644 src/module/area/repository/sqlite/areaRepository.js delete mode 100644 src/module/area/service/areaService.js delete mode 100644 src/module/area/service/error/areaIdNotDefinedError.js delete mode 100644 src/module/area/service/error/areaNotDefinedError.js delete mode 100644 src/module/area/view/form.html delete mode 100644 src/module/area/view/index.html diff --git a/package.json b/package.json index 74959d6..74f4ff3 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,7 @@ "main": "index.js", "scripts": { "start": "node src/app.js", - "schema:sync": "node src/cli/init.db.js", - "dev": "npm run schema:sync && nodemon -e 'js,njk,html' src/app.js", + "dev": "nodemon -e 'js,njk,html' src/app.js", "test": "jest --coverage", "test:dev": "jest --watch" }, @@ -35,7 +34,6 @@ }, "dependencies": { "axios": "^0.19.2", - "connect-session-sequelize": "^7.0.1", "dotenv": "^8.2.0", "express": "^4.17.1", "express-session": "^1.17.1", @@ -43,7 +41,6 @@ "nunjucks": "^3.2.1", "rsdi": "^1.0.5", "sequelize": "^6.3.3", - "sqlite3": "^5.0.0", "uuid": "^8.3.0" } } diff --git a/src/app.js b/src/app.js index 450ce8a..228415e 100644 --- a/src/app.js +++ b/src/app.js @@ -4,7 +4,6 @@ const nunjucks = require('nunjucks'); const configureDependencyInjection = require('./config/di'); const { init: initClubModule } = require('./module/club/module'); -const { init: initAreaModule } = require('./module/area/module'); const app = express(); const port = process.env.PORT || 3000; @@ -22,7 +21,6 @@ const container = configureDependencyInjection(app); app.use(container.get('Session')); initClubModule(app, container); -initAreaModule(app, container); /** * @type {import('./module/club/controller/clubController')} controller; diff --git a/src/cli/init.db.js b/src/cli/init.db.js deleted file mode 100644 index ee3c2b7..0000000 --- a/src/cli/init.db.js +++ /dev/null @@ -1,21 +0,0 @@ -require('dotenv').config(); -const express = require('express'); -const configureDependencyInjection = require('../config/di'); - -const app = express(); -const container = configureDependencyInjection(app); - -/** - * @type {import('sequelize').Sequelize} mainDb - */ -const mainDb = container.get('Sequelize'); - -container.get('AreaModel'); - -mainDb.sync(); - -/** - * @type {import('sequelize').Sequelize} sessionDb - */ -const sessionDb = container.get('SessionSequelize'); -sessionDb.sync(); diff --git a/src/config/di.js b/src/config/di.js index ea6a4c8..3c8caef 100644 --- a/src/config/di.js +++ b/src/config/di.js @@ -3,51 +3,19 @@ const path = require('path'); const uuid = require('uuid'); const fs = require('fs'); const { default: DIContainer, object, get, factory } = require('rsdi'); -const { Sequelize } = require('sequelize'); const multer = require('multer'); const session = require('express-session'); -const SequelizeStore = require('connect-session-sequelize')(session.Store); -const { default: FactoryDefinition } = require('rsdi/definitions/FactoryDefinition'); const { ClubController, ClubService, ClubRepository } = require('../module/club/module'); -const { AreaController, AreaService, AreaRepository, AreaModel } = require('../module/area/module'); function configureMainJSONDatabase() { return process.env.JSON_DB_PATH; } -function configureMainSequelizeDatabase() { - const sequelize = new Sequelize({ - dialect: 'sqlite', - storage: process.env.DB_PATH, - }); - return sequelize; -} - -function configureSessionSequelizeDatabase() { - const sequelize = new Sequelize({ - dialect: 'sqlite', - storage: process.env.SESSION_DB_PATH, - }); - return sequelize; -} - -/** - * @param {DIContainer} container - */ -function configureAreaModel(container) { - return AreaModel.setup(container.get('Sequelize')); -} - -/** - * @param {DIContainer} container - */ -function configureSession(container) { +function configureSession() { const ONE_WEEK_IN_SECONDS = 604800000; - const sequelize = container.get('SessionSequelize'); const sessionOptions = { - store: new SequelizeStore({ db: sequelize }), secret: process.env.SESSION_SECRET, resave: false, saveUninitialized: false, @@ -83,8 +51,6 @@ function addCommonDefinitions(container) { fs, uuid: factory(configureUuid), JSONDatabase: factory(configureMainJSONDatabase), - Sequelize: factory(configureMainSequelizeDatabase), - SessionSequelize: factory(configureSessionSequelizeDatabase), Session: factory(configureSession), Multer: factory(configureMulter), }); @@ -95,32 +61,15 @@ function addCommonDefinitions(container) { */ function addClubModuleDefinitions(container) { container.addDefinitions({ - ClubController: object(ClubController).construct( - get('Multer'), - get('ClubService'), - get('AreaService') - ), + ClubController: object(ClubController).construct(get('Multer'), get('ClubService')), ClubService: object(ClubService).construct(get('ClubRepository')), ClubRepository: object(ClubRepository).construct(get('uuid'), get('fs'), get('JSONDatabase')), }); } -/** - * @param {DIContainer} container - */ -function addAreaModuleDefinitions(container) { - container.addDefinitions({ - AreaController: object(AreaController).construct(get('AreaService')), - AreaService: object(AreaService).construct(get('AreaRepository')), - AreaRepository: object(AreaRepository).construct(get('AreaModel')), - AreaModel: factory(configureAreaModel), - }); -} - module.exports = function configureDI() { const container = new DIContainer(); addCommonDefinitions(container); - addAreaModuleDefinitions(container); addClubModuleDefinitions(container); return container; }; diff --git a/src/module/area/controller/areaController.js b/src/module/area/controller/areaController.js deleted file mode 100644 index 9a79e45..0000000 --- a/src/module/area/controller/areaController.js +++ /dev/null @@ -1,104 +0,0 @@ -const fromDataToEntity = require('../mapper/areaMapper'); -const AreaIdNotDefinedError = require('./error/areaIdNotDefinedError'); -const AbstractController = require('../../abstractController'); - -module.exports = class AreaController extends AbstractController { - /** - * @param {import('../service/areaService')} areaService - */ - constructor(areaService) { - super(); - this.areaService = areaService; - } - - /** - * @param {import('express').Application} app - */ - configureRoutes(app) { - const ROUTE = '/area'; - - // Nota: el `bind` es necesario porque estamos atando el callback a una función miembro de esta clase - // y no a la clase en si. - // Al hacer `bind` nos aseguramos que "this" dentro de `create` sea el controlador. - app.get(`${ROUTE}/create`, this.create.bind(this)); - app.get(`${ROUTE}`, this.index.bind(this)); - app.get(`${ROUTE}/view/:id`, this.view.bind(this)); - app.post(`${ROUTE}/save`, this.save.bind(this)); - app.get(`${ROUTE}/delete/:id`, this.delete.bind(this)); - } - - /** - * @param {import('express').Request} req - * @param {import('express').Response} res - */ - async index(req, res) { - const areas = await this.areaService.getAll(); - const { errors, messages } = req.session; - res.render('area/view/index.html', { data: { areas }, messages, errors }); - req.session.errors = []; - req.session.messages = []; - } - - /** - * @param {import('express').Request} req - * @param {import('express').Response} res - */ - async create(req, res) { - res.render('area/view/form.html'); - } - - /** - * @param {import('express').Request} req - * @param {import('express').Response} res - */ - async view(req, res) { - const { id } = req.params; - if (!id) { - throw new AreaIdNotDefinedError(); - } - - try { - const area = await this.areaService.getById(id); - res.render('area/view/form.html', { data: { area } }); - } catch (e) { - req.session.errors = [e.message]; - res.redirect('/area'); - } - } - - /** - * @param {import('express').Request} req - * @param {import('express').Response} res - */ - async save(req, res) { - try { - const area = fromDataToEntity(req.body); - const savedArea = await this.areaService.save(area); - if (area.id) { - req.session.messages = [`El area con id ${area.id} se actualizó exitosamente`]; - } else { - req.session.messages = [`Se creó el area con id ${savedArea.id} (${savedArea.name})`]; - } - res.redirect('/area'); - } catch (e) { - req.session.errors = [e.message]; - res.redirect('/area'); - } - } - - /** - * @param {import('express').Request} req - * @param {import('express').Response} res - */ - async delete(req, res) { - try { - const { id } = req.params; - const area = await this.areaService.getById(id); - await this.areaService.delete(area); - req.session.messages = [`Se eliminó el area ID: ${id} (${area.name})`]; - } catch (e) { - req.session.errors = [e.message]; - } - res.redirect('/area'); - } -}; diff --git a/src/module/area/controller/error/areaIdNotDefinedError.js b/src/module/area/controller/error/areaIdNotDefinedError.js deleted file mode 100644 index 58c3e8c..0000000 --- a/src/module/area/controller/error/areaIdNotDefinedError.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = class AreaIdNotDefinedError extends Error {}; diff --git a/src/module/area/entity/area.js b/src/module/area/entity/area.js deleted file mode 100644 index 2ffda7a..0000000 --- a/src/module/area/entity/area.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = class Area { - constructor({ id, name }) { - this.id = id; - this.name = name; - } -}; diff --git a/src/module/area/mapper/areaMapper.js b/src/module/area/mapper/areaMapper.js deleted file mode 100644 index abd6558..0000000 --- a/src/module/area/mapper/areaMapper.js +++ /dev/null @@ -1,5 +0,0 @@ -const Area = require('../entity/area'); - -module.exports = function fromDataToEntity({ id, name }) { - return new Area({ id, name }); -}; diff --git a/src/module/area/module.js b/src/module/area/module.js deleted file mode 100644 index 7dd49ad..0000000 --- a/src/module/area/module.js +++ /dev/null @@ -1,24 +0,0 @@ -const AreaController = require('./controller/areaController'); -const AreaRepository = require('./repository/sqlite/areaRepository'); -const AreaService = require('./service/areaService'); -const AreaModel = require('./repository/sqlite/areaModel'); - -/** - * @param {import('express').Application} app - * @param {import('rsdi').IDIContainer} container - */ -function init(app, container) { - /** - * @type {AreaController} controller; - */ - const controller = container.get('AreaController'); - controller.configureRoutes(app); -} - -module.exports = { - init, - AreaController, - AreaService, - AreaRepository, - AreaModel, -}; diff --git a/src/module/area/repository/abstractAreaRepository.js b/src/module/area/repository/abstractAreaRepository.js deleted file mode 100644 index 82e95bf..0000000 --- a/src/module/area/repository/abstractAreaRepository.js +++ /dev/null @@ -1,35 +0,0 @@ -/* eslint-disable no-empty-function */ -/* eslint-disable no-unused-vars */ -const AbstractAreaRepositoryError = require('./error/abstractAreaRepositoryError'); - -module.exports = class AbstractClubRepository { - constructor() { - if (new.target === AbstractClubRepository) { - throw new AbstractAreaRepositoryError( - 'No se puede instanciar el repositorio de áreas abstracto.' - ); - } - } - - /** - * @param {import('../entity/area')} area - * @returns {Promise} - */ - async save(club) {} - - /** - * @param {Number} id - */ - async delete(id) {} - - /** - * @param {Number} id - * @returns {Promise} - */ - async getById(id) {} - - /** - * @returns {Promise>} - */ - async getAll() {} -}; diff --git a/src/module/area/repository/error/abstractAreaRepositoryError.js b/src/module/area/repository/error/abstractAreaRepositoryError.js deleted file mode 100644 index 4929a27..0000000 --- a/src/module/area/repository/error/abstractAreaRepositoryError.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = class AbstractAreaRepositoryError extends Error {}; diff --git a/src/module/area/repository/error/areaIdNotDefinedError.js b/src/module/area/repository/error/areaIdNotDefinedError.js deleted file mode 100644 index 58c3e8c..0000000 --- a/src/module/area/repository/error/areaIdNotDefinedError.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = class AreaIdNotDefinedError extends Error {}; diff --git a/src/module/area/repository/error/areaNotFoundError.js b/src/module/area/repository/error/areaNotFoundError.js deleted file mode 100644 index 993b9b3..0000000 --- a/src/module/area/repository/error/areaNotFoundError.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = class AreaNotFoundError extends Error {}; diff --git a/src/module/area/repository/sqlite/areaMapper.js b/src/module/area/repository/sqlite/areaMapper.js deleted file mode 100644 index cb9f176..0000000 --- a/src/module/area/repository/sqlite/areaMapper.js +++ /dev/null @@ -1,11 +0,0 @@ -const Area = require('../../entity/area'); - -module.exports = { - /** - * @param {import('./areaModel')} model - * @returns {import('../../entity/area')} - */ - fromModelToEntity(model) { - return new Area(model.toJSON()); - }, -}; diff --git a/src/module/area/repository/sqlite/areaModel.js b/src/module/area/repository/sqlite/areaModel.js deleted file mode 100644 index 1b99cb5..0000000 --- a/src/module/area/repository/sqlite/areaModel.js +++ /dev/null @@ -1,38 +0,0 @@ -const { Sequelize, Model, DataTypes } = require('sequelize'); - -module.exports = class AreaModel extends Model { - /** - * @param {import('sequelize').Sequelize} sequelizeInstance - * @returns {typeof AreaModel} - */ - static setup(sequelizeInstance) { - AreaModel.init( - { - id: { - type: DataTypes.INTEGER, - allowNull: false, - primaryKey: true, - autoIncrement: true, - unique: true, - }, - name: { - type: DataTypes.STRING, - }, - lastUpdated: { - type: DataTypes.DATE, - defaultValue: Sequelize.NOW, - }, - createdAt: { - type: DataTypes.DATE, - defaultValue: Sequelize.NOW, - }, - }, - { - sequelize: sequelizeInstance, - modelName: 'Area', - timestamps: false, - } - ); - return AreaModel; - } -}; diff --git a/src/module/area/repository/sqlite/areaRepository.js b/src/module/area/repository/sqlite/areaRepository.js deleted file mode 100644 index 612cb33..0000000 --- a/src/module/area/repository/sqlite/areaRepository.js +++ /dev/null @@ -1,62 +0,0 @@ -const { fromModelToEntity } = require('./areaMapper'); -const AbstractAreaRepository = require('../abstractAreaRepository'); -const AreaNotFoundError = require('../error/areaNotFoundError'); -const AreaIdNotDefinedError = require('../error/areaIdNotDefinedError'); - -module.exports = class AreaRepository extends AbstractAreaRepository { - /** - * @param {typeof import('./areaModel')} areaModel - */ - constructor(areaModel) { - super(); - this.areaModel = areaModel; - } - - /** - * @param {import('../../entity/area')} area - * @returns {Promise} - */ - async save(area) { - let areaModel; - if (!area.id) { - areaModel = await this.areaModel.create(area); - } else { - areaModel = await this.areaModel.build(area, { isNewRecord: false }).save(); - } - return fromModelToEntity(areaModel); - } - - /** - * @param {import('../../entity/area')} area - * @returns {Boolean} devuelve true si se borró algo, false si no se borró nada. - */ - async delete(area) { - if (!area || !area.id) { - throw new AreaIdNotDefinedError(); - } - - return Boolean(await this.areaModel.destroy({ where: { id: area.id } })); - } - - /** - * @param {Number} id - * @returns {Promise} - */ - async getById(id) { - const areaModel = await this.areaModel.findOne({ where: { id } }); - - if (!areaModel) { - throw new AreaNotFoundError(`No se encontró área con id ${id}`); - } - - return fromModelToEntity(areaModel); - } - - /** - * @return {Promise>} - */ - async getAll() { - const areas = await this.areaModel.findAll(); - return areas.map(fromModelToEntity); - } -}; diff --git a/src/module/area/service/areaService.js b/src/module/area/service/areaService.js deleted file mode 100644 index f74cb87..0000000 --- a/src/module/area/service/areaService.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * @typedef {import('../repository/abstractAreaRepository')} AbstractAreaRepository - */ - -const AreaNotDefinedError = require('./error/areaNotDefinedError'); -const AreaIdNotDefinedError = require('./error/areaIdNotDefinedError'); -const Area = require('../entity/area'); - -module.exports = class Service { - /** - * - * @param {AbstractAreaRepository} areaRepository - */ - constructor(areaRepository) { - this.areaRepository = areaRepository; - } - - /** - * @param {Area} area - */ - async save(area) { - if (area === undefined) { - throw new AreaNotDefinedError(); - } - - return this.areaRepository.save(area); - } - - /** - * @param {Area} area - */ - async delete(area) { - if (!(area instanceof Area)) { - throw new AreaNotDefinedError(); - } - - return this.areaRepository.delete(area); - } - - async getById(id) { - if (id === undefined) { - throw new AreaIdNotDefinedError(); - } - - return this.areaRepository.getById(id); - } - - async getAll() { - return this.areaRepository.getAll(); - } -}; diff --git a/src/module/area/service/error/areaIdNotDefinedError.js b/src/module/area/service/error/areaIdNotDefinedError.js deleted file mode 100644 index 58c3e8c..0000000 --- a/src/module/area/service/error/areaIdNotDefinedError.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = class AreaIdNotDefinedError extends Error {}; diff --git a/src/module/area/service/error/areaNotDefinedError.js b/src/module/area/service/error/areaNotDefinedError.js deleted file mode 100644 index 8bbbdf6..0000000 --- a/src/module/area/service/error/areaNotDefinedError.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = class AreaNotDefinedError extends Error {}; diff --git a/src/module/area/view/form.html b/src/module/area/view/form.html deleted file mode 100644 index bdb9d05..0000000 --- a/src/module/area/view/form.html +++ /dev/null @@ -1,34 +0,0 @@ -{% extends 'view/layout/base.html' %} - -{% block body %} -{% set area = data.area %} - -
-
-

- {{"Editando area ID: " + area.id if area.id else "Nuevo area"}} -

-
-
- Cancelar -
-
- -
- -
- - -
- -
- - - - -
-
- -
-
-{% endblock %} diff --git a/src/module/area/view/index.html b/src/module/area/view/index.html deleted file mode 100644 index 958ddfa..0000000 --- a/src/module/area/view/index.html +++ /dev/null @@ -1,73 +0,0 @@ -{% extends 'view/layout/base.html' %} - -{% block body %} -

Índice de áreas

- -{% for error in errors %} - -
- {{error}} -
-{% endfor %} - -{% for message in messages %} -
- {{message}} -
- -{% endfor %} - - -
- - - - - - - - - - - - - - - - {% for area in data.areas %} - - - - - - - - {% endfor %} - -
IDNombreEditarEliminar
- -
{{area.id}}{{area.name}} - editar - - - eliminar - -
-
-{% endblock %} - -{% block footerScripts %} - -{% endblock %} diff --git a/src/module/club/controller/__tests__/club.test.js b/src/module/club/controller/__tests__/club.test.js index ad4709d..abd8e1c 100644 --- a/src/module/club/controller/__tests__/club.test.js +++ b/src/module/club/controller/__tests__/club.test.js @@ -1,6 +1,5 @@ const ClubController = require('../clubController'); const Club = require('../../entity/club'); -const Area = require('../../../area/entity/area'); const serviceMock = { save: jest.fn(), @@ -23,34 +22,18 @@ test('Index renderea index.html', async () => { }); }); -test('Create muestra un error si no hay áreas en el sistema', async () => { - const mockRes = { redirect: jest.fn() }; - const mockReq = { session: {} }; - await controller.create(mockReq, mockRes); - expect(mockRes.redirect).toHaveBeenCalledTimes(1); - expect(mockReq.session.errors).toEqual(['Para crear un club, primero debe crear un área']); -}); - test('Create renderea form.html', async () => { const renderMock = jest.fn(); - const mockAreasData = [new Area({ id: 1, name: 'Argentina' })]; - serviceMock.getAll.mockImplementationOnce(() => mockAreasData); await controller.create({}, { render: renderMock }); expect(renderMock).toHaveBeenCalledTimes(1); - expect(renderMock).toHaveBeenCalledWith('club/view/form.html', { - data: { areas: mockAreasData }, - }); + expect(renderMock).toHaveBeenCalledWith('club/view/form.html'); }); test('Save llama al servicio con el body y redirecciona a /club', async () => { const redirectMock = jest.fn(); const FAKE_CREST_URL = 'ejemplo/escudo.png'; const bodyMock = new Club({ - Area: { - id: NaN, - name: undefined, - }, address: undefined, clubColors: undefined, crestUrl: 'ejemplo/escudo.png', diff --git a/src/module/club/controller/clubController.js b/src/module/club/controller/clubController.js index 074ab43..0354a55 100644 --- a/src/module/club/controller/clubController.js +++ b/src/module/club/controller/clubController.js @@ -5,14 +5,12 @@ const AbstractController = require('../../abstractController'); module.exports = class ClubController extends AbstractController { /** * @param {import('../service/clubService')} clubService - * @param {import('../../area/service/areaService')} areaService */ - constructor(uploadMiddleware, clubService, areaService) { + constructor(uploadMiddleware, clubService) { super(); this.ROUTE_BASE = '/club'; this.uploadMiddleware = uploadMiddleware; this.clubService = clubService; - this.areaService = areaService; } /** @@ -48,14 +46,7 @@ module.exports = class ClubController extends AbstractController { * @param {import('express').Response} res */ async create(req, res) { - const areas = await this.areaService.getAll(); - - if (areas.length > 0) { - res.render('club/view/form.html', { data: { areas } }); - } else { - req.session.errors = ['Para crear un club, primero debe crear un área']; - res.redirect(this.ROUTE_BASE); - } + res.render('club/view/form.html'); } /** @@ -70,8 +61,7 @@ module.exports = class ClubController extends AbstractController { try { const club = await this.clubService.getById(id); - const areas = await this.areaService.getAll(); - res.render('club/view/form.html', { data: { club, areas } }); + res.render('club/view/form.html', { data: { club } }); } catch (e) { req.session.errors = [e.message]; res.redirect('/club'); diff --git a/src/module/club/entity/club.js b/src/module/club/entity/club.js index 4049464..45b0b62 100644 --- a/src/module/club/entity/club.js +++ b/src/module/club/entity/club.js @@ -12,7 +12,6 @@ module.exports = class Club { founded, clubColors, venue, - Area, }) { this.id = id; this.name = name; @@ -26,9 +25,5 @@ module.exports = class Club { this.founded = founded; this.clubColors = clubColors; this.venue = venue; - /** - * @type {import('../../area/entity/area');} this.Area - */ - this.Area = Area; } }; diff --git a/src/module/club/mapper/clubMapper.js b/src/module/club/mapper/clubMapper.js index a4421de..7a02f4e 100644 --- a/src/module/club/mapper/clubMapper.js +++ b/src/module/club/mapper/clubMapper.js @@ -1,10 +1,4 @@ -// map from Controller to Entity -// map from Entity to Controller -// map from Entity to Model -// map from Model to Entity - const Club = require('../entity/club'); -const Area = require('../../area/entity/area'); /** * @@ -24,8 +18,6 @@ function fromDataToEntity({ founded, 'club-colors': clubColors, venue, - // eslint-disable-next-line camelcase - area_id, }) { return new Club({ id, @@ -40,7 +32,6 @@ function fromDataToEntity({ founded, clubColors, venue, - Area: new Area({ id: Number(area_id) }), }); } diff --git a/src/module/club/repository/json/clubRepository.js b/src/module/club/repository/json/clubRepository.js index 34803cb..2019eba 100644 --- a/src/module/club/repository/json/clubRepository.js +++ b/src/module/club/repository/json/clubRepository.js @@ -31,8 +31,14 @@ module.exports = class ClubRepository extends AbstractClubRepository { `No se pudo actualizar el club club con id ${club.id} porque no se encontró` ); } + + const oldClub = clubs[clubIndex]; clubs[clubIndex] = club; clubToSave = club; + + if (!club.crestUrl) { + clubs[clubIndex].crestUrl = oldClub.crestUrl; + } } else { clubToSave = { ...club, ...{ id: this.uuid() } }; clubs.push(clubToSave); diff --git a/src/module/club/service/error/clubIdNotDefinedError.js b/src/module/club/service/error/clubIdNotDefinedError.js index 58c3e8c..8d7bc4f 100644 --- a/src/module/club/service/error/clubIdNotDefinedError.js +++ b/src/module/club/service/error/clubIdNotDefinedError.js @@ -1 +1 @@ -module.exports = class AreaIdNotDefinedError extends Error {}; +module.exports = class ClubIdNotDefinedError extends Error {}; diff --git a/src/module/club/view/form.html b/src/module/club/view/form.html index 14c88da..4aadf4e 100644 --- a/src/module/club/view/form.html +++ b/src/module/club/view/form.html @@ -2,7 +2,6 @@ {% block body %} {% set club = data.club %} -{% set areas = data.areas %}
@@ -63,23 +62,6 @@

-
- -
-
- -
- - - -
-
-
diff --git a/src/module/view/layout/base.html b/src/module/view/layout/base.html index b20b2b7..738dffa 100644 --- a/src/module/view/layout/base.html +++ b/src/module/view/layout/base.html @@ -45,21 +45,6 @@

CRUD Clubes

- - From 6e8b03f3f3a9394926bec44bb0f38369c041d211 Mon Sep 17 00:00:00 2001 From: Fabricio Leonardo Sodano Pascazi Date: Thu, 6 Aug 2020 08:44:10 +1000 Subject: [PATCH 03/10] =?UTF-8?q?Arregla=20documentaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 5ecdb2a..0b025b2 100644 --- a/README.md +++ b/README.md @@ -29,9 +29,7 @@ Adaptado de https://softwareontheroad.com/ideal-nodejs-project-structure/ | Ruta | explicación | | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | -| data | contiene las bases de datos de SQLite | -| data/database.db | base de datos principal del proyecto | -| data/session.db | base de datos para guardar las sesiones de nuestro proyecto | +| proyecto | | public | contiene los archivos estáticos que va a servir el navegador, acá se guardan las imágenes subidas | | src | contiene toda nuestra aplicación | | src/app.js | punto de entrada de nuestra aplicación | From 5f29a4e5b0e1dc8b30d79fa6640b33ed0491137f Mon Sep 17 00:00:00 2001 From: Fabricio Leonardo Sodano Pascazi Date: Thu, 6 Aug 2020 08:44:24 +1000 Subject: [PATCH 04/10] =?UTF-8?q?Arregla=20documentaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 0b025b2..58228d3 100644 --- a/README.md +++ b/README.md @@ -50,10 +50,6 @@ Adaptado de https://softwareontheroad.com/ideal-nodejs-project-structure/ | src/module/club/view | archivos de presentación (interfaz) que se procesarán del lado del servidor (SSR, server side rendering) | | src/module/club/module.js | archivo de entrada a este módulo que lo inicializa | -## Creando modelos nuevos - -Si se crea un modelo de Sequelize nuevo, recordar cargarlo en el archivo `src/cli/init.db.js` para que la sincronización de la base de datos incluya el nuevo modelo. - ## Configuración del IDE El IDE debe soportar Prettier + ESLint, como por ejemplo (vscode)[https://blog.echobind.com/integrating-prettier-eslint-airbnb-style-guide-in-vscode-47f07b5d7d6a] From 02372d905e848426bec29f84c84d1ddb5ad33461 Mon Sep 17 00:00:00 2001 From: Fabricio Leonardo Sodano Pascazi Date: Thu, 6 Aug 2020 08:45:00 +1000 Subject: [PATCH 05/10] =?UTF-8?q?Arregla=20documentaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 58228d3..2619a22 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,6 @@ Adaptado de https://softwareontheroad.com/ideal-nodejs-project-structure/ | Ruta | explicación | | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | -| proyecto | | public | contiene los archivos estáticos que va a servir el navegador, acá se guardan las imágenes subidas | | src | contiene toda nuestra aplicación | | src/app.js | punto de entrada de nuestra aplicación | From c6ac518f3e24ff0c0c32f52861bda27d83689a82 Mon Sep 17 00:00:00 2001 From: Fabricio Leonardo Sodano Pascazi Date: Fri, 7 Aug 2020 20:17:09 +1000 Subject: [PATCH 06/10] 100% code coverage --- .../club/controller/__tests__/club.test.js | 112 +++++++++++++++++- src/module/club/controller/clubController.js | 6 +- 2 files changed, 113 insertions(+), 5 deletions(-) diff --git a/src/module/club/controller/__tests__/club.test.js b/src/module/club/controller/__tests__/club.test.js index abd8e1c..f1c7c78 100644 --- a/src/module/club/controller/__tests__/club.test.js +++ b/src/module/club/controller/__tests__/club.test.js @@ -1,13 +1,17 @@ const ClubController = require('../clubController'); const Club = require('../../entity/club'); +const ClubIdNotDefinedError = require('../error/clubIdNotDefinedError'); +const uploadMiddleware = { + single: jest.fn(), +}; const serviceMock = { save: jest.fn(), delete: jest.fn(() => Promise.resolve(true)), getById: jest.fn(() => Promise.resolve({})), getAll: jest.fn(() => Promise.resolve([])), }; -const controller = new ClubController({}, serviceMock, serviceMock); +const controller = new ClubController(uploadMiddleware, serviceMock); test('Index renderea index.html', async () => { const renderMock = jest.fn(); @@ -30,7 +34,7 @@ test('Create renderea form.html', async () => { expect(renderMock).toHaveBeenCalledWith('club/view/form.html'); }); -test('Save llama al servicio con el body y redirecciona a /club', async () => { +test('Save edita un club cuando hay un id presente', async () => { const redirectMock = jest.fn(); const FAKE_CREST_URL = 'ejemplo/escudo.png'; const bodyMock = new Club({ @@ -59,6 +63,35 @@ test('Save llama al servicio con el body y redirecciona a /club', async () => { expect(redirectMock).toHaveBeenCalledWith('/club'); }); +test('Save crea un club cuando no hay id', async () => { + serviceMock.save.mockReset(); + const redirectMock = jest.fn(); + const FAKE_CREST_URL = 'ejemplo/escudo.png'; + const bodyMock = new Club({ + address: undefined, + clubColors: undefined, + crestUrl: 'ejemplo/escudo.png', + email: undefined, + founded: undefined, + name: undefined, + phone: undefined, + shortName: undefined, + tla: undefined, + venue: undefined, + website: undefined, + }); + + await controller.save( + { body: bodyMock, file: { path: FAKE_CREST_URL }, session: {} }, + { redirect: redirectMock } + ); + + expect(serviceMock.save).toHaveBeenCalledTimes(1); + expect(serviceMock.save).toHaveBeenCalledWith(bodyMock); + expect(redirectMock).toHaveBeenCalledTimes(1); + expect(redirectMock).toHaveBeenCalledWith('/club'); +}); + test('Delete llama al servicio con el id del body y redirecciona a /club', async () => { const FAKE_CLUB = new Club({ id: 1 }); serviceMock.getById.mockImplementationOnce(() => Promise.resolve(FAKE_CLUB)); @@ -71,3 +104,78 @@ test('Delete llama al servicio con el id del body y redirecciona a /club', async expect(redirectMock).toHaveBeenCalledTimes(1); expect(redirectMock).toHaveBeenCalledWith('/club'); }); + +test('Configura las rutas adecuadas', () => { + const app = { + get: jest.fn(), + post: jest.fn(), + }; + controller.configureRoutes(app); +}); + +test('View sin id da un error', async () => { + expect(controller.view({ params: {} })).rejects.toThrowError(ClubIdNotDefinedError); +}); + +test('View obtiene el id del club y lo renderea', async () => { + const MOCK_ID = 1; + const renderMock = jest.fn(); + serviceMock.getById.mockImplementationOnce(() => { + return {}; + }); + await controller.view({ params: { id: MOCK_ID } }, { render: renderMock }); + expect(serviceMock.getById).toHaveBeenCalledWith(MOCK_ID); + expect(renderMock).toHaveBeenCalledWith('club/view/form.html', { data: { club: {} } }); +}); + +test('View, cuando hay alguna excepción, seta errores en la sesión y redirecciona a club', async () => { + serviceMock.getById.mockImplementationOnce(() => { + throw Error('ejemplo'); + }); + + const redirectMock = jest.fn(); + const req = { params: { id: 1 }, session: { errors: {} } }; + await controller.view(req, { redirect: redirectMock }); + + expect(redirectMock).toHaveBeenCalledTimes(1); + expect(req.session.errors).not.toEqual([]); +}); + +test('Save, cuando hay alguna excepción, setea errores en la sesión y redirecciona a club', async () => { + serviceMock.getById.mockImplementationOnce(() => { + throw Error('ejemplo'); + }); + + const redirectMock = jest.fn(); + const req = { params: { id: 1 }, session: { errors: {} } }; + await controller.save(req, { redirect: redirectMock }); + + expect(redirectMock).toHaveBeenCalledTimes(1); + expect(req.session.errors).not.toEqual([]); +}); + +test('Save, cuando hay alguna excepción, setea errores en la sesión y redirecciona a club', async () => { + serviceMock.save.mockImplementationOnce(() => { + throw Error('ejemplo'); + }); + + const redirectMock = jest.fn(); + const req = { params: { id: 1 }, session: { errors: {} } }; + await controller.save(req, { redirect: redirectMock }); + + expect(redirectMock).toHaveBeenCalledTimes(1); + expect(req.session.errors).not.toEqual([]); +}); + +test('Delete, cuando hay alguna excepción, setea errores en la sesión y redirecciona a club', async () => { + serviceMock.delete.mockImplementationOnce(() => { + throw Error('ejemplo'); + }); + + const redirectMock = jest.fn(); + const req = { params: { id: 1 }, session: { errors: {} } }; + await controller.delete(req, { redirect: redirectMock }); + + expect(redirectMock).toHaveBeenCalledTimes(1); + expect(req.session.errors).not.toEqual([]); +}); diff --git a/src/module/club/controller/clubController.js b/src/module/club/controller/clubController.js index 0354a55..3d5a9e3 100644 --- a/src/module/club/controller/clubController.js +++ b/src/module/club/controller/clubController.js @@ -63,7 +63,7 @@ module.exports = class ClubController extends AbstractController { const club = await this.clubService.getById(id); res.render('club/view/form.html', { data: { club } }); } catch (e) { - req.session.errors = [e.message]; + req.session.errors = [e.message, e.stack]; res.redirect('/club'); } } @@ -87,7 +87,7 @@ module.exports = class ClubController extends AbstractController { } res.redirect('/club'); } catch (e) { - req.session.errors = [e.message, e.name, e.stack]; + req.session.errors = [e.message, e.stack]; res.redirect('/club'); } } @@ -103,7 +103,7 @@ module.exports = class ClubController extends AbstractController { await this.clubService.delete(club); req.session.messages = [`Se eliminó el club ID: ${id} (${club.name})`]; } catch (e) { - req.session.errors = [e.message, e.type, e.stack]; + req.session.errors = [e.message, e.stack]; } res.redirect('/club'); } From c8a76c376acb6b096b2069da5f5e118e75b85591 Mon Sep 17 00:00:00 2001 From: Fabricio Leonardo Sodano Pascazi Date: Fri, 7 Aug 2020 20:19:42 +1000 Subject: [PATCH 07/10] Actualiza diagrama --- README.md | 2 ++ clubes_crud.jpg | Bin 142031 -> 0 bytes crud_clubes_simple.png | Bin 0 -> 126438 bytes 3 files changed, 2 insertions(+) delete mode 100644 clubes_crud.jpg create mode 100644 crud_clubes_simple.png diff --git a/README.md b/README.md index 2619a22..dfd7367 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ Un CRUD/ABM (Create, Retrieve, Update, Delete ó Alta, Baja, Modificación) de c ## Diagrama + + ## Cómo instalar y correr este proyecto El proyecto se instala con `npm install` diff --git a/clubes_crud.jpg b/clubes_crud.jpg deleted file mode 100644 index aa0b1d61b6eb4e13acd3ded83d509481193e9f02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142031 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�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 P3jz1WA}6W1zmESe4v9bZ diff --git a/crud_clubes_simple.png b/crud_clubes_simple.png new file mode 100644 index 0000000000000000000000000000000000000000..6e3b649522e378a464ebbdbc65e27acee9b52891 GIT binary patch literal 126438 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 literal 0 HcmV?d00001 From c1f150032b56e1d056cf8e6afb88c8b7821e2f8a Mon Sep 17 00:00:00 2001 From: Fabricio Leonardo Sodano Pascazi Date: Sun, 16 Aug 2020 22:22:07 +1000 Subject: [PATCH 08/10] Reemplaza la base de datos de JSON por SQLite --- package-lock.json | 801 +++++++----------- package.json | 5 +- src/config/di.js | 19 +- src/config/setup.sql | 17 + src/module/club/mapper/clubMapper.js | 36 + src/module/club/module.js | 2 +- .../club/repository/json/clubRepository.js | 108 --- .../club/repository/sqlite/clubRepository.js | 164 ++++ 8 files changed, 529 insertions(+), 623 deletions(-) create mode 100644 src/config/setup.sql delete mode 100644 src/module/club/repository/json/clubRepository.js create mode 100644 src/module/club/repository/sqlite/clubRepository.js diff --git a/package-lock.json b/package-lock.json index 03b584d..d6a30dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1140,7 +1140,8 @@ "@types/node": { "version": "14.0.14", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.14.tgz", - "integrity": "sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==" + "integrity": "sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==", + "dev": true }, "@types/normalize-package-data": { "version": "2.4.0", @@ -1236,7 +1237,8 @@ "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "accepts": { "version": "1.3.7", @@ -1279,6 +1281,7 @@ "version": "6.12.3", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", + "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1352,11 +1355,6 @@ "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", "dev": true }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" - }, "anymatch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", @@ -1418,11 +1416,6 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=" - }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -1464,6 +1457,7 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, "requires": { "safer-buffer": "~2.1.0" } @@ -1471,7 +1465,8 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true }, "assign-symbols": { "version": "1.0.0", @@ -1494,7 +1489,8 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true }, "atob": { "version": "2.1.2", @@ -1502,23 +1498,17 @@ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, - "available-typed-arrays": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", - "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", - "requires": { - "array-filter": "^1.0.0" - } - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true }, "aws4": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" + "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", + "dev": true }, "axios": { "version": "0.19.2", @@ -1638,7 +1628,8 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "base": { "version": "0.11.2", @@ -1695,26 +1686,63 @@ } } }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, "requires": { "tweetnacl": "^0.14.3" } }, + "better-sqlite3": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-7.1.0.tgz", + "integrity": "sha512-FV/snQ8F/kyqhdxsevzbojVtMowDWOfe1A5N3lYu1KJwoho2t7JgITmdlSc7DkOh3Zq65I+ZyeNWXQrkLEDFTg==", + "requires": { + "bindings": "^1.5.0", + "prebuild-install": "^5.3.3", + "tar": "4.4.10" + } + }, "binary-extensions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "optional": true, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "requires": { - "inherits": "~2.0.0" + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", + "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "bluebird": { @@ -1849,6 +1877,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1877,6 +1906,15 @@ "node-int64": "^0.4.0" } }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -2004,7 +2042,8 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true }, "chalk": { "version": "2.4.2", @@ -2319,6 +2358,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -2344,7 +2384,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { "version": "1.6.2", @@ -2377,15 +2418,6 @@ "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==", "dev": true }, - "connect-session-sequelize": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/connect-session-sequelize/-/connect-session-sequelize-7.0.1.tgz", - "integrity": "sha512-EDsHbhewpVigA+ZQtCKSNAnLmSp2/Nm6gUXmxUPzU7uAIbqThcZeDBO94GHimJvLN4UBe49yxeuZ9uFfGuXpzw==", - "requires": { - "debug": "^4.1.1", - "deep-equal": "^2.0.3" - } - }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -2546,6 +2578,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -2571,6 +2604,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, "requires": { "ms": "^2.1.1" } @@ -2593,32 +2627,12 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, - "deep-equal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.3.tgz", - "integrity": "sha512-Spqdl4H+ky45I9ByyJtXteOm9CaIrPmnIPmOhrkKGNYWeDgCvJ8jNYVCTjChxW4FqGuZnLHADc8EKRMX6+CgvA==", + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", "requires": { - "es-abstract": "^1.17.5", - "es-get-iterator": "^1.1.0", - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.2", - "is-regex": "^1.0.5", - "isarray": "^2.0.5", - "object-is": "^1.1.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.2", - "which-boxed-primitive": "^1.0.1", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.2" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - } + "mimic-response": "^2.0.0" } }, "deep-extend": { @@ -2648,6 +2662,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, "requires": { "object-keys": "^1.0.12" } @@ -2696,7 +2711,8 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true }, "delegates": { "version": "1.0.0", @@ -2802,11 +2818,6 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" }, - "dottie": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", - "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" - }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", @@ -2817,6 +2828,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -2848,7 +2860,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "requires": { "once": "^1.4.0" } @@ -2866,6 +2877,7 @@ "version": "1.17.6", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -2880,31 +2892,11 @@ "string.prototype.trimstart": "^1.0.1" } }, - "es-get-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", - "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", - "requires": { - "es-abstract": "^1.17.4", - "has-symbols": "^1.0.1", - "is-arguments": "^1.0.4", - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - } - } - }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -3589,6 +3581,11 @@ } } }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, "expect": { "version": "26.1.0", "resolved": "https://registry.npmjs.org/expect/-/expect-26.1.0.tgz", @@ -3735,7 +3732,8 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "extend-shallow": { "version": "3.0.2", @@ -3877,12 +3875,14 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true }, "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==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "fast-diff": { "version": "1.2.0", @@ -3893,7 +3893,8 @@ "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==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", @@ -3938,6 +3939,11 @@ "flat-cache": "^2.0.1" } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -4042,20 +4048,17 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -4081,6 +4084,11 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -4103,7 +4111,8 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "2.1.3", @@ -4111,22 +4120,11 @@ "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", "optional": true }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "optional": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "functional-red-black-tree": { "version": "1.0.1", @@ -4221,14 +4219,21 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, "requires": { "assert-plus": "^1.0.0" } }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4300,7 +4305,8 @@ "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true }, "growly": { "version": "1.3.0", @@ -4312,12 +4318,14 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true }, "har-validator": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, "requires": { "ajv": "^6.5.5", "har-schema": "^2.0.0" @@ -4327,6 +4335,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -4349,7 +4358,8 @@ "has-symbols": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true }, "has-unicode": { "version": "2.0.1", @@ -4464,6 +4474,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -4484,6 +4495,11 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -4496,14 +4512,6 @@ "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", "dev": true }, - "ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", - "requires": { - "minimatch": "^3.0.4" - } - }, "import-fresh": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", @@ -4550,15 +4558,11 @@ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", "dev": true }, - "inflection": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", - "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=" - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -4753,22 +4757,12 @@ } } }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.0.tgz", - "integrity": "sha512-t5mGUXC/xRheCK431ylNiSkGGpBp8bHENBcENTkDT6ppwPzEVxNGZRvgvmOEfbWkFhA7D2GEuE2mmQTr78sl2g==" - }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -4777,11 +4771,6 @@ "binary-extensions": "^2.0.0" } }, - "is-boolean-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.1.tgz", - "integrity": "sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==" - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -4791,7 +4780,8 @@ "is-callable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true }, "is-ci": { "version": "2.0.0", @@ -4825,7 +4815,8 @@ "is-date-object": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true }, "is-descriptor": { "version": "0.1.6", @@ -4893,11 +4884,6 @@ "is-path-inside": "^3.0.1" } }, - "is-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", - "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==" - }, "is-npm": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", @@ -4909,11 +4895,6 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, - "is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==" - }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", @@ -4960,15 +4941,11 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "dev": true, "requires": { "has-symbols": "^1.0.1" } }, - "is-set": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", - "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==" - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -4978,41 +4955,23 @@ "is-string": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true }, "is-symbol": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, "requires": { "has-symbols": "^1.0.1" } }, - "is-typed-array": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.3.tgz", - "integrity": "sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ==", - "requires": { - "available-typed-arrays": "^1.0.0", - "es-abstract": "^1.17.4", - "foreach": "^2.0.5", - "has-symbols": "^1.0.1" - } - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==" - }, - "is-weakset": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", - "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "is-windows": { "version": "1.0.2", @@ -5044,7 +5003,8 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "isobject": { "version": "3.0.1", @@ -5055,7 +5015,8 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true }, "istanbul-lib-coverage": { "version": "3.0.0", @@ -6201,7 +6162,8 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true }, "jsdom": { "version": "16.3.0", @@ -6271,12 +6233,14 @@ "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true }, "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==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -6287,7 +6251,8 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true }, "json5": { "version": "2.1.3", @@ -6311,6 +6276,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -6537,7 +6503,8 @@ "lodash": { "version": "4.17.19", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true }, "lodash.once": { "version": "4.1.1", @@ -6703,10 +6670,16 @@ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -6762,23 +6735,22 @@ "minimist": "^1.2.5" } }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "moment": { "version": "2.26.0", "resolved": "https://registry.npmjs.org/moment/-/moment-2.26.0.tgz", - "integrity": "sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw==" - }, - "moment-timezone": { - "version": "0.5.31", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.31.tgz", - "integrity": "sha512-+GgHNg8xRhMXfEbv81iDtrVeTcWt0kWmTEY1XQK14dICTXnWJnT0dxdlPspwqF3keKMVPXwayEsk1DI0AA/jdA==", - "requires": { - "moment": ">= 2.9.0" - } + "integrity": "sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw==", + "dev": true }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "multer": { "version": "1.4.2", @@ -6820,32 +6792,17 @@ "to-regex": "^3.0.1" } }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "needle": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.0.tgz", - "integrity": "sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA==", - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -6857,57 +6814,12 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "node-addon-api": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz", - "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA==" - }, - "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "optional": true, + "node-abi": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.18.0.tgz", + "integrity": "sha512-yi05ZoiuNNEbyT/xXfSySZE+yVnQW6fxPZuFbLyS1s6b5Kw3HzV2PHOM4XR+nsjzkHxByK+2Wg+yCQbe35l8dw==", "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "optional": true, - "requires": { - "abbrev": "1" - } - }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "optional": true - }, - "tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", - "optional": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" - } - } + "semver": "^5.4.1" } }, "node-int64": { @@ -6963,34 +6875,6 @@ } } }, - "node-pre-gyp": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", - "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - }, - "dependencies": { - "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - } - } - }, "nodemon": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.4.tgz", @@ -7029,6 +6913,11 @@ } } }, + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" + }, "nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", @@ -7061,29 +6950,6 @@ "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", "dev": true }, - "npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" - }, - "npm-packlist": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -7136,7 +7002,8 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true }, "object-assign": { "version": "4.1.1", @@ -7177,21 +7044,14 @@ "object-inspect": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" - }, - "object-is": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", - "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true }, "object-visit": { "version": "1.0.1", @@ -7206,6 +7066,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, "requires": { "define-properties": "^1.1.2", "function-bind": "^1.1.1", @@ -7286,24 +7147,11 @@ "word-wrap": "~1.2.3" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true }, "ospath": { "version": "1.2.2", @@ -7426,7 +7274,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-key": { "version": "2.0.1", @@ -7463,7 +7312,8 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true }, "picomatch": { "version": "2.2.2", @@ -7500,6 +7350,28 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, + "prebuild-install": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.5.tgz", + "integrity": "sha512-YmMO7dph9CYKi5IR/BzjOJlRzpxGGVo1EsLSUZ0mt/Mq0HWZIHOKHHcHdT69yG54C9m6i45GpItwRHpk0Py7Uw==", + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp": "^0.5.1", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + } + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -7611,7 +7483,8 @@ "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true }, "pstree.remy": { "version": "1.1.8", @@ -7623,7 +7496,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -7632,7 +7504,8 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true }, "pupa": { "version": "2.0.1", @@ -7646,7 +7519,8 @@ "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true }, "querystring": { "version": "0.2.0", @@ -7768,15 +7642,6 @@ "safe-regex": "^1.1.0" } }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, "regexpp": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", @@ -7823,6 +7688,7 @@ "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -7849,7 +7715,8 @@ "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true } } }, @@ -7949,18 +7816,11 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, - "retry-as-promised": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-3.2.0.tgz", - "integrity": "sha512-CybGs60B7oYU/qSQ6kuaFmRd9sTZ6oXSc0toqePvV74Ac6/IFZSI1ReFQmtCN+uvW1Mtqdwpvt/LGOiCBAY2Mg==", - "requires": { - "any-promise": "^1.3.0" - } - }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -8151,11 +8011,6 @@ } } }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, "saxes": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", @@ -8229,43 +8084,6 @@ } } }, - "sequelize": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.3.3.tgz", - "integrity": "sha512-WO/b1ehjSFKlBCHzwZoaPhoW3WyXXy9x74yPrOP8NpE67wzbv0dIucDO4a+THLVyl3lnv3nFMZdJRdkUgb/ZAw==", - "requires": { - "debug": "^4.1.1", - "dottie": "^2.0.0", - "inflection": "1.12.0", - "lodash": "^4.17.15", - "moment": "^2.26.0", - "moment-timezone": "^0.5.31", - "retry-as-promised": "^3.2.0", - "semver": "^7.3.2", - "sequelize-pool": "^6.0.0", - "toposort-class": "^1.0.1", - "uuid": "^8.1.0", - "validator": "^10.11.0", - "wkx": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - }, - "uuid": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.2.0.tgz", - "integrity": "sha512-CYpGiFTUrmI6OBMkAdjSDM0k5h8SkkiTP4WAjQgDgNB1S3Ou9VBEvr6q0Kv2H1mMk7IWfxYGpMH5sd5AvcIV2Q==" - } - } - }, - "sequelize-pool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-6.1.0.tgz", - "integrity": "sha512-4YwEw3ZgK/tY/so+GfnSgXkdwIJJ1I32uZJztIEgZeAO6HMgj64OzySbWLgxj+tXhZCJnzRfkY9gINw8Ft8ZMg==" - }, "serve-static": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", @@ -8332,20 +8150,26 @@ "dev": true, "optional": true }, - "side-channel": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", - "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", - "requires": { - "es-abstract": "^1.17.0-next.1", - "object-inspect": "^1.7.0" - } - }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -8574,20 +8398,11 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sqlite3": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.0.tgz", - "integrity": "sha512-rjvqHFUaSGnzxDy2AHCwhHy6Zp6MNJzCPGYju4kD8yi6bze4d1/zMTg6C7JI49b7/EM7jKMTvyfN/4ylBKdwfw==", - "requires": { - "node-addon-api": "2.0.0", - "node-gyp": "3.x", - "node-pre-gyp": "^0.11.0" - } - }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -8709,6 +8524,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" @@ -8718,6 +8534,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" @@ -8896,6 +8713,41 @@ "yallist": "^3.0.3" } }, + "tar-fs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", + "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + } + }, + "tar-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.3.tgz", + "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", + "requires": { + "bl": "^4.0.1", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "term-size": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", @@ -9036,11 +8888,6 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, - "toposort-class": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", - "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" - }, "touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", @@ -9054,6 +8901,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -9123,7 +8971,8 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true }, "type-check": { "version": "0.3.2", @@ -9343,6 +9192,7 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, "requires": { "punycode": "^2.1.0" } @@ -9396,11 +9246,6 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, - "uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==" - }, "v8-compile-cache": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", @@ -9436,11 +9281,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "validator": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", - "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -9450,6 +9290,7 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -9527,51 +9368,21 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "requires": { "isexe": "^2.0.0" } }, - "which-boxed-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.1.tgz", - "integrity": "sha512-7BT4TwISdDGBgaemWU0N0OU7FeAEJ9Oo2P1PHRm/FCWoEi2VLWC9b6xvxAA3C/NMpxg3HXVgi0sMmGbNUbNepQ==", - "requires": { - "is-bigint": "^1.0.0", - "is-boolean-object": "^1.0.0", - "is-number-object": "^1.0.3", - "is-string": "^1.0.4", - "is-symbol": "^1.0.2" - } - }, - "which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - } - }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "which-typed-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.2.tgz", - "integrity": "sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ==", - "requires": { - "available-typed-arrays": "^1.0.2", - "es-abstract": "^1.17.5", - "foreach": "^2.0.5", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.1", - "is-typed-array": "^1.1.3" - } + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" }, "wide-align": { "version": "1.1.3", @@ -9624,14 +9435,6 @@ } } }, - "wkx": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", - "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", - "requires": { - "@types/node": "*" - } - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", diff --git a/package.json b/package.json index 74f4ff3..36aae5e 100644 --- a/package.json +++ b/package.json @@ -34,13 +34,12 @@ }, "dependencies": { "axios": "^0.19.2", + "better-sqlite3": "^7.1.0", "dotenv": "^8.2.0", "express": "^4.17.1", "express-session": "^1.17.1", "multer": "^1.4.2", "nunjucks": "^3.2.1", - "rsdi": "^1.0.5", - "sequelize": "^6.3.3", - "uuid": "^8.3.0" + "rsdi": "^1.0.5" } } diff --git a/src/config/di.js b/src/config/di.js index 3c8caef..d675adc 100644 --- a/src/config/di.js +++ b/src/config/di.js @@ -1,15 +1,16 @@ // configure DI container const path = require('path'); -const uuid = require('uuid'); -const fs = require('fs'); const { default: DIContainer, object, get, factory } = require('rsdi'); const multer = require('multer'); +const Sqlite3Database = require('better-sqlite3'); const session = require('express-session'); const { ClubController, ClubService, ClubRepository } = require('../module/club/module'); -function configureMainJSONDatabase() { - return process.env.JSON_DB_PATH; +function configureMainDatabaseAdapter() { + return new Sqlite3Database(process.env.DB_PATH, { + verbose: console.log, + }); } function configureSession() { @@ -39,18 +40,12 @@ function configureMulter() { return multer({ storage }); } -function configureUuid() { - return uuid.v4; -} - /** * @param {DIContainer} container */ function addCommonDefinitions(container) { container.addDefinitions({ - fs, - uuid: factory(configureUuid), - JSONDatabase: factory(configureMainJSONDatabase), + MainDatabaseAdapter: factory(configureMainDatabaseAdapter), Session: factory(configureSession), Multer: factory(configureMulter), }); @@ -63,7 +58,7 @@ function addClubModuleDefinitions(container) { container.addDefinitions({ ClubController: object(ClubController).construct(get('Multer'), get('ClubService')), ClubService: object(ClubService).construct(get('ClubRepository')), - ClubRepository: object(ClubRepository).construct(get('uuid'), get('fs'), get('JSONDatabase')), + ClubRepository: object(ClubRepository).construct(get('MainDatabaseAdapter')), }); } diff --git a/src/config/setup.sql b/src/config/setup.sql new file mode 100644 index 0000000..3952cf7 --- /dev/null +++ b/src/config/setup.sql @@ -0,0 +1,17 @@ +DROP TABLE IF EXISTS clubes; +CREATE TABLE clubes ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + `name` TEXT NOT NULL, + short_name TEXT NOT NULL, + tla TEXT NOT NULL, + crest_url TEXT NOT NULL, + `address` TEXT NOT NULL, + phone TEXT NOT NULL, + website TEXT NOT NULL, + email TEXT NOT NULL, + founded TEXT NOT NULL, + club_colors TEXT NOT NULL, + venue TEXT NOT NULL, + created_at DATE DEFAULT (datetime('now', 'localtime')) NOT NULL, + updated_at DATE DEFAULT (datetime('now', 'localtime')) NOT NULL +); diff --git a/src/module/club/mapper/clubMapper.js b/src/module/club/mapper/clubMapper.js index 7a02f4e..88b09ce 100644 --- a/src/module/club/mapper/clubMapper.js +++ b/src/module/club/mapper/clubMapper.js @@ -35,6 +35,42 @@ function fromDataToEntity({ }); } +/** + * + * @param {Object} formData + * @returns Club + */ +function fromDbToEntity({ + id, + name, + short_name: shortName, + tla, + crest_url: crestUrl, + address, + phone, + website, + email, + founded, + club_colors: clubColors, + venue, +}) { + return new Club({ + id, + name, + shortName, + tla, + crestUrl, + address, + phone, + website, + email, + founded, + clubColors, + venue, + }); +} + module.exports = { fromDataToEntity, + fromDbToEntity, }; diff --git a/src/module/club/module.js b/src/module/club/module.js index 0ed620f..548c6af 100644 --- a/src/module/club/module.js +++ b/src/module/club/module.js @@ -1,5 +1,5 @@ const ClubController = require('./controller/clubController'); -const ClubRepository = require('./repository/json/clubRepository'); +const ClubRepository = require('./repository/sqlite/clubRepository'); const ClubService = require('./service/clubService'); /** diff --git a/src/module/club/repository/json/clubRepository.js b/src/module/club/repository/json/clubRepository.js deleted file mode 100644 index 2019eba..0000000 --- a/src/module/club/repository/json/clubRepository.js +++ /dev/null @@ -1,108 +0,0 @@ -const AbstractClubRepository = require('../abstractClubRepository'); -const ClubNotFoundError = require('../error/clubNotFoundError'); -const ClubIdNotDefinedError = require('../error/clubIdNotDefinedError'); -const Club = require('../../entity/club'); - -module.exports = class ClubRepository extends AbstractClubRepository { - /** - * @param {import('uuid/v4')} uuid - * @param {import('fs')} fileSystem - * @param {String} dbFilePath - */ - constructor(uuid, fileSystem, dbFilePath) { - super(); - this.uuid = uuid; - this.fileSystem = fileSystem; - this.dbFilePath = dbFilePath; - } - - /** - * @param {import('../../entity/club')} club - * @returns {Promise} - */ - async save(club) { - const clubs = await this.getData(); - let clubToSave; - - if (club.id) { - const clubIndex = clubs.findIndex((tmpClub) => tmpClub.id === club.id); - if (clubIndex === -1) { - throw new ClubNotFoundError( - `No se pudo actualizar el club club con id ${club.id} porque no se encontró` - ); - } - - const oldClub = clubs[clubIndex]; - clubs[clubIndex] = club; - clubToSave = club; - - if (!club.crestUrl) { - clubs[clubIndex].crestUrl = oldClub.crestUrl; - } - } else { - clubToSave = { ...club, ...{ id: this.uuid() } }; - clubs.push(clubToSave); - } - - this.saveData(clubs); - return new Club(clubToSave); - } - - /** - * @param {import('../../entity/club')} club - * @returns {Boolean} devuelve true si se borró algo, false si no se borró nada. - */ - async delete(club) { - if (!club || !club.id) { - throw new ClubIdNotDefinedError('El ID del club no está definido'); - } - - const clubs = this.getData(); - const clubIndex = clubs.findIndex((tmpClub) => tmpClub.id === club.id); - clubs.splice(clubIndex, 1); - - this.saveData(clubs); - - return true; - } - - /** - * @param {Number} id - * @returns {Promise} - */ - async getById(id) { - const clubs = this.getData(); - - const club = clubs.find((tmpClub) => tmpClub.id === id); - if (!club) { - throw new ClubNotFoundError(`No se encontró club con id ${id}`); - } - - return new Club(club); - } - - /** - * @return {Promise>} - */ - async getAll() { - return this.getData().map((clubData) => new Club(clubData)); - } - - /** - * @returns {Array} + */ + getAll() { + const clubes = this.databaseAdapter + .prepare( + `SELECT + id, + name, + short_name, + tla, + crest_url, + address, + phone, + website, + email, + founded, + club_colors, + venue + FROM clubes` + ) + .all(); + return clubes.map((clubData) => fromDbToEntity(clubData)); + } +}; From 27674481371f3d1bade6125e65a0e6a722a4fc62 Mon Sep 17 00:00:00 2001 From: Fabricio Leonardo Sodano Pascazi Date: Fri, 21 Aug 2020 07:50:05 +1000 Subject: [PATCH 09/10] Tests unitarios para el repositorio abstracto --- .../__tests__/abstractClubRepository.test.js | 13 ++ .../club/repository/abstractClubRepository.js | 17 +- .../error/methodNotImplementedError.js | 1 + .../sqlite/__tests__/clubRepository.test.js | 200 ++++++++++++++++++ 4 files changed, 227 insertions(+), 4 deletions(-) create mode 100644 src/module/club/repository/error/methodNotImplementedError.js create mode 100644 src/module/club/repository/sqlite/__tests__/clubRepository.test.js diff --git a/src/module/club/repository/__tests__/abstractClubRepository.test.js b/src/module/club/repository/__tests__/abstractClubRepository.test.js index ebb7313..dca344b 100644 --- a/src/module/club/repository/__tests__/abstractClubRepository.test.js +++ b/src/module/club/repository/__tests__/abstractClubRepository.test.js @@ -1,5 +1,8 @@ +/* eslint max-classes-per-file: "off" */ + const AbstractClubRepository = require('../abstractClubRepository'); const AbstractClubRepositoryError = require('../error/abstractClubRepositoryError'); +const MethodNotImplementedError = require('../error/methodNotImplementedError'); test('No se puede instanciar un repositorio abstracto', () => { let repoInstance; @@ -18,3 +21,13 @@ test('Se puede instanciar un repositorio concreto que herede del repositorio abs expect(respositoryInstance).toBeInstanceOf(ConcreteRepository); expect(respositoryInstance).toBeInstanceOf(AbstractClubRepository); }); + +test('Llamar a métodos base sin implementación concreta da error', () => { + const ConcreteRepository = class extends AbstractClubRepository {}; + const respositoryInstance = new ConcreteRepository(); + + expect(() => respositoryInstance.save()).rejects.toThrowError(MethodNotImplementedError); + expect(() => respositoryInstance.delete()).rejects.toThrowError(MethodNotImplementedError); + expect(() => respositoryInstance.getAll()).rejects.toThrowError(MethodNotImplementedError); + expect(() => respositoryInstance.getById()).rejects.toThrowError(MethodNotImplementedError); +}); diff --git a/src/module/club/repository/abstractClubRepository.js b/src/module/club/repository/abstractClubRepository.js index 5e5bc86..263ad16 100644 --- a/src/module/club/repository/abstractClubRepository.js +++ b/src/module/club/repository/abstractClubRepository.js @@ -1,6 +1,7 @@ /* eslint-disable no-empty-function */ /* eslint-disable no-unused-vars */ const AbstractClubRepositoryError = require('./error/abstractClubRepositoryError'); +const MethodNotImplementedError = require('./error/methodNotImplementedError'); module.exports = class AbstractClubRepository { constructor() { @@ -15,21 +16,29 @@ module.exports = class AbstractClubRepository { * @param {import('../entity/club')} club * @returns {import('../entity/club')} */ - async save(club) {} + async save(club) { + throw new MethodNotImplementedError(); + } /** * @param {Number} id */ - async delete(id) {} + async delete(id) { + throw new MethodNotImplementedError(); + } /** * @param {Number} id * @returns {import('../entity/club')} */ - async getById(id) {} + async getById(id) { + throw new MethodNotImplementedError(); + } /** * @returns {Array} */ - async getAll() {} + async getAll() { + throw new MethodNotImplementedError(); + } }; diff --git a/src/module/club/repository/error/methodNotImplementedError.js b/src/module/club/repository/error/methodNotImplementedError.js new file mode 100644 index 0000000..f132e77 --- /dev/null +++ b/src/module/club/repository/error/methodNotImplementedError.js @@ -0,0 +1 @@ +module.exports = class MethodNotImplementedError extends Error {}; diff --git a/src/module/club/repository/sqlite/__tests__/clubRepository.test.js b/src/module/club/repository/sqlite/__tests__/clubRepository.test.js new file mode 100644 index 0000000..ae5e360 --- /dev/null +++ b/src/module/club/repository/sqlite/__tests__/clubRepository.test.js @@ -0,0 +1,200 @@ +const Sqlite3Database = require('better-sqlite3'); +const fs = require('fs'); +const ClubRepository = require('../clubRepository'); +const Club = require('../../../entity/club'); +const ClubNotFoundError = require('../../error/clubNotFoundError'); +const ClubIdNotDefinedError = require('../../error/clubIdNotDefinedError'); + +let mockDb; + +beforeEach(() => { + mockDb = new Sqlite3Database(':memory:'); + const migration = fs.readFileSync('./src/config/setup.sql', 'utf-8'); + mockDb.exec(migration); +}); + +test('Guardar un club nuevo genera un id', () => { + const repository = new ClubRepository(mockDb); + const club = repository.save( + new Club({ + name: 'name', + tla: 'tla', + shortName: 'shortName', + address: 'address', + clubColors: 'clubColors', + crestUrl: 'cres.url', + email: 'e@mail.com', + founded: 'founded', + phone: 'phone', + venue: 'venue', + website: 'website', + }) + ); + + expect(club.id).toEqual(1); +}); + +test('Guardar un club existente actualiza los valores', () => { + const repository = new ClubRepository(mockDb); + let club = repository.save( + new Club({ + name: 'name', + tla: 'tla', + shortName: 'shortName', + address: 'address', + clubColors: 'clubColors', + crestUrl: 'cres.url', + email: 'e@mail.com', + founded: 'founded', + phone: 'phone', + venue: 'venue', + website: 'website', + }) + ); + + expect(club.id).toEqual(1); + + club = repository.save( + new Club({ + id: 1, + name: 'name actualizado', + tla: 'tla', + shortName: 'shortName', + address: 'address', + clubColors: 'clubColors', + crestUrl: 'cres.url', + email: 'e@mail.com', + founded: 'founded', + phone: 'phone', + venue: 'venue', + website: 'website', + }) + ); + + expect(club.id).toEqual(1); + expect(club.name).toEqual('name actualizado'); +}); + +test('Guardar un club con id que no existe da error', () => { + const repository = new ClubRepository(mockDb); + + expect(() => { + repository.save( + new Club({ + id: 1, + name: 'name actualizado', + tla: 'tla', + shortName: 'shortName', + address: 'address', + clubColors: 'clubColors', + crestUrl: 'cres.url', + email: 'e@mail.com', + founded: 'founded', + phone: 'phone', + venue: 'venue', + website: 'website', + }) + ); + }).toThrowError(ClubNotFoundError); +}); + +test('Buscar un club con id que no existe da error', () => { + const repository = new ClubRepository(mockDb); + expect(() => { + repository.getById(1); + }).toThrowError(ClubNotFoundError); +}); + +test('Buscar un club por id devuelve el club adecuado', () => { + const repository = new ClubRepository(mockDb); + const nuevoClub = repository.save( + new Club({ + name: 'name', + tla: 'tla', + shortName: 'shortName', + address: 'address', + clubColors: 'clubColors', + crestUrl: 'cres.url', + email: 'e@mail.com', + founded: 'founded', + phone: 'phone', + venue: 'venue', + website: 'website', + }) + ); + + expect(nuevoClub.id).toEqual(1); + + const club = repository.getById(nuevoClub.id); + expect(club).toEqual(nuevoClub); +}); + +test('Eliminar club elimina un club existente', () => { + const repository = new ClubRepository(mockDb); + const nuevoClub = repository.save( + new Club({ + name: 'name', + tla: 'tla', + shortName: 'shortName', + address: 'address', + clubColors: 'clubColors', + crestUrl: 'cres.url', + email: 'e@mail.com', + founded: 'founded', + phone: 'phone', + venue: 'venue', + website: 'website', + }) + ); + + expect(nuevoClub.id).toEqual(1); + expect(repository.delete(nuevoClub)).toBe(true); + expect(() => { + repository.getById(1); + }).toThrow(ClubNotFoundError); +}); + +test('Eliminar club sin un id da error', () => { + const repository = new ClubRepository(mockDb); + expect(() => { + repository.delete({}); + }).toThrow(ClubIdNotDefinedError); +}); + +test('Otener todos los clubes devuelve un array de entidad Club', () => { + const repository = new ClubRepository(mockDb); + expect(repository.getAll()).toEqual([]); + + const nuevoClub1 = repository.save( + new Club({ + name: 'name', + tla: 'tla', + shortName: 'shortName', + address: 'address', + clubColors: 'clubColors', + crestUrl: 'cres.url', + email: 'e@mail.com', + founded: 'founded', + phone: 'phone', + venue: 'venue', + website: 'website', + }) + ); + + const nuevoClub2 = repository.save( + new Club({ + name: 'name', + tla: 'tla', + shortName: 'shortName', + address: 'address', + clubColors: 'clubColors', + crestUrl: 'cres.url', + email: 'e@mail.com', + founded: 'founded', + phone: 'phone', + venue: 'venue', + website: 'website', + }) + ); + expect(repository.getAll()).toEqual([nuevoClub1, nuevoClub2]); +}); From 52b30a7b28e0a05b7e367daf7a6242028567ce34 Mon Sep 17 00:00:00 2001 From: Fabricio Leonardo Sodano Pascazi Date: Thu, 3 Sep 2020 19:27:19 +1000 Subject: [PATCH 10/10] =?UTF-8?q?Mejora=20condici=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/module/club/repository/sqlite/clubRepository.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/module/club/repository/sqlite/clubRepository.js b/src/module/club/repository/sqlite/clubRepository.js index 9b9bae4..9a7f25b 100644 --- a/src/module/club/repository/sqlite/clubRepository.js +++ b/src/module/club/repository/sqlite/clubRepository.js @@ -18,7 +18,8 @@ module.exports = class ClubRepository extends AbstractClubRepository { */ save(club) { let id; - if (club.id) { + const isUpdate = club.id; + if (isUpdate) { id = club.id; const statement = this.databaseAdapter.prepare(` UPDATE clubes SET