diff --git a/.all-contributorsrc b/.all-contributorsrc
index d2a9b175..ea610ac1 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -252,6 +252,101 @@
"contributions": [
"test"
]
+ },
+ {
+ "login": "devvspaces",
+ "name": "Ayanwola Ayomide",
+ "avatar_url": "https://avatars.githubusercontent.com/u/77179231?v=4",
+ "profile": "https://devvspace.webflow.io/",
+ "contributions": [
+ "code",
+ "test",
+ "doc"
+ ]
+ },
+ {
+ "login": "zaibugemi",
+ "name": "Zuhaib Shah",
+ "avatar_url": "https://avatars.githubusercontent.com/u/34958019?v=4",
+ "profile": "https://preciouslife837753359.wordpress.com/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "GuilhermeFernandes01",
+ "name": "Guilherme Fernandes",
+ "avatar_url": "https://avatars.githubusercontent.com/u/26780625?v=4",
+ "profile": "https://github.com/GuilhermeFernandes01",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "benhalverson",
+ "name": "Ben Halverson",
+ "avatar_url": "https://avatars.githubusercontent.com/u/7907232?v=4",
+ "profile": "https://github.com/benhalverson",
+ "contributions": [
+ "code",
+ "test"
+ ]
+ },
+ {
+ "login": "darkl1ght",
+ "name": "Ayush Chauhan",
+ "avatar_url": "https://avatars.githubusercontent.com/u/19537472?v=4",
+ "profile": "https://github.com/darkl1ght",
+ "contributions": [
+ "test",
+ "code"
+ ]
+ },
+ {
+ "login": "edwardsmoses",
+ "name": "Edwards Moses",
+ "avatar_url": "https://avatars.githubusercontent.com/u/19548998?v=4",
+ "profile": "https://edwardsmoses.com/",
+ "contributions": [
+ "doc",
+ "test"
+ ]
+ },
+ {
+ "login": "RizkyRajitha",
+ "name": "Rajitha Gunathilake",
+ "avatar_url": "https://avatars.githubusercontent.com/u/38534289?v=4",
+ "profile": "https://rizkyrajitha.github.io/",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "bmusuko",
+ "name": "Bram Musuko Panjaitan",
+ "avatar_url": "https://avatars.githubusercontent.com/u/32943475?v=4",
+ "profile": "https://bmusuko.tech/",
+ "contributions": [
+ "test"
+ ]
+ },
+ {
+ "login": "filipkujawa",
+ "name": "filip",
+ "avatar_url": "https://avatars.githubusercontent.com/u/44206832?v=4",
+ "profile": "https://github.com/filipkujawa",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "mdfarhaan",
+ "name": "Farhaan",
+ "avatar_url": "https://avatars.githubusercontent.com/u/60516398?v=4",
+ "profile": "https://github.com/mdfarhaan",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/.github/workflows/codesee-arch-diagram.yml b/.github/workflows/codesee-arch-diagram.yml
new file mode 100644
index 00000000..60f36f57
--- /dev/null
+++ b/.github/workflows/codesee-arch-diagram.yml
@@ -0,0 +1,89 @@
+# This workflow was added by CodeSee. Learn more at https://codesee.io/
+on:
+ push:
+ branches:
+ - dev
+ pull_request_target:
+ types: [opened, synchronize, reopened]
+
+name: CodeSee Map
+
+permissions: read-all
+
+jobs:
+ test_map_action:
+ runs-on: ubuntu-latest
+ continue-on-error: true
+ name: Run CodeSee Map Analysis
+ steps:
+ - name: checkout
+ id: checkout
+ uses: actions/checkout@v2
+ with:
+ repository: ${{ github.event.pull_request.head.repo.full_name }}
+ ref: ${{ github.event.pull_request.head.ref }}
+
+ # codesee-detect-languages has an output with id languages.
+ - name: Detect Languages
+ id: detect-languages
+ uses: Codesee-io/codesee-detect-languages-action@latest
+
+ - name: Configure JDK 16
+ uses: actions/setup-java@v3
+ if: ${{ fromJSON(steps.detect-languages.outputs.languages).java }}
+ with:
+ java-version: '16'
+ distribution: 'zulu'
+
+ # CodeSee Maps Go support uses a static binary so there's no setup step required.
+
+ - name: Configure Node.js 14
+ uses: actions/setup-node@v3
+ if: ${{ fromJSON(steps.detect-languages.outputs.languages).javascript }}
+ with:
+ node-version: '14'
+
+ - name: Configure Python 3.x
+ uses: actions/setup-python@v4
+ if: ${{ fromJSON(steps.detect-languages.outputs.languages).python }}
+ with:
+ python-version: '3.10'
+ architecture: 'x64'
+
+ - name: Configure Ruby '3.x'
+ uses: ruby/setup-ruby@v1
+ if: ${{ fromJSON(steps.detect-languages.outputs.languages).ruby }}
+ with:
+ ruby-version: '3.0'
+
+ # We need the rust toolchain because it uses rustc and cargo to inspect the package
+ - name: Configure Rust 1.x stable
+ uses: actions-rs/toolchain@v1
+ if: ${{ fromJSON(steps.detect-languages.outputs.languages).rust }}
+ with:
+ toolchain: stable
+
+ - name: Generate Map
+ id: generate-map
+ uses: Codesee-io/codesee-map-action@latest
+ with:
+ step: map
+ api_token: ${{ secrets.CODESEE_ARCH_DIAG_API_TOKEN }}
+ github_ref: ${{ github.ref }}
+ languages: ${{ steps.detect-languages.outputs.languages }}
+
+ - name: Upload Map
+ id: upload-map
+ uses: Codesee-io/codesee-map-action@latest
+ with:
+ step: mapUpload
+ api_token: ${{ secrets.CODESEE_ARCH_DIAG_API_TOKEN }}
+ github_ref: ${{ github.ref }}
+
+ - name: Insights
+ id: insights
+ uses: Codesee-io/codesee-map-action@latest
+ with:
+ step: insights
+ api_token: ${{ secrets.CODESEE_ARCH_DIAG_API_TOKEN }}
+ github_ref: ${{ github.ref }}
diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
new file mode 100644
index 00000000..e669b5e6
--- /dev/null
+++ b/.github/workflows/pr.yml
@@ -0,0 +1,17 @@
+name: pull-request
+
+on:
+ pull_request:
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out code
+ uses: actions/checkout@v3
+ - name: Set up node
+ uses: actions/setup-node@v3
+ - name: Install dependencies
+ run: npm install
+ - name: Run tests
+ run: npm test
diff --git a/.gitignore b/.gitignore
index 95c72ede..268f51a8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@ npm-debug.log
.env
.DS_Store
.idea
+coverage
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 00000000..96a18ff3
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,10 @@
+{
+ "eslint.alwaysShowStatus": true,
+ "eslint.format.enable": true,
+ "eslint.lintTask.enable": true,
+ "eslint.useESLintClass": false,
+ "editor.codeActionsOnSave": {
+ "source.fixAll.eslint": true
+ },
+ "eslint.validate": ["javascript"]
+}
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index c25e3c75..4de528ab 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -130,7 +130,7 @@ Enhancement suggestions are tracked as [GitHub issues](https://github.com/agedde
include Setup of env, IDE and typical getting started instructions?
-->
1. When adding new API endpoints, please add OpenAPI comments
-2. All code must have corrosponding unit tests.
+2. All code must have corresponding unit tests.
3. All API endpoints must have unit tests for all return codes.
### Improving The Documentation
diff --git a/Dockerfile b/Dockerfile
index 36d406fc..6b64707b 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:12-alpine
+FROM node:18-alpine
WORKDIR /src
COPY package.json package-lock.json /src/
RUN npm install
diff --git a/README.md b/README.md
index 57c98808..e33ddd85 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-[![All Contributors](https://img.shields.io/badge/all_contributors-27-orange.svg?style=flat-square)](#contributors-)
+[![All Contributors](https://img.shields.io/badge/all_contributors-37-orange.svg?style=flat-square)](#contributors-)
@@ -19,10 +19,10 @@ Welcome to Mocked-API, this is a live API that can be accessed by anyone who nee
## Hacktoberfest Contributors
-If you would like to contribute during Hacktoberfest please following our contribution guidelines (Which we are still working on) but here is a quick summary of what we expect in a PR.
+If you would like to contribute during Hacktoberfest please following our contribution guidelines (Which we are still working on) but here is a quick summary of what we expect in the process of dev to raising your PR.
1. Find a ticket and ask to be assigned, once assigned start work. :) This is so we don't get multiple PR's for the same issue.
-1. Please branch from our active next release *v.0.13.0*
+1. Please branch from our active next release *dev*
2. Please make sure your new endpoints all have OpenAPI Comments as they will be used to generate our swagger documentation.
3. Please make sure you have added unit tests for end points and util functions.
4. MOST importantly, have fun.
@@ -85,14 +85,13 @@ For each module you create you will also need to create a tests folder, Inside t
The utils tests are fairly simple jests tests, the `api` routes tests are slightly different where you will need to add
```javascript
import request from 'supertest';
-const baseURL = 'http://localhost:3000';
+import app from 'path/to/app';
```
to your tests and make a request in your test instead of calling a normal function.
### How to run tests
-1. Run the mocked api server locally
-2. run `npm run test`
-
+run `npm test`
+run `npm run test:watch` to run the tests in watch mode.
## FAQ
@@ -169,6 +168,20 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
krishna 💻 |
Vadym Yatsyuk 📖 |
Nicholas Robert Beckham ⚠️ |
+ Ayanwola Ayomide 💻 ⚠️ 📖 |
+
+
+ Zuhaib Shah 💻 |
+ Guilherme Fernandes 💻 |
+ Ben Halverson 💻 ⚠️ |
+ Ayush Chauhan ⚠️ 💻 |
+ Edwards Moses 📖 ⚠️ |
+ Rajitha Gunathilake 💻 |
+ Bram Musuko Panjaitan ⚠️ |
+
+
+ filip 💻 |
+ Farhaan 💻 |
diff --git a/app.ts b/app.ts
index e3ac6ad6..8ff1b985 100644
--- a/app.ts
+++ b/app.ts
@@ -1,12 +1,12 @@
require('dotenv').config();
import express, { Request, Response } from 'express';
import { swaggerSpec } from './utils/swagger';
+import swag from "./swagger.json";
const morgan = require('morgan');
const cors = require('cors');
const app = express();
-const port = 3000;
// Load Mock Modules
require('./modules/animal/api/animal-routes')(app); // Animals
@@ -30,13 +30,20 @@ require('./modules/phone-numbers/api/phone-numbers-routes')(app); // Phone numbe
require('./modules/quotes/api/quotes-routes')(app); // Quotes
require('./modules/ip/api/ip-routes')(app); // ip and mac address
require('./modules/vehicles/api/vehicles-routes')(app); // Vehicles
+require('./modules/address/api/address-routes')(app); // Addresses
+require('./modules/bankfeed/api/bankfeed-routes')(app); // Bank Feed
+require('./modules/location/api/location-routes')(app); // Bank Feed
+
// Add an healthcheck endpoint
+// Shows amount of API Categories and their endpoints
app.get('/status', (req, res) => {
const data = {
uptime: process.uptime(),
message: 'Ok',
date: new Date(),
+ totalCategories: swag.tags.length,
+ totalEndpoints: Object.keys(swag.paths).length,
};
res.status(200).send(data);
});
@@ -51,10 +58,7 @@ app.get('/docs.json', (req: Request, res: Response) => {
const swaggerUi = require('swagger-ui-express');
app.use('/', swaggerUi.serve, swaggerUi.setup(swaggerSpec));
-
app.use(cors()); // enabling CORS for all requests
app.use(morgan('combined')); // adding morgan to log HTTP requests
-app.listen(port, () => {
- console.log(`Mock API is running on port ${port}.`);
-});
+export default app;
diff --git a/jest.config.js b/jest.config.js
index e5fbf09c..90113e82 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -1,5 +1,7 @@
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest',
- testEnvironment: 'node'
+ testEnvironment: 'node',
+ collectCoverage: true,
+ coverageReporters: ['json', 'html', 'text', 'text-summary']
}
diff --git a/modules/address/api/address-routes.ts b/modules/address/api/address-routes.ts
new file mode 100644
index 00000000..7dc5e123
--- /dev/null
+++ b/modules/address/api/address-routes.ts
@@ -0,0 +1,89 @@
+import { Request, Response } from 'express';
+import * as core from 'express-serve-static-core';
+import getRandomAddresses from '../utils/getRandomAddress';
+import { getQtyFromRequest } from '../../../utils/route-utils';
+import { getCountryNameFromRequest } from '../../../utils/route-utils';
+
+module.exports = function(app : core.Express) {
+ /**
+ * @openapi
+ * "/address":
+ * get:
+ * tags:
+ * - Address
+ * summary: Obtain a USA address (by default)
+ * responses:
+ * '200':
+ * description: An array of single address string
+ * schema:
+ * type: array
+ * items:
+ * type: object
+ * example: ['Andrew Kappa\n3686 Capital Lakeview\nLahore 2344\nUSA']
+ */
+ app.get('/address', (req: Request, res: Response) => {
+ const address = getRandomAddresses();
+ res.json(address);
+ });
+
+ // get a random UK/USA address
+ /**
+ * @openapi
+ * '/address/:country':
+ * get:
+ * tags:
+ * - Address
+ * summary: Obtain a random UK/USA address
+ * parameters:
+ * - in: path
+ * name: country
+ * description: The country whose address is required; can be 'usa' or 'uk'
+ * type: string
+ * responses:
+ * '200':
+ * description: An array of single address string
+ * schema:
+ * type: array
+ * items:
+ * type: string
+ * example: ['Andrew Kappa\n3686 Capital Lakeview\nLahore 2344\nUSA']
+ */
+ app.get('/address/:country?', (req: Request, res: Response) => {
+ const country = getCountryNameFromRequest(req);
+ const address = getRandomAddresses(1, country);
+ res.json(address);
+ });
+
+ // get random USA/UK addresses
+ /**
+ * @openapi
+ * '/address/:country/:qty':
+ * get:
+ * tags:
+ * - Address
+ * summary: Obtain random UK/USA addresses
+ * parameters:
+ * - in: path
+ * name: country
+ * description: The country whose address is required; can be 'usa' or 'uk'
+ * type: string
+ * - in: path
+ * name: qty
+ * description: The number of addresses required
+ * type: number
+ * responses:
+ * '200':
+ * description: An array of address strings
+ * schema:
+ * type: array
+ * items:
+ * type: string
+ * example: ['Andrew Kappa\n3686 Capital Lakeview\nLahore 2344\nUSA', 'Jamal Khan\n600 Zumbuli House\nWashingtom 44521\nUSA']
+ */
+ app.get('/address/:country?/:qty?', (req: Request, res: Response) => {
+ const country = getCountryNameFromRequest(req);
+ const qty = getQtyFromRequest(req);
+ const addresses = getRandomAddresses(qty, country);
+ res.json(addresses);
+ });
+}
\ No newline at end of file
diff --git a/modules/address/consts/Address.ts b/modules/address/consts/Address.ts
new file mode 100644
index 00000000..4da8fe85
--- /dev/null
+++ b/modules/address/consts/Address.ts
@@ -0,0 +1,39 @@
+/**
+ * * @openapi
+ * definitions:
+ * MockAddress:
+ * type: objcts
+ * properties:
+ * houseNumber:
+ * type: string
+ * example: 10
+ * addressLine1:
+ * type: string
+ * example: Flat 22b
+ * addressLine2:
+ * type: string
+ * example: Gladstone Road
+ * city:
+ * type: string
+ * example: London
+ * postcode:
+ * type: string
+ * example: TN22 7HL
+ * zipcode:
+ * type: string
+ * example: 10234
+ * country:
+ * type: string
+ * example: uk
+ */
+type Address = {
+ houseNumber: string,
+ addressLine1: string,
+ addressLine2: string,
+ city: string,
+ postcode: string,
+ zipcode: string,
+ country: string
+}
+
+export default Address;
\ No newline at end of file
diff --git a/modules/address/tests/api/address-routes.test.ts b/modules/address/tests/api/address-routes.test.ts
new file mode 100644
index 00000000..f8596fd4
--- /dev/null
+++ b/modules/address/tests/api/address-routes.test.ts
@@ -0,0 +1,79 @@
+import Address from "../../consts/Address";
+import app from "../../../../app";
+let request = require('supertest');
+
+// address-routes.ts tests
+describe('GET /address/', () => {
+ it('should return a random address', async () => {
+ const response = await request(app)
+ .get('/address');
+
+ const {status, body} = response;
+ expect(status).toBe(200);
+ expect(body).toBeInstanceOf(Array);
+ expect(body.length).toBe(1);
+ expect(typeof body[0]).toBe("object");
+ })
+})
+
+// address/:country
+describe('GET /address/usa', () => {
+ it('should return a random USA format address', async () => {
+ const response = await request(app)
+ .get('/address/usa');
+
+ const {status, body} = response;
+ expect(status).toBe(200);
+ expect(body).toBeInstanceOf(Array);
+ expect(body.length).toBe(1);
+ expect(typeof body[0]).toBe('object');
+ expect(body[0].postcode).toBe(null);
+ expect(body[0].zipcode).toBeTruthy();
+ })
+
+ it('should return a random UK format address', async () => {
+ const response = await request(app)
+ .get('/address/uk');
+
+ const {status, body} = response;
+ expect(status).toBe(200);
+ expect(body).toBeInstanceOf(Array);
+ expect(body.length).toBe(1);
+ expect(typeof body[0]).toBe('object');
+ expect(body[0].postcode).toBeTruthy();
+ expect(body[0].zipcode).toBe(null);
+ })
+})
+
+// address/:country/:qty
+describe('GET /address/:country/:qty', () => {
+ it('should return given number of random USA format addresses', async () => {
+ const response = await request(app)
+ .get('/address/usa/5');
+
+ const {status, body} = response;
+ expect(status).toBe(200);
+ expect(body).toBeInstanceOf(Array);
+ expect(body.length).toBe(5);
+ expect(typeof body[0]).toBe('object');
+ expect(typeof body[1]).toBe('object');
+ expect(typeof body[2]).toBe('object');
+ expect(typeof body[3]).toBe('object');
+ expect(typeof body[4]).toBe('object');
+ })
+
+ it('should return given number of random UK format addresses', async () => {
+ const response = await request(app)
+ .get('/address/uk/5');
+
+ const {status, body} = response;
+ expect(status).toBe(200);
+ expect(body).toBeInstanceOf(Array);
+ expect(body.length).toBe(5);
+ expect(typeof body[0]).toBe('object');
+ expect(typeof body[1]).toBe('object');
+ expect(typeof body[2]).toBe('object');
+ expect(typeof body[3]).toBe('object');
+ expect(typeof body[4]).toBe('object');
+ })
+})
\ No newline at end of file
diff --git a/modules/address/tests/utils/getRandomAddress.test.ts b/modules/address/tests/utils/getRandomAddress.test.ts
new file mode 100644
index 00000000..5f91b9c1
--- /dev/null
+++ b/modules/address/tests/utils/getRandomAddress.test.ts
@@ -0,0 +1,67 @@
+// jest test for getRandomAddresses which returns a random UK/USA format address
+
+import getRandomAddresses from '../../utils/getRandomAddress';
+import { faker } from '@faker-js/faker';
+
+jest.mock('@faker-js/faker', () => ({
+ faker: {
+ address: {
+ buildingNumber: jest.fn().mockReturnValue('10'),
+ secondaryAddress: jest.fn().mockReturnValue('Flat 1'),
+ street: jest.fn().mockReturnValue('Something Road'),
+ cityName: jest.fn().mockReturnValue('Lahore'),
+ zipCode: jest.fn().mockReturnValue('2344'),
+ }
+ }
+}));
+
+describe('getRandomAddresses', () => {
+ afterEach(() => {
+ jest.clearAllMocks();
+ })
+
+ it('should return a random USA address by default', () => {
+ const address = getRandomAddresses();
+ expect(faker.address.buildingNumber).toHaveBeenCalledTimes(1);
+ expect(faker.address.secondaryAddress).toHaveBeenCalledTimes(1);
+ expect(faker.address.street).toHaveBeenCalledTimes(1);
+ expect(faker.address.cityName).toHaveBeenCalledTimes(1);
+ expect(faker.address.zipCode).toHaveBeenCalledTimes(1);
+ })
+
+ it('should return a random UK address when passed the "uk" argument', () => {
+ const address = getRandomAddresses(1, 'uk');
+ expect(faker.address.buildingNumber).toHaveBeenCalledTimes(1);
+ expect(faker.address.secondaryAddress).toHaveBeenCalledTimes(1);
+ expect(faker.address.street).toHaveBeenCalledTimes(1);
+ expect(faker.address.cityName).toHaveBeenCalledTimes(1);
+ expect(faker.address.zipCode).toHaveBeenCalledTimes(1);
+ })
+
+ it('should return a random USA address when passed the "usa" argument', () => {
+ const address = getRandomAddresses(1, 'usa');
+ expect(faker.address.buildingNumber).toHaveBeenCalledTimes(1);
+ expect(faker.address.secondaryAddress).toHaveBeenCalledTimes(1);
+ expect(faker.address.street).toHaveBeenCalledTimes(1);
+ expect(faker.address.cityName).toHaveBeenCalledTimes(1);
+ expect(faker.address.zipCode).toHaveBeenCalledTimes(1);
+ })
+
+ it('should return USA format addresses equal to the number provided as "addressCount" parameter', () => {
+ const address = getRandomAddresses(5, 'usa');
+ expect(faker.address.buildingNumber).toHaveBeenCalledTimes(5);
+ expect(faker.address.secondaryAddress).toHaveBeenCalledTimes(5);
+ expect(faker.address.street).toHaveBeenCalledTimes(5);
+ expect(faker.address.cityName).toHaveBeenCalledTimes(5);
+ expect(faker.address.zipCode).toHaveBeenCalledTimes(5);
+ })
+
+ it('should return UK format addresses equal to the number provided as "addressCount" parameter', () => {
+ const address = getRandomAddresses(3, 'uk');
+ expect(faker.address.buildingNumber).toHaveBeenCalledTimes(3);
+ expect(faker.address.secondaryAddress).toHaveBeenCalledTimes(3);
+ expect(faker.address.street).toHaveBeenCalledTimes(3);
+ expect(faker.address.cityName).toHaveBeenCalledTimes(3);
+ expect(faker.address.zipCode).toHaveBeenCalledTimes(3);
+ })
+})
\ No newline at end of file
diff --git a/modules/address/utils/getRandomAddress.ts b/modules/address/utils/getRandomAddress.ts
new file mode 100644
index 00000000..58ca55e1
--- /dev/null
+++ b/modules/address/utils/getRandomAddress.ts
@@ -0,0 +1,21 @@
+import { faker } from '@faker-js/faker';
+import Address from '../consts/Address';
+
+const getRandomAddresses = (addressCount : number = 1, country : string = 'uk') : Address[] => {
+ const addresses : Address[] = [];
+
+ for (let index = 0; index < addressCount; index++) {
+ addresses.push({
+ houseNumber: faker.address.buildingNumber(),
+ addressLine1: faker.address.secondaryAddress(),
+ addressLine2: faker.address.street(),
+ city: faker.address.cityName(),
+ postcode: country !== "usa" ? faker.address.zipCode() : null,
+ zipcode: country === "usa" ? faker.address.zipCode() : null,
+ country
+ })
+ }
+ return addresses;
+}
+
+export default getRandomAddresses;
\ No newline at end of file
diff --git a/modules/animal/api/animal-routes.ts b/modules/animal/api/animal-routes.ts
index 15519a23..398c2662 100644
--- a/modules/animal/api/animal-routes.ts
+++ b/modules/animal/api/animal-routes.ts
@@ -4,6 +4,7 @@ import { getQtyFromRequest } from '../../../utils/route-utils';
import AnimalType from '../consts/AnimalEnum';
import getSpeciesOfAnimal from '../utils/getSpeciesOfAnimal';
+
module.exports = function (app: core.Express) {
/**
* @openapi
diff --git a/modules/animal/tests/Api/animal-routes.test.ts b/modules/animal/tests/Api/animal-routes.test.ts
index 7c06cb0c..49fe4d69 100644
--- a/modules/animal/tests/Api/animal-routes.test.ts
+++ b/modules/animal/tests/Api/animal-routes.test.ts
@@ -1,14 +1,20 @@
import request from 'supertest';
-const baseURL = 'http://localhost:3000';
+import app from '../../../../app';
+
//These routes dont seem to provide consistent responses
+// Its not consistent because the data is randomly generated. You will need to mock the data to get consistent responses.
describe.skip('animal api endpoints', () => {
describe('/animals/bear/species/:qty?', () => {
it('should return a list of bear species', async () => {
const qty = 4;
- const response = await request(baseURL).get(`/animals/bear/species/${qty}`);
- expect(response.body.length).toBe(qty);
+ const response = await request(app)
+ .get(`/animals/bear/species/${qty}`)
+ .expect(200)
+ .expect('Content-Type', /json/);
+
+ expect(response.body.length).toEqual(qty);
});
});
@@ -16,7 +22,11 @@ describe.skip('animal api endpoints', () => {
it('should return a list of bird species', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/animals/bird/species/${qty}`);
+ const response = await request(app)
+ .get(`/animals/bird/species/${qty}`)
+ .expect(200)
+ .expect('Content-Type', /json/);
+ console.log('response', response.body);
expect(response.body.length).toBe(qty);
});
});
@@ -25,7 +35,10 @@ describe.skip('animal api endpoints', () => {
it('should return a list of cat species', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/animals/cat/species/${qty}`);
+ const response = await request(app)
+ .get(`/animals/cat/species/${qty}`)
+ .expect(200)
+ .expect('Content-Type', /json/);
expect(response.body.length).toBe(qty);
});
});
@@ -34,7 +47,10 @@ describe.skip('animal api endpoints', () => {
it('should return a list of cetecean species', async () => {
const qty = 4;
- const response = await request(baseURL).get(`/animals/cetecean/species/${qty}`);
+ const response = await request(app)
+ .get(`/animals/cetecean/species/${qty}`)
+ .expect(200)
+ .expect('Content-Type', /json/);
expect(response.body.length).toBe(qty);
});
});
@@ -43,7 +59,7 @@ describe.skip('animal api endpoints', () => {
it('should return a list of cow species', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/animals/cow/species/${qty}`);
+ const response = await request(app).get(`/animals/cow/species/${qty}`);
expect(response.body.length).toBe(qty);
});
});
@@ -52,7 +68,10 @@ describe.skip('animal api endpoints', () => {
it('should return a list of crocodile species', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/animals/crocodile/species/${qty}`);
+ const response = await request(app)
+ .get(`/animals/crocodile/species/${qty}`)
+ .expect(200)
+ .expect('Content-Type', /json/);
expect(response.body.length).toBe(qty);
});
});
@@ -61,7 +80,7 @@ describe.skip('animal api endpoints', () => {
it('should return a list of dog species', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/animals/dog/species/${qty}`);
+ const response = await request(app).get(`/animals/dog/species/${qty}`);
expect(response.body.length).toBe(qty);
});
});
@@ -70,7 +89,7 @@ describe.skip('animal api endpoints', () => {
it('should return a list of fish species', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/animals/fish/species/${qty}`);
+ const response = await request(app).get(`/animals/fish/species/${qty}`);
expect(response.body.length).toBe(qty);
});
});
@@ -79,7 +98,7 @@ describe.skip('animal api endpoints', () => {
it('should return a list of horse species', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/animals/horse/species/${qty}`);
+ const response = await request(app).get(`/animals/horse/species/${qty}`);
expect(response.body.length).toBe(qty);
});
});
@@ -88,7 +107,7 @@ describe.skip('animal api endpoints', () => {
it('should return a list of insect species', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/animals/insect/species/${qty}`);
+ const response = await request(app).get(`/animals/insect/species/${qty}`);
expect(response.body.length).toBe(qty);
});
});
@@ -97,7 +116,7 @@ describe.skip('animal api endpoints', () => {
it('should return a list of lion species', async () => {
const qty = 2;
- const response = await request(baseURL).get(`/animals/lion/species/${qty}`);
+ const response = await request(app).get(`/animals/lion/species/${qty}`);
expect(response.body.length).toBe(qty);
});
});
@@ -106,7 +125,7 @@ describe.skip('animal api endpoints', () => {
it('should return a list of rabbit species', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/animals/rabbit/species/${qty}`);
+ const response = await request(app).get(`/animals/rabbit/species/${qty}`);
expect(response.body.length).toBe(qty);
});
});
@@ -115,7 +134,7 @@ describe.skip('animal api endpoints', () => {
it('should return a list of rodent species', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/animals/rodent/species/${qty}`);
+ const response = await request(app).get(`/animals/rodent/species/${qty}`);
expect(response.body.length).toBe(qty);
});
});
@@ -124,7 +143,7 @@ describe.skip('animal api endpoints', () => {
it('should return a list of snake species', async () => {
const qty = 4;
- const response = await request(baseURL).get(`/animals/snake/species/${qty}`);
+ const response = await request(app).get(`/animals/snake/species/${qty}`);
expect(response.body.length).toBe(qty);
});
});
diff --git a/modules/bankfeed/api/bankfeed.ts b/modules/bankfeed/api/bankfeed-routes.ts
similarity index 100%
rename from modules/bankfeed/api/bankfeed.ts
rename to modules/bankfeed/api/bankfeed-routes.ts
diff --git a/modules/bankfeed/data/bankdata.ts b/modules/bankfeed/data/bankdata.ts
index fd3f746b..fd9d4a87 100644
--- a/modules/bankfeed/data/bankdata.ts
+++ b/modules/bankfeed/data/bankdata.ts
@@ -7,7 +7,7 @@ const BankData = {
statement: [
{
date: '2222-22-22',
- discription: 'This is bank statemnet ',
+ description: 'This is bank statement ',
amount: '50000',
},
],
diff --git a/modules/bankfeed/tests/api/bankfeed-routes.test.ts b/modules/bankfeed/tests/api/bankfeed-routes.test.ts
new file mode 100644
index 00000000..d2d30403
--- /dev/null
+++ b/modules/bankfeed/tests/api/bankfeed-routes.test.ts
@@ -0,0 +1,30 @@
+import app from "../../../../app";
+let request = require('supertest');
+
+describe('bank feed api endpoints', () => {
+ describe('GET /bank/feed/:qty', () => {
+ it('should return a list of bank statement', async () => {
+ const qty = 5;
+
+ const response = await request(app).get(`/bank/feed/${qty}`);
+ const bankData = response.body;
+ const bankStatement = bankData.statement[0]
+
+ // bank data
+ expect(bankData).toHaveProperty('id');
+ expect(bankData).toHaveProperty('accountnumber');
+ expect(bankData).toHaveProperty('ifsc');
+ expect(bankData).toHaveProperty('sortcode');
+ expect(bankData).toHaveProperty('isbn');
+ expect(bankData).toHaveProperty('statement');
+
+ // bank statement
+ expect(bankData.statement.length).toEqual(1);
+ expect(bankStatement).toHaveProperty('date');
+ expect(bankStatement).toHaveProperty('description');
+ expect(bankStatement).toHaveProperty('amount');
+ expect(parseInt(bankStatement.amount)).toEqual(qty);
+
+ });
+ });
+});
\ No newline at end of file
diff --git a/modules/chat/api/chat-routes.ts b/modules/chat/api/chat-routes.ts
index 1c0519bd..c18bf466 100644
--- a/modules/chat/api/chat-routes.ts
+++ b/modules/chat/api/chat-routes.ts
@@ -1,37 +1,82 @@
-import { faker } from '@faker-js/faker';
-import { Request, Response } from 'express';
-import * as core from 'express-serve-static-core';
-import getRandomUsers from '../../users/utils/getRandomUsers';
-import { getRandomChat } from '../utils/getRandomChat';
+import { Request, Response } from 'express'
+import * as core from 'express-serve-static-core'
+import { getRandomChat } from '../utils/getRandomChat'
-const defaultUserCount = 100;
-const defaultMessageCount = 1000;
+const defaultUserCount = 100
+const defaultMessageCount = 1000
module.exports = function (app: core.Express) {
- /**
+ /**
* @openapi
* '/chat/random':
* get:
* tags:
* - Chat
- * summary: Returns a random chat of 100 users and 1000 messages using randomly generated sentances
+ * summary: Returns a random chat of 100 users and 1000 sentences
* responses:
* '200':
* description: OK
* schema:
* $ref: '#/definitions/MockChatResponse'
*/
- app.get('/chat/random/', (req: Request, res: Response) => {
- res.json(getRandomChat(defaultUserCount, defaultMessageCount));
- });
+ app.get('/chat/random/', (req: Request, res: Response) => {
+ res.json(getRandomChat(defaultUserCount, defaultMessageCount))
+ })
- /**
+ /**
+ * @openapi
+ * '/chat/random/various':
+ * get:
+ * tags:
+ * - Chat
+ * summary: Returns a random chat of 100 users and 1000 messages of various length
+ * responses:
+ * '200':
+ * description: OK
+ * schema:
+ * $ref: '#/definitions/MockChatResponse'
+ */
+ app.get('/chat/random/various/', (req: Request, res: Response) => {
+ res.json(getRandomChat(defaultUserCount, defaultMessageCount, true))
+ })
+
+ /**
+ * @openapi
+ * '/chat/random/various/{userCount}/{messageCount}':
+ * get:
+ * tags:
+ * - Chat
+ * summary: Returns a random chat of messages from defined counts using randomly generated sentences
+ * parameters:
+ * - in: path
+ * name: userCount
+ * description: The amount of users the messages can be generated from
+ * type: string
+ * default: 100
+ * - in: path
+ * name: messageCount
+ * description: The amount of messages that will be returned
+ * type: string
+ * default: 1000
+ * responses:
+ * '200':
+ * description: OK
+ * schema:
+ * $ref: '#/definitions/MockChatResponse'
+ */
+ app.get('/chat/random/various/:userCount/:messageCount', (req: Request, res: Response) => {
+ const userCount = req.params.userCount !== '' ? parseInt(req.params.userCount) : defaultUserCount
+ const messageCount = req.params.messageCount !== '' ? parseInt(req.params.messageCount) : defaultMessageCount
+ res.json(getRandomChat(userCount, messageCount, true))
+ })
+
+ /**
* @openapi
* '/chat/random/{userCount}/{messageCount}':
* get:
* tags:
* - Chat
- * summary: Returns a random chat of messages from defined counts using randomly generated sentances
+ * summary: Returns a random chat of messages from defined counts using randomly generated sentences
* parameters:
* - in: path
* name: userCount
@@ -49,9 +94,9 @@ module.exports = function (app: core.Express) {
* schema:
* $ref: '#/definitions/MockChatResponse'
*/
- app.get('/chat/random/:userCount/:messageCount', (req: Request, res: Response) => {
- const userCount = req.params.userCount ? parseInt(req.params.userCount) : defaultUserCount;
- const messageCount = req.params.messageCount ? parseInt(req.params.messageCount) : defaultMessageCount;
- res.json(getRandomChat(userCount, messageCount));
- });
-};
+ app.get('/chat/random/:userCount/:messageCount', (req: Request, res: Response) => {
+ const userCount = req.params.userCount ? parseInt(req.params.userCount) : defaultUserCount
+ const messageCount = req.params.messageCount ? parseInt(req.params.messageCount) : defaultMessageCount
+ res.json(getRandomChat(userCount, messageCount))
+ })
+}
diff --git a/modules/chat/tests/api/chat-routes.test.ts b/modules/chat/tests/api/chat-routes.test.ts
index 7dc8b7bf..d5a766c7 100644
--- a/modules/chat/tests/api/chat-routes.test.ts
+++ b/modules/chat/tests/api/chat-routes.test.ts
@@ -1,35 +1,56 @@
-import request from 'supertest';
-const baseURL = 'http://localhost:3000';
-
-describe('chat api endpoints', () => {
- describe('GET /chat/random', () => {
- it('should return a random chat snapshot with 1000 messages', async () => {
- const response = await request(baseURL).get(`/chat/random`);
-
- console.log(response.body.messages.length);
-
- expect(response.body.messages.length).toBe(1000);
- expect(response.body.messages[0]).toHaveProperty('id');
- expect(response.body.messages[0]).toHaveProperty('createdAt');
- expect(response.body.messages[0]).toHaveProperty('message');
- expect(response.body.messages[0]).toHaveProperty('userId');
- });
- });
-
- describe('GET /chat/random/:userCount/:messageCount', () => {
- it('should return a chat with the correct message and user count', async () => {
- const userCount = 5;
- const messageCount = 100;
- const response = await request(baseURL).get(`/chat/random/${userCount}/${messageCount}`);
-
- const userSet = new Set();
-
- response.body.users.forEach((element) => {
- userSet.add(element.userId);
- });
-
- expect(response.body.messages.length).toBe(messageCount);
- expect(userSet.size).toBe(userCount);
- });
- });
-});
+import request from 'supertest'
+import app from '../../../../app'
+// const app = 'http://localhost:3000';
+
+const testDefaultRoutes = (response: request.Response): void => {
+ expect(response.body.messages.length).toBe(1000)
+ expect(response.body.messages[0]).toHaveProperty('id')
+ expect(response.body.messages[0]).toHaveProperty('createdAt')
+ expect(response.body.messages[0]).toHaveProperty('message')
+ expect(response.body.messages[0]).toHaveProperty('userId')
+}
+
+const testParametizedRoutes = (response: request.Response, userCount: number, messageCount: number): void => {
+ const userSet = new Set()
+
+ response.body.users.forEach((element) => {
+ userSet.add(element.userId)
+ })
+
+ expect(response.body.messages.length).toBe(messageCount)
+ expect(userSet.size).toBe(userCount)
+}
+
+describe.only('chat api endpoints', () => {
+ describe('GET /chat/random', () => {
+ it('should return a random chat snapshot with 1000 messages', async () => {
+ const response = await request(app).get('/chat/random')
+ testDefaultRoutes(response)
+ })
+ })
+
+ describe('GET /chat/random/various', () => {
+ it('should return a random chat snapshot with 1000 messages', async () => {
+ const response = await request(app).get('/chat/random/various')
+ testDefaultRoutes(response)
+ })
+ })
+
+ describe('GET /chat/random/:userCount/:messageCount', () => {
+ it('should return a chat with the correct message and user count', async () => {
+ const userCount = 5
+ const messageCount = 100
+ const response = await request(app).get(`/chat/random/${userCount}/${messageCount}`)
+ testParametizedRoutes(response, userCount, messageCount)
+ })
+ })
+
+ describe('GET /chat/random/various/:userCount/:messageCount', () => {
+ it('should return a chat with the correct message and user count', async () => {
+ const userCount = 5
+ const messageCount = 100
+ const response = await request(app).get(`/chat/random/various/${userCount}/${messageCount}`)
+ testParametizedRoutes(response, userCount, messageCount)
+ })
+ })
+})
diff --git a/modules/chat/tests/utils/generateRandomMessage.test.ts b/modules/chat/tests/utils/generateRandomMessage.test.ts
new file mode 100644
index 00000000..88c08874
--- /dev/null
+++ b/modules/chat/tests/utils/generateRandomMessage.test.ts
@@ -0,0 +1,9 @@
+import { generateRandomMessage } from '../../utils/generateRandomMessage'
+
+describe('generate random message', () => {
+ it('should return a random string', () => {
+ const res = generateRandomMessage()
+
+ expect(typeof res).toBe('string')
+ })
+})
diff --git a/modules/chat/utils/generateRandomMessage.ts b/modules/chat/utils/generateRandomMessage.ts
new file mode 100644
index 00000000..7784cbe0
--- /dev/null
+++ b/modules/chat/utils/generateRandomMessage.ts
@@ -0,0 +1,12 @@
+import { faker } from '@faker-js/faker'
+import { getRandomArrayItem } from '../../../utils/arrays'
+
+const messageProviders: Array<() => string> = [
+ faker.lorem.sentence,
+ faker.lorem.word,
+ faker.lorem.paragraph
+]
+
+export const generateRandomMessage = (): string => {
+ return getRandomArrayItem(messageProviders)()
+}
diff --git a/modules/chat/utils/getRandomChat.ts b/modules/chat/utils/getRandomChat.ts
index 2cc0bb8d..9476af6b 100644
--- a/modules/chat/utils/getRandomChat.ts
+++ b/modules/chat/utils/getRandomChat.ts
@@ -1,22 +1,23 @@
-import { faker } from "@faker-js/faker";
-import getRandomUsers from "../../users/utils/getRandomUsers";
-import ChatMessage from "../consts/ChatMessage";
-import ChatRandomResponse from "../consts/ChatRandomResponse";
+import { faker } from '@faker-js/faker'
+import getRandomUsers from '../../users/utils/getRandomUsers'
+import ChatMessage from '../consts/ChatMessage'
+import ChatRandomResponse from '../consts/ChatRandomResponse'
+import { generateRandomMessage } from './generateRandomMessage'
-export const getRandomChat = (userCount : number, messageCount: number) : ChatRandomResponse => {
- const users = getRandomUsers(userCount);
+export const getRandomChat = (userCount: number, messageCount: number, various: boolean = false): ChatRandomResponse => {
+ const users = getRandomUsers(userCount)
- const messages : ChatMessage[] = [];
- Array.from({length: messageCount}).forEach(() => {
- messages.push({
- id: faker.datatype.uuid(),
- createdAt: faker.date.recent(faker.datatype.number({ min: 0, max: 30 })).toISOString(),
- message: faker.lorem.sentence(),
- userId: users[faker.datatype.number({ min: 0, max: userCount - 1 })].userId,
- })
+ const messages: ChatMessage[] = []
+ Array.from({ length: messageCount }).forEach(() => {
+ messages.push({
+ id: faker.datatype.uuid(),
+ createdAt: faker.date.recent(faker.datatype.number({ min: 0, max: 30 })).toISOString(),
+ message: various ? generateRandomMessage() : faker.lorem.sentence(),
+ userId: users[faker.datatype.number({ min: 0, max: userCount - 1 })].userId
})
- return {
- users,
- messages
- }
+ })
+ return {
+ users,
+ messages
+ }
}
diff --git a/modules/countries/test/countries-routes.test.ts b/modules/countries/test/countries-routes.test.ts
index 0710bd6c..1c539ab7 100644
--- a/modules/countries/test/countries-routes.test.ts
+++ b/modules/countries/test/countries-routes.test.ts
@@ -1,12 +1,12 @@
import countriesList from '../data/countries';
import request from 'supertest';
-const baseURL = 'http://localhost:3000';
+import app from '../../../app';
describe('country api endpoints', () => {
describe('GET /countries/', () => {
it('should return a list of countries', async () => {
- const response = await request(baseURL).get(`/countries/`);
+ const response = await request(app).get(`/countries/`);
expect(response.body).toStrictEqual({ countries: [...countriesList] });
});
});
@@ -14,9 +14,7 @@ describe('country api endpoints', () => {
describe('GET /countries/:filterBy?', () => {
it('should return gpb_usd ticker data', async () => {
const filter = 'Afghanistan';
- const response = await request(baseURL).get(`/countries/${filter}`);
- console.log(response.body);
-
+ const response = await request(app).get(`/countries/${filter}`);
expect(response.body.countries[0]).toEqual(filter);
});
});
diff --git a/modules/currency/api/currency-routes.ts b/modules/currency/api/currency-routes.ts
index 4936a82e..b0333ed3 100644
--- a/modules/currency/api/currency-routes.ts
+++ b/modules/currency/api/currency-routes.ts
@@ -4,6 +4,7 @@ import currencySnapshot from '../data/currency-snapshot';
import GBP_USD_TICKER_DATA from '../data/gbp-usd-ticker-data';
import { getQtyFromRequest } from '../../../utils/route-utils';
import getDigitalCurrencyAddress from '../utils/getDigitalCurrencyAddress';
+import getDigitalCurrencyTxList from '../utils/getDigitalCurrencyTxList';
import DigitalCoinEnum from '../consts/DigitalCoinEnum';
module.exports = function (app: core.Express) {
@@ -125,5 +126,40 @@ module.exports = function (app: core.Express) {
const qty = getQtyFromRequest(req);
const addresses = getDigitalCurrencyAddress(qty, DigitalCoinEnum.Litecoin);
res.json(addresses);
- });
-};
+ })
+
+ /**
+ * @openapi
+ * '/currencies/digital-coins/ethereum/tx-list/:address?/:qty?':
+ * get:
+ * tags:
+ * - Currency
+ * summary: Get the list of transactions performed by an address
+ * parameters:
+ * - in: path
+ * name: address
+ * description: The address that performed the transactions
+ * type: string
+ * - in: path
+ * name: qty
+ * description: The number of transactions to be returned
+ * type: number
+ * responses:
+ * '200':
+ * description: OK
+ * schema:
+ * type: json
+ * items:
+ * type: object
+ * example: [{"blockNumber":"27805946","timeStamp":"9942266267","hash":"0xaN6aaOQJX5PFBhXH1RjUlygLdJKqC01qRPC0QbKZ5TIowf7iJnB5DQngiV93jik5","nonce":"18","blockHash":"0xueMI7Aje55ctOTWcCpgMKoyD6Fr5K91uGkaxbpex1gRvKrq3oPyPB5U6qMf7Ia2f","transactionIndex":"5","from":"0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC","to":"0x100807ff56cbc56f4574e515ddbefdbb8d86a7a0","value":"0.1759733580282401","gas":"2270","gasPrice":"573605567923","isError":"0","txreceipt_status":"1","input":"0xKuzGOUc0zN7sGqfFrmhLSsQKz69uZNUbHgSnnTldsCfFBHa682mvwIm2Ly3szQadWJftne0BzIO4obORd3dGKZIXAQ5XEnIveiwQ8ZXwQW9Q1MtnaSh1x5zjJ3Mc4OVHzmNxFMDe","confirmations":"33642"}]
+ */
+
+ //Returns the list of transactions performed by an address
+ app.get("/currencies/digital-coins/ethereum/tx-list/:address?/:qty?", (req: Request, res: Response) => {
+ const address = req.params.address;
+ const qty = getQtyFromRequest(req);
+ const tx_list = getDigitalCurrencyTxList(address, qty);
+ res.json(tx_list);
+ })
+
+}
diff --git a/modules/currency/consts/TransactionInfo.ts b/modules/currency/consts/TransactionInfo.ts
new file mode 100644
index 00000000..a6039378
--- /dev/null
+++ b/modules/currency/consts/TransactionInfo.ts
@@ -0,0 +1,20 @@
+interface transactionInfo {
+ blockNumber: string;
+ timeStamp: string;
+ hash: string;
+ nonce: string;
+ blockHash: string;
+ transactionIndex: string;
+ from: string;
+ to: string;
+ value: string;
+ gas: string;
+ gasPrice: string;
+ isError: string;
+ txreceipt_status: string;
+ input: string;
+ confirmations: string;
+
+}
+
+export default transactionInfo;
\ No newline at end of file
diff --git a/modules/currency/tests/api/currency-routes.test.ts b/modules/currency/tests/api/currency-routes.test.ts
new file mode 100644
index 00000000..a637bca2
--- /dev/null
+++ b/modules/currency/tests/api/currency-routes.test.ts
@@ -0,0 +1,13 @@
+import request from 'supertest';
+import app from '../../../../app';
+
+describe('currency api endpoints', () => {
+ describe('GET /currencies/digital-coins/ethereum/tx-list', () => {
+ it('should return a list of transactions performed by an address', async () => {
+ const qty = 10;
+ const response = await request(app).get(`/currencies/digital-coins/ethereum/tx-list/0xc5102fE9359FD9a28f877a67E36B0F050d81a3CC/${qty}`);
+
+ expect(response.body.length).toBe(qty);
+ });
+ });
+});
\ No newline at end of file
diff --git a/modules/currency/tests/utils/api/currency-routes.test.ts b/modules/currency/tests/utils/api/currency-routes.test.ts
index d2b6b0cf..e6a224d5 100644
--- a/modules/currency/tests/utils/api/currency-routes.test.ts
+++ b/modules/currency/tests/utils/api/currency-routes.test.ts
@@ -1,10 +1,10 @@
import request from 'supertest';
-const baseURL = 'http://localhost:3000';
+import app from '../../../../../app';
describe('currency api endpoints', () => {
describe('GET /currencies/market-overview', () => {
it('should return a currency snapshot', async () => {
- const response = await request(baseURL).get(`/currencies/market-overview`);
+ const response = await request(app).get(`/currencies/market-overview`);
expect(response.body[0]).toHaveProperty('currency');
expect(response.body[0]).toHaveProperty('value');
@@ -15,7 +15,7 @@ describe('currency api endpoints', () => {
describe('GET /currencies/gbp-usd/ticker', () => {
it('should return gpb_usd ticker data', async () => {
- const response = await request(baseURL).get(`/currencies/gbp-usd/ticker`);
+ const response = await request(app).get(`/currencies/gbp-usd/ticker`);
expect(response.body[0]).toHaveProperty('ticker');
});
@@ -24,7 +24,7 @@ describe('currency api endpoints', () => {
describe('GET /currencies/digital-coins/bitcoin/random-address/:qty?', () => {
it('should return a list of bitcoin addresses', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/currencies/digital-coins/bitcoin/random-address/${qty}`);
+ const response = await request(app).get(`/currencies/digital-coins/bitcoin/random-address/${qty}`);
expect(response.body.length).toBe(qty);
});
@@ -33,7 +33,7 @@ describe('currency api endpoints', () => {
describe('GET /currencies/digital-coins/ethereum/random-address/:qty?', () => {
it('should return a list of eth addresses', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/currencies/digital-coins/ethereum/random-address/${qty}`);
+ const response = await request(app).get(`/currencies/digital-coins/ethereum/random-address/${qty}`);
expect(response.body.length).toBe(qty);
});
@@ -42,7 +42,7 @@ describe('currency api endpoints', () => {
describe('GET /currencies/digital-coins/litecoin/random-address/:qty?', () => {
it('should return a list of litecoin addresses', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/currencies/digital-coins/litecoin/random-address/${qty}`);
+ const response = await request(app).get(`/currencies/digital-coins/litecoin/random-address/${qty}`);
expect(response.body.length).toBe(qty);
});
diff --git a/modules/currency/utils/getDigitalCurrencyTxList.ts b/modules/currency/utils/getDigitalCurrencyTxList.ts
new file mode 100644
index 00000000..8231dec2
--- /dev/null
+++ b/modules/currency/utils/getDigitalCurrencyTxList.ts
@@ -0,0 +1,50 @@
+import { faker } from '@faker-js/faker';
+import transactionInfo from '../consts/TransactionInfo';
+
+const getDigitalCurrencyTxList = (address: string, amount: number) : transactionInfo[] => {
+
+ const ETH_TX_LIST = []
+
+ for (let i = 0; i < amount; i++) {
+
+ let transaction: transactionInfo = {
+ blockNumber: (Math.floor(Math.random() * 99999999) + 10000000).toString(),
+ timeStamp: (Math.floor(Math.random() * 9999999999) + 1000000000).toString(),
+ hash: ("0x" + makeid(64)).toString(),
+ nonce: (Math.floor(Math.random() * 30) + 1).toString(),
+ blockHash: "0x" + makeid(64),
+ transactionIndex: (Math.floor(Math.random() * 30) + 1).toString(),
+ from: address,
+ to: faker.finance.ethereumAddress(),
+ value: (Math.random()).toString(),
+ gas: (Math.floor(Math.random() * 9999) + 1000).toString(),
+ gasPrice: (Math.floor(Math.random() * 999999999999) + 100000000000).toString(),
+ isError: "0",
+ txreceipt_status: "1",
+ input: "0x" + makeid(136),
+ confirmations: (Math.floor(Math.random() * 99999) + 100).toString(),
+
+ }
+
+ ETH_TX_LIST.push(transaction)
+
+ }
+
+ return ETH_TX_LIST
+
+
+}
+
+function makeid(length) {
+ var result = '';
+ var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
+ var charactersLength = characters.length;
+ for ( var i = 0; i < length; i++ ) {
+ result += characters.charAt(Math.floor(Math.random() *
+ charactersLength));
+ }
+ return result;
+}
+
+
+export default getDigitalCurrencyTxList;
\ No newline at end of file
diff --git a/modules/ecommerce/api/ecommerce-routes.ts b/modules/ecommerce/api/ecommerce-routes.ts
index 6a6e812a..0de4babe 100644
--- a/modules/ecommerce/api/ecommerce-routes.ts
+++ b/modules/ecommerce/api/ecommerce-routes.ts
@@ -8,41 +8,40 @@ import { getEcommerceCart } from '../utils/get-ecommerce-cart';
* MockEcommerceProduct:
* type: object
* properties:
- * department:
- * type: string
- * example: Computers
- * type:
- * type: string
- * example: Chair
- * name:
- * type: string
- * example: Generic Granite Chair
- * adjective:
- * type: string
- * example: Recycled
- * description:
- * type: string
- * example: Carbonite web goalkeeper gloves are ergonomically designed to give easy fit
- * material:
- * type: string
- * example: Wooden
- * sku:
- * type: array
- * items:
- * type: object
- * properties:
- * meta:
- * type: object
- * properties:
- * size:
- * type: string
- * example: Standard
- * price:
+ * pricePerUnit:
+ * type: number
+ * example: 35.44
+ * quantity:
+ * type: number
+ * example: 3
+ * product:
+ * type: object
+ * properties:
+ * productId:
+ * type: number
+ * example: 1
+ * productName:
+ * type: string
+ * example: Super Gamer Juice
+ * message:
+ * type: string
+ * example: I couldn't have managed my 36 hour stint on Fallout 76, without the 4 litres of Super Gamer Juice I drank
+ * dateTime:
+ * type: string
+ * example: 2020-07-02T20:56:42.244Z
+ * rating:
+ * type: number
+ * example: 4
+ * userName:
+ * type: array
+ * items:
* type: string
- * example: 806.00
- * amount:
- * type: number
- * amount: 49403
+ * example: Myraa
+ * categories:
+ * type: array
+ * items:
+ * type: string
+ * example: sport-drinks
*/
/**
diff --git a/modules/ecommerce/tests/api/ecommerce-routes.test.ts b/modules/ecommerce/tests/api/ecommerce-routes.test.ts
new file mode 100644
index 00000000..72b9f550
--- /dev/null
+++ b/modules/ecommerce/tests/api/ecommerce-routes.test.ts
@@ -0,0 +1,42 @@
+import app from "../../../../app";
+let request = require('supertest');
+
+describe('ecommerce api endpoints', () => {
+ describe('GET /ecommerce/cart', () => {
+ it('should return a random cart with random products', async () => {
+ const response = await request(app).get(`/ecommerce/cart`);
+
+ const cart = response.body;
+
+ expect(cart).toHaveProperty('subtotal');
+ expect(cart).toHaveProperty('couponCode');
+ expect(cart).toHaveProperty('couponPercent');
+ expect(cart).toHaveProperty('couponValue');
+ expect(cart).toHaveProperty('taxPercent');
+ expect(cart).toHaveProperty('taxApplied');
+ expect(cart).toHaveProperty('postageValue');
+ expect(cart).toHaveProperty('total');
+ expect(cart).toHaveProperty('products');
+
+ expect(cart.products[0]).toHaveProperty('pricePerUnit')
+ expect(cart.products[0]).toHaveProperty('quantity')
+
+ expect(cart.products[0].product).toHaveProperty('productName')
+ expect(cart.products[0].product).toHaveProperty('productId')
+ expect(cart.products[0].product).toHaveProperty('message')
+ expect(cart.products[0].product).toHaveProperty('dateTime')
+ expect(cart.products[0].product).toHaveProperty('rating')
+ expect(cart.products[0].product).toHaveProperty('userName')
+ expect(cart.products[0].product).toHaveProperty('categories')
+ });
+ });
+
+ describe('GET /ecommerce/cart/qty', () => {
+ const qty = 2;
+
+ it('should return a random cart with the given quantity of products', async () => {
+ const response = await request(app).get(`/ecommerce/cart/${qty}`);
+ expect(response.body.products.length).toEqual(qty);
+ });
+ });
+});
\ No newline at end of file
diff --git a/modules/elements/tests/api/elements-routes.test.ts b/modules/elements/tests/api/elements-routes.test.ts
index 82b623ea..26c66e01 100644
--- a/modules/elements/tests/api/elements-routes.test.ts
+++ b/modules/elements/tests/api/elements-routes.test.ts
@@ -1,11 +1,11 @@
-import request = require('supertest');
-const baseURL = 'http://localhost:3000';
+import request from 'supertest';
+import app from '../../../../app';
// elements-routes.ts tests
describe('elements api endpoints', () => {
describe('GET /elements', () => {
it('should return a random element', async () => {
- const response = await request(baseURL).get(`/elements`);
+ const response = await request(app).get(`/elements`);
expect(response.body).toHaveProperty('symbol');
expect(response.body).toHaveProperty('name');
@@ -16,7 +16,7 @@ describe('elements api endpoints', () => {
// elements/:qty
describe('GET /elements/:qty', () => {
it('should return a list of random elements', async () => {
- const response = await request(baseURL).get(`/elements/3`);
+ const response = await request(app).get(`/elements/3`);
expect(response.body).toBeInstanceOf(Array);
expect(response.body.length).toBe(3);
diff --git a/modules/emails/tests/api/emails-routes.test.ts b/modules/emails/tests/api/emails-routes.test.ts
index 97e5b840..6aac889f 100644
--- a/modules/emails/tests/api/emails-routes.test.ts
+++ b/modules/emails/tests/api/emails-routes.test.ts
@@ -1,11 +1,10 @@
-import request = require('supertest');
-const baseURL = 'http://localhost:3000';
-
+import request from 'supertest';
+import app from '../../../../app';
// emails-routes.ts tests
describe('emails api endpoints', () => {
describe('GET /emails', () => {
it('should return a list of emails', async () => {
- const response = await request(baseURL).get(`/emails`);
+ const response = await request(app).get(`/emails`).expect(200).expect('Content-Type', /json/);
expect(response.body[0]).toHaveProperty('id');
expect(response.body[0]).toHaveProperty('from');
diff --git a/modules/images/tests/Api/images-routes.test.ts b/modules/images/tests/Api/images-routes.test.ts
index 4f41e225..d309a1cc 100644
--- a/modules/images/tests/Api/images-routes.test.ts
+++ b/modules/images/tests/Api/images-routes.test.ts
@@ -1,6 +1,6 @@
import request from 'supertest';
+import app from '../../../../app';
-const baseURL = 'http://localhost:3000';
const get_width_height = (str: string): string[] => {
const width_height_regex = /\d+\/\d+/;
@@ -14,11 +14,9 @@ describe('image api endpoints', () => {
const width = 200;
const height = 200;
const qty = 2;
-
- const response = await request(baseURL).get(`/images/abstract/${width}/${height}/${qty}}`);
+ const response = await request(app).get(`/images/abstract/${width}/${height}/${qty}}`);
expect(response.body.length).toBe(qty);
const width_height = get_width_height(response.body[0]);
-
expect(width_height[0]).toEqual(width.toString());
expect(width_height[1]).toEqual(height.toString());
});
@@ -29,11 +27,9 @@ describe('image api endpoints', () => {
const width = 200;
const height = 200;
const qty = 2;
-
- const response = await request(baseURL).get(`/images/animals/${width}/${height}/${qty}}`);
+ const response = await request(app).get(`/images/animals/${width}/${height}/${qty}}`);
expect(response.body.length).toBe(qty);
const width_height = get_width_height(response.body[0]);
-
expect(width_height[0]).toEqual(width.toString());
expect(width_height[1]).toEqual(height.toString());
});
@@ -45,14 +41,9 @@ describe('image api endpoints', () => {
const width = 200;
const height = 200;
const qty = 2;
-
- const response = await request(baseURL).get(`/images/avatar/${width}/${height}/${qty}}`);
-
- console.log(response.body);
-
+ const response = await request(app).get(`/images/avatar/${width}/${height}/${qty}}`);
expect(response.body.length).toBe(qty);
const width_height = get_width_height(response.body[0]);
-
expect(width_height[0]).toEqual(width.toString());
expect(width_height[1]).toEqual(height.toString());
});
@@ -63,11 +54,9 @@ describe('image api endpoints', () => {
const width = 200;
const height = 200;
const qty = 2;
-
- const response = await request(baseURL).get(`/images/business/${width}/${height}/${qty}}`);
+ const response = await request(app).get(`/images/business/${width}/${height}/${qty}}`);
expect(response.body.length).toBe(qty);
const width_height = get_width_height(response.body[0]);
-
expect(width_height[0]).toEqual(width.toString());
expect(width_height[1]).toEqual(height.toString());
});
@@ -78,11 +67,9 @@ describe('image api endpoints', () => {
const width = 200;
const height = 200;
const qty = 2;
-
- const response = await request(baseURL).get(`/images/cats/${width}/${height}/${qty}}`);
+ const response = await request(app).get(`/images/cats/${width}/${height}/${qty}}`);
expect(response.body.length).toBe(qty);
const width_height = get_width_height(response.body[0]);
-
expect(width_height[0]).toEqual(width.toString());
expect(width_height[1]).toEqual(height.toString());
});
@@ -93,11 +80,9 @@ describe('image api endpoints', () => {
const width = 200;
const height = 200;
const qty = 2;
-
- const response = await request(baseURL).get(`/images/city/${width}/${height}/${qty}}`);
+ const response = await request(app).get(`/images/city/${width}/${height}/${qty}}`);
expect(response.body.length).toBe(qty);
const width_height = get_width_height(response.body[0]);
-
expect(width_height[0]).toEqual(width.toString());
expect(width_height[1]).toEqual(height.toString());
});
@@ -108,11 +93,9 @@ describe('image api endpoints', () => {
const width = 200;
const height = 200;
const qty = 2;
-
- const response = await request(baseURL).get(`/images/fashion/${width}/${height}/${qty}}`);
+ const response = await request(app).get(`/images/fashion/${width}/${height}/${qty}}`);
expect(response.body.length).toBe(qty);
const width_height = get_width_height(response.body[0]);
-
expect(width_height[0]).toEqual(width.toString());
expect(width_height[1]).toEqual(height.toString());
});
@@ -123,11 +106,9 @@ describe('image api endpoints', () => {
const width = 200;
const height = 200;
const qty = 2;
-
- const response = await request(baseURL).get(`/images/food/${width}/${height}/${qty}}`);
+ const response = await request(app).get(`/images/food/${width}/${height}/${qty}}`);
expect(response.body.length).toBe(qty);
const width_height = get_width_height(response.body[0]);
-
expect(width_height[0]).toEqual(width.toString());
expect(width_height[1]).toEqual(height.toString());
});
@@ -138,11 +119,9 @@ describe('image api endpoints', () => {
const width = 200;
const height = 200;
const qty = 2;
-
- const response = await request(baseURL).get(`/images/nature/${width}/${height}/${qty}}`);
+ const response = await request(app).get(`/images/nature/${width}/${height}/${qty}}`);
expect(response.body.length).toBe(qty);
const width_height = get_width_height(response.body[0]);
-
expect(width_height[0]).toEqual(width.toString());
expect(width_height[1]).toEqual(height.toString());
});
@@ -153,11 +132,9 @@ describe('image api endpoints', () => {
const width = 200;
const height = 200;
const qty = 2;
-
- const response = await request(baseURL).get(`/images/nightlife/${width}/${height}/${qty}}`);
+ const response = await request(app).get(`/images/nightlife/${width}/${height}/${qty}}`);
expect(response.body.length).toBe(qty);
const width_height = get_width_height(response.body[0]);
-
expect(width_height[0]).toEqual(width.toString());
expect(width_height[1]).toEqual(height.toString());
});
@@ -168,11 +145,9 @@ describe('image api endpoints', () => {
const width = 200;
const height = 200;
const qty = 2;
-
- const response = await request(baseURL).get(`/images/people/${width}/${height}/${qty}}`);
+ const response = await request(app).get(`/images/people/${width}/${height}/${qty}}`);
expect(response.body.length).toBe(qty);
const width_height = get_width_height(response.body[0]);
-
expect(width_height[0]).toEqual(width.toString());
expect(width_height[1]).toEqual(height.toString());
});
@@ -183,11 +158,9 @@ describe('image api endpoints', () => {
const width = 200;
const height = 200;
const qty = 2;
-
- const response = await request(baseURL).get(`/images/sports/${width}/${height}/${qty}}`);
+ const response = await request(app).get(`/images/sports/${width}/${height}/${qty}}`);
expect(response.body.length).toBe(qty);
const width_height = get_width_height(response.body[0]);
-
expect(width_height[0]).toEqual(width.toString());
expect(width_height[1]).toEqual(height.toString());
});
@@ -198,11 +171,9 @@ describe('image api endpoints', () => {
const width = 200;
const height = 200;
const qty = 2;
-
- const response = await request(baseURL).get(`/images/technics/${width}/${height}/${qty}}`);
+ const response = await request(app).get(`/images/technics/${width}/${height}/${qty}}`);
expect(response.body.length).toBe(qty);
const width_height = get_width_height(response.body[0]);
-
expect(width_height[0]).toEqual(width.toString());
expect(width_height[1]).toEqual(height.toString());
});
@@ -213,11 +184,9 @@ describe('image api endpoints', () => {
const width = 200;
const height = 200;
const qty = 2;
-
- const response = await request(baseURL).get(`/images/transport/${width}/${height}/${qty}}`);
+ const response = await request(app).get(`/images/transport/${width}/${height}/${qty}}`);
expect(response.body.length).toBe(qty);
const width_height = get_width_height(response.body[0]);
-
expect(width_height[0]).toEqual(width.toString());
expect(width_height[1]).toEqual(height.toString());
});
diff --git a/modules/invoice/test/invoices-routes.test.ts b/modules/invoice/test/invoices-routes.test.ts
index 877ca241..9c005f03 100644
--- a/modules/invoice/test/invoices-routes.test.ts
+++ b/modules/invoice/test/invoices-routes.test.ts
@@ -1,12 +1,12 @@
import request from 'supertest';
import Invoice from '../consts/Invoice';
+import app from '../../../app';
-const baseURL = 'http://localhost:3000';
describe('invoice api endpoints', () => {
describe('GET /invoices/', () => {
it('should return a invoice', async () => {
- const response = await request(baseURL).get(`/invoices/`);
+ const response = await request(app).get(`/invoices/`);
const invoice: Invoice = response.body[0];
expect(invoice).toHaveProperty('id');
@@ -34,7 +34,7 @@ describe('invoice api endpoints', () => {
it('should return a list of invoices', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/invoices/${qty}`);
+ const response = await request(app).get(`/invoices/${qty}`);
expect(response.body.length).toEqual(qty);
});
});
diff --git a/modules/ip/api/ip-routes.ts b/modules/ip/api/ip-routes.ts
index f6c3af82..74710200 100644
--- a/modules/ip/api/ip-routes.ts
+++ b/modules/ip/api/ip-routes.ts
@@ -20,7 +20,7 @@ module.exports = function (app: core.Express) {
* '/ip/{qty}':
* get:
* tags:
- * - Products
+ * - IPs
* summary: Returns a random list of ip addresses
* parameters:
* - in: path
@@ -75,7 +75,7 @@ module.exports = function (app: core.Express) {
* '/mac/{qty}':
* get:
* tags:
- * - Products
+ * - IPs
* summary: Returns a random list of mac addresses
* parameters:
* - in: path
diff --git a/modules/ip/tests/ip-routes.tests.ts b/modules/ip/tests/ip-routes.tests.ts
index 52f72321..3a4568e1 100644
--- a/modules/ip/tests/ip-routes.tests.ts
+++ b/modules/ip/tests/ip-routes.tests.ts
@@ -1,13 +1,13 @@
import request from 'supertest';
+import app from '../../../app';
-const baseURL = 'http://localhost:3000';
describe('ip api endpoints', () => {
describe('GET /ip/:qty', () => {
it('should return a list of ip address', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/ip/${qty}`);
+ const response = await request(app).get(`/ip/${qty}`);
expect(response.body.length).toEqual(qty);
});
});
@@ -16,7 +16,7 @@ describe('GET /mac/:qty', () => {
it('should return a list of mac address', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/mac/${qty}`);
+ const response = await request(app).get(`/mac/${qty}`);
expect(response.body.length).toEqual(qty);
});
});
diff --git a/modules/location/api/location-routes.ts b/modules/location/api/location-routes.ts
new file mode 100644
index 00000000..8e17c7a4
--- /dev/null
+++ b/modules/location/api/location-routes.ts
@@ -0,0 +1,102 @@
+import e, { Request, Response } from 'express';
+import * as core from 'express-serve-static-core';
+import { getRandomCoordinates, getCountryCoordinates } from '../utils/getCoordinates';
+import centroids from '../consts/centroids';
+import { getQtyFromRequest } from '../../../utils/route-utils';
+
+module.exports = function (app: core.Express) {
+ /**
+ * @openapi
+ * '/location/co-ordinates/random/{qty}':
+ * get:
+ * tags:
+ * - Coordinates
+ * summary: Obtain random coordinates
+ * parameters:
+ * - in: path
+ * name: qty
+ * description: The amount of coordinates you require
+ * type: string
+ * default: 0
+ * responses:
+ * '200':
+ * description: OK
+ * schema:
+ * type: array
+ * items:
+ * type: object
+ * example: {longitude: '-0.1277583', latitude: '51.5073509'}
+ */
+
+ // return a random Coordinates
+ app.get('/location/co-ordinates/random/:qty', (req: Request, res: Response) => {
+ const quantity = getQtyFromRequest(req);
+
+ if (isNaN(quantity)) {
+ return res.status(400).json('Unable to provide a random list of Coordinates with the value received');
+ }
+
+ const listElements = [];
+ for (let i = 0; i < quantity; i++) {
+ listElements.push(getRandomCoordinates());
+ }
+
+ res.json(listElements);
+ });
+
+ /**
+ * @openapi
+ * '/location/co-ordinates/country/{code}/{qty}':
+ * get:
+ * tags:
+ * - Coordinates
+ * summary: Obtain random coordinates from a specified country
+ * parameters:
+ * - in: path
+ * name: code
+ * description: The Country code of the country you require coordinates
+ * - in: path
+ * name: qty
+ * description: The amount of coordinates you require
+ * type: string
+ * default: 0
+ * responses:
+ * '200':
+ * description: OK
+ * schema:
+ * type: array
+ * items:
+ * type: object
+ * example: {longitude: '23.5688', latitude: '78.5512', country: "India"}
+ */
+
+ // return a random Coordinates for a specified country
+ app.get('/location/co-ordinates/country/:code/:qty', (req: Request, res: Response) => {
+ const quantity = getQtyFromRequest(req);
+ const code = (req.params?.code).toUpperCase();
+
+ if (isNaN(quantity)) {
+ return res.status(400).json('Unable to provide a random list of Coordinates with the value received');
+ }
+
+ if (code.length !== 2) {
+ return res.status(400).json('Country code should be of the length 2 characters');
+ }
+
+ if (!RegExp(/^\p{L}/, 'u').test(code)) {
+ return res.status(400).json('Country code should be a character string');
+ }
+
+ const countryArray = Object.keys(centroids);
+ if (!countryArray.includes(code)) {
+ return res.status(200).json('Not able generate coordinates for the provided country code');
+ }
+
+ const listElements = [];
+ for (let i = 0; i < quantity; i++) {
+ listElements.push(getCountryCoordinates(code));
+ }
+
+ res.json(listElements);
+ });
+};
diff --git a/modules/location/consts/centroids.ts b/modules/location/consts/centroids.ts
new file mode 100644
index 00000000..91334ef4
--- /dev/null
+++ b/modules/location/consts/centroids.ts
@@ -0,0 +1,1069 @@
+const centroids = {
+ NU: {
+ longitude: -169.86878106699083,
+ latitude: -19.05230921680393,
+ country: 'Niue',
+ },
+ PN: {
+ longitude: -128.3149848627581,
+ latitude: -24.366121747565458,
+ country: 'Pitcairn',
+ },
+ WS: {
+ longitude: -172.44107655740137,
+ latitude: -13.634252953274622,
+ country: 'Samoa',
+ },
+ TO: {
+ longitude: -175.20415878511247,
+ latitude: -21.15927212823853,
+ country: 'Tonga',
+ },
+ SV: {
+ longitude: -88.85911489238985,
+ latitude: 13.758041517055418,
+ country: 'El Salvador',
+ },
+ GT: {
+ longitude: -90.31219349119617,
+ latitude: 15.820878515352684,
+ country: 'Guatemala',
+ },
+ MX: {
+ longitude: -101.55399731630118,
+ latitude: 23.87436068093592,
+ country: 'Mexico',
+ },
+ CA: {
+ longitude: -98.41680517868062,
+ latitude: 57.550480044655636,
+ country: 'Canada',
+ },
+ AR: {
+ longitude: -64.53238503843076,
+ latitude: -35.697270518120085,
+ country: 'Argentina',
+ },
+ FK: {
+ longitude: -58.746646363799854,
+ latitude: -51.75901312766726,
+ country: 'Falkland Islands',
+ },
+ CL: {
+ longitude: -70.76863431739216,
+ latitude: -37.82938283049967,
+ country: 'Chile',
+ },
+ EC: {
+ longitude: -78.4630326109714,
+ latitude: -1.5642721388853116,
+ country: 'Ecuador',
+ },
+ PE: {
+ longitude: -74.11416196781884,
+ latitude: -8.522717984240291,
+ country: 'Peru',
+ },
+ BO: {
+ longitude: -64.45209597511206,
+ latitude: -16.7312488393574,
+ country: 'Bolivia',
+ },
+ BR: {
+ longitude: -54.355206608256424,
+ latitude: -11.524630416426652,
+ country: 'Brazil',
+ },
+ PY: {
+ longitude: -58.38906357428651,
+ latitude: -23.42190559259428,
+ country: 'Paraguay',
+ },
+ UY: {
+ longitude: -56.01919523458085,
+ latitude: -32.78195043831093,
+ country: 'Uruguay',
+ },
+ AQ: {
+ longitude: -177.56451613408842,
+ latitude: -77.16987521415838,
+ country: 'Antarctica',
+ },
+ FJ: {
+ longitude: 177.98144613732626,
+ latitude: -17.822470952336204,
+ country: 'Fiji',
+ },
+ AG: {
+ longitude: -61.78530823226373,
+ latitude: 17.07146759372967,
+ country: 'Antigua and Barbuda',
+ },
+ AW: {
+ longitude: -69.97564014284046,
+ latitude: 12.515625722992898,
+ country: 'Aruba',
+ },
+ BS: {
+ longitude: -78.07275370060313,
+ latitude: 24.72162633646784,
+ country: 'Bahamas',
+ },
+ BB: {
+ longitude: -59.557383949150285,
+ latitude: 13.183219369337529,
+ country: 'Barbados',
+ },
+ BM: {
+ longitude: -64.7458500599169,
+ latitude: 32.315067430740726,
+ country: 'Bermuda',
+ },
+ VG: {
+ longitude: -64.62406519257699,
+ latitude: 18.42195819619707,
+ country: 'British Virgin Islands',
+ },
+ KY: {
+ longitude: -81.25203208977878,
+ latitude: 19.311231805620288,
+ country: 'Cayman Islands',
+ },
+ CO: {
+ longitude: -72.6445066243485,
+ latitude: 4.187753877352739,
+ country: 'Colombia',
+ },
+ CR: {
+ longitude: -84.14673625701816,
+ latitude: 9.863467407406214,
+ country: 'Costa Rica',
+ },
+ CU: {
+ longitude: -79.69817857618705,
+ latitude: 21.476176522869448,
+ country: 'Cuba',
+ },
+ DM: {
+ longitude: -61.360471946942994,
+ latitude: 15.429269860940513,
+ country: 'Dominica',
+ },
+ DO: {
+ longitude: -70.43495198520012,
+ latitude: 18.77954818522993,
+ country: 'Dominican Republic',
+ },
+ GF: {
+ longitude: -53.32232307156624,
+ latitude: 3.857429742497078,
+ country: 'French Guiana',
+ },
+ HT: {
+ longitude: -72.89291379842,
+ latitude: 18.883520486983567,
+ country: 'Haiti',
+ },
+ HN: {
+ longitude: -86.49251679006962,
+ latitude: 14.740370695750006,
+ country: 'Honduras',
+ },
+ JM: {
+ longitude: -77.30358894542778,
+ latitude: 18.12207889341651,
+ country: 'Jamaica',
+ },
+ MQ: {
+ longitude: -61.01432380875083,
+ latitude: 14.642697353597645,
+ country: 'Martinique',
+ },
+ MS: {
+ longitude: -62.18693281256255,
+ latitude: 16.735363391460357,
+ country: 'Montserrat',
+ },
+ NI: {
+ longitude: -85.016088327669,
+ latitude: 12.893566631930554,
+ country: 'Nicaragua',
+ },
+ PA: {
+ longitude: -80.14428761482796,
+ latitude: 8.439536749576892,
+ country: 'Panama',
+ },
+ PR: {
+ longitude: -66.49425339593509,
+ latitude: 18.216224086610914,
+ country: 'Puerto Rico',
+ },
+ LC: {
+ longitude: -60.9689510935251,
+ latitude: 13.895749185129906,
+ country: 'Saint Lucia',
+ },
+ MF: {
+ longitude: -63.06678525361946,
+ latitude: 18.078012113224464,
+ country: 'Saint Martin',
+ },
+ VC: {
+ longitude: -61.193766354393034,
+ latitude: 13.254808122970651,
+ country: 'Saint Vincent and the Grenadines',
+ },
+ SX: {
+ longitude: -63.06883135915303,
+ latitude: 18.03942608463078,
+ country: 'Sint Maarten',
+ },
+ TT: {
+ longitude: -61.37236579976247,
+ latitude: 10.415515638298093,
+ country: 'Trinidad and Tobago',
+ },
+ VI: {
+ longitude: -64.76155341409797,
+ latitude: 17.738009708772523,
+ country: 'US Virgin Islands',
+ },
+ VE: {
+ longitude: -66.36492135985132,
+ latitude: 7.148324760507107,
+ country: 'Venezuela',
+ },
+ BF: {
+ longitude: -1.6932816211842325,
+ latitude: 12.108709036312737,
+ country: 'Burkina Faso',
+ },
+ CI: {
+ longitude: -5.571710194917734,
+ latitude: 7.536779279421307,
+ country: "Côte d'Ivoire",
+ },
+ GM: {
+ longitude: -15.383380385869662,
+ latitude: 13.428617959189328,
+ country: 'Gambia',
+ },
+ GH: {
+ longitude: -1.219233362526581,
+ latitude: 7.94530467243628,
+ country: 'Ghana',
+ },
+ GI: {
+ longitude: -5.345549484594358,
+ latitude: 36.14022671336082,
+ country: 'Gibraltar',
+ },
+ GN: {
+ longitude: -10.986948848040218,
+ latitude: 10.255986541378112,
+ country: 'Guinea',
+ },
+ LR: {
+ longitude: -9.258988935497618,
+ latitude: 6.52012979398834,
+ country: 'Liberia',
+ },
+ ML: {
+ longitude: -4.346399841781153,
+ latitude: 17.168146208584837,
+ country: 'Mali',
+ },
+ MR: {
+ longitude: -10.495079045035716,
+ latitude: 20.466731212820022,
+ country: 'Mauritania',
+ },
+ MA: {
+ longitude: -8.817212587250811,
+ latitude: 28.687598134979325,
+ country: 'Morocco',
+ },
+ PT: {
+ longitude: -7.933662183874006,
+ latitude: 39.67529214702138,
+ country: 'Portugal',
+ },
+ SN: {
+ longitude: -14.610875368352305,
+ latitude: 14.228861491763402,
+ country: 'Senegal',
+ },
+ SL: {
+ longitude: -11.78656695731115,
+ latitude: 8.561330384750587,
+ country: 'Sierra Leone',
+ },
+ GL: {
+ longitude: -42.07567788066985,
+ latitude: 74.16847218965994,
+ country: 'Greenland',
+ },
+ GG: {
+ longitude: -2.576392582891568,
+ latitude: 49.45870771378872,
+ country: 'Guernsey',
+ },
+ IE: {
+ longitude: -8.241128545554096,
+ latitude: 53.30489539816495,
+ country: 'Ireland',
+ },
+ IM: {
+ longitude: -4.532995055468449,
+ latitude: 54.22855301008011,
+ country: 'Isle of Man',
+ },
+ JE: {
+ longitude: -2.1291601162653575,
+ latitude: 49.215396925724306,
+ country: 'Jersey',
+ },
+ GB: {
+ longitude: -2.852943909329258,
+ latitude: 53.97844735080214,
+ country: 'United Kingdom',
+ },
+ IS: {
+ longitude: -19.05682967106099,
+ latitude: 65.12360920205514,
+ country: 'Iceland',
+ },
+ FO: {
+ longitude: -6.9811060913122835,
+ latitude: 62.130896281495346,
+ country: 'Faroe Islands',
+ },
+ SJ: {
+ longitude: 16.036378851505283,
+ latitude: 78.57318936469626,
+ country: 'Svalbard',
+ },
+ NZ: {
+ longitude: 170.69035541428696,
+ latitude: -43.82765432544426,
+ country: 'New Zealand',
+ },
+ AO: {
+ longitude: 17.651768783079,
+ latitude: -12.167424062667942,
+ country: 'Angola',
+ },
+ BW: {
+ longitude: 23.85779956995608,
+ latitude: -22.236609002062902,
+ country: 'Botswana',
+ },
+ BI: {
+ longitude: 29.88518227845293,
+ latitude: -3.261251993278643,
+ country: 'Burundi',
+ },
+ CG: {
+ longitude: 14.879732849491393,
+ latitude: -0.7294391595233845,
+ country: 'Congo',
+ },
+ CD: {
+ longitude: 23.419827574282188,
+ latitude: -3.338629596207896,
+ country: 'Congo DRC',
+ },
+ GA: {
+ longitude: 11.839410898545754,
+ latitude: -0.628448459921234,
+ country: 'Gabon',
+ },
+ KE: {
+ longitude: 37.95309411262371,
+ latitude: 0.6899182318376179,
+ country: 'Kenya',
+ },
+ LS: {
+ longitude: 28.24475317864227,
+ latitude: -29.60168116924817,
+ country: 'Lesotho',
+ },
+ MW: {
+ longitude: 34.23441182298881,
+ latitude: -13.128986464184024,
+ country: 'Malawi',
+ },
+ MZ: {
+ longitude: 35.208577031290176,
+ latitude: -17.525230309488748,
+ country: 'Mozambique',
+ },
+ NA: {
+ longitude: 18.16451345845268,
+ latitude: -21.90858163281473,
+ country: 'Namibia',
+ },
+ RW: {
+ longitude: 29.919439681764082,
+ latitude: -2.014687460047154,
+ country: 'Rwanda',
+ },
+ ZA: {
+ longitude: 24.75252746489084,
+ latitude: -28.55361930679731,
+ country: 'South Africa',
+ },
+ SZ: {
+ longitude: 31.510685746082007,
+ latitude: -26.562540935608702,
+ country: 'Eswatini',
+ },
+ TZ: {
+ longitude: 34.81832206060381,
+ latitude: -6.355794440041147,
+ country: 'Tanzania',
+ },
+ ZM: {
+ longitude: 27.75521363430896,
+ latitude: -13.162832953186246,
+ country: 'Zambia',
+ },
+ ZW: {
+ longitude: 29.717829640720844,
+ latitude: -18.92700121981475,
+ country: 'Zimbabwe',
+ },
+ IO: {
+ longitude: 72.43501618476016,
+ latitude: -7.323548444385743,
+ country: 'British Indian Ocean Territory',
+ },
+ HM: {
+ longitude: 73.49298560844045,
+ latitude: -53.084170035513736,
+ country: 'Heard Island and McDonald Islands',
+ },
+ MG: {
+ longitude: 46.68493466832544,
+ latitude: -19.04163612493041,
+ country: 'Madagascar',
+ },
+ MU: {
+ longitude: 57.56415671066546,
+ latitude: -20.28142317475198,
+ country: 'Mauritius',
+ },
+ YT: {
+ longitude: 45.128142327031064,
+ latitude: -12.824468416301052,
+ country: 'Mayotte',
+ },
+ SC: {
+ longitude: 55.47250789595527,
+ latitude: -4.660002318822744,
+ country: 'Seychelles',
+ },
+ DZ: {
+ longitude: 2.6558464719769135,
+ latitude: 28.350969744889056,
+ country: 'Algeria',
+ },
+ BJ: {
+ longitude: 2.305714528830206,
+ latitude: 9.503013199615893,
+ country: 'Benin',
+ },
+ CM: {
+ longitude: 12.948474142398263,
+ latitude: 6.294168487480992,
+ country: 'Cameroon',
+ },
+ CF: {
+ longitude: 20.520743419397256,
+ latitude: 6.331390033944319,
+ country: 'Central African Republic',
+ },
+ TD: {
+ longitude: 18.427113900363025,
+ latitude: 15.283493546654503,
+ country: 'Chad',
+ },
+ GQ: {
+ longitude: 10.425456672353823,
+ latitude: 1.5954643936590733,
+ country: 'Equatorial Guinea',
+ },
+ LY: {
+ longitude: 17.91133392454237,
+ latitude: 27.202915771690794,
+ country: 'Libya',
+ },
+ MT: {
+ longitude: 14.441922442508494,
+ latitude: 35.890522650899314,
+ country: 'Malta',
+ },
+ NE: {
+ longitude: 8.86863247002646,
+ latitude: 17.08105392407292,
+ country: 'Niger',
+ },
+ NG: {
+ longitude: 8.147714845256194,
+ latitude: 9.61029352034213,
+ country: 'Nigeria',
+ },
+ TG: {
+ longitude: 0.8990857571109684,
+ latitude: 8.660743037717811,
+ country: 'Togo',
+ },
+ TN: {
+ longitude: 9.65587551697984,
+ latitude: 34.08636179565723,
+ country: 'Tunisia',
+ },
+ CY: {
+ longitude: 33.375346009199205,
+ latitude: 35.11700416345239,
+ country: 'Cyprus',
+ },
+ DJ: {
+ longitude: 42.613496898789506,
+ latitude: 11.750235727618804,
+ country: 'Djibouti',
+ },
+ EG: {
+ longitude: 30.240135435012338,
+ latitude: 26.60517034450628,
+ country: 'Egypt',
+ },
+ ER: {
+ longitude: 39.2672401449901,
+ latitude: 15.005533147667684,
+ country: 'Eritrea',
+ },
+ ET: {
+ longitude: 39.914902886544276,
+ latitude: 8.729389557048396,
+ country: 'Ethiopia',
+ },
+ GR: {
+ longitude: 23.110368936161876,
+ latitude: 39.42012261727978,
+ country: 'Greece',
+ },
+ IQ: {
+ longitude: 43.832529181056884,
+ latitude: 33.105075667527906,
+ country: 'Iraq',
+ },
+ IL: {
+ longitude: 35.027923472437024,
+ latitude: 31.513542220043195,
+ country: 'Israel',
+ },
+ JO: {
+ longitude: 36.95728884547246,
+ latitude: 31.387064884449156,
+ country: 'Jordan',
+ },
+ LB: {
+ longitude: 35.89651946324749,
+ latitude: 33.91160170722086,
+ country: 'Lebanon',
+ },
+ PS: {
+ longitude: 35.24251184154588,
+ latitude: 31.930818736453883,
+ country: 'Palestinian Territory',
+ },
+ SS: {
+ longitude: 30.3851856901788,
+ latitude: 7.657782041763295,
+ country: 'South Sudan',
+ },
+ SD: {
+ longitude: 29.951458283594064,
+ latitude: 15.67060230984256,
+ country: 'Sudan',
+ },
+ SY: {
+ longitude: 38.5117323139514,
+ latitude: 35.09751106058316,
+ country: 'Syria',
+ },
+ TR: {
+ longitude: 35.56886764076691,
+ latitude: 38.93207363123396,
+ country: 'Turkey',
+ },
+ UG: {
+ longitude: 32.34371768463123,
+ latitude: 1.2821729218416205,
+ country: 'Uganda',
+ },
+ AD: {
+ longitude: 1.5802243611232873,
+ latitude: 42.54859834854764,
+ country: 'Andorra',
+ },
+ US: {
+ longitude: -96.33161660829639,
+ latitude: 38.8208089190304,
+ country: 'United States',
+ },
+ FR: {
+ longitude: 2.1940236627886227,
+ latitude: 46.6423682169416,
+ country: 'France',
+ },
+ LI: {
+ longitude: 9.547674672376376,
+ latitude: 47.14627562133036,
+ country: 'Liechtenstein',
+ },
+ MC: {
+ longitude: 7.412820873271196,
+ latitude: 43.74798224995656,
+ country: 'Monaco',
+ },
+ CH: {
+ longitude: 8.286928794895285,
+ latitude: 46.73678128684938,
+ country: 'Switzerland',
+ },
+ BE: {
+ longitude: 4.675010154696485,
+ latitude: 50.6182138854095,
+ country: 'Belgium',
+ },
+ DE: {
+ longitude: 10.426171427430804,
+ latitude: 51.08304539800482,
+ country: 'Germany',
+ },
+ LU: {
+ longitude: 6.103230338458876,
+ latitude: 49.77523454542369,
+ country: 'Luxembourg',
+ },
+ NL: {
+ longitude: 5.554136426128487,
+ latitude: 52.134054128923886,
+ country: 'Netherlands',
+ },
+ AL: {
+ longitude: 20.061082767269493,
+ latitude: 41.14165894891656,
+ country: 'Albania',
+ },
+ AT: {
+ longitude: 13.797778364631036,
+ latitude: 47.631858269895794,
+ country: 'Austria',
+ },
+ BA: {
+ longitude: 17.83467240787538,
+ latitude: 44.14415356126429,
+ country: 'Bosnia and Herzegovina',
+ },
+ HR: {
+ longitude: 16.625761129583374,
+ latitude: 44.91192100856702,
+ country: 'Croatia',
+ },
+ CZ: {
+ longitude: 15.383273292023533,
+ latitude: 49.74917370930982,
+ country: 'Czech Republic',
+ },
+ DK: {
+ longitude: 9.378670542409406,
+ latitude: 56.00118817971057,
+ country: 'Denmark',
+ },
+ HU: {
+ longitude: 19.39620048366142,
+ latitude: 47.22527332486294,
+ country: 'Hungary',
+ },
+ IT: {
+ longitude: 12.763657166123137,
+ latitude: 42.98201127614267,
+ country: 'Italy',
+ },
+ ME: {
+ longitude: 19.29505087156758,
+ latitude: 42.73694835210454,
+ country: 'Montenegro',
+ },
+ PL: {
+ longitude: 19.43573279234468,
+ latitude: 52.06848055692473,
+ country: 'Poland',
+ },
+ SM: {
+ longitude: 12.461278349581722,
+ latitude: 43.942820729097896,
+ country: 'San Marino',
+ },
+ RS: {
+ longitude: 20.85677444395745,
+ latitude: 44.02679870131969,
+ country: 'Serbia',
+ },
+ SK: {
+ longitude: 19.581015362490966,
+ latitude: 48.69808390520484,
+ country: 'Slovakia',
+ },
+ SI: {
+ longitude: 14.890636899973781,
+ latitude: 46.13759229564504,
+ country: 'Slovenia',
+ },
+ MK: {
+ longitude: 21.70998923872772,
+ latitude: 41.59402890143112,
+ country: 'North Macedonia',
+ },
+ VA: {
+ longitude: 12.451312917026133,
+ latitude: 41.90402351316735,
+ country: 'Vatican City',
+ },
+ NO: {
+ longitude: 16.670259272390894,
+ latitude: 64.97775882947745,
+ country: 'Norway',
+ },
+ SE: {
+ longitude: 17.062431988004956,
+ latitude: 62.73420986108448,
+ country: 'Sweden',
+ },
+ BY: {
+ longitude: 27.964252054715104,
+ latitude: 53.46791374543163,
+ country: 'Belarus',
+ },
+ BG: {
+ longitude: 25.251739122561908,
+ latitude: 42.82043677302438,
+ country: 'Bulgaria',
+ },
+ EE: {
+ longitude: 25.916870250633806,
+ latitude: 58.648108311231034,
+ country: 'Estonia',
+ },
+ FI: {
+ longitude: 25.65738433454702,
+ latitude: 65.01578959749911,
+ country: 'Finland',
+ },
+ GE: {
+ longitude: 43.378866534112234,
+ latitude: 42.17986277737226,
+ country: 'Georgia',
+ },
+ LV: {
+ longitude: 24.693671325654403,
+ latitude: 56.813853047554154,
+ country: 'Latvia',
+ },
+ LT: {
+ longitude: 23.946021605013534,
+ latitude: 55.29437393417175,
+ country: 'Lithuania',
+ },
+ MD: {
+ longitude: 28.391111865941348,
+ latitude: 47.0725674580696,
+ country: 'Moldova',
+ },
+ RO: {
+ longitude: 25.094158201563292,
+ latitude: 45.82454894397586,
+ country: 'Romania',
+ },
+ UA: {
+ longitude: 31.27377208442636,
+ latitude: 48.657532515563794,
+ country: 'Ukraine',
+ },
+ AF: {
+ longitude: 66.59216131095278,
+ latitude: 34.13402601376932,
+ country: 'Afghanistan',
+ },
+ BH: {
+ longitude: 50.540695402276775,
+ latitude: 26.04798501537066,
+ country: 'Bahrain',
+ },
+ IN: {
+ longitude: 81.17300408530181,
+ latitude: 23.586300567746722,
+ country: 'India',
+ },
+ IR: {
+ longitude: 54.237077001065444,
+ latitude: 32.906023742890056,
+ country: 'Iran',
+ },
+ KW: {
+ longitude: 47.56311109320184,
+ latitude: 29.281360965443092,
+ country: 'Kuwait',
+ },
+ MV: {
+ longitude: 73.10076245140479,
+ latitude: -0.6065577168009924,
+ country: 'Maldives',
+ },
+ NP: {
+ longitude: 84.1338898313567,
+ latitude: 28.300920699755657,
+ country: 'Nepal',
+ },
+ OM: {
+ longitude: 55.841088119829,
+ latitude: 20.7242833183209,
+ country: 'Oman',
+ },
+ PK: {
+ longitude: 69.08835090769651,
+ latitude: 30.116188371410882,
+ country: 'Pakistan',
+ },
+ QA: {
+ longitude: 51.19794918743203,
+ latitude: 25.318528486425386,
+ country: 'Qatar',
+ },
+ SA: {
+ longitude: 44.600958178225596,
+ latitude: 24.136038144757897,
+ country: 'Saudi Arabia',
+ },
+ SO: {
+ longitude: 45.40037867243972,
+ latitude: 6.524534573103924,
+ country: 'Somalia',
+ },
+ LK: {
+ longitude: 80.66931169770622,
+ latitude: 7.696630939329944,
+ country: 'Sri Lanka',
+ },
+ TJ: {
+ longitude: 70.94215281065698,
+ latitude: 38.56933138382972,
+ country: 'Tajikistan',
+ },
+ TM: {
+ longitude: 58.4577357627054,
+ latitude: 39.06069118001429,
+ country: 'Turkmenistan',
+ },
+ AE: {
+ longitude: 54.27920525789581,
+ latitude: 24.18250292309135,
+ country: 'United Arab Emirates',
+ },
+ YE: {
+ longitude: 47.46815793206386,
+ latitude: 16.001392616307445,
+ country: 'Yemen',
+ },
+ AM: {
+ longitude: 45.05490831965259,
+ latitude: 40.17841274230679,
+ country: 'Armenia',
+ },
+ AZ: {
+ longitude: 48.634592670644324,
+ latitude: 40.3920509942049,
+ country: 'Azerbaijan',
+ },
+ KZ: {
+ longitude: 66.3759193479301,
+ latitude: 47.641465195176835,
+ country: 'Kazakhstan',
+ },
+ KG: {
+ longitude: 74.17532903468319,
+ latitude: 41.35698905438358,
+ country: 'Kyrgyzstan',
+ },
+ UZ: {
+ longitude: 63.8548297593985,
+ latitude: 41.4879065244633,
+ country: 'Uzbekistan',
+ },
+ CX: {
+ longitude: 105.70209512200549,
+ latitude: -10.446440802183416,
+ country: 'Christmas Island',
+ },
+ ID: {
+ longitude: 113.96538246847302,
+ latitude: 0.15591979959037652,
+ country: 'Indonesia',
+ },
+ AU: {
+ longitude: 134.02277170916162,
+ latitude: -25.697337673983082,
+ country: 'Australia',
+ },
+ NR: {
+ longitude: 166.92937633139178,
+ latitude: -0.5221021440668993,
+ country: 'Nauru',
+ },
+ NC: {
+ longitude: 165.50767040438612,
+ latitude: -21.33003372660827,
+ country: 'New Caledonia',
+ },
+ PG: {
+ longitude: 144.8348942994695,
+ latitude: -7.156912819152135,
+ country: 'Papua New Guinea',
+ },
+ SB: {
+ longitude: 160.16475795033884,
+ latitude: -9.613104734596515,
+ country: 'Solomon Islands',
+ },
+ TV: {
+ longitude: 179.217833977593,
+ latitude: -8.514701506447222,
+ country: 'Tuvalu',
+ },
+ VU: {
+ longitude: 166.84912735669738,
+ latitude: -15.189132121699332,
+ country: 'Vanuatu',
+ },
+ KH: {
+ longitude: 105.03973078680701,
+ latitude: 12.699186865507775,
+ country: 'Cambodia',
+ },
+ LA: {
+ longitude: 103.76375899026448,
+ latitude: 18.117282736873282,
+ country: 'Laos',
+ },
+ MY: {
+ longitude: 114.63330303992869,
+ latitude: 3.6716608556387857,
+ country: 'Malaysia',
+ },
+ MM: {
+ longitude: 97.08892285397344,
+ latitude: 19.901227931399873,
+ country: 'Myanmar',
+ },
+ SG: {
+ longitude: 103.81025757634053,
+ latitude: 1.3528251890006349,
+ country: 'Singapore',
+ },
+ TH: {
+ longitude: 101.08675116214552,
+ latitude: 13.66222784745538,
+ country: 'Thailand',
+ },
+ VN: {
+ longitude: 105.91338832758704,
+ latitude: 16.517347170839393,
+ country: 'Vietnam',
+ },
+ BD: {
+ longitude: 90.43212562608613,
+ latitude: 23.673728665121,
+ country: 'Bangladesh',
+ },
+ BT: {
+ longitude: 90.46716647173861,
+ latitude: 27.42163933959824,
+ country: 'Bhutan',
+ },
+ CN: {
+ longitude: 104.69113855849604,
+ latitude: 38.07325481105728,
+ country: 'China',
+ },
+ BN: {
+ longitude: 114.6430958360464,
+ latitude: 4.543205889917609,
+ country: 'Brunei Darussalam',
+ },
+ PH: {
+ longitude: 121.82208941416745,
+ latitude: 15.586542251094242,
+ country: 'Philippines',
+ },
+ KR: {
+ longitude: 127.76224551357649,
+ latitude: 36.402386712544114,
+ country: 'South Korea',
+ },
+ MN: {
+ longitude: 103.3987360327455,
+ latitude: 47.08644454604851,
+ country: 'Mongolia',
+ },
+ KP: {
+ longitude: 127.3379805653744,
+ latitude: 40.19198091470839,
+ country: 'North Korea',
+ },
+ GU: {
+ longitude: 144.78024458298802,
+ latitude: 13.445430479945276,
+ country: 'Guam',
+ },
+ JP: {
+ longitude: 137.46934234351835,
+ latitude: 36.76738832597829,
+ country: 'Japan',
+ },
+ MH: {
+ longitude: 168.72016025351076,
+ latitude: 7.307929900994344,
+ country: 'Marshall Islands',
+ },
+ FM: {
+ longitude: 158.2291899444527,
+ latitude: 6.8789448129255435,
+ country: 'Micronesia',
+ },
+ MP: {
+ longitude: 145.74119737203134,
+ latitude: 15.178063516432115,
+ country: 'Northern Mariana Islands',
+ },
+ PW: {
+ longitude: 134.57965086721052,
+ latitude: 7.534775852547396,
+ country: 'Palau',
+ },
+ RU: {
+ longitude: 98.6704990698032,
+ latitude: 59.039434214106194,
+ country: 'Russian Federation',
+ },
+ ES: {
+ longitude: -16.53799441021647,
+ latitude: 28.297665106525546,
+ country: 'Canarias',
+ },
+};
+
+export default centroids;
diff --git a/modules/location/test/api/location-routes.test.ts b/modules/location/test/api/location-routes.test.ts
new file mode 100644
index 00000000..1de33633
--- /dev/null
+++ b/modules/location/test/api/location-routes.test.ts
@@ -0,0 +1,32 @@
+import app from "../../../../app";
+let request = require('supertest');
+
+// Test case: for random coordinates is returned check
+describe('random coordinates api endpoints', () => {
+ describe('GET /location/co-ordinates/random/:qty', () => {
+ it('should return a one random coordinates', async () => {
+ const qty = 1;
+ const response = await request(app).get(`/location/co-ordinates/random/${qty}`);
+ const coordinates = response.body[0];
+ expect(coordinates).toHaveProperty('latitude');
+ expect(coordinates).toHaveProperty('longitude');
+ expect(response.body.length).toStrictEqual(qty);
+ });
+ });
+});
+
+// Test case: for One random coordinates in specified country is returned check
+describe('coordinates for country code', () => {
+ describe('GET /location/co-ordinates/country/:code/:qty', () => {
+ it('should return a one random coordinate in specified country', async () => {
+ const code = 'US';
+ const qty = 1;
+ const response = await request(app).get(`/location/co-ordinates/country/${code}/${qty}`);
+ const coordinates = response.body[0];
+ expect(coordinates).toHaveProperty('latitude');
+ expect(coordinates).toHaveProperty('longitude');
+ expect(coordinates).toHaveProperty('country');
+ expect(response.body.length).toStrictEqual(qty);
+ });
+ });
+});
diff --git a/modules/location/utils/getCoordinates.ts b/modules/location/utils/getCoordinates.ts
new file mode 100644
index 00000000..0f84dc3a
--- /dev/null
+++ b/modules/location/utils/getCoordinates.ts
@@ -0,0 +1,16 @@
+import { faker } from '@faker-js/faker';
+import centroids from '../consts/centroids';
+
+const getRandomCoordinates = () => {
+ const longitude = faker.address.longitude();
+ const latitude = faker.address.latitude();
+ return { longitude, latitude };
+};
+
+const getCountryCoordinates = (countryCode: string) => {
+ const data = centroids[countryCode];
+ const coordinates = faker.address.nearbyGPSCoordinate([data.latitude, data.longitude], 500);
+ return { longitude: coordinates[0], latitude: coordinates[1], country: data.country };
+};
+
+export { getRandomCoordinates, getCountryCoordinates };
diff --git a/modules/music/test/music-routes.test.ts b/modules/music/test/music-routes.test.ts
index 95f409b3..d0ec1305 100644
--- a/modules/music/test/music-routes.test.ts
+++ b/modules/music/test/music-routes.test.ts
@@ -2,13 +2,13 @@ import request from 'supertest';
import { Album } from '../consts/Album';
import { Music } from '../consts/Music';
-const baseURL = 'http://localhost:3000';
+import app from '../../../app';
describe('music api endpoints', () => {
describe('GET /music/:qty', () => {
it('should return a list of musics', async () => {
const qty = 10;
- const response = await request(baseURL).get(`/music/${qty}`);
+ const response = await request(app).get(`/music/${qty}`);
const music: Music = response.body.data[0];
expect(music).toHaveProperty('id');
@@ -21,7 +21,7 @@ describe('music api endpoints', () => {
describe('GET /album/:qty', () => {
it('should return a album', async () => {
const qty = 10;
- const response = await request(baseURL).get(`/album/${qty}`);
+ const response = await request(app).get(`/album/${qty}`);
const album: Album = response.body.data[0];
expect(album).toHaveProperty('id');
diff --git a/modules/names/tests/Api/names-routes.test.ts b/modules/names/tests/Api/names-routes.test.ts
index cdf81727..08576f82 100644
--- a/modules/names/tests/Api/names-routes.test.ts
+++ b/modules/names/tests/Api/names-routes.test.ts
@@ -1,5 +1,5 @@
import request from 'supertest';
-const baseURL = 'http://localhost:3000';
+import app from '../../../../app';
//These routes dont seem to provide consistent responses
@@ -7,28 +7,28 @@ describe('name routes endpoints', () => {
describe('male', () => {
it('GET /names/fullnames/male/:qty?', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/names/fullnames/male/${qty}`);
+ const response = await request(app).get(`/names/fullnames/male/${qty}`);
expect(response.body.length).toBe(qty);
});
it('GET /names/middlenames/male/:qty?', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/names/middlenames/male/${qty}`);
+ const response = await request(app).get(`/names/middlenames/male/${qty}`);
expect(response.body.length).toBe(qty);
});
it('GET /names/surnames/male/:qty?', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/names/surnames/male/${qty}`);
+ const response = await request(app).get(`/names/surnames/male/${qty}`);
expect(response.body.length).toBe(qty);
});
it('GET /names/fullnames/male/:qty?', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/names/fullnames/male/${qty}`);
+ const response = await request(app).get(`/names/fullnames/male/${qty}`);
expect(response.body.length).toBe(qty);
});
@@ -37,28 +37,28 @@ describe('name routes endpoints', () => {
describe('female', () => {
it('GET /names/fullnames/female/:qty?', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/names/fullnames/female/${qty}`);
+ const response = await request(app).get(`/names/fullnames/female/${qty}`);
expect(response.body.length).toBe(qty);
});
it('GET /names/middlenames/female/:qty?', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/names/middlenames/female/${qty}`);
+ const response = await request(app).get(`/names/middlenames/female/${qty}`);
expect(response.body.length).toBe(qty);
});
it('GET /names/surnames/female/:qty?', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/names/surnames/female/${qty}`);
+ const response = await request(app).get(`/names/surnames/female/${qty}`);
expect(response.body.length).toBe(qty);
});
it('GET /names/fullnames/female/:qty?', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/names/fullnames/female/${qty}`);
+ const response = await request(app).get(`/names/fullnames/female/${qty}`);
expect(response.body.length).toBe(qty);
});
@@ -67,28 +67,28 @@ describe('name routes endpoints', () => {
describe('no gender given', () => {
it('GET /names/fullnames/:qty?', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/names/fullnames/${qty}`);
+ const response = await request(app).get(`/names/fullnames/${qty}`);
expect(response.body.length).toBe(qty);
});
it('GET /names/middlenames/:qty?', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/names/middlenames/${qty}`);
+ const response = await request(app).get(`/names/middlenames/${qty}`);
expect(response.body.length).toBe(qty);
});
it('GET /names/surnames/:qty?', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/names/surnames/${qty}`);
+ const response = await request(app).get(`/names/surnames/${qty}`);
expect(response.body.length).toBe(qty);
});
it('GET /names/fullnames/:qty?', async () => {
const qty = 5;
- const response = await request(baseURL).get(`/names/fullnames/${qty}`);
+ const response = await request(app).get(`/names/fullnames/${qty}`);
expect(response.body.length).toBe(qty);
});
diff --git a/modules/phone-numbers/test/api/phone-number-routes.test.ts b/modules/phone-numbers/test/api/phone-number-routes.test.ts
index a4853eac..4736670a 100644
--- a/modules/phone-numbers/test/api/phone-number-routes.test.ts
+++ b/modules/phone-numbers/test/api/phone-number-routes.test.ts
@@ -1,7 +1,5 @@
-import countryNumberData from '../../consts/countryNumberData';
-
import request from 'supertest';
-const baseURL = 'http://localhost:3000';
+import app from '../../../../app';
// Test case: for One phone number is returned check
describe('phonenumber api endpoints', () => {
@@ -9,7 +7,7 @@ describe('phonenumber api endpoints', () => {
it('should return a one random country phonenumbers', async () => {
const qty = 1;
- const response = await request(baseURL).get('/phonenumbers/');
+ const response = await request(app).get('/phonenumbers/');
expect([response.body].length).toStrictEqual(qty);
});
});
@@ -20,7 +18,7 @@ describe('phonenumber imei endpoints', () => {
describe('GET /phonenumbers/imei', () => {
it('should return a one random imei', async () => {
const qty = 1;
- const response = await request(baseURL).get('/phonenumbers/imei');
+ const response = await request(app).get('/phonenumbers/imei');
expect([response.body].length).toStrictEqual(qty);
});
});
@@ -34,7 +32,7 @@ describe('phonenumber with country code & format endpoints', () => {
const countrycode = 'US';
const format = 'space';
const qty = 1;
- const response = await request(baseURL).get(`/phonenumbers/country/${countrycode}/${format}`);
+ const response = await request(app).get(`/phonenumbers/country/${countrycode}/${format}`);
expect([response.body].length).toStrictEqual(qty);
});
});
@@ -47,7 +45,7 @@ describe('phonenumber with country code & format endpoints', () => {
const countrycode = 'GB';
const format = 'nospace';
const qty = 1;
- const response = await request(baseURL).get(`/phonenumbers/country/${countrycode}/${format}`);
+ const response = await request(app).get(`/phonenumbers/country/${countrycode}/${format}`);
expect([response.body].length).toStrictEqual(qty);
});
});
@@ -60,7 +58,7 @@ describe('phonenumber with country code & format endpoints', () => {
const countrycode = 'US';
const format = 'dash';
const qty = 1;
- const response = await request(baseURL).get(`/phonenumbers/country/${countrycode}/${format}`);
+ const response = await request(app).get(`/phonenumbers/country/${countrycode}/${format}`);
expect([response.body].length).toStrictEqual(qty);
});
});
@@ -73,7 +71,7 @@ describe('phonenumber with country code as US & format space', () => {
const countrycode = 'US';
const format = 'space';
const qty = 1;
- const response = await request(baseURL).get(`/phonenumbers/country/${countrycode}/${format}`);
+ const response = await request(app).get(`/phonenumbers/country/${countrycode}/${format}`);
expect(/^[+](1\s?)?(\d{3}|\(\d{3}\))[\s]?\d{3}[\s]?\d{4}$/.test(response.body));
});
});
@@ -86,7 +84,7 @@ describe('phonenumber with country code as US & format space', () => {
const countrycode = 'US';
const format = 'dash';
const qty = 1;
- const response = await request(baseURL).get(`/phonenumbers/country/${countrycode}/${format}`);
+ const response = await request(app).get(`/phonenumbers/country/${countrycode}/${format}`);
expect(/^[+](1\-?)?(\d{3}|\(\d{3}\))[\-]?\d{3}[\-]?\d{4}$/.test(response.body));
});
});
@@ -99,7 +97,7 @@ describe('phonenumber with country code as US & format space', () => {
const countrycode = 'US';
const format = 'dash';
const qty = 1;
- const response = await request(baseURL).get(`/phonenumbers/country/${countrycode}/${format}`);
+ const response = await request(app).get(`/phonenumbers/country/${countrycode}/${format}`);
expect(/^[+](1?)?(\d{3}|\(\d{3}\))?\d{3}?\d{4}$/.test(response.body));
});
});
diff --git a/modules/products/api/products-routes.ts b/modules/products/api/products-routes.ts
index dfe83f5d..1d230dde 100644
--- a/modules/products/api/products-routes.ts
+++ b/modules/products/api/products-routes.ts
@@ -3,6 +3,7 @@ import * as core from 'express-serve-static-core';
import productReviews from '../data/product-reviews';
import { getQtyFromRequest } from '../../../utils/route-utils';
import getProducts from '../utils/getProducts';
+import { randomRating } from '../../../utils/numbers';
/**
* @openapi
@@ -102,7 +103,7 @@ module.exports = function (app: core.Express) {
/**
* @openapi
- * '/product/{department}':
+ * '/product/department/{department}':
* get:
* tags:
* - Products
@@ -117,7 +118,7 @@ module.exports = function (app: core.Express) {
* schema:
* $ref: '#/definitions/MockProduct'
*/
- app.get('/product/:department', (req: Request, res: Response) => {
+ app.get('/product/department/:department', (req: Request, res: Response) => {
const department = req.params.department ? req.params.department.toString() : 'General';
res.json(getProducts(1, department));
});
@@ -204,12 +205,13 @@ module.exports = function (app: core.Express) {
* schema:
* $ref: '#/definitions/MockProductReview'
*/
- app.get('/products/reviews/rating/:rating', (req: Request, res: Response) => {
- let reviews = productReviews;
- const rating = parseInt(req.params.rating);
- reviews.forEach((element) => {
- element.rating = rating;
- });
- res.json(reviews);
+ app.get('/products/reviews/ratings/:rating', (req: Request, res: Response) => {
+ const rating = req.params.rating ?
+ (parseInt(req.params.rating) <= 5 ?
+ parseInt(req.params.rating)
+ : 5)
+ : randomRating();
+ const filtereReview = productReviews.filter((element) => element.rating = rating);
+ res.json(filtereReview);
});
};
diff --git a/modules/products/data/product-reviews.ts b/modules/products/data/product-reviews.ts
index 184bc9b3..87113579 100644
--- a/modules/products/data/product-reviews.ts
+++ b/modules/products/data/product-reviews.ts
@@ -48,8 +48,295 @@ const productReviews = [
rating: randomRating(),
userName: getFullNames(1),
categories: ['sport-drinks','gaming']
- }
-
+ },
+ {
+ productName: "Golden-arm",
+ productId: 2,
+ message: "An amazing sequel to an amazing classic! Great introduction to the new N65 console.",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['gaming']
+ },
+ {
+ productName: "Golden-arm",
+ productId: 2,
+ message: "Not nearly as good as the original, but it's worth checking out.",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['gaming']
+ },
+ {
+ productName: "Golden-arm",
+ productId: 2,
+ message: "I'm hooked! I can't wait for the finish to the trilogy, Golden-foot!",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['gaming']
+ },
+ {
+ productName: "Golden-arm",
+ productId: 2,
+ message: "Tons of fun and lots of great new playable characters - they really deliver here",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['gaming']
+ },
+ {
+ productName: "Archie Kibble",
+ productId: 3,
+ message: "My cat is obsessed with this food - probably likes it too much, as he is putting on weight!",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['pet-food','cat-food']
+ },
+ {
+ productName: "Archie Kibble",
+ productId: 3,
+ message: "Great food for a great price... not that I've tried it myself",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['pet-food','cat-food']
+ },
+ {
+ productName: "Archie Kibble",
+ productId: 3,
+ message: "Too expensive for my wallet!",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['pet-food','cat-food']
+ },
+ {
+ productName: "Archie Kibble",
+ productId: 3,
+ message: "All but my pickiest cats seem to enjoy eating it",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['pet-food','cat-food']
+ },
+ {
+ productName: "Choc-o-lot Bars",
+ productId: 4,
+ message: "What a rich treat to enjoy a little too often for my diet!",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['snack-food','food']
+ },
+ {
+ productName: "Choc-o-lot Bars",
+ productId: 4,
+ message: "The only kind of chocolate I will eat now",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['snack-food','food']
+ },
+ {
+ productName: "Choc-o-lot Bars",
+ productId: 4,
+ message: "Mine were all broken when I opened the package, but it still tasted good I guess",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['snack-food','food']
+ },
+ {
+ productName: "ACME Decorative Tombstones",
+ productId: 5,
+ message: "These fell apart with one rain storm - really disappointing",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['halloween','decor']
+ },
+ {
+ productName: "ACME Decorative Tombstones",
+ productId: 5,
+ message: "The stakes these came with were too small, but the tombstones looked fine in my yard when I used my own stakes",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['halloween','decor']
+ },
+ {
+ productName: "ACME Decorative Tombstones",
+ productId: 5,
+ message: "Loved how these look - totally got my yard in the Halloween mood",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['halloween','decor']
+ },
+ {
+ productName: "ACME Decorative Tombstones",
+ productId: 5,
+ message: "I like these, but I do wish they were bigger",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['halloween','decor']
+ },
+ {
+ productName: "Bartender's Best Margarita Glasses",
+ productId: 6,
+ message: "These look so great and I love serving my guests with them",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['glassware']
+ },
+ {
+ productName: "Bartender's Best Margarita Glasses",
+ productId: 6,
+ message: "I wish they were a little bigger (I like a heavy pour) but they work",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['glassware']
+ },
+ {
+ productName: "Bartender's Best Margarita Glasses",
+ productId: 6,
+ message: "One of them arrived broken - they should really pack them better!",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['glassware']
+ },
+ {
+ productName: "Matexo Pink Water Bottle",
+ productId: 7,
+ message: "Saving the environment never looked so good!",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['water-bottles']
+ },
+ {
+ productName: "Matexo Pink Water Bottle",
+ productId: 7,
+ message: "Perfect size, and keeps my water cold all day",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['water-bottles']
+ },
+ {
+ productName: "Matexo Pink Water Bottle",
+ productId: 7,
+ message: "Wish it was a little smaller to fit in my drink holder, but I should have checked the measurements",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['water-bottles']
+ },
+ {
+ productName: "Matexo Pink Water Bottle",
+ productId: 7,
+ message: "Durable and cute at the same time",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['water-bottles']
+ },
+ {
+ productName: "Kaysus Gaming PC",
+ productId: 8,
+ message: "The specs aren't worth what they are charging for it",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['gaming','pc','gaming-pc']
+ },
+ {
+ productName: "Kaysus Gaming PC",
+ productId: 8,
+ message: "It's a little slow, but the graphics look great when they load properly",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['gaming','pc','gaming-pc']
+ },
+ {
+ productName: "Kaysus Gaming PC",
+ productId: 8,
+ message: "Works great for my favorite simulation game, I'm happy with it",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['gaming','pc','gaming-pc']
+ },
+ {
+ productName: "Woolworth's Wool Sweater",
+ productId: 9,
+ message: "It keeps me incredibly warm in my cold climate!",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['clothes']
+ },
+ {
+ productName: "Woolworth's Wool Sweater",
+ productId: 9,
+ message: "Keeps pilling way more than I think it should, not happy",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['clothes']
+ },
+ {
+ productName: "Woolworth's Wool Sweater",
+ productId: 9,
+ message: "Looks great, love all the color options",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['clothes']
+ },
+ {
+ productName: "Woolworth's Wool Sweater",
+ productId: 9,
+ message: "The burgundy looks more pink than burgundy, be warned!",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['clothes']
+ },
+ {
+ productName: "Z440 Athletic Sneakers",
+ productId: 10,
+ message: "These kicks look so cool and I get lots of compliments on them!",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['shoes','sneakers']
+ },
+ {
+ productName: "Z440 Athletic Sneakers",
+ productId: 10,
+ message: "Get scuffed way too easily, I spend forever trying to keep them clean",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['shoes','sneakers']
+ },
+ {
+ productName: "Z440 Athletic Sneakers",
+ productId: 10,
+ message: "Super comfortable on my daily runs",
+ dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2022-12-31T01:57:45.271Z')),
+ rating: randomRating(),
+ userName: getFullNames(1),
+ categories: ['shoes','sneakers']
+ },
]
export default productReviews;
\ No newline at end of file
diff --git a/modules/products/test/api/products-routes.test.ts b/modules/products/test/api/products-routes.test.ts
index afae3bb0..22c74c7a 100644
--- a/modules/products/test/api/products-routes.test.ts
+++ b/modules/products/test/api/products-routes.test.ts
@@ -1,10 +1,10 @@
import request from 'supertest';
-const baseURL = 'http://localhost:3000';
+import app from '../../../../app';
describe('products api endpoints', () => {
describe('GET /products/reviews', () => {
it('should return a user', async () => {
- const response = await request(baseURL).get(`/products/reviews`);
+ const response = await request(app).get(`/products/reviews`);
expect(response.body[0]).toHaveProperty('productName');
expect(response.body[0]).toHaveProperty('productId');
@@ -16,12 +16,69 @@ describe('products api endpoints', () => {
});
});
- describe('GET /products/reviews/rating/:rating', () => {
+ describe('GET /products/reviews/ratings/:rating', () => {
const rating = 2;
- it('should return a list of users ', async () => {
- const response = await request(baseURL).get(`/products/reviews/rating/${rating}`);
- expect(response.body[0].rating).toBeLessThanOrEqual(rating);
+ it('should return a list of reviews ', async () => {
+ const response = await request(app).get(`/products/reviews/ratings/${rating}`);
+ expect(response.body[0].rating).toEqual(rating);
+ expect(response.body[0]).toHaveProperty('productName');
+ expect(response.body[0]).toHaveProperty('productId');
+ expect(response.body[0]).toHaveProperty('message');
+ expect(response.body[0]).toHaveProperty('dateTime');
+ expect(response.body[0]).toHaveProperty('rating');
+ expect(response.body[0]).toHaveProperty('userName');
+ expect(response.body[0]).toHaveProperty('categories');
+ });
+ });
+
+ describe('GET /products/:qty/:department', () => {
+ const quantity = 4;
+ const department = "Computer";
+
+ it('should return a list of products ', async () => {
+ const response = await request(app).get(`/products/${quantity}/${department}`);
+ expect(response.body.length).toEqual(quantity);
+ expect(response.body[0].department).toEqual(department);
+ expect(response.body[0]).toHaveProperty('department');
+ expect(response.body[0]).toHaveProperty('type');
+ expect(response.body[0]).toHaveProperty('name');
+ expect(response.body[0]).toHaveProperty('adjective');
+ expect(response.body[0]).toHaveProperty('description');
+ expect(response.body[0]).toHaveProperty('material');
+ expect(response.body[0]).toHaveProperty('sku');
+ });
+ });
+
+ describe('GET /products/quantity/:qty', () => {
+ const quantity = 4;
+
+ it('should return a list of products', async () => {
+ const response = await request(app).get(`/products/${quantity}`);
+ expect(response.body.length).toEqual(quantity);
+ });
+ });
+
+ describe('GET /products/department/:qty', () => {
+ const department = "Computer";
+
+ it('should return a list of products', async () => {
+ const response = await request(app).get(`/products/department/${department}`);
+ expect(response.body[0].department).toEqual(department);
+ });
+ });
+
+ describe('GET /product', () => {
+ it('should return a random product ', async () => {
+ const response = await request(app).get(`/product`);
+ expect(response.body.length).toEqual(1);
+ expect(response.body[0]).toHaveProperty('department');
+ expect(response.body[0]).toHaveProperty('type');
+ expect(response.body[0]).toHaveProperty('name');
+ expect(response.body[0]).toHaveProperty('adjective');
+ expect(response.body[0]).toHaveProperty('description');
+ expect(response.body[0]).toHaveProperty('material');
+ expect(response.body[0]).toHaveProperty('sku');
});
});
});
diff --git a/modules/socials/api/socials-routes.ts b/modules/socials/api/socials-routes.ts
index aeaf30f5..bdd6b91e 100644
--- a/modules/socials/api/socials-routes.ts
+++ b/modules/socials/api/socials-routes.ts
@@ -1,6 +1,7 @@
import { Request, Response } from 'express';
import * as core from 'express-serve-static-core';
import { DEFAULT_POSTS_COUNT } from '../consts/default';
+import { getRandomFacebookPosts } from '../utils/getRandomFacebookPosts';
import { getRandomInstagramPosts } from '../utils/getRandomInstagramPosts';
import { getRandomTwitterPosts } from '../utils/getRandomTwitterPosts';
@@ -42,4 +43,24 @@ module.exports = function (app: core.Express) {
app.get('/socials/instagram', (req: Request, res: Response) => {
res.json(getRandomInstagramPosts(DEFAULT_POSTS_COUNT));
});
+
+ /**
+ * @openapi
+ * '/socials/facebook':
+ * get:
+ * tags:
+ * - Socials
+ * summary: Returns a list of fake facebook posts
+ * responses:
+ * '200':
+ * description: OK
+ * schema:
+ * type: array
+ * items:
+ * type: object
+ * $ref: '#/definitions/FacebookPost'
+ */
+ app.get('/socials/facebook', (req: Request, res: Response) => {
+ res.json(getRandomFacebookPosts(DEFAULT_POSTS_COUNT));
+ });
};
diff --git a/modules/socials/consts/Facebook.ts b/modules/socials/consts/Facebook.ts
new file mode 100644
index 00000000..270a7586
--- /dev/null
+++ b/modules/socials/consts/Facebook.ts
@@ -0,0 +1,73 @@
+/**
+ * @openapi
+ * definitions:
+ * FacebookPost:
+ * type: object
+ * properties:
+ * id:
+ * type: uuid
+ * example: e69ccf52-22a8-49f6-93e9-c7dfa835c162
+ * createdUserName:
+ * type: string
+ * example: name
+ * createdUserEmail:
+ * type: string
+ * example: example@example.com
+ * content:
+ * type: string
+ * example: example text
+ * media:
+ * type: string
+ * example: example media
+ * shares:
+ * type: number
+ * example: 1
+ * comments:
+ * type: number
+ * example: 1
+ * createdAt:
+ * type: date
+ * example: '2022-06-22T00:01:21.497Z'
+ * reactions:
+ * type: object
+ * properties:
+ * like:
+ * type: number
+ * example: 10
+ * love:
+ * type: number
+ * example: 10
+ * wow:
+ * type: number
+ * example: 10
+ * haha:
+ * type: number
+ * example: 10
+ * sad:
+ * type: number
+ * example: 10
+ * angry:
+ * type: number
+ * example: 10
+ */
+
+type Facebook = {
+ id: string,
+ createdUserName: string,
+ createdUserEmail: string,
+ content: string,
+ media: string,
+ reactions:{
+ like:number,
+ love:number,
+ wow:number,
+ haha:number,
+ sad:number,
+ angry:number,
+ },
+ shares: number,
+ comments: number,
+ createdAt: Date,
+}
+
+export default Facebook;
diff --git a/modules/socials/test/socials-routes.test.ts b/modules/socials/test/socials-routes.test.ts
index 2a1934ac..4fd1e3b4 100644
--- a/modules/socials/test/socials-routes.test.ts
+++ b/modules/socials/test/socials-routes.test.ts
@@ -2,13 +2,13 @@ import request from 'supertest';
import Twitter from '../consts/Twitter';
import Instagram from '../consts/Instagram';
import { DEFAULT_POSTS_COUNT } from '../consts/default';
-
-const baseURL = 'http://localhost:3000';
+import app from '../../../app';
+import Facebook from '../consts/Facebook';
describe('socials api endpoints', () => {
describe('GET /socials/twitter/', () => {
it('should returns a list of fake twitter posts', async () => {
- const response = await request(baseURL).get(`/socials/twitter/`);
+ const response = await request(app).get(`/socials/twitter/`);
const twitter: Twitter = response.body[0];
expect(twitter).toHaveProperty('id');
@@ -25,7 +25,7 @@ describe('socials api endpoints', () => {
describe('GET /socials/instagram/', () => {
it('should returns a list of fake instagram posts', async () => {
- const response = await request(baseURL).get(`/socials/instagram/`);
+ const response = await request(app).get(`/socials/instagram/`);
const instagram: Instagram = response.body[0];
expect(instagram).toHaveProperty('id');
@@ -50,4 +50,28 @@ describe('socials api endpoints', () => {
expect(response.body.length).toEqual(DEFAULT_POSTS_COUNT);
});
});
+
+ describe('GET /socials/facebook/', () => {
+ it('should returns a list of fake facebook posts', async () => {
+ const response = await request(app).get(`/socials/facebook/`);
+ const facebook: Facebook = response.body[0];
+
+ expect(facebook).toHaveProperty('id');
+ expect(facebook).toHaveProperty('createdUserName');
+ expect(facebook).toHaveProperty('createdUserEmail');
+ expect(facebook).toHaveProperty('content');
+ expect(facebook).toHaveProperty('media');
+ expect(facebook).toHaveProperty('reactions.like');
+ expect(facebook).toHaveProperty('reactions.love');
+ expect(facebook).toHaveProperty('reactions.wow');
+ expect(facebook).toHaveProperty('reactions.haha');
+ expect(facebook).toHaveProperty('reactions.sad');
+ expect(facebook).toHaveProperty('reactions.angry');
+ expect(facebook).toHaveProperty('shares');
+ expect(facebook).toHaveProperty('comments');
+ expect(facebook).toHaveProperty('createdAt');
+ expect(response.body.length).toEqual(DEFAULT_POSTS_COUNT);
+
+ });
+ });
});
diff --git a/modules/socials/utils/getRandomFacebookPosts.ts b/modules/socials/utils/getRandomFacebookPosts.ts
new file mode 100644
index 00000000..6b3ede13
--- /dev/null
+++ b/modules/socials/utils/getRandomFacebookPosts.ts
@@ -0,0 +1,27 @@
+import { faker } from '@faker-js/faker';
+import Facebook from '../consts/Facebook';
+
+export const getRandomFacebookPosts = (postCount: number): Facebook[] => {
+ const facebookPosts: Facebook[] = [];
+ Array.from({ length: postCount }).forEach(() => {
+ facebookPosts.push({
+ id: faker.datatype.uuid(),
+ comments: faker.datatype.number(),
+ content: faker.lorem.sentence(),
+ media: faker.image.imageUrl(),
+ createdAt: faker.date.recent(),
+ createdUserEmail: faker.internet.email(),
+ createdUserName: faker.word.noun(10),
+ shares: faker.datatype.number(),
+ reactions: {
+ angry: faker.datatype.number(),
+ haha: faker.datatype.number(),
+ like: faker.datatype.number(),
+ love: faker.datatype.number(),
+ sad: faker.datatype.number(),
+ wow: faker.datatype.number(),
+ },
+ });
+ });
+ return facebookPosts;
+};
diff --git a/modules/sports/api/sports-routes.ts b/modules/sports/api/sports-routes.ts
index 90c43a49..c0f51890 100644
--- a/modules/sports/api/sports-routes.ts
+++ b/modules/sports/api/sports-routes.ts
@@ -1,6 +1,9 @@
import { Request, Response } from 'express';
import * as core from 'express-serve-static-core';
+import { getQtyFromRequest } from '../../../utils/route-utils';
+import { getRandomSubArray } from '../../../utils/arrays';
import PremierLeagueData2022 from '../data/football-premier-league-2022';
+import LaLigaLeagueData2022 from "../data/football-laliga-league-2022";
module.exports = function (app: core.Express) {
/**
@@ -28,4 +31,31 @@ module.exports = function (app: core.Express) {
app.get('/sports/football/leagues/premier/teams', (req: Request, res: Response) => {
res.json(PremierLeagueData2022);
});
+
+ /**
+ * @openapi
+ * '/sports/football/leagues/laliga/teams/{qty}':
+ * get:
+ * tags:
+ * - Sports
+ * summary: Get a list of teams in the La Liga (Spain) football league from 2022
+ * parameters:
+ * - in: path
+ * name: qty
+ * description: The amount of results you would like returned
+ * default: 10
+ * type: number
+ * responses:
+ * '200':
+ * description: OK
+ * schema:
+ * type: array
+ * items:
+ * type: object
+ * example: { teamName: '', location: '', stadium: '', capacity: ''}
+ */
+ app.get("/sports/football/leagues/laliga/teams/:qty?", (req: Request, res: Response) => {
+ const qty = getQtyFromRequest(req);
+ res.json(getRandomSubArray(LaLigaLeagueData2022, qty));
+ });
};
diff --git a/modules/sports/data/football-laliga-league-2022.ts b/modules/sports/data/football-laliga-league-2022.ts
new file mode 100644
index 00000000..4291ca3a
--- /dev/null
+++ b/modules/sports/data/football-laliga-league-2022.ts
@@ -0,0 +1,124 @@
+const LaLigaData2022 = [
+ {
+ teamName: "Almería",
+ location: "Almería",
+ stadium: "Power Horse Stadium",
+ capacity: "15,274"
+ },
+ {
+ teamName: "Athletic Bilbao",
+ location: "Bilbao",
+ stadium: "San Mamés Stadium",
+ capacity: "53,331"
+ },
+ {
+ teamName: "Atlético de Madrid",
+ location: "Madrid (Rosas)",
+ stadium: "Metropolitano Stadium",
+ capacity: "68,456"
+ },
+ {
+ teamName: "Barcelona",
+ location: "Barcelona",
+ stadium: "Camp Nou",
+ capacity: "99,354"
+ },
+ {
+ teamName: "Cádiz",
+ location: "Cádiz",
+ stadium: "Nuevo Mirandilla",
+ capacity: "20,724"
+ },
+ {
+ teamName: "Celta de Vigo",
+ location: "Vigo",
+ stadium: "Balaídos",
+ capacity: "29,000"
+ },
+ {
+ teamName: "Elche",
+ location: "Elche",
+ stadium: "Estadio Manuel Martínez Valero",
+ capacity: "33,732"
+ },
+ {
+ teamName: "Espanyol",
+ location: "Cornellà de Llobregat",
+ stadium: "RCDE Stadium",
+ capacity: "40,000"
+ },
+ {
+ teamName: "Getafe",
+ location: "Getafe",
+ stadium: "Coliseum Alfonso Pérez",
+ capacity: "17,000"
+ },
+ {
+ teamName: "Girona",
+ location: "Girona",
+ stadium: "Estadi Montilivi",
+ capacity: "11,810"
+ },
+ {
+ teamName: "Mallorca",
+ location: "Palma",
+ stadium: "Balaídos",
+ capacity: "23,142"
+ },
+ {
+ teamName: "Osasuna",
+ location: "Pamplona",
+ stadium: "El Sadar Stadium",
+ capacity: "23,576"
+ },
+ {
+ teamName: "Rayo Vallecano",
+ location: "Madrid (Vallecas)",
+ stadium: "Campo de Fútbol de Vallecas",
+ capacity: "14,708"
+ },
+ {
+ teamName: "Real Betis",
+ location: "Sevilha",
+ stadium: "Estadio Benito Villamarín",
+ capacity: "60,721"
+ },
+ {
+ teamName: "Real Madrid",
+ location: "Madrid (Chamartín)",
+ stadium: "Santiago Bernabéu Stadium",
+ capacity: "81,044"
+ },
+ {
+ teamName: "Real Sociedad",
+ location: "San Sebastián",
+ stadium: "Anoeta Stadium",
+ capacity: "39,313"
+ },
+ {
+ teamName: "Real Valladolid",
+ location: "Valladolid",
+ stadium: "Estadio José Zorrilla",
+ capacity: "27,846"
+ },
+ {
+ teamName: "Sevilla",
+ location: "Seville",
+ stadium: "Ramón Sánchez Pizjuán Stadium",
+ capacity: "42,714"
+ },
+ {
+ teamName: "Valencia",
+ location: "València",
+ stadium: "Mestalla Stadium",
+ capacity: "49,430"
+ },
+ {
+ teamName: "Villarreal",
+ location: "Vila-real",
+ stadium: "Estadi Ciutat de València",
+ capacity: "26,354"
+ }
+];
+
+export default LaLigaData2022;
\ No newline at end of file
diff --git a/modules/sports/tests/api/sports-routes.test.ts b/modules/sports/tests/api/sports-routes.test.ts
index c416dbb9..e01e11b1 100644
--- a/modules/sports/tests/api/sports-routes.test.ts
+++ b/modules/sports/tests/api/sports-routes.test.ts
@@ -1,12 +1,21 @@
import request from 'supertest';
-const baseURL = 'http://localhost:3000';
+import app from '../../../../app';
describe('sports api endpoints', () => {
describe('GET /sports/football/leagues/premier/teams', () => {
it('should return a list of teams', async () => {
- const response = await request(baseURL).get(`/sports/football/leagues/premier/teams`);
+ const response = await request(app).get(`/sports/football/leagues/premier/teams`);
expect(response).not.toBeFalsy();
});
});
+
+ describe('GET /sports/football/leagues/laliga/teams', () => {
+ it('should return a list of la liga teams', async () => {
+ const qty = 20;
+ const response = await request(app).get(`/sports/football/leagues/laliga/teams/${qty}`);
+
+ expect(response.body.length).toBe(qty);
+ });
+ });
});
diff --git a/modules/time_zones/api/timezones-routes.ts b/modules/time_zones/api/timezones-routes.ts
index a026a1f8..b5cac5c2 100644
--- a/modules/time_zones/api/timezones-routes.ts
+++ b/modules/time_zones/api/timezones-routes.ts
@@ -2,7 +2,7 @@ import { Request, Response } from 'express';
import * as core from 'express-serve-static-core';
import time_zones from '../data/time_zones';
-module.exports = function(app : core.Express){
+module.exports = function (app: core.Express) {
/**
* @openapi
diff --git a/modules/time_zones/data/time_zones.ts b/modules/time_zones/data/time_zones.ts
index 0c11522d..f29bfd09 100644
--- a/modules/time_zones/data/time_zones.ts
+++ b/modules/time_zones/data/time_zones.ts
@@ -901,7 +901,7 @@ const time_zones = [
"isdst": false,
"text": "(UTC+03:00) Moscow, St. Petersburg, Volgograd, Minsk",
"utc": [
- "Europe/Kirov",
+ "Europe/Kirov",
"Europe/Moscow",
"Europe/Simferopol",
"Europe/Volgograd",
@@ -915,9 +915,9 @@ const time_zones = [
"isdst": false,
"text": "(UTC+04:00) Samara, Ulyanovsk, Saratov",
"utc": [
- "Europe/Astrakhan",
+ "Europe/Astrakhan",
"Europe/Samara",
- "Europe/Ulyanovsk"
+ "Europe/Ulyanovsk"
]
},
{
diff --git a/modules/time_zones/tests/api/timezones-routes.test.ts b/modules/time_zones/tests/api/timezones-routes.test.ts
index b2def745..8890fb5f 100644
--- a/modules/time_zones/tests/api/timezones-routes.test.ts
+++ b/modules/time_zones/tests/api/timezones-routes.test.ts
@@ -1,10 +1,10 @@
import request from 'supertest';
+import app from '../../../../app';
-const baseURL = 'http://localhost:3000';
describe('GET /time-zones/', () => {
it('should return 200 OK', async () => {
- const response = await request(baseURL).get('/time-zones');
+ const response = await request(app).get('/time-zones');
const timeZone = response.body[0];
expect(response.status).toBe(200);
@@ -20,7 +20,7 @@ describe('GET /time-zones/', () => {
describe('GET /time-zones/random', () => {
it('should return 200 OK', async () => {
- const response = await request(baseURL).get('/time-zones/random');
+ const response = await request(app).get('/time-zones/random');
const timeZone = response.body;
expect(response.status).toBe(200);
diff --git a/modules/users/tests/api/user-routes.test.ts b/modules/users/tests/api/user-routes.test.ts
index 138d4807..28be1bdf 100644
--- a/modules/users/tests/api/user-routes.test.ts
+++ b/modules/users/tests/api/user-routes.test.ts
@@ -1,10 +1,10 @@
import request from 'supertest';
-const baseURL = 'http://localhost:3000';
+import app from '../../../../app';
describe('user api endpoints', () => {
describe('GET /user', () => {
it('should return a user', async () => {
- const response = await request(baseURL).get(`/users/`);
+ const response = await request(app).get(`/users/`);
expect(response.body[0]).toHaveProperty('avatarUrl');
expect(response.body[0]).toHaveProperty('birthDate');
@@ -20,7 +20,7 @@ describe('user api endpoints', () => {
const qty = 5;
it('should return a list of users ', async () => {
- const response = await request(baseURL).get(`/users/${qty}`);
+ const response = await request(app).get(`/users/${qty}`);
expect(response.body.length).toEqual(qty);
});
});
diff --git a/modules/vehicles/tests/api/vehicles-routes.test.ts b/modules/vehicles/tests/api/vehicles-routes.test.ts
index ed974b46..7d4dfd41 100644
--- a/modules/vehicles/tests/api/vehicles-routes.test.ts
+++ b/modules/vehicles/tests/api/vehicles-routes.test.ts
@@ -1,10 +1,10 @@
const request = require('supertest');
-const baseURL = 'http://localhost:3000';
+import app from '../../../../app';
describe('vehicles api endpoints', () => {
describe('GET /vehicles', () => {
it('should return a vehicle', async () => {
- const response = await request(baseURL).get(`/vehicles/`);
+ const response = await request(app).get(`/vehicles/`);
expect(response.body[0]).toHaveProperty('name');
expect(response.body[0]).toHaveProperty('type');
@@ -21,7 +21,7 @@ describe('vehicles api endpoints', () => {
const qty = 5;
it('should return a list of users ', async () => {
- const response = await request(baseURL).get(`/users/${qty}`);
+ const response = await request(app).get(`/users/${qty}`);
expect(response.body.length).toEqual(qty);
});
});
diff --git a/modules/vehicles/utils/getRandomVehicles.ts b/modules/vehicles/utils/getRandomVehicles.ts
index 27be363c..b0963766 100644
--- a/modules/vehicles/utils/getRandomVehicles.ts
+++ b/modules/vehicles/utils/getRandomVehicles.ts
@@ -1,7 +1,7 @@
import Vehicle from '../consts/Vehicle';
import { faker } from '@faker-js/faker';
-const getRandomVehicles = (qty: number) => {
+const getRandomVehicles = (qty: number) : Vehicle[] => {
const vehicles: Vehicle[] = [];
Array.from({ length: qty }).forEach(() => {
diff --git a/package-lock.json b/package-lock.json
index d037478b..5242a392 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20,15 +20,16 @@
"swagger-ui-express": "^4.5.0"
},
"devDependencies": {
- "@faker-js/faker": "7.5.0",
+ "@faker-js/faker": "7.6.0",
"@types/express": "4.17.14",
- "@types/jest": "^29.1.1",
+ "@types/jest": "29.1.2",
"@types/node": "18.7.6",
+ "@types/supertest": "^2.0.12",
"@types/swagger-jsdoc": "^6.0.1",
"@types/swagger-ui-express": "^4.1.3",
- "@typescript-eslint/eslint-plugin": "5.37.0",
- "all-contributors-cli": "^6.23.0",
- "eslint": "8.24.0",
+ "@typescript-eslint/eslint-plugin": "5.39.0",
+ "all-contributors-cli": "6.23.1",
+ "eslint": "8.25.0",
"eslint-config-standard-with-typescript": "23.0.0",
"eslint-plugin-import": "2.26.0",
"eslint-plugin-n": "15.3.0",
@@ -140,38 +141,6 @@
"url": "https://opencollective.com/babel"
}
},
- "node_modules/@babel/core/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@babel/core/node_modules/json5": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
- "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@babel/core/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
"node_modules/@babel/core/node_modules/semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -416,6 +385,25 @@
"node": ">=0.8.0"
}
},
+ "node_modules/@babel/highlight/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/@babel/parser": {
"version": "7.19.3",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz",
@@ -635,22 +623,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/@babel/traverse/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/@babel/traverse/node_modules/globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@@ -659,11 +631,6 @@
"node": ">=4"
}
},
- "node_modules/@babel/traverse/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
"node_modules/@babel/types": {
"version": "7.19.3",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz",
@@ -694,10 +661,20 @@
"node": ">=12"
}
},
+ "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "devOptional": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
"node_modules/@eslint/eslintrc": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz",
- "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz",
+ "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
@@ -717,33 +694,10 @@
"url": "https://opencollective.com/eslint"
}
},
- "node_modules/@eslint/eslintrc/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
"node_modules/@faker-js/faker": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-7.5.0.tgz",
- "integrity": "sha512-8wNUCCUHvfvI0gQpDUho/3gPzABffnCn5um65F8dzQ86zz6dlt4+nmAA7PQUc8L+eH+9RgR/qzy5N/8kN0Ozdw==",
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-7.6.0.tgz",
+ "integrity": "sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==",
"dev": true,
"engines": {
"node": ">=14.0.0",
@@ -764,39 +718,6 @@
"node": ">=10.10.0"
}
},
- "node_modules/@humanwhocodes/config-array/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@humanwhocodes/config-array/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/@humanwhocodes/gitignore-to-minimatch": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz",
- "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
"node_modules/@humanwhocodes/module-importer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
@@ -1087,15 +1008,6 @@
}
}
},
- "node_modules/@jest/reporters/node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
- "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- },
"node_modules/@jest/schemas": {
"version": "29.0.0",
"resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz",
@@ -1120,15 +1032,6 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@jest/source-map/node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
- "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- },
"node_modules/@jest/test-result": {
"version": "29.1.2",
"resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.1.2.tgz",
@@ -1182,15 +1085,6 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@jest/transform/node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
- "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- },
"node_modules/@jest/types": {
"version": "29.1.2",
"resolved": "https://registry.npmjs.org/@jest/types/-/types-29.1.2.tgz",
@@ -1241,12 +1135,12 @@
"integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
- "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "version": "0.3.16",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.16.tgz",
+ "integrity": "sha512-LCQ+NeThyJ4k1W2d+vIKdxuSt9R3pQSZ4P92m7EakaYuXcVWbHuT5bjNcqLd4Rdgi6xYWYDvBJZJLZSLanjDcA==",
"dependencies": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
}
},
"node_modules/@jsdevtools/ono": {
@@ -1390,6 +1284,12 @@
"@types/node": "*"
}
},
+ "node_modules/@types/cookiejar": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
+ "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
+ "dev": true
+ },
"node_modules/@types/express": {
"version": "4.17.14",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz",
@@ -1403,9 +1303,9 @@
}
},
"node_modules/@types/express-serve-static-core": {
- "version": "4.17.30",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz",
- "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==",
+ "version": "4.17.31",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz",
+ "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==",
"dev": true,
"dependencies": {
"@types/node": "*",
@@ -1443,9 +1343,9 @@
}
},
"node_modules/@types/jest": {
- "version": "29.1.1",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.1.1.tgz",
- "integrity": "sha512-U9Ey07dGWl6fUFaIaUQUKWG5NoKi/zizeVQCGV8s4nSU0jPgqphVZvS64+8BtWYvrc3ZGw6wo943NSYPxkrp/g==",
+ "version": "29.1.2",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.1.2.tgz",
+ "integrity": "sha512-y+nlX0h87U0R+wsGn6EBuoRWYyv3KFtwRNP3QWp9+k2tJ2/bqcGS3UxD7jgT+tiwJWWq3UsyV4Y+T6rsMT4XMg==",
"dev": true,
"dependencies": {
"expect": "^29.0.0",
@@ -1506,6 +1406,25 @@
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
"integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw=="
},
+ "node_modules/@types/superagent": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.15.tgz",
+ "integrity": "sha512-mu/N4uvfDN2zVQQ5AYJI/g4qxn2bHB6521t1UuH09ShNWjebTqN0ZFuYK9uYjcgmI0dTQEs+Owi1EO6U0OkOZQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/cookiejar": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/supertest": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.12.tgz",
+ "integrity": "sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/superagent": "*"
+ }
+ },
"node_modules/@types/swagger-jsdoc": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/@types/swagger-jsdoc/-/swagger-jsdoc-6.0.1.tgz",
@@ -1536,16 +1455,15 @@
"integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA=="
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.37.0.tgz",
- "integrity": "sha512-Fde6W0IafXktz1UlnhGkrrmnnGpAo1kyX7dnyHHVrmwJOn72Oqm3eYtddrpOwwel2W8PAK9F3pIL5S+lfoM0og==",
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.39.0.tgz",
+ "integrity": "sha512-xVfKOkBm5iWMNGKQ2fwX5GVgBuHmZBO1tCRwXmY5oAIsPscfwm2UADDuNB8ZVYCtpQvJK4xpjrK7jEhcJ0zY9A==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "5.37.0",
- "@typescript-eslint/type-utils": "5.37.0",
- "@typescript-eslint/utils": "5.37.0",
+ "@typescript-eslint/scope-manager": "5.39.0",
+ "@typescript-eslint/type-utils": "5.39.0",
+ "@typescript-eslint/utils": "5.39.0",
"debug": "^4.3.4",
- "functional-red-black-tree": "^1.0.1",
"ignore": "^5.2.0",
"regexpp": "^3.2.0",
"semver": "^7.3.7",
@@ -1568,100 +1486,15 @@
}
}
},
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz",
- "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.37.0",
- "@typescript-eslint/visitor-keys": "5.37.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz",
- "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz",
- "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.37.0",
- "eslint-visitor-keys": "^3.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/@typescript-eslint/parser": {
- "version": "5.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.1.tgz",
- "integrity": "sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA==",
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.39.0.tgz",
+ "integrity": "sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "5.33.1",
- "@typescript-eslint/types": "5.33.1",
- "@typescript-eslint/typescript-estree": "5.33.1",
+ "@typescript-eslint/scope-manager": "5.39.0",
+ "@typescript-eslint/types": "5.39.0",
+ "@typescript-eslint/typescript-estree": "5.39.0",
"debug": "^4.3.4"
},
"engines": {
@@ -1680,37 +1513,14 @@
}
}
},
- "node_modules/@typescript-eslint/parser/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/parser/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
"node_modules/@typescript-eslint/scope-manager": {
- "version": "5.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz",
- "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==",
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz",
+ "integrity": "sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.33.1",
- "@typescript-eslint/visitor-keys": "5.33.1"
+ "@typescript-eslint/types": "5.39.0",
+ "@typescript-eslint/visitor-keys": "5.39.0"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -1721,13 +1531,13 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.37.0.tgz",
- "integrity": "sha512-BSx/O0Z0SXOF5tY0bNTBcDEKz2Ec20GVYvq/H/XNKiUorUFilH7NPbFUuiiyzWaSdN3PA8JV0OvYx0gH/5aFAQ==",
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.39.0.tgz",
+ "integrity": "sha512-KJHJkOothljQWzR3t/GunL0TPKY+fGJtnpl+pX+sJ0YiKTz3q2Zr87SGTmFqsCMFrLt5E0+o+S6eQY0FAXj9uA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/typescript-estree": "5.37.0",
- "@typescript-eslint/utils": "5.37.0",
+ "@typescript-eslint/typescript-estree": "5.39.0",
+ "@typescript-eslint/utils": "5.39.0",
"debug": "^4.3.4",
"tsutils": "^3.21.0"
},
@@ -1747,10 +1557,10 @@
}
}
},
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz",
- "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==",
+ "node_modules/@typescript-eslint/types": {
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.39.0.tgz",
+ "integrity": "sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -1760,14 +1570,14 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz",
- "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==",
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz",
+ "integrity": "sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.37.0",
- "@typescript-eslint/visitor-keys": "5.37.0",
+ "@typescript-eslint/types": "5.39.0",
+ "@typescript-eslint/visitor-keys": "5.39.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -1787,14 +1597,18 @@
}
}
},
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz",
- "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==",
+ "node_modules/@typescript-eslint/utils": {
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.39.0.tgz",
+ "integrity": "sha512-+DnY5jkpOpgj+EBtYPyHRjXampJfC0yUZZzfzLuUWVZvCuKqSdJVC8UhdWipIw7VKNTfwfAPiOWzYkAwuIhiAg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "5.37.0",
- "eslint-visitor-keys": "^3.3.0"
+ "@types/json-schema": "^7.0.9",
+ "@typescript-eslint/scope-manager": "5.39.0",
+ "@typescript-eslint/types": "5.39.0",
+ "@typescript-eslint/typescript-estree": "5.39.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -1802,268 +1616,19 @@
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
- "node_modules/@typescript-eslint/type-utils/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz",
+ "integrity": "sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==",
"dev": true,
"dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@typescript-eslint/types": {
- "version": "5.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz",
- "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz",
- "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.33.1",
- "@typescript-eslint/visitor-keys": "5.33.1",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.3.7",
- "tsutils": "^3.21.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@typescript-eslint/utils": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.37.0.tgz",
- "integrity": "sha512-jUEJoQrWbZhmikbcWSMDuUSxEE7ID2W/QCV/uz10WtQqfOuKZUqFGjqLJ+qhDd17rjgp+QJPqTdPIBWwoob2NQ==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.37.0",
- "@typescript-eslint/types": "5.37.0",
- "@typescript-eslint/typescript-estree": "5.37.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^3.0.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz",
- "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.37.0",
- "@typescript-eslint/visitor-keys": "5.37.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz",
- "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz",
- "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.37.0",
- "@typescript-eslint/visitor-keys": "5.37.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.3.7",
- "tsutils": "^3.21.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz",
- "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.37.0",
- "eslint-visitor-keys": "^3.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/@typescript-eslint/utils/node_modules/semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz",
- "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.33.1",
- "eslint-visitor-keys": "^3.3.0"
+ "@typescript-eslint/types": "5.39.0",
+ "eslint-visitor-keys": "^3.3.0"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -2079,17 +1644,6 @@
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true
},
- "node_modules/abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "dependencies": {
- "event-target-shim": "^5.0.0"
- },
- "engines": {
- "node": ">=6.5"
- }
- },
"node_modules/accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -2149,9 +1703,9 @@
}
},
"node_modules/all-contributors-cli": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/all-contributors-cli/-/all-contributors-cli-6.23.0.tgz",
- "integrity": "sha512-myfnxTFLJ1hL5wA705QYkLm08iney2J+A1DC3m2fAe+oyFoXH03u2oK+G7B/cvgrbVl5eWw8yELKmtR6iAtoCw==",
+ "version": "6.23.1",
+ "resolved": "https://registry.npmjs.org/all-contributors-cli/-/all-contributors-cli-6.23.1.tgz",
+ "integrity": "sha512-k5qS+l7booUL3e/R/8mxliUd4SqP5hmLq7LDcm4uCoQe1sGlSPebVNQEmvEuWbAxUOTPFJZX2pC0U/UNGCUNAA==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.7.6",
@@ -2172,124 +1726,6 @@
"node": ">=4"
}
},
- "node_modules/all-contributors-cli/node_modules/cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "node_modules/all-contributors-cli/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/all-contributors-cli/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/all-contributors-cli/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/all-contributors-cli/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/all-contributors-cli/node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/all-contributors-cli/node_modules/y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
- },
- "node_modules/all-contributors-cli/node_modules/yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dev": true,
- "dependencies": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/all-contributors-cli/node_modules/yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dev": true,
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/ansi-escapes": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
@@ -2518,25 +1954,6 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/basic-auth": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
@@ -2563,9 +1980,9 @@
}
},
"node_modules/body-parser": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
- "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
+ "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
"dependencies": {
"bytes": "3.1.2",
"content-type": "~1.0.4",
@@ -2575,7 +1992,7 @@
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
- "qs": "6.10.3",
+ "qs": "6.11.0",
"raw-body": "2.5.1",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
@@ -2585,6 +2002,19 @@
"npm": "1.2.8000 || >= 1.4.16"
}
},
+ "node_modules/body-parser/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/body-parser/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -2652,29 +2082,6 @@
"node-int64": "^0.4.0"
}
},
- "node_modules/buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.2.1"
- }
- },
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -2689,21 +2096,6 @@
"semver": "^7.0.0"
}
},
- "node_modules/builtins/node_modules/semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -2746,9 +2138,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001414",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz",
- "integrity": "sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg==",
+ "version": "1.0.30001418",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz",
+ "integrity": "sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==",
"funding": [
{
"type": "opencollective",
@@ -2775,25 +2167,6 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/chalk/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/chalk/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/char-regex": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
@@ -2835,10 +2208,22 @@
"fsevents": "~2.3.2"
}
},
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/ci-info": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz",
- "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug=="
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz",
+ "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw=="
},
"node_modules/cjs-module-lexer": {
"version": "1.2.2",
@@ -2867,16 +2252,14 @@
}
},
"node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "dev": true,
"dependencies": {
"string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
}
},
"node_modules/co": {
@@ -3020,11 +2403,19 @@
}
},
"node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
- "ms": "2.0.0"
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
"node_modules/decamelize": {
@@ -3160,9 +2551,9 @@
}
},
"node_modules/dotenv": {
- "version": "16.0.2",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz",
- "integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==",
+ "version": "16.0.3",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz",
+ "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==",
"engines": {
"node": ">=12"
}
@@ -3173,9 +2564,9 @@
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
"node_modules/electron-to-chromium": {
- "version": "1.4.270",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.270.tgz",
- "integrity": "sha512-KNhIzgLiJmDDC444dj9vEOpZEgsV96ult9Iff98Vanumn+ShJHd5se8aX6KeVxdc0YQeqdrezBZv89rleDbvSg=="
+ "version": "1.4.276",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.276.tgz",
+ "integrity": "sha512-EpuHPqu8YhonqLBXHoU6hDJCD98FCe6KDoet3/gY1qsQ6usjJoHqBH2YIVs8FXaAtHwVL8Uqa/fsYao/vq9VWQ=="
},
"node_modules/emittery": {
"version": "0.10.2",
@@ -3210,31 +2601,32 @@
}
},
"node_modules/es-abstract": {
- "version": "1.20.1",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz",
- "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==",
+ "version": "1.20.4",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz",
+ "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
"function.prototype.name": "^1.1.5",
- "get-intrinsic": "^1.1.1",
+ "get-intrinsic": "^1.1.3",
"get-symbol-description": "^1.0.0",
"has": "^1.0.3",
"has-property-descriptors": "^1.0.0",
"has-symbols": "^1.0.3",
"internal-slot": "^1.0.3",
- "is-callable": "^1.2.4",
+ "is-callable": "^1.2.7",
"is-negative-zero": "^2.0.2",
"is-regex": "^1.1.4",
"is-shared-array-buffer": "^1.0.2",
"is-string": "^1.0.7",
"is-weakref": "^1.0.2",
- "object-inspect": "^1.12.0",
+ "object-inspect": "^1.12.2",
"object-keys": "^1.1.1",
- "object.assign": "^4.1.2",
+ "object.assign": "^4.1.4",
"regexp.prototype.flags": "^1.4.3",
+ "safe-regex-test": "^1.0.0",
"string.prototype.trimend": "^1.0.5",
"string.prototype.trimstart": "^1.0.5",
"unbox-primitive": "^1.0.2"
@@ -3298,14 +2690,13 @@
}
},
"node_modules/eslint": {
- "version": "8.24.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz",
- "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==",
+ "version": "8.25.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz",
+ "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==",
"dev": true,
"dependencies": {
- "@eslint/eslintrc": "^1.3.2",
+ "@eslint/eslintrc": "^1.3.3",
"@humanwhocodes/config-array": "^0.10.5",
- "@humanwhocodes/gitignore-to-minimatch": "^1.0.2",
"@humanwhocodes/module-importer": "^1.0.1",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
@@ -3416,12 +2807,6 @@
"ms": "^2.1.1"
}
},
- "node_modules/eslint-import-resolver-node/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
"node_modules/eslint-module-utils": {
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz",
@@ -3448,12 +2833,6 @@
"ms": "^2.1.1"
}
},
- "node_modules/eslint-module-utils/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
"node_modules/eslint-plugin-es": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
@@ -3524,6 +2903,15 @@
"eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
}
},
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
"node_modules/eslint-plugin-import/node_modules/doctrine": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
@@ -3536,6 +2924,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/eslint-plugin-import/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ },
"node_modules/eslint-plugin-n": {
"version": "15.3.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.3.0.tgz",
@@ -3561,21 +2955,6 @@
"eslint": ">=7.0.0"
}
},
- "node_modules/eslint-plugin-n/node_modules/semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/eslint-plugin-promise": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz",
@@ -3637,23 +3016,6 @@
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
- "node_modules/eslint/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/eslint/node_modules/eslint-scope": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
@@ -3676,24 +3038,6 @@
"node": ">=4.0"
}
},
- "node_modules/eslint/node_modules/glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/eslint/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
"node_modules/espree": {
"version": "9.4.0",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz",
@@ -3782,28 +3126,12 @@
"node": ">=0.10.0"
}
},
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "node_modules/etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
"engines": {
- "node": ">=0.8.x"
+ "node": ">= 0.6"
}
},
"node_modules/execa": {
@@ -3852,13 +3180,13 @@
}
},
"node_modules/express": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
- "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
+ "version": "4.18.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
+ "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
- "body-parser": "1.20.0",
+ "body-parser": "1.20.1",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
"cookie": "0.5.0",
@@ -3877,7 +3205,7 @@
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
"proxy-addr": "~2.0.7",
- "qs": "6.10.3",
+ "qs": "6.11.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
"send": "0.18.0",
@@ -3893,9 +3221,9 @@
}
},
"node_modules/express-rate-limit": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.5.2.tgz",
- "integrity": "sha512-N0cG/5ccbXfNC+FxRu7ujm2HjKkygF2PL7KLAf/hct9uqKB5QkZVizb/hEst6tUBXnfhblYWgOorN2eY+Saerw==",
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.6.0.tgz",
+ "integrity": "sha512-HFN2+4ZGdkQOS8Qli4z6knmJFnw6lZed67o6b7RGplWeb1Z0s8VXaj3dUgPIdm9hrhZXTRpCTHXA0/2Eqex0vA==",
"engines": {
"node": ">= 12.9.0"
},
@@ -3903,6 +3231,19 @@
"express": "^4 || ^5"
}
},
+ "node_modules/express/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/express/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
"node_modules/external-editor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
@@ -3924,9 +3265,9 @@
"dev": true
},
"node_modules/fast-glob": {
- "version": "3.2.11",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
- "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "version": "3.2.12",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
"dev": true,
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
@@ -3939,6 +3280,18 @@
"node": ">=8.6.0"
}
},
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/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",
@@ -4036,6 +3389,19 @@
"node": ">= 0.8"
}
},
+ "node_modules/finalhandler/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/finalhandler/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
"node_modules/find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -4130,19 +3496,6 @@
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
- "node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
"node_modules/function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -4166,12 +3519,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
- "dev": true
- },
"node_modules/functions-have-names": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
@@ -4198,9 +3545,9 @@
}
},
"node_modules/get-intrinsic": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
- "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
+ "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
"dependencies": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
@@ -4265,15 +3612,15 @@
}
},
"node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
"dependencies": {
- "is-glob": "^4.0.1"
+ "is-glob": "^4.0.3"
},
"engines": {
- "node": ">= 6"
+ "node": ">=10.13.0"
}
},
"node_modules/globals": {
@@ -4343,11 +3690,11 @@
}
},
"node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
"node_modules/has-property-descriptors": {
@@ -4435,25 +3782,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/ignore": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
@@ -4617,9 +3945,9 @@
}
},
"node_modules/is-callable": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
- "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
"dev": true,
"engines": {
"node": ">= 0.4"
@@ -4821,9 +4149,9 @@
}
},
"node_modules/istanbul-lib-instrument": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz",
- "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
"dependencies": {
"@babel/core": "^7.12.3",
"@babel/parser": "^7.14.7",
@@ -4856,25 +4184,6 @@
"node": ">=8"
}
},
- "node_modules/istanbul-lib-report/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-report/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/istanbul-lib-source-maps": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
@@ -4888,27 +4197,6 @@
"node": ">=10"
}
},
- "node_modules/istanbul-lib-source-maps/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/istanbul-lib-source-maps/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
"node_modules/istanbul-reports": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
@@ -5020,6 +4308,60 @@
}
}
},
+ "node_modules/jest-cli/node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/jest-cli/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/jest-cli/node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/jest-cli/node_modules/yargs": {
+ "version": "17.6.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz",
+ "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/jest-config": {
"version": "29.1.2",
"resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.1.2.tgz",
@@ -5328,14 +4670,6 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/jest-runtime/node_modules/strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/jest-snapshot": {
"version": "29.1.2",
"resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.1.2.tgz",
@@ -5370,20 +4704,6 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/jest-snapshot/node_modules/semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/jest-util": {
"version": "29.1.2",
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.1.2.tgz",
@@ -5459,14 +4779,6 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/jest-worker/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/jest-worker/node_modules/supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
@@ -5482,9 +4794,9 @@
}
},
"node_modules/js-sdsl": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz",
- "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz",
+ "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==",
"dev": true
},
"node_modules/js-tokens": {
@@ -5546,15 +4858,14 @@
"dev": true
},
"node_modules/json5": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.0"
- },
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
+ "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
"bin": {
"json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
}
},
"node_modules/kleur": {
@@ -5803,6 +5114,19 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/morgan/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/morgan/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
"node_modules/morgan/node_modules/on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -5815,9 +5139,9 @@
}
},
"node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/mute-stream": {
"version": "0.0.8",
@@ -5905,11 +5229,35 @@
"ms": "^2.1.1"
}
},
- "node_modules/nodemon/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
+ "node_modules/nodemon/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/nodemon/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/nodemon/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
},
"node_modules/nopt": {
"version": "1.0.10",
@@ -6350,14 +5698,6 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
- "engines": {
- "node": ">= 0.6.0"
- }
- },
"node_modules/prompts": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
@@ -6398,9 +5738,9 @@
}
},
"node_modules/qs": {
- "version": "6.10.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
- "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"dependencies": {
"side-channel": "^1.0.4"
},
@@ -6458,20 +5798,6 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
},
- "node_modules/readable-stream": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.2.0.tgz",
- "integrity": "sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A==",
- "dependencies": {
- "abort-controller": "^3.0.0",
- "buffer": "^6.0.3",
- "events": "^3.3.0",
- "process": "^0.11.10"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -6686,18 +6012,37 @@
}
]
},
+ "node_modules/safe-regex-test": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
+ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-regex": "^1.1.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
"bin": {
- "semver": "bin/semver"
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/send": {
@@ -6723,6 +6068,19 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/send/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/send/node_modules/debug/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
"node_modules/send/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -6938,12 +6296,11 @@
}
},
"node_modules/strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
- "dev": true,
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
"engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
"node_modules/strip-final-newline": {
@@ -6966,9 +6323,10 @@
}
},
"node_modules/superagent": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.1.tgz",
- "integrity": "sha512-eQtVnsW5MkEUHNh3L5+Gz6d8O9d1i+zfhqAmKqJGTETeYO17o9pBQQym95LpbCxrqLfEFtLmleAo0wlx66BQwQ==",
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.2.tgz",
+ "integrity": "sha512-QtYZ9uaNAMexI7XWl2vAXAh0j4q9H7T0WVEI/y5qaUB3QLwxo+voUgCQ217AokJzUTIVOp0RTo7fhZrwhD7A2Q==",
+ "deprecated": "Please use v8.0.0 until https://github.com/visionmedia/superagent/issues/1743 is resolved",
"dependencies": {
"component-emitter": "^1.3.0",
"cookiejar": "^2.1.3",
@@ -6979,29 +6337,12 @@
"methods": "^1.1.2",
"mime": "2.6.0",
"qs": "^6.11.0",
- "readable-stream": "^4.2.0",
"semver": "^7.3.7"
},
"engines": {
"node": ">=6.4.0 <13 || >=14"
}
},
- "node_modules/superagent/node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
"node_modules/superagent/node_modules/mime": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
@@ -7013,43 +6354,10 @@
"node": ">=4.0.0"
}
},
- "node_modules/superagent/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "node_modules/superagent/node_modules/qs": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
- "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
- "dependencies": {
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/superagent/node_modules/semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/supertest": {
- "version": "6.2.4",
- "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.4.tgz",
- "integrity": "sha512-M8xVnCNv+q2T2WXVzxDECvL2695Uv2uUj2O0utxsld/HRyJvOU8W9f1gvsYxSNU4wmIe0/L/ItnpU4iKq0emDA==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.0.tgz",
+ "integrity": "sha512-QgWju1cNoacP81Rv88NKkQ4oXTzGg0eNZtOoxp1ROpbS4OHY/eK5b8meShuFtdni161o5X0VQvgo7ErVyKK+Ow==",
"dependencies": {
"methods": "^1.1.2",
"superagent": "^8.0.0"
@@ -7059,14 +6367,14 @@
}
},
"node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dependencies": {
- "has-flag": "^3.0.0"
+ "has-flag": "^4.0.0"
},
"engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
"node_modules/supports-hyperlinks": {
@@ -7081,25 +6389,6 @@
"node": ">=8"
}
},
- "node_modules/supports-hyperlinks/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-hyperlinks/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
@@ -7161,9 +6450,9 @@
}
},
"node_modules/swagger-ui-dist": {
- "version": "4.14.0",
- "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.14.0.tgz",
- "integrity": "sha512-TBzhheU15s+o54Cgk9qxuYcZMiqSm/SkvKnapoGHOF66kz0Y5aGjpzj5BT/vpBbn6rTPJ9tUYXQxuDWfsjiGMw=="
+ "version": "4.14.2",
+ "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.14.2.tgz",
+ "integrity": "sha512-kOIU7Ts3TrXDLb3/c9jRe4qGp8O3bRT19FFJA8wJfrRFkcK/4atPn3krhtBVJ57ZkNNofworXHxuYwmaisXBdg=="
},
"node_modules/swagger-ui-express": {
"version": "4.5.0",
@@ -7324,33 +6613,6 @@
}
}
},
- "node_modules/ts-jest/node_modules/json5": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
- "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
- "dev": true,
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ts-jest/node_modules/semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/ts-node": {
"version": "10.9.1",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
@@ -7406,6 +6668,27 @@
"strip-bom": "^3.0.0"
}
},
+ "node_modules/tsconfig-paths/node_modules/json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/tsconfig-paths/node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
@@ -7514,9 +6797,9 @@
}
},
"node_modules/update-browserslist-db": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz",
- "integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==",
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+ "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
"funding": [
{
"type": "opencollective",
@@ -7574,15 +6857,6 @@
"node": ">=10.12.0"
}
},
- "node_modules/v8-to-istanbul/node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
- "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- },
"node_modules/validator": {
"version": "13.7.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz",
@@ -7669,19 +6943,17 @@
}
},
"node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ "node": ">=8"
}
},
"node_modules/wrappy": {
@@ -7702,49 +6974,117 @@
}
},
"node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+ "dev": true
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "node_modules/yaml": {
+ "version": "2.0.0-1",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.0.0-1.tgz",
+ "integrity": "sha512-W7h5dEhywMKenDJh2iX/LABkbFnBxasD27oyXWDS/feDsxiw0dD5ncXdYXgkvAsXIY2MpW/ZKkr9IU30DBdMNQ==",
"engines": {
- "node": ">=10"
+ "node": ">= 6"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
- "node_modules/yaml": {
- "version": "2.0.0-1",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.0.0-1.tgz",
- "integrity": "sha512-W7h5dEhywMKenDJh2iX/LABkbFnBxasD27oyXWDS/feDsxiw0dD5ncXdYXgkvAsXIY2MpW/ZKkr9IU30DBdMNQ==",
+ "node_modules/yargs/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
"engines": {
- "node": ">= 6"
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/yargs": {
- "version": "17.6.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz",
- "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==",
+ "node_modules/yargs/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
"dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.0.0"
+ "p-limit": "^2.2.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=8"
}
},
- "node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "node_modules/yargs/node_modules/yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ },
"engines": {
- "node": ">=12"
+ "node": ">=6"
}
},
"node_modules/yn": {
@@ -7872,24 +7212,6 @@
"semver": "^6.3.0"
},
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "json5": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
- "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA=="
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -8073,6 +7395,19 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
}
}
},
@@ -8229,23 +7564,10 @@
"globals": "^11.1.0"
},
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "requires": {
- "ms": "2.1.2"
- }
- },
"globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
@@ -8271,12 +7593,24 @@
"devOptional": true,
"requires": {
"@jridgewell/trace-mapping": "0.3.9"
+ },
+ "dependencies": {
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "devOptional": true,
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ }
}
},
"@eslint/eslintrc": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz",
- "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz",
+ "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
@@ -8288,29 +7622,12 @@
"js-yaml": "^4.1.0",
"minimatch": "^3.1.2",
"strip-json-comments": "^3.1.1"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- }
}
},
"@faker-js/faker": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-7.5.0.tgz",
- "integrity": "sha512-8wNUCCUHvfvI0gQpDUho/3gPzABffnCn5um65F8dzQ86zz6dlt4+nmAA7PQUc8L+eH+9RgR/qzy5N/8kN0Ozdw==",
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-7.6.0.tgz",
+ "integrity": "sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==",
"dev": true
},
"@humanwhocodes/config-array": {
@@ -8322,31 +7639,8 @@
"@humanwhocodes/object-schema": "^1.2.1",
"debug": "^4.1.1",
"minimatch": "^3.0.4"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- }
}
},
- "@humanwhocodes/gitignore-to-minimatch": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz",
- "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==",
- "dev": true
- },
"@humanwhocodes/module-importer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
@@ -8563,17 +7857,6 @@
"strip-ansi": "^6.0.0",
"terminal-link": "^2.0.0",
"v8-to-istanbul": "^9.0.1"
- },
- "dependencies": {
- "@jridgewell/trace-mapping": {
- "version": "0.3.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
- "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
- "requires": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- }
}
},
"@jest/schemas": {
@@ -8592,17 +7875,6 @@
"@jridgewell/trace-mapping": "^0.3.15",
"callsites": "^3.0.0",
"graceful-fs": "^4.2.9"
- },
- "dependencies": {
- "@jridgewell/trace-mapping": {
- "version": "0.3.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
- "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
- "requires": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- }
}
},
"@jest/test-result": {
@@ -8647,17 +7919,6 @@
"pirates": "^4.0.4",
"slash": "^3.0.0",
"write-file-atomic": "^4.0.1"
- },
- "dependencies": {
- "@jridgewell/trace-mapping": {
- "version": "0.3.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
- "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
- "requires": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- }
}
},
"@jest/types": {
@@ -8698,12 +7959,12 @@
"integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
},
"@jridgewell/trace-mapping": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
- "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "version": "0.3.16",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.16.tgz",
+ "integrity": "sha512-LCQ+NeThyJ4k1W2d+vIKdxuSt9R3pQSZ4P92m7EakaYuXcVWbHuT5bjNcqLd4Rdgi6xYWYDvBJZJLZSLanjDcA==",
"requires": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
}
},
"@jsdevtools/ono": {
@@ -8838,6 +8099,12 @@
"@types/node": "*"
}
},
+ "@types/cookiejar": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz",
+ "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==",
+ "dev": true
+ },
"@types/express": {
"version": "4.17.14",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz",
@@ -8851,9 +8118,9 @@
}
},
"@types/express-serve-static-core": {
- "version": "4.17.30",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz",
- "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==",
+ "version": "4.17.31",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz",
+ "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==",
"dev": true,
"requires": {
"@types/node": "*",
@@ -8891,9 +8158,9 @@
}
},
"@types/jest": {
- "version": "29.1.1",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.1.1.tgz",
- "integrity": "sha512-U9Ey07dGWl6fUFaIaUQUKWG5NoKi/zizeVQCGV8s4nSU0jPgqphVZvS64+8BtWYvrc3ZGw6wo943NSYPxkrp/g==",
+ "version": "29.1.2",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.1.2.tgz",
+ "integrity": "sha512-y+nlX0h87U0R+wsGn6EBuoRWYyv3KFtwRNP3QWp9+k2tJ2/bqcGS3UxD7jgT+tiwJWWq3UsyV4Y+T6rsMT4XMg==",
"dev": true,
"requires": {
"expect": "^29.0.0",
@@ -8954,6 +8221,25 @@
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
"integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw=="
},
+ "@types/superagent": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.15.tgz",
+ "integrity": "sha512-mu/N4uvfDN2zVQQ5AYJI/g4qxn2bHB6521t1UuH09ShNWjebTqN0ZFuYK9uYjcgmI0dTQEs+Owi1EO6U0OkOZQ==",
+ "dev": true,
+ "requires": {
+ "@types/cookiejar": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/supertest": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.12.tgz",
+ "integrity": "sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==",
+ "dev": true,
+ "requires": {
+ "@types/superagent": "*"
+ }
+ },
"@types/swagger-jsdoc": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/@types/swagger-jsdoc/-/swagger-jsdoc-6.0.1.tgz",
@@ -8984,317 +8270,97 @@
"integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA=="
},
"@typescript-eslint/eslint-plugin": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.37.0.tgz",
- "integrity": "sha512-Fde6W0IafXktz1UlnhGkrrmnnGpAo1kyX7dnyHHVrmwJOn72Oqm3eYtddrpOwwel2W8PAK9F3pIL5S+lfoM0og==",
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.39.0.tgz",
+ "integrity": "sha512-xVfKOkBm5iWMNGKQ2fwX5GVgBuHmZBO1tCRwXmY5oAIsPscfwm2UADDuNB8ZVYCtpQvJK4xpjrK7jEhcJ0zY9A==",
"dev": true,
"requires": {
- "@typescript-eslint/scope-manager": "5.37.0",
- "@typescript-eslint/type-utils": "5.37.0",
- "@typescript-eslint/utils": "5.37.0",
+ "@typescript-eslint/scope-manager": "5.39.0",
+ "@typescript-eslint/type-utils": "5.39.0",
+ "@typescript-eslint/utils": "5.39.0",
"debug": "^4.3.4",
- "functional-red-black-tree": "^1.0.1",
"ignore": "^5.2.0",
"regexpp": "^3.2.0",
"semver": "^7.3.7",
"tsutils": "^3.21.0"
- },
- "dependencies": {
- "@typescript-eslint/scope-manager": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz",
- "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.37.0",
- "@typescript-eslint/visitor-keys": "5.37.0"
- }
- },
- "@typescript-eslint/types": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz",
- "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==",
- "dev": true
- },
- "@typescript-eslint/visitor-keys": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz",
- "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.37.0",
- "eslint-visitor-keys": "^3.3.0"
- }
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
}
},
"@typescript-eslint/parser": {
- "version": "5.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.1.tgz",
- "integrity": "sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA==",
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.39.0.tgz",
+ "integrity": "sha512-PhxLjrZnHShe431sBAGHaNe6BDdxAASDySgsBCGxcBecVCi8NQWxQZMcizNA4g0pN51bBAn/FUfkWG3SDVcGlA==",
"dev": true,
"requires": {
- "@typescript-eslint/scope-manager": "5.33.1",
- "@typescript-eslint/types": "5.33.1",
- "@typescript-eslint/typescript-estree": "5.33.1",
+ "@typescript-eslint/scope-manager": "5.39.0",
+ "@typescript-eslint/types": "5.39.0",
+ "@typescript-eslint/typescript-estree": "5.39.0",
"debug": "^4.3.4"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- }
}
},
"@typescript-eslint/scope-manager": {
- "version": "5.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz",
- "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==",
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.39.0.tgz",
+ "integrity": "sha512-/I13vAqmG3dyqMVSZPjsbuNQlYS082Y7OMkwhCfLXYsmlI0ca4nkL7wJ/4gjX70LD4P8Hnw1JywUVVAwepURBw==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.33.1",
- "@typescript-eslint/visitor-keys": "5.33.1"
+ "@typescript-eslint/types": "5.39.0",
+ "@typescript-eslint/visitor-keys": "5.39.0"
}
},
"@typescript-eslint/type-utils": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.37.0.tgz",
- "integrity": "sha512-BSx/O0Z0SXOF5tY0bNTBcDEKz2Ec20GVYvq/H/XNKiUorUFilH7NPbFUuiiyzWaSdN3PA8JV0OvYx0gH/5aFAQ==",
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.39.0.tgz",
+ "integrity": "sha512-KJHJkOothljQWzR3t/GunL0TPKY+fGJtnpl+pX+sJ0YiKTz3q2Zr87SGTmFqsCMFrLt5E0+o+S6eQY0FAXj9uA==",
"dev": true,
"requires": {
- "@typescript-eslint/typescript-estree": "5.37.0",
- "@typescript-eslint/utils": "5.37.0",
+ "@typescript-eslint/typescript-estree": "5.39.0",
+ "@typescript-eslint/utils": "5.39.0",
"debug": "^4.3.4",
"tsutils": "^3.21.0"
- },
- "dependencies": {
- "@typescript-eslint/types": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz",
- "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==",
- "dev": true
- },
- "@typescript-eslint/typescript-estree": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz",
- "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.37.0",
- "@typescript-eslint/visitor-keys": "5.37.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.3.7",
- "tsutils": "^3.21.0"
- }
- },
- "@typescript-eslint/visitor-keys": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz",
- "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.37.0",
- "eslint-visitor-keys": "^3.3.0"
- }
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
}
},
"@typescript-eslint/types": {
- "version": "5.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz",
- "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==",
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.39.0.tgz",
+ "integrity": "sha512-gQMZrnfEBFXK38hYqt8Lkwt8f4U6yq+2H5VDSgP/qiTzC8Nw8JO3OuSUOQ2qW37S/dlwdkHDntkZM6SQhKyPhw==",
"dev": true
},
"@typescript-eslint/typescript-estree": {
- "version": "5.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz",
- "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==",
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.39.0.tgz",
+ "integrity": "sha512-qLFQP0f398sdnogJoLtd43pUgB18Q50QSA+BTE5h3sUxySzbWDpTSdgt4UyxNSozY/oDK2ta6HVAzvGgq8JYnA==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.33.1",
- "@typescript-eslint/visitor-keys": "5.33.1",
+ "@typescript-eslint/types": "5.39.0",
+ "@typescript-eslint/visitor-keys": "5.39.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
"semver": "^7.3.7",
"tsutils": "^3.21.0"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
}
},
"@typescript-eslint/utils": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.37.0.tgz",
- "integrity": "sha512-jUEJoQrWbZhmikbcWSMDuUSxEE7ID2W/QCV/uz10WtQqfOuKZUqFGjqLJ+qhDd17rjgp+QJPqTdPIBWwoob2NQ==",
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.39.0.tgz",
+ "integrity": "sha512-+DnY5jkpOpgj+EBtYPyHRjXampJfC0yUZZzfzLuUWVZvCuKqSdJVC8UhdWipIw7VKNTfwfAPiOWzYkAwuIhiAg==",
"dev": true,
"requires": {
- "@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.37.0",
- "@typescript-eslint/types": "5.37.0",
- "@typescript-eslint/typescript-estree": "5.37.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^3.0.0"
- },
- "dependencies": {
- "@typescript-eslint/scope-manager": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz",
- "integrity": "sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.37.0",
- "@typescript-eslint/visitor-keys": "5.37.0"
- }
- },
- "@typescript-eslint/types": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz",
- "integrity": "sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA==",
- "dev": true
- },
- "@typescript-eslint/typescript-estree": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz",
- "integrity": "sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.37.0",
- "@typescript-eslint/visitor-keys": "5.37.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.3.7",
- "tsutils": "^3.21.0"
- }
- },
- "@typescript-eslint/visitor-keys": {
- "version": "5.37.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz",
- "integrity": "sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "5.37.0",
- "eslint-visitor-keys": "^3.3.0"
- }
- },
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
+ "@types/json-schema": "^7.0.9",
+ "@typescript-eslint/scope-manager": "5.39.0",
+ "@typescript-eslint/types": "5.39.0",
+ "@typescript-eslint/typescript-estree": "5.39.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
}
},
"@typescript-eslint/visitor-keys": {
- "version": "5.33.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz",
- "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==",
+ "version": "5.39.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz",
+ "integrity": "sha512-yyE3RPwOG+XJBLrhvsxAidUgybJVQ/hG8BhiJo0k8JSAYfk/CshVcxf0HwP4Jt7WZZ6vLmxdo1p6EyN3tzFTkg==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "5.33.1",
+ "@typescript-eslint/types": "5.39.0",
"eslint-visitor-keys": "^3.3.0"
}
},
@@ -9304,14 +8370,6 @@
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true
},
- "abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "requires": {
- "event-target-shim": "^5.0.0"
- }
- },
"accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -9353,9 +8411,9 @@
}
},
"all-contributors-cli": {
- "version": "6.23.0",
- "resolved": "https://registry.npmjs.org/all-contributors-cli/-/all-contributors-cli-6.23.0.tgz",
- "integrity": "sha512-myfnxTFLJ1hL5wA705QYkLm08iney2J+A1DC3m2fAe+oyFoXH03u2oK+G7B/cvgrbVl5eWw8yELKmtR6iAtoCw==",
+ "version": "6.23.1",
+ "resolved": "https://registry.npmjs.org/all-contributors-cli/-/all-contributors-cli-6.23.1.tgz",
+ "integrity": "sha512-k5qS+l7booUL3e/R/8mxliUd4SqP5hmLq7LDcm4uCoQe1sGlSPebVNQEmvEuWbAxUOTPFJZX2pC0U/UNGCUNAA==",
"dev": true,
"requires": {
"@babel/runtime": "^7.7.6",
@@ -9368,102 +8426,6 @@
"node-fetch": "^2.6.0",
"pify": "^5.0.0",
"yargs": "^15.0.1"
- },
- "dependencies": {
- "cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
- },
- "yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dev": true,
- "requires": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- }
- },
- "yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
}
},
"ansi-escapes": {
@@ -9636,11 +8598,6 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
- },
"basic-auth": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
@@ -9663,9 +8620,9 @@
"dev": true
},
"body-parser": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
- "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
+ "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
"requires": {
"bytes": "3.1.2",
"content-type": "~1.0.4",
@@ -9675,10 +8632,25 @@
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
- "qs": "6.10.3",
+ "qs": "6.11.0",
"raw-body": "2.5.1",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ }
}
},
"brace-expansion": {
@@ -9726,15 +8698,6 @@
"node-int64": "^0.4.0"
}
},
- "buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.2.1"
- }
- },
"buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -9747,17 +8710,6 @@
"dev": true,
"requires": {
"semver": "^7.0.0"
- },
- "dependencies": {
- "semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
}
},
"bytes": {
@@ -9790,9 +8742,9 @@
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
},
"caniuse-lite": {
- "version": "1.0.30001414",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz",
- "integrity": "sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg=="
+ "version": "1.0.30001418",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz",
+ "integrity": "sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg=="
},
"chalk": {
"version": "4.1.2",
@@ -9801,21 +8753,6 @@
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
}
},
"char-regex": {
@@ -9843,12 +8780,23 @@
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
}
},
"ci-info": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz",
- "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug=="
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz",
+ "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw=="
},
"cjs-module-lexer": {
"version": "1.2.2",
@@ -9871,13 +8819,14 @@
"dev": true
},
"cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "dev": true,
"requires": {
"string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
}
},
"co": {
@@ -9995,11 +8944,11 @@
}
},
"debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
- "ms": "2.0.0"
+ "ms": "2.1.2"
}
},
"decamelize": {
@@ -10098,9 +9047,9 @@
}
},
"dotenv": {
- "version": "16.0.2",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.2.tgz",
- "integrity": "sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA=="
+ "version": "16.0.3",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz",
+ "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ=="
},
"ee-first": {
"version": "1.1.1",
@@ -10108,9 +9057,9 @@
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
"electron-to-chromium": {
- "version": "1.4.270",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.270.tgz",
- "integrity": "sha512-KNhIzgLiJmDDC444dj9vEOpZEgsV96ult9Iff98Vanumn+ShJHd5se8aX6KeVxdc0YQeqdrezBZv89rleDbvSg=="
+ "version": "1.4.276",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.276.tgz",
+ "integrity": "sha512-EpuHPqu8YhonqLBXHoU6hDJCD98FCe6KDoet3/gY1qsQ6usjJoHqBH2YIVs8FXaAtHwVL8Uqa/fsYao/vq9VWQ=="
},
"emittery": {
"version": "0.10.2",
@@ -10136,31 +9085,32 @@
}
},
"es-abstract": {
- "version": "1.20.1",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz",
- "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==",
+ "version": "1.20.4",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz",
+ "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
"function.prototype.name": "^1.1.5",
- "get-intrinsic": "^1.1.1",
+ "get-intrinsic": "^1.1.3",
"get-symbol-description": "^1.0.0",
"has": "^1.0.3",
"has-property-descriptors": "^1.0.0",
"has-symbols": "^1.0.3",
"internal-slot": "^1.0.3",
- "is-callable": "^1.2.4",
+ "is-callable": "^1.2.7",
"is-negative-zero": "^2.0.2",
"is-regex": "^1.1.4",
"is-shared-array-buffer": "^1.0.2",
"is-string": "^1.0.7",
"is-weakref": "^1.0.2",
- "object-inspect": "^1.12.0",
+ "object-inspect": "^1.12.2",
"object-keys": "^1.1.1",
- "object.assign": "^4.1.2",
+ "object.assign": "^4.1.4",
"regexp.prototype.flags": "^1.4.3",
+ "safe-regex-test": "^1.0.0",
"string.prototype.trimend": "^1.0.5",
"string.prototype.trimstart": "^1.0.5",
"unbox-primitive": "^1.0.2"
@@ -10203,14 +9153,13 @@
"dev": true
},
"eslint": {
- "version": "8.24.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz",
- "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==",
+ "version": "8.25.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz",
+ "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==",
"dev": true,
"requires": {
- "@eslint/eslintrc": "^1.3.2",
+ "@eslint/eslintrc": "^1.3.3",
"@humanwhocodes/config-array": "^0.10.5",
- "@humanwhocodes/gitignore-to-minimatch": "^1.0.2",
"@humanwhocodes/module-importer": "^1.0.1",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
@@ -10249,15 +9198,6 @@
"text-table": "^0.2.0"
},
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
"eslint-scope": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
@@ -10273,21 +9213,6 @@
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true
- },
- "glob-parent": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
- "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.3"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
}
}
},
@@ -10326,12 +9251,6 @@
"requires": {
"ms": "^2.1.1"
}
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
}
}
},
@@ -10352,12 +9271,6 @@
"requires": {
"ms": "^2.1.1"
}
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
}
}
},
@@ -10409,6 +9322,15 @@
"tsconfig-paths": "^3.14.1"
},
"dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
"doctrine": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
@@ -10417,6 +9339,12 @@
"requires": {
"esutils": "^2.0.2"
}
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
}
}
},
@@ -10434,17 +9362,6 @@
"minimatch": "^3.1.2",
"resolve": "^1.22.1",
"semver": "^7.3.7"
- },
- "dependencies": {
- "semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
}
},
"eslint-plugin-promise": {
@@ -10553,16 +9470,6 @@
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
},
- "event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
- },
- "events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
- },
"execa": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
@@ -10597,13 +9504,13 @@
}
},
"express": {
- "version": "4.18.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
- "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
+ "version": "4.18.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
+ "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
"requires": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
- "body-parser": "1.20.0",
+ "body-parser": "1.20.1",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
"cookie": "0.5.0",
@@ -10622,7 +9529,7 @@
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.7",
"proxy-addr": "~2.0.7",
- "qs": "6.10.3",
+ "qs": "6.11.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
"send": "0.18.0",
@@ -10632,12 +9539,27 @@
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ }
}
},
"express-rate-limit": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.5.2.tgz",
- "integrity": "sha512-N0cG/5ccbXfNC+FxRu7ujm2HjKkygF2PL7KLAf/hct9uqKB5QkZVizb/hEst6tUBXnfhblYWgOorN2eY+Saerw==",
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-6.6.0.tgz",
+ "integrity": "sha512-HFN2+4ZGdkQOS8Qli4z6knmJFnw6lZed67o6b7RGplWeb1Z0s8VXaj3dUgPIdm9hrhZXTRpCTHXA0/2Eqex0vA==",
"requires": {}
},
"external-editor": {
@@ -10658,9 +9580,9 @@
"dev": true
},
"fast-glob": {
- "version": "3.2.11",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
- "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "version": "3.2.12",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
"dev": true,
"requires": {
"@nodelib/fs.stat": "^2.0.2",
@@ -10668,6 +9590,17 @@
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
"micromatch": "^4.0.4"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
}
},
"fast-json-stable-stringify": {
@@ -10749,6 +9682,21 @@
"parseurl": "~1.3.3",
"statuses": "2.0.1",
"unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ }
}
},
"find-up": {
@@ -10820,12 +9768,6 @@
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "optional": true
- },
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -10843,12 +9785,6 @@
"functions-have-names": "^1.2.2"
}
},
- "functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
- "dev": true
- },
"functions-have-names": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
@@ -10866,9 +9802,9 @@
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
},
"get-intrinsic": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
- "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
+ "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
@@ -10909,12 +9845,12 @@
}
},
"glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
"requires": {
- "is-glob": "^4.0.1"
+ "is-glob": "^4.0.3"
}
},
"globals": {
@@ -10966,9 +9902,9 @@
"dev": true
},
"has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
},
"has-property-descriptors": {
"version": "1.0.0",
@@ -11028,11 +9964,6 @@
"safer-buffer": ">= 2.1.2 < 3"
}
},
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
- },
"ignore": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
@@ -11154,9 +10085,9 @@
}
},
"is-callable": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
- "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
"dev": true
},
"is-core-module": {
@@ -11283,9 +10214,9 @@
"integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw=="
},
"istanbul-lib-instrument": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz",
- "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
"requires": {
"@babel/core": "^7.12.3",
"@babel/parser": "^7.14.7",
@@ -11309,46 +10240,16 @@
"istanbul-lib-coverage": "^3.0.0",
"make-dir": "^3.0.0",
"supports-color": "^7.1.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
}
},
"istanbul-lib-source-maps": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
- "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
- "requires": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+ "requires": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
}
},
"istanbul-reports": {
@@ -11423,6 +10324,47 @@
"jest-validate": "^29.1.2",
"prompts": "^2.0.1",
"yargs": "^17.3.1"
+ },
+ "dependencies": {
+ "cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
+ },
+ "yargs": {
+ "version": "17.6.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz",
+ "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==",
+ "requires": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.0.0"
+ }
+ }
}
},
"jest-config": {
@@ -11659,13 +10601,6 @@
"jest-util": "^29.1.2",
"slash": "^3.0.0",
"strip-bom": "^4.0.0"
- },
- "dependencies": {
- "strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="
- }
}
},
"jest-snapshot": {
@@ -11697,16 +10632,6 @@
"natural-compare": "^1.4.0",
"pretty-format": "^29.1.2",
"semver": "^7.3.5"
- },
- "dependencies": {
- "semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
}
},
"jest-util": {
@@ -11768,11 +10693,6 @@
"supports-color": "^8.0.0"
},
"dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
"supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
@@ -11784,9 +10704,9 @@
}
},
"js-sdsl": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.4.tgz",
- "integrity": "sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz",
+ "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==",
"dev": true
},
"js-tokens": {
@@ -11836,13 +10756,9 @@
"dev": true
},
"json5": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
+ "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA=="
},
"kleur": {
"version": "3.0.3",
@@ -12032,6 +10948,19 @@
"on-headers": "~1.0.2"
},
"dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -12043,9 +10972,9 @@
}
},
"ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"mute-stream": {
"version": "0.0.8",
@@ -12109,11 +11038,26 @@
"ms": "^2.1.1"
}
},
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
"dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
}
}
},
@@ -12410,11 +11354,6 @@
}
}
},
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="
- },
"prompts": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
@@ -12446,9 +11385,9 @@
"dev": true
},
"qs": {
- "version": "6.10.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
- "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"requires": {
"side-channel": "^1.0.4"
}
@@ -12480,17 +11419,6 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
},
- "readable-stream": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.2.0.tgz",
- "integrity": "sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A==",
- "requires": {
- "abort-controller": "^3.0.0",
- "buffer": "^6.0.3",
- "events": "^3.3.0",
- "process": "^0.11.10"
- }
- },
"readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -12624,16 +11552,29 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
+ "safe-regex-test": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
+ "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.3",
+ "is-regex": "^1.1.4"
+ }
+ },
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
},
"send": {
"version": "0.18.0",
@@ -12655,6 +11596,21 @@
"statuses": "2.0.1"
},
"dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ }
+ }
+ },
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -12828,10 +11784,9 @@
}
},
"strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
- "dev": true
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="
},
"strip-final-newline": {
"version": "2.0.0",
@@ -12844,9 +11799,9 @@
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
},
"superagent": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.1.tgz",
- "integrity": "sha512-eQtVnsW5MkEUHNh3L5+Gz6d8O9d1i+zfhqAmKqJGTETeYO17o9pBQQym95LpbCxrqLfEFtLmleAo0wlx66BQwQ==",
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.2.tgz",
+ "integrity": "sha512-QtYZ9uaNAMexI7XWl2vAXAh0j4q9H7T0WVEI/y5qaUB3QLwxo+voUgCQ217AokJzUTIVOp0RTo7fhZrwhD7A2Q==",
"requires": {
"component-emitter": "^1.3.0",
"cookiejar": "^2.1.3",
@@ -12857,61 +11812,31 @@
"methods": "^1.1.2",
"mime": "2.6.0",
"qs": "^6.11.0",
- "readable-stream": "^4.2.0",
"semver": "^7.3.7"
},
"dependencies": {
- "debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "requires": {
- "ms": "2.1.2"
- }
- },
"mime": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
"integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg=="
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "qs": {
- "version": "6.11.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
- "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
- "requires": {
- "side-channel": "^1.0.4"
- }
- },
- "semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "requires": {
- "lru-cache": "^6.0.0"
- }
}
}
},
"supertest": {
- "version": "6.2.4",
- "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.4.tgz",
- "integrity": "sha512-M8xVnCNv+q2T2WXVzxDECvL2695Uv2uUj2O0utxsld/HRyJvOU8W9f1gvsYxSNU4wmIe0/L/ItnpU4iKq0emDA==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.0.tgz",
+ "integrity": "sha512-QgWju1cNoacP81Rv88NKkQ4oXTzGg0eNZtOoxp1ROpbS4OHY/eK5b8meShuFtdni161o5X0VQvgo7ErVyKK+Ow==",
"requires": {
"methods": "^1.1.2",
"superagent": "^8.0.0"
}
},
"supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"requires": {
- "has-flag": "^3.0.0"
+ "has-flag": "^4.0.0"
}
},
"supports-hyperlinks": {
@@ -12921,21 +11846,6 @@
"requires": {
"has-flag": "^4.0.0",
"supports-color": "^7.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
}
},
"supports-preserve-symlinks-flag": {
@@ -12980,9 +11890,9 @@
}
},
"swagger-ui-dist": {
- "version": "4.14.0",
- "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.14.0.tgz",
- "integrity": "sha512-TBzhheU15s+o54Cgk9qxuYcZMiqSm/SkvKnapoGHOF66kz0Y5aGjpzj5BT/vpBbn6rTPJ9tUYXQxuDWfsjiGMw=="
+ "version": "4.14.2",
+ "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.14.2.tgz",
+ "integrity": "sha512-kOIU7Ts3TrXDLb3/c9jRe4qGp8O3bRT19FFJA8wJfrRFkcK/4atPn3krhtBVJ57ZkNNofworXHxuYwmaisXBdg=="
},
"swagger-ui-express": {
"version": "4.5.0",
@@ -13084,23 +11994,6 @@
"make-error": "1.x",
"semver": "7.x",
"yargs-parser": "^21.0.1"
- },
- "dependencies": {
- "json5": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
- "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
- "dev": true
- },
- "semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
}
},
"ts-node": {
@@ -13134,6 +12027,23 @@
"json5": "^1.0.1",
"minimist": "^1.2.6",
"strip-bom": "^3.0.0"
+ },
+ "dependencies": {
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true
+ }
}
},
"tslib": {
@@ -13210,9 +12120,9 @@
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
},
"update-browserslist-db": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz",
- "integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==",
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+ "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
"requires": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
@@ -13246,17 +12156,6 @@
"@jridgewell/trace-mapping": "^0.3.12",
"@types/istanbul-lib-coverage": "^2.0.1",
"convert-source-map": "^1.6.0"
- },
- "dependencies": {
- "@jridgewell/trace-mapping": {
- "version": "0.3.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
- "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
- "requires": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- }
}
},
"validator": {
@@ -13327,9 +12226,10 @@
"dev": true
},
"wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
"requires": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -13351,9 +12251,10 @@
}
},
"y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+ "dev": true
},
"yallist": {
"version": "4.0.0",
@@ -13366,17 +12267,71 @@
"integrity": "sha512-W7h5dEhywMKenDJh2iX/LABkbFnBxasD27oyXWDS/feDsxiw0dD5ncXdYXgkvAsXIY2MpW/ZKkr9IU30DBdMNQ=="
},
"yargs": {
- "version": "17.6.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz",
- "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==",
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+ "dev": true,
"requires": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.0.0"
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
}
},
"yargs-parser": {
diff --git a/package.json b/package.json
index 81a34ea5..5257b8fa 100644
--- a/package.json
+++ b/package.json
@@ -4,9 +4,10 @@
"description": "An API library for providing endpoints of mock data for use during testing",
"main": "app.ts",
"scripts": {
- "serve": "nodemon app.ts",
+ "serve": "nodemon server.ts",
"config": "ts-node utils\\config.ts",
- "test": "jest",
+ "test": "jest --coverage",
+ "test:watch": "jest --watch",
"contributors:add": "all-contributors add",
"contributors:generate": "all-contributors generate",
"contributors:check": "all-contributors check"
@@ -26,15 +27,16 @@
},
"homepage": "https://github.com/ageddesi/Mocked-API#readme",
"devDependencies": {
- "@faker-js/faker": "7.5.0",
+ "@faker-js/faker": "7.6.0",
"@types/express": "4.17.14",
- "@types/jest": "^29.1.1",
+ "@types/jest": "29.1.2",
"@types/node": "18.7.6",
+ "@types/supertest": "^2.0.12",
"@types/swagger-jsdoc": "^6.0.1",
"@types/swagger-ui-express": "^4.1.3",
- "@typescript-eslint/eslint-plugin": "5.37.0",
- "all-contributors-cli": "^6.23.0",
- "eslint": "8.24.0",
+ "@typescript-eslint/eslint-plugin": "5.39.0",
+ "all-contributors-cli": "6.23.1",
+ "eslint": "8.25.0",
"eslint-config-standard-with-typescript": "23.0.0",
"eslint-plugin-import": "2.26.0",
"eslint-plugin-n": "15.3.0",
diff --git a/server.ts b/server.ts
new file mode 100644
index 00000000..96eb519c
--- /dev/null
+++ b/server.ts
@@ -0,0 +1,9 @@
+import app from './app'
+
+const port = 3000;
+
+app.listen(port, () => {
+ console.log(`Mock API is running on port ${port}.`);
+ console.log(`Vist Mock API in the browser http://localhost:${port}.`);
+});
+
diff --git a/swagger.json b/swagger.json
index 477820ca..ed6c8c39 100644
--- a/swagger.json
+++ b/swagger.json
@@ -49,6 +49,10 @@
"name": "Images",
"description": "A set of endpoints related to obtaining placeholder image urls"
},
+ {
+ "name": "IPs",
+ "description": "A set of endpoints related to obtaining random IP Addresses"
+ },
{
"name": "Music",
"description": "A set of endpoints related to music"
@@ -84,7 +88,8 @@
{
"name": "TimeZones",
"description": "A set of endpoints related to TimeZones"
- },{
+ },
+ {
"name": "IP",
"description": "A set of endpoints to get random ip and mac address"
}
@@ -544,10 +549,12 @@
}
}
},
- "/colors/{qty}" : {
+ "/colors/{qty}": {
"get": {
- "tags": ["Colors"],
- "summary" : "Obtain a random color",
+ "tags": [
+ "Colors"
+ ],
+ "summary": "Obtain a random color",
"parameters": [
{
"in": "path",
@@ -559,12 +566,12 @@
}
],
"responses": {
- "200" : {
- "description" : "OK",
+ "200": {
+ "description": "OK",
"schema": {
- "type" : "array",
+ "type": "array",
"items": {
- "type" : "string",
+ "type": "string",
"example": "efc27b"
}
}
@@ -572,10 +579,12 @@
}
}
},
- "/colors/{qty}/{colorSpace}/{colorFormat}" : {
+ "/colors/{qty}/{colorSpace}/{colorFormat}": {
"get": {
- "tags": ["Colors"],
- "summary" : "Obtain a random color",
+ "tags": [
+ "Colors"
+ ],
+ "summary": "Obtain a random color",
"parameters": [
{
"in": "path",
@@ -618,12 +627,12 @@
}
],
"responses": {
- "200" : {
- "description" : "OK",
+ "200": {
+ "description": "OK",
"schema": {
- "type" : "array",
+ "type": "array",
"items": {
- "type" : "string",
+ "type": "string",
"example": "efc27b"
}
}
@@ -844,13 +853,15 @@
}
}
},
- "/emails" : {
+ "/emails": {
"get": {
- "tags": ["Emails"],
- "summary" : "Returns a list of emails",
+ "tags": [
+ "Emails"
+ ],
+ "summary": "Returns a list of emails",
"responses": {
- "200" : {
- "description" : "OK",
+ "200": {
+ "description": "OK",
"schema": {
"$ref": "#/definitions/MockEmails"
}
@@ -888,13 +899,15 @@
}
],
"responses": {
- "200"Countries: {
- "description": "OK",
- "schema": {
- "type": "array",
- "items": {
- "type": "string",
- "example": "https://loremflickr.com/1024/201/cats?49645"
+ "200": {
+ "Countries": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "example": "https://loremflickr.com/1024/201/cats?49645"
+ }
}
}
}
@@ -1500,10 +1513,12 @@
}
}
},
- "/music/{qty}" : {
+ "/music/{qty}": {
"get": {
- "tags": ["Music"],
- "summary" : "Get a song name and genre",
+ "tags": [
+ "Music"
+ ],
+ "summary": "Get a song name and genre",
"parameters": [
{
"in": "path",
@@ -1514,12 +1529,12 @@
}
],
"responses": {
- "200" : {
- "description" : "OK",
+ "200": {
+ "description": "OK",
"schema": {
- "type" : "array",
+ "type": "array",
"items": {
- "type" : "object",
+ "type": "object",
"example": "{ genre: '', song: ''}"
}
}
@@ -1527,11 +1542,13 @@
}
}
},
- "/album/{qty}" : {
+ "/album/{qty}": {
"get": {
- "tags": ["Music"],
- "summary" : "Get an album name with release date, publisher, price, and total songs inlcuded",
- "parameters": [
+ "tags": [
+ "Music"
+ ],
+ "summary": "Get an album name with release date, publisher, price, and total songs inlcuded",
+ "parameters": [
{
"in": "path",
"name": "qty",
@@ -1541,12 +1558,12 @@
}
],
"responses": {
- "200" : {
- "description" : "OK",
+ "200": {
+ "description": "OK",
"schema": {
- "type" : "array",
+ "type": "array",
"items": {
- "type" : "object",
+ "type": "object",
"example": "{ name: '', releasedate: '', price: '', publisher: '', songs: ''}"
}
}
@@ -1989,10 +2006,12 @@
}
}
},
- "/product/{department}" : {
+ "/product/department/{department}": {
"get": {
- "tags": ["Products"],
- "summary" : "Get a single product with a specified department",
+ "tags": [
+ "Products"
+ ],
+ "summary": "Get a single product with a specified department",
"parameters": [
{
"required": false,
@@ -2004,8 +2023,8 @@
}
],
"responses": {
- "200" : {
- "description" : "OK",
+ "200": {
+ "description": "OK",
"schema": {
"$ref": "#/definitions/ProductResponse"
}
@@ -2013,10 +2032,12 @@
}
}
},
- "/products/{qty}/{department}" : {
+ "/products/{qty}/{department}": {
"get": {
- "tags": ["Products"],
- "summary" : "Obtain a list of random products",
+ "tags": [
+ "Products"
+ ],
+ "summary": "Obtain a list of random products",
"parameters": [
{
"required": false,
@@ -2036,8 +2057,8 @@
}
],
"responses": {
- "200" : {
- "description" : "OK",
+ "200": {
+ "description": "OK",
"schema": {
"$ref": "#/definitions/ProductResponse"
}
@@ -2133,13 +2154,15 @@
}
}
},
- "/socials/twitter" : {
+ "/socials/twitter": {
"get": {
- "tags": ["Socials"],
- "summary" : "Returns random Twitter posts",
+ "tags": [
+ "Socials"
+ ],
+ "summary": "Returns random Twitter posts",
"responses": {
- "200" : {
- "description" : "OK",
+ "200": {
+ "description": "OK",
"schema": {
"$ref": "#/definitions/MockTwitterPosts"
}
@@ -2175,6 +2198,34 @@
}
}
},
+ "/sports/football/leagues/laliga/teams/{qty}": {
+ "get": {
+ "tags": [
+ "Sports"
+ ],
+ "summary": "Get a list of teams in the La Liga (Spain) football league from 2022",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "qty",
+ "default": 10,
+ "description": "The amount of results you would like returned"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "example": "{ teamName: '', location: '', stadium: '', capacity: ''}"
+ }
+ }
+ }
+ }
+ }
+ },
"/time_zones": {
"get": {
"tags": [
@@ -2194,7 +2245,7 @@
}
}
},
- "/time_zones": {
+ "/time-zones": {
"get": {
"tags": [
"/TimeZones/random"
@@ -2221,8 +2272,8 @@
"summary": "Get a random value of a Chemical Elements",
"parameters": [],
"responses": {
- "200" : {
- "description" : "OK",
+ "200": {
+ "description": "OK",
"schema": {
"$ref": "#/definitions/MockChemicalElement"
}
@@ -2245,423 +2296,385 @@
}
],
"responses": {
- "200" : {
- "description" : "OK",
+ "200": {
+ "description": "OK",
"schema": {
"$ref": "#/definitions/MockChemicalElements"
- }
- }
- }
- }
- },
- "definitions": {
- "ErrorResponse": {
- "type": "string",
- "example": "An unknown error occured, please try again."
- },
- "CountriesListResponse": {
- "properties": {
- "countries": {
- "type": "array",
- "items": {
- "type": "string",
- "example": "United Kingdom"
+ }
}
}
}
},
- "FullNamesResponse": {
- "properties": {
- "fullNamesList": {
- "type": "array",
- "items": {
- "type": "string",
- "example": "Aaron D Rackley"
+ "definitions": {
+ "ErrorResponse": {
+ "type": "string",
+ "example": "An unknown error occured, please try again."
+ },
+ "CountriesListResponse": {
+ "properties": {
+ "countries": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "example": "United Kingdom"
+ }
}
}
- }
- },
- "FirstNamesResponse": {
- "properties": {
- "firstNamesList": {
- "type": "array",
- "items": {
- "type": "string",
- "example": "Mandy"
+ },
+ "FullNamesResponse": {
+ "properties": {
+ "fullNamesList": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "example": "Aaron D Rackley"
+ }
}
}
- }
- },
- "LastNameResponse": {
- "properties": {
- "lastNamesList": {
- "type": "array",
- "items": {
- "type": "string",
- "example": "smith"
+ },
+ "FirstNamesResponse": {
+ "properties": {
+ "firstNamesList": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "example": "Mandy"
+ }
}
}
- }
- },
- "MockEcommerceCartItem": {
- "type":"object",
- "properties": {
- "pricePerUnit": {
- "type":"number",
- "example": 2
- },
- "quantity": {
- "type":"number",
- "example":2
- },
- "product": {
- "type": "object",
- "properties":{
- "productName": {
- "type": "string",
- "example": "Super Gamer Juice"
- },
- "productId": {
- "type": "number",
- "example": 1
- },
- "message": {
- "type": "string",
- "example": "The only drink I will ever need."
- },
- "dateTime": {
- "type": "string",
- "example": "1984-05-21T00:02:11.497Z"
- },
- "rating": {
- "type": "number",
- "example": 1
- },
- "userName": {
+ },
+ "LastNameResponse": {
+ "properties": {
+ "lastNamesList": {
+ "type": "array",
+ "items": {
"type": "string",
- "example": "Aaron Rackley"
- },
- "categories": {
- "type": "array",
- "items": {
- "type": "string",
- "example": "sport-drinks"
- }
+ "example": "smith"
}
}
}
- }
- },
- "MockEcommerceCart": {
- "type":"object",
- "properties": {
- "products": {
- "type": "array",
- "items": {
- "$ref": "#/definitions/MockEcommerceCartItem"
- }
- },
- "couponCode":{
- "type":"string",
- "default": "DISCOUNT"
- },
- "couponPercent":{
- "type":"number",
- "default":8
- },
- "couponValue":{
- "type":"number",
- "default":4
- },
- "taxPercent":{
- "type":"number",
- "default":4
- },
- "taxApplied":{
- "type":"number",
- "default":8
- },
- "postageValue":{
- "type":"number",
- "default":5
- },
- "subtotal":{
- "type":"number",
- "default":100
- },
- "total":{
- "type":"number",
- "default": 120
- }
- }
- },
- "MockProductReview": {
- "type": "array",
- "items": {
- "type" : "object",
+ },
+ "MockEcommerceCartItem": {
+ "type": "object",
"properties": {
- "department" : {
- "type" : "string",
- "example" : "Sports"
- },
- "type" : {
- "type" : "string",
- "example" : "Ball"
- },
- "name" : {
- "type" : "string",
- "example" : "Sleek Bronze Towels"
- },
- "adjective" : {
- "type" : "string",
- "example" : "Incredible"
- },
- "description" : {
- "type" : "string",
- "example" : "The automobile layout consists of a front-engine design, with transaxle-type transmissions mounted at the rear of the engine and four wheel drive"
+ "pricePerUnit": {
+ "type": "number",
+ "example": 2
},
- "material" : {
- "type" : "string",
- "example" : "Soft"
+ "quantity": {
+ "type": "number",
+ "example": 2
},
- "sku" : {
- "type" : "array",
- "items": {
- "type" : "object",
- "properties": {
- "meta": {
- "type" : "object",
- "properties": {
- "size" : {
- "type" : "string",
- "example" : "Medium"
- }
- }
- },
- "price" : {
- "type" : "string",
- "example" : "232.00"
- },
- "amount" : {
- "type" : "number",
- "example" : 11109
+ "product": {
+ "type": "object",
+ "properties": {
+ "productName": {
+ "type": "string",
+ "example": "Super Gamer Juice"
+ },
+ "productId": {
+ "type": "number",
+ "example": 1
+ },
+ "message": {
+ "type": "string",
+ "example": "The only drink I will ever need."
+ },
+ "dateTime": {
+ "type": "string",
+ "example": "1984-05-21T00:02:11.497Z"
+ },
+ "rating": {
+ "type": "number",
+ "example": 1
+ },
+ "userName": {
+ "type": "string",
+ "example": "Aaron Rackley"
+ },
+ "categories": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "example": "sport-drinks"
}
}
}
}
}
- }
- },
- "MockChatMessages" : {
- "type": "array",
- "items": {
+ },
+ "MockEcommerceCart": {
"type": "object",
"properties": {
- "id": {
- "type": "string",
- "example": "dc90af0e-f073-45e7-8a77-69e7e94aed31"
- },
- "createdAt": {
- "type": "string",
- "example": "2022-09-22T16:03:17.885Z"
+ "products": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/MockEcommerceCartItem"
+ }
},
- "message": {
+ "couponCode": {
"type": "string",
- "example": "Dicta amet dolores mollitia eveniet commodi."
+ "default": "DISCOUNT"
},
- "userId": {
- "type": "string",
- "example": "d392a495-3f4c-4660-a896-dce057afbbd4"
- }
- }
- }
- },
- "MockUsers" : {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "userId" : {
- "type" : "string",
- "example" : "d392a495-3f4c-4660-a896-dce057afbbd4"
+ "couponPercent": {
+ "type": "number",
+ "default": 8
},
- "username" : {
- "type" : "string",
- "example" : "Aaron Rackley"
+ "couponValue": {
+ "type": "number",
+ "default": 4
},
- "email" : {
- "type" : "string",
- "example" : "john.doe@example.com"
+ "taxPercent": {
+ "type": "number",
+ "default": 4
},
- "avatarUrl" : {
- "type" : "string",
- "example" : "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/597.jpg"
+ "taxApplied": {
+ "type": "number",
+ "default": 8
},
- "password" : {
- "type" : "string",
- "example" : "password"
+ "postageValue": {
+ "type": "number",
+ "default": 5
},
- "birthDate" : {
- "type" : "string",
- "example" : "1984-05-21T00:02:11.497Z"
+ "subtotal": {
+ "type": "number",
+ "default": 100
},
- "registeredAt" : {
- "type" : "string",
- "example" : "2022-09-22T16:03:17.885Z"
+ "total": {
+ "type": "number",
+ "default": 120
}
}
- }
- },
- "MockChatResponse" : {
- "type" : "object",
- "properties": {
- "users" : {
- "$ref" : "#/definitions/MockUsers"
- },
- "messages" : {
- "$ref" : "#/definitions/MockChatMessages"
+ },
+ "MockProductReview": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "department": {
+ "type": "string",
+ "example": "Sports"
+ },
+ "type": {
+ "type": "string",
+ "example": "Ball"
+ },
+ "name": {
+ "type": "string",
+ "example": "Sleek Bronze Towels"
+ },
+ "adjective": {
+ "type": "string",
+ "example": "Incredible"
+ },
+ "description": {
+ "type": "string",
+ "example": "The automobile layout consists of a front-engine design, with transaxle-type transmissions mounted at the rear of the engine and four wheel drive"
+ },
+ "material": {
+ "type": "string",
+ "example": "Soft"
+ },
+ "sku": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "meta": {
+ "type": "object",
+ "properties": {
+ "size": {
+ "type": "string",
+ "example": "Medium"
+ }
+ }
+ },
+ "price": {
+ "type": "string",
+ "example": "232.00"
+ },
+ "amount": {
+ "type": "number",
+ "example": 11109
+ }
+ }
+ }
+ }
+ }
}
- }
- },
- "MockEmails" : {
- "type": "array",
- "items": {
- "type": "object",
- "properties": {
- "id" : {
- "type" : "string",
- "example" : "dc90af0e-f073-45e7-8a77-69e7e94aed31"
- },
- "from" : {
- "type" : "string",
- "example" : "john.doe@example.com"
- },
- "subject" : {
- "type" : "string",
- "example" : "Lorem ipsum dolor"
- },
- "body" : {
- "type" : "string",
- "example" : "Dicta amet dolores mollitia eveniet commodi."
- },
- "read" : {
- "type" : "boolean",
- "example" : false
- },
- "tags" : {
- "type": "array",
- "items": {
+ },
+ "MockChatMessages": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "example": "dc90af0e-f073-45e7-8a77-69e7e94aed31"
+ },
+ "createdAt": {
"type": "string",
- "example": "important"
+ "example": "2022-09-22T16:03:17.885Z"
+ },
+ "message": {
+ "type": "string",
+ "example": "Dicta amet dolores mollitia eveniet commodi."
+ },
+ "userId": {
+ "type": "string",
+ "example": "d392a495-3f4c-4660-a896-dce057afbbd4"
}
- },
- "date" : {
- "type" : "string",
- "example" : "2022-09-22T16:03:17.885Z"
}
}
- }
- },
- "MockTwitterPosts" : {
- "type": "array",
- "items": {
+ },
+ "MockUsers": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "userId": {
+ "type": "string",
+ "example": "d392a495-3f4c-4660-a896-dce057afbbd4"
+ },
+ "username": {
+ "type": "string",
+ "example": "Aaron Rackley"
+ },
+ "email": {
+ "type": "string",
+ "example": "john.doe@example.com"
+ },
+ "avatarUrl": {
+ "type": "string",
+ "example": "https://cloudflare-ipfs.com/ipfs/Qmd3W5DuhgHirLHGVixi6V76LhCkZUz6pnFt5AJBiyvHye/avatar/597.jpg"
+ },
+ "password": {
+ "type": "string",
+ "example": "password"
+ },
+ "birthDate": {
+ "type": "string",
+ "example": "1984-05-21T00:02:11.497Z"
+ },
+ "registeredAt": {
+ "type": "string",
+ "example": "2022-09-22T16:03:17.885Z"
+ }
+ }
+ }
+ },
+ "MockChatResponse": {
"type": "object",
"properties": {
- "id" : {
- "type" : "string",
- "example" : "dc90af0e-f073-45e7-8a77-69e7e94aed31"
- },
- "handle" : {
- "type" : "string",
- "example" : "@JohnDoe"
- },
- "message" : {
- "type" : "string",
- "example" : "Dicta amet dolores mollitia eveniet commodi."
- },
- "media" : {
- "type" : "string",
- "example" : "https://loremflickr.com/640/480"
- },
- "likes" : {
- "type" : "number",
- "example" : 438
- },
- "comments" : {
- "type" : "number",
- "example" : 10
- },
- "retweets" : {
- "type" : "number",
- "example" : 2
+ "users": {
+ "$ref": "#/definitions/MockUsers"
},
- "date" : {
- "type" : "string",
- "example" : "2022-09-22T16:03:17.885Z"
+ "messages": {
+ "$ref": "#/definitions/MockChatMessages"
}
}
- }
- },
- "MockChemicalElement" : {
- "properties": {
- "symbol": {
- "type": "string",
- "example": "N"
- },
- "name": {
- "type": "string",
- "example": "Nitrogen"
- },
- "atomicNumber": {
- "type" : "number",
- "example" : 7
+ },
+ "MockEmails": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "example": "dc90af0e-f073-45e7-8a77-69e7e94aed31"
+ },
+ "from": {
+ "type": "string",
+ "example": "john.doe@example.com"
+ },
+ "subject": {
+ "type": "string",
+ "example": "Lorem ipsum dolor"
+ },
+ "body": {
+ "type": "string",
+ "example": "Dicta amet dolores mollitia eveniet commodi."
+ },
+ "read": {
+ "type": "boolean",
+ "example": false
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "example": "important"
+ }
+ },
+ "date": {
+ "type": "string",
+ "example": "2022-09-22T16:03:17.885Z"
+ }
+ }
}
- }
- },
- "MockChemicalElements" : {
- "type": "array",
- "items": {
- "$ref": "#/definitions/MockChemicalElement"
- }
- },
- "MockProductReview": {
- "type": "array",
- "items": {
- "type": "object",
+ },
+ "MockTwitterPosts": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "example": "dc90af0e-f073-45e7-8a77-69e7e94aed31"
+ },
+ "handle": {
+ "type": "string",
+ "example": "@JohnDoe"
+ },
+ "message": {
+ "type": "string",
+ "example": "Dicta amet dolores mollitia eveniet commodi."
+ },
+ "media": {
+ "type": "string",
+ "example": "https://loremflickr.com/640/480"
+ },
+ "likes": {
+ "type": "number",
+ "example": 438
+ },
+ "comments": {
+ "type": "number",
+ "example": 10
+ },
+ "retweets": {
+ "type": "number",
+ "example": 2
+ },
+ "date": {
+ "type": "string",
+ "example": "2022-09-22T16:03:17.885Z"
+ }
+ }
+ }
+ },
+ "MockChemicalElement": {
"properties": {
- "productName": {
+ "symbol": {
"type": "string",
- "example": "Super Gamer Juice"
+ "example": "N"
},
- "productId": {
- "type": "number",
- "example": 1
- },
- "message": {
+ "name": {
"type": "string",
- "example": "The only drink I will ever need."
+ "example": "Nitrogen"
},
- "dateTime": {
- "type": "string",
- "example": "1984-05-21T00:02:11.497Z"
- },
- "rating": {
+ "atomicNumber": {
"type": "number",
- "example": 1
- },
- "userName": {
- "type": "string",
- "example": "Aaron Rackley"
- },
- "categories": {
- "type": "array",
- "items": {
- "type": "string",
- "example": "sport-drinks"
- }
+ "example": 7
}
}
+ },
+ "MockChemicalElements": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/MockChemicalElement"
+ }
}
}
}
- }
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
index f6d323fd..da87ea9d 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -3,6 +3,7 @@
"module": "commonjs",
"target": "es6",
"rootDir": "./",
- "esModuleInterop": true
+ "resolveJsonModule": true,
+ "esModuleInterop": true,
}
}
diff --git a/utils/arrays.ts b/utils/arrays.ts
index 4ad61746..b5004b1a 100644
--- a/utils/arrays.ts
+++ b/utils/arrays.ts
@@ -4,4 +4,13 @@
*/
export const getRandomArrayItem = (array : any[]) : any => {
return array[Math.floor(Math.random() * array.length)];
-}
\ No newline at end of file
+}
+
+/**
+ * Takes an array and will return a random subarray from that array.
+ * @param array
+ * @param qty
+ */
+export const getRandomSubArray = (array: any[], qty: number) : any[] => {
+ return [...Array(array.length).keys()].sort(() => 0.5 - Math.random()).slice(0, qty).map(index => array[index]);
+};
\ No newline at end of file
diff --git a/utils/route-utils.ts b/utils/route-utils.ts
index b601aa40..5acd4269 100644
--- a/utils/route-utils.ts
+++ b/utils/route-utils.ts
@@ -5,6 +5,7 @@ const defaultQty = 10;
const maxQty = 100;
const imageWidthDefault = 640;
const imageHeightDefault = 480;
+const defaultCountry = 'uk';
const getQtyFromRequest = (request: Request | null, overrideDefaultQty?: number | null): number => {
return request.params.qty
@@ -27,4 +28,13 @@ const getImageDataFromRequest = (request: Request | null): ImageDataType => {
};
};
-export { getQtyFromRequest, getImageDataFromRequest };
+const getCountryNameFromRequest = (request : Request | null) : string => {
+ return request.params.country ? request.params.country : defaultCountry;
+}
+
+
+export {
+ getQtyFromRequest,
+ getImageDataFromRequest,
+ getCountryNameFromRequest
+}
\ No newline at end of file
diff --git a/utils/swagger.ts b/utils/swagger.ts
index e1373a43..db602acf 100644
--- a/utils/swagger.ts
+++ b/utils/swagger.ts
@@ -1,6 +1,4 @@
-import { Express, Request, Response } from 'express';
import swaggerJsdoc from 'swagger-jsdoc';
-import swaggerUi from 'swagger-ui-express';
const { version } = require('../package.json');
@@ -19,6 +17,10 @@ const options: swaggerJsdoc.Options = {
consumes: ['application/json'],
produces: ['application/json'],
tags: [
+ {
+ name: 'Address',
+ description: 'A set of endpoints related to addresses',
+ },
{
name: 'Animals',
description: 'A set of endpoints related to animal',
@@ -59,6 +61,10 @@ const options: swaggerJsdoc.Options = {
name: 'Images',
description: 'A set of endpoints related to obtaining placeholder image urls',
},
+ {
+ name: 'IPs',
+ description: 'A set of endpoints related to obtaining random IP Addresses',
+ },
{
name: 'Invoices',
description: 'A set of endpoints related to invoices',
diff --git a/utils/tests/arrays.test.ts b/utils/tests/arrays.test.ts
index 3d64439e..87aad16f 100644
--- a/utils/tests/arrays.test.ts
+++ b/utils/tests/arrays.test.ts
@@ -1,4 +1,4 @@
-import { getRandomArrayItem } from '../arrays';
+import { getRandomArrayItem, getRandomSubArray } from '../arrays';
describe('array utils', () => {
describe('get random Array Item', () => {
@@ -9,4 +9,13 @@ describe('array utils', () => {
expect(arr.includes(res)).toBe(true);
});
});
+
+ describe('get random subarray', () => {
+ it('should return an random subarray from original array', () => {
+ const arr = ['this', 'is', 'a', 'test'];
+ const res = getRandomSubArray(arr, 2);
+
+ expect(arr.filter(originalArrElement => res.find(responseArrElement => originalArrElement === responseArrElement)).length).toBe(2);
+ });
+ });
});