diff --git a/.all-contributorsrc b/.all-contributorsrc index ea610ac1..24af6049 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -347,6 +347,96 @@ "contributions": [ "code" ] + }, + { + "login": "lauk20", + "name": "lauk20", + "avatar_url": "https://avatars.githubusercontent.com/u/72945813?v=4", + "profile": "https://github.com/lauk20", + "contributions": [ + "code" + ] + }, + { + "login": "sherlyfebrianti96", + "name": "Sherly Febrianti", + "avatar_url": "https://avatars.githubusercontent.com/u/2855979?v=4", + "profile": "https://github.com/sherlyfebrianti96", + "contributions": [ + "doc" + ] + }, + { + "login": "headStyleColorRed", + "name": "headStyleColorRed", + "avatar_url": "https://avatars.githubusercontent.com/u/44493475?v=4", + "profile": "https://github.com/headStyleColorRed", + "contributions": [ + "code" + ] + }, + { + "login": "mdmuaj13", + "name": "mdmuaj13", + "avatar_url": "https://avatars.githubusercontent.com/u/20964899?v=4", + "profile": "https://github.com/mdmuaj13", + "contributions": [ + "code" + ] + }, + { + "login": "druwan", + "name": "Christopher Vestman", + "avatar_url": "https://avatars.githubusercontent.com/u/30087790?v=4", + "profile": "https://github.com/druwan", + "contributions": [ + "code" + ] + }, + { + "login": "azulverdosa", + "name": "Ava Elise", + "avatar_url": "https://avatars.githubusercontent.com/u/91709114?v=4", + "profile": "https://github.com/azulverdosa", + "contributions": [ + "code" + ] + }, + { + "login": "janetthieu", + "name": "Janet Thieu", + "avatar_url": "https://avatars.githubusercontent.com/u/70927466?v=4", + "profile": "https://github.com/janetthieu", + "contributions": [ + "code" + ] + }, + { + "login": "Vishwamagdavan", + "name": "Vishwa Mahadevan", + "avatar_url": "https://avatars.githubusercontent.com/u/34962962?v=4", + "profile": "https://vishvamahadevan.netlify.app/", + "contributions": [ + "code" + ] + }, + { + "login": "cweave", + "name": "Christa", + "avatar_url": "https://avatars.githubusercontent.com/u/16121690?v=4", + "profile": "https://christa-burch.com/", + "contributions": [ + "doc" + ] + }, + { + "login": "bpvcode", + "name": "Bruno Vilar", + "avatar_url": "https://avatars.githubusercontent.com/u/66181027?v=4", + "profile": "https://github.com/bpvcode", + "contributions": [ + "doc" + ] } ], "contributorsPerLine": 7, diff --git a/.env.example b/.env.example index 4e8ebc11..818e517b 100644 --- a/.env.example +++ b/.env.example @@ -1,2 +1,4 @@ SCHEME=http -HOSTNAME=localhost:3000 \ No newline at end of file +HOSTNAME=localhost:3000 +RATELIMIT_WINDOWTIME=900000 +RATELIMIT_WINDOWSIZE=10 \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4de528ab..c82381cb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,15 +14,15 @@ All types of contributions are encouraged and valued. See the [Table of Contents ## Table of Contents -- [I Have a Question](#i-have-a-question) -- [I Want To Contribute](#i-want-to-contribute) -- [Reporting Bugs](#reporting-bugs) -- [Suggesting Enhancements](#suggesting-enhancements) -- [Your First Code Contribution](#your-first-code-contribution) -- [Improving The Documentation](#improving-the-documentation) -- [Styleguides](#styleguides) -- [Commit Messages](#commit-messages) -- [Join The Project Team](#join-the-project-team) + - [I Have a Question](#i-have-a-question) + - [I Want To Contribute](#i-want-to-contribute) + - [Reporting Bugs](#reporting-bugs) + - [Suggesting Enhancements](#suggesting-enhancements) + - [Your First Code Contribution](#your-first-code-contribution) + - [Improving The Documentation](#improving-the-documentation) + - [Coding Conventions](#Coding-Conventions) + - [Commit Messages](#commit-messages) + - [Join The Project Team](#join-the-project-team) @@ -138,12 +138,333 @@ include Setup of env, IDE and typical getting started instructions? Updating, improving and correcting the documentation --> +## Coding Conventions + +This is all about standardization :blush: + +### Folders and Files Naming + +All of the folders and files should use `kebab-case`. + +> The `kebab-case` usage (in package, folder and file names) will make us easier when it's time to extract them into itsown package in the future. +> +> [Here is the related discussion](https://github.com/ageddesi/Mocked-API/issues/121#issuecomment-1273622574). + +### File Extensions + +This is all about the files and the clear definition of their usage : + + - APIs + - `*.routes.ts` + - This file located right inside the feature's folder + - Data + - `*.ts` + - This file located under `data` folder of the feature's folder (e.g. `data/*.ts`) + - This `data` folder is used to store the static data used in APIs (not your mock data) + - Interfaces/Types + - `*.types.ts` + - This file located under `models` folder of the feature's folder (e.g. `models/*.types.ts`) + - Utilities + - `*.ts` + - This file located under `utils` folder of the feature's folder (e.g. `utils/*.ts`) + - Tests + - `*.test.ts` + - This file located under `tests` folder of the feature's folder (e.g. `tests/*.test.ts`) + - This `tests` folder should follow the feature's folder structure, e.g. : + - `tests/*.test.ts` -> test file for the APIs + - `tests/utils/*.test.ts` -> test file for the APIs + +### File Structures + +The file structures in this repository should look like this : + + Mocked-API + │ README.md + │ package.json + │ ... + │ + └───middleware + │ │ + │ └───rate-limiter + │ │ rate-limiter.ts + │ │ + │ └───models + │ │ + │ └───rate-limiter-response.ts + │ + └───modules + │ │ + │ └───feature-sample-1 + │ │ │ feature-sample-1.routes.ts + │ │ │ + │ │ └───data + │ │ │ │ data-1.ts + │ │ │ │ data-2.ts + │ │ │ │ ... + │ │ │ + │ │ └───models + │ │ │ │ address.types.ts + │ │ │ │ country.types.ts + │ │ │ │ ... + │ │ │ + │ │ └───utils + │ │ │ │ util-1.ts + │ │ │ │ util-2.ts + │ │ │ │ ... + │ │ │ + │ │ └───tests /* Should have the same structure with `feature-sample-1` folder */ + │ │ │ feature-sample-1.test.ts /* Test for `feature-sample-1.routes.ts` */ + │ │ │ + │ │ └───utils + │ │ │ util-1.test.ts + │ │ │ util-2.test.ts + │ │ │ ... + │ │ + │ └───feature-sample-2 + │ │ │ *.routes.ts + │ │ │ + │ │ └───data + │ │ │ │ + │ │ │ └─── *.ts + │ │ │ + │ │ └───models + │ │ │ │ + │ │ │ └─── *.types.ts + │ │ │ + │ │ └───utils + │ │ │ │ + │ │ │ └─── *.ts + │ │ │ + │ │ └───tests /* Should have the same structure with `feature-sample-2` folder */ + │ │ │ *.test.ts + │ │ │ + │ │ └───utils + │ │ │ + │ │ └─── *.ts + │ │ + │ └───feature-sample-3 + │ │ *.routes.ts + │ │ + │ └───data + │ │ │ + │ │ └─── *.ts + │ │ + │ └───models + │ │ │ + │ │ └─── *.types.ts + │ │ + │ └───utils + │ │ │ + │ │ └─── *.ts + │ │ + │ └───tests /* Should have the same structure with `feature-sample-3` folder */ + │ │ *.test.ts + │ │ + │ └───utils + │ │ + │ └─── *.ts + │ + └───utils + │ │ file-utils-1.ts + │ │ file-utils-2.ts + │ │ ... + │ │ + │ └───tests + │ │ file-utils-1.test.ts + │ │ file-utils-2.test.ts + │ │ ... + │ + └───another-folders -## Styleguides ### Commit Messages - +We use semantic commit messages + +- feat: (new feature for the user, not a new feature for build script) +- fix: (bug fix for the user, not a fix to a build script) +- docs: (changes to the documentation) +- style: (formatting, missing semi colons, etc; no production code change) +- refactor: (refactoring production code, eg. renaming a variable) +- test: (adding missing tests, refactoring tests; no production code change) +- chore: (updating grunt tasks etc; no production code change) ## Join The Project Team + +## Add an API endpoint + +This example will use `users` as a new TAG for OpenAPI, meaning we will have dedicated endpoints to get some mocked users or create new ones. + +### How to add an endpoint + +Endpoints should be created in a `-routes.ts` file under `./modules//api` folder. +We assume `` as a new TAG on OpenAPI, meaning a different category with dedicated endpoints like `address`, `countries`, `currency`, and son on... We will use `users` topic in our examples. + +Example on how to create and endpoint for a new topic: + +- 1 - Create a new folder with the topic name, under `./modules` folder, like `./modules/users` +- 2 - Create a new file with mocked data, under `./modules/users/data`, like `./modules/users/data/users.ts`. Example: +```javascript +const usersList = [ + { + "email": "male@example.com", + "gender": "male", + "username": "user0000", + "first_name": "John", + "last_name": "Doe", + "title": "mr", + }, + { + "email": "female@example.com", + "gender": "male", + "username": "user0001", + "first_name": "Hydra", + "last_name": "Smith", + "title": "mrs", + }, + ... +] +``` +- 3 - Create an `api` folder to store the `routes` file, like `./modules/users/api/users-routes.ts` +- 4 - Create different endpoints for users. Example: + +```javascript +import usersList from '../data/users'; + +module.exports = function (app: core.Express) { + app.get('/users', (req: Request, res: Response) => { + res.json({ + users: usersList, + }); + }); +} +``` + +Note: This endpoint will fetch all mocked users stored in `./modules/users/data/users.ts` + +### [How our folders are structured](#file-structures) + +### How to write tests + +For each module you create you will also need to create a tests folder, Inside this folder there should be a `api` and `utils` +(if you create any utils) folder. + +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'; +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 + +run `npm test` +run `npm run test:watch` to run the tests in watch mode. + +### How to add OpenAPI comments + +For each endpoint you should do an OpenAPI comment, this way, you will make sure your endpoint will be reflected in swagger, as well as the response schema and type are correct. +To describe describe an endpoint as an OpenAPI comment, you should use the yaml structure like this: + +- 1 - Define the path +- 2 - Define the http method referent to that path +- 3 - Define the tag in order to group all endpoints referent to the same TAG (in this case, all `users` endpoints will be grouped under the tag `Users`) +- 4 - Define a brief summary of you endpoint +- 5 - Define the response types for the endpoint (200 - OK ; 404 - Not found, etc...) +- 6 - Define the schema of the response + +Note: You can define the properties of each schema or reuse a schema that already exists + +Each OpenAPI comment should start with `@openapi` in order to be read by swagger and reflected on it. + +Example: + +```javascript + /** + * @openapi + * '/users': + * get: + * tags: + * - Users + * summary: Obtain a list of all users + * responses: + * '200': + * description: OK + * schema: + * type: array + * items: + * type: object + * properties: + * email: + * type: string + * example: example@example.com + * gender: + * type: string + * example: male + * username: + * type: string + * example: user00000 + * first_name: + * type: string + * example: John + * last_name: + * type: string + * example: Doe + * title: + * type: string + * example: mr + */ +``` + +This describe the get endpoint that we did [here](#how-to-add-an-endpoint). + +After doing the OpenAPI comment: + +```javascript +import usersList from '../data/users'; + +module.exports = function (app: core.Express) { + + /** + * @openapi + * '/users': + * get: + * tags: + * - Users + * summary: Obtain a list of all users + * responses: + * '200': + * description: OK + * schema: + * type: array + * items: + * type: object + * properties: + * email: + * type: string + * example: example@example.com + * gender: + * type: string + * example: male + * username: + * type: string + * example: user00000 + * first_name: + * type: string + * example: John + * last_name: + * type: string + * example: Doe + * title: + * type: string + * example: mr + */ + app.get('/users', (req: Request, res: Response) => { + res.json({ + users: usersList, + }); + }); +} +``` diff --git a/README.md b/README.md index e33ddd85..5a511ce4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -[![All Contributors](https://img.shields.io/badge/all_contributors-37-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-47-orange.svg?style=flat-square)](#contributors-)

@@ -75,24 +75,6 @@ Now you should be able to make any request to that port, and get a response back 💡 If you browse to that port, you'll see our swagger documentation. - -## Testing - -### How to write tests -For each module you create you will also need to create a tests folder, Inside this folder there should be a `api` and `utils` -(if you create any utils) folder. - -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'; -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 -run `npm test` -run `npm run test:watch` to run the tests in watch mode. - ## FAQ **Q:** Are you planning to add more end points?
@@ -108,15 +90,6 @@ I encourage you to contribute to ***Mocked-API***! Feel free to fork the codebas Our contributing guide is currently WIP and available here [CONTRIBUTING GUIDE](CONTRIBUTING.md) -We use semantic commit messages -- feat: (new feature for the user, not a new feature for build script) -- fix: (bug fix for the user, not a fix to a build script) -- docs: (changes to the documentation) -- style: (formatting, missing semi colons, etc; no production code change) -- refactor: (refactoring production code, eg. renaming a variable) -- test: (adding missing tests, refactoring tests; no production code change) -- chore: (updating grunt tasks etc; no production code change) - ## Sponsor Do you like this project? Support it by donating. @@ -135,58 +108,67 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - + + + + + - - -
Ahmed Silat
Ahmed Silat

💻
Yasio
Yasio

💻
Alberto Herrera Vargas
Alberto Herrera Vargas

📖
Coşkun Atak
Coşkun Atak

💻
Rizky ian indiarto
Rizky ian indiarto

💻
Evan
Evan

💻
Trigstur
Trigstur

💻
Ahmed Silat
Ahmed Silat

💻
Yasio
Yasio

💻
Alberto Herrera Vargas
Alberto Herrera Vargas

📖
Coşkun Atak
Coşkun Atak

💻
Rizky ian indiarto
Rizky ian indiarto

💻
Evan
Evan

💻
Trigstur
Trigstur

💻
fadkeabhi
fadkeabhi

💻
Thomas Martin
Thomas Martin

💻 ⚠️
Vu
Vu

💻 📖
Kalwabed Rizki
Kalwabed Rizki

⚠️
Talison Fabio
Talison Fabio

💻
Chris Jones
Chris Jones

🔧
jkol7
jkol7

💻
fadkeabhi
fadkeabhi

💻
Thomas Martin
Thomas Martin

💻 ⚠️
Vu
Vu

💻 📖
Kalwabed Rizki
Kalwabed Rizki

⚠️
Talison Fabio
Talison Fabio

💻
Chris Jones
Chris Jones

🔧
jkol7
jkol7

💻
Siddharth Pandey
Siddharth Pandey

💻
Alex Harrison
Alex Harrison

💻
Derzan Chiang
Derzan Chiang

💻
ATH
ATH

📖
Suraj Bhandarkar S
Suraj Bhandarkar S

⚠️
Fernando Guerrero
Fernando Guerrero

📖 ⚠️
Anish De
Anish De

📖
Siddharth Pandey
Siddharth Pandey

💻
Alex Harrison
Alex Harrison

💻
Derzan Chiang
Derzan Chiang

💻
ATH
ATH

📖
Suraj Bhandarkar S
Suraj Bhandarkar S

⚠️
Fernando Guerrero
Fernando Guerrero

📖 ⚠️
Anish De
Anish De

📖
Vaibhav Garje
Vaibhav Garje

💻 ⚠️
Mayank Singh
Mayank Singh

📖
Mike Hingley
Mike Hingley

💻
krishna
krishna

💻
Vadym Yatsyuk
Vadym Yatsyuk

📖
Nicholas Robert Beckham
Nicholas Robert Beckham

⚠️
Ayanwola Ayomide
Ayanwola Ayomide

💻 ⚠️ 📖
Vaibhav Garje
Vaibhav Garje

💻 ⚠️
Mayank Singh
Mayank Singh

📖
Mike Hingley
Mike Hingley

💻
krishna
krishna

💻
Vadym Yatsyuk
Vadym Yatsyuk

📖
Nicholas Robert Beckham
Nicholas Robert Beckham

⚠️
Ayanwola Ayomide
Ayanwola Ayomide

💻 ⚠️ 📖
Zuhaib Shah
Zuhaib Shah

💻
Guilherme Fernandes
Guilherme Fernandes

💻
Ben Halverson
Ben Halverson

💻 ⚠️
Ayush Chauhan
Ayush Chauhan

⚠️ 💻
Edwards Moses
Edwards Moses

📖 ⚠️
Rajitha Gunathilake
Rajitha Gunathilake

💻
Bram Musuko Panjaitan
Bram Musuko Panjaitan

⚠️
Zuhaib Shah
Zuhaib Shah

💻
Guilherme Fernandes
Guilherme Fernandes

💻
Ben Halverson
Ben Halverson

💻 ⚠️
Ayush Chauhan
Ayush Chauhan

⚠️ 💻
Edwards Moses
Edwards Moses

📖 ⚠️
Rajitha Gunathilake
Rajitha Gunathilake

💻
Bram Musuko Panjaitan
Bram Musuko Panjaitan

⚠️
filip
filip

💻
Farhaan
Farhaan

💻
lauk20
lauk20

💻
Sherly Febrianti
Sherly Febrianti

📖
headStyleColorRed
headStyleColorRed

💻
mdmuaj13
mdmuaj13

💻
Christopher Vestman
Christopher Vestman

💻
filip
filip

💻
Farhaan
Farhaan

💻
Ava Elise
Ava Elise

💻
Janet Thieu
Janet Thieu

💻
Vishwa Mahadevan
Vishwa Mahadevan

💻
Christa
Christa

📖
Bruno Vilar
Bruno Vilar

📖
diff --git a/app.ts b/app.ts index 3ad7961f..ae42eea9 100644 --- a/app.ts +++ b/app.ts @@ -1,13 +1,16 @@ require('dotenv').config(); import express, { Request, Response } from 'express'; import { swaggerSpec } from './utils/swagger'; -import swag from "./swagger.json"; - +import swag from './swagger.json'; +import { applicationRateLimiter } from './middleware/rate-limiter/RateLimiter'; const morgan = require('morgan'); const cors = require('cors'); const app = express(); +// Rate limit middleware +app.use(applicationRateLimiter); // rate-limit applied to all the routes by default + // Load Mock Modules require('./modules/animal/api/animal-routes')(app); // Animals require('./modules/chat/api/chat-routes')(app); // Chat @@ -33,7 +36,9 @@ 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 - +require('./modules/instruments/api/instruments-routes')(app); // Instruments +require('./modules/news/api/news-routes')(app); // news +require('./modules/video/api/video-routes')(app) // Video Data // Add an healthcheck endpoint // Shows amount of API Categories and their endpoints @@ -52,6 +57,7 @@ app.get('/full-status', (req, res) => { date: new Date(), totalCategories: swag.tags.length, totalEndpoints: Object.keys(swag.paths).length, + version: swag.info.version }; res.status(200).send(data); }); @@ -62,9 +68,18 @@ app.get('/docs.json', (req: Request, res: Response) => { res.send(swaggerSpec); }); + +const schemaOptions = { + swaggerOptions: { + dom_id: "#swagger-ui", + tagsSorter: "alpha", + operationsSorter: "alpha" + } +}; + // Setup Swagger API Documentation const swaggerUi = require('swagger-ui-express'); -app.use('/', swaggerUi.serve, swaggerUi.setup(swaggerSpec)); +app.use('/', swaggerUi.serve, swaggerUi.setup(swaggerSpec, schemaOptions)); app.use(cors()); // enabling CORS for all requests app.use(morgan('combined')); // adding morgan to log HTTP requests diff --git a/middleware/rate-limiter/RateLimiter.ts b/middleware/rate-limiter/RateLimiter.ts new file mode 100644 index 00000000..4a947c93 --- /dev/null +++ b/middleware/rate-limiter/RateLimiter.ts @@ -0,0 +1,23 @@ +import { rateLimit } from 'express-rate-limit'; +import { Request,Response } from 'express'; +import rateLimitResponse from './consts/RateLimitResponse'; + +// WINDOW_SIZE and WINDOW_TIME can be configured in .env.example file +const RATELIMIT_WINDOWSIZE=parseInt(process.env.RATELIMIT_WINDOWSIZE); +const RATELIMIT_WINDOWTIME=parseInt(process.env.RATELIMIT_WINDOWTIME); + +// middleware for rate limiting application usage. +export const applicationRateLimiter=rateLimit({ + max:RATELIMIT_WINDOWSIZE, + windowMs:RATELIMIT_WINDOWTIME, + legacyHeaders:false, + standardHeaders:true, // sends standard headers after the limit get over + message:(req:Request,res:Response)=>{ + const ratelimitObject:rateLimitResponse={ + id: "too_many_requests", + generatedAt:Date.now(), + message: "API Rate limit exceeded." + } + res.json(ratelimitObject).status(429); + } +}); \ No newline at end of file diff --git a/middleware/rate-limiter/consts/RateLimitResponse.ts b/middleware/rate-limiter/consts/RateLimitResponse.ts new file mode 100644 index 00000000..cb49dcd5 --- /dev/null +++ b/middleware/rate-limiter/consts/RateLimitResponse.ts @@ -0,0 +1,7 @@ +type rateLimitResponse = { + id: String; + generatedAt: Number; + message: String; +}; + +export default rateLimitResponse; \ No newline at end of file diff --git a/modules/address/api/address-routes.ts b/modules/address/api/address-routes.ts index 7dc5e123..2b083b85 100644 --- a/modules/address/api/address-routes.ts +++ b/modules/address/api/address-routes.ts @@ -6,21 +6,21 @@ 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'] - */ + * @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); diff --git a/modules/colors/api/colors-route.ts b/modules/colors/api/colors-route.ts index 1a1688a0..75525510 100644 --- a/modules/colors/api/colors-route.ts +++ b/modules/colors/api/colors-route.ts @@ -10,31 +10,30 @@ const defaultColorFormat = 'hex'; module.exports = function (app: core.Express) { /** - * @openapi - * '/colors/{qty}': - * get: - * tags: - * - Colors - * summary: Obtain a random color - * parameters: - * - in: path - * name: qty - * description: They quantity of colors you want to generate - * type: string - * default: 1 - * required: false - * responses: - * '200': - * description: OK - * schema: - * type: array - * items: - * type: string - * example: efc27b - */ + * @openapi + * '/colors/{qty}': + * get: + * tags: + * - Colors + * summary: Obtain a random color + * parameters: + * - in: path + * name: qty + * description: They quantity of colors you want to generate + * type: string + * default: 1 + * required: false + * responses: + * '200': + * description: OK + * schema: + * type: array + * items: + * type: string + * example: efc27b + */ app.get('/colors/:qty?', (req: Request, res: Response) => { - const qty = getQtyFromRequest(req); - + const qty = getQtyFromRequest(req,1) try { const randomColors = []; diff --git a/modules/colors/consts/ColorSpaces.ts b/modules/colors/consts/ColorSpaces.ts index 3d9a0452..70ef9543 100644 --- a/modules/colors/consts/ColorSpaces.ts +++ b/modules/colors/consts/ColorSpaces.ts @@ -75,7 +75,7 @@ const ColorSpaces: {[key: string]: ColorSpace} = { id: 'cmyka', getNums: () => { return [ - ...ColorSpaces.CMYKA.getNums(), + ...ColorSpaces.CMYK.getNums(), Math.round(Math.random() * 100) / 100, ] } diff --git a/modules/colors/tests/colors.test.ts b/modules/colors/tests/colors.test.ts new file mode 100644 index 00000000..eda685b6 --- /dev/null +++ b/modules/colors/tests/colors.test.ts @@ -0,0 +1,164 @@ +import request from 'supertest'; +import app from "../../../app" // "../../../../app"; +describe('color api endpoints', () => { + + describe('GET /color/', () => { + it('requesting with no qty returns a list of 1 color', async () => { + const qty = 1; + const response = await request(app).get(`/colors/`); + expect(response.body.length).toBe(qty); + }); + it('requesting with non-numerical qty returns a list of 100 color', async () => { + // I think this is potentially a bug - we probably should be retuning 1 colour, or throwing an error. + const qty = 100; + const response = await request(app).get(`/colors/foo`); + + expect(response.body.length).toBe(qty); + }); + it('requesting with quantity of 2 should return a list of 2 colors', async () => { + const qty = 2; + const response = await request(app).get(`/colors/${qty}`); + expect(response.body.length).toBe(qty); + }); + it('requesting with quantity of 200 should return a list of 100 colors', async () => { + const qty = 200; + const response = await request(app).get(`/colors/${qty}`); + expect(response.body.length).toBe(100); + }); + +}); + +describe("GET /color/x/y/z Execution", () => { + + it.each([ + ["/colors/1/rgba/hex", 1], + ["/colors/1/hsla/hex", 1], + ["/colors/1/hsva/hex", 1], + ["/colors/1/cmyka/hex", 1], + ["/colors/foo/rgba/hex", 100], + ["/colors/foo/hsla/hex", 100], + ["/colors/foo/hsva/hex", 100], + ["/colors/foo/cmyka/hex", 100], + ["/colors/2/rgba/hex", 2], + ["/colors/2/hsla/hex", 2], + ["/colors/2/hsva/hex", 2], + ["/colors/2/cmyka/hex", 2], + ["/colors/200/rgba/hex", 100], + ["/colors/200/hsla/hex", 100], + ["/colors/200/hsva/hex", 100], + ["/colors/200/cmyka/hex", 100] + ])("requesting '%s' throws 400 Bad Request - alpha channels are not supported for HEX output", async (address, expected) => { + const response = await request(app).get(address); + expect(response.status).toBe(400); + expect(response.body).toEqual({"error":"Cannot convert to hex with alpha"}); +}); + + it("Passing in an invalid Colourspace throws an error", async () => { + const qty = 1; + const response = await request(app).get(`/colors/1/mock/hex`); + expect(response.status).toBe(400); + expect(response.body).toEqual({"error":"Invalid color space"}); + }) + + it("Passing in an invalid format throws an error", async () => { + const qty = 1; + const response = await request(app).get(`/colors/1/rgb/foo`); + expect(response.status).toBe(400); + expect(response.body).toEqual({"error":"Invalid format"}); + }) + + it.each([ + ["/colors/1/rgb/hex", 1], + ["/colors/1/hsl/hex", 1], + ["/colors/1/hsv/hex", 1], + ["/colors/1/cmyk/hex", 1], + ["/colors/foo/rgb/hex", 100], + ["/colors/foo/hsl/hex", 100], + ["/colors/foo/hsv/hex", 100], + ["/colors/foo/cmyk/hex", 100], + ["/colors/2/rgb/hex", 2], + ["/colors/2/hsl/hex", 2], + ["/colors/2/hsv/hex", 2], + ["/colors/2/cmyk/hex", 2], + ["/colors/200/rgb/hex", 100], + ["/colors/200/hsl/hex", 100], + ["/colors/200/hsv/hex", 100], + ["/colors/200/cmyk/hex", 100], + ["/colors/1/rgb/decimal", 1], + ["/colors/1/rgba/decimal", 1], + ["/colors/1/hsl/decimal", 1], + ["/colors/1/hsla/decimal", 1], + ["/colors/1/hsv/decimal", 1], + ["/colors/1/hsva/decimal", 1], + ["/colors/1/cmyk/decimal", 1], + ["/colors/1/cmyka/decimal", 1], + ["/colors/foo/rgb/decimal", 100], + ["/colors/foo/rgba/decimal", 100], + ["/colors/foo/hsl/decimal", 100], + ["/colors/foo/hsla/decimal", 100], + ["/colors/foo/hsv/decimal", 100], + ["/colors/foo/hsva/decimal", 100], + ["/colors/foo/cmyk/decimal", 100], + ["/colors/foo/cmyka/decimal", 100], + ["/colors/2/rgb/decimal", 2], + ["/colors/2/rgba/decimal", 2], + ["/colors/2/hsl/decimal", 2], + ["/colors/2/hsla/decimal", 2], + ["/colors/2/hsv/decimal", 2], + ["/colors/2/hsva/decimal", 2], + ["/colors/2/cmyk/decimal", 2], + ["/colors/2/cmyka/decimal", 2],, + ["/colors/200/rgb/decimal", 100], + ["/colors/200/rgba/decimal", 100], + ["/colors/200/hsl/decimal", 100], + ["/colors/200/hsla/decimal", 100], + ["/colors/200/hsv/decimal", 100], + ["/colors/200/hsva/decimal", 100], + ["/colors/200/cmyk/decimal", 100], + ["/colors/200/cmyka/decimal", 100], + ["/colors/1/rgb/css", 1], + ["/colors/1/rgba/css", 1], + ["/colors/1/hsl/css", 1], + ["/colors/1/hsla/css", 1], + ["/colors/1/hsv/css", 1], + ["/colors/1/hsva/css", 1], + ["/colors/1/cmyk/css", 1], + ["/colors/1/cmyka/css", 1], + ["/colors/foo/rgb/css", 100], + ["/colors/foo/rgba/css", 100], + ["/colors/foo/hsl/css", 100], + ["/colors/foo/hsla/css", 100], + ["/colors/foo/hsv/css", 100], + ["/colors/foo/hsva/css", 100], + ["/colors/foo/cmyk/css", 100], + ["/colors/foo/cmyka/css", 100], + ["/colors/2/rgb/css", 2], + ["/colors/2/rgba/css", 2], + ["/colors/2/hsl/css", 2], + ["/colors/2/hsla/css", 2], + ["/colors/2/hsv/css", 2], + ["/colors/2/hsva/css", 2], + ["/colors/2/cmyk/css", 2], + ["/colors/2/cmyka/css", 2], + ["/colors/200/rgb/css", 100], + ["/colors/200/rgba/css", 100], + ["/colors/200/hsl/css", 100], + ["/colors/200/hsla/css", 100], + ["/colors/200/hsv/css", 100], + ["/colors/200/hsva/css", 100], + ["/colors/200/cmyk/css", 100], + ["/colors/200/cmyka/css", 100], + ])("requesting '%s' return %s", async (address, expected) => { + const response = await request(app).get(address); + if (response.status == 500){ + console.log(response.body) + } + expect(response.status).toBe(200) + + expect(response.body.length).toBe(expected); + }); +}); + + + +}); diff --git a/modules/countries/api/countries-routes.ts b/modules/countries/api/countries-routes.ts index d27c5cd1..bd38c7ea 100644 --- a/modules/countries/api/countries-routes.ts +++ b/modules/countries/api/countries-routes.ts @@ -16,8 +16,38 @@ module.exports = function (app: core.Express) { * schema: * type: array * items: - * type: string - * example: United Kingdom, United States Of America + * type: object + * properties: + * name: + * type: string + * example: Iceland + * officialName: + * type: string + * example: Iceland + * capital: + * type: string + * example: Reykjavik + * continent: + * type: string + * example: Europe + * cca3: + * type: string + * example: ISL + * areaInKm2: + * type: string + * example: 103000 + * flagUrl: + * type: string + * example: https://flagcdn.com/w320/is.png + * mapsUrl: + * type: string + * example: https://goo.gl/maps/WxFWSQuc3oamNxoE6 + * currencyName: + * type: string + * example: Icelandic króna + * currencySymbol: + * type: string + * example: kr */ app.get('/countries/', (req: Request, res: Response) => { res.json({ @@ -44,13 +74,43 @@ module.exports = function (app: core.Express) { * schema: * type: array * items: - * type: string - * example: United Kingdom + * type: object + * properties: + * name: + * type: string + * example: Iceland + * officialName: + * type: string + * example: Iceland + * capital: + * type: string + * example: Reykjavik + * continent: + * type: string + * example: Europe + * cca3: + * type: string + * example: ISL + * areaInKm2: + * type: string + * example: 103000 + * flagUrl: + * type: string + * example: https://flagcdn.com/w320/is.png + * mapsUrl: + * type: string + * example: https://goo.gl/maps/WxFWSQuc3oamNxoE6 + * currencyName: + * type: string + * example: Icelandic króna + * currencySymbol: + * type: string + * example: kr */ app.get('/countries/:filterBy?', (req: Request, res: Response) => { if (req.params.filterBy) { const filteredList = countriesList.filter((source) => - source.toLocaleLowerCase().includes(req.params.filterBy.toLocaleLowerCase()) + source.name.toLocaleLowerCase().includes(req.params.filterBy.toLocaleLowerCase()) ); return res.json({ countries: filteredList, diff --git a/modules/countries/data/countries.ts b/modules/countries/data/countries.ts index 9241dcab..37b28dc3 100644 --- a/modules/countries/data/countries.ts +++ b/modules/countries/data/countries.ts @@ -1,261 +1,3003 @@ const countriesList = [ - "Afghanistan", - "Akrotiri", - "Albania", - "Algeria", - "American Samoa", - "Andorra", - "Angola", - "Anguilla", - "Antarctica", - "Antigua and Barbuda", - "Argentina", - "Armenia", - "Aruba", - "Ashmore and Cartier Islands", - "Australia", - "Austria", - "Azerbaijan", - "Bahamas, The", - "Bahrain", - "Bangladesh", - "Barbados", - "Bassas da India", - "Belarus", - "Belgium", - "Belize", - "Benin", - "Bermuda", - "Bhutan", - "Bolivia", - "Bosnia and Herzegovina", - "Botswana", - "Bouvet Island", - "Brazil", - "British Indian Ocean Territory", - "British Virgin Islands", - "Brunei", - "Bulgaria", - "Burkina Faso", - "Burma", - "Burundi", - "Cambodia", - "Cameroon", - "Canada", - "Cape Verde", - "Cayman Islands", - "Central African Republic", - "Chad", - "Chile", - "China", - "Christmas Island", - "Clipperton Island", - "Cocos (Keeling) Islands", - "Colombia", - "Comoros", - "Congo, Democratic Republic of the", - "Congo, Republic of the", - "Cook Islands", - "Coral Sea Islands", - "Costa Rica", - "Cote d'Ivoire", - "Croatia", - "Cuba", - "Cyprus", - "Czech Republic", - "Denmark", - "Dhekelia", - "Djibouti", - "Dominica", - "Dominican Republic", - "Ecuador", - "Egypt", - "El Salvador", - "Equatorial Guinea", - "Eritrea", - "Estonia", - "Ethiopia", - "Europa Island", - "Falkland Islands (Islas Malvinas)", - "Faroe Islands", - "Fiji", - "Finland", - "France", - "French Guiana", - "French Polynesia", - "French Southern and Antarctic Lands", - "Gabon", - "Gambia, The", - "Gaza Strip", - "Georgia", - "Germany", - "Ghana", - "Gibraltar", - "Glorioso Islands", - "Greece", - "Greenland", - "Grenada", - "Guadeloupe", - "Guam", - "Guatemala", - "Guernsey", - "Guinea", - "Guinea-Bissau", - "Guyana", - "Haiti", - "Heard Island and McDonald Islands", - "Holy See (Vatican City)", - "Honduras", - "Hong Kong", - "Hungary", - "Iceland", - "India", - "Indonesia", - "Iran", - "Iraq", - "Ireland", - "Isle of Man", - "Israel", - "Italy", - "Jamaica", - "Jan Mayen", - "Japan", - "Jersey", - "Jordan", - "Juan de Nova Island", - "Kazakhstan", - "Kenya", - "Kiribati", - "Korea, North", - "Korea, South", - "Kuwait", - "Kyrgyzstan", - "Laos", - "Latvia", - "Lebanon", - "Lesotho", - "Liberia", - "Libya", - "Liechtenstein", - "Lithuania", - "Luxembourg", - "Macau", - "Macedonia", - "Madagascar", - "Malawi", - "Malaysia", - "Maldives", - "Mali", - "Malta", - "Marshall Islands", - "Martinique", - "Mauritania", - "Mauritius", - "Mayotte", - "Mexico", - "Micronesia, Federated States of", - "Moldova", - "Monaco", - "Mongolia", - "Montserrat", - "Morocco", - "Mozambique", - "Namibia", - "Nauru", - "Navassa Island", - "Nepal", - "Netherlands", - "Netherlands Antilles", - "New Caledonia", - "New Zealand", - "Nicaragua", - "Niger", - "Nigeria", - "Niue", - "Norfolk Island", - "Northern Mariana Islands", - "Norway", - "Oman", - "Pakistan", - "Palau", - "Panama", - "Papua New Guinea", - "Paracel Islands", - "Paraguay", - "Peru", - "Philippines", - "Pitcairn Islands", - "Poland", - "Portugal", - "Puerto Rico", - "Qatar", - "Reunion", - "Romania", - "Russia", - "Rwanda", - "Saint Helena", - "Saint Kitts and Nevis", - "Saint Lucia", - "Saint Pierre and Miquelon", - "Saint Vincent and the Grenadines", - "Samoa", - "San Marino", - "Sao Tome and Principe", - "Saudi Arabia", - "Senegal", - "Serbia and Montenegro", - "Seychelles", - "Sierra Leone", - "Singapore", - "Slovakia", - "Slovenia", - "Solomon Islands", - "Somalia", - "South Africa", - "South Georgia and the South Sandwich Islands", - "Spain", - "Spratly Islands", - "Sri Lanka", - "Sudan", - "Suriname", - "Svalbard", - "Swaziland", - "Sweden", - "Switzerland", - "Syria", - "Taiwan", - "Tajikistan", - "Tanzania", - "Thailand", - "Timor-Leste", - "Togo", - "Tokelau", - "Tonga", - "Trinidad and Tobago", - "Tromelin Island", - "Tunisia", - "Turkey", - "Turkmenistan", - "Turks and Caicos Islands", - "Tuvalu", - "Uganda", - "Ukraine", - "United Arab Emirates", - "United Kingdom", - "United States", - "Uruguay", - "Uzbekistan", - "Vanuatu", - "Venezuela", - "Vietnam", - "Virgin Islands", - "Wake Island", - "Wallis and Futuna", - "West Bank", - "Western Sahara", - "Yemen", - "Zambia", - "Zimbabwe" + { + "name": "Iceland", + "officialName": "Iceland", + "capital": "Reykjavik", + "continent": "Europe", + "cca3": "ISL", + "areaInKm2": 103000, + "flagUrl": "https://flagcdn.com/w320/is.png", + "mapsUrl": "https://goo.gl/maps/WxFWSQuc3oamNxoE6", + "currencyName": "Icelandic króna", + "currencySymbol": "kr" + }, + { + "name": "Spain", + "officialName": "Kingdom of Spain", + "capital": "Madrid", + "continent": "Europe", + "cca3": "ESP", + "areaInKm2": 505992, + "flagUrl": "https://flagcdn.com/w320/es.png", + "mapsUrl": "https://goo.gl/maps/138JaXW8EZzRVitY9", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Iraq", + "officialName": "Republic of Iraq", + "capital": "Baghdad", + "continent": "Asia", + "cca3": "IRQ", + "areaInKm2": 438317, + "flagUrl": "https://flagcdn.com/w320/iq.png", + "mapsUrl": "https://goo.gl/maps/iL8Bmy1sUCW9fUk18", + "currencyName": "Iraqi dinar", + "currencySymbol": "ع.د" + }, + { + "name": "Malawi", + "officialName": "Republic of Malawi", + "capital": "Lilongwe", + "continent": "Africa", + "cca3": "MWI", + "areaInKm2": 118484, + "flagUrl": "https://flagcdn.com/w320/mw.png", + "mapsUrl": "https://goo.gl/maps/mc6z83pW9m98X2Ef6", + "currencyName": "Malawian kwacha", + "currencySymbol": "MK" + }, + { + "name": "Hong Kong", + "officialName": "Hong Kong Special Administrative Region of the People's Republic of China", + "capital": "City of Victoria", + "continent": "Asia", + "cca3": "HKG", + "areaInKm2": 1104, + "flagUrl": "https://flagcdn.com/w320/hk.png", + "mapsUrl": "https://goo.gl/maps/1sEnNmT47ffrC8MU8", + "currencyName": "Hong Kong dollar", + "currencySymbol": "$" + }, + { + "name": "Malta", + "officialName": "Republic of Malta", + "capital": "Valletta", + "continent": "Europe", + "cca3": "MLT", + "areaInKm2": 316, + "flagUrl": "https://flagcdn.com/w320/mt.png", + "mapsUrl": "https://goo.gl/maps/skXCqguxDxxEKVk47", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Paraguay", + "officialName": "Republic of Paraguay", + "capital": "Asunción", + "continent": "Americas", + "cca3": "PRY", + "areaInKm2": 406752, + "flagUrl": "https://flagcdn.com/w320/py.png", + "mapsUrl": "https://goo.gl/maps/JtnqG73WJn1Gx6mz6", + "currencyName": "Paraguayan guaraní", + "currencySymbol": "₲" + }, + { + "name": "Djibouti", + "officialName": "Republic of Djibouti", + "capital": "Djibouti", + "continent": "Africa", + "cca3": "DJI", + "areaInKm2": 23200, + "flagUrl": "https://flagcdn.com/w320/dj.png", + "mapsUrl": "https://goo.gl/maps/V1HWfzN3bS1kwf4C6", + "currencyName": "Djiboutian franc", + "currencySymbol": "Fr" + }, + { + "name": "Madagascar", + "officialName": "Republic of Madagascar", + "capital": "Antananarivo", + "continent": "Africa", + "cca3": "MDG", + "areaInKm2": 587041, + "flagUrl": "https://flagcdn.com/w320/mg.png", + "mapsUrl": "https://goo.gl/maps/AHQh2ABBaFW6Ngj26", + "currencyName": "Malagasy ariary", + "currencySymbol": "Ar" + }, + { + "name": "Nepal", + "officialName": "Federal Democratic Republic of Nepal", + "capital": "Kathmandu", + "continent": "Asia", + "cca3": "NPL", + "areaInKm2": 147181, + "flagUrl": "https://flagcdn.com/w320/np.png", + "mapsUrl": "https://goo.gl/maps/UMj2zpbQp7B5c3yT7", + "currencyName": "Nepalese rupee", + "currencySymbol": "₨" + }, + { + "name": "San Marino", + "officialName": "Republic of San Marino", + "capital": "City of San Marino", + "continent": "Europe", + "cca3": "SMR", + "areaInKm2": 61, + "flagUrl": "https://flagcdn.com/w320/sm.png", + "mapsUrl": "https://goo.gl/maps/rxCVJjm8dVY93RPY8", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Netherlands", + "officialName": "Kingdom of the Netherlands", + "capital": "Amsterdam", + "continent": "Europe", + "cca3": "NLD", + "areaInKm2": 41850, + "flagUrl": "https://flagcdn.com/w320/nl.png", + "mapsUrl": "https://goo.gl/maps/Hv6zQswGhFxoVVBm6", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Greenland", + "officialName": "Greenland", + "capital": "Nuuk", + "continent": "Americas", + "cca3": "GRL", + "areaInKm2": 2166086, + "flagUrl": "https://flagcdn.com/w320/gl.png", + "mapsUrl": "https://goo.gl/maps/j3289UPEQXt1ceSy8", + "currencyName": "krone", + "currencySymbol": "kr." + }, + { + "name": "Norway", + "officialName": "Kingdom of Norway", + "capital": "Oslo", + "continent": "Europe", + "cca3": "NOR", + "areaInKm2": 323802, + "flagUrl": "https://flagcdn.com/w320/no.png", + "mapsUrl": "https://goo.gl/maps/htWRrphA7vNgQNdSA", + "currencyName": "Norwegian krone", + "currencySymbol": "kr" + }, + { + "name": "Tuvalu", + "officialName": "Tuvalu", + "capital": "Funafuti", + "continent": "Oceania", + "cca3": "TUV", + "areaInKm2": 26, + "flagUrl": "https://flagcdn.com/w320/tv.png", + "mapsUrl": "https://goo.gl/maps/LbuUxtkgm1dfN1Pn6", + "currencyName": "Australian dollar", + "currencySymbol": "$" + }, + { + "name": "Lebanon", + "officialName": "Lebanese Republic", + "capital": "Beirut", + "continent": "Asia", + "cca3": "LBN", + "areaInKm2": 10452, + "flagUrl": "https://flagcdn.com/w320/lb.png", + "mapsUrl": "https://goo.gl/maps/Sz5VCU8UFBqMyTdc9", + "currencyName": "Lebanese pound", + "currencySymbol": "ل.ل" + }, + { + "name": "Burkina Faso", + "officialName": "Burkina Faso", + "capital": "Ouagadougou", + "continent": "Africa", + "cca3": "BFA", + "areaInKm2": 272967, + "flagUrl": "https://flagcdn.com/w320/bf.png", + "mapsUrl": "https://goo.gl/maps/rKRmpcMbFher2ozb7", + "currencyName": "West African CFA franc", + "currencySymbol": "Fr" + }, + { + "name": "Cape Verde", + "officialName": "Republic of Cabo Verde", + "capital": "Praia", + "continent": "Africa", + "cca3": "CPV", + "areaInKm2": 4033, + "flagUrl": "https://flagcdn.com/w320/cv.png", + "mapsUrl": "https://goo.gl/maps/Kc9vy5ChjuiAgMfXA", + "currencyName": "Cape Verdean escudo", + "currencySymbol": "Esc" + }, + { + "name": "Gibraltar", + "officialName": "Gibraltar", + "capital": "Gibraltar", + "continent": "Europe", + "cca3": "GIB", + "areaInKm2": 6, + "flagUrl": "https://flagcdn.com/w320/gi.png", + "mapsUrl": "https://goo.gl/maps/CEoHAs1t6byCBhHFA", + "currencyName": "Gibraltar pound", + "currencySymbol": "£" + }, + { + "name": "Algeria", + "officialName": "People's Democratic Republic of Algeria", + "capital": "Algiers", + "continent": "Africa", + "cca3": "DZA", + "areaInKm2": 2381741, + "flagUrl": "https://flagcdn.com/w320/dz.png", + "mapsUrl": "https://goo.gl/maps/RsAyAfyaiNVb8DpW8", + "currencyName": "Algerian dinar", + "currencySymbol": "د.ج" + }, + { + "name": "Georgia", + "officialName": "Georgia", + "capital": "Tbilisi", + "continent": "Asia", + "cca3": "GEO", + "areaInKm2": 69700, + "flagUrl": "https://flagcdn.com/w320/ge.png", + "mapsUrl": "https://goo.gl/maps/bvCaGBePR1ZEDK5cA", + "currencyName": "lari", + "currencySymbol": "₾" + }, + { + "name": "Mongolia", + "officialName": "Mongolia", + "capital": "Ulan Bator", + "continent": "Asia", + "cca3": "MNG", + "areaInKm2": 1564110, + "flagUrl": "https://flagcdn.com/w320/mn.png", + "mapsUrl": "https://goo.gl/maps/A1X7bMCKThBDNjzH6", + "currencyName": "Mongolian tögrög", + "currencySymbol": "₮" + }, + { + "name": "Iran", + "officialName": "Islamic Republic of Iran", + "capital": "Tehran", + "continent": "Asia", + "cca3": "IRN", + "areaInKm2": 1648195, + "flagUrl": "https://flagcdn.com/w320/ir.png", + "mapsUrl": "https://goo.gl/maps/dMgEGuacBPGYQnjY7", + "currencyName": "Iranian rial", + "currencySymbol": "﷼" + }, + { + "name": "Tokelau", + "officialName": "Tokelau", + "capital": "Fakaofo", + "continent": "Oceania", + "cca3": "TKL", + "areaInKm2": 12, + "flagUrl": "https://flagcdn.com/w320/tk.png", + "mapsUrl": "https://goo.gl/maps/Ap5qN8qien6pT9UN6", + "currencyName": "New Zealand dollar", + "currencySymbol": "$" + }, + { + "name": "Singapore", + "officialName": "Republic of Singapore", + "capital": "Singapore", + "continent": "Asia", + "cca3": "SGP", + "areaInKm2": 710, + "flagUrl": "https://flagcdn.com/w320/sg.png", + "mapsUrl": "https://goo.gl/maps/QbQt9Y9b5KFzsahV6", + "currencyName": "Singapore dollar", + "currencySymbol": "$" + }, + { + "name": "French Guiana", + "officialName": "Guiana", + "capital": "Cayenne", + "continent": "Americas", + "cca3": "GUF", + "areaInKm2": 83534, + "flagUrl": "https://flagcdn.com/w320/gf.png", + "mapsUrl": "https://goo.gl/maps/NJawFwMzG7YtCrVP7", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Martinique", + "officialName": "Martinique", + "capital": "Fort-de-France", + "continent": "Americas", + "cca3": "MTQ", + "areaInKm2": 1128, + "flagUrl": "https://flagcdn.com/w320/mq.png", + "mapsUrl": "https://goo.gl/maps/87ER7sDAFU7JjcvR6", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "British Virgin Islands", + "officialName": "Virgin Islands", + "capital": "Road Town", + "continent": "Americas", + "cca3": "VGB", + "areaInKm2": 151, + "flagUrl": "https://flagcdn.com/w320/vg.png", + "mapsUrl": "https://goo.gl/maps/49C9cSesNVAR9DQk8", + "currencyName": "United States dollar", + "currencySymbol": "$" + }, + { + "name": "Nicaragua", + "officialName": "Republic of Nicaragua", + "capital": "Managua", + "continent": "Americas", + "cca3": "NIC", + "areaInKm2": 130373, + "flagUrl": "https://flagcdn.com/w320/ni.png", + "mapsUrl": "https://goo.gl/maps/P77LaEVkKJKXneRC6", + "currencyName": "Nicaraguan córdoba", + "currencySymbol": "C$" + }, + { + "name": "Moldova", + "officialName": "Republic of Moldova", + "capital": "Chișinău", + "continent": "Europe", + "cca3": "MDA", + "areaInKm2": 33846, + "flagUrl": "https://flagcdn.com/w320/md.png", + "mapsUrl": "https://goo.gl/maps/JjmyUuULujnDeFPf7", + "currencyName": "Moldovan leu", + "currencySymbol": "L" + }, + { + "name": "Yemen", + "officialName": "Republic of Yemen", + "capital": "Sana'a", + "continent": "Asia", + "cca3": "YEM", + "areaInKm2": 527968, + "flagUrl": "https://flagcdn.com/w320/ye.png", + "mapsUrl": "https://goo.gl/maps/WCmE76HKcLideQQw7", + "currencyName": "Yemeni rial", + "currencySymbol": "﷼" + }, + { + "name": "Gambia", + "officialName": "Republic of the Gambia", + "capital": "Banjul", + "continent": "Africa", + "cca3": "GMB", + "areaInKm2": 10689, + "flagUrl": "https://flagcdn.com/w320/gm.png", + "mapsUrl": "https://goo.gl/maps/bbGBCxxtfD2A9Z4m6", + "currencyName": "dalasi", + "currencySymbol": "D" + }, + { + "name": "Kyrgyzstan", + "officialName": "Kyrgyz Republic", + "capital": "Bishkek", + "continent": "Asia", + "cca3": "KGZ", + "areaInKm2": 199951, + "flagUrl": "https://flagcdn.com/w320/kg.png", + "mapsUrl": "https://goo.gl/maps/SKG8BSMMQVvxkRkB7", + "currencyName": "Kyrgyzstani som", + "currencySymbol": "с" + }, + { + "name": "Cuba", + "officialName": "Republic of Cuba", + "capital": "Havana", + "continent": "Americas", + "cca3": "CUB", + "areaInKm2": 109884, + "flagUrl": "https://flagcdn.com/w320/cu.png", + "mapsUrl": "https://goo.gl/maps/1dDw1QfZspfMUTm99", + "currencyName": "Cuban convertible peso", + "currencySymbol": "$" + }, + { + "name": "Eritrea", + "officialName": "State of Eritrea", + "capital": "Asmara", + "continent": "Africa", + "cca3": "ERI", + "areaInKm2": 117600, + "flagUrl": "https://flagcdn.com/w320/er.png", + "mapsUrl": "https://goo.gl/maps/HRyqUpnPwwG6jY5j6", + "currencyName": "Eritrean nakfa", + "currencySymbol": "Nfk" + }, + { + "name": "Svalbard and Jan Mayen", + "officialName": "Svalbard og Jan Mayen", + "capital": "Longyearbyen", + "continent": "Europe", + "cca3": "SJM", + "areaInKm2": -1, + "flagUrl": "https://flagcdn.com/w320/sj.png", + "mapsUrl": "https://goo.gl/maps/L2wyyn3cQ16PzQ5J8", + "currencyName": "krone", + "currencySymbol": "kr" + }, + { + "name": "El Salvador", + "officialName": "Republic of El Salvador", + "capital": "San Salvador", + "continent": "Americas", + "cca3": "SLV", + "areaInKm2": 21041, + "flagUrl": "https://flagcdn.com/w320/sv.png", + "mapsUrl": "https://goo.gl/maps/cZnCEi5sEMQtKKcB7", + "currencyName": "United States dollar", + "currencySymbol": "$" + }, + { + "name": "Timor-Leste", + "officialName": "Democratic Republic of Timor-Leste", + "capital": "Dili", + "continent": "Asia", + "cca3": "TLS", + "areaInKm2": 14874, + "flagUrl": "https://flagcdn.com/w320/tl.png", + "mapsUrl": "https://goo.gl/maps/sFqBC9zjgUXPR1iTA", + "currencyName": "United States dollar", + "currencySymbol": "$" + }, + { + "name": "South Korea", + "officialName": "Republic of Korea", + "capital": "Seoul", + "continent": "Asia", + "cca3": "KOR", + "areaInKm2": 100210, + "flagUrl": "https://flagcdn.com/w320/kr.png", + "mapsUrl": "https://goo.gl/maps/7ecjaJXefjAQhxjGA", + "currencyName": "South Korean won", + "currencySymbol": "₩" + }, + { + "name": "Mali", + "officialName": "Republic of Mali", + "capital": "Bamako", + "continent": "Africa", + "cca3": "MLI", + "areaInKm2": 1240192, + "flagUrl": "https://flagcdn.com/w320/ml.png", + "mapsUrl": "https://goo.gl/maps/u9mYJkCB19wyuzh27", + "currencyName": "West African CFA franc", + "currencySymbol": "Fr" + }, + { + "name": "Turks and Caicos Islands", + "officialName": "Turks and Caicos Islands", + "capital": "Cockburn Town", + "continent": "Americas", + "cca3": "TCA", + "areaInKm2": 948, + "flagUrl": "https://flagcdn.com/w320/tc.png", + "mapsUrl": "https://goo.gl/maps/R8VUDQfwZiFtvmyn8", + "currencyName": "United States dollar", + "currencySymbol": "$" + }, + { + "name": "Ghana", + "officialName": "Republic of Ghana", + "capital": "Accra", + "continent": "Africa", + "cca3": "GHA", + "areaInKm2": 238533, + "flagUrl": "https://flagcdn.com/w320/gh.png", + "mapsUrl": "https://goo.gl/maps/Avy5RSmdsXFBaiXq8", + "currencyName": "Ghanaian cedi", + "currencySymbol": "₵" + }, + { + "name": "Egypt", + "officialName": "Arab Republic of Egypt", + "capital": "Cairo", + "continent": "Africa", + "cca3": "EGY", + "areaInKm2": 1002450, + "flagUrl": "https://flagcdn.com/w320/eg.png", + "mapsUrl": "https://goo.gl/maps/uoDRhXbsqjG6L7VG7", + "currencyName": "Egyptian pound", + "currencySymbol": "£" + }, + { + "name": "Gabon", + "officialName": "Gabonese Republic", + "capital": "Libreville", + "continent": "Africa", + "cca3": "GAB", + "areaInKm2": 267668, + "flagUrl": "https://flagcdn.com/w320/ga.png", + "mapsUrl": "https://goo.gl/maps/vyRSkqw1H1fnq4ry6", + "currencyName": "Central African CFA franc", + "currencySymbol": "Fr" + }, + { + "name": "Togo", + "officialName": "Togolese Republic", + "capital": "Lomé", + "continent": "Africa", + "cca3": "TGO", + "areaInKm2": 56785, + "flagUrl": "https://flagcdn.com/w320/tg.png", + "mapsUrl": "https://goo.gl/maps/jzAa9feXuXPrKVb89", + "currencyName": "West African CFA franc", + "currencySymbol": "Fr" + }, + { + "name": "Taiwan", + "officialName": "Republic of China (Taiwan)", + "capital": "Taipei", + "continent": "Asia", + "cca3": "TWN", + "areaInKm2": 36193, + "flagUrl": "https://flagcdn.com/w320/tw.png", + "mapsUrl": "https://goo.gl/maps/HgMKFQjNadF3Wa6B6", + "currencyName": "New Taiwan dollar", + "currencySymbol": "$" + }, + { + "name": "Cook Islands", + "officialName": "Cook Islands", + "capital": "Avarua", + "continent": "Oceania", + "cca3": "COK", + "areaInKm2": 236, + "flagUrl": "https://flagcdn.com/w320/ck.png", + "mapsUrl": "https://goo.gl/maps/nrGZrvWRGB4WHgDC9", + "currencyName": "Cook Islands dollar", + "currencySymbol": "$" + }, + { + "name": "Eswatini", + "officialName": "Kingdom of Eswatini", + "capital": "Mbabane", + "continent": "Africa", + "cca3": "SWZ", + "areaInKm2": 17364, + "flagUrl": "https://flagcdn.com/w320/sz.png", + "mapsUrl": "https://goo.gl/maps/cUY79eqQihFSE8hV6", + "currencyName": "Swazi lilangeni", + "currencySymbol": "L" + }, + { + "name": "Oman", + "officialName": "Sultanate of Oman", + "capital": "Muscat", + "continent": "Asia", + "cca3": "OMN", + "areaInKm2": 309500, + "flagUrl": "https://flagcdn.com/w320/om.png", + "mapsUrl": "https://goo.gl/maps/L2BoXoAwDDwWecnw5", + "currencyName": "Omani rial", + "currencySymbol": "ر.ع." + }, + { + "name": "Central African Republic", + "officialName": "Central African Republic", + "capital": "Bangui", + "continent": "Africa", + "cca3": "CAF", + "areaInKm2": 622984, + "flagUrl": "https://flagcdn.com/w320/cf.png", + "mapsUrl": "https://goo.gl/maps/51V8dsi2rGYC9n3c9", + "currencyName": "Central African CFA franc", + "currencySymbol": "Fr" + }, + { + "name": "Italy", + "officialName": "Italian Republic", + "capital": "Rome", + "continent": "Europe", + "cca3": "ITA", + "areaInKm2": 301336, + "flagUrl": "https://flagcdn.com/w320/it.png", + "mapsUrl": "https://goo.gl/maps/8M1K27TDj7StTRTq8", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Uruguay", + "officialName": "Oriental Republic of Uruguay", + "capital": "Montevideo", + "continent": "Americas", + "cca3": "URY", + "areaInKm2": 181034, + "flagUrl": "https://flagcdn.com/w320/uy.png", + "mapsUrl": "https://goo.gl/maps/tiQ9Baekb1jQtDSD9", + "currencyName": "Uruguayan peso", + "currencySymbol": "$" + }, + { + "name": "Bahamas", + "officialName": "Commonwealth of the Bahamas", + "capital": "Nassau", + "continent": "Americas", + "cca3": "BHS", + "areaInKm2": 13943, + "flagUrl": "https://flagcdn.com/w320/bs.png", + "mapsUrl": "https://goo.gl/maps/1YzRs1BZrG8p8pmVA", + "currencyName": "Bahamian dollar", + "currencySymbol": "$" + }, + { + "name": "Brazil", + "officialName": "Federative Republic of Brazil", + "capital": "Brasília", + "continent": "Americas", + "cca3": "BRA", + "areaInKm2": 8515767, + "flagUrl": "https://flagcdn.com/w320/br.png", + "mapsUrl": "https://goo.gl/maps/waCKk21HeeqFzkNC9", + "currencyName": "Brazilian real", + "currencySymbol": "R$" + }, + { + "name": "Myanmar", + "officialName": "Republic of the Union of Myanmar", + "capital": "Naypyidaw", + "continent": "Asia", + "cca3": "MMR", + "areaInKm2": 676578, + "flagUrl": "https://flagcdn.com/w320/mm.png", + "mapsUrl": "https://goo.gl/maps/4jrZyJkDERUfHyp26", + "currencyName": "Burmese kyat", + "currencySymbol": "Ks" + }, + { + "name": "Vatican City", + "officialName": "Vatican City State", + "capital": "Vatican City", + "continent": "Europe", + "cca3": "VAT", + "areaInKm2": 0.44, + "flagUrl": "https://flagcdn.com/w320/va.png", + "mapsUrl": "https://goo.gl/maps/DTKvw5Bd1QZaDZmE8", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Sweden", + "officialName": "Kingdom of Sweden", + "capital": "Stockholm", + "continent": "Europe", + "cca3": "SWE", + "areaInKm2": 450295, + "flagUrl": "https://flagcdn.com/w320/se.png", + "mapsUrl": "https://goo.gl/maps/iqygE491ADVgnBW39", + "currencyName": "Swedish krona", + "currencySymbol": "kr" + }, + { + "name": "Vietnam", + "officialName": "Socialist Republic of Vietnam", + "capital": "Hanoi", + "continent": "Asia", + "cca3": "VNM", + "areaInKm2": 331212, + "flagUrl": "https://flagcdn.com/w320/vn.png", + "mapsUrl": "https://goo.gl/maps/PCpVt9WzdJ9A9nEZ9", + "currencyName": "Vietnamese đồng", + "currencySymbol": "₫" + }, + { + "name": "Estonia", + "officialName": "Republic of Estonia", + "capital": "Tallinn", + "continent": "Europe", + "cca3": "EST", + "areaInKm2": 45227, + "flagUrl": "https://flagcdn.com/w320/ee.png", + "mapsUrl": "https://goo.gl/maps/6SsynwGUodL1sDvq8", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Guinea-Bissau", + "officialName": "Republic of Guinea-Bissau", + "capital": "Bissau", + "continent": "Africa", + "cca3": "GNB", + "areaInKm2": 36125, + "flagUrl": "https://flagcdn.com/w320/gw.png", + "mapsUrl": "https://goo.gl/maps/5Wyaz17miUc1zLc67", + "currencyName": "West African CFA franc", + "currencySymbol": "Fr" + }, + { + "name": "Aruba", + "officialName": "Aruba", + "capital": "Oranjestad", + "continent": "Americas", + "cca3": "ABW", + "areaInKm2": 180, + "flagUrl": "https://flagcdn.com/w320/aw.png", + "mapsUrl": "https://goo.gl/maps/8hopbQqifHAgyZyg8", + "currencyName": "Aruban florin", + "currencySymbol": "ƒ" + }, + { + "name": "Palestine", + "officialName": "State of Palestine", + "capital": "Ramallah", + "continent": "Asia", + "cca3": "PSE", + "areaInKm2": 6220, + "flagUrl": "https://flagcdn.com/w320/ps.png", + "mapsUrl": "https://goo.gl/maps/QvTbkRdmdWEoYAmt5", + "currencyName": "Egyptian pound", + "currencySymbol": "E£" + }, + { + "name": "Peru", + "officialName": "Republic of Peru", + "capital": "Lima", + "continent": "Americas", + "cca3": "PER", + "areaInKm2": 1285216, + "flagUrl": "https://flagcdn.com/w320/pe.png", + "mapsUrl": "https://goo.gl/maps/uDWEUaXNcZTng1fP6", + "currencyName": "Peruvian sol", + "currencySymbol": "S/ " + }, + { + "name": "Antigua and Barbuda", + "officialName": "Antigua and Barbuda", + "capital": "Saint John's", + "continent": "Americas", + "cca3": "ATG", + "areaInKm2": 442, + "flagUrl": "https://flagcdn.com/w320/ag.png", + "mapsUrl": "https://goo.gl/maps/fnye4wGJ1RzC9jpX9", + "currencyName": "Eastern Caribbean dollar", + "currencySymbol": "$" + }, + { + "name": "Heard Island and McDonald Islands", + "officialName": "Heard Island and McDonald Islands", + "capital": "", + "continent": "Antarctic", + "cca3": "HMD", + "areaInKm2": 412, + "flagUrl": "https://flagcdn.com/w320/hm.png", + "mapsUrl": "https://goo.gl/maps/k5FBAiVaVyozuYeA7", + "currencyName": "", + "currencySymbol": "" + }, + { + "name": "Burundi", + "officialName": "Republic of Burundi", + "capital": "Gitega", + "continent": "Africa", + "cca3": "BDI", + "areaInKm2": 27834, + "flagUrl": "https://flagcdn.com/w320/bi.png", + "mapsUrl": "https://goo.gl/maps/RXPWoRrB9tfrJpUG7", + "currencyName": "Burundian franc", + "currencySymbol": "Fr" + }, + { + "name": "Jordan", + "officialName": "Hashemite Kingdom of Jordan", + "capital": "Amman", + "continent": "Asia", + "cca3": "JOR", + "areaInKm2": 89342, + "flagUrl": "https://flagcdn.com/w320/jo.png", + "mapsUrl": "https://goo.gl/maps/ko1dzSDKg8Gsi9A98", + "currencyName": "Jordanian dinar", + "currencySymbol": "د.ا" + }, + { + "name": "Pitcairn Islands", + "officialName": "Pitcairn Group of Islands", + "capital": "Adamstown", + "continent": "Oceania", + "cca3": "PCN", + "areaInKm2": 47, + "flagUrl": "https://flagcdn.com/w320/pn.png", + "mapsUrl": "https://goo.gl/maps/XGJMnMAigXjXcxSa7", + "currencyName": "New Zealand dollar", + "currencySymbol": "$" + }, + { + "name": "Guatemala", + "officialName": "Republic of Guatemala", + "capital": "Guatemala City", + "continent": "Americas", + "cca3": "GTM", + "areaInKm2": 108889, + "flagUrl": "https://flagcdn.com/w320/gt.png", + "mapsUrl": "https://goo.gl/maps/JoRAbem4Hxb9FYbVA", + "currencyName": "Guatemalan quetzal", + "currencySymbol": "Q" + }, + { + "name": "French Polynesia", + "officialName": "French Polynesia", + "capital": "Papeetē", + "continent": "Oceania", + "cca3": "PYF", + "areaInKm2": 4167, + "flagUrl": "https://flagcdn.com/w320/pf.png", + "mapsUrl": "https://goo.gl/maps/xgg6BQTRyeQg4e1m6", + "currencyName": "CFP franc", + "currencySymbol": "₣" + }, + { + "name": "South Georgia", + "officialName": "South Georgia and the South Sandwich Islands", + "capital": "King Edward Point", + "continent": "Antarctic", + "cca3": "SGS", + "areaInKm2": 3903, + "flagUrl": "https://flagcdn.com/w320/gs.png", + "mapsUrl": "https://goo.gl/maps/mJzdaBwKBbm2B81q9", + "currencyName": "Saint Helena pound", + "currencySymbol": "£" + }, + { + "name": "Laos", + "officialName": "Lao People's Democratic Republic", + "capital": "Vientiane", + "continent": "Asia", + "cca3": "LAO", + "areaInKm2": 236800, + "flagUrl": "https://flagcdn.com/w320/la.png", + "mapsUrl": "https://goo.gl/maps/F3asVB7sRKgSnwbE7", + "currencyName": "Lao kip", + "currencySymbol": "₭" + }, + { + "name": "Sierra Leone", + "officialName": "Republic of Sierra Leone", + "capital": "Freetown", + "continent": "Africa", + "cca3": "SLE", + "areaInKm2": 71740, + "flagUrl": "https://flagcdn.com/w320/sl.png", + "mapsUrl": "https://goo.gl/maps/jhacar85oq9QaeKB7", + "currencyName": "Sierra Leonean leone", + "currencySymbol": "Le" + }, + { + "name": "India", + "officialName": "Republic of India", + "capital": "New Delhi", + "continent": "Asia", + "cca3": "IND", + "areaInKm2": 3287590, + "flagUrl": "https://flagcdn.com/w320/in.png", + "mapsUrl": "https://goo.gl/maps/WSk3fLwG4vtPQetp7", + "currencyName": "Indian rupee", + "currencySymbol": "₹" + }, + { + "name": "British Indian Ocean Territory", + "officialName": "British Indian Ocean Territory", + "capital": "Diego Garcia", + "continent": "Africa", + "cca3": "IOT", + "areaInKm2": 60, + "flagUrl": "https://flagcdn.com/w320/io.png", + "mapsUrl": "https://goo.gl/maps/bheNucgekVEYozoi6", + "currencyName": "United States dollar", + "currencySymbol": "$" + }, + { + "name": "Jamaica", + "officialName": "Jamaica", + "capital": "Kingston", + "continent": "Americas", + "cca3": "JAM", + "areaInKm2": 10991, + "flagUrl": "https://flagcdn.com/w320/jm.png", + "mapsUrl": "https://goo.gl/maps/Z8mQ6jxnRQKFwJy9A", + "currencyName": "Jamaican dollar", + "currencySymbol": "$" + }, + { + "name": "North Macedonia", + "officialName": "Republic of North Macedonia", + "capital": "Skopje", + "continent": "Europe", + "cca3": "MKD", + "areaInKm2": 25713, + "flagUrl": "https://flagcdn.com/w320/mk.png", + "mapsUrl": "https://goo.gl/maps/55Q8MEnF6ACdu3q79", + "currencyName": "denar", + "currencySymbol": "den" + }, + { + "name": "Canada", + "officialName": "Canada", + "capital": "Ottawa", + "continent": "Americas", + "cca3": "CAN", + "areaInKm2": 9984670, + "flagUrl": "https://flagcdn.com/w320/ca.png", + "mapsUrl": "https://goo.gl/maps/jmEVLugreeqiZXxbA", + "currencyName": "Canadian dollar", + "currencySymbol": "$" + }, + { + "name": "Guam", + "officialName": "Guam", + "capital": "Hagåtña", + "continent": "Oceania", + "cca3": "GUM", + "areaInKm2": 549, + "flagUrl": "https://flagcdn.com/w320/gu.png", + "mapsUrl": "https://goo.gl/maps/Xfnq2i279b18cH3C9", + "currencyName": "United States dollar", + "currencySymbol": "$" + }, + { + "name": "Norfolk Island", + "officialName": "Territory of Norfolk Island", + "capital": "Kingston", + "continent": "Oceania", + "cca3": "NFK", + "areaInKm2": 36, + "flagUrl": "https://flagcdn.com/w320/nf.png", + "mapsUrl": "https://goo.gl/maps/pbvtm6XYd1iZbjky5", + "currencyName": "Australian dollar", + "currencySymbol": "$" + }, + { + "name": "Saint Kitts and Nevis", + "officialName": "Federation of Saint Christopher and Nevis", + "capital": "Basseterre", + "continent": "Americas", + "cca3": "KNA", + "areaInKm2": 261, + "flagUrl": "https://flagcdn.com/w320/kn.png", + "mapsUrl": "https://goo.gl/maps/qiaVwcLVTXX3eoTNA", + "currencyName": "Eastern Caribbean dollar", + "currencySymbol": "$" + }, + { + "name": "Grenada", + "officialName": "Grenada", + "capital": "St. George's", + "continent": "Americas", + "cca3": "GRD", + "areaInKm2": 344, + "flagUrl": "https://flagcdn.com/w320/gd.png", + "mapsUrl": "https://goo.gl/maps/rqWyfUAt4xhvk1Zy9", + "currencyName": "Eastern Caribbean dollar", + "currencySymbol": "$" + }, + { + "name": "Liberia", + "officialName": "Republic of Liberia", + "capital": "Monrovia", + "continent": "Africa", + "cca3": "LBR", + "areaInKm2": 111369, + "flagUrl": "https://flagcdn.com/w320/lr.png", + "mapsUrl": "https://goo.gl/maps/4VsHsc2oeGeRL3wg6", + "currencyName": "Liberian dollar", + "currencySymbol": "$" + }, + { + "name": "United States", + "officialName": "United States of America", + "capital": "Washington, D.C.", + "continent": "Americas", + "cca3": "USA", + "areaInKm2": 9372610, + "flagUrl": "https://flagcdn.com/w320/us.png", + "mapsUrl": "https://goo.gl/maps/e8M246zY4BSjkjAv6", + "currencyName": "United States dollar", + "currencySymbol": "$" + }, + { + "name": "Bahrain", + "officialName": "Kingdom of Bahrain", + "capital": "Manama", + "continent": "Asia", + "cca3": "BHR", + "areaInKm2": 765, + "flagUrl": "https://flagcdn.com/w320/bh.png", + "mapsUrl": "https://goo.gl/maps/5Zue99Zc6vFBHxzJ7", + "currencyName": "Bahraini dinar", + "currencySymbol": ".د.ب" + }, + { + "name": "Germany", + "officialName": "Federal Republic of Germany", + "capital": "Berlin", + "continent": "Europe", + "cca3": "DEU", + "areaInKm2": 357114, + "flagUrl": "https://flagcdn.com/w320/de.png", + "mapsUrl": "https://goo.gl/maps/mD9FBMq1nvXUBrkv6", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Bermuda", + "officialName": "Bermuda", + "capital": "Hamilton", + "continent": "Americas", + "cca3": "BMU", + "areaInKm2": 54, + "flagUrl": "https://flagcdn.com/w320/bm.png", + "mapsUrl": "https://goo.gl/maps/NLsRGNjTzDghTtAJA", + "currencyName": "Bermudian dollar", + "currencySymbol": "$" + }, + { + "name": "Malaysia", + "officialName": "Malaysia", + "capital": "Kuala Lumpur", + "continent": "Asia", + "cca3": "MYS", + "areaInKm2": 330803, + "flagUrl": "https://flagcdn.com/w320/my.png", + "mapsUrl": "https://goo.gl/maps/qrY1PNeUXGyXDcPy6", + "currencyName": "Malaysian ringgit", + "currencySymbol": "RM" + }, + { + "name": "Kiribati", + "officialName": "Independent and Sovereign Republic of Kiribati", + "capital": "South Tarawa", + "continent": "Oceania", + "cca3": "KIR", + "areaInKm2": 811, + "flagUrl": "https://flagcdn.com/w320/ki.png", + "mapsUrl": "https://goo.gl/maps/NBfYvrndW4skAimw9", + "currencyName": "Australian dollar", + "currencySymbol": "$" + }, + { + "name": "Ukraine", + "officialName": "Ukraine", + "capital": "Kyiv", + "continent": "Europe", + "cca3": "UKR", + "areaInKm2": 603500, + "flagUrl": "https://flagcdn.com/w320/ua.png", + "mapsUrl": "https://goo.gl/maps/DvgJMiPJ7aozKFZv7", + "currencyName": "Ukrainian hryvnia", + "currencySymbol": "₴" + }, + { + "name": "Faroe Islands", + "officialName": "Faroe Islands", + "capital": "Tórshavn", + "continent": "Europe", + "cca3": "FRO", + "areaInKm2": 1393, + "flagUrl": "https://flagcdn.com/w320/fo.png", + "mapsUrl": "https://goo.gl/maps/6sTru4SmHdEVcNkM6", + "currencyName": "Danish krone", + "currencySymbol": "kr" + }, + { + "name": "Afghanistan", + "officialName": "Islamic Republic of Afghanistan", + "capital": "Kabul", + "continent": "Asia", + "cca3": "AFG", + "areaInKm2": 652230, + "flagUrl": "https://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Flag_of_the_Taliban.svg/320px-Flag_of_the_Taliban.svg.png", + "mapsUrl": "https://goo.gl/maps/BXBGw7yUUFknCfva9", + "currencyName": "Afghan afghani", + "currencySymbol": "؋" + }, + { + "name": "São Tomé and Príncipe", + "officialName": "Democratic Republic of São Tomé and Príncipe", + "capital": "São Tomé", + "continent": "Africa", + "cca3": "STP", + "areaInKm2": 964, + "flagUrl": "https://flagcdn.com/w320/st.png", + "mapsUrl": "https://goo.gl/maps/9EUppm13RtPX9oF46", + "currencyName": "São Tomé and Príncipe dobra", + "currencySymbol": "Db" + }, + { + "name": "Kuwait", + "officialName": "State of Kuwait", + "capital": "Kuwait City", + "continent": "Asia", + "cca3": "KWT", + "areaInKm2": 17818, + "flagUrl": "https://flagcdn.com/w320/kw.png", + "mapsUrl": "https://goo.gl/maps/aqr3aNQjS1BAvksJ7", + "currencyName": "Kuwaiti dinar", + "currencySymbol": "د.ك" + }, + { + "name": "Poland", + "officialName": "Republic of Poland", + "capital": "Warsaw", + "continent": "Europe", + "cca3": "POL", + "areaInKm2": 312679, + "flagUrl": "https://flagcdn.com/w320/pl.png", + "mapsUrl": "https://goo.gl/maps/gY9Xw4Sf4415P4949", + "currencyName": "Polish złoty", + "currencySymbol": "zł" + }, + { + "name": "Vanuatu", + "officialName": "Republic of Vanuatu", + "capital": "Port Vila", + "continent": "Oceania", + "cca3": "VUT", + "areaInKm2": 12189, + "flagUrl": "https://flagcdn.com/w320/vu.png", + "mapsUrl": "https://goo.gl/maps/hwAjehcT7VfvP5zJ8", + "currencyName": "Vanuatu vatu", + "currencySymbol": "Vt" + }, + { + "name": "Comoros", + "officialName": "Union of the Comoros", + "capital": "Moroni", + "continent": "Africa", + "cca3": "COM", + "areaInKm2": 1862, + "flagUrl": "https://flagcdn.com/w320/km.png", + "mapsUrl": "https://goo.gl/maps/eas4GP28C1GyStnu6", + "currencyName": "Comorian franc", + "currencySymbol": "Fr" + }, + { + "name": "American Samoa", + "officialName": "American Samoa", + "capital": "Pago Pago", + "continent": "Oceania", + "cca3": "ASM", + "areaInKm2": 199, + "flagUrl": "https://flagcdn.com/w320/as.png", + "mapsUrl": "https://goo.gl/maps/Re9ePMjwP1sFCBFA6", + "currencyName": "United States dollar", + "currencySymbol": "$" + }, + { + "name": "Niue", + "officialName": "Niue", + "capital": "Alofi", + "continent": "Oceania", + "cca3": "NIU", + "areaInKm2": 260, + "flagUrl": "https://flagcdn.com/w320/nu.png", + "mapsUrl": "https://goo.gl/maps/xFgdzs3E55Rk1y8P9", + "currencyName": "New Zealand dollar", + "currencySymbol": "$" + }, + { + "name": "China", + "officialName": "People's Republic of China", + "capital": "Beijing", + "continent": "Asia", + "cca3": "CHN", + "areaInKm2": 9706961, + "flagUrl": "https://flagcdn.com/w320/cn.png", + "mapsUrl": "https://goo.gl/maps/p9qC6vgiFRRXzvGi7", + "currencyName": "Chinese yuan", + "currencySymbol": "¥" + }, + { + "name": "Western Sahara", + "officialName": "Sahrawi Arab Democratic Republic", + "capital": "El Aaiún", + "continent": "Africa", + "cca3": "ESH", + "areaInKm2": 266000, + "flagUrl": "https://flagcdn.com/w320/eh.png", + "mapsUrl": "https://goo.gl/maps/7nU3mB69vP6zQp7A8", + "currencyName": "Algerian dinar", + "currencySymbol": "دج" + }, + { + "name": "Panama", + "officialName": "Republic of Panama", + "capital": "Panama City", + "continent": "Americas", + "cca3": "PAN", + "areaInKm2": 75417, + "flagUrl": "https://flagcdn.com/w320/pa.png", + "mapsUrl": "https://goo.gl/maps/sEN7sKqeawa5oPNLA", + "currencyName": "Panamanian balboa", + "currencySymbol": "B/." + }, + { + "name": "Solomon Islands", + "officialName": "Solomon Islands", + "capital": "Honiara", + "continent": "Oceania", + "cca3": "SLB", + "areaInKm2": 28896, + "flagUrl": "https://flagcdn.com/w320/sb.png", + "mapsUrl": "https://goo.gl/maps/JbPkx86Ywjv8C1n8A", + "currencyName": "Solomon Islands dollar", + "currencySymbol": "$" + }, + { + "name": "Costa Rica", + "officialName": "Republic of Costa Rica", + "capital": "San José", + "continent": "Americas", + "cca3": "CRI", + "areaInKm2": 51100, + "flagUrl": "https://flagcdn.com/w320/cr.png", + "mapsUrl": "https://goo.gl/maps/RFiwytjvNrpfKN7k6", + "currencyName": "Costa Rican colón", + "currencySymbol": "₡" + }, + { + "name": "Papua New Guinea", + "officialName": "Independent State of Papua New Guinea", + "capital": "Port Moresby", + "continent": "Oceania", + "cca3": "PNG", + "areaInKm2": 462840, + "flagUrl": "https://flagcdn.com/w320/pg.png", + "mapsUrl": "https://goo.gl/maps/ChGmzZBjZ3vnBwR2A", + "currencyName": "Papua New Guinean kina", + "currencySymbol": "K" + }, + { + "name": "Japan", + "officialName": "Japan", + "capital": "Tokyo", + "continent": "Asia", + "cca3": "JPN", + "areaInKm2": 377930, + "flagUrl": "https://flagcdn.com/w320/jp.png", + "mapsUrl": "https://goo.gl/maps/NGTLSCSrA8bMrvnX9", + "currencyName": "Japanese yen", + "currencySymbol": "¥" + }, + { + "name": "South Sudan", + "officialName": "Republic of South Sudan", + "capital": "Juba", + "continent": "Africa", + "cca3": "SSD", + "areaInKm2": 619745, + "flagUrl": "https://flagcdn.com/w320/ss.png", + "mapsUrl": "https://goo.gl/maps/Zm1AYCXb9HSNF1P27", + "currencyName": "South Sudanese pound", + "currencySymbol": "£" + }, + { + "name": "Marshall Islands", + "officialName": "Republic of the Marshall Islands", + "capital": "Majuro", + "continent": "Oceania", + "cca3": "MHL", + "areaInKm2": 181, + "flagUrl": "https://flagcdn.com/w320/mh.png", + "mapsUrl": "https://goo.gl/maps/A4xLi1XvcX88gi3W8", + "currencyName": "United States dollar", + "currencySymbol": "$" + }, + { + "name": "Monaco", + "officialName": "Principality of Monaco", + "capital": "Monaco", + "continent": "Europe", + "cca3": "MCO", + "areaInKm2": 2.02, + "flagUrl": "https://flagcdn.com/w320/mc.png", + "mapsUrl": "https://goo.gl/maps/DGpndDot28bYdXYn7", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Saint Helena, Ascension and Tristan da Cunha", + "officialName": "Saint Helena, Ascension and Tristan da Cunha", + "capital": "Jamestown", + "continent": "Africa", + "cca3": "SHN", + "areaInKm2": 394, + "flagUrl": "https://flagcdn.com/w320/sh.png", + "mapsUrl": "https://goo.gl/maps/iv4VxnPzHkjLCJuc6", + "currencyName": "Pound sterling", + "currencySymbol": "£" + }, + { + "name": "Sint Maarten", + "officialName": "Sint Maarten", + "capital": "Philipsburg", + "continent": "Americas", + "cca3": "SXM", + "areaInKm2": 34, + "flagUrl": "https://flagcdn.com/w320/sx.png", + "mapsUrl": "https://goo.gl/maps/DjvcESy1a1oGEZuNA", + "currencyName": "Netherlands Antillean guilder", + "currencySymbol": "ƒ" + }, + { + "name": "Venezuela", + "officialName": "Bolivarian Republic of Venezuela", + "capital": "Caracas", + "continent": "Americas", + "cca3": "VEN", + "areaInKm2": 916445, + "flagUrl": "https://flagcdn.com/w320/ve.png", + "mapsUrl": "https://goo.gl/maps/KLCwDN8sec7z2kse9", + "currencyName": "Venezuelan bolívar soberano", + "currencySymbol": "Bs.S." + }, + { + "name": "Micronesia", + "officialName": "Federated States of Micronesia", + "capital": "Palikir", + "continent": "Oceania", + "cca3": "FSM", + "areaInKm2": 702, + "flagUrl": "https://flagcdn.com/w320/fm.png", + "mapsUrl": "https://goo.gl/maps/LLcnofC5LxZsJXTo8", + "currencyName": "United States dollar", + "currencySymbol": "$" + }, + { + "name": "Montserrat", + "officialName": "Montserrat", + "capital": "Plymouth", + "continent": "Americas", + "cca3": "MSR", + "areaInKm2": 102, + "flagUrl": "https://flagcdn.com/w320/ms.png", + "mapsUrl": "https://goo.gl/maps/CSbe7UmxPmiwQB7GA", + "currencyName": "Eastern Caribbean dollar", + "currencySymbol": "$" + }, + { + "name": "Thailand", + "officialName": "Kingdom of Thailand", + "capital": "Bangkok", + "continent": "Asia", + "cca3": "THA", + "areaInKm2": 513120, + "flagUrl": "https://flagcdn.com/w320/th.png", + "mapsUrl": "https://goo.gl/maps/qeU6uqsfW4nCCwzw9", + "currencyName": "Thai baht", + "currencySymbol": "฿" + }, + { + "name": "Bouvet Island", + "officialName": "Bouvet Island", + "capital": "", + "continent": "Antarctic", + "cca3": "BVT", + "areaInKm2": 49, + "flagUrl": "https://flagcdn.com/w320/bv.png", + "mapsUrl": "https://goo.gl/maps/7WRQAEKZb4uK36yi9", + "currencyName": "", + "currencySymbol": "" + }, + { + "name": "Anguilla", + "officialName": "Anguilla", + "capital": "The Valley", + "continent": "Americas", + "cca3": "AIA", + "areaInKm2": 91, + "flagUrl": "https://flagcdn.com/w320/ai.png", + "mapsUrl": "https://goo.gl/maps/3KgLnEyN7amdno2p9", + "currencyName": "Eastern Caribbean dollar", + "currencySymbol": "$" + }, + { + "name": "Philippines", + "officialName": "Republic of the Philippines", + "capital": "Manila", + "continent": "Asia", + "cca3": "PHL", + "areaInKm2": 342353, + "flagUrl": "https://flagcdn.com/w320/ph.png", + "mapsUrl": "https://goo.gl/maps/k8T2fb5VMUfsWFX6A", + "currencyName": "Philippine peso", + "currencySymbol": "₱" + }, + { + "name": "New Zealand", + "officialName": "New Zealand", + "capital": "Wellington", + "continent": "Oceania", + "cca3": "NZL", + "areaInKm2": 270467, + "flagUrl": "https://flagcdn.com/w320/nz.png", + "mapsUrl": "https://goo.gl/maps/xXiDQo65dwdpw9iu8", + "currencyName": "New Zealand dollar", + "currencySymbol": "$" + }, + { + "name": "Saint Barthélemy", + "officialName": "Collectivity of Saint Barthélemy", + "capital": "Gustavia", + "continent": "Americas", + "cca3": "BLM", + "areaInKm2": 21, + "flagUrl": "https://flagcdn.com/w320/bl.png", + "mapsUrl": "https://goo.gl/maps/Mc7GqH466S7AAk297", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Brunei", + "officialName": "Nation of Brunei, Abode of Peace", + "capital": "Bandar Seri Begawan", + "continent": "Asia", + "cca3": "BRN", + "areaInKm2": 5765, + "flagUrl": "https://flagcdn.com/w320/bn.png", + "mapsUrl": "https://goo.gl/maps/4jb4CqBXhr8vNh579", + "currencyName": "Brunei dollar", + "currencySymbol": "$" + }, + { + "name": "Slovakia", + "officialName": "Slovak Republic", + "capital": "Bratislava", + "continent": "Europe", + "cca3": "SVK", + "areaInKm2": 49037, + "flagUrl": "https://flagcdn.com/w320/sk.png", + "mapsUrl": "https://goo.gl/maps/uNSH2wW4bLoZVYJj7", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Republic of the Congo", + "officialName": "Republic of the Congo", + "capital": "Brazzaville", + "continent": "Africa", + "cca3": "COG", + "areaInKm2": 342000, + "flagUrl": "https://flagcdn.com/w320/cg.png", + "mapsUrl": "https://goo.gl/maps/Phf5dDDKdfCtuBTb6", + "currencyName": "Central African CFA franc", + "currencySymbol": "Fr" + }, + { + "name": "Wallis and Futuna", + "officialName": "Territory of the Wallis and Futuna Islands", + "capital": "Mata-Utu", + "continent": "Oceania", + "cca3": "WLF", + "areaInKm2": 142, + "flagUrl": "https://flagcdn.com/w320/wf.png", + "mapsUrl": "https://goo.gl/maps/CzVqK74QYtbHv65r5", + "currencyName": "CFP franc", + "currencySymbol": "₣" + }, + { + "name": "New Caledonia", + "officialName": "New Caledonia", + "capital": "Nouméa", + "continent": "Oceania", + "cca3": "NCL", + "areaInKm2": 18575, + "flagUrl": "https://flagcdn.com/w320/nc.png", + "mapsUrl": "https://goo.gl/maps/cBhtCeMdob4U7FRU9", + "currencyName": "CFP franc", + "currencySymbol": "₣" + }, + { + "name": "Montenegro", + "officialName": "Montenegro", + "capital": "Podgorica", + "continent": "Europe", + "cca3": "MNE", + "areaInKm2": 13812, + "flagUrl": "https://flagcdn.com/w320/me.png", + "mapsUrl": "https://goo.gl/maps/4THX1fM7WqANuPbB8", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "French Southern and Antarctic Lands", + "officialName": "Territory of the French Southern and Antarctic Lands", + "capital": "Port-aux-Français", + "continent": "Antarctic", + "cca3": "ATF", + "areaInKm2": 7747, + "flagUrl": "https://flagcdn.com/w320/tf.png", + "mapsUrl": "https://goo.gl/maps/6ua6CX1m4w1xF2Em7", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Finland", + "officialName": "Republic of Finland", + "capital": "Helsinki", + "continent": "Europe", + "cca3": "FIN", + "areaInKm2": 338424, + "flagUrl": "https://flagcdn.com/w320/fi.png", + "mapsUrl": "https://goo.gl/maps/HjgWDCNKRAYHrkMn8", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Liechtenstein", + "officialName": "Principality of Liechtenstein", + "capital": "Vaduz", + "continent": "Europe", + "cca3": "LIE", + "areaInKm2": 160, + "flagUrl": "https://flagcdn.com/w320/li.png", + "mapsUrl": "https://goo.gl/maps/KNuHeiJzAPodwM7y6", + "currencyName": "Swiss franc", + "currencySymbol": "Fr" + }, + { + "name": "Colombia", + "officialName": "Republic of Colombia", + "capital": "Bogotá", + "continent": "Americas", + "cca3": "COL", + "areaInKm2": 1141748, + "flagUrl": "https://flagcdn.com/w320/co.png", + "mapsUrl": "https://goo.gl/maps/RdwTG8e7gPwS62oR6", + "currencyName": "Colombian peso", + "currencySymbol": "$" + }, + { + "name": "Andorra", + "officialName": "Principality of Andorra", + "capital": "Andorra la Vella", + "continent": "Europe", + "cca3": "AND", + "areaInKm2": 468, + "flagUrl": "https://flagcdn.com/w320/ad.png", + "mapsUrl": "https://goo.gl/maps/JqAnacWE2qEznKgw7", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Belize", + "officialName": "Belize", + "capital": "Belmopan", + "continent": "Americas", + "cca3": "BLZ", + "areaInKm2": 22966, + "flagUrl": "https://flagcdn.com/w320/bz.png", + "mapsUrl": "https://goo.gl/maps/jdCccpdLodm1uTmo9", + "currencyName": "Belize dollar", + "currencySymbol": "$" + }, + { + "name": "Bolivia", + "officialName": "Plurinational State of Bolivia", + "capital": "Sucre", + "continent": "Americas", + "cca3": "BOL", + "areaInKm2": 1098581, + "flagUrl": "https://flagcdn.com/w320/bo.png", + "mapsUrl": "https://goo.gl/maps/9DfnyfbxNM2g5U9b9", + "currencyName": "Bolivian boliviano", + "currencySymbol": "Bs." + }, + { + "name": "Niger", + "officialName": "Republic of Niger", + "capital": "Niamey", + "continent": "Africa", + "cca3": "NER", + "areaInKm2": 1267000, + "flagUrl": "https://flagcdn.com/w320/ne.png", + "mapsUrl": "https://goo.gl/maps/VKNU2TLsZcgxM49c8", + "currencyName": "West African CFA franc", + "currencySymbol": "Fr" + }, + { + "name": "Russia", + "officialName": "Russian Federation", + "capital": "Moscow", + "continent": "Europe", + "cca3": "RUS", + "areaInKm2": 17098242, + "flagUrl": "https://flagcdn.com/w320/ru.png", + "mapsUrl": "https://goo.gl/maps/4F4PpDhGJgVvLby57", + "currencyName": "Russian ruble", + "currencySymbol": "₽" + }, + { + "name": "Caribbean Netherlands", + "officialName": "Bonaire, Sint Eustatius and Saba", + "capital": "Kralendijk", + "continent": "Americas", + "cca3": "BES", + "areaInKm2": 328, + "flagUrl": "https://flagcdn.com/w320/bq.png", + "mapsUrl": "https://goo.gl/maps/4XVes1P6uEDTz77WA", + "currencyName": "United States dollar", + "currencySymbol": "$" + }, + { + "name": "Tanzania", + "officialName": "United Republic of Tanzania", + "capital": "Dodoma", + "continent": "Africa", + "cca3": "TZA", + "areaInKm2": 945087, + "flagUrl": "https://flagcdn.com/w320/tz.png", + "mapsUrl": "https://goo.gl/maps/NWYMqZYXte4zGZ2Q8", + "currencyName": "Tanzanian shilling", + "currencySymbol": "Sh" + }, + { + "name": "Zimbabwe", + "officialName": "Republic of Zimbabwe", + "capital": "Harare", + "continent": "Africa", + "cca3": "ZWE", + "areaInKm2": 390757, + "flagUrl": "https://flagcdn.com/w320/zw.png", + "mapsUrl": "https://goo.gl/maps/M26BqdwQctqxXS65A", + "currencyName": "Zimbabwean dollar", + "currencySymbol": "$" + }, + { + "name": "Antarctica", + "officialName": "Antarctica", + "capital": "", + "continent": "Antarctic", + "cca3": "ATA", + "areaInKm2": 14000000, + "flagUrl": "https://flagcdn.com/w320/aq.png", + "mapsUrl": "https://goo.gl/maps/kyBuJriu4itiXank7", + "currencyName": "", + "currencySymbol": "" + }, + { + "name": "Azerbaijan", + "officialName": "Republic of Azerbaijan", + "capital": "Baku", + "continent": "Asia", + "cca3": "AZE", + "areaInKm2": 86600, + "flagUrl": "https://flagcdn.com/w320/az.png", + "mapsUrl": "https://goo.gl/maps/az3Zz7ar2aoB9AUc6", + "currencyName": "Azerbaijani manat", + "currencySymbol": "₼" + }, + { + "name": "Mauritius", + "officialName": "Republic of Mauritius", + "capital": "Port Louis", + "continent": "Africa", + "cca3": "MUS", + "areaInKm2": 2040, + "flagUrl": "https://flagcdn.com/w320/mu.png", + "mapsUrl": "https://goo.gl/maps/PpKtZ4W3tir5iGrz7", + "currencyName": "Mauritian rupee", + "currencySymbol": "₨" + }, + { + "name": "Armenia", + "officialName": "Republic of Armenia", + "capital": "Yerevan", + "continent": "Asia", + "cca3": "ARM", + "areaInKm2": 29743, + "flagUrl": "https://flagcdn.com/w320/am.png", + "mapsUrl": "https://goo.gl/maps/azWUtK9bUQYEyccbA", + "currencyName": "Armenian dram", + "currencySymbol": "֏" + }, + { + "name": "Czechia", + "officialName": "Czech Republic", + "capital": "Prague", + "continent": "Europe", + "cca3": "CZE", + "areaInKm2": 78865, + "flagUrl": "https://flagcdn.com/w320/cz.png", + "mapsUrl": "https://goo.gl/maps/47dmgeXMZyhDHyQW8", + "currencyName": "Czech koruna", + "currencySymbol": "Kč" + }, + { + "name": "Haiti", + "officialName": "Republic of Haiti", + "capital": "Port-au-Prince", + "continent": "Americas", + "cca3": "HTI", + "areaInKm2": 27750, + "flagUrl": "https://flagcdn.com/w320/ht.png", + "mapsUrl": "https://goo.gl/maps/9o13xtjuUdqFnHbn9", + "currencyName": "Haitian gourde", + "currencySymbol": "G" + }, + { + "name": "Sri Lanka", + "officialName": "Democratic Socialist Republic of Sri Lanka", + "capital": "Sri Jayawardenepura Kotte", + "continent": "Asia", + "cca3": "LKA", + "areaInKm2": 65610, + "flagUrl": "https://flagcdn.com/w320/lk.png", + "mapsUrl": "https://goo.gl/maps/VkPHoeFSfgzRQCDv8", + "currencyName": "Sri Lankan rupee", + "currencySymbol": "Rs රු" + }, + { + "name": "Albania", + "officialName": "Republic of Albania", + "capital": "Tirana", + "continent": "Europe", + "cca3": "ALB", + "areaInKm2": 28748, + "flagUrl": "https://flagcdn.com/w320/al.png", + "mapsUrl": "https://goo.gl/maps/BzN9cTuj68ZA8SyZ8", + "currencyName": "Albanian lek", + "currencySymbol": "L" + }, + { + "name": "Morocco", + "officialName": "Kingdom of Morocco", + "capital": "Rabat", + "continent": "Africa", + "cca3": "MAR", + "areaInKm2": 446550, + "flagUrl": "https://flagcdn.com/w320/ma.png", + "mapsUrl": "https://goo.gl/maps/6oMv3dyBZg3iaXQ5A", + "currencyName": "Moroccan dirham", + "currencySymbol": "د.م." + }, + { + "name": "United States Virgin Islands", + "officialName": "Virgin Islands of the United States", + "capital": "Charlotte Amalie", + "continent": "Americas", + "cca3": "VIR", + "areaInKm2": 347, + "flagUrl": "https://flagcdn.com/w320/vi.png", + "mapsUrl": "https://goo.gl/maps/mBfreywj8dor6q4m9", + "currencyName": "United States dollar", + "currencySymbol": "$" + }, + { + "name": "Syria", + "officialName": "Syrian Arab Republic", + "capital": "Damascus", + "continent": "Asia", + "cca3": "SYR", + "areaInKm2": 185180, + "flagUrl": "https://flagcdn.com/w320/sy.png", + "mapsUrl": "https://goo.gl/maps/Xe3VnFbwdb4nv2SM9", + "currencyName": "Syrian pound", + "currencySymbol": "£" + }, + { + "name": "Bhutan", + "officialName": "Kingdom of Bhutan", + "capital": "Thimphu", + "continent": "Asia", + "cca3": "BTN", + "areaInKm2": 38394, + "flagUrl": "https://flagcdn.com/w320/bt.png", + "mapsUrl": "https://goo.gl/maps/VEfXXBftTFLUpNgp8", + "currencyName": "Bhutanese ngultrum", + "currencySymbol": "Nu." + }, + { + "name": "Jersey", + "officialName": "Bailiwick of Jersey", + "capital": "Saint Helier", + "continent": "Europe", + "cca3": "JEY", + "areaInKm2": 116, + "flagUrl": "https://flagcdn.com/w320/je.png", + "mapsUrl": "https://goo.gl/maps/rXG8GZZtsqK92kTCA", + "currencyName": "British pound", + "currencySymbol": "£" + }, + { + "name": "Senegal", + "officialName": "Republic of Senegal", + "capital": "Dakar", + "continent": "Africa", + "cca3": "SEN", + "areaInKm2": 196722, + "flagUrl": "https://flagcdn.com/w320/sn.png", + "mapsUrl": "https://goo.gl/maps/o5f1uD5nyihCL3HCA", + "currencyName": "West African CFA franc", + "currencySymbol": "Fr" + }, + { + "name": "Réunion", + "officialName": "Réunion Island", + "capital": "Saint-Denis", + "continent": "Africa", + "cca3": "REU", + "areaInKm2": 2511, + "flagUrl": "https://flagcdn.com/w320/re.png", + "mapsUrl": "https://goo.gl/maps/wWpBrXsp8UHVbah29", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Tunisia", + "officialName": "Tunisian Republic", + "capital": "Tunis", + "continent": "Africa", + "cca3": "TUN", + "areaInKm2": 163610, + "flagUrl": "https://flagcdn.com/w320/tn.png", + "mapsUrl": "https://goo.gl/maps/KgUmpZdUuNRaougs8", + "currencyName": "Tunisian dinar", + "currencySymbol": "د.ت" + }, + { + "name": "Switzerland", + "officialName": "Swiss Confederation", + "capital": "Bern", + "continent": "Europe", + "cca3": "CHE", + "areaInKm2": 41284, + "flagUrl": "https://flagcdn.com/w320/ch.png", + "mapsUrl": "https://goo.gl/maps/uVuZcXaxSx5jLyEC9", + "currencyName": "Swiss franc", + "currencySymbol": "Fr." + }, + { + "name": "Saint Pierre and Miquelon", + "officialName": "Saint Pierre and Miquelon", + "capital": "Saint-Pierre", + "continent": "Americas", + "cca3": "SPM", + "areaInKm2": 242, + "flagUrl": "https://flagcdn.com/w320/pm.png", + "mapsUrl": "https://goo.gl/maps/bUM8Yc8pA8ghyhmt6", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Luxembourg", + "officialName": "Grand Duchy of Luxembourg", + "capital": "Luxembourg", + "continent": "Europe", + "cca3": "LUX", + "areaInKm2": 2586, + "flagUrl": "https://flagcdn.com/w320/lu.png", + "mapsUrl": "https://goo.gl/maps/L6b2AgndgHprt2Ko9", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Samoa", + "officialName": "Independent State of Samoa", + "capital": "Apia", + "continent": "Oceania", + "cca3": "WSM", + "areaInKm2": 2842, + "flagUrl": "https://flagcdn.com/w320/ws.png", + "mapsUrl": "https://goo.gl/maps/CFC9fEFP9cfkYUBF9", + "currencyName": "Samoan tālā", + "currencySymbol": "T" + }, + { + "name": "Austria", + "officialName": "Republic of Austria", + "capital": "Vienna", + "continent": "Europe", + "cca3": "AUT", + "areaInKm2": 83871, + "flagUrl": "https://flagcdn.com/w320/at.png", + "mapsUrl": "https://goo.gl/maps/pCWpWQhznHyRzQcu9", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Turkey", + "officialName": "Republic of Turkey", + "capital": "Ankara", + "continent": "Asia", + "cca3": "TUR", + "areaInKm2": 783562, + "flagUrl": "https://flagcdn.com/w320/tr.png", + "mapsUrl": "https://goo.gl/maps/dXFFraiUDfcB6Quk6", + "currencyName": "Turkish lira", + "currencySymbol": "₺" + }, + { + "name": "Latvia", + "officialName": "Republic of Latvia", + "capital": "Riga", + "continent": "Europe", + "cca3": "LVA", + "areaInKm2": 64559, + "flagUrl": "https://flagcdn.com/w320/lv.png", + "mapsUrl": "https://goo.gl/maps/iQpUkH7ghq31ZtXe9", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "United Arab Emirates", + "officialName": "United Arab Emirates", + "capital": "Abu Dhabi", + "continent": "Asia", + "cca3": "ARE", + "areaInKm2": 83600, + "flagUrl": "https://flagcdn.com/w320/ae.png", + "mapsUrl": "https://goo.gl/maps/AZZTDA6GzVAnKMVd8", + "currencyName": "United Arab Emirates dirham", + "currencySymbol": "د.إ" + }, + { + "name": "Bosnia and Herzegovina", + "officialName": "Bosnia and Herzegovina", + "capital": "Sarajevo", + "continent": "Europe", + "cca3": "BIH", + "areaInKm2": 51209, + "flagUrl": "https://flagcdn.com/w320/ba.png", + "mapsUrl": "https://www.google.com/maps/place/Bosnia+and+Herzegovina", + "currencyName": "Bosnia and Herzegovina convertible mark" + }, + { + "name": "Botswana", + "officialName": "Republic of Botswana", + "capital": "Gaborone", + "continent": "Africa", + "cca3": "BWA", + "areaInKm2": 582000, + "flagUrl": "https://flagcdn.com/w320/bw.png", + "mapsUrl": "https://goo.gl/maps/E364KeLy6N4JwxwQ8", + "currencyName": "Botswana pula", + "currencySymbol": "P" + }, + { + "name": "Guernsey", + "officialName": "Bailiwick of Guernsey", + "capital": "St. Peter Port", + "continent": "Europe", + "cca3": "GGY", + "areaInKm2": 78, + "flagUrl": "https://flagcdn.com/w320/gg.png", + "mapsUrl": "https://goo.gl/maps/6kXnQU5QvEZMD9VB7", + "currencyName": "British pound", + "currencySymbol": "£" + }, + { + "name": "Seychelles", + "officialName": "Republic of Seychelles", + "capital": "Victoria", + "continent": "Africa", + "cca3": "SYC", + "areaInKm2": 452, + "flagUrl": "https://flagcdn.com/w320/sc.png", + "mapsUrl": "https://goo.gl/maps/aqCcy2TKh5TV5MAX8", + "currencyName": "Seychellois rupee", + "currencySymbol": "₨" + }, + { + "name": "Angola", + "officialName": "Republic of Angola", + "capital": "Luanda", + "continent": "Africa", + "cca3": "AGO", + "areaInKm2": 1246700, + "flagUrl": "https://flagcdn.com/w320/ao.png", + "mapsUrl": "https://goo.gl/maps/q42Qbf1BmQL3fuZg9", + "currencyName": "Angolan kwanza", + "currencySymbol": "Kz" + }, + { + "name": "Australia", + "officialName": "Commonwealth of Australia", + "capital": "Canberra", + "continent": "Oceania", + "cca3": "AUS", + "areaInKm2": 7692024, + "flagUrl": "https://flagcdn.com/w320/au.png", + "mapsUrl": "https://goo.gl/maps/DcjaDa7UbhnZTndH6", + "currencyName": "Australian dollar", + "currencySymbol": "$" + }, + { + "name": "Qatar", + "officialName": "State of Qatar", + "capital": "Doha", + "continent": "Asia", + "cca3": "QAT", + "areaInKm2": 11586, + "flagUrl": "https://flagcdn.com/w320/qa.png", + "mapsUrl": "https://goo.gl/maps/ZV76Y49z7LLUZ2KQ6", + "currencyName": "Qatari riyal", + "currencySymbol": "ر.ق" + }, + { + "name": "Slovenia", + "officialName": "Republic of Slovenia", + "capital": "Ljubljana", + "continent": "Europe", + "cca3": "SVN", + "areaInKm2": 20273, + "flagUrl": "https://flagcdn.com/w320/si.png", + "mapsUrl": "https://goo.gl/maps/7zgFmswcCJh5L5D49", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Namibia", + "officialName": "Republic of Namibia", + "capital": "Windhoek", + "continent": "Africa", + "cca3": "NAM", + "areaInKm2": 825615, + "flagUrl": "https://flagcdn.com/w320/na.png", + "mapsUrl": "https://goo.gl/maps/oR1i8BFEYX3EY83WA", + "currencyName": "Namibian dollar", + "currencySymbol": "$" + }, + { + "name": "Saint Martin", + "officialName": "Saint Martin", + "capital": "Marigot", + "continent": "Americas", + "cca3": "MAF", + "areaInKm2": 53, + "flagUrl": "https://flagcdn.com/w320/mf.png", + "mapsUrl": "https://goo.gl/maps/P9ho9QuJ9EAR28JEA", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Equatorial Guinea", + "officialName": "Republic of Equatorial Guinea", + "capital": "Malabo", + "continent": "Africa", + "cca3": "GNQ", + "areaInKm2": 28051, + "flagUrl": "https://flagcdn.com/w320/gq.png", + "mapsUrl": "https://goo.gl/maps/ucWfFd8aW1FbGMva9", + "currencyName": "Central African CFA franc", + "currencySymbol": "Fr" + }, + { + "name": "Christmas Island", + "officialName": "Territory of Christmas Island", + "capital": "Flying Fish Cove", + "continent": "Oceania", + "cca3": "CXR", + "areaInKm2": 135, + "flagUrl": "https://flagcdn.com/w320/cx.png", + "mapsUrl": "https://goo.gl/maps/ZC17hHsQZpShN5wk9", + "currencyName": "Australian dollar", + "currencySymbol": "$" + }, + { + "name": "Cambodia", + "officialName": "Kingdom of Cambodia", + "capital": "Phnom Penh", + "continent": "Asia", + "cca3": "KHM", + "areaInKm2": 181035, + "flagUrl": "https://flagcdn.com/w320/kh.png", + "mapsUrl": "https://goo.gl/maps/nztQtFSrUXZymJaW8", + "currencyName": "Cambodian riel", + "currencySymbol": "៛" + }, + { + "name": "Guinea", + "officialName": "Republic of Guinea", + "capital": "Conakry", + "continent": "Africa", + "cca3": "GIN", + "areaInKm2": 245857, + "flagUrl": "https://flagcdn.com/w320/gn.png", + "mapsUrl": "https://goo.gl/maps/8J5oM5sA4Ayr1ZYGA", + "currencyName": "Guinean franc", + "currencySymbol": "Fr" + }, + { + "name": "Dominica", + "officialName": "Commonwealth of Dominica", + "capital": "Roseau", + "continent": "Americas", + "cca3": "DMA", + "areaInKm2": 751, + "flagUrl": "https://flagcdn.com/w320/dm.png", + "mapsUrl": "https://goo.gl/maps/HSKdHYpFC8oHHuyV7", + "currencyName": "Eastern Caribbean dollar", + "currencySymbol": "$" + }, + { + "name": "Cyprus", + "officialName": "Republic of Cyprus", + "capital": "Nicosia", + "continent": "Europe", + "cca3": "CYP", + "areaInKm2": 9251, + "flagUrl": "https://flagcdn.com/w320/cy.png", + "mapsUrl": "https://goo.gl/maps/77hPBRdLid8yD5Bm7", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Israel", + "officialName": "State of Israel", + "capital": "Jerusalem", + "continent": "Asia", + "cca3": "ISR", + "areaInKm2": 20770, + "flagUrl": "https://flagcdn.com/w320/il.png", + "mapsUrl": "https://goo.gl/maps/6UY1AH8XeafVwdC97", + "currencyName": "Israeli new shekel", + "currencySymbol": "₪" + }, + { + "name": "Ivory Coast", + "officialName": "Republic of Côte d'Ivoire", + "capital": "Yamoussoukro", + "continent": "Africa", + "cca3": "CIV", + "areaInKm2": 322463, + "flagUrl": "https://flagcdn.com/w320/ci.png", + "mapsUrl": "https://goo.gl/maps/wKsmN7f5qAeNtGjP6", + "currencyName": "West African CFA franc", + "currencySymbol": "Fr" + }, + { + "name": "Uzbekistan", + "officialName": "Republic of Uzbekistan", + "capital": "Tashkent", + "continent": "Asia", + "cca3": "UZB", + "areaInKm2": 447400, + "flagUrl": "https://flagcdn.com/w320/uz.png", + "mapsUrl": "https://goo.gl/maps/AJpo6MjMx23qSWCz8", + "currencyName": "Uzbekistani soʻm", + "currencySymbol": "so'm" + }, + { + "name": "Zambia", + "officialName": "Republic of Zambia", + "capital": "Lusaka", + "continent": "Africa", + "cca3": "ZMB", + "areaInKm2": 752612, + "flagUrl": "https://flagcdn.com/w320/zm.png", + "mapsUrl": "https://goo.gl/maps/mweBcqvW8TppZW6q9", + "currencyName": "Zambian kwacha", + "currencySymbol": "ZK" + }, + { + "name": "Somalia", + "officialName": "Federal Republic of Somalia", + "capital": "Mogadishu", + "continent": "Africa", + "cca3": "SOM", + "areaInKm2": 637657, + "flagUrl": "https://flagcdn.com/w320/so.png", + "mapsUrl": "https://goo.gl/maps/8of8q7D1a8p7R6Fc9", + "currencyName": "Somali shilling", + "currencySymbol": "Sh" + }, + { + "name": "Bulgaria", + "officialName": "Republic of Bulgaria", + "capital": "Sofia", + "continent": "Europe", + "cca3": "BGR", + "areaInKm2": 110879, + "flagUrl": "https://flagcdn.com/w320/bg.png", + "mapsUrl": "https://goo.gl/maps/F5uAhDGWzc3BrHfm9", + "currencyName": "Bulgarian lev", + "currencySymbol": "лв" + }, + { + "name": "Rwanda", + "officialName": "Republic of Rwanda", + "capital": "Kigali", + "continent": "Africa", + "cca3": "RWA", + "areaInKm2": 26338, + "flagUrl": "https://flagcdn.com/w320/rw.png", + "mapsUrl": "https://goo.gl/maps/j5xb5r7CLqjYbyP86", + "currencyName": "Rwandan franc", + "currencySymbol": "Fr" + }, + { + "name": "Belgium", + "officialName": "Kingdom of Belgium", + "capital": "Brussels", + "continent": "Europe", + "cca3": "BEL", + "areaInKm2": 30528, + "flagUrl": "https://flagcdn.com/w320/be.png", + "mapsUrl": "https://goo.gl/maps/UQQzat85TCtPRXAL8", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Guyana", + "officialName": "Co-operative Republic of Guyana", + "capital": "Georgetown", + "continent": "Americas", + "cca3": "GUY", + "areaInKm2": 214969, + "flagUrl": "https://flagcdn.com/w320/gy.png", + "mapsUrl": "https://goo.gl/maps/DFsme2xEeugUAsCx5", + "currencyName": "Guyanese dollar", + "currencySymbol": "$" + }, + { + "name": "Kosovo", + "officialName": "Republic of Kosovo", + "capital": "Pristina", + "continent": "Europe", + "cca3": "UNK", + "areaInKm2": 10908, + "flagUrl": "https://flagcdn.com/w320/xk.png", + "mapsUrl": "https://goo.gl/maps/CSC4Yc8SWPgburuD9", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Mexico", + "officialName": "United Mexican States", + "capital": "Mexico City", + "continent": "Americas", + "cca3": "MEX", + "areaInKm2": 1964375, + "flagUrl": "https://flagcdn.com/w320/mx.png", + "mapsUrl": "https://goo.gl/maps/s5g7imNPMDEePxzbA", + "currencyName": "Mexican peso", + "currencySymbol": "$" + }, + { + "name": "Denmark", + "officialName": "Kingdom of Denmark", + "capital": "Copenhagen", + "continent": "Europe", + "cca3": "DNK", + "areaInKm2": 43094, + "flagUrl": "https://flagcdn.com/w320/dk.png", + "mapsUrl": "https://goo.gl/maps/UddGPN7hAyrtpFiT6", + "currencyName": "Danish krone", + "currencySymbol": "kr" + }, + { + "name": "DR Congo", + "officialName": "Democratic Republic of the Congo", + "capital": "Kinshasa", + "continent": "Africa", + "cca3": "COD", + "areaInKm2": 2344858, + "flagUrl": "https://flagcdn.com/w320/cd.png", + "mapsUrl": "https://goo.gl/maps/KfhNVn6VqdZXWu8n9", + "currencyName": "Congolese franc", + "currencySymbol": "FC" + }, + { + "name": "Curaçao", + "officialName": "Country of Curaçao", + "capital": "Willemstad", + "continent": "Americas", + "cca3": "CUW", + "areaInKm2": 444, + "flagUrl": "https://flagcdn.com/w320/cw.png", + "mapsUrl": "https://goo.gl/maps/9D3hTeA3qKaRT7S16", + "currencyName": "Netherlands Antillean guilder", + "currencySymbol": "ƒ" + }, + { + "name": "Ethiopia", + "officialName": "Federal Democratic Republic of Ethiopia", + "capital": "Addis Ababa", + "continent": "Africa", + "cca3": "ETH", + "areaInKm2": 1104300, + "flagUrl": "https://flagcdn.com/w320/et.png", + "mapsUrl": "https://goo.gl/maps/2Q4hQWCbhuZLj3fG6", + "currencyName": "Ethiopian birr", + "currencySymbol": "Br" + }, + { + "name": "Macau", + "officialName": "Macao Special Administrative Region of the People's Republic of China", + "capital": "", + "continent": "Asia", + "cca3": "MAC", + "areaInKm2": 30, + "flagUrl": "https://flagcdn.com/w320/mo.png", + "mapsUrl": "https://goo.gl/maps/whymRdk3dZFfAAs4A", + "currencyName": "Macanese pataca", + "currencySymbol": "P" + }, + { + "name": "Pakistan", + "officialName": "Islamic Republic of Pakistan", + "capital": "Islamabad", + "continent": "Asia", + "cca3": "PAK", + "areaInKm2": 881912, + "flagUrl": "https://flagcdn.com/w320/pk.png", + "mapsUrl": "https://goo.gl/maps/5LYujdfR5yLUXoERA", + "currencyName": "Pakistani rupee", + "currencySymbol": "₨" + }, + { + "name": "Indonesia", + "officialName": "Republic of Indonesia", + "capital": "Jakarta", + "continent": "Asia", + "cca3": "IDN", + "areaInKm2": 1904569, + "flagUrl": "https://flagcdn.com/w320/id.png", + "mapsUrl": "https://goo.gl/maps/9gfPupm5bffixiFJ6", + "currencyName": "Indonesian rupiah", + "currencySymbol": "Rp" + }, + { + "name": "Nauru", + "officialName": "Republic of Nauru", + "capital": "Yaren", + "continent": "Oceania", + "cca3": "NRU", + "areaInKm2": 21, + "flagUrl": "https://flagcdn.com/w320/nr.png", + "mapsUrl": "https://goo.gl/maps/kyAGw6XEJgjSMsTK7", + "currencyName": "Australian dollar", + "currencySymbol": "$" + }, + { + "name": "Northern Mariana Islands", + "officialName": "Commonwealth of the Northern Mariana Islands", + "capital": "Saipan", + "continent": "Oceania", + "cca3": "MNP", + "areaInKm2": 464, + "flagUrl": "https://flagcdn.com/w320/mp.png", + "mapsUrl": "https://goo.gl/maps/cpZ67knoRAcfu1417", + "currencyName": "United States dollar", + "currencySymbol": "$" + }, + { + "name": "United Kingdom", + "officialName": "United Kingdom of Great Britain and Northern Ireland", + "capital": "London", + "continent": "Europe", + "cca3": "GBR", + "areaInKm2": 242900, + "flagUrl": "https://flagcdn.com/w320/gb.png", + "mapsUrl": "https://goo.gl/maps/FoDtc3UKMkFsXAjHA", + "currencyName": "British pound", + "currencySymbol": "£" + }, + { + "name": "Argentina", + "officialName": "Argentine Republic", + "capital": "Buenos Aires", + "continent": "Americas", + "cca3": "ARG", + "areaInKm2": 2780400, + "flagUrl": "https://flagcdn.com/w320/ar.png", + "mapsUrl": "https://goo.gl/maps/Z9DXNxhf2o93kvyc6", + "currencyName": "Argentine peso", + "currencySymbol": "$" + }, + { + "name": "Cameroon", + "officialName": "Republic of Cameroon", + "capital": "Yaoundé", + "continent": "Africa", + "cca3": "CMR", + "areaInKm2": 475442, + "flagUrl": "https://flagcdn.com/w320/cm.png", + "mapsUrl": "https://goo.gl/maps/JqiipHgFboG3rBJh9", + "currencyName": "Central African CFA franc", + "currencySymbol": "Fr" + }, + { + "name": "Romania", + "officialName": "Romania", + "capital": "Bucharest", + "continent": "Europe", + "cca3": "ROU", + "areaInKm2": 238391, + "flagUrl": "https://flagcdn.com/w320/ro.png", + "mapsUrl": "https://goo.gl/maps/845hAgCf1mDkN3vr7", + "currencyName": "Romanian leu", + "currencySymbol": "lei" + }, + { + "name": "Uganda", + "officialName": "Republic of Uganda", + "capital": "Kampala", + "continent": "Africa", + "cca3": "UGA", + "areaInKm2": 241550, + "flagUrl": "https://flagcdn.com/w320/ug.png", + "mapsUrl": "https://goo.gl/maps/Y7812hFiGa8LD9N68", + "currencyName": "Ugandan shilling", + "currencySymbol": "Sh" + }, + { + "name": "France", + "officialName": "French Republic", + "capital": "Paris", + "continent": "Europe", + "cca3": "FRA", + "areaInKm2": 551695, + "flagUrl": "https://flagcdn.com/w320/fr.png", + "mapsUrl": "https://goo.gl/maps/g7QxxSFsWyTPKuzd7", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Suriname", + "officialName": "Republic of Suriname", + "capital": "Paramaribo", + "continent": "Americas", + "cca3": "SUR", + "areaInKm2": 163820, + "flagUrl": "https://flagcdn.com/w320/sr.png", + "mapsUrl": "https://goo.gl/maps/iy7TuQLSi4qgoBoG7", + "currencyName": "Surinamese dollar", + "currencySymbol": "$" + }, + { + "name": "Maldives", + "officialName": "Republic of the Maldives", + "capital": "Malé", + "continent": "Asia", + "cca3": "MDV", + "areaInKm2": 300, + "flagUrl": "https://flagcdn.com/w320/mv.png", + "mapsUrl": "https://goo.gl/maps/MNAWGq9vEdbZ9vUV7", + "currencyName": "Maldivian rufiyaa", + "currencySymbol": ".ރ" + }, + { + "name": "Fiji", + "officialName": "Republic of Fiji", + "capital": "Suva", + "continent": "Oceania", + "cca3": "FJI", + "areaInKm2": 18272, + "flagUrl": "https://flagcdn.com/w320/fj.png", + "mapsUrl": "https://goo.gl/maps/r9fhDqoLZdg1zmE99", + "currencyName": "Fijian dollar", + "currencySymbol": "$" + }, + { + "name": "Greece", + "officialName": "Hellenic Republic", + "capital": "Athens", + "continent": "Europe", + "cca3": "GRC", + "areaInKm2": 131990, + "flagUrl": "https://flagcdn.com/w320/gr.png", + "mapsUrl": "https://goo.gl/maps/LHGcAvuRyD2iKECC6", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Trinidad and Tobago", + "officialName": "Republic of Trinidad and Tobago", + "capital": "Port of Spain", + "continent": "Americas", + "cca3": "TTO", + "areaInKm2": 5130, + "flagUrl": "https://flagcdn.com/w320/tt.png", + "mapsUrl": "https://goo.gl/maps/NrRfDEWoG8FGZqWY7", + "currencyName": "Trinidad and Tobago dollar", + "currencySymbol": "$" + }, + { + "name": "Mauritania", + "officialName": "Islamic Republic of Mauritania", + "capital": "Nouakchott", + "continent": "Africa", + "cca3": "MRT", + "areaInKm2": 1030700, + "flagUrl": "https://flagcdn.com/w320/mr.png", + "mapsUrl": "https://goo.gl/maps/im2MmQ5jFjzxWBks5", + "currencyName": "Mauritanian ouguiya", + "currencySymbol": "UM" + }, + { + "name": "Tonga", + "officialName": "Kingdom of Tonga", + "capital": "Nuku'alofa", + "continent": "Oceania", + "cca3": "TON", + "areaInKm2": 747, + "flagUrl": "https://flagcdn.com/w320/to.png", + "mapsUrl": "https://goo.gl/maps/p5YALBY2QdEzswRo7", + "currencyName": "Tongan paʻanga", + "currencySymbol": "T$" + }, + { + "name": "Chile", + "officialName": "Republic of Chile", + "capital": "Santiago", + "continent": "Americas", + "cca3": "CHL", + "areaInKm2": 756102, + "flagUrl": "https://flagcdn.com/w320/cl.png", + "mapsUrl": "https://goo.gl/maps/XboxyNHh2fAjCPNn9", + "currencyName": "Chilean peso", + "currencySymbol": "$" + }, + { + "name": "Benin", + "officialName": "Republic of Benin", + "capital": "Porto-Novo", + "continent": "Africa", + "cca3": "BEN", + "areaInKm2": 112622, + "flagUrl": "https://flagcdn.com/w320/bj.png", + "mapsUrl": "https://goo.gl/maps/uMw1BsHEXQYgVFFu6", + "currencyName": "West African CFA franc", + "currencySymbol": "Fr" + }, + { + "name": "Sudan", + "officialName": "Republic of the Sudan", + "capital": "Khartoum", + "continent": "Africa", + "cca3": "SDN", + "areaInKm2": 1886068, + "flagUrl": "https://flagcdn.com/w320/sd.png", + "mapsUrl": "https://goo.gl/maps/bNW7YUJCaqR8zcXn7", + "currencyName": "Sudanese pound" + }, + { + "name": "Chad", + "officialName": "Republic of Chad", + "capital": "N'Djamena", + "continent": "Africa", + "cca3": "TCD", + "areaInKm2": 1284000, + "flagUrl": "https://flagcdn.com/w320/td.png", + "mapsUrl": "https://goo.gl/maps/ziUdAZ8skuNfx5Hx7", + "currencyName": "Central African CFA franc", + "currencySymbol": "Fr" + }, + { + "name": "Lesotho", + "officialName": "Kingdom of Lesotho", + "capital": "Maseru", + "continent": "Africa", + "cca3": "LSO", + "areaInKm2": 30355, + "flagUrl": "https://flagcdn.com/w320/ls.png", + "mapsUrl": "https://goo.gl/maps/H8gJi5mL4Cmd1SF28", + "currencyName": "Lesotho loti", + "currencySymbol": "L" + }, + { + "name": "Saint Lucia", + "officialName": "Saint Lucia", + "capital": "Castries", + "continent": "Americas", + "cca3": "LCA", + "areaInKm2": 616, + "flagUrl": "https://flagcdn.com/w320/lc.png", + "mapsUrl": "https://goo.gl/maps/4HhJ2jkPdSL9BPRcA", + "currencyName": "Eastern Caribbean dollar", + "currencySymbol": "$" + }, + { + "name": "Falkland Islands", + "officialName": "Falkland Islands", + "capital": "Stanley", + "continent": "Americas", + "cca3": "FLK", + "areaInKm2": 12173, + "flagUrl": "https://flagcdn.com/w320/fk.png", + "mapsUrl": "https://goo.gl/maps/TZH1x7AGanQKifNk7", + "currencyName": "Falkland Islands pound", + "currencySymbol": "£" + }, + { + "name": "Lithuania", + "officialName": "Republic of Lithuania", + "capital": "Vilnius", + "continent": "Europe", + "cca3": "LTU", + "areaInKm2": 65300, + "flagUrl": "https://flagcdn.com/w320/lt.png", + "mapsUrl": "https://goo.gl/maps/dd1s9rrLjrK2G8yY6", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Mozambique", + "officialName": "Republic of Mozambique", + "capital": "Maputo", + "continent": "Africa", + "cca3": "MOZ", + "areaInKm2": 801590, + "flagUrl": "https://flagcdn.com/w320/mz.png", + "mapsUrl": "https://goo.gl/maps/xCLcY9fzU6x4Pueu5", + "currencyName": "Mozambican metical", + "currencySymbol": "MT" + }, + { + "name": "Tajikistan", + "officialName": "Republic of Tajikistan", + "capital": "Dushanbe", + "continent": "Asia", + "cca3": "TJK", + "areaInKm2": 143100, + "flagUrl": "https://flagcdn.com/w320/tj.png", + "mapsUrl": "https://goo.gl/maps/8rQgW88jEXijhVb58", + "currencyName": "Tajikistani somoni", + "currencySymbol": "ЅМ" + }, + { + "name": "Cocos (Keeling) Islands", + "officialName": "Territory of the Cocos (Keeling) Islands", + "capital": "West Island", + "continent": "Oceania", + "cca3": "CCK", + "areaInKm2": 14, + "flagUrl": "https://flagcdn.com/w320/cc.png", + "mapsUrl": "https://goo.gl/maps/3eCdKVpVfMcZyKcK6", + "currencyName": "Australian dollar", + "currencySymbol": "$" + }, + { + "name": "North Korea", + "officialName": "Democratic People's Republic of Korea", + "capital": "Pyongyang", + "continent": "Asia", + "cca3": "PRK", + "areaInKm2": 120538, + "flagUrl": "https://flagcdn.com/w320/kp.png", + "mapsUrl": "https://goo.gl/maps/9q5T2DMeH5JL7Tky6", + "currencyName": "North Korean won", + "currencySymbol": "₩" + }, + { + "name": "Serbia", + "officialName": "Republic of Serbia", + "capital": "Belgrade", + "continent": "Europe", + "cca3": "SRB", + "areaInKm2": 88361, + "flagUrl": "https://flagcdn.com/w320/rs.png", + "mapsUrl": "https://goo.gl/maps/2Aqof7aV2Naq8YEK8", + "currencyName": "Serbian dinar", + "currencySymbol": "дин." + }, + { + "name": "United States Minor Outlying Islands", + "officialName": "United States Minor Outlying Islands", + "capital": "Washington DC", + "continent": "Americas", + "cca3": "UMI", + "areaInKm2": 34.2, + "flagUrl": "https://flagcdn.com/w320/um.png", + "mapsUrl": "https://goo.gl/maps/hZKnrzgeK69dDyPF8", + "currencyName": "United States dollar", + "currencySymbol": "$" + }, + { + "name": "Puerto Rico", + "officialName": "Commonwealth of Puerto Rico", + "capital": "San Juan", + "continent": "Americas", + "cca3": "PRI", + "areaInKm2": 8870, + "flagUrl": "https://flagcdn.com/w320/pr.png", + "mapsUrl": "https://goo.gl/maps/sygfDbtwn389wu8x5", + "currencyName": "United States dollar", + "currencySymbol": "$" + }, + { + "name": "Honduras", + "officialName": "Republic of Honduras", + "capital": "Tegucigalpa", + "continent": "Americas", + "cca3": "HND", + "areaInKm2": 112492, + "flagUrl": "https://flagcdn.com/w320/hn.png", + "mapsUrl": "https://goo.gl/maps/BbeJK8Sk2VkMHbdF8", + "currencyName": "Honduran lempira", + "currencySymbol": "L" + }, + { + "name": "Kenya", + "officialName": "Republic of Kenya", + "capital": "Nairobi", + "continent": "Africa", + "cca3": "KEN", + "areaInKm2": 580367, + "flagUrl": "https://flagcdn.com/w320/ke.png", + "mapsUrl": "https://goo.gl/maps/Ni9M7wcCxf8bJHLX8", + "currencyName": "Kenyan shilling", + "currencySymbol": "Sh" + }, + { + "name": "Portugal", + "officialName": "Portuguese Republic", + "capital": "Lisbon", + "continent": "Europe", + "cca3": "PRT", + "areaInKm2": 92090, + "flagUrl": "https://flagcdn.com/w320/pt.png", + "mapsUrl": "https://goo.gl/maps/BaTBSyc4GWMmbAKB8", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Belarus", + "officialName": "Republic of Belarus", + "capital": "Minsk", + "continent": "Europe", + "cca3": "BLR", + "areaInKm2": 207600, + "flagUrl": "https://flagcdn.com/w320/by.png", + "mapsUrl": "https://goo.gl/maps/PJUDU3EBPSszCQcu6", + "currencyName": "Belarusian ruble", + "currencySymbol": "Br" + }, + { + "name": "Dominican Republic", + "officialName": "Dominican Republic", + "capital": "Santo Domingo", + "continent": "Americas", + "cca3": "DOM", + "areaInKm2": 48671, + "flagUrl": "https://flagcdn.com/w320/do.png", + "mapsUrl": "https://goo.gl/maps/soxooTHxEeiAbn3UA", + "currencyName": "Dominican peso", + "currencySymbol": "$" + }, + { + "name": "Mayotte", + "officialName": "Department of Mayotte", + "capital": "Mamoudzou", + "continent": "Africa", + "cca3": "MYT", + "areaInKm2": 374, + "flagUrl": "https://flagcdn.com/w320/yt.png", + "mapsUrl": "https://goo.gl/maps/1e7MXmfBwQv3TQGF7", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Palau", + "officialName": "Republic of Palau", + "capital": "Ngerulmud", + "continent": "Oceania", + "cca3": "PLW", + "areaInKm2": 459, + "flagUrl": "https://flagcdn.com/w320/pw.png", + "mapsUrl": "https://goo.gl/maps/MVasQBbUkQP7qQDR9", + "currencyName": "United States dollar", + "currencySymbol": "$" + }, + { + "name": "Saudi Arabia", + "officialName": "Kingdom of Saudi Arabia", + "capital": "Riyadh", + "continent": "Asia", + "cca3": "SAU", + "areaInKm2": 2149690, + "flagUrl": "https://flagcdn.com/w320/sa.png", + "mapsUrl": "https://goo.gl/maps/5PSjvdJ1AyaLFRrG9", + "currencyName": "Saudi riyal", + "currencySymbol": "ر.س" + }, + { + "name": "Bangladesh", + "officialName": "People's Republic of Bangladesh", + "capital": "Dhaka", + "continent": "Asia", + "cca3": "BGD", + "areaInKm2": 147570, + "flagUrl": "https://flagcdn.com/w320/bd.png", + "mapsUrl": "https://goo.gl/maps/op6gmLbHcvv6rLhH6", + "currencyName": "Bangladeshi taka", + "currencySymbol": "৳" + }, + { + "name": "Barbados", + "officialName": "Barbados", + "capital": "Bridgetown", + "continent": "Americas", + "cca3": "BRB", + "areaInKm2": 430, + "flagUrl": "https://flagcdn.com/w320/bb.png", + "mapsUrl": "https://goo.gl/maps/2m36v8STvbGAWd9c7", + "currencyName": "Barbadian dollar", + "currencySymbol": "$" + }, + { + "name": "Isle of Man", + "officialName": "Isle of Man", + "capital": "Douglas", + "continent": "Europe", + "cca3": "IMN", + "areaInKm2": 572, + "flagUrl": "https://flagcdn.com/w320/im.png", + "mapsUrl": "https://goo.gl/maps/4DqVHDgVaFgnh8ZV8", + "currencyName": "British pound", + "currencySymbol": "£" + }, + { + "name": "Kazakhstan", + "officialName": "Republic of Kazakhstan", + "capital": "Nur-Sultan", + "continent": "Asia", + "cca3": "KAZ", + "areaInKm2": 2724900, + "flagUrl": "https://flagcdn.com/w320/kz.png", + "mapsUrl": "https://goo.gl/maps/8VohJGu7ShuzZYyeA", + "currencyName": "Kazakhstani tenge", + "currencySymbol": "₸" + }, + { + "name": "Libya", + "officialName": "State of Libya", + "capital": "Tripoli", + "continent": "Africa", + "cca3": "LBY", + "areaInKm2": 1759540, + "flagUrl": "https://flagcdn.com/w320/ly.png", + "mapsUrl": "https://goo.gl/maps/eLgGnaQWcJEdYRMy5", + "currencyName": "Libyan dinar", + "currencySymbol": "ل.د" + }, + { + "name": "Cayman Islands", + "officialName": "Cayman Islands", + "capital": "George Town", + "continent": "Americas", + "cca3": "CYM", + "areaInKm2": 264, + "flagUrl": "https://flagcdn.com/w320/ky.png", + "mapsUrl": "https://goo.gl/maps/P3ZVXX3LH63t91hL8", + "currencyName": "Cayman Islands dollar", + "currencySymbol": "$" + }, + { + "name": "Nigeria", + "officialName": "Federal Republic of Nigeria", + "capital": "Abuja", + "continent": "Africa", + "cca3": "NGA", + "areaInKm2": 923768, + "flagUrl": "https://flagcdn.com/w320/ng.png", + "mapsUrl": "https://goo.gl/maps/LTn417qWwBPFszuV9", + "currencyName": "Nigerian naira", + "currencySymbol": "₦" + }, + { + "name": "Ireland", + "officialName": "Republic of Ireland", + "capital": "Dublin", + "continent": "Europe", + "cca3": "IRL", + "areaInKm2": 70273, + "flagUrl": "https://flagcdn.com/w320/ie.png", + "mapsUrl": "https://goo.gl/maps/hxd1BKxgpchStzQC6", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "South Africa", + "officialName": "Republic of South Africa", + "capital": "Pretoria", + "continent": "Africa", + "cca3": "ZAF", + "areaInKm2": 1221037, + "flagUrl": "https://flagcdn.com/w320/za.png", + "mapsUrl": "https://goo.gl/maps/CLCZ1R8Uz1KpYhRv6", + "currencyName": "South African rand", + "currencySymbol": "R" + }, + { + "name": "Ecuador", + "officialName": "Republic of Ecuador", + "capital": "Quito", + "continent": "Americas", + "cca3": "ECU", + "areaInKm2": 276841, + "flagUrl": "https://flagcdn.com/w320/ec.png", + "mapsUrl": "https://goo.gl/maps/TbX8hUW4gcbRPZiK7", + "currencyName": "United States dollar", + "currencySymbol": "$" + }, + { + "name": "Guadeloupe", + "officialName": "Guadeloupe", + "capital": "Basse-Terre", + "continent": "Americas", + "cca3": "GLP", + "areaInKm2": 1628, + "flagUrl": "https://flagcdn.com/w320/gp.png", + "mapsUrl": "https://goo.gl/maps/Dy9R2EufJtoWm8UN9", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Åland Islands", + "officialName": "Åland Islands", + "capital": "Mariehamn", + "continent": "Europe", + "cca3": "ALA", + "areaInKm2": 1580, + "flagUrl": "https://flagcdn.com/w320/ax.png", + "mapsUrl": "https://goo.gl/maps/ewFb3vYsfUmVCoSb8", + "currencyName": "Euro", + "currencySymbol": "€" + }, + { + "name": "Saint Vincent and the Grenadines", + "officialName": "Saint Vincent and the Grenadines", + "capital": "Kingstown", + "continent": "Americas", + "cca3": "VCT", + "areaInKm2": 389, + "flagUrl": "https://flagcdn.com/w320/vc.png", + "mapsUrl": "https://goo.gl/maps/wMbnMqjG37FMnrwf7", + "currencyName": "Eastern Caribbean dollar", + "currencySymbol": "$" + }, + { + "name": "Croatia", + "officialName": "Republic of Croatia", + "capital": "Zagreb", + "continent": "Europe", + "cca3": "HRV", + "areaInKm2": 56594, + "flagUrl": "https://flagcdn.com/w320/hr.png", + "mapsUrl": "https://goo.gl/maps/qSG6xTKUmrYpwmGQ6", + "currencyName": "Croatian kuna", + "currencySymbol": "kn" + }, + { + "name": "Hungary", + "officialName": "Hungary", + "capital": "Budapest", + "continent": "Europe", + "cca3": "HUN", + "areaInKm2": 93028, + "flagUrl": "https://flagcdn.com/w320/hu.png", + "mapsUrl": "https://goo.gl/maps/9gfPupm5bffixiFJ6", + "currencyName": "Hungarian forint", + "currencySymbol": "Ft" + }, + { + "name": "Turkmenistan", + "officialName": "Turkmenistan", + "capital": "Ashgabat", + "continent": "Asia", + "cca3": "TKM", + "areaInKm2": 488100, + "flagUrl": "https://flagcdn.com/w320/tm.png", + "mapsUrl": "https://goo.gl/maps/cgfUcaQHSWKuqeKk9", + "currencyName": "Turkmenistan manat", + "currencySymbol": "m" + } ] + export default countriesList; \ No newline at end of file diff --git a/modules/countries/test/countries-routes.test.ts b/modules/countries/test/countries-routes.test.ts index 1c539ab7..e18db095 100644 --- a/modules/countries/test/countries-routes.test.ts +++ b/modules/countries/test/countries-routes.test.ts @@ -15,7 +15,7 @@ describe('country api endpoints', () => { it('should return gpb_usd ticker data', async () => { const filter = 'Afghanistan'; const response = await request(app).get(`/countries/${filter}`); - expect(response.body.countries[0]).toEqual(filter); + expect(response.body.countries[0].name).toEqual(filter); }); }); }); diff --git a/modules/instruments/api/instruments-routes.ts b/modules/instruments/api/instruments-routes.ts new file mode 100644 index 00000000..6e655a4d --- /dev/null +++ b/modules/instruments/api/instruments-routes.ts @@ -0,0 +1,79 @@ +import { Request, Response } from 'express'; +import * as core from 'express-serve-static-core'; +import instrumentsList from '../data/instruments'; +import { getQtyFromRequest } from '../../../utils/route-utils'; + +module.exports = function (app: core.Express) { + /** + * @openapi + * '/instruments/{qty}': + * get: + * tags: + * - Instruments + * summary: Obtain a list of all instruments + * parameters: + * - in: path + * name: qty + * description: They quantity of instruments you want to generate + * type: string + * default: 1 + * required: false + * responses: + * '200': + * description: OK + * schema: + * type: array + * items: + * type: string + * example: Saxhorn, Tuba + */ + app.get('/instruments/:qty?', (req: Request, res: Response) => { + const qty = getQtyFromRequest(req); + res.json({ + instruments: instrumentsList.slice(0, qty), + }); + }); + + /** + * @openapi + * '/instruments/{filterBy}/{qty}': + * get: + * tags: + * - Instruments + * summary: Obtain a list of all instruments that contain filtered text + * parameters: + * - in: path + * name: filterBy + * description: The text you would like to filter instruments by + * type: string + * required: false + * - in: path + * name: qty + * description: They quantity of instruments you want to generate + * type: string + * default: 1 + * required: false + * responses: + * '200': + * description: OK + * schema: + * type: array + * items: + * type: string + * example: Trumpet + */ + app.get('/instruments/:filterBy?/:qty?', (req: Request, res: Response) => { + const qty = getQtyFromRequest(req); + if (req.params.filterBy) { + const filteredList = instrumentsList.filter((source) => + source.toLocaleLowerCase().includes(req.params.filterBy.toLocaleLowerCase()) + ).slice(0, qty); + return res.json({ + instruments: filteredList, + }); + } + res.json({ + instruments: instrumentsList, + }); + }); +}; diff --git a/modules/instruments/data/instruments.ts b/modules/instruments/data/instruments.ts new file mode 100644 index 00000000..95ce1c74 --- /dev/null +++ b/modules/instruments/data/instruments.ts @@ -0,0 +1,548 @@ +const instrumentsList = [ + "Accordion", + "Acoustic bass guitar", + "Acoustic guitar", + "Acoustic bass guitar", + "Aeolian Harp", + "Agung a Tamlang", + "Agung", + "Ahoko", + "Ajaeng", + "Alboka", + "Alphorn", + "Alpine bell", + "Alto clarinet", + "Alto flute", + "Alto horn", + "Alto sarrusophone", + "Alto saxophone", + "Angklung", + "Appalachian dulcimer", + "Archlute", + "Arghul", + "Arpa nottolini", + "Arpeggione", + "Array Mbira", + "Aru-ding or kubing", + "Aulochrome", + "Babendil", + "Baglama/ saz", + "Balafon", + "Balalaika", + "Bandola", + "Bandoneón", + "Bandurria", + "Banhu", + "Banjo", + "Barbat", + "Baritone horn", + "Baritone sarrusophone", + "Baritone saxophone", + "Baroque Wooden Flute", + "Baryton", + "Bass Clarinet", + "Bass Drum", + "Bass flute", + "Bass guitar", + "Bass sarrusophone", + "Bass saxophone", + "Bass / baritone oboe", + "Basse a Pistons", + "Basse Cor", + "Basset clarinet", + "Basset horn", + "Bassoon", + "Bawu", + "Bayan", + "Bazooka", + "Bell", + "Berimbau", + "Bianqing", + "Bianzhong", + "Bifora", + "Biniou", + "Biwa", + "Bock", + "Bodega", + "Bodhrán", + "Boha", + "Bombarde", + "Bombardino", + "Bongo drum", + "Border pipe/ lowland bagpipe", + "Bordonua", + "Bouzouki", + "Brian Boru bagpipes", + "Bullroarer", + "Button accordian", + "Cabrette", + "Calliope", + "Carillon", + "Carillon", + "Castanets", + "Cavaco", + "Cavaquinho", + "Caxixi", + "Celesta", + "Cello", + "Ceng", + "Chabrette", + "Chapman stick", + "Charango", + "Chenda", + "Chi", + "Chimes", + "Ching", + "Chitarrone", + "Chitarra battente", + "Chromatic accordian", + "Cigar box guitar", + "Cimbalom", + "Cimbasso", + "Cimpoi", + "Cittern", + "Clapped hands", + "Clarinet", + "Clarinette d’amour", + "Classical guitar", + "Clavicembelo", + "Clavichord", + "Clavichord", + "Concertina", + "Conch", + "Conga", + "Contra-alto clarinet", + "Contra-alto flute", + "Contrabass á anche", + "Contrabass clarinet", + "Contrabass flute", + "Contrabass oboe", + "Contrabass Sarrusophone", + "Contrabass saxophone", + "Contrabassoon", + "Cornet/ Cornett/ Cornetto/ Zink", + "Cornish bagpipes", + "Cowbell", + "Croatian bagpipes", + "Cromorne", + "Crotales", + "Crumhorn", + "Crwth", + "Cuatro", + "Cuíca", + "Cymbals – crash, hi-hat, ride, splash, tom-toms, zil", + "Cymbalum", + "Da’uli da’uli", + "Dabakan", + "Dadihu", + "Dahu", + "Daiko", + "Dankiyo", + "Daraboukka", + "Darabukka", + "Darbuka", + "Darvyra", + "Denis d’or", + "Dhol", + "Dholak", + "Didgeridoo", + "Dihu", + "Diyingehu", + "Djembe", + "Doedelzak", + "Dombak", + "Domra", + "Dotara", + "Double Bass", + "Double contrabass flute", + "Doulophone/ cuprophone", + "Drum machine", + "Dubreq stylophone", + "Duct Flute", + "Dudelsack", + "Dudy", + "Duff", + "Dulcian", + "Dulcimer", + "Dulzaina", + "Dumbelek", + "Dun dun", + "Dutar", + "Duxianqin", + "Ektara", + "Electric guitar", + "Electric organ", + "Electric piano", + "Electronic:", + "English Horn/ Cor Anglais", + "Erhu", + "Erxian", + "Euphonium", + "Fangxiang", + "Fiddle", + "Finger Cymbals", + "Fingerboard synthesizer", + "Fiscarmonica", + "Flageolets", + "Flugelhorn", + "Flute", + "Folgerphone", + "French Horn", + "Gaida", + "Gaita", + "Gajdy", + "Gambang", + "Gan gan", + "Gandingan", + "Gandingan a kayo", + "Ganza", + "Gaohu", + "Gayageum", + "Gehu", + "Gender", + "Geomungo/ komungo", + "Ghatam", + "Glass marimba", + "Glasschord", + "Glockenspiel", + "Gong", + "Gottuvadhyam", + "Great Highland bagpipe", + "Great Irish warpipes", + "Guan", + "Gugin", + "Guiro", + "Guitar", + "Guitar 12 Strings", + "Guitarrón", + "Guqin", + "Gusle/ gusla", + "Gusli", + "Guzheng", + "Hammered dulcimer", + "Handbells", + "Hang", + "Hardanger fiddle", + "Harmonica/ Mouth Organ", + "Harmonium/ reed organ", + "Harp", + "Harp guitar", + "Harpsichord", + "Heckelphone", + "Hegelong", + "Hélicon", + "Hichiriki", + "Hocchiku", + "Hooked harp", + "Horagai", + "Horn", + "Hosho", + "Hsaio", + "Huemmelchen", + "Huluhu", + "Hun", + "Hunting Horn", + "Huqin", + "Hurdy Gurdy", + "Igil", + "Inci", + "Ipu", + "Irish bouzouki", + "Irish Uilleann", + "Istarski mih", + "Janggu", + "Japanese Bamboo Flute/ Shakuhachi", + "Jew’s harp", + "Jew’s harp", + "Jiaohu", + "Jinghu", + "Jug", + "Kadlong", + "Kagul", + "Kangling", + "Kaval", + "Kèn b?u", + "Kettle drum/ Timpani", + "Keyed Bugle", + "Keyed Trumpet", + "Khene", + "Khim", + "Khloy", + "Khol", + "Kissar", + "Knatele", + "Kokyu", + "Komungo", + "Kora", + "Koto", + "Koudi", + "Koziol", + "Kubing", + "Kulintang a kayo", + "Kulintang a putao/ kulintang a tiniok", + "Kulintang/ kolintang", + "Kutiyapi", + "Kwa-yen", + "Kwintangen kayo/ luntang", + "Lambeg", + "Lancashire great-pipe", + "Langeleik", + "Laruan", + "Lasso d’amore", + "Launeddas", + "Leier", + "Leiqin", + "Lirone", + "Lithophone", + "Lusheng", + "Lute", + "Lyre", + "Magyar duda", + "Maguhu", + "Malimba", + "Mando-bass", + "Mandocello", + "Mandola", + "Mandolin", + "Mangtong", + "Maraca", + "Marimba", + "Marimbao", + "Marinbaphone", + "Mbira/ Sanza/ Thumb Piano", + "Mellophone", + "Mellotron", + "Melodeon", + "Melodica", + "Metallophones", + "Mijwiz", + "Mittlealtersackpfeife", + "Mizwad", + "Mohan veena", + "Moodswinger", + "Morin khuur/ morin huur", + "Mridangam", + "Muchosac", + "Musette bressane", + "Musette de cour", + "Musette du centre", + "Musical bow", + "Musical Saw", + "Nadaswaram", + "Naqara", + "Natural Trumpet", + "Nay", + "Ney", + "Northumbrian smallpipes", + "Nose flute", + "Nyckelharpa", + "Oboe", + "Oboe d’amore", + "Oboe da caccia", + "Ocarina", + "Octaban", + "Octapad", + "Octave mandolin", + "Octavin", + "Octocontra-alto clarinet", + "Octocontrabass clarinet", + "Oliphant/ Cor d’Oliphant", + "Ondes martenot", + "Ophicleide", + "Organ - electric", + "Organ pipe", + "Overtone guitar", + "Paixiao", + "Palendang", + "Pan pipes", + "Pastoral pipes", + "Piano", + "Piccolo", + "Piccolo clarinet", + "Piccolo heckelphone", + "Piccolo oboe", + "Pipa", + "Pipe organ", + "Piva", + "Psaltery", + "Pulalu", + "Qanun", + "Quena", + "Quinticlave", + "Racket", + "Rainstick", + "Raita", + "Rajao", + "Ranat ek elk", + "Ranat thum lek", + "Ratchet", + "Rattle", + "Rebab", + "Rebec", + "Recorder", + "Reed contrabass", + "Reed Pipe", + "Riq/ riqq/ rik", + "Roman tuba", + "Ruan", + "Rudra veena", + "Ryuteki", + "Sabar", + "Sac de gemecs", + "Sackbutt", + "Säckpipa", + "Saenghwang", + "Sallaneh", + "Sampho", + "Sampler", + "Sang-auk", + "Santur", + "Sanxian", + "Saraswati veena", + "Sarrusophone", + "Sarunay/ saronay/ sarunai/ saronai", + "Saung", + "Saw ou", + "Saw sam sai", + "Saxhorn", + "Saxonette", + "Saxophone", + "Schweizer sackpfeife", + "Scottish smallpipes", + "Se", + "Serpent", + "Serunai", + "Setar", + "Shamisen", + "Shawm", + "Shekere", + "Sheng", + "Shinobue", + "Shofar", + "Sihu", + "Singing bowl/ rin gong", + "Siren", + "Sitar", + "Sleigh Bells", + "Slide guitar", + "Slide whistle", + "Slit drum", + "Snare Drum", + "Sopranino clarinet", + "Sopranino saxophone", + "Soprano clarinet", + "Soprano mandolin", + "Soprano saxophone", + "soprillo", + "Sorna", + "Sousaphone", + "Spoons", + "Sralai", + "Steel drum", + "Steel guitar", + "Subcontrabass flute", + "Subcontrabass saxophone", + "Suling", + "Suona", + "Synclavier", + "Synthesizer", + "Tabla", + "Tagutok", + "Taiko", + "Talking drum", + "Tambour", + "Tambourine", + "Tamburitza", + "Tan-tan", + "Taphon", + "Tar", + "Tárogató", + "Tea chest bass", + "Tenor horn", + "Tenor mandola", + "Tenor sarrusophone", + "Tenor saxophone", + "Tenoroon", + "Teponaztli", + "Thavil", + "Theorbo", + "Theremin", + "Timpani/ kettle drum", + "Timple", + "Tin whistle", + "Tjelempung/ Celempung", + "Tom-tom", + "Tonette", + "Torupill", + "Transverse Flute", + "Trekspill", + "Tres", + "Triangle", + "Tro u", + "Tromba marina", + "Trombone", + "Tromboon/ babone", + "Trompeta china", + "Trumpet", + "Trumpet Bb", + "Tsampouna", + "Tsuri-daiko", + "Tuba", + "Tubular Bells", + "Tuhu", + "Tulum", + "Tumpong", + "Turntables", + "Ud/ oud", + "Udu", + "Ukulele", + "Valiha", + "Vertical flute", + "Vertical viola", + "Veuze", + "Vibraphone/ vibraharp", + "Vichitra veena", + "Vielle", + "Vihuela", + "Viola", + "Viola d’amore", + "Viola da gamba", + "Viola organista", + "Violin", + "Violotta", + "Vladimirsky Rozhok", + "Volinka", + "Wagner Tuba", + "Washboard", + "Washint", + "Washtub bass", + "Welsh pipes", + "Whip", + "Whistle", + "Willow flute", + "Wind Chimes", + "Xalam/ khalam", + "Xiao", + "Xiaodihu", + "Xun", + "Xylophone", + "Xylorimba", + "Yang chi’in", + "Yang Chin", + "Yayli tanbur", + "Yazheng", + "Yehu", + "Yu", + "Yueh Ch’in", + "Yun Lo", + "Zampogna", + "Zaqq", + "Zhongdihu", + "Zhuihu", + "Zither", + "Zonghu", + "Zufalo", + "Zurna" +] + +export default instrumentsList; diff --git a/modules/instruments/test/instruments-routes.test.ts b/modules/instruments/test/instruments-routes.test.ts new file mode 100644 index 00000000..5007d3ce --- /dev/null +++ b/modules/instruments/test/instruments-routes.test.ts @@ -0,0 +1,21 @@ +import instrumentsList from '../data/instruments'; + +import request from 'supertest'; +import app from '../../../app'; + +describe('instrument api endpoints', () => { + describe('GET /instruments/:qty?', () => { + it('should return a list of instruments', async () => { + const response = await request(app).get(`/instruments/1`); + expect(response.body).toStrictEqual({ instruments: ["Accordion"] }); + }); + }); + + describe('GET /instruments/:filterBy?/:qty?', () => { + it('should return instrument data', async () => { + const filter = 'Roman tuba'; + const response = await request(app).get(`/instruments/${filter}/1`); + expect(response.body.instruments[0]).toEqual(filter); + }); + }); +}); diff --git a/modules/news/api/news-routes.ts b/modules/news/api/news-routes.ts new file mode 100644 index 00000000..489b246d --- /dev/null +++ b/modules/news/api/news-routes.ts @@ -0,0 +1,68 @@ +import { Request, Response } from 'express'; +import * as core from 'express-serve-static-core'; +import { getQtyFromRequest } from '../../../utils/route-utils'; +import { getAllNews, getNewsBySlug } from '../utils/getNews'; +import { INews } from '../consts/news.interface'; + +module.exports = function (app: core.Express) { + /** + * @openapi + * '/news/{qty}': + * get: + * tags: + * - News + * summary: Get a list of news + * parameters: + * - in: path + * name: qty + * description: The amount of results you would like returned + * default: 10 + * type: number + * responses: + * '200': + * description: OK + * schema: + * $ref: '#/definitions/MockNews' + * + */ + app.get('/news/:qty', (req: Request, res: Response) => { + let qty = getQtyFromRequest(req); + + const data: INews[] = getAllNews(qty); + + if (!data || data.length === 0) { + return res.status(400).json(); + } + + res.json(data); + }); + + /** + * @openapi + * '/news/slug/{slug}': + * get: + * tags: + * - News + * summary: Get a news by slug + * parameters: + * - in: path + * name: slug + * default: Bitcoin:-Breaking-Up-Money-and-State + * type: string + * responses: + * '200': + * description: OK + * schema: + * $ref: '#/definitions/MockNews' + */ + app.get('/news/slug/:slug', (req: Request, res: Response) => { + const { slug } = req.params; + const data: INews[] = getNewsBySlug(slug); + + if (!data || data.length === 0) { + return res.status(400).json(); + } + + res.json(data); + }); +}; diff --git a/modules/news/consts/news.interface.ts b/modules/news/consts/news.interface.ts new file mode 100644 index 00000000..e05c96da --- /dev/null +++ b/modules/news/consts/news.interface.ts @@ -0,0 +1,41 @@ +/** + * @openapi + * definitions: + * MockNews: + * type: array + * items: + * type: object + * properties: + * title: + * type: string + * example: 'Bitcoin: Breaking Up Money and State' + * slug: + * type: string + * example: Bitcoin:-Breaking-Up-Money-and-State + * summary: + * type: string + * example: 'The only drink I will ever need' + * category: + * type: string + * example: 'AI' + * language: + * type: string + * example: en + * publishedDate: + * type: string + * example: '1984-05-21 00:02:11' + * author: + * type: string + * example: sport-drinks + */ +interface INews { + title: string; + slug: string; + author: string; + published_date: string; + summary: string; + language: string; + category: string; +} + +export { INews } \ No newline at end of file diff --git a/modules/news/consts/news.ts b/modules/news/consts/news.ts new file mode 100644 index 00000000..acc34ea9 --- /dev/null +++ b/modules/news/consts/news.ts @@ -0,0 +1,422 @@ +import slugify from 'slugify'; +import { INews } from './news.interface'; + +const slug = (title: string) => { + return slugify(title, { + lower: true, + trim: true, + }) +} + +const newsData: INews[] = [ + { + title: `The Rise and Fall of Bitcoin Maximalism`, + slug: slug(`The Rise and Fall of Bitcoin Maximalism`), + summary: + 'Bitcoin maximalism has become so desperately unhinged I consider it a cultural Chernobyl. The situation was not always so. Bitcoin culture was not maximalist for most of its history. The zealots infecting modern Bitcoin culture are usurpers. I arrived into the world of Bitcoin in 2012. I had heard about the dark net marketplace Silk Road and its then-elusive leader, the Dread Pirate Roberts (DPR). As a fan of subcultures, I was enthralled and I still think nothing has come close to that era for sheer intrigue. ', + published_date: '2022-10-12 01:07:18', + category: 'Crypto', + language: 'en', + author: 'Dr. Paul J. Dylan-Ennis', + }, + { + title: "Crypto's Grayscale blasts SEC over ‘special harshness' toward bitcoin trading", + slug: slug("Crypto's Grayscale blasts SEC over ‘special harshness' toward bitcoin trading"), + author: 'Alison Frankel', + published_date: '2022-10-12 01:07:18', + summary: + "Representations of cryptocurrency Bitcoin are seen in this illustration. REUTERS/Dado Ruvic/IllustrationGrayscale Investments LLC(Reuters) - Crypto asset manager Grayscale Investments LLC, which manages the world's largest bitcoin investment fund, told a federal appeals court on Tuesday that the U.S. Securities and Exchange Commission is so suspicious of bitcoin spot trading that it blocked a proposal to make it easier and safer for investors to gain exposure to the cryptocurrency.That is the only reasonable conclusion, Grayscale argued in a new brief filed with the District of Columbia U.", + language: 'en', + category: 'Crypto', + }, + { + title: 'South African Non-Profit Bitcoin Ekasi Opens Education Center', + author: 'Frederick Munawa', + slug: slug('South African Non-Profit Bitcoin Ekasi Opens Education Center'), + category: 'Crypto', + published_date: '2022-10-11 20:07:47', + summary: + "Bitcoin Ekasi, a nonprofit organization seeking to establish a bitcoin economy in Mossel Bay, South Africa, has opened the Bitcoin Ekasi Center. The center will provide financial literacy education to local residents, with a focus on the area's younger generation and business community.The center was co-founded by Hermann Vivier, who also co-founded The Surfer Kids, a non-profit that teaches surfing and life skills to disadvantaged kids from the same locale. Bitcoin Ekasi has already enrolled 20 kids into its program and set up 10 stores to accept bitcoin for payment.", + language: 'en', + }, + { + title: 'Grayscale says U.S. SEC set bar too high for Bitcoin funds', + author: 'Jody Godoy', + slug: slug('Grayscale says U.S. SEC set bar too high for Bitcoin funds'), + category: 'Crypto', + published_date: '2022-10-12 01:03:00', + summary: + "FILE PHOTO: The seal of the U.S. Securities and Exchange Commission hangs on the wall at SEC headquarters in Washington, June 24, 2011. REUTERS/Jonathan Ernst/File Photo (Reuters) - Grayscale Investments said in a court filing Tuesday that the U.S. Securities and Exchange Commission set the bar too high for spot bitcoin exchange-traded funds, which have so far not been approved for listing on U.S. exchanges.Grayscale sued the regulator in June, after the SEC denied its bid to convert its Grayscale Bitcoin Trust, the world's largest bitcoin fund, into an ETF for listing on Intercontinental Exchange Inc's NYSE Arca exchange.", + language: 'en', + }, + { + title: 'Bitcoin vs Altcoin: Similarities and Differences Explained', + author: 'Pooja T.', + slug: slug('Bitcoin vs Altcoin: Similarities and Differences Explained'), + category: 'Crypto', + published_date: '2022-10-11 09:04:20', + summary: + 'Bitcoin and Altcoins share a few similarities but differences rank the chart. Bitcoin is the original Cryptocurrency meaning it was the first ever coin in the market. Altcoins were then built after the success of Bitcoins, making them stand behind the Bitcoins. Both the kinds are decentralized, eliminating the need for a third party to process the transactions. Bitcoin has comparatively higher volatility than Altcoins since it is dependent on feelings and projections. Both coins can be accepted as a source of payment, though not every merchant accepts Cryptocurrencies as a mode of payment.', + language: 'en', + }, + { + title: 'How Much Will Bitcoin be Worth in the Year 2140?', + author: 'Amitej Rana', + slug: slug('How Much Will Bitcoin be Worth in the Year 2140?'), + category: 'Crypto', + published_date: '2022-10-10 18:12:50', + summary: + "How much profit will you earn in your life if you keep buying Bitcoin (DCA) or buy a lump sum of it? How much will be the Bitcoin market value in the foreseeable future?What's the future of Bitcoin once it stops mining new Bitcoin? How will 21 million Bitcoins play out in the future? What will be its use cases in the future? Is it gonna be future money or a hedge against inflation?Everything in the observable universe is infinite or say we have infinite things in our finite universe.Some people call Gold a finite commodity.", + language: 'en', + }, + { + title: 'Is the Bitcoin Price About to Enter its 5th Super Cycle Bull Market?', + author: 'Ali B', + published_date: '2022-10-11 05:59:11', + slug: slug('Is the Bitcoin Price About to Enter its 5th Super Cycle Bull Market?'), + category: 'Crypto', + summary: + "During the Asian session, Bitcoin's price fell 2.03% to $19,069.30, indicating that it is still in a bearish trend. Despite a bearish bias, the BTC/USD pair appears to be entering its 5th Bitcoin super cycle bull market. A super cycle occurs when a positive increase in the price of a market asset leads to an increase in the price of that asset. The term 'super cycle' refers to a long-term commodity bull market. However, several financial experts have begun to use it to represent Bitcoin.\n\nSince the COVID-19 epidemic in 2020, Bitcoin has become even more popular than it was in the previous decade and it's about to test a significant trend that has been stable for the past five years.", + language: 'en', + }, + { + title: 'Grayscale says U.S. SEC set bar too high for Bitcoin funds', + author: 'Jody Godoy', + published_date: '2022-10-12 00:51:04', + summary: + 'The seal of the U.S. Securities and Exchange Commission hangs on the wall at SEC headquarters in Washington, June 24, 2011. REUTERS/Jonathan Ernst/File PhotoOct 11 (Reuters) - Grayscale Investments said in a court filing Tuesday that the U.S. Securities and Exchange Commission set the bar too high for spot bitcoin exchange-traded funds, which have so far not been approved for listing on U.S. exchanges.Grayscale sued the regulator in June, after the SEC denied its bid to convert its Grayscale Bitcoin Trust (GBTC.', + language: 'en', + slug: slug('Grayscale says U.S. SEC set bar too high for Bitcoin funds'), + category: 'Crypto', + }, + { + title: 'Sustainable Bitcoin Protocol Wants to Make Bitcoin a Climate-Positive Asset', + author: 'Sage D. Young', + published_date: '2022-10-13 15:32:54', + summary: + "Addressing Bitcoin's energy-intensive proof-of-work model would encourage greater institutional adoption, according to one chief executive who has focused on sustainability for more than eight years.Bradford Van Voorhees, CEO and co-founder of Sustainable Bitcoin Protocol, told CoinDesk that negative media, misperceptions of Bitcoin's environmental impact and its sizable energy consumption all currently hinder institutional adoption.Bradford Van Voorhees is presenting at Investing in Digital Enterprises and Assets Summit (I.", + language: 'en', + slug: slug('Sustainable Bitcoin Protocol Wants to Make Bitcoin a Climate-Positive Asset'), + category: 'Crypto', + }, + { + title: 'Bitcoin: Breaking Up Money and State', + author: 'Will', + published_date: '2022-10-11 16:59:39', + summary: + 'For the first time in human history, a technology has been created that once and for all divorces money from the state. This separation of money and state is poised to transform the way we think about value and our expectations of government involvement in our financial lives, and may be the largest cultural-political shift since the separation of church and state.\n\nBitcoin cannot be created at the whim of some centralized power, taking away the ability of governments to spend wantonly. It may sound utopian, but once humanity evolves to a Bitcoin standard the government-created boom-bust cycle, constant inflation and ability to fund wars will be things of the past.', + language: 'en', + slug: slug('Bitcoin: Breaking Up Money and State'), + category: 'Crypto', + }, + { + title: 'Semiconductor Silicon Carbide Electronic Power Device Market Size 2022: Covid-19 Impact Analysis By Industry Share, Key Findings, Company Profiles, Growth Strategy, and Forecast by Regions till 2028', + author: 'Qy Research', + published_date: '2022-10-13 09:46:14', + slug: slug('Semiconductor Silicon Carbide Electronic Power Device Market Size 2022'), + category: 'Silicone', + summary: + 'Semiconductor Silicon Carbide Electronic Power Device Market Size 2022: Covid-19 Impact Analysis By Industry Share, Key Findings, Company Profiles, Growth Strategy, and Forecast by Regions till 2028 | Cree, Fairchild Semiconductor, General Electric, Infin\n\nhttps://www.qyresearch.com/sample-form/form/5059809/Global-Semiconductor-Silicon-Carbide-Electronic-Power-Device-Market-Insights-Forecast-to-2028\n\nhttps://www.qyresearch.com/customize-request/form/5059809/Global-Semiconductor-Silicon-Carbide-Electronic-Power-Device-Market-Insights-Forecast-to-2028\n\nLos Angeles, United State: QY Research recently published a research report titled, "Global Semiconductor Silicon Carbide Electronic Power Device Market Insight, Forecast 2028".', + language: 'en', + }, + { + title: 'Dental Silicone Materials market: Market Indicators Showing Positive Outlook', + author: 'Qyresearch', + published_date: '2022-10-13 12:50:17', + slug: slug('Dental Silicone Materials market: Market Indicators Showing Positive Outlook'), + category: 'Silicone', + summary: + 'Dental Silicone Materials market: Market Indicators Showing Positive Outlook | Coltène Whaledent GmbH, DENTAL MANUFACTURING S.p.A., ELSODENT\n\nhttps://www.qyresearch.com/sample-form/form/5012295/Global-Dental-Silicone-Materials-Industry-Research-Report-Growth-Trends-and-Competitive-Analysis-2022-2028\n\nhttps://www.qyresearch.com/customize-request/form/5012295/Global-Dental-Silicone-Materials-Industry-Research-Report-Growth-Trends-and-Competitive-Analysis-2022-2028\n\nThe global Dental Silicone Materials Market is carefully researched in the report while largely concentrating on top players and their business tactics, geographical expansion, market segments, competitive landscape, manufacturing, and pricing and cost structures.', + language: 'en', + }, + { + title: 'Silicone Rubber Tape Market Growth and Share by 2028', + author: '', + published_date: '2022-10-11 05:08:02', + slug: slug('Silicone Rubber Tape Market Growth and Share by 2028'), + category: 'Silicone', + summary: + "The MarketWatch News Department was not involved in the creation of this content. Oct 11, 2022 (The Expresswire) --\nThe 'Silicone Rubber Tape Market' Report 2022 presents exhaustive coverage of global and regional market segments with industry size, share and growth analysis. Silicone Rubber Tape market report covers future trends, growth opportunities, challenges of top key players for demand-supply side. The report delivers concise summary of business statistics, development plans, pricing strategies, competition analysis, economics policies adopted by top key players.", + language: 'en', + }, + { + title: 'Reclaim Silicon Wafer Market 2022 To 2028, Top Companies Booming Strategies, Progression Status, and Business Trends.', + author: '', + published_date: '2022-10-11 11:00:40', + slug: slug('Reclaim Silicon Wafer Market 2022 To 2028'), + category: 'Silicone', + summary: + 'The MarketWatch News Department was not involved in the creation of this content. Oct 11, 2022 (Reportmines via Comtex) --\nPre and Post Covid is covered and Report Customization is available. The "Reclaim Silicon Wafer market" gives detailed data about the major factors influencing the growth of the Reclaim Silicon Wafer market at the national and local level forecast 2022 - 2028 of the market size, in terms of value, market share by region, segment, regional market positions, segment, and country opportunities for growth, Key company profiles, SWOT, product portfolio and growth strategies.', + + language: 'en', + }, + { + title: 'Global Silicone Market Size to grow USD 30.9 Billion by 2030', + author: 'Spherical Insights Llp', + published_date: '2022-10-12 00:00:00', + slug: slug('Global Silicone Market Size to grow USD 30.9 Billion by 2030'), + category: 'Silicone', + summary: + 'New York, United States, Oct. 12, 2022 (GLOBE NEWSWIRE) -- The Global Silicone Market Size is expected to grow from USD 16.3 billion in 2021 to USD 30.9 billion by 2030, at a CAGR of 7.4% during the forecast period 2021-2030. as per the latest research report by Spherical Insights & Consulting. The Asia Pacific is expected to grow the fastest during the forecast period. Get a Sample PDF Brochure: https://www.sphericalinsights.com/request-sample/1189 The Silicone market has been growing owing to the rise in demand for silicone by different end-user industries such as medical, construction, industrial, and consumer goods.', + language: 'en', + }, + { + title: 'Silicone Putties for Any Purpose', + author: 'The Artnews Recommends Editors', + published_date: '2022-10-09 21:00:00', + slug: slug('Silicone Putties for Any Purpose'), + category: 'Silicone', + summary: + "What can't a quality silicone putty do? It's a go-to choice for making detailed molds for materials like resin, clay, or plaster, and many versions can do much, much more, from creating tool grips to stoppering leaks. Molding putties top our list, but you'll find that our five picks can be put to use beyond crafting and sculpture. Here are the best silicone putties on the market.\n\nBrought to you by the oldest and most widely circulated art magazine in the world, ARTnews Recommends helps you make the choice that suits you best from products in hundreds of art and craft supply categories.", + language: 'en', + }, + { + title: 'Silicone Structural Glazing Market Expected to Reach $81.6 Billion by 2031', + author: 'David Correa', + published_date: '2022-10-11 10:30:24', + slug: slug('Silicone Structural Glazing Market Expected to Reach $81.6 Billion by 2031'), + category: 'Silicone', + summary: + 'The silicone structural glazing market size was valued at $38.1 billion in 2021 growing at a CAGR of 7.8% from 2022 to 2031. PORTLAND, OR, UNITES STATES, October 11, 2022 /EINPresswire.com/ -- Silicone structural glazing is the use of a silicone sealant for the structural transfer of loads from the glass to its perimeter support system and retention of the glass in the opening. Glass is not typically used as a structural member. According to a new report published by Allied Market Research, titled, \'Silicone Structural Glazing Market," The silicone structural glazing market size was valued at $38.', + language: 'en', + }, + { + title: 'Four-sided Structural Silicone Glazing market: Complete Company Profiling of Dominant Players', + author: 'Qyresearch Inc.', + published_date: '2022-10-10 16:26:18', + slug: slug('Four-sided Structural Silicone Glazing market: Complete Company Profiling of Dominant Players'), + category: 'Silicone', + summary: + 'Four-sided Structural Silicone Glazing market: Complete Company Profiling of Dominant Players | Nippon Sheet Glass Co. Ltd. (Japan), The Dow Chemical Company (US), Asahi Glass Co., Ltd (Japan)\n\nhttps://www.qyresearch.com/sample-form/form/5055729/Global-Four-sided-Structural-Silicone-Glazing-Market-Report-History-and-Forecast-2017-2028-Breakdown-Data-by-Manufacturers-Key-Regions-Types-and-Application\n\nhttps://www.qyresearch.com/customize-request/form/5055729/Global-Four-sided-Structural-Silicone-Glazing-Market-Report-History-and-Forecast-2017-2028-Breakdown-Data-by-Manufacturers-Key-Regions-Types-and-Application\n\nwww.', + language: 'en', + }, + { + title: 'Silicon Frontline Receives EOS/ESD Symposium Outstanding Paper Award', + author: 'Dermott Lynch', + published_date: '2022-10-11 17:45:00', + slug: slug('Silicon Frontline Receives EOS/ESD Symposium Outstanding Paper Award'), + category: 'Silicone', + summary: + "SAN JOSE, CALIFORNIA, USA, October 11, 2022 /EINPresswire.com/ -- Silicon Frontline Technology is proud to announce that they are a recipient of 43rd Annual EOS/ESD Symposium Outstanding Paper Award for a paper titled 'Enablement, Evaluation and Extension of a CDM ESD Verification Tool for IC Level'. The paper was co-authored with Infineon Technologies and Technical University of Munich. 'It is a great honor to be awarded this recognition for our collaborated work with Infineon and Technical University of Munich and highlighting the capabilities and results of our CDM ESD solution,' said Dermott Lynch, COO of Silicon Frontline Technology.", + language: 'en', + }, + { + title: 'Effects, Opportunities, and Fears of Artificial Intelligence', + author: 'Adrian Munguia', + published_date: '2022-10-08 23:46:33', + summary: + 'Even though Artificial Intelligence till this day is growing in its success, people are becoming quite concerned about the technology even with the groundbreaking results that AI has brought into our history of technological advancements. For this paper I will further investigate how artificial intelligence can impact our pace of life and the changing nature of our personal freedoms.With the many positive opportunities that AI brings to our lives there are also negative opportunities which affect us negatively.', + language: 'en', + slug: slug('Effects, Opportunities, and Fears of Artificial Intelligence'), + category: 'AI', + }, + { + title: 'Where has AI reached at the moment', + author: 'Prashansa Sachan', + published_date: '2022-10-08 13:05:12', + summary: + "So, it means we are asking- how much human-like are machine these days ? Marketing chatbots and Autocorrect is the least you can see and connect with that of AI presence in our real world. In 1956, John McCarthy organised the Dartmouth Conference, at which the term ‘Artificial Intelligence' was first adopted. From then on, the world discovered the ideas of the ability of machines to look at social problems using knowledge data and competition.When NITI Ayog and Meity held the event RAISE (Responsible AI for Social Empowerment 2020) and India became part of larger abd bigger GPAI(Global Partnership on Artificial Intelligence), we knew for sure that this technology is going to rule the world.", + language: 'en', + slug: slug('Where has AI reached at the moment'), + category: 'AI', + }, + { + title: 'Steve Nouri Affirms That AI & Web3 Will Enhance Decentralization', + author: 'Wow AI Editorial Team', + published_date: '2022-10-09 04:57:10', + summary: + 'Photo by Wow AIThe second session of Worldwide AI Webinar 2022 was a keynote on AI and Web 3.0 delivered by Steve Nouri, founder of AI4Diversity.The recording of the whole session will be available shortly! Please follow Wow AI on LinkedIn, Facebook, Twitter, and YouTube to stay up-to-date!Key TakeawaysWeb3 gives data ownership back to the usersExplaining that in the current web model, users do not own their data or identity but instead are given accounts by companies and end up getting their data held captive in app siloes, Steve Nouri believed that Web3 would be transformative.', + + language: 'en', + slug: slug('Steve Nouri Affirms That AI & Web3 Will Enhance Decentralization'), + category: 'AI', + }, + { + title: 'The increasing importance of learning AI skills and the future of work', + author: 'Sugandha Jha', + published_date: '2022-10-09 10:23:17', + summary: + 'By Mudit Srivastava It is common knowledge that AI will create unprecedented innovations, and most people realize it as we see its examples in our day-to-day lives. But understanding industry needs and expectations from the talent of tomorrow is nebulous at best. It is becoming increasingly evident that AI will be used to augment rather than replace human intelligence. A key component of succeeding in an AI-powered world is knowing how and where to harness its power. That is where AI education comes in.', + + language: 'en', + slug: slug('The increasing importance of learning AI skills and the future of work'), + category: 'AI', + }, + { + title: 'Transparency of AI systems for Migrants', + author: 'Andranik VAN', + published_date: '2022-10-09 17:02:26', + summary: + "Reflections on AI Transparency issues.Only my photos. © Uniquement mes photos. © IG @bnw_av44Millions of migrants spontaneously generate a multitude of personal information when they move. This information is collected by specific programs and devices and processed by AI systems. This is done not only to guarantee the security and conservation of national interests but also to make decisions and predictions 'in the public's best interest.'Although government resources boast migration predictions and AI system-supported decisions utility, the transparency of the use of AI systems for decision-making yet stirs controversial discussions.", + + language: 'en', + slug: slug('Transparency of AI systems for Migrants'), + category: 'AI', + }, + { + title: 'Birmingham company acquires Boston-based, Delaware-based companies', + author: 'Laurel Thrailkill', + published_date: '2022-10-09 23:05:00', + summary: + 'Birmingham-based Copysmith, a provider of AI-powered marketing content and copywriting software, acquired two companies.\n\nThe company acquired Boston-based Frase and Delaware-based Rytr, launching Copyrytr, a collective of AI-powered content and SEO marketing solutions.\n\n"The world of AI content creation is going through exciting times," said Shegun Otulana, CEO of Copysmith. "Over the last 24 months, millions of people have adopted our products and millions more across the entire space actively use various AI solutions to generate content.', + + language: 'en', + slug: slug('Birmingham company acquires Boston-based, Delaware-based companies'), + category: 'AI', + }, + { + title: 'The Uncertainty Bias in AI and How to Tackle it', + author: 'Dr. Eric Wang', + published_date: '2022-10-08 09:00:23', + summary: + 'Bias in AI is a formidable topic for any data scientist. If you are reading this, you probably know that artificial intelligence systems have a bias problem. While true, that thought is misleading. AI systems themselves inherently have no bias. However, if it is using biased data, or the people running the system do not correct it, AI systems can return faulty, biased information.\n\nBut you may not know that the same AI systems, even those we would consider to be free of bias in AI, can present a different and no less concerning outcome.', + + language: 'en', + slug: slug('The Uncertainty Bias in AI and How to Tackle it'), + category: 'AI', + }, + { + title: 'In the future, the medicines we take may be "made by AI"', + author: 'Anonym', + published_date: '2022-10-09 22:03:19', + summary: + 'In the future, the medicines we take may be "made by AI" [Artificial intelligence is participating in the whole process from target discovery to clinical trials] The birth of a new drug usually requires an investment of 1 billion or even billions of dollars, and the research and development cycle generally exceeds 10 years. Due to the addition of AI technology, the cost of drug research and dev\n\nIn the future, the medicines we take may be "made by AI" [Artificial intelligence is participating in the whole process from target discovery to clinical trials]\n\nThe birth of a new drug usually requires an investment of 1 billion or even billions of dollars, and the research and development cycle generally exceeds 10 years.', + + slug: slug('In the future, the medicines we take may be "made by AI"'), + category: 'AI', + language: 'en', + }, + { + title: 'AGI AI Pte Ltd Launches AI+Financial Concept Services', + author: '', + published_date: '2022-10-09 01:00:00', + summary: + 'In 2022, AGI AI Private Limited (AGI AI) built AI quantitative trading, wholly owned by AGI AI to provide the core technology and principles of underlying logic. We develop strategic plan as well as goals for long-term AI+ finance.\n\nAGI AI has Structured Its Strategic Development Plan into Five Steps\n\nStep 1. Creating The Perfect Combination of AI + Finance: Automated factor discovery, knowledge graph, graph computing, and enhanced analytics based on privacy protection will deliver greater value.', + + language: 'en', + slug: slug('AGI AI Pte Ltd Launches AI+Financial Concept Services'), + category: 'AI', + }, + { + title: 'AI Washing: Everything You Need to Know', + author: 'Linda Rosencrance', + published_date: '2022-10-14 00:05:45', + summary: + 'You\'ve heard of "greenwashing," but how about "AI washing"? Let\'s dive deeper into this marketing tactic to unpack why companies engage in it and how to steer clear of it:What is AI Washing?AI washing is a marketing effort wherein vendors claim their offerings involve artificial intelligence (AI) technology when they really don\'t or the connection to AI is minimal. Marketing teams engage in AI washing when they embellish their products\' AI capabilities to enhance sales. AI washing is much like "greenwashing," where a company\'s management team makes unsupported, false or misleading claims about the sustainability of its products, services or business operations.', + language: 'en', + slug: slug('AI Washing: Everything You Need to Know'), + category: 'AI', + }, + { + title: 'Is your AI up, running and relevant?', + author: 'Mary E. Shacklett Is President', + published_date: '2022-10-12 22:16:10', + summary: + "Image: Shuo/Adobe Stock\nIn 2021, Spiceworks reported survey results that revealed, 'Almost one-third (31%) of the professionals surveyed said their organizations are now using artificial intelligence (AI), and 43% are exploring the technology. About 34% reported their companies had not deployed any AI projects.'\nThis and other surveys show that most companies are in early stages of AI adoption — and they most likely have not yet thought about change management for their AI systems, and what it's going to take to keep their AI systems up, running and relevant.", + + language: 'en', + slug: slug('Is your AI up, running and relevant?'), + category: 'AI', + }, + { + title: 'Fossil Gen 6 smartwatches are getting Wear OS 3 and will allow iOS connections', + author: 'Pike', + published_date: '2022-10-13 18:10:08', + summary: + "Jimmy Westenberg / Android AuthorityTL;DR\n\nFossil Gen 6 smartwatches will be one of the first smartwatches to upgrade from Wear OS 2 to Wear OS 3.\nThe update will only be coming to Gen 6 devices and not the rest of Fossil's portfolio.\nThe update will provide iOS connection support.\n\n\nWhen we talk about Wear OS 3, much of the conversation is limited to a select few devices. However, it looks like that will soon change once the Fossil Gen 6 Wellness Edition hits store shelves later this month.Earlier today, Fossil announced a new addition to its Gen 6 lineup of smartwatches — the Fossil Gen 6 Wellness Edition.", + + language: 'en', + slug: slug('Fossil Gen 6 smartwatches are getting Wear OS 3'), + category: 'OS', + }, + { + title: 'Google Pixel Watch gets three years of updates, Samsung Galaxy Watch5 gets four', + author: 'Vlad', + published_date: '2022-10-11 22:01:13', + summary: + "Google's Pixel Watch and Samsung's Galaxy Watch5 may be based on the same Wear OS 3.x platform, but they won't get the same level of software support. According to a very revealing Wired interview with Björn Kilburn, Google's director of product management for Wear OS, the Pixel Watch is set to receive three years of software updates. On the other hand, Samsung's Galaxy Watch5 will get four years. The explanation for the discrepancy is that, starting with Wear OS 3.x, Google is no longer in charge of updates for the wearables it doesn't make.", + + language: 'en', + slug: slug('Google Pixel Watch gets three years of updates'), + category: 'OS', + }, + { + title: "Samsung's Tizen OS Poised for Use on Third-Party TVs", + author: 'Google', + published_date: '2022-10-10 20:50:59', + summary: + "Samsung has its first Tizen OS licensees as the company looks to expand Tizen's footprint in the smart TV market.\nTizen OS is a Linux-based OS developed by Samsung, in conjunction with the Linux Foundation. Tizen has continued to grow since its introduction in 2012, but has primarily been used by Samsung.\nThe company has now partnered with third-party manufacturers, paving the way for them to adopt Tizen OS on their own TVs.\nSamsung Electronics today announced a partnership with leading international ODM (Original Development Manufacturing) companies such as Atmaca, HKC and Tempo — a collaboration that will enable non-Samsung smart TV models to use Tizen OS for the first time.", + + language: 'en', + slug: slug("Samsung's Tizen OS Poised for Use on Third-Party TVs"), + category: 'OS', + }, + { + title: 'Wear OS System UI App Brings Latest Experiences To Pixel Watch', + author: 'Sumit Adhikari', + published_date: '2022-10-14 09:28:21', + summary: + "Google has released a new 'Wear OS System UI' app for the Pixel Watch on the Play Store. The app will provide the latest Wear OS smartwatch experiences to users. 'Stay connected, be healthier, and leverage the helpfulness of Google, all on your wrist,' its Play Store description reads.The Wear OS System UI app will likely seed system improvements to the Pixel Watch via the Play Store. Google recently said that it plans to release a new Wear OS version every year as it does for Android. Its first-gen smartwatch will get updates for at least three years.", + + language: 'en', + slug: slug('Wear OS System UI App Brings Latest Experiences To Pixel Watch'), + category: 'OS', + }, + { + title: 'Pixel Watch: Google confirms annual Wear OS updates and three-year software support for its first smartwatch', + author: 'EconoTimes', + published_date: '2022-10-12 08:14:01', + summary: + "Google confirmed that the Wear OS would receive the same annual update treatment the Android operating system gets following the unveiling of the Pixel Watch last week. It means Google's first in-house smartwatch will receive at least three versions of the Wear OS in the years to come.\n\nThe Wear OS went through somewhat of a rebirth last year. Apart from changing its name from Android Wear, Google also announced its partnership with Samsung to co-develop Wear OS as a 'unified platform.' Now that Google has brought the Pixel Watch to the market, the company confirmed Wear OS would receive regular updates every year.", + + language: 'en', + slug: slug('Pixel Watch: Google confirms annual Wear OS updates'), + category: 'OS', + }, + { + title: 'Long Noncoding RNA LINC00909 Induces Epithelial-Mesenchymal Transition and Contributes to Osteosarcoma Tumorigenesis and Metastasis', + author: 'Wanshun Liu', + published_date: '2022-10-10 13:05:03', + summary: + 'Journal of Oncology/2022/Article/Research Article | Open AccessVolume 2022 | Article ID 8660965 | https://doi.org/10.1155/2022/8660965Wanshun Liu,1,2Qi Zhang,3Kai Shen,1Keran Li,4Jie Chang,1He Li,1Ao Duan,1Sheng Zhang,1,5and Yumin Huang1Academic Editor: Zhihua KangBackground. Osteosarcoma (OS) is a malignant tumor that is highly metastatic with a high mortality rate. Although mounting evidence suggests that LINC00909 is strongly associated with the malignant progression of various tumors, the exact role of LINC00909 in OS remains unknown.', + + language: 'en', + slug: slug('Long Noncoding RNA LINC00909 Induces Epithelial-Mesenchymal Transition'), + category: 'OS', + }, + { + title: 'Samsung Is Bringing Tizen OS Platform To More TV Brands: What We Know', + author: 'Tech Desk', + published_date: '2022-10-11 08:11:23', + summary: + 'Samsung is finally opening up the gates for more TV brands to use its licensed Tizen OS platform. The company is ready to license the platform so that other smart TVs can be powered by the operating system. While the initial signs suggest Samsung will have to make allies with less-known brands, it is good to see the company looking to partner with other brands for its software products. The company has disclosed its plans to source Tizen OS to other brands at the Samsung Developers Conference last year, and now we are finally hearing the names of the brands that have signed up with the South Korean for its TV platform.', + language: 'en', + slug: slug('Samsung Is Bringing Tizen OS Platform To More TV Brands: What We Know'), + category: 'OS', + }, + { + title: 'New Wear OS version coming every year, promised update for old watches still set for 2022', + author: 'Abner Li', + published_date: '2022-10-11 19:09:34', + summary: + "The first-party Pixel Watch is the next biggest moment for Wear OS after last year's Samsung partnership. The team responsible provided an update today on the state of the platform. Wired talked to Björn Kilburn, director of product management for Wear OS, in an interview that reveals how Google's goal is to 'release a new version of Wear generally every year in a similar fashion to mobile.' It's unclear if that annual update goal is referring to, for example, 3.0 -> 4.0 or whether 3.0 -> 3.5 would count, which happened this year on Samsung's Galaxy Watch 5 and the Pixel Watch.", + + language: 'en', + slug: slug('New Wear OS version coming every year, promised update for old watches still set for 2022'), + category: 'OS', + }, + { + title: 'Google Wear OS Updates Are Now Rolling Out Yearly Like How Android Works', + author: 'Teejay Boris', + published_date: '2022-10-12 01:20:00', + + summary: + 'Teejay Boris, Tech Times 11 October 2022, 09:10 pm Google vows Wear OS updates on a yearly basis like how mobile phones receive annual Android releases. The search engine giant explained why it suddenly plans to dish out more Wear OS updates. On top of that, Google also confirmed that it is gearing up to push new updates to older smartwatches before the year ends. As per the latest report by 9to5 Google, the new Wear OS was made possible in partnership with the giant South Korean phone maker Samsung.', + + language: 'en', + slug: slug('Google Wear OS Updates Are Now Rolling Out Yearly Like How Android Works'), + category: 'OS', + }, +]; + +export default newsData; diff --git a/modules/news/tests/api/news-routes.test.ts b/modules/news/tests/api/news-routes.test.ts new file mode 100644 index 00000000..7f1282ee --- /dev/null +++ b/modules/news/tests/api/news-routes.test.ts @@ -0,0 +1,32 @@ +import request from 'supertest'; +import app from '../../../../app'; + +describe('news api endpoints', () => { + describe('GET /news', () => { + it('should return a list of a news of 20', async () => { + const qty = 20; + const response = await request(app).get(`/news/${qty}`); + + expect(response.body.length).toBe(qty); + }); + }); + + describe('GET /news/slug', () => { + it('should return a list of news', async () => { + const slug = 'The-Rise-and-Fall-of-Bitcoin-Maximalism'; + const response = await request(app).get(`/news/slug/${slug}`); + + expect(response).not.toBeFalsy(); + }); + }); + + describe('GET /news/slug', () => { + it('should return an error status response', async () => { + const slug = 'invalid-slug'; + const response = await request(app).get(`/news/slug/${slug}`); + console.log(response.statusCode); + + expect(response.statusCode).toBeGreaterThanOrEqual(400); + }); +}); +}); diff --git a/modules/news/utils/getNews.ts b/modules/news/utils/getNews.ts new file mode 100644 index 00000000..50ed8cde --- /dev/null +++ b/modules/news/utils/getNews.ts @@ -0,0 +1,10 @@ +import newsData from '../consts/news'; +import { INews } from '../consts/news.interface'; + +export const getAllNews = (qty: number): INews[] => { + return newsData.slice(0, qty); +}; + +export const getNewsBySlug = (slug: string): INews[] => { + return newsData.filter((news) => news.slug === slug); +}; diff --git a/modules/products/data/product-reviews.ts b/modules/products/data/product-reviews.ts index 87113579..7f9892f3 100644 --- a/modules/products/data/product-reviews.ts +++ b/modules/products/data/product-reviews.ts @@ -49,6 +49,33 @@ const productReviews = [ userName: getFullNames(1), categories: ['sport-drinks','gaming'] }, + { + productName: "Super Gamer Juice", + productId: 1, + message: "Energy and focus for days! Could use a few more flavors though.", + dateTime: getRandomDate(new Date('1950-02-12T01:57:45.271Z'), new Date('2022-02-12T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['sport-drinks','gaming'] + }, + { + productName: "Super Gamer Juice", + productId: 1, + message: "It is currently the only thing I have in my fridge!", + dateTime: getRandomDate(new Date('1950-02-12T01:57:45.271Z'), new Date('2022-02-12T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['sport-drinks','gaming'] + }, + { + productName: "Super Gamer Juice", + productId: 1, + message: "Have been gaming for 3 days straight and will probably go for another 3. Who needs sleep when you have Super Gamer Juice!", + dateTime: getRandomDate(new Date('1950-02-12T01:57:45.271Z'), new Date('2022-02-12T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['sport-drinks','gaming'] + }, { productName: "Golden-arm", productId: 2, @@ -211,6 +238,15 @@ const productReviews = [ userName: getFullNames(1), categories: ['glassware'] }, + { + productName: "Bartender's Best Margarita Glasses", + productId: 6, + message: "So fun to have at our Parrot Head Club parties!", + 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, @@ -337,6 +373,635 @@ const productReviews = [ userName: getFullNames(1), categories: ['shoes','sneakers'] }, + { + productName: "Z440 Athletic Sneakers", + productId: 10, + message: "Fit me perfect and have stood the test of time. Looking forward to next year's designs", + 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: "The super golden gloves 3000", + productId: 11, + message: "These are the gloves I always wanted to have. I received them last chrismas and I love them.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['gloves','garden'] + }, + { + productName: "The super golden gloves 3000", + productId: 11, + message: "Terrible gloves. They got broken after the second time I cut a tree. Need to improve in quality.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['gloves','garden'] + }, + { + productName: "Tequila mi rancho", + productId: 12, + message: "I tried this first in New Zeland when I was 18 and I had a memorable night. The nex day however, was even more memorable.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['alcoholic','drinks', 'spirits'] + }, + { + productName: "Tequila mi rancho", + productId: 12, + message: "What a nice taste, dry and thick. Remains in the throat with a banana-like flavor.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['alcoholic','drinks', 'spirits'] + }, + { + productName: "Tequila mi rancho", + productId: 12, + message: "Changed my life, got me a wife and made me wild.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['alcoholic','drinks', 'spirits'] + }, + { + productName: "Logimax keyboard 960", + productId: 13, + message: "Unfortunatelly, I got this with some broken buttons. Will as for a refund.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['pc','tech', 'accesories'] + }, + { + productName: "Logimax keyboard 960", + productId: 13, + message: "Works like a charm. My laptop's keyboard is usually very hot, but with this one I don't have that problem.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['pc','tech', 'accesories'] + }, + { + productName: "Logimax keyboard 960", + productId: 13, + message: "Keys are sooo soft, I'm planning to order another one.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['pc','tech', 'accesories'] + }, + { + productName: "A little place called little-land", + productId: 14, + message: "The funniest thing I've ever read. It's so litlle that makes laugh... a little.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['books','ebooks', 'novel'] + }, + { + productName: "A little place called little-land", + productId: 14, + message: "Finished in two hours. I was actually expecting it to be longer.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['books','ebooks', 'novel'] + }, + { + productName: "A little place called little-land", + productId: 14, + message: "Another success for Jimmy, the author. Even thuoght he's short in size he has great ideas.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['books','ebooks', 'novel'] + }, + { + productName: "A little place called little-land", + productId: 14, + message: "Couldn't put this book down, even though I really didn't love the main character, I needed to know how it finished, and I wasn't disappointed.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['books','ebooks', 'novel'] + }, + + { + productName: "Towel 100x50cm", + productId: 15, + message: "While not so soft they're very absorbent.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['bathroom','towels'] + }, + { + productName: "Towel 100x50cm", + productId: 15, + message: "Been looking for these for years! Now that I finally found them, I enjoy my bath more than ever.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['bathroom','towels'] + }, + { + productName: "Towel 100x50cm", + productId: 15, + message: "Luxirious towel, feels great on your skin and dries out quite fast.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['bathroom','towels'] + }, + { + productName: "Motor case Y-U. The motorized suitcase for your travels.", + productId: 16, + message: "Why you? Indeed, why your product is easy to break?", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['travel','suitcase'] + }, + { + productName: "Motor case Y-U. The motorized suitcase for your travels.", + productId: 16, + message: "Drives me from the airport's front door, directly to the plane. It's just crazy!", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['travel','suitcase'] + }, + { + productName: "Motor case Y-U. The motorized suitcase for your travels.", + productId: 16, + message: "Got this for my 16yo kid and he loves it.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['travel','suitcase'] + }, + { + productName: "Antique DVD player", + productId: 17, + message: "Finally, I can play all my DVDs again. Simply amazing.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['music','sound-devices'] + }, + { + productName: "Antique DVD player", + productId: 17, + message: "If you're as old fashion as me, you're gonna love this.", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['music','sound-devices'] + }, + { + productName: "Antique DVD player", + productId: 17, + message: "I've was waiting for this for so long but now that I have it. It doesn't seem to work :(", + dateTime: getRandomDate(new Date('1960-02-12T01:57:45.271Z'), new Date('2023-12-31T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['music','sound-devices'] + }, + { + productName: "Super Noise-Cancelling Headphones", + productId: 18, + message: "Wow. Just wow. I've had so many different types of headphones in my life, but this one takes the cake. Not only are they amazing at noise-cancellation, but the sound quality is the best I've ever heard. The bass on these is perfect!", + dateTime: getRandomDate(new Date('1970-02-12T01:57:45.271Z'), new Date('2022-10-12T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['headphones', 'electronics'] + }, + { + productName: "Super Noise-Cancelling Headphones", + productId: 18, + message: "My wife works from home and she's always telling me about how distracting it is hearing all the noises outside. I heard great things about the Super Noise-Cancelling Headphones and decided to buy her a pair. She loves them! She said it has helped her stay in flow while working.", + dateTime: getRandomDate(new Date('1970-02-12T01:57:45.271Z'), new Date('2022-10-12T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['headphones', 'electronics'] + }, + { + productName: "Super Noise-Cancelling Headphones", + productId: 18, + message: "What are you waiting for? Get a pair of these headphones already! I'm telling you, you will have no regrets. Buy a pair for everyone you love, too.", + dateTime: getRandomDate(new Date('1970-02-12T01:57:45.271Z'), new Date('2022-10-12T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['headphones', 'electronics'] + }, + { + productName: "Super Noise-Cancelling Headphones", + productId: 18, + message: "I do not usually write reviews, but I felt obligated to share my experience. I am very particular with sound quality and I am impressed. I love using the Super Noise-Cancelling Headphones during my piano practice sessions. It allows me to really feel my music even with the hustle and bustle of New York City.", + dateTime: getRandomDate(new Date('1970-02-12T01:57:45.271Z'), new Date('2022-10-12T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['headphones', 'electronics'] + }, + { + productName: "Super Noise-Cancelling Headphones", + productId: 18, + message: "I wanted to love these. I really did. After seeing tons of good reviews, I thought these were the ones. Nope. They're not designed for large heads. Maybe if they come out with an XL version, I'll give them another shot. For now, they will be returned.", + dateTime: getRandomDate(new Date('1970-02-12T01:57:45.271Z'), new Date('2022-10-12T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['headphones', 'electronics'] + }, + { + productName: "Super Smooth Mouse", + productId: 19, + message: "This mouse is perfect for gamers. Smooth, with just the right amount of buttons to customize.", + dateTime: getRandomDate(new Date('1970-02-12T01:57:45.271Z'), new Date('2022-10-12T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['computer mouse', 'gamer mouse', 'electronics'] + }, + { + productName: "Super Smooth Mouse", + productId: 19, + message: "I've seen this mouse being advertised for gamers, but it sounded like it met all of my needs, so I decided to try it out. It's great! I do a lot of graphic design work and this has definitely improved my experience.", + dateTime: getRandomDate(new Date('1970-02-12T01:57:45.271Z'), new Date('2022-10-12T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['computer mouse', 'gamer mouse', 'electronics'] + }, + { + productName: "Super Smooth Mouse", + productId: 19, + message: "I've been using this mouse for 3 months and let me tell you! I will never go back to No Name Mouse again!", + dateTime: getRandomDate(new Date('1970-02-12T01:57:45.271Z'), new Date('2022-10-12T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['computer mouse', 'gamer mouse', 'electronics'] + }, + { + productName: "Super Smooth Mouse", + productId: 19, + message: "My girlfriend gave me this as a gift. She is the best. I can't believe I didn't get this sooner!", + dateTime: getRandomDate(new Date('1970-02-12T01:57:45.271Z'), new Date('2022-10-12T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['computer mouse', 'gamer mouse', 'electronics'] + }, + { + productName: "Super Smooth Mouse", + productId: 19, + message: "I received this product for free in exchange for my honest review. This mouse is smooth, ergonomically friendly, and has customizable buttons for all of your needs. I would highly recommend it to gamers and anyone who prioritizes comfort and functionality.", + dateTime: getRandomDate(new Date('1970-02-12T01:57:45.271Z'), new Date('2022-10-12T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['computer mouse', 'gamer mouse', 'electronics'] + }, + { + productName: "Co-Pilot Roller Skates", + productId: 20, + message: "Have been looking all over for a pair of quads and these were such a deal I couldn’t say no!", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['roller-skate', 'sports', 'recreational'] + }, + + { + productName: "Co-Pilot Roller Skates", + productId: 20, + message: "Website was not easy to use but they shipped fast and are a great fit. ", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['roller-skate', 'sports', 'recreational'] + }, + + { + productName: "Co-Pilot Roller Skates", + productId: 20, + message: "Are very narrow for my wide feet, should have bought one size up.", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['roller-skate', 'sports', 'recreational'] + }, + + { + productName: "Co-Pilot Roller Skates", + productId: 20, + message: "Fit like a dream and the neon pink color gets lots of looks on the street! Love them!", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['roller-skate', 'sports', 'recreational'] + }, + + { + productName: "Co-Pilot Roller Skates", + productId: 20, + message: "Seems fell apart within a few months and the laces are fraying. Great fit, but quality is disappointing.", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['roller-skate', 'sports', 'recreational'] + }, + + { + productName: "Co-Pilot Roller Skates", + productId: 20, + message: "Great little skate, takes me waaaay back! Happy to see these making a comeback", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['roller-skate', 'sports', 'recreational'] + }, + + { + productName: "Co-Pilot Roller Skates", + productId: 20, + message: "A bit on the heavy side, but holding up well.", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['roller-skate', 'sports', 'recreational'] + }, + + { + productName: "Co-Pilot Roller Skates", + productId: 20, + message: "Not keen on the laces, takes so long to lace up, velcro option would be helpful", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['roller-skate', 'sports', 'recreational'] + }, + { + productName: "Badda-Boom Pizza", + productId: 21, + message: "Instructions were clear, pizza was... ok", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['frozen-entree', 'food'] + }, + { + productName: "Badda-Boom Pizza", + productId: 21, + message: "Toppings were scarce, but cheese was tasty.", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['frozen-entree', 'food'] + }, + { + productName: "Badda-Boom Pizza", + productId: 21, + message: "Worst frozen pizza I've ever had! Where are all the toppings? Would not buy again.", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['frozen-entree', 'food'] + }, + { + productName: "Badda-Boom Pizza", + productId: 21, + message: "Quick and easy, was really hungry and ate the whole thing.", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['frozen-entree', 'food'] + }, + { + productName: "Badda-Boom Pizza", + productId: 21, + message: "Tasty, but would be better if it came pre-sliced", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['frozen-entree', 'food'] + }, + { + productName: "Badda-Boom Pizza", + productId: 21, + message: "Not bad for the price, could use more cheese though.", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['frozen-entree', 'food'] + }, + { + productName: "Fresh Rinse Mouthwash", + productId: 22, + message: "Lovely minty flavor, though the lime green colour is a little odd", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['dental-hygiene',] + }, + { + productName: "Fresh Rinse Mouthwash", + productId: 22, + message: "Nice addition to my brushing routine, doesn't burn too much.", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['dental-hygiene',] + }, + { + productName: "Fresh Rinse Mouthwash", + productId: 22, + message: "Burns right away, way too strong!", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['dental-hygiene',] + }, + { + productName: "Fresh Rinse Mouthwash", + productId: 22, + message: "Mouthwash is fine, but bottle is hard to open. Talk about child-proof", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['dental-hygiene',] + }, + { + productName: "Fresh Rinse Mouthwash", + productId: 22, + message: "My dentist recommended it, tastes great and keeps me minty fresh all day!", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['dental-hygiene',] + }, + { + productName: "Fresh Rinse Mouthwash", + productId: 22, + message: "Really great flavor! Wish it came in travel sizes.", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['dental-hygiene',] + }, + { + productName: "Silencers", + productId: 23, + message: "I wear them to bed and they cut out ALL the noise!", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['Earpluggs', 'noise-cancelling',] + }, + { + productName: "Silencers", + productId: 23, + message: "I can finally block out my husband's snoring, what a life savor!", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['Earpluggs', 'noise-cancelling',] + }, + { + productName: "Silencers", + productId: 23, + message: "Blocks out all the construction going on across the street so I can work in peace!", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['Earpluggs', 'noise-cancelling',] + }, + { + productName: "Silencers", + productId: 23, + message: "Fall out while I sleep, could use more sizes.", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['Earpluggs', 'noise-cancelling',] + }, + { + productName: "Silencers", + productId: 23, + message: "Meditating with 4 kids playing in the next room is not easy, these things definitely help!", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['Earpluggs', 'noise-cancelling',] + }, + { + productName: "Silencers", + productId: 23, + message: "Work great for blocking out noise when I sleep, only problem is I can't hear my alarm now.", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['Earpluggs', 'noise-cancelling',] + }, + { + productName: "Big Sprouts Fertilizer", + productId: 24, + message: "My roses were barely staying alive before using this, and how I can't believe how many there are!", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['plant-food', 'gardening', ] + }, + { + productName: "Big Sprouts Fertilizer", + productId: 24, + message: "Used it in my vegetable garden and my pumpkin won 'Biggest Squash' and the fair this year!", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['plant-food', 'gardening', ] + }, + { + productName: "Big Sprouts Fertilizer", + productId: 24, + message: "Great product, but use sparingly, the ivy took over the garage this summer! ", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['plant-food', 'gardening', ] + }, + { + productName: "Big Sprouts Fertilizer", + productId: 24, + message: "Really powerful, my butterfly garden was bigger this year than I've ever seen it!", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['plant-food', 'gardening', ] + }, + { + productName: "Big Sprouts Fertilizer", + productId: 24, + message: "Use some on my indoor succulents and they doubled in size!", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['plant-food', 'gardening', ] + }, + { + productName: "Big Sprouts Fertilizer", + productId: 24, + message: "Worked so great in the garden I tried to use it on my husband's bald spot. No luck yet.", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['plant-food', 'gardening', ] + }, + { + productName: "Robo-Ruff", + productId: 25, + message: "A bit noisy, but they kids love her, and no shedding!", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['droid', 'toy', 'pet' ] + }, + { + productName: "Robo-Ruff", + productId: 25, + message: "Bought one for my niece and now she wants a real one!", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['droid', 'toy', 'pet' ] + }, + { + productName: "Robo-Ruff", + productId: 25, + message: "Wont stop barking at me, but loves my brother. Might be a glitch.", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['droid', 'toy', 'pet' ] + }, + { + productName: "Robo-Ruff", + productId: 25, + message: "Boy, what technology can do these days, smartest little bot I've ever seen! My 87 year old mum loves her!", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['droid', 'toy', 'pet' ] + }, + { + productName: "Robo-Ruff", + productId: 25, + message: "Easiest pet I've ever had, even our 3 year old can walk her :)", + dateTime: getRandomDate(new Date('1985-03-07T01:57:45.271Z'), new Date('2044-10-17T01:57:45.271Z')), + rating: randomRating(), + userName: getFullNames(1), + categories: ['droid', 'toy', 'pet' ] + }, ] -export default productReviews; \ No newline at end of file +export default productReviews; diff --git a/modules/quotes/api/quotes-routes.ts b/modules/quotes/api/quotes-routes.ts index 35601814..fa34a265 100644 --- a/modules/quotes/api/quotes-routes.ts +++ b/modules/quotes/api/quotes-routes.ts @@ -4,6 +4,25 @@ import { getQtyFromRequest } from '../../../utils/route-utils'; import quotes from '../data/quotes'; module.exports = function (app: core.Express) { + /** + * @openapi + * '/quotes/random': + * get: + * tags: + * - Quotes + * summary: Get a random quote from the database + * responses: + * '200': + * description: OK + * schema: + * type: object + * example: { quote: '', author: ''} + */ + app.get('/quotes/random', (req: Request, res: Response) => { + const quote = quotes[Math.floor(Math.random() * quotes.length)]; + res.json(quote); + }); + /** * @openapi * '/quotes/{qty}': @@ -30,23 +49,4 @@ module.exports = function (app: core.Express) { const qty = getQtyFromRequest(req); res.json(qty >= quotes.length ? quotes : quotes.slice(0, qty)); }); - - /** - * @openapi - * '/quotes/random': - * get: - * tags: - * - Quotes - * summary: Get a random quote from the database - * responses: - * '200': - * description: OK - * schema: - * type: object - * example: { quote: '', author: ''} - */ - app.get('/quotes/random', (req: Request, res: Response) => { - const quote = quotes[Math.floor(Math.random() * quotes.length)]; - res.json(quote); - }); }; diff --git a/modules/quotes/test/api/quotes-routes.test.ts b/modules/quotes/test/api/quotes-routes.test.ts new file mode 100644 index 00000000..3e490162 --- /dev/null +++ b/modules/quotes/test/api/quotes-routes.test.ts @@ -0,0 +1,26 @@ +import request from 'supertest'; +import app from '../../../../app'; + +describe('quotes api endpoints', () => { + describe('GET /quotes/:qty', () => { + it('should the correct number of quotes', async () => { + const qty = 5; + const response = await request(app).get(`/quotes/${qty}`).expect(200).expect('Content-Type', /json/); + + expect(response.body).toBeInstanceOf(Array); + expect(response.body.length).toBe(qty); + expect(response.body[0]).toHaveProperty('quote'); + expect(response.body[0]).toHaveProperty('author'); + }); + }); + + describe('GET /quotes/random', () => { + it('should return a random quote', async () => { + const response = await request(app).get('/quotes/random').expect(200).expect('Content-Type', /json/); + + expect(response.body).toBeInstanceOf(Object); + expect(response.body).toHaveProperty('quote'); + expect(response.body).toHaveProperty('author'); + }); + }); +}); diff --git a/modules/sports/api/sports-routes.ts b/modules/sports/api/sports-routes.ts index c0f51890..3bd94c76 100644 --- a/modules/sports/api/sports-routes.ts +++ b/modules/sports/api/sports-routes.ts @@ -3,7 +3,8 @@ 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"; +import LaLigaLeagueData2022 from '../data/football-laliga-league-2022'; +import SerieALeagueData2022 from '../data/football-serie-a-league-2022'; module.exports = function (app: core.Express) { /** @@ -54,8 +55,35 @@ module.exports = function (app: core.Express) { * type: object * example: { teamName: '', location: '', stadium: '', capacity: ''} */ - app.get("/sports/football/leagues/laliga/teams/:qty?", (req: Request, res: Response) => { + app.get('/sports/football/leagues/laliga/teams/:qty?', (req: Request, res: Response) => { const qty = getQtyFromRequest(req); res.json(getRandomSubArray(LaLigaLeagueData2022, qty)); }); + + /** + * @openapi + * '/sports/football/leagues/seriea/teams/{qty}': + * get: + * tags: + * - Sports + * summary: Get a list of teams in the Serie A (Italy) 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/seriea/teams/:qty?', (req: Request, res: Response) => { + const qty = getQtyFromRequest(req); + res.json(getRandomSubArray(SerieALeagueData2022, qty)); + }); }; diff --git a/modules/sports/data/football-serie-a-league-2022.ts b/modules/sports/data/football-serie-a-league-2022.ts new file mode 100644 index 00000000..dc63b8e1 --- /dev/null +++ b/modules/sports/data/football-serie-a-league-2022.ts @@ -0,0 +1,124 @@ +const SerieALeagueData2022 = [ + { + teamName: 'Atalanta', + location: 'Bergamo', + stadium: 'Gewiss Stadium', + capacity: '21,300', + }, + { + teamName: 'Bologna', + location: 'Bologna', + stadium: "Stadio Renato Dall'Ara", + capacity: '38,279', + }, + { + teamName: 'Cremonese', + location: 'Cremona', + stadium: 'Stadio Giovanni Zini', + capacity: '20,641', + }, + { + teamName: 'Empoli', + location: 'Empoli', + stadium: 'Stadio Carlo Castellani', + capacity: '16,800', + }, + { + teamName: 'Fiorentina', + location: 'Florence', + stadium: 'Stadio Artemio Franchi', + capacity: '43,147', + }, + { + teamName: 'Hellas Verona', + location: 'Verona', + stadium: "Stadio Marc'Antonio Bentegodi", + capacity: '39,211', + }, + { + teamName: 'Inter', + location: 'Milano', + stadium: 'Stadio Giuseppe Meazza', + capacity: '80,018', + }, + { + teamName: 'Juventus', + location: 'Turin', + stadium: 'Allianz Stadium', + capacity: '41,507', + }, + { + teamName: 'Lazio', + location: 'Rome', + stadium: 'Stadio Olimpico', + capacity: '72,698', + }, + { + teamName: 'Lecce', + location: 'Lecce', + stadium: 'Stadio Via del Mare', + capacity: '40,670', + }, + { + teamName: 'Milan', + location: 'Milano', + stadium: 'San Siro', + capacity: '80,018', + }, + { + teamName: 'Monza', + location: 'Monza', + stadium: 'U-Power Stadium', + capacity: '15,039', + }, + { + teamName: 'Napoli', + location: 'Naples', + stadium: 'Stadio Diego Armando Maradona', + capacity: '50,726', + }, + { + teamName: 'Roma', + location: 'Rome', + stadium: 'Stadio Olimpico', + capacity: '72,698', + }, + { + teamName: 'Salernitana', + location: 'Salerno', + stadium: 'Stadio Arechi', + capacity: '37,800', + }, + { + teamName: 'Sampdoria', + location: 'Genoa', + stadium: 'Stadio Luigi Ferraris', + capacity: '36,599', + }, + { + teamName: 'Sassuolo', + location: 'Sassuolo', + stadium: 'Mapei Stadium', + capacity: '21,525', + }, + { + teamName: 'Spezia', + location: 'La Spezia', + stadium: 'Stadio Alberto Picco', + capacity: '11,466', + }, + { + teamName: 'Torino', + location: 'Turin', + stadium: 'Stadio Olimpico Grande Torino', + capacity: '28,177', + }, + { + teamName: 'Udinese', + location: 'Udine', + stadium: 'Dacia Arena', + capacity: '25,144', + }, +]; + +export default SerieALeagueData2022; diff --git a/modules/sports/tests/api/sports-routes.test.ts b/modules/sports/tests/api/sports-routes.test.ts index e01e11b1..9649b574 100644 --- a/modules/sports/tests/api/sports-routes.test.ts +++ b/modules/sports/tests/api/sports-routes.test.ts @@ -18,4 +18,13 @@ describe('sports api endpoints', () => { expect(response.body.length).toBe(qty); }); }); + + describe('GET /sports/football/leagues/seriea/teams', () => { + it('should return a list of serie A teams', async () => { + const qty = 5; + const response = await request(app).get(`/sports/football/leagues/seriea/teams/${qty}`); + + expect(response.body.length).toBe(qty); + }); + }); }); diff --git a/modules/video/api/video-routes.ts b/modules/video/api/video-routes.ts new file mode 100644 index 00000000..3bb8756e --- /dev/null +++ b/modules/video/api/video-routes.ts @@ -0,0 +1,43 @@ +import { Request, Response } from 'express'; +import * as core from 'express-serve-static-core'; +import { getQtyFromRequest } from '../../../utils/route-utils'; +import { getVideo, getVideos } from '../utils/getVideo'; + +module.exports = function (app: core.Express) { + /** + * @openapi + * '/video/': + * get: + * tags: + * - Video + * summary: Obtain random data about a video + * responses: + * '200': + * description: Obtain an object representing random data about a video + * schema: + * $ref: '#definitions/MockVideo' + */ + app.get('/video', (req: Request, res: Response) => { + res.json(getVideo()); + }) + + /** + * @openapi + * '/video/:qty': + * get: + * tags: + * - Video + * summary: Obtain a list of random video data + * responses: + * '200': + * description: Obtain a list of random video data object representing random data about a video + * schema: + * type: array + * items: + * $ref: '#definitions/MockVideo' + */ + app.get('/video/:qty?', (req: Request, res: Response) => { + const qty = getQtyFromRequest(req); + res.json(getVideos(qty)); + }) +} \ No newline at end of file diff --git a/modules/video/consts/Video.ts b/modules/video/consts/Video.ts new file mode 100644 index 00000000..a585c5b3 --- /dev/null +++ b/modules/video/consts/Video.ts @@ -0,0 +1,38 @@ +/** + * @openapi + * definitions: + * MockVideo: + * type: object + * properties: +* title: +* type: string +* description: +* type: string +* date: +* type: string +* author: +* type: string +* views: +* type: number +* likes: +* type: number +* dislikes: +* type: number +* runtimeSeconds: +* type: number +* maxQuality: +* type: string + */ +type Video = { + title: string, + description: string, + date: Date, + author: string, + views: number, + likes: number, + dislikes: number, + runtimeSeconds: number, + maxQuality: string, +} + +export default Video; \ No newline at end of file diff --git a/modules/video/consts/videoResolutions.ts b/modules/video/consts/videoResolutions.ts new file mode 100644 index 00000000..988708c0 --- /dev/null +++ b/modules/video/consts/videoResolutions.ts @@ -0,0 +1,19 @@ +/** + * @openapi + * definitions: + * MockVideoResolution: + * type: array + * items: + * type: string + */ +const resolutions = [ + '8K', + '4K', + '1440p', + '1080p', + '720p', + '480p', + '360p', + '240p', +] +export default resolutions; \ No newline at end of file diff --git a/modules/video/tests/api/video-routes.test.ts b/modules/video/tests/api/video-routes.test.ts new file mode 100644 index 00000000..f51e79d3 --- /dev/null +++ b/modules/video/tests/api/video-routes.test.ts @@ -0,0 +1,36 @@ +import app from "../../../../app"; +import resolutions from "../../consts/videoResolutions" +let request = require('supertest'); + +// /video/ test +describe('GET /video/', () => { + it('should return random video data', async () => { + const response = await request(app).get('/video/'); + const {status, body} = response; + expect(status).toBe(200); + expect(body).toBeDefined(); + expect(typeof body.title).toBe("string"); + expect(typeof body.description).toBe("string"); + expect(body.date).toBeDefined(); + expect(typeof body.author).toBe("string"); + expect(typeof body.views).toBe("number"); + expect(body.views).toBeDefined(); + expect(typeof body.description).toBe("string"); + expect(typeof body.likes).toBe("number"); + expect(body.likes).toBeDefined(); + expect(typeof body.description).toBe("string"); + expect(typeof body.dislikes).toBe("number"); + expect(resolutions).toContain(body.maxQuality); + }) +}) + +// /video/:qty/ test +describe('GET /video/:qty', () => { + it('should return array of length specified of random video data', async () => { + const response = await request(app).get('/video/10'); + const {status, body} = response; + expect(status).toBe(200); + expect(body).toBeDefined(); + expect(body.length).toBe(10); + }) +}) \ No newline at end of file diff --git a/modules/video/utils/getVideo.ts b/modules/video/utils/getVideo.ts new file mode 100644 index 00000000..c0acfdee --- /dev/null +++ b/modules/video/utils/getVideo.ts @@ -0,0 +1,37 @@ +import { faker } from '@faker-js/faker'; +import Video from '../consts/Video'; +import resolutions from '../consts/videoResolutions'; + +const getVideo = () => { + const video : Video = { + title: faker.lorem.sentence(), + description: faker.lorem.paragraph(), + date: faker.date.past(), + author: faker.name.fullName(), + views: faker.datatype.number(), + likes: 0, + dislikes: 0, + runtimeSeconds: faker.datatype.number(), + maxQuality: resolutions[Math.floor(Math.random() * resolutions.length)], + } + + video.likes = Math.max(video.views, faker.datatype.number()); + video.dislikes = faker.datatype.number(); + if (video.dislikes > video.views - video.likes) { + video.dislikes = video.views - video.likes + } + + return video; +} + +const getVideos = (qty: number) => { + const videos = []; + + for (let i = 0; i < qty; i++) { + videos.push(getVideo()); + } + + return videos; +} + +export { getVideo, getVideos } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 5242a392..ed4567a7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,20 +1,20 @@ { "name": "mocked-api", - "version": "0.12.0", + "version": "0.14.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mocked-api", - "version": "0.12.0", + "version": "0.14.0", "license": "ISC", "dependencies": { "cors": "^2.8.5", "dotenv": "^16.0.2", "express": "^4.18.1", - "express-rate-limit": "^6.5.2", - "jest": "^29.1.2", + "express-rate-limit": "^6.6.0", "morgan": "^1.10.0", + "slugify": "^1.6.5", "supertest": "^6.2.4", "swagger-jsdoc": "^6.2.5", "swagger-ui-express": "^4.5.0" @@ -24,27 +24,32 @@ "@types/express": "4.17.14", "@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.39.0", - "all-contributors-cli": "6.23.1", + "@types/supertest": "2.0.12", + "@types/swagger-jsdoc": "6.0.1", + "@types/swagger-ui-express": "4.1.3", + "@typescript-eslint/eslint-plugin": "5.40.0", + "all-contributors-cli": "6.24.0", "eslint": "8.25.0", "eslint-config-standard-with-typescript": "23.0.0", "eslint-plugin-import": "2.26.0", "eslint-plugin-n": "15.3.0", - "eslint-plugin-promise": "6.0.1", + "eslint-plugin-promise": "6.1.0", + "jest": "29.2.0", "nodemon": "2.0.20", "prettier": "2.7.1", - "ts-jest": "^29.0.3", + "ts-jest": "29.0.3", "ts-node": "10.9.1", "typescript": "4.8.4" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -97,6 +102,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -105,9 +111,10 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz", - "integrity": "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -116,6 +123,7 @@ "version": "7.19.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", + "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", @@ -145,16 +153,18 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz", - "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==", + "version": "7.19.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.5.tgz", + "integrity": "sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==", + "dev": true, "dependencies": { - "@babel/types": "^7.19.3", + "@babel/types": "^7.19.4", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -166,6 +176,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -179,6 +190,7 @@ "version": "7.19.3", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "dev": true, "dependencies": { "@babel/compat-data": "^7.19.3", "@babel/helper-validator-option": "^7.18.6", @@ -196,6 +208,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -204,6 +217,7 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -212,6 +226,7 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, "dependencies": { "@babel/template": "^7.18.10", "@babel/types": "^7.19.0" @@ -224,6 +239,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -235,6 +251,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -246,6 +263,7 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -264,16 +282,18 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "dev": true, "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.19.4" }, "engines": { "node": ">=6.9.0" @@ -283,6 +303,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -291,9 +312,10 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -302,6 +324,7 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -310,18 +333,20 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", - "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", + "dev": true, "dependencies": { "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" }, "engines": { "node": ">=6.9.0" @@ -331,6 +356,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -344,6 +370,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -355,6 +382,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -368,6 +396,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -375,12 +404,14 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -389,6 +420,7 @@ "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" } @@ -397,6 +429,7 @@ "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" }, @@ -405,9 +438,10 @@ } }, "node_modules/@babel/parser": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz", - "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.4.tgz", + "integrity": "sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==", + "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -419,6 +453,7 @@ "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -430,6 +465,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -441,6 +477,7 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -452,6 +489,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -463,6 +501,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -474,6 +513,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -488,6 +528,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -499,6 +540,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -510,6 +552,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -521,6 +564,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -532,6 +576,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -543,6 +588,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -554,6 +600,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -568,6 +615,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -594,6 +642,7 @@ "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/parser": "^7.18.10", @@ -604,18 +653,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz", - "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.4.tgz", + "integrity": "sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.3", + "@babel/generator": "^7.19.4", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.3", - "@babel/types": "^7.19.3", + "@babel/parser": "^7.19.4", + "@babel/types": "^7.19.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -627,16 +677,18 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, "engines": { "node": ">=4" } }, "node_modules/@babel/types": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz", - "integrity": "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", + "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, @@ -647,13 +699,14 @@ "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "devOptional": true, + "dev": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -665,7 +718,7 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "devOptional": true, + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -741,6 +794,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -756,6 +810,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -764,6 +819,7 @@ "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" @@ -776,6 +832,7 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -788,6 +845,7 @@ "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" }, @@ -799,6 +857,7 @@ "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" }, @@ -813,6 +872,7 @@ "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" }, @@ -824,6 +884,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, "engines": { "node": ">=8" } @@ -832,20 +893,22 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, "engines": { "node": ">=8" } }, "node_modules/@jest/console": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.1.2.tgz", - "integrity": "sha512-ujEBCcYs82BTmRxqfHMQggSlkUZP63AE5YEaTPj7eFyJOzukkTorstOUC7L6nE3w5SYadGVAnTsQ/ZjTGL0qYQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.2.0.tgz", + "integrity": "sha512-Xz1Wu+ZZxcB3RS8U3HdkFxlRJ7kLXI/by9X7d2/gvseIWPwYu/c1EsYy77cB5iyyHGOy3whS2HycjcuzIF4Jow==", + "dev": true, "dependencies": { - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.1.2", - "jest-util": "^29.1.2", + "jest-message-util": "^29.2.0", + "jest-util": "^29.2.0", "slash": "^3.0.0" }, "engines": { @@ -853,36 +916,37 @@ } }, "node_modules/@jest/core": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.1.2.tgz", - "integrity": "sha512-sCO2Va1gikvQU2ynDN8V4+6wB7iVrD2CvT0zaRst4rglf56yLly0NQ9nuRRAWFeimRf+tCdFsb1Vk1N9LrrMPA==", - "dependencies": { - "@jest/console": "^29.1.2", - "@jest/reporters": "^29.1.2", - "@jest/test-result": "^29.1.2", - "@jest/transform": "^29.1.2", - "@jest/types": "^29.1.2", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.2.0.tgz", + "integrity": "sha512-+gyJ3bX+kGEW/eqt/0kI7fLjqiFr3AN8O+rlEl1fYRf7D8h4Sj4tBGo9YOSirvWgvemoH2EPRya35bgvcPFzHQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.2.0", + "@jest/reporters": "^29.2.0", + "@jest/test-result": "^29.2.0", + "@jest/transform": "^29.2.0", + "@jest/types": "^29.2.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.0.0", - "jest-config": "^29.1.2", - "jest-haste-map": "^29.1.2", - "jest-message-util": "^29.1.2", - "jest-regex-util": "^29.0.0", - "jest-resolve": "^29.1.2", - "jest-resolve-dependencies": "^29.1.2", - "jest-runner": "^29.1.2", - "jest-runtime": "^29.1.2", - "jest-snapshot": "^29.1.2", - "jest-util": "^29.1.2", - "jest-validate": "^29.1.2", - "jest-watcher": "^29.1.2", + "jest-changed-files": "^29.2.0", + "jest-config": "^29.2.0", + "jest-haste-map": "^29.2.0", + "jest-message-util": "^29.2.0", + "jest-regex-util": "^29.2.0", + "jest-resolve": "^29.2.0", + "jest-resolve-dependencies": "^29.2.0", + "jest-runner": "^29.2.0", + "jest-runtime": "^29.2.0", + "jest-snapshot": "^29.2.0", + "jest-util": "^29.2.0", + "jest-validate": "^29.2.0", + "jest-watcher": "^29.2.0", "micromatch": "^4.0.4", - "pretty-format": "^29.1.2", + "pretty-format": "^29.2.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -899,82 +963,88 @@ } }, "node_modules/@jest/environment": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.1.2.tgz", - "integrity": "sha512-rG7xZ2UeOfvOVzoLIJ0ZmvPl4tBEQ2n73CZJSlzUjPw4or1oSWC0s0Rk0ZX+pIBJ04aVr6hLWFn1DFtrnf8MhQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.2.0.tgz", + "integrity": "sha512-foaVv1QVPB31Mno3LlL58PxEQQOLZd9zQfCpyQQCQIpUAtdFP1INBjkphxrCfKT13VxpA0z5jFGIkmZk0DAg2Q==", + "dev": true, "dependencies": { - "@jest/fake-timers": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/fake-timers": "^29.2.0", + "@jest/types": "^29.2.0", "@types/node": "*", - "jest-mock": "^29.1.2" + "jest-mock": "^29.2.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.1.2.tgz", - "integrity": "sha512-FXw/UmaZsyfRyvZw3M6POgSNqwmuOXJuzdNiMWW9LCYo0GRoRDhg+R5iq5higmRTHQY7hx32+j7WHwinRmoILQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.2.0.tgz", + "integrity": "sha512-+3lxcYL9e0xPJGOR33utxxejn+Mulz40kY0oy0FVsmIESW87NZDJ7B1ovaIqeX0xIgPX4laS5SGlqD2uSoBMcw==", + "dev": true, "dependencies": { - "expect": "^29.1.2", - "jest-snapshot": "^29.1.2" + "expect": "^29.2.0", + "jest-snapshot": "^29.2.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.1.2.tgz", - "integrity": "sha512-4a48bhKfGj/KAH39u0ppzNTABXQ8QPccWAFUFobWBaEMSMp+sB31Z2fK/l47c4a/Mu1po2ffmfAIPxXbVTXdtg==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.2.0.tgz", + "integrity": "sha512-nz2IDF7nb1qmj9hx8Ja3MFab2q9Ml8QbOaaeJNyX5JQJHU8QUvEDiMctmhGEkk3Kzr8w8vAqz4hPk/ogJSrUhg==", + "dev": true, "dependencies": { - "jest-get-type": "^29.0.0" + "jest-get-type": "^29.2.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.1.2.tgz", - "integrity": "sha512-GppaEqS+QQYegedxVMpCe2xCXxxeYwQ7RsNx55zc8f+1q1qevkZGKequfTASI7ejmg9WwI+SJCrHe9X11bLL9Q==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.2.0.tgz", + "integrity": "sha512-mX0V0uQsgeSLTt0yTqanAhhpeUKMGd2uq+PSLAfO40h72bvfNNQ7pIEl9vIwNMFxRih1ENveEjSBsLjxGGDPSw==", + "dev": true, "dependencies": { - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "@sinonjs/fake-timers": "^9.1.2", "@types/node": "*", - "jest-message-util": "^29.1.2", - "jest-mock": "^29.1.2", - "jest-util": "^29.1.2" + "jest-message-util": "^29.2.0", + "jest-mock": "^29.2.0", + "jest-util": "^29.2.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.1.2.tgz", - "integrity": "sha512-uMgfERpJYoQmykAd0ffyMq8wignN4SvLUG6orJQRe9WAlTRc9cdpCaE/29qurXixYJVZWUqIBXhSk8v5xN1V9g==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.2.0.tgz", + "integrity": "sha512-JQxtEVNWiai1p3PIzAJZSyEqQdAJGvNKvinZDPfu0mhiYEVx6E+PiBuDWj1sVUW8hzu+R3DVqaWC9K2xcLRIAA==", + "dev": true, "dependencies": { - "@jest/environment": "^29.1.2", - "@jest/expect": "^29.1.2", - "@jest/types": "^29.1.2", - "jest-mock": "^29.1.2" + "@jest/environment": "^29.2.0", + "@jest/expect": "^29.2.0", + "@jest/types": "^29.2.0", + "jest-mock": "^29.2.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.1.2.tgz", - "integrity": "sha512-X4fiwwyxy9mnfpxL0g9DD0KcTmEIqP0jUdnc2cfa9riHy+I6Gwwp5vOZiwyg0vZxfSDxrOlK9S4+340W4d+DAA==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.2.0.tgz", + "integrity": "sha512-BXoAJatxTZ18U0cwD7C8qBo8V6vef8AXYRBZdhqE5DF9CmpqmhMfw9c7OUvYqMTnBBK9A0NgXGO4Lc9EJzdHvw==", + "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.1.2", - "@jest/test-result": "^29.1.2", - "@jest/transform": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/console": "^29.2.0", + "@jest/test-result": "^29.2.0", + "@jest/transform": "^29.2.0", + "@jest/types": "^29.2.0", "@jridgewell/trace-mapping": "^0.3.15", "@types/node": "*", "chalk": "^4.0.0", @@ -987,13 +1057,12 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.1.2", - "jest-util": "^29.1.2", - "jest-worker": "^29.1.2", + "jest-message-util": "^29.2.0", + "jest-util": "^29.2.0", + "jest-worker": "^29.2.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", "v8-to-istanbul": "^9.0.1" }, "engines": { @@ -1012,6 +1081,7 @@ "version": "29.0.0", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "dev": true, "dependencies": { "@sinclair/typebox": "^0.24.1" }, @@ -1020,9 +1090,10 @@ } }, "node_modules/@jest/source-map": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.0.0.tgz", - "integrity": "sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.2.0.tgz", + "integrity": "sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ==", + "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.15", "callsites": "^3.0.0", @@ -1033,12 +1104,13 @@ } }, "node_modules/@jest/test-result": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.1.2.tgz", - "integrity": "sha512-jjYYjjumCJjH9hHCoMhA8PCl1OxNeGgAoZ7yuGYILRJX9NjgzTN0pCT5qAoYR4jfOP8htIByvAlz9vfNSSBoVg==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.2.0.tgz", + "integrity": "sha512-l76EPJ6QqtzsCLS4aimJqWO53pxZ82o3aE+Brcmo1HJ/phb9+MR7gPhyDdN6VSGaLJCRVJBZgWEhAEz+qON0Fw==", + "dev": true, "dependencies": { - "@jest/console": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/console": "^29.2.0", + "@jest/types": "^29.2.0", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -1047,13 +1119,14 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.1.2.tgz", - "integrity": "sha512-fU6dsUqqm8sA+cd85BmeF7Gu9DsXVWFdGn9taxM6xN1cKdcP/ivSgXh5QucFRFz1oZxKv3/9DYYbq0ULly3P/Q==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.2.0.tgz", + "integrity": "sha512-NCnjZcGnVdva6IDqF7TCuFsXs2F1tohiNF9sasSJNzD7VfN5ic9XgcS/oPDalGiPLxCmGKj4kewqqrKAqBACcQ==", + "dev": true, "dependencies": { - "@jest/test-result": "^29.1.2", + "@jest/test-result": "^29.2.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.1.2", + "jest-haste-map": "^29.2.0", "slash": "^3.0.0" }, "engines": { @@ -1061,21 +1134,22 @@ } }, "node_modules/@jest/transform": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.1.2.tgz", - "integrity": "sha512-2uaUuVHTitmkx1tHF+eBjb4p7UuzBG7SXIaA/hNIkaMP6K+gXYGxP38ZcrofzqN0HeZ7A90oqsOa97WU7WZkSw==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.2.0.tgz", + "integrity": "sha512-NXMujGHy+B4DAj4dGnVPD0SIXlR2Z/N8Gp9h3mF66kcIRult1WWqY3/CEIrJcKviNWaFPYhZjCG2L3fteWzcUw==", + "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "@jridgewell/trace-mapping": "^0.3.15", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.1.2", - "jest-regex-util": "^29.0.0", - "jest-util": "^29.1.2", + "jest-haste-map": "^29.2.0", + "jest-regex-util": "^29.2.0", + "jest-util": "^29.2.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -1086,9 +1160,10 @@ } }, "node_modules/@jest/types": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.1.2.tgz", - "integrity": "sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.0.tgz", + "integrity": "sha512-mfgpQz4Z2xGo37m6KD8xEpKelaVzvYVRijmLPePn9pxgaPEtX+SqIyPNzzoeCPXKYbB4L/wYSgXDL8o3Gop78Q==", + "dev": true, "dependencies": { "@jest/schemas": "^29.0.0", "@types/istanbul-lib-coverage": "^2.0.0", @@ -1105,6 +1180,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -1117,6 +1193,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -1125,6 +1202,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -1132,12 +1210,14 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.16", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.16.tgz", - "integrity": "sha512-LCQ+NeThyJ4k1W2d+vIKdxuSt9R3pQSZ4P92m7EakaYuXcVWbHuT5bjNcqLd4Rdgi6xYWYDvBJZJLZSLanjDcA==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -1186,12 +1266,14 @@ "node_modules/@sinclair/typebox": { "version": "0.24.44", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.44.tgz", - "integrity": "sha512-ka0W0KN5i6LfrSocduwliMMpqVgohtPFidKdMEOUjoOFCHcOOYkKsPRxfs5f15oPNHTm6ERAm0GV/+/LTKeiWg==" + "integrity": "sha512-ka0W0KN5i6LfrSocduwliMMpqVgohtPFidKdMEOUjoOFCHcOOYkKsPRxfs5f15oPNHTm6ERAm0GV/+/LTKeiWg==", + "dev": true }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, "dependencies": { "type-detect": "4.0.8" } @@ -1200,6 +1282,7 @@ "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, "dependencies": { "@sinonjs/commons": "^1.7.0" } @@ -1208,30 +1291,31 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "devOptional": true + "dev": true }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "devOptional": true + "dev": true }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "devOptional": true + "dev": true }, "node_modules/@tsconfig/node16": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "devOptional": true + "dev": true }, "node_modules/@types/babel__core": { "version": "7.1.19", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "dev": true, "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0", @@ -1244,6 +1328,7 @@ "version": "7.6.4", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, "dependencies": { "@babel/types": "^7.0.0" } @@ -1252,6 +1337,7 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" @@ -1261,6 +1347,7 @@ "version": "7.18.2", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", + "dev": true, "dependencies": { "@babel/types": "^7.3.0" } @@ -1317,6 +1404,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, "dependencies": { "@types/node": "*" } @@ -1324,12 +1412,14 @@ "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -1338,6 +1428,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } @@ -1372,12 +1463,14 @@ "node_modules/@types/node": { "version": "18.7.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.6.tgz", - "integrity": "sha512-EdxgKRXgYsNITy5mjjXjVE/CS8YENSdhiagGrLqjG0pvA2owgJ6i4l7wy/PFZGC0B1/H20lWKN7ONVDNYDZm7A==" + "integrity": "sha512-EdxgKRXgYsNITy5mjjXjVE/CS8YENSdhiagGrLqjG0pvA2owgJ6i4l7wy/PFZGC0B1/H20lWKN7ONVDNYDZm7A==", + "dev": true }, "node_modules/@types/prettier": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==" + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", + "dev": true }, "node_modules/@types/qs": { "version": "6.9.7", @@ -1404,7 +1497,8 @@ "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true }, "node_modules/@types/superagent": { "version": "4.1.15", @@ -1445,6 +1539,7 @@ "version": "17.0.13", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "dev": true, "dependencies": { "@types/yargs-parser": "*" } @@ -1452,17 +1547,18 @@ "node_modules/@types/yargs-parser": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.39.0.tgz", - "integrity": "sha512-xVfKOkBm5iWMNGKQ2fwX5GVgBuHmZBO1tCRwXmY5oAIsPscfwm2UADDuNB8ZVYCtpQvJK4xpjrK7jEhcJ0zY9A==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.40.0.tgz", + "integrity": "sha512-FIBZgS3DVJgqPwJzvZTuH4HNsZhHMa9SjxTKAZTlMsPw/UzpEjcf9f4dfgDJEHjK+HboUJo123Eshl6niwEm/Q==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.39.0", - "@typescript-eslint/type-utils": "5.39.0", - "@typescript-eslint/utils": "5.39.0", + "@typescript-eslint/scope-manager": "5.40.0", + "@typescript-eslint/type-utils": "5.40.0", + "@typescript-eslint/utils": "5.40.0", "debug": "^4.3.4", "ignore": "^5.2.0", "regexpp": "^3.2.0", @@ -1486,6 +1582,53 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.0.tgz", + "integrity": "sha512-d3nPmjUeZtEWRvyReMI4I1MwPGC63E8pDoHy0BnrYjnJgilBD3hv7XOiETKLY/zTwI7kCnBDf2vWTRUVpYw0Uw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.40.0", + "@typescript-eslint/visitor-keys": "5.40.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.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.0.tgz", + "integrity": "sha512-V1KdQRTXsYpf1Y1fXCeZ+uhjW48Niiw0VGt4V8yzuaDTU8Z1Xl7yQDyQNqyAFcVhpYXIVCEuxSIWTsLDpHgTbw==", + "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.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.0.tgz", + "integrity": "sha512-ijJ+6yig+x9XplEpG2K6FUdJeQGGj/15U3S56W9IqXKJqleuD7zJ2AX/miLezwxpd7ZxDAqO87zWufKg+RPZyQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.40.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/parser": { "version": "5.39.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.39.0.tgz", @@ -1531,13 +1674,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "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==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.40.0.tgz", + "integrity": "sha512-nfuSdKEZY2TpnPz5covjJqav+g5qeBqwSHKBvz7Vm1SAfy93SwKk/JeSTymruDGItTwNijSsno5LhOHRS1pcfw==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.39.0", - "@typescript-eslint/utils": "5.39.0", + "@typescript-eslint/typescript-estree": "5.40.0", + "@typescript-eslint/utils": "5.40.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -1557,6 +1700,63 @@ } } }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.0.tgz", + "integrity": "sha512-V1KdQRTXsYpf1Y1fXCeZ+uhjW48Niiw0VGt4V8yzuaDTU8Z1Xl7yQDyQNqyAFcVhpYXIVCEuxSIWTsLDpHgTbw==", + "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/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.0.tgz", + "integrity": "sha512-b0GYlDj8TLTOqwX7EGbw2gL5EXS2CPEWhF9nGJiGmEcmlpNBjyHsTwbqpyIEPVpl6br4UcBOYlcI2FJVtJkYhg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.40.0", + "@typescript-eslint/visitor-keys": "5.40.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/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.0.tgz", + "integrity": "sha512-ijJ+6yig+x9XplEpG2K6FUdJeQGGj/15U3S56W9IqXKJqleuD7zJ2AX/miLezwxpd7ZxDAqO87zWufKg+RPZyQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.40.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/types": { "version": "5.39.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.39.0.tgz", @@ -1598,17 +1798,18 @@ } }, "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==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.40.0.tgz", + "integrity": "sha512-MO0y3T5BQ5+tkkuYZJBjePewsY+cQnfkYeRqS6tPh28niiIwPnQ1t59CSRcs1ZwJJNOdWw7rv9pF8aP58IMihA==", "dev": true, "dependencies": { "@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", + "@typescript-eslint/scope-manager": "5.40.0", + "@typescript-eslint/types": "5.40.0", + "@typescript-eslint/typescript-estree": "5.40.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -1621,6 +1822,80 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.0.tgz", + "integrity": "sha512-d3nPmjUeZtEWRvyReMI4I1MwPGC63E8pDoHy0BnrYjnJgilBD3hv7XOiETKLY/zTwI7kCnBDf2vWTRUVpYw0Uw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.40.0", + "@typescript-eslint/visitor-keys": "5.40.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.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.0.tgz", + "integrity": "sha512-V1KdQRTXsYpf1Y1fXCeZ+uhjW48Niiw0VGt4V8yzuaDTU8Z1Xl7yQDyQNqyAFcVhpYXIVCEuxSIWTsLDpHgTbw==", + "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.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.0.tgz", + "integrity": "sha512-b0GYlDj8TLTOqwX7EGbw2gL5EXS2CPEWhF9nGJiGmEcmlpNBjyHsTwbqpyIEPVpl6br4UcBOYlcI2FJVtJkYhg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.40.0", + "@typescript-eslint/visitor-keys": "5.40.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.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.0.tgz", + "integrity": "sha512-ijJ+6yig+x9XplEpG2K6FUdJeQGGj/15U3S56W9IqXKJqleuD7zJ2AX/miLezwxpd7ZxDAqO87zWufKg+RPZyQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.40.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/visitor-keys": { "version": "5.39.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.39.0.tgz", @@ -1660,7 +1935,7 @@ "version": "8.8.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "devOptional": true, + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -1681,7 +1956,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "devOptional": true, + "dev": true, "engines": { "node": ">=0.4.0" } @@ -1703,9 +1978,9 @@ } }, "node_modules/all-contributors-cli": { - "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==", + "version": "6.24.0", + "resolved": "https://registry.npmjs.org/all-contributors-cli/-/all-contributors-cli-6.24.0.tgz", + "integrity": "sha512-7oSKr2PnqxsOotuSwciltcFTS1eVRdjR0cn99hbElfff7gRQBShVhsf/XBprY41sLcgqTk0l0MKgKv6QNgZdMg==", "dev": true, "dependencies": { "@babel/runtime": "^7.7.6", @@ -1730,6 +2005,7 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "dependencies": { "type-fest": "^0.21.3" }, @@ -1744,6 +2020,7 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, "engines": { "node": ">=10" }, @@ -1755,6 +2032,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -1763,6 +2041,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -1777,6 +2056,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -1789,7 +2069,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "devOptional": true + "dev": true }, "node_modules/argparse": { "version": "2.0.1", @@ -1864,14 +2144,15 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/babel-jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.1.2.tgz", - "integrity": "sha512-IuG+F3HTHryJb7gacC7SQ59A9kO56BctUsT67uJHp1mMCHUOMXpDwOHWGifWqdWVknN2WNkCVQELPjXx0aLJ9Q==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.2.0.tgz", + "integrity": "sha512-c8FkrW1chgcbyBqOo7jFGpQYfVnb43JqjQGV+C2r94k2rZJOukYOZ6+csAqKE4ms+PHc+yevnONxs27jQIxylw==", + "dev": true, "dependencies": { - "@jest/transform": "^29.1.2", + "@jest/transform": "^29.2.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.0.2", + "babel-preset-jest": "^29.2.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -1887,6 +2168,7 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -1899,9 +2181,10 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "29.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.0.2.tgz", - "integrity": "sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.2.0.tgz", + "integrity": "sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA==", + "dev": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -1916,6 +2199,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -1935,11 +2219,12 @@ } }, "node_modules/babel-preset-jest": { - "version": "29.0.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.0.2.tgz", - "integrity": "sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.2.0.tgz", + "integrity": "sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA==", + "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^29.0.2", + "babel-plugin-jest-hoist": "^29.2.0", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { @@ -2028,6 +2313,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -2039,6 +2325,7 @@ "version": "4.21.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, "funding": [ { "type": "opencollective", @@ -2078,6 +2365,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, "dependencies": { "node-int64": "^0.4.0" } @@ -2085,7 +2373,8 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "node_modules/builtins": { "version": "5.0.1", @@ -2125,6 +2414,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, "engines": { "node": ">=6" } @@ -2133,14 +2423,16 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001418", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz", - "integrity": "sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==", + "version": "1.0.30001420", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001420.tgz", + "integrity": "sha512-OnyeJ9ascFA9roEj72ok2Ikp7PHJTKubtEJIQ/VK3fdsS50q4KWy+Z5X0A1/GswEItKX0ctAp8n4SYDE7wTu6A==", + "dev": true, "funding": [ { "type": "opencollective", @@ -2156,6 +2448,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2171,6 +2464,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, "engines": { "node": ">=10" } @@ -2223,12 +2517,14 @@ "node_modules/ci-info": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", - "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==" + "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==", + "dev": true }, "node_modules/cjs-module-lexer": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true }, "node_modules/cli-cursor": { "version": "3.1.0", @@ -2266,6 +2562,7 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -2274,12 +2571,14 @@ "node_modules/collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -2290,7 +2589,8 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/combined-stream": { "version": "1.0.8", @@ -2341,17 +2641,10 @@ } }, "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true }, "node_modules/cookie": { "version": "0.5.0", @@ -2387,12 +2680,13 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "devOptional": true + "dev": true }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2430,7 +2724,8 @@ "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true }, "node_modules/deep-is": { "version": "0.1.4", @@ -2442,6 +2737,7 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -2491,6 +2787,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, "engines": { "node": ">=8" } @@ -2514,15 +2811,16 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "devOptional": true, + "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/diff-sequences": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.0.0.tgz", - "integrity": "sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.2.0.tgz", + "integrity": "sha512-413SY5JpYeSBZxmenGEmCVQ8mCgtFJF0w9PROdaS6z987XC2Pd2GOKqOITLtMftmyFZqgtCOb/QA7/Z3ZXfzIw==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -2564,14 +2862,16 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "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==" + "version": "1.4.283", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.283.tgz", + "integrity": "sha512-g6RQ9zCOV+U5QVHW9OpFR7rdk/V7xfopNXnyAamdpFgCHgZ1sjI8VuR1+zG2YG/TZk+tQ8mpNkug4P8FU0fuOA==", + "dev": true }, "node_modules/emittery": { "version": "0.10.2", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "dev": true, "engines": { "node": ">=12" }, @@ -2582,7 +2882,8 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/encodeurl": { "version": "1.0.2", @@ -2596,6 +2897,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "dependencies": { "is-arrayish": "^0.2.1" } @@ -2668,6 +2970,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { "node": ">=6" } @@ -2956,9 +3259,9 @@ } }, "node_modules/eslint-plugin-promise": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz", - "integrity": "sha512-uM4Tgo5u3UWQiroOyDEsYcVMOo7re3zmno0IZmB5auxoaQNIceAbXEkSt8RNrKtaYehARHG06pYK6K1JhtP0Zw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.0.tgz", + "integrity": "sha512-NYCfDZF/KHt27p06nFAttgWuFyIDSUMnNaJBIY1FY9GpBFhdT2vMG64HlFguSgcJeyM5by6Yr5csSOuJm60eXQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3059,6 +3362,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -3138,6 +3442,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -3160,20 +3465,22 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/expect": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.1.2.tgz", - "integrity": "sha512-AuAGn1uxva5YBbBlXb+2JPxJRuemZsmlGcapPXWNSBNsQtAULfjioREGBWuI0EOvYUKjDnrCy8PW5Zlr1md5mw==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.2.0.tgz", + "integrity": "sha512-03ClF3GWwUqd9Grgkr9ZSdaCJGMRA69PQ8jT7o+Bx100VlGiAFf9/8oIm9Qve7ZVJhuJxFftqFhviZJRxxNfvg==", + "dev": true, "dependencies": { - "@jest/expect-utils": "^29.1.2", - "jest-get-type": "^29.0.0", - "jest-matcher-utils": "^29.1.2", - "jest-message-util": "^29.1.2", - "jest-util": "^29.1.2" + "@jest/expect-utils": "^29.2.0", + "jest-get-type": "^29.2.0", + "jest-matcher-utils": "^29.2.0", + "jest-message-util": "^29.2.0", + "jest-util": "^29.2.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -3295,7 +3602,8 @@ "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", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", @@ -3321,6 +3629,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, "dependencies": { "bser": "2.1.1" } @@ -3365,6 +3674,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3496,6 +3806,19 @@ "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", @@ -3532,6 +3855,7 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -3540,6 +3864,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -3561,6 +3886,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, "engines": { "node": ">=8.0.0" } @@ -3569,6 +3895,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, "engines": { "node": ">=10" }, @@ -3596,6 +3923,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3661,7 +3989,8 @@ "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true }, "node_modules/grapheme-splitter": { "version": "1.0.4", @@ -3693,6 +4022,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -3746,7 +4076,8 @@ "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, "node_modules/http-errors": { "version": "2.0.0", @@ -3767,6 +4098,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, "engines": { "node": ">=10.17.0" } @@ -3817,6 +4149,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -3835,6 +4168,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -3902,7 +4236,8 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, "node_modules/is-bigint": { "version": "1.0.4", @@ -3960,6 +4295,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -3995,6 +4331,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -4003,6 +4340,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, "engines": { "node": ">=6" } @@ -4035,6 +4373,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { "node": ">=0.12.0" } @@ -4086,6 +4425,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, "engines": { "node": ">=8" }, @@ -4138,12 +4478,14 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, "engines": { "node": ">=8" } @@ -4152,6 +4494,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -4167,6 +4510,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -4175,6 +4519,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", @@ -4188,6 +4533,7 @@ "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==", + "dev": true, "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -4201,6 +4547,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -4210,14 +4557,15 @@ } }, "node_modules/jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.1.2.tgz", - "integrity": "sha512-5wEIPpCezgORnqf+rCaYD1SK+mNN7NsstWzIsuvsnrhR/hSxXWd82oI7DkrbJ+XTD28/eG8SmxdGvukrGGK6Tw==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.2.0.tgz", + "integrity": "sha512-6krPemKUXCEu5Fh3j6ZVoLMjpTQVm0OCU+7f3K/9gllX8wNIE6NSCQ6s0q2RDoiKLRaQlVRHyscjSPRPqCI0Fg==", + "dev": true, "dependencies": { - "@jest/core": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/core": "^29.2.0", + "@jest/types": "^29.2.0", "import-local": "^3.0.2", - "jest-cli": "^29.1.2" + "jest-cli": "^29.2.0" }, "bin": { "jest": "bin/jest.js" @@ -4235,9 +4583,10 @@ } }, "node_modules/jest-changed-files": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.0.0.tgz", - "integrity": "sha512-28/iDMDrUpGoCitTURuDqUzWQoWmOmOKOFST1mi2lwh62X4BFf6khgH3uSuo1e49X/UDjuApAj3w0wLOex4VPQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.2.0.tgz", + "integrity": "sha512-qPVmLLyBmvF5HJrY7krDisx6Voi8DmlV3GZYX0aFNbaQsZeoz1hfxcCMbqDGuQCxU1dJy9eYc2xscE8QrCCYaA==", + "dev": true, "dependencies": { "execa": "^5.0.0", "p-limit": "^3.1.0" @@ -4247,27 +4596,28 @@ } }, "node_modules/jest-circus": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.1.2.tgz", - "integrity": "sha512-ajQOdxY6mT9GtnfJRZBRYS7toNIJayiiyjDyoZcnvPRUPwJ58JX0ci0PKAKUo2C1RyzlHw0jabjLGKksO42JGA==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.2.0.tgz", + "integrity": "sha512-bpJRMe+VtvYlF3q8JNx+/cAo4FYvNCiR5s7Z0Scf8aC+KJ2ineSjZKtw1cIZbythlplkiro0My8nc65pfCqJ3A==", + "dev": true, "dependencies": { - "@jest/environment": "^29.1.2", - "@jest/expect": "^29.1.2", - "@jest/test-result": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/environment": "^29.2.0", + "@jest/expect": "^29.2.0", + "@jest/test-result": "^29.2.0", + "@jest/types": "^29.2.0", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.1.2", - "jest-matcher-utils": "^29.1.2", - "jest-message-util": "^29.1.2", - "jest-runtime": "^29.1.2", - "jest-snapshot": "^29.1.2", - "jest-util": "^29.1.2", + "jest-each": "^29.2.0", + "jest-matcher-utils": "^29.2.0", + "jest-message-util": "^29.2.0", + "jest-runtime": "^29.2.0", + "jest-snapshot": "^29.2.0", + "jest-util": "^29.2.0", "p-limit": "^3.1.0", - "pretty-format": "^29.1.2", + "pretty-format": "^29.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -4276,20 +4626,21 @@ } }, "node_modules/jest-cli": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.1.2.tgz", - "integrity": "sha512-vsvBfQ7oS2o4MJdAH+4u9z76Vw5Q8WBQF5MchDbkylNknZdrPTX1Ix7YRJyTlOWqRaS7ue/cEAn+E4V1MWyMzw==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.2.0.tgz", + "integrity": "sha512-/581TzbXeO+5kbtSlhXEthGiVJCC8AP0jgT0iZINAAMW+tTFj2uWU7z+HNUH5yIYdHV7AvRr0fWLrmHJGIruHg==", + "dev": true, "dependencies": { - "@jest/core": "^29.1.2", - "@jest/test-result": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/core": "^29.2.0", + "@jest/test-result": "^29.2.0", + "@jest/types": "^29.2.0", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.1.2", - "jest-util": "^29.1.2", - "jest-validate": "^29.1.2", + "jest-config": "^29.2.0", + "jest-util": "^29.2.0", + "jest-validate": "^29.2.0", "prompts": "^2.0.1", "yargs": "^17.3.1" }, @@ -4312,6 +4663,7 @@ "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==", + "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -4325,6 +4677,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4341,6 +4694,7 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "engines": { "node": ">=10" } @@ -4349,6 +4703,7 @@ "version": "17.6.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz", "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==", + "dev": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -4363,30 +4718,31 @@ } }, "node_modules/jest-config": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.1.2.tgz", - "integrity": "sha512-EC3Zi86HJUOz+2YWQcJYQXlf0zuBhJoeyxLM6vb6qJsVmpP7KcCP1JnyF0iaqTaXdBP8Rlwsvs7hnKWQWWLwwA==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.2.0.tgz", + "integrity": "sha512-IkdCsrHIoxDPZAyFcdtQrCQ3uftLqns6Joj0tlbxiAQW4k/zTXmIygqWBmPNxO9FbFkDrhtYZiLHXjaJh9rS+Q==", + "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.1.2", - "@jest/types": "^29.1.2", - "babel-jest": "^29.1.2", + "@jest/test-sequencer": "^29.2.0", + "@jest/types": "^29.2.0", + "babel-jest": "^29.2.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.1.2", - "jest-environment-node": "^29.1.2", - "jest-get-type": "^29.0.0", - "jest-regex-util": "^29.0.0", - "jest-resolve": "^29.1.2", - "jest-runner": "^29.1.2", - "jest-util": "^29.1.2", - "jest-validate": "^29.1.2", + "jest-circus": "^29.2.0", + "jest-environment-node": "^29.2.0", + "jest-get-type": "^29.2.0", + "jest-regex-util": "^29.2.0", + "jest-resolve": "^29.2.0", + "jest-runner": "^29.2.0", + "jest-util": "^29.2.0", + "jest-validate": "^29.2.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^29.1.2", + "pretty-format": "^29.2.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -4407,23 +4763,25 @@ } }, "node_modules/jest-diff": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.1.2.tgz", - "integrity": "sha512-4GQts0aUopVvecIT4IwD/7xsBaMhKTYoM4/njE/aVw9wpw+pIUVp8Vab/KnSzSilr84GnLBkaP3JLDnQYCKqVQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.2.0.tgz", + "integrity": "sha512-GsH07qQL+/D/GxlnU+sSg9GL3fBOcuTlmtr3qr2pnkiODCwubNN2/7slW4m3CvxDsEus/VEOfQKRFLyXsUlnZw==", + "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^29.0.0", - "jest-get-type": "^29.0.0", - "pretty-format": "^29.1.2" + "diff-sequences": "^29.2.0", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.2.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-docblock": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.0.0.tgz", - "integrity": "sha512-s5Kpra/kLzbqu9dEjov30kj1n4tfu3e7Pl8v+f8jOkeWNqM6Ds8jRaJfZow3ducoQUrf2Z4rs2N5S3zXnb83gw==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.2.0.tgz", + "integrity": "sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A==", + "dev": true, "dependencies": { "detect-newline": "^3.0.0" }, @@ -4432,58 +4790,62 @@ } }, "node_modules/jest-each": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.1.2.tgz", - "integrity": "sha512-AmTQp9b2etNeEwMyr4jc0Ql/LIX/dhbgP21gHAizya2X6rUspHn2gysMXaj6iwWuOJ2sYRgP8c1P4cXswgvS1A==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.2.0.tgz", + "integrity": "sha512-h4LeC3L/R7jIMfTdYowevPIssvcPYQ7Qzs+pCSYsJgPztIizXwKmnfhZXBA4WVqdmvMcpmseYEXb67JT7IJ2eg==", + "dev": true, "dependencies": { - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "chalk": "^4.0.0", - "jest-get-type": "^29.0.0", - "jest-util": "^29.1.2", - "pretty-format": "^29.1.2" + "jest-get-type": "^29.2.0", + "jest-util": "^29.2.0", + "pretty-format": "^29.2.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-environment-node": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.1.2.tgz", - "integrity": "sha512-C59yVbdpY8682u6k/lh8SUMDJPbOyCHOTgLVVi1USWFxtNV+J8fyIwzkg+RJIVI30EKhKiAGNxYaFr3z6eyNhQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.2.0.tgz", + "integrity": "sha512-b4qQGVStPMvtZG97Ac0rvnmSIjCZturFU7MQRMp4JDFl7zoaDLTtXmFjFP1tNmi9te6kR8d+Htbv3nYeoaIz6g==", + "dev": true, "dependencies": { - "@jest/environment": "^29.1.2", - "@jest/fake-timers": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/environment": "^29.2.0", + "@jest/fake-timers": "^29.2.0", + "@jest/types": "^29.2.0", "@types/node": "*", - "jest-mock": "^29.1.2", - "jest-util": "^29.1.2" + "jest-mock": "^29.2.0", + "jest-util": "^29.2.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-get-type": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.0.0.tgz", - "integrity": "sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", + "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.1.2.tgz", - "integrity": "sha512-xSjbY8/BF11Jh3hGSPfYTa/qBFrm3TPM7WU8pU93m2gqzORVLkHFWvuZmFsTEBPRKndfewXhMOuzJNHyJIZGsw==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.2.0.tgz", + "integrity": "sha512-qu9lGFi7qJ8v37egS1phZZUJYiMyWnKwu83NlNT1qs50TbedIX2hFl+9ztsJ7U/ENaHwk1/Bs8fqOIQsScIRwg==", + "dev": true, "dependencies": { - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.0.0", - "jest-util": "^29.1.2", - "jest-worker": "^29.1.2", + "jest-regex-util": "^29.2.0", + "jest-util": "^29.2.0", + "jest-worker": "^29.2.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -4495,43 +4857,46 @@ } }, "node_modules/jest-leak-detector": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.1.2.tgz", - "integrity": "sha512-TG5gAZJpgmZtjb6oWxBLf2N6CfQ73iwCe6cofu/Uqv9iiAm6g502CAnGtxQaTfpHECBdVEMRBhomSXeLnoKjiQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.2.0.tgz", + "integrity": "sha512-FXT9sCFdct42+oOqGIr/9kmUw3RbhvpkwidCBT5ySHHoWNGd3c9n7HXpFKjEz9UnUITRCGdn0q2s6Sxrq36kwg==", + "dev": true, "dependencies": { - "jest-get-type": "^29.0.0", - "pretty-format": "^29.1.2" + "jest-get-type": "^29.2.0", + "pretty-format": "^29.2.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.1.2.tgz", - "integrity": "sha512-MV5XrD3qYSW2zZSHRRceFzqJ39B2z11Qv0KPyZYxnzDHFeYZGJlgGi0SW+IXSJfOewgJp/Km/7lpcFT+cgZypw==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.2.0.tgz", + "integrity": "sha512-FcEfKZ4vm28yCdBsvC69EkrEhcfex+IYlRctNJXsRG9+WC3WxgBNORnECIgqUtj7o/h1d8o7xB/dFUiLi4bqtw==", + "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.1.2", - "jest-get-type": "^29.0.0", - "pretty-format": "^29.1.2" + "jest-diff": "^29.2.0", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.2.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-message-util": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.1.2.tgz", - "integrity": "sha512-9oJ2Os+Qh6IlxLpmvshVbGUiSkZVc2FK+uGOm6tghafnB2RyjKAxMZhtxThRMxfX1J1SOMhTn9oK3/MutRWQJQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.2.0.tgz", + "integrity": "sha512-arBfk5yMFMTnMB22GyG601xGSGthA02vWSewPaxoFo0F9wBqDOyxccPbCcYu8uibw3kduSHXdCOd1PsLSgdomg==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.1.2", + "pretty-format": "^29.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -4540,13 +4905,14 @@ } }, "node_modules/jest-mock": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.1.2.tgz", - "integrity": "sha512-PFDAdjjWbjPUtQPkQufvniXIS3N9Tv7tbibePEjIIprzjgo0qQlyUiVMrT4vL8FaSJo1QXifQUOuPH3HQC/aMA==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.2.0.tgz", + "integrity": "sha512-aiWGR0P8ivssIO17xkehLGFtCcef2ZwQFNPwEer1jQLHxPctDlIg3Hs6QMq1KpPz5dkCcgM7mwGif4a9IPznlg==", + "dev": true, "dependencies": { - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "@types/node": "*", - "jest-util": "^29.1.2" + "jest-util": "^29.2.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -4556,6 +4922,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, "engines": { "node": ">=6" }, @@ -4569,24 +4936,26 @@ } }, "node_modules/jest-regex-util": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.0.0.tgz", - "integrity": "sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.2.0.tgz", + "integrity": "sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.1.2.tgz", - "integrity": "sha512-7fcOr+k7UYSVRJYhSmJHIid3AnDBcLQX3VmT9OSbPWsWz1MfT7bcoerMhADKGvKCoMpOHUQaDHtQoNp/P9JMGg==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.2.0.tgz", + "integrity": "sha512-f5c0ljNg2guDBCC7wi92vAhNuA0BtAG5vkY7Fob0c7sUMU1g87mTXqRmjrVFe2XvdwP5m5T/e5KJsCKu9hRvBA==", + "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.1.2", + "jest-haste-map": "^29.2.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.1.2", - "jest-validate": "^29.1.2", + "jest-util": "^29.2.0", + "jest-validate": "^29.2.0", "resolve": "^1.20.0", "resolve.exports": "^1.1.0", "slash": "^3.0.0" @@ -4596,41 +4965,43 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.1.2.tgz", - "integrity": "sha512-44yYi+yHqNmH3OoWZvPgmeeiwKxhKV/0CfrzaKLSkZG9gT973PX8i+m8j6pDrTYhhHoiKfF3YUFg/6AeuHw4HQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.2.0.tgz", + "integrity": "sha512-Cd0Z39sDntEnfR9PoUdFHUAGDvtKI0/7Wt73l3lt03A3yQ+A6Qi3XmBuqGjdFl2QbXaPa937oLhilG612P8HGQ==", + "dev": true, "dependencies": { - "jest-regex-util": "^29.0.0", - "jest-snapshot": "^29.1.2" + "jest-regex-util": "^29.2.0", + "jest-snapshot": "^29.2.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-runner": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.1.2.tgz", - "integrity": "sha512-yy3LEWw8KuBCmg7sCGDIqKwJlULBuNIQa2eFSVgVASWdXbMYZ9H/X0tnXt70XFoGf92W2sOQDOIFAA6f2BG04Q==", - "dependencies": { - "@jest/console": "^29.1.2", - "@jest/environment": "^29.1.2", - "@jest/test-result": "^29.1.2", - "@jest/transform": "^29.1.2", - "@jest/types": "^29.1.2", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.2.0.tgz", + "integrity": "sha512-VPBrCwl9fM2mc5yk6yZhNrgXzRJMD5jfLmntkMLlrVq4hQPWbRK998iJlR+DOGCO04TC9PPYLntOJ001Vnf28g==", + "dev": true, + "dependencies": { + "@jest/console": "^29.2.0", + "@jest/environment": "^29.2.0", + "@jest/test-result": "^29.2.0", + "@jest/transform": "^29.2.0", + "@jest/types": "^29.2.0", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.10.2", "graceful-fs": "^4.2.9", - "jest-docblock": "^29.0.0", - "jest-environment-node": "^29.1.2", - "jest-haste-map": "^29.1.2", - "jest-leak-detector": "^29.1.2", - "jest-message-util": "^29.1.2", - "jest-resolve": "^29.1.2", - "jest-runtime": "^29.1.2", - "jest-util": "^29.1.2", - "jest-watcher": "^29.1.2", - "jest-worker": "^29.1.2", + "jest-docblock": "^29.2.0", + "jest-environment-node": "^29.2.0", + "jest-haste-map": "^29.2.0", + "jest-leak-detector": "^29.2.0", + "jest-message-util": "^29.2.0", + "jest-resolve": "^29.2.0", + "jest-runtime": "^29.2.0", + "jest-util": "^29.2.0", + "jest-watcher": "^29.2.0", + "jest-worker": "^29.2.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -4639,30 +5010,31 @@ } }, "node_modules/jest-runtime": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.1.2.tgz", - "integrity": "sha512-jr8VJLIf+cYc+8hbrpt412n5jX3tiXmpPSYTGnwcvNemY+EOuLNiYnHJ3Kp25rkaAcTWOEI4ZdOIQcwYcXIAZw==", - "dependencies": { - "@jest/environment": "^29.1.2", - "@jest/fake-timers": "^29.1.2", - "@jest/globals": "^29.1.2", - "@jest/source-map": "^29.0.0", - "@jest/test-result": "^29.1.2", - "@jest/transform": "^29.1.2", - "@jest/types": "^29.1.2", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.2.0.tgz", + "integrity": "sha512-+GDmzCrswQF+mvI0upTYMe/OPYnlRRNLLDHM9AFLp2y7zxWoDoYgb8DL3WwJ8d9m743AzrnvBV9JQHi/0ed7dg==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.2.0", + "@jest/fake-timers": "^29.2.0", + "@jest/globals": "^29.2.0", + "@jest/source-map": "^29.2.0", + "@jest/test-result": "^29.2.0", + "@jest/transform": "^29.2.0", + "@jest/types": "^29.2.0", "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.1.2", - "jest-message-util": "^29.1.2", - "jest-mock": "^29.1.2", - "jest-regex-util": "^29.0.0", - "jest-resolve": "^29.1.2", - "jest-snapshot": "^29.1.2", - "jest-util": "^29.1.2", + "jest-haste-map": "^29.2.0", + "jest-message-util": "^29.2.0", + "jest-mock": "^29.2.0", + "jest-regex-util": "^29.2.0", + "jest-resolve": "^29.2.0", + "jest-snapshot": "^29.2.0", + "jest-util": "^29.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -4671,9 +5043,10 @@ } }, "node_modules/jest-snapshot": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.1.2.tgz", - "integrity": "sha512-rYFomGpVMdBlfwTYxkUp3sjD6usptvZcONFYNqVlaz4EpHPnDvlWjvmOQ9OCSNKqYZqLM2aS3wq01tWujLg7gg==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.2.0.tgz", + "integrity": "sha512-YCKrOR0PLRXROmww73fHO9oeY4tL+LPQXWR3yml1+hKbQDR8j1VUrVzB65hKSJJgxBOr1vWx+hmz2by8JjAU5w==", + "dev": true, "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -4681,23 +5054,23 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.1.2", - "@jest/transform": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/expect-utils": "^29.2.0", + "@jest/transform": "^29.2.0", + "@jest/types": "^29.2.0", "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.1.2", + "expect": "^29.2.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.1.2", - "jest-get-type": "^29.0.0", - "jest-haste-map": "^29.1.2", - "jest-matcher-utils": "^29.1.2", - "jest-message-util": "^29.1.2", - "jest-util": "^29.1.2", + "jest-diff": "^29.2.0", + "jest-get-type": "^29.2.0", + "jest-haste-map": "^29.2.0", + "jest-matcher-utils": "^29.2.0", + "jest-message-util": "^29.2.0", + "jest-util": "^29.2.0", "natural-compare": "^1.4.0", - "pretty-format": "^29.1.2", + "pretty-format": "^29.2.0", "semver": "^7.3.5" }, "engines": { @@ -4705,11 +5078,12 @@ } }, "node_modules/jest-util": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.1.2.tgz", - "integrity": "sha512-vPCk9F353i0Ymx3WQq3+a4lZ07NXu9Ca8wya6o4Fe4/aO1e1awMMprZ3woPFpKwghEOW+UXgd15vVotuNN9ONQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.2.0.tgz", + "integrity": "sha512-8M1dx12ujkBbnhwytrezWY0Ut79hbflwodE+qZKjxSRz5qt4xDp6dQQJaOCFvCmE0QJqp9KyEK33lpPNjnhevw==", + "dev": true, "dependencies": { - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -4721,16 +5095,17 @@ } }, "node_modules/jest-validate": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.1.2.tgz", - "integrity": "sha512-k71pOslNlV8fVyI+mEySy2pq9KdXdgZtm7NHrBX8LghJayc3wWZH0Yr0mtYNGaCU4F1OLPXRkwZR0dBm/ClshA==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.2.0.tgz", + "integrity": "sha512-4Vl51bPNeFeDok9aJiOnrC6tqJbOp4iMCYlewoC2ZzYJZ5+6pfr3KObAdx5wP8auHcg2MRaguiqj5OdScZa72g==", + "dev": true, "dependencies": { - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^29.0.0", + "jest-get-type": "^29.2.0", "leven": "^3.1.0", - "pretty-format": "^29.1.2" + "pretty-format": "^29.2.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -4740,6 +5115,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, "engines": { "node": ">=10" }, @@ -4748,17 +5124,18 @@ } }, "node_modules/jest-watcher": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.1.2.tgz", - "integrity": "sha512-6JUIUKVdAvcxC6bM8/dMgqY2N4lbT+jZVsxh0hCJRbwkIEnbr/aPjMQ28fNDI5lB51Klh00MWZZeVf27KBUj5w==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.2.0.tgz", + "integrity": "sha512-bRh0JdUeN+cl9XfK7tMnXLm4Mv70hG2SZlqbkFe5CTs7oeCkbwlGBk/mEfEJ63mrxZ8LPbnfaMpfSmkhEQBEGA==", + "dev": true, "dependencies": { - "@jest/test-result": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/test-result": "^29.2.0", + "@jest/types": "^29.2.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.10.2", - "jest-util": "^29.1.2", + "jest-util": "^29.2.0", "string-length": "^4.0.1" }, "engines": { @@ -4766,12 +5143,13 @@ } }, "node_modules/jest-worker": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.1.2.tgz", - "integrity": "sha512-AdTZJxKjTSPHbXT/AIOjQVmoFx0LHFcVabWu0sxI7PAy7rFf8c0upyvgBKgguVXdM4vY74JdwkyD4hSmpTW8jA==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.2.0.tgz", + "integrity": "sha512-mluOlMbRX1H59vGVzPcVg2ALfCausbBpxC8a2KWOzInhYHZibbHH8CB0C1JkmkpfurrkOYgF7FPmypuom1OM9A==", + "dev": true, "dependencies": { "@types/node": "*", - "jest-util": "^29.1.2", + "jest-util": "^29.2.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -4783,6 +5161,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4802,7 +5181,8 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "node_modules/js-yaml": { "version": "4.1.0", @@ -4819,6 +5199,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, "bin": { "jsesc": "bin/jsesc" }, @@ -4843,7 +5224,8 @@ "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", @@ -4861,6 +5243,7 @@ "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" }, @@ -4872,6 +5255,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, "engines": { "node": ">=6" } @@ -4880,6 +5264,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, "engines": { "node": ">=6" } @@ -4900,7 +5285,8 @@ "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true }, "node_modules/locate-path": { "version": "6.0.0", @@ -4965,6 +5351,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "dependencies": { "semver": "^6.0.0" }, @@ -4979,6 +5366,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -4987,12 +5375,13 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "devOptional": true + "dev": true }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, "dependencies": { "tmpl": "1.0.5" } @@ -5013,7 +5402,8 @@ "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "node_modules/merge2": { "version": "1.4.1", @@ -5036,6 +5426,7 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -5078,6 +5469,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, "engines": { "node": ">=6" } @@ -5152,7 +5544,8 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/negotiator": { "version": "0.6.3", @@ -5185,12 +5578,14 @@ "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true }, "node_modules/node-releases": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true }, "node_modules/nodemon": { "version": "2.0.20", @@ -5278,6 +5673,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5286,6 +5682,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, "dependencies": { "path-key": "^3.0.0" }, @@ -5384,6 +5781,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "dependencies": { "mimic-fn": "^2.1.0" }, @@ -5430,6 +5828,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -5459,6 +5858,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, "engines": { "node": ">=6" } @@ -5479,6 +5879,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -5504,6 +5905,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { "node": ">=8" } @@ -5520,6 +5922,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "engines": { "node": ">=8" } @@ -5527,7 +5930,8 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-to-regexp": { "version": "0.1.7", @@ -5558,12 +5962,14 @@ "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -5587,6 +5993,7 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true, "engines": { "node": ">= 6" } @@ -5595,6 +6002,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, "dependencies": { "find-up": "^4.0.0" }, @@ -5606,6 +6014,7 @@ "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" @@ -5618,6 +6027,7 @@ "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" }, @@ -5629,6 +6039,7 @@ "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" }, @@ -5643,6 +6054,7 @@ "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" }, @@ -5675,9 +6087,10 @@ } }, "node_modules/pretty-format": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.1.2.tgz", - "integrity": "sha512-CGJ6VVGXVRP2o2Dorl4mAwwvDWT25luIsYhkyVQW32E4nL+TgW939J7LlKT/npq5Cpq6j3s+sy+13yk7xYpBmg==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.0.tgz", + "integrity": "sha512-QCSUFdwOi924g24czhOH5eTkXxUCqlLGZBRCySlwDYHIXRJkdGyjJc9nZaqhlFBZws8dq5Dvk0lCilsmlfsPxw==", + "dev": true, "dependencies": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -5691,6 +6104,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { "node": ">=10" }, @@ -5702,6 +6116,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -5796,7 +6211,8 @@ "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true }, "node_modules/readdirp": { "version": "3.6.0", @@ -5849,6 +6265,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5863,6 +6280,7 @@ "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -5879,6 +6297,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, "dependencies": { "resolve-from": "^5.0.0" }, @@ -5890,6 +6309,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, "engines": { "node": ">=8" } @@ -5907,6 +6327,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true, "engines": { "node": ">=10" } @@ -6115,6 +6536,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6126,6 +6548,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "engines": { "node": ">=8" } @@ -6146,7 +6569,8 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/simple-update-notifier": { "version": "1.0.7", @@ -6172,20 +6596,31 @@ "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, "engines": { "node": ">=8" } }, + "node_modules/slugify": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.5.tgz", + "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -6194,6 +6629,7 @@ "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -6202,12 +6638,14 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true }, "node_modules/stack-utils": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -6219,6 +6657,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, "engines": { "node": ">=8" } @@ -6235,6 +6674,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -6247,6 +6687,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6288,6 +6729,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6299,6 +6741,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, "engines": { "node": ">=8" } @@ -6307,6 +6750,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, "engines": { "node": ">=6" } @@ -6315,6 +6759,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "engines": { "node": ">=8" }, @@ -6370,6 +6815,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -6377,22 +6823,11 @@ "node": ">=8" } }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.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", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -6468,25 +6903,11 @@ "express": ">=4.0.0" } }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -6523,12 +6944,14 @@ "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, "engines": { "node": ">=4" } @@ -6537,6 +6960,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -6617,7 +7041,7 @@ "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "devOptional": true, + "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -6726,6 +7150,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, "engines": { "node": ">=4" } @@ -6758,7 +7183,7 @@ "version": "4.8.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "devOptional": true, + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6800,6 +7225,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -6842,12 +7268,13 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "devOptional": true + "dev": true }, "node_modules/v8-to-istanbul": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -6877,6 +7304,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, "dependencies": { "makeerror": "1.0.12" } @@ -6901,6 +7329,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -6965,6 +7394,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -7018,6 +7448,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, "engines": { "node": ">=12" } @@ -7091,7 +7522,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "devOptional": true, + "dev": true, "engines": { "node": ">=6" } @@ -7100,6 +7531,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "engines": { "node": ">=10" }, @@ -7138,6 +7570,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -7181,19 +7614,22 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, "requires": { "@babel/highlight": "^7.18.6" } }, "@babel/compat-data": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz", - "integrity": "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==" + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", + "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", + "dev": true }, "@babel/core": { "version": "7.19.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", + "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", @@ -7215,16 +7651,18 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, "@babel/generator": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz", - "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==", + "version": "7.19.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.5.tgz", + "integrity": "sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==", + "dev": true, "requires": { - "@babel/types": "^7.19.3", + "@babel/types": "^7.19.4", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -7233,6 +7671,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -7245,6 +7684,7 @@ "version": "7.19.3", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "dev": true, "requires": { "@babel/compat-data": "^7.19.3", "@babel/helper-validator-option": "^7.18.6", @@ -7255,19 +7695,22 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, "@babel/helper-environment-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true }, "@babel/helper-function-name": { "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, "requires": { "@babel/template": "^7.18.10", "@babel/types": "^7.19.0" @@ -7277,6 +7720,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -7285,6 +7729,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -7293,6 +7738,7 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -7307,53 +7753,61 @@ "@babel/helper-plugin-utils": { "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", - "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==" + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "dev": true }, "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", + "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "dev": true, "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.19.4" } }, "@babel/helper-split-export-declaration": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, "requires": { "@babel/types": "^7.18.6" } }, "@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==" + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true }, "@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true }, "@babel/helper-validator-option": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true }, "@babel/helpers": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", - "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", + "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", + "dev": true, "requires": { "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/traverse": "^7.19.4", + "@babel/types": "^7.19.4" } }, "@babel/highlight": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -7364,6 +7818,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -7372,6 +7827,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -7382,6 +7838,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -7389,22 +7846,26 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "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==" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "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" } @@ -7412,14 +7873,16 @@ } }, "@babel/parser": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz", - "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==" + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.4.tgz", + "integrity": "sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==", + "dev": true }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -7428,6 +7891,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -7436,6 +7900,7 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" } @@ -7444,6 +7909,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -7452,6 +7918,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -7460,6 +7927,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -7468,6 +7936,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -7476,6 +7945,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -7484,6 +7954,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -7492,6 +7963,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -7500,6 +7972,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -7508,6 +7981,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -7516,6 +7990,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } @@ -7524,6 +7999,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.18.6" } @@ -7541,6 +8017,7 @@ "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, "requires": { "@babel/code-frame": "^7.18.6", "@babel/parser": "^7.18.10", @@ -7548,18 +8025,19 @@ } }, "@babel/traverse": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz", - "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.4.tgz", + "integrity": "sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==", + "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.3", + "@babel/generator": "^7.19.4", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.3", - "@babel/types": "^7.19.3", + "@babel/parser": "^7.19.4", + "@babel/types": "^7.19.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -7567,16 +8045,18 @@ "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true } } }, "@babel/types": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz", - "integrity": "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", + "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", + "dev": true, "requires": { - "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } @@ -7584,13 +8064,14 @@ "@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true }, "@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "devOptional": true, + "dev": true, "requires": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -7599,7 +8080,7 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "devOptional": true, + "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -7657,6 +8138,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, "requires": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -7669,6 +8151,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -7677,6 +8160,7 @@ "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" @@ -7686,6 +8170,7 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -7695,6 +8180,7 @@ "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" } @@ -7703,6 +8189,7 @@ "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" } @@ -7711,6 +8198,7 @@ "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" } @@ -7718,125 +8206,135 @@ "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true } } }, "@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true }, "@jest/console": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.1.2.tgz", - "integrity": "sha512-ujEBCcYs82BTmRxqfHMQggSlkUZP63AE5YEaTPj7eFyJOzukkTorstOUC7L6nE3w5SYadGVAnTsQ/ZjTGL0qYQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.2.0.tgz", + "integrity": "sha512-Xz1Wu+ZZxcB3RS8U3HdkFxlRJ7kLXI/by9X7d2/gvseIWPwYu/c1EsYy77cB5iyyHGOy3whS2HycjcuzIF4Jow==", + "dev": true, "requires": { - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.1.2", - "jest-util": "^29.1.2", + "jest-message-util": "^29.2.0", + "jest-util": "^29.2.0", "slash": "^3.0.0" } }, "@jest/core": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.1.2.tgz", - "integrity": "sha512-sCO2Va1gikvQU2ynDN8V4+6wB7iVrD2CvT0zaRst4rglf56yLly0NQ9nuRRAWFeimRf+tCdFsb1Vk1N9LrrMPA==", - "requires": { - "@jest/console": "^29.1.2", - "@jest/reporters": "^29.1.2", - "@jest/test-result": "^29.1.2", - "@jest/transform": "^29.1.2", - "@jest/types": "^29.1.2", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.2.0.tgz", + "integrity": "sha512-+gyJ3bX+kGEW/eqt/0kI7fLjqiFr3AN8O+rlEl1fYRf7D8h4Sj4tBGo9YOSirvWgvemoH2EPRya35bgvcPFzHQ==", + "dev": true, + "requires": { + "@jest/console": "^29.2.0", + "@jest/reporters": "^29.2.0", + "@jest/test-result": "^29.2.0", + "@jest/transform": "^29.2.0", + "@jest/types": "^29.2.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.0.0", - "jest-config": "^29.1.2", - "jest-haste-map": "^29.1.2", - "jest-message-util": "^29.1.2", - "jest-regex-util": "^29.0.0", - "jest-resolve": "^29.1.2", - "jest-resolve-dependencies": "^29.1.2", - "jest-runner": "^29.1.2", - "jest-runtime": "^29.1.2", - "jest-snapshot": "^29.1.2", - "jest-util": "^29.1.2", - "jest-validate": "^29.1.2", - "jest-watcher": "^29.1.2", + "jest-changed-files": "^29.2.0", + "jest-config": "^29.2.0", + "jest-haste-map": "^29.2.0", + "jest-message-util": "^29.2.0", + "jest-regex-util": "^29.2.0", + "jest-resolve": "^29.2.0", + "jest-resolve-dependencies": "^29.2.0", + "jest-runner": "^29.2.0", + "jest-runtime": "^29.2.0", + "jest-snapshot": "^29.2.0", + "jest-util": "^29.2.0", + "jest-validate": "^29.2.0", + "jest-watcher": "^29.2.0", "micromatch": "^4.0.4", - "pretty-format": "^29.1.2", + "pretty-format": "^29.2.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" } }, "@jest/environment": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.1.2.tgz", - "integrity": "sha512-rG7xZ2UeOfvOVzoLIJ0ZmvPl4tBEQ2n73CZJSlzUjPw4or1oSWC0s0Rk0ZX+pIBJ04aVr6hLWFn1DFtrnf8MhQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.2.0.tgz", + "integrity": "sha512-foaVv1QVPB31Mno3LlL58PxEQQOLZd9zQfCpyQQCQIpUAtdFP1INBjkphxrCfKT13VxpA0z5jFGIkmZk0DAg2Q==", + "dev": true, "requires": { - "@jest/fake-timers": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/fake-timers": "^29.2.0", + "@jest/types": "^29.2.0", "@types/node": "*", - "jest-mock": "^29.1.2" + "jest-mock": "^29.2.0" } }, "@jest/expect": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.1.2.tgz", - "integrity": "sha512-FXw/UmaZsyfRyvZw3M6POgSNqwmuOXJuzdNiMWW9LCYo0GRoRDhg+R5iq5higmRTHQY7hx32+j7WHwinRmoILQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.2.0.tgz", + "integrity": "sha512-+3lxcYL9e0xPJGOR33utxxejn+Mulz40kY0oy0FVsmIESW87NZDJ7B1ovaIqeX0xIgPX4laS5SGlqD2uSoBMcw==", + "dev": true, "requires": { - "expect": "^29.1.2", - "jest-snapshot": "^29.1.2" + "expect": "^29.2.0", + "jest-snapshot": "^29.2.0" } }, "@jest/expect-utils": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.1.2.tgz", - "integrity": "sha512-4a48bhKfGj/KAH39u0ppzNTABXQ8QPccWAFUFobWBaEMSMp+sB31Z2fK/l47c4a/Mu1po2ffmfAIPxXbVTXdtg==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.2.0.tgz", + "integrity": "sha512-nz2IDF7nb1qmj9hx8Ja3MFab2q9Ml8QbOaaeJNyX5JQJHU8QUvEDiMctmhGEkk3Kzr8w8vAqz4hPk/ogJSrUhg==", + "dev": true, "requires": { - "jest-get-type": "^29.0.0" + "jest-get-type": "^29.2.0" } }, "@jest/fake-timers": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.1.2.tgz", - "integrity": "sha512-GppaEqS+QQYegedxVMpCe2xCXxxeYwQ7RsNx55zc8f+1q1qevkZGKequfTASI7ejmg9WwI+SJCrHe9X11bLL9Q==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.2.0.tgz", + "integrity": "sha512-mX0V0uQsgeSLTt0yTqanAhhpeUKMGd2uq+PSLAfO40h72bvfNNQ7pIEl9vIwNMFxRih1ENveEjSBsLjxGGDPSw==", + "dev": true, "requires": { - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "@sinonjs/fake-timers": "^9.1.2", "@types/node": "*", - "jest-message-util": "^29.1.2", - "jest-mock": "^29.1.2", - "jest-util": "^29.1.2" + "jest-message-util": "^29.2.0", + "jest-mock": "^29.2.0", + "jest-util": "^29.2.0" } }, "@jest/globals": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.1.2.tgz", - "integrity": "sha512-uMgfERpJYoQmykAd0ffyMq8wignN4SvLUG6orJQRe9WAlTRc9cdpCaE/29qurXixYJVZWUqIBXhSk8v5xN1V9g==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.2.0.tgz", + "integrity": "sha512-JQxtEVNWiai1p3PIzAJZSyEqQdAJGvNKvinZDPfu0mhiYEVx6E+PiBuDWj1sVUW8hzu+R3DVqaWC9K2xcLRIAA==", + "dev": true, "requires": { - "@jest/environment": "^29.1.2", - "@jest/expect": "^29.1.2", - "@jest/types": "^29.1.2", - "jest-mock": "^29.1.2" + "@jest/environment": "^29.2.0", + "@jest/expect": "^29.2.0", + "@jest/types": "^29.2.0", + "jest-mock": "^29.2.0" } }, "@jest/reporters": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.1.2.tgz", - "integrity": "sha512-X4fiwwyxy9mnfpxL0g9DD0KcTmEIqP0jUdnc2cfa9riHy+I6Gwwp5vOZiwyg0vZxfSDxrOlK9S4+340W4d+DAA==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.2.0.tgz", + "integrity": "sha512-BXoAJatxTZ18U0cwD7C8qBo8V6vef8AXYRBZdhqE5DF9CmpqmhMfw9c7OUvYqMTnBBK9A0NgXGO4Lc9EJzdHvw==", + "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.1.2", - "@jest/test-result": "^29.1.2", - "@jest/transform": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/console": "^29.2.0", + "@jest/test-result": "^29.2.0", + "@jest/transform": "^29.2.0", + "@jest/types": "^29.2.0", "@jridgewell/trace-mapping": "^0.3.15", "@types/node": "*", "chalk": "^4.0.0", @@ -7849,13 +8347,12 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.1.2", - "jest-util": "^29.1.2", - "jest-worker": "^29.1.2", + "jest-message-util": "^29.2.0", + "jest-util": "^29.2.0", + "jest-worker": "^29.2.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", "v8-to-istanbul": "^9.0.1" } }, @@ -7863,14 +8360,16 @@ "version": "29.0.0", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "dev": true, "requires": { "@sinclair/typebox": "^0.24.1" } }, "@jest/source-map": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.0.0.tgz", - "integrity": "sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.2.0.tgz", + "integrity": "sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ==", + "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.15", "callsites": "^3.0.0", @@ -7878,43 +8377,46 @@ } }, "@jest/test-result": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.1.2.tgz", - "integrity": "sha512-jjYYjjumCJjH9hHCoMhA8PCl1OxNeGgAoZ7yuGYILRJX9NjgzTN0pCT5qAoYR4jfOP8htIByvAlz9vfNSSBoVg==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.2.0.tgz", + "integrity": "sha512-l76EPJ6QqtzsCLS4aimJqWO53pxZ82o3aE+Brcmo1HJ/phb9+MR7gPhyDdN6VSGaLJCRVJBZgWEhAEz+qON0Fw==", + "dev": true, "requires": { - "@jest/console": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/console": "^29.2.0", + "@jest/types": "^29.2.0", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.1.2.tgz", - "integrity": "sha512-fU6dsUqqm8sA+cd85BmeF7Gu9DsXVWFdGn9taxM6xN1cKdcP/ivSgXh5QucFRFz1oZxKv3/9DYYbq0ULly3P/Q==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.2.0.tgz", + "integrity": "sha512-NCnjZcGnVdva6IDqF7TCuFsXs2F1tohiNF9sasSJNzD7VfN5ic9XgcS/oPDalGiPLxCmGKj4kewqqrKAqBACcQ==", + "dev": true, "requires": { - "@jest/test-result": "^29.1.2", + "@jest/test-result": "^29.2.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.1.2", + "jest-haste-map": "^29.2.0", "slash": "^3.0.0" } }, "@jest/transform": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.1.2.tgz", - "integrity": "sha512-2uaUuVHTitmkx1tHF+eBjb4p7UuzBG7SXIaA/hNIkaMP6K+gXYGxP38ZcrofzqN0HeZ7A90oqsOa97WU7WZkSw==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.2.0.tgz", + "integrity": "sha512-NXMujGHy+B4DAj4dGnVPD0SIXlR2Z/N8Gp9h3mF66kcIRult1WWqY3/CEIrJcKviNWaFPYhZjCG2L3fteWzcUw==", + "dev": true, "requires": { "@babel/core": "^7.11.6", - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "@jridgewell/trace-mapping": "^0.3.15", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.1.2", - "jest-regex-util": "^29.0.0", - "jest-util": "^29.1.2", + "jest-haste-map": "^29.2.0", + "jest-regex-util": "^29.2.0", + "jest-util": "^29.2.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -7922,9 +8424,10 @@ } }, "@jest/types": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.1.2.tgz", - "integrity": "sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.0.tgz", + "integrity": "sha512-mfgpQz4Z2xGo37m6KD8xEpKelaVzvYVRijmLPePn9pxgaPEtX+SqIyPNzzoeCPXKYbB4L/wYSgXDL8o3Gop78Q==", + "dev": true, "requires": { "@jest/schemas": "^29.0.0", "@types/istanbul-lib-coverage": "^2.0.0", @@ -7938,6 +8441,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, "requires": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -7946,22 +8450,26 @@ "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true }, "@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true }, "@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.16", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.16.tgz", - "integrity": "sha512-LCQ+NeThyJ4k1W2d+vIKdxuSt9R3pQSZ4P92m7EakaYuXcVWbHuT5bjNcqLd4Rdgi6xYWYDvBJZJLZSLanjDcA==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, "requires": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -8001,12 +8509,14 @@ "@sinclair/typebox": { "version": "0.24.44", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.44.tgz", - "integrity": "sha512-ka0W0KN5i6LfrSocduwliMMpqVgohtPFidKdMEOUjoOFCHcOOYkKsPRxfs5f15oPNHTm6ERAm0GV/+/LTKeiWg==" + "integrity": "sha512-ka0W0KN5i6LfrSocduwliMMpqVgohtPFidKdMEOUjoOFCHcOOYkKsPRxfs5f15oPNHTm6ERAm0GV/+/LTKeiWg==", + "dev": true }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, "requires": { "type-detect": "4.0.8" } @@ -8015,6 +8525,7 @@ "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" } @@ -8023,30 +8534,31 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "devOptional": true + "dev": true }, "@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "devOptional": true + "dev": true }, "@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "devOptional": true + "dev": true }, "@tsconfig/node16": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "devOptional": true + "dev": true }, "@types/babel__core": { "version": "7.1.19", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", + "dev": true, "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0", @@ -8059,6 +8571,7 @@ "version": "7.6.4", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, "requires": { "@babel/types": "^7.0.0" } @@ -8067,6 +8580,7 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, "requires": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" @@ -8076,6 +8590,7 @@ "version": "7.18.2", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", + "dev": true, "requires": { "@babel/types": "^7.3.0" } @@ -8132,6 +8647,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, "requires": { "@types/node": "*" } @@ -8139,12 +8655,14 @@ "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true }, "@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } @@ -8153,6 +8671,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, "requires": { "@types/istanbul-lib-report": "*" } @@ -8187,12 +8706,14 @@ "@types/node": { "version": "18.7.6", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.6.tgz", - "integrity": "sha512-EdxgKRXgYsNITy5mjjXjVE/CS8YENSdhiagGrLqjG0pvA2owgJ6i4l7wy/PFZGC0B1/H20lWKN7ONVDNYDZm7A==" + "integrity": "sha512-EdxgKRXgYsNITy5mjjXjVE/CS8YENSdhiagGrLqjG0pvA2owgJ6i4l7wy/PFZGC0B1/H20lWKN7ONVDNYDZm7A==", + "dev": true }, "@types/prettier": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==" + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", + "dev": true }, "@types/qs": { "version": "6.9.7", @@ -8219,7 +8740,8 @@ "@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true }, "@types/superagent": { "version": "4.1.15", @@ -8260,6 +8782,7 @@ "version": "17.0.13", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", + "dev": true, "requires": { "@types/yargs-parser": "*" } @@ -8267,22 +8790,51 @@ "@types/yargs-parser": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.39.0.tgz", - "integrity": "sha512-xVfKOkBm5iWMNGKQ2fwX5GVgBuHmZBO1tCRwXmY5oAIsPscfwm2UADDuNB8ZVYCtpQvJK4xpjrK7jEhcJ0zY9A==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.40.0.tgz", + "integrity": "sha512-FIBZgS3DVJgqPwJzvZTuH4HNsZhHMa9SjxTKAZTlMsPw/UzpEjcf9f4dfgDJEHjK+HboUJo123Eshl6niwEm/Q==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.39.0", - "@typescript-eslint/type-utils": "5.39.0", - "@typescript-eslint/utils": "5.39.0", + "@typescript-eslint/scope-manager": "5.40.0", + "@typescript-eslint/type-utils": "5.40.0", + "@typescript-eslint/utils": "5.40.0", "debug": "^4.3.4", "ignore": "^5.2.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.0.tgz", + "integrity": "sha512-d3nPmjUeZtEWRvyReMI4I1MwPGC63E8pDoHy0BnrYjnJgilBD3hv7XOiETKLY/zTwI7kCnBDf2vWTRUVpYw0Uw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.40.0", + "@typescript-eslint/visitor-keys": "5.40.0" + } + }, + "@typescript-eslint/types": { + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.0.tgz", + "integrity": "sha512-V1KdQRTXsYpf1Y1fXCeZ+uhjW48Niiw0VGt4V8yzuaDTU8Z1Xl7yQDyQNqyAFcVhpYXIVCEuxSIWTsLDpHgTbw==", + "dev": true + }, + "@typescript-eslint/visitor-keys": { + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.0.tgz", + "integrity": "sha512-ijJ+6yig+x9XplEpG2K6FUdJeQGGj/15U3S56W9IqXKJqleuD7zJ2AX/miLezwxpd7ZxDAqO87zWufKg+RPZyQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.40.0", + "eslint-visitor-keys": "^3.3.0" + } + } } }, "@typescript-eslint/parser": { @@ -8308,15 +8860,48 @@ } }, "@typescript-eslint/type-utils": { - "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==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.40.0.tgz", + "integrity": "sha512-nfuSdKEZY2TpnPz5covjJqav+g5qeBqwSHKBvz7Vm1SAfy93SwKk/JeSTymruDGItTwNijSsno5LhOHRS1pcfw==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.39.0", - "@typescript-eslint/utils": "5.39.0", + "@typescript-eslint/typescript-estree": "5.40.0", + "@typescript-eslint/utils": "5.40.0", "debug": "^4.3.4", "tsutils": "^3.21.0" + }, + "dependencies": { + "@typescript-eslint/types": { + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.0.tgz", + "integrity": "sha512-V1KdQRTXsYpf1Y1fXCeZ+uhjW48Niiw0VGt4V8yzuaDTU8Z1Xl7yQDyQNqyAFcVhpYXIVCEuxSIWTsLDpHgTbw==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.0.tgz", + "integrity": "sha512-b0GYlDj8TLTOqwX7EGbw2gL5EXS2CPEWhF9nGJiGmEcmlpNBjyHsTwbqpyIEPVpl6br4UcBOYlcI2FJVtJkYhg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.40.0", + "@typescript-eslint/visitor-keys": "5.40.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.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.0.tgz", + "integrity": "sha512-ijJ+6yig+x9XplEpG2K6FUdJeQGGj/15U3S56W9IqXKJqleuD7zJ2AX/miLezwxpd7ZxDAqO87zWufKg+RPZyQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.40.0", + "eslint-visitor-keys": "^3.3.0" + } + } } }, "@typescript-eslint/types": { @@ -8341,17 +8926,61 @@ } }, "@typescript-eslint/utils": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.39.0.tgz", - "integrity": "sha512-+DnY5jkpOpgj+EBtYPyHRjXampJfC0yUZZzfzLuUWVZvCuKqSdJVC8UhdWipIw7VKNTfwfAPiOWzYkAwuIhiAg==", + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.40.0.tgz", + "integrity": "sha512-MO0y3T5BQ5+tkkuYZJBjePewsY+cQnfkYeRqS6tPh28niiIwPnQ1t59CSRcs1ZwJJNOdWw7rv9pF8aP58IMihA==", "dev": true, "requires": { "@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", + "@typescript-eslint/scope-manager": "5.40.0", + "@typescript-eslint/types": "5.40.0", + "@typescript-eslint/typescript-estree": "5.40.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.0.tgz", + "integrity": "sha512-d3nPmjUeZtEWRvyReMI4I1MwPGC63E8pDoHy0BnrYjnJgilBD3hv7XOiETKLY/zTwI7kCnBDf2vWTRUVpYw0Uw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.40.0", + "@typescript-eslint/visitor-keys": "5.40.0" + } + }, + "@typescript-eslint/types": { + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.0.tgz", + "integrity": "sha512-V1KdQRTXsYpf1Y1fXCeZ+uhjW48Niiw0VGt4V8yzuaDTU8Z1Xl7yQDyQNqyAFcVhpYXIVCEuxSIWTsLDpHgTbw==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.0.tgz", + "integrity": "sha512-b0GYlDj8TLTOqwX7EGbw2gL5EXS2CPEWhF9nGJiGmEcmlpNBjyHsTwbqpyIEPVpl6br4UcBOYlcI2FJVtJkYhg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.40.0", + "@typescript-eslint/visitor-keys": "5.40.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.40.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.0.tgz", + "integrity": "sha512-ijJ+6yig+x9XplEpG2K6FUdJeQGGj/15U3S56W9IqXKJqleuD7zJ2AX/miLezwxpd7ZxDAqO87zWufKg+RPZyQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.40.0", + "eslint-visitor-keys": "^3.3.0" + } + } } }, "@typescript-eslint/visitor-keys": { @@ -8383,7 +9012,7 @@ "version": "8.8.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "devOptional": true + "dev": true }, "acorn-jsx": { "version": "5.3.2", @@ -8396,7 +9025,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "devOptional": true + "dev": true }, "ajv": { "version": "6.12.6", @@ -8411,9 +9040,9 @@ } }, "all-contributors-cli": { - "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==", + "version": "6.24.0", + "resolved": "https://registry.npmjs.org/all-contributors-cli/-/all-contributors-cli-6.24.0.tgz", + "integrity": "sha512-7oSKr2PnqxsOotuSwciltcFTS1eVRdjR0cn99hbElfff7gRQBShVhsf/XBprY41sLcgqTk0l0MKgKv6QNgZdMg==", "dev": true, "requires": { "@babel/runtime": "^7.7.6", @@ -8432,6 +9061,7 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "requires": { "type-fest": "^0.21.3" }, @@ -8439,19 +9069,22 @@ "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true } } }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -8460,6 +9093,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -8469,7 +9103,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "devOptional": true + "dev": true }, "argparse": { "version": "2.0.1", @@ -8529,14 +9163,15 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "babel-jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.1.2.tgz", - "integrity": "sha512-IuG+F3HTHryJb7gacC7SQ59A9kO56BctUsT67uJHp1mMCHUOMXpDwOHWGifWqdWVknN2WNkCVQELPjXx0aLJ9Q==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.2.0.tgz", + "integrity": "sha512-c8FkrW1chgcbyBqOo7jFGpQYfVnb43JqjQGV+C2r94k2rZJOukYOZ6+csAqKE4ms+PHc+yevnONxs27jQIxylw==", + "dev": true, "requires": { - "@jest/transform": "^29.1.2", + "@jest/transform": "^29.2.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.0.2", + "babel-preset-jest": "^29.2.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -8546,6 +9181,7 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -8555,9 +9191,10 @@ } }, "babel-plugin-jest-hoist": { - "version": "29.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.0.2.tgz", - "integrity": "sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.2.0.tgz", + "integrity": "sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA==", + "dev": true, "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -8569,6 +9206,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, "requires": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -8585,11 +9223,12 @@ } }, "babel-preset-jest": { - "version": "29.0.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.0.2.tgz", - "integrity": "sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.2.0.tgz", + "integrity": "sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA==", + "dev": true, "requires": { - "babel-plugin-jest-hoist": "^29.0.2", + "babel-plugin-jest-hoist": "^29.2.0", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -8666,6 +9305,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -8674,6 +9314,7 @@ "version": "4.21.4", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, "requires": { "caniuse-lite": "^1.0.30001400", "electron-to-chromium": "^1.4.251", @@ -8694,6 +9335,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, "requires": { "node-int64": "^0.4.0" } @@ -8701,7 +9343,8 @@ "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "builtins": { "version": "5.0.1", @@ -8734,22 +9377,26 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true }, "caniuse-lite": { - "version": "1.0.30001418", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz", - "integrity": "sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==" + "version": "1.0.30001420", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001420.tgz", + "integrity": "sha512-OnyeJ9ascFA9roEj72ok2Ikp7PHJTKubtEJIQ/VK3fdsS50q4KWy+Z5X0A1/GswEItKX0ctAp8n4SYDE7wTu6A==", + "dev": true }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8758,7 +9405,8 @@ "char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true }, "chardet": { "version": "0.7.0", @@ -8796,12 +9444,14 @@ "ci-info": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.5.0.tgz", - "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==" + "integrity": "sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==", + "dev": true }, "cjs-module-lexer": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" + "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", + "dev": true }, "cli-cursor": { "version": "3.1.0", @@ -8832,17 +9482,20 @@ "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true }, "collect-v8-coverage": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -8850,7 +9503,8 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "combined-stream": { "version": "1.0.8", @@ -8889,19 +9543,10 @@ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true }, "cookie": { "version": "0.5.0", @@ -8931,12 +9576,13 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "devOptional": true + "dev": true }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -8960,7 +9606,8 @@ "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true }, "deep-is": { "version": "0.1.4", @@ -8971,7 +9618,8 @@ "deepmerge": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true }, "define-properties": { "version": "1.1.4", @@ -9001,7 +9649,8 @@ "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true }, "dezalgo": { "version": "1.0.3", @@ -9022,12 +9671,13 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "devOptional": true + "dev": true }, "diff-sequences": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.0.0.tgz", - "integrity": "sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA==" + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.2.0.tgz", + "integrity": "sha512-413SY5JpYeSBZxmenGEmCVQ8mCgtFJF0w9PROdaS6z987XC2Pd2GOKqOITLtMftmyFZqgtCOb/QA7/Z3ZXfzIw==", + "dev": true }, "dir-glob": { "version": "3.0.1", @@ -9057,19 +9707,22 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-to-chromium": { - "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==" + "version": "1.4.283", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.283.tgz", + "integrity": "sha512-g6RQ9zCOV+U5QVHW9OpFR7rdk/V7xfopNXnyAamdpFgCHgZ1sjI8VuR1+zG2YG/TZk+tQ8mpNkug4P8FU0fuOA==", + "dev": true }, "emittery": { "version": "0.10.2", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==" + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "dev": true }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "encodeurl": { "version": "1.0.2", @@ -9080,6 +9733,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -9139,7 +9793,8 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true }, "escape-html": { "version": "1.0.3", @@ -9365,9 +10020,9 @@ } }, "eslint-plugin-promise": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz", - "integrity": "sha512-uM4Tgo5u3UWQiroOyDEsYcVMOo7re3zmno0IZmB5auxoaQNIceAbXEkSt8RNrKtaYehARHG06pYK6K1JhtP0Zw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.0.tgz", + "integrity": "sha512-NYCfDZF/KHt27p06nFAttgWuFyIDSUMnNaJBIY1FY9GpBFhdT2vMG64HlFguSgcJeyM5by6Yr5csSOuJm60eXQ==", "dev": true, "requires": {} }, @@ -9418,7 +10073,8 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true }, "esquery": { "version": "1.4.0", @@ -9474,6 +10130,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -9489,18 +10146,20 @@ "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true }, "expect": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.1.2.tgz", - "integrity": "sha512-AuAGn1uxva5YBbBlXb+2JPxJRuemZsmlGcapPXWNSBNsQtAULfjioREGBWuI0EOvYUKjDnrCy8PW5Zlr1md5mw==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.2.0.tgz", + "integrity": "sha512-03ClF3GWwUqd9Grgkr9ZSdaCJGMRA69PQ8jT7o+Bx100VlGiAFf9/8oIm9Qve7ZVJhuJxFftqFhviZJRxxNfvg==", + "dev": true, "requires": { - "@jest/expect-utils": "^29.1.2", - "jest-get-type": "^29.0.0", - "jest-matcher-utils": "^29.1.2", - "jest-message-util": "^29.1.2", - "jest-util": "^29.1.2" + "@jest/expect-utils": "^29.2.0", + "jest-get-type": "^29.2.0", + "jest-matcher-utils": "^29.2.0", + "jest-message-util": "^29.2.0", + "jest-util": "^29.2.0" } }, "express": { @@ -9606,7 +10265,8 @@ "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", @@ -9632,6 +10292,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, "requires": { "bser": "2.1.1" } @@ -9666,6 +10327,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -9768,6 +10430,12 @@ "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", @@ -9794,12 +10462,14 @@ "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, "get-intrinsic": { "version": "1.1.3", @@ -9814,12 +10484,14 @@ "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true }, "get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true }, "get-symbol-description": { "version": "1.0.0", @@ -9835,6 +10507,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9879,7 +10552,8 @@ "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true }, "grapheme-splitter": { "version": "1.0.4", @@ -9904,7 +10578,8 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "has-property-descriptors": { "version": "1.0.0", @@ -9937,7 +10612,8 @@ "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, "http-errors": { "version": "2.0.0", @@ -9954,7 +10630,8 @@ "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true }, "iconv-lite": { "version": "0.4.24", @@ -9990,6 +10667,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, "requires": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -9998,7 +10676,8 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true }, "inflight": { "version": "1.0.6", @@ -10054,7 +10733,8 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, "is-bigint": { "version": "1.0.4", @@ -10094,6 +10774,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dev": true, "requires": { "has": "^1.0.3" } @@ -10116,12 +10797,14 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true }, "is-glob": { "version": "4.0.3", @@ -10141,7 +10824,8 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-number-object": { "version": "1.0.7", @@ -10174,7 +10858,8 @@ "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true }, "is-string": { "version": "1.0.7", @@ -10206,17 +10891,20 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true }, "istanbul-lib-instrument": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, "requires": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -10228,7 +10916,8 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -10236,6 +10925,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, "requires": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", @@ -10246,6 +10936,7 @@ "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==", + "dev": true, "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -10256,72 +10947,77 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, "requires": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" } }, "jest": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.1.2.tgz", - "integrity": "sha512-5wEIPpCezgORnqf+rCaYD1SK+mNN7NsstWzIsuvsnrhR/hSxXWd82oI7DkrbJ+XTD28/eG8SmxdGvukrGGK6Tw==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.2.0.tgz", + "integrity": "sha512-6krPemKUXCEu5Fh3j6ZVoLMjpTQVm0OCU+7f3K/9gllX8wNIE6NSCQ6s0q2RDoiKLRaQlVRHyscjSPRPqCI0Fg==", + "dev": true, "requires": { - "@jest/core": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/core": "^29.2.0", + "@jest/types": "^29.2.0", "import-local": "^3.0.2", - "jest-cli": "^29.1.2" + "jest-cli": "^29.2.0" } }, "jest-changed-files": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.0.0.tgz", - "integrity": "sha512-28/iDMDrUpGoCitTURuDqUzWQoWmOmOKOFST1mi2lwh62X4BFf6khgH3uSuo1e49X/UDjuApAj3w0wLOex4VPQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.2.0.tgz", + "integrity": "sha512-qPVmLLyBmvF5HJrY7krDisx6Voi8DmlV3GZYX0aFNbaQsZeoz1hfxcCMbqDGuQCxU1dJy9eYc2xscE8QrCCYaA==", + "dev": true, "requires": { "execa": "^5.0.0", "p-limit": "^3.1.0" } }, "jest-circus": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.1.2.tgz", - "integrity": "sha512-ajQOdxY6mT9GtnfJRZBRYS7toNIJayiiyjDyoZcnvPRUPwJ58JX0ci0PKAKUo2C1RyzlHw0jabjLGKksO42JGA==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.2.0.tgz", + "integrity": "sha512-bpJRMe+VtvYlF3q8JNx+/cAo4FYvNCiR5s7Z0Scf8aC+KJ2ineSjZKtw1cIZbythlplkiro0My8nc65pfCqJ3A==", + "dev": true, "requires": { - "@jest/environment": "^29.1.2", - "@jest/expect": "^29.1.2", - "@jest/test-result": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/environment": "^29.2.0", + "@jest/expect": "^29.2.0", + "@jest/test-result": "^29.2.0", + "@jest/types": "^29.2.0", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.1.2", - "jest-matcher-utils": "^29.1.2", - "jest-message-util": "^29.1.2", - "jest-runtime": "^29.1.2", - "jest-snapshot": "^29.1.2", - "jest-util": "^29.1.2", + "jest-each": "^29.2.0", + "jest-matcher-utils": "^29.2.0", + "jest-message-util": "^29.2.0", + "jest-runtime": "^29.2.0", + "jest-snapshot": "^29.2.0", + "jest-util": "^29.2.0", "p-limit": "^3.1.0", - "pretty-format": "^29.1.2", + "pretty-format": "^29.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-cli": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.1.2.tgz", - "integrity": "sha512-vsvBfQ7oS2o4MJdAH+4u9z76Vw5Q8WBQF5MchDbkylNknZdrPTX1Ix7YRJyTlOWqRaS7ue/cEAn+E4V1MWyMzw==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.2.0.tgz", + "integrity": "sha512-/581TzbXeO+5kbtSlhXEthGiVJCC8AP0jgT0iZINAAMW+tTFj2uWU7z+HNUH5yIYdHV7AvRr0fWLrmHJGIruHg==", + "dev": true, "requires": { - "@jest/core": "^29.1.2", - "@jest/test-result": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/core": "^29.2.0", + "@jest/test-result": "^29.2.0", + "@jest/types": "^29.2.0", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.1.2", - "jest-util": "^29.1.2", - "jest-validate": "^29.1.2", + "jest-config": "^29.2.0", + "jest-util": "^29.2.0", + "jest-validate": "^29.2.0", "prompts": "^2.0.1", "yargs": "^17.3.1" }, @@ -10330,6 +11026,7 @@ "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==", + "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -10340,6 +11037,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -10349,12 +11047,14 @@ "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true }, "yargs": { "version": "17.6.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz", "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==", + "dev": true, "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -10368,245 +11068,263 @@ } }, "jest-config": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.1.2.tgz", - "integrity": "sha512-EC3Zi86HJUOz+2YWQcJYQXlf0zuBhJoeyxLM6vb6qJsVmpP7KcCP1JnyF0iaqTaXdBP8Rlwsvs7hnKWQWWLwwA==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.2.0.tgz", + "integrity": "sha512-IkdCsrHIoxDPZAyFcdtQrCQ3uftLqns6Joj0tlbxiAQW4k/zTXmIygqWBmPNxO9FbFkDrhtYZiLHXjaJh9rS+Q==", + "dev": true, "requires": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.1.2", - "@jest/types": "^29.1.2", - "babel-jest": "^29.1.2", + "@jest/test-sequencer": "^29.2.0", + "@jest/types": "^29.2.0", + "babel-jest": "^29.2.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.1.2", - "jest-environment-node": "^29.1.2", - "jest-get-type": "^29.0.0", - "jest-regex-util": "^29.0.0", - "jest-resolve": "^29.1.2", - "jest-runner": "^29.1.2", - "jest-util": "^29.1.2", - "jest-validate": "^29.1.2", + "jest-circus": "^29.2.0", + "jest-environment-node": "^29.2.0", + "jest-get-type": "^29.2.0", + "jest-regex-util": "^29.2.0", + "jest-resolve": "^29.2.0", + "jest-runner": "^29.2.0", + "jest-util": "^29.2.0", + "jest-validate": "^29.2.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^29.1.2", + "pretty-format": "^29.2.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" } }, "jest-diff": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.1.2.tgz", - "integrity": "sha512-4GQts0aUopVvecIT4IwD/7xsBaMhKTYoM4/njE/aVw9wpw+pIUVp8Vab/KnSzSilr84GnLBkaP3JLDnQYCKqVQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.2.0.tgz", + "integrity": "sha512-GsH07qQL+/D/GxlnU+sSg9GL3fBOcuTlmtr3qr2pnkiODCwubNN2/7slW4m3CvxDsEus/VEOfQKRFLyXsUlnZw==", + "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^29.0.0", - "jest-get-type": "^29.0.0", - "pretty-format": "^29.1.2" + "diff-sequences": "^29.2.0", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.2.0" } }, "jest-docblock": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.0.0.tgz", - "integrity": "sha512-s5Kpra/kLzbqu9dEjov30kj1n4tfu3e7Pl8v+f8jOkeWNqM6Ds8jRaJfZow3ducoQUrf2Z4rs2N5S3zXnb83gw==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.2.0.tgz", + "integrity": "sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A==", + "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.1.2.tgz", - "integrity": "sha512-AmTQp9b2etNeEwMyr4jc0Ql/LIX/dhbgP21gHAizya2X6rUspHn2gysMXaj6iwWuOJ2sYRgP8c1P4cXswgvS1A==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.2.0.tgz", + "integrity": "sha512-h4LeC3L/R7jIMfTdYowevPIssvcPYQ7Qzs+pCSYsJgPztIizXwKmnfhZXBA4WVqdmvMcpmseYEXb67JT7IJ2eg==", + "dev": true, "requires": { - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "chalk": "^4.0.0", - "jest-get-type": "^29.0.0", - "jest-util": "^29.1.2", - "pretty-format": "^29.1.2" + "jest-get-type": "^29.2.0", + "jest-util": "^29.2.0", + "pretty-format": "^29.2.0" } }, "jest-environment-node": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.1.2.tgz", - "integrity": "sha512-C59yVbdpY8682u6k/lh8SUMDJPbOyCHOTgLVVi1USWFxtNV+J8fyIwzkg+RJIVI30EKhKiAGNxYaFr3z6eyNhQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.2.0.tgz", + "integrity": "sha512-b4qQGVStPMvtZG97Ac0rvnmSIjCZturFU7MQRMp4JDFl7zoaDLTtXmFjFP1tNmi9te6kR8d+Htbv3nYeoaIz6g==", + "dev": true, "requires": { - "@jest/environment": "^29.1.2", - "@jest/fake-timers": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/environment": "^29.2.0", + "@jest/fake-timers": "^29.2.0", + "@jest/types": "^29.2.0", "@types/node": "*", - "jest-mock": "^29.1.2", - "jest-util": "^29.1.2" + "jest-mock": "^29.2.0", + "jest-util": "^29.2.0" } }, "jest-get-type": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.0.0.tgz", - "integrity": "sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw==" + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", + "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==", + "dev": true }, "jest-haste-map": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.1.2.tgz", - "integrity": "sha512-xSjbY8/BF11Jh3hGSPfYTa/qBFrm3TPM7WU8pU93m2gqzORVLkHFWvuZmFsTEBPRKndfewXhMOuzJNHyJIZGsw==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.2.0.tgz", + "integrity": "sha512-qu9lGFi7qJ8v37egS1phZZUJYiMyWnKwu83NlNT1qs50TbedIX2hFl+9ztsJ7U/ENaHwk1/Bs8fqOIQsScIRwg==", + "dev": true, "requires": { - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.0.0", - "jest-util": "^29.1.2", - "jest-worker": "^29.1.2", + "jest-regex-util": "^29.2.0", + "jest-util": "^29.2.0", + "jest-worker": "^29.2.0", "micromatch": "^4.0.4", "walker": "^1.0.8" } }, "jest-leak-detector": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.1.2.tgz", - "integrity": "sha512-TG5gAZJpgmZtjb6oWxBLf2N6CfQ73iwCe6cofu/Uqv9iiAm6g502CAnGtxQaTfpHECBdVEMRBhomSXeLnoKjiQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.2.0.tgz", + "integrity": "sha512-FXT9sCFdct42+oOqGIr/9kmUw3RbhvpkwidCBT5ySHHoWNGd3c9n7HXpFKjEz9UnUITRCGdn0q2s6Sxrq36kwg==", + "dev": true, "requires": { - "jest-get-type": "^29.0.0", - "pretty-format": "^29.1.2" + "jest-get-type": "^29.2.0", + "pretty-format": "^29.2.0" } }, "jest-matcher-utils": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.1.2.tgz", - "integrity": "sha512-MV5XrD3qYSW2zZSHRRceFzqJ39B2z11Qv0KPyZYxnzDHFeYZGJlgGi0SW+IXSJfOewgJp/Km/7lpcFT+cgZypw==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.2.0.tgz", + "integrity": "sha512-FcEfKZ4vm28yCdBsvC69EkrEhcfex+IYlRctNJXsRG9+WC3WxgBNORnECIgqUtj7o/h1d8o7xB/dFUiLi4bqtw==", + "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^29.1.2", - "jest-get-type": "^29.0.0", - "pretty-format": "^29.1.2" + "jest-diff": "^29.2.0", + "jest-get-type": "^29.2.0", + "pretty-format": "^29.2.0" } }, "jest-message-util": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.1.2.tgz", - "integrity": "sha512-9oJ2Os+Qh6IlxLpmvshVbGUiSkZVc2FK+uGOm6tghafnB2RyjKAxMZhtxThRMxfX1J1SOMhTn9oK3/MutRWQJQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.2.0.tgz", + "integrity": "sha512-arBfk5yMFMTnMB22GyG601xGSGthA02vWSewPaxoFo0F9wBqDOyxccPbCcYu8uibw3kduSHXdCOd1PsLSgdomg==", + "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.1.2", + "pretty-format": "^29.2.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.1.2.tgz", - "integrity": "sha512-PFDAdjjWbjPUtQPkQufvniXIS3N9Tv7tbibePEjIIprzjgo0qQlyUiVMrT4vL8FaSJo1QXifQUOuPH3HQC/aMA==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.2.0.tgz", + "integrity": "sha512-aiWGR0P8ivssIO17xkehLGFtCcef2ZwQFNPwEer1jQLHxPctDlIg3Hs6QMq1KpPz5dkCcgM7mwGif4a9IPznlg==", + "dev": true, "requires": { - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "@types/node": "*", - "jest-util": "^29.1.2" + "jest-util": "^29.2.0" } }, "jest-pnp-resolver": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, "requires": {} }, "jest-regex-util": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.0.0.tgz", - "integrity": "sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug==" + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.2.0.tgz", + "integrity": "sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA==", + "dev": true }, "jest-resolve": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.1.2.tgz", - "integrity": "sha512-7fcOr+k7UYSVRJYhSmJHIid3AnDBcLQX3VmT9OSbPWsWz1MfT7bcoerMhADKGvKCoMpOHUQaDHtQoNp/P9JMGg==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.2.0.tgz", + "integrity": "sha512-f5c0ljNg2guDBCC7wi92vAhNuA0BtAG5vkY7Fob0c7sUMU1g87mTXqRmjrVFe2XvdwP5m5T/e5KJsCKu9hRvBA==", + "dev": true, "requires": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.1.2", + "jest-haste-map": "^29.2.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.1.2", - "jest-validate": "^29.1.2", + "jest-util": "^29.2.0", + "jest-validate": "^29.2.0", "resolve": "^1.20.0", "resolve.exports": "^1.1.0", "slash": "^3.0.0" } }, "jest-resolve-dependencies": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.1.2.tgz", - "integrity": "sha512-44yYi+yHqNmH3OoWZvPgmeeiwKxhKV/0CfrzaKLSkZG9gT973PX8i+m8j6pDrTYhhHoiKfF3YUFg/6AeuHw4HQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.2.0.tgz", + "integrity": "sha512-Cd0Z39sDntEnfR9PoUdFHUAGDvtKI0/7Wt73l3lt03A3yQ+A6Qi3XmBuqGjdFl2QbXaPa937oLhilG612P8HGQ==", + "dev": true, "requires": { - "jest-regex-util": "^29.0.0", - "jest-snapshot": "^29.1.2" + "jest-regex-util": "^29.2.0", + "jest-snapshot": "^29.2.0" } }, "jest-runner": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.1.2.tgz", - "integrity": "sha512-yy3LEWw8KuBCmg7sCGDIqKwJlULBuNIQa2eFSVgVASWdXbMYZ9H/X0tnXt70XFoGf92W2sOQDOIFAA6f2BG04Q==", - "requires": { - "@jest/console": "^29.1.2", - "@jest/environment": "^29.1.2", - "@jest/test-result": "^29.1.2", - "@jest/transform": "^29.1.2", - "@jest/types": "^29.1.2", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.2.0.tgz", + "integrity": "sha512-VPBrCwl9fM2mc5yk6yZhNrgXzRJMD5jfLmntkMLlrVq4hQPWbRK998iJlR+DOGCO04TC9PPYLntOJ001Vnf28g==", + "dev": true, + "requires": { + "@jest/console": "^29.2.0", + "@jest/environment": "^29.2.0", + "@jest/test-result": "^29.2.0", + "@jest/transform": "^29.2.0", + "@jest/types": "^29.2.0", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.10.2", "graceful-fs": "^4.2.9", - "jest-docblock": "^29.0.0", - "jest-environment-node": "^29.1.2", - "jest-haste-map": "^29.1.2", - "jest-leak-detector": "^29.1.2", - "jest-message-util": "^29.1.2", - "jest-resolve": "^29.1.2", - "jest-runtime": "^29.1.2", - "jest-util": "^29.1.2", - "jest-watcher": "^29.1.2", - "jest-worker": "^29.1.2", + "jest-docblock": "^29.2.0", + "jest-environment-node": "^29.2.0", + "jest-haste-map": "^29.2.0", + "jest-leak-detector": "^29.2.0", + "jest-message-util": "^29.2.0", + "jest-resolve": "^29.2.0", + "jest-runtime": "^29.2.0", + "jest-util": "^29.2.0", + "jest-watcher": "^29.2.0", + "jest-worker": "^29.2.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" } }, "jest-runtime": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.1.2.tgz", - "integrity": "sha512-jr8VJLIf+cYc+8hbrpt412n5jX3tiXmpPSYTGnwcvNemY+EOuLNiYnHJ3Kp25rkaAcTWOEI4ZdOIQcwYcXIAZw==", - "requires": { - "@jest/environment": "^29.1.2", - "@jest/fake-timers": "^29.1.2", - "@jest/globals": "^29.1.2", - "@jest/source-map": "^29.0.0", - "@jest/test-result": "^29.1.2", - "@jest/transform": "^29.1.2", - "@jest/types": "^29.1.2", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.2.0.tgz", + "integrity": "sha512-+GDmzCrswQF+mvI0upTYMe/OPYnlRRNLLDHM9AFLp2y7zxWoDoYgb8DL3WwJ8d9m743AzrnvBV9JQHi/0ed7dg==", + "dev": true, + "requires": { + "@jest/environment": "^29.2.0", + "@jest/fake-timers": "^29.2.0", + "@jest/globals": "^29.2.0", + "@jest/source-map": "^29.2.0", + "@jest/test-result": "^29.2.0", + "@jest/transform": "^29.2.0", + "@jest/types": "^29.2.0", "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.1.2", - "jest-message-util": "^29.1.2", - "jest-mock": "^29.1.2", - "jest-regex-util": "^29.0.0", - "jest-resolve": "^29.1.2", - "jest-snapshot": "^29.1.2", - "jest-util": "^29.1.2", + "jest-haste-map": "^29.2.0", + "jest-message-util": "^29.2.0", + "jest-mock": "^29.2.0", + "jest-regex-util": "^29.2.0", + "jest-resolve": "^29.2.0", + "jest-snapshot": "^29.2.0", + "jest-util": "^29.2.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" } }, "jest-snapshot": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.1.2.tgz", - "integrity": "sha512-rYFomGpVMdBlfwTYxkUp3sjD6usptvZcONFYNqVlaz4EpHPnDvlWjvmOQ9OCSNKqYZqLM2aS3wq01tWujLg7gg==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.2.0.tgz", + "integrity": "sha512-YCKrOR0PLRXROmww73fHO9oeY4tL+LPQXWR3yml1+hKbQDR8j1VUrVzB65hKSJJgxBOr1vWx+hmz2by8JjAU5w==", + "dev": true, "requires": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -10614,32 +11332,33 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.1.2", - "@jest/transform": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/expect-utils": "^29.2.0", + "@jest/transform": "^29.2.0", + "@jest/types": "^29.2.0", "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.1.2", + "expect": "^29.2.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.1.2", - "jest-get-type": "^29.0.0", - "jest-haste-map": "^29.1.2", - "jest-matcher-utils": "^29.1.2", - "jest-message-util": "^29.1.2", - "jest-util": "^29.1.2", + "jest-diff": "^29.2.0", + "jest-get-type": "^29.2.0", + "jest-haste-map": "^29.2.0", + "jest-matcher-utils": "^29.2.0", + "jest-message-util": "^29.2.0", + "jest-util": "^29.2.0", "natural-compare": "^1.4.0", - "pretty-format": "^29.1.2", + "pretty-format": "^29.2.0", "semver": "^7.3.5" } }, "jest-util": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.1.2.tgz", - "integrity": "sha512-vPCk9F353i0Ymx3WQq3+a4lZ07NXu9Ca8wya6o4Fe4/aO1e1awMMprZ3woPFpKwghEOW+UXgd15vVotuNN9ONQ==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.2.0.tgz", + "integrity": "sha512-8M1dx12ujkBbnhwytrezWY0Ut79hbflwodE+qZKjxSRz5qt4xDp6dQQJaOCFvCmE0QJqp9KyEK33lpPNjnhevw==", + "dev": true, "requires": { - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -10648,47 +11367,51 @@ } }, "jest-validate": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.1.2.tgz", - "integrity": "sha512-k71pOslNlV8fVyI+mEySy2pq9KdXdgZtm7NHrBX8LghJayc3wWZH0Yr0mtYNGaCU4F1OLPXRkwZR0dBm/ClshA==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.2.0.tgz", + "integrity": "sha512-4Vl51bPNeFeDok9aJiOnrC6tqJbOp4iMCYlewoC2ZzYJZ5+6pfr3KObAdx5wP8auHcg2MRaguiqj5OdScZa72g==", + "dev": true, "requires": { - "@jest/types": "^29.1.2", + "@jest/types": "^29.2.0", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^29.0.0", + "jest-get-type": "^29.2.0", "leven": "^3.1.0", - "pretty-format": "^29.1.2" + "pretty-format": "^29.2.0" }, "dependencies": { "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true } } }, "jest-watcher": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.1.2.tgz", - "integrity": "sha512-6JUIUKVdAvcxC6bM8/dMgqY2N4lbT+jZVsxh0hCJRbwkIEnbr/aPjMQ28fNDI5lB51Klh00MWZZeVf27KBUj5w==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.2.0.tgz", + "integrity": "sha512-bRh0JdUeN+cl9XfK7tMnXLm4Mv70hG2SZlqbkFe5CTs7oeCkbwlGBk/mEfEJ63mrxZ8LPbnfaMpfSmkhEQBEGA==", + "dev": true, "requires": { - "@jest/test-result": "^29.1.2", - "@jest/types": "^29.1.2", + "@jest/test-result": "^29.2.0", + "@jest/types": "^29.2.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.10.2", - "jest-util": "^29.1.2", + "jest-util": "^29.2.0", "string-length": "^4.0.1" } }, "jest-worker": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.1.2.tgz", - "integrity": "sha512-AdTZJxKjTSPHbXT/AIOjQVmoFx0LHFcVabWu0sxI7PAy7rFf8c0upyvgBKgguVXdM4vY74JdwkyD4hSmpTW8jA==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.2.0.tgz", + "integrity": "sha512-mluOlMbRX1H59vGVzPcVg2ALfCausbBpxC8a2KWOzInhYHZibbHH8CB0C1JkmkpfurrkOYgF7FPmypuom1OM9A==", + "dev": true, "requires": { "@types/node": "*", - "jest-util": "^29.1.2", + "jest-util": "^29.2.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -10697,6 +11420,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -10712,7 +11436,8 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "js-yaml": { "version": "4.1.0", @@ -10725,7 +11450,8 @@ "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true }, "json-fixer": { "version": "1.6.15", @@ -10741,7 +11467,8 @@ "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, "json-schema-traverse": { "version": "0.4.1", @@ -10758,17 +11485,20 @@ "json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true }, "levn": { "version": "0.4.1", @@ -10783,7 +11513,8 @@ "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true }, "locate-path": { "version": "6.0.0", @@ -10839,6 +11570,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "requires": { "semver": "^6.0.0" }, @@ -10846,7 +11578,8 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -10854,12 +11587,13 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "devOptional": true + "dev": true }, "makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, "requires": { "tmpl": "1.0.5" } @@ -10877,7 +11611,8 @@ "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "merge2": { "version": "1.4.1", @@ -10894,6 +11629,7 @@ "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, "requires": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -10920,7 +11656,8 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true }, "minimatch": { "version": "3.1.2", @@ -10985,7 +11722,8 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "negotiator": { "version": "0.6.3", @@ -11004,12 +11742,14 @@ "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true }, "node-releases": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true }, "nodemon": { "version": "2.0.20", @@ -11073,12 +11813,14 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, "requires": { "path-key": "^3.0.0" } @@ -11147,6 +11889,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "requires": { "mimic-fn": "^2.1.0" } @@ -11181,6 +11924,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "requires": { "yocto-queue": "^0.1.0" } @@ -11197,7 +11941,8 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true }, "parent-module": { "version": "1.0.1", @@ -11212,6 +11957,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -11227,7 +11973,8 @@ "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -11237,12 +11984,14 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "path-to-regexp": { "version": "0.1.7", @@ -11264,12 +12013,14 @@ "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true }, "pify": { "version": "5.0.0", @@ -11280,12 +12031,14 @@ "pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "dev": true }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, "requires": { "find-up": "^4.0.0" }, @@ -11294,6 +12047,7 @@ "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" @@ -11303,6 +12057,7 @@ "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" } @@ -11311,6 +12066,7 @@ "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" } @@ -11319,6 +12075,7 @@ "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" } @@ -11338,9 +12095,10 @@ "dev": true }, "pretty-format": { - "version": "29.1.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.1.2.tgz", - "integrity": "sha512-CGJ6VVGXVRP2o2Dorl4mAwwvDWT25luIsYhkyVQW32E4nL+TgW939J7LlKT/npq5Cpq6j3s+sy+13yk7xYpBmg==", + "version": "29.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.0.tgz", + "integrity": "sha512-QCSUFdwOi924g24czhOH5eTkXxUCqlLGZBRCySlwDYHIXRJkdGyjJc9nZaqhlFBZws8dq5Dvk0lCilsmlfsPxw==", + "dev": true, "requires": { "@jest/schemas": "^29.0.0", "ansi-styles": "^5.0.0", @@ -11350,7 +12108,8 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true } } }, @@ -11358,6 +12117,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, "requires": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -11417,7 +12177,8 @@ "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true }, "readdirp": { "version": "3.6.0", @@ -11454,7 +12215,8 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true }, "require-main-filename": { "version": "2.0.0", @@ -11466,6 +12228,7 @@ "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, "requires": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -11476,6 +12239,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, "requires": { "resolve-from": "^5.0.0" }, @@ -11483,7 +12247,8 @@ "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true } } }, @@ -11496,7 +12261,8 @@ "resolve.exports": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==" + "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", + "dev": true }, "restore-cursor": { "version": "3.1.0", @@ -11644,6 +12410,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -11651,7 +12418,8 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true }, "side-channel": { "version": "1.0.4", @@ -11666,7 +12434,8 @@ "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "simple-update-notifier": { "version": "1.0.7", @@ -11688,22 +12457,31 @@ "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slugify": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.5.tgz", + "integrity": "sha512-8mo9bslnBO3tr5PEVFzMPIWwWnipGS0xVbYf65zxDqfNwmzYn1LpiKNrR6DlClusuvo+hDHd1zKpmfAe83NQSQ==" }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true }, "source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -11712,12 +12490,14 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true }, "stack-utils": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, "requires": { "escape-string-regexp": "^2.0.0" }, @@ -11725,7 +12505,8 @@ "escape-string-regexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true } } }, @@ -11738,6 +12519,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, "requires": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -11747,6 +12529,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -11779,6 +12562,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -11786,17 +12570,20 @@ "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==" + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true }, "superagent": { "version": "8.0.2", @@ -11835,23 +12622,16 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } }, - "supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, "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", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true }, "swagger-jsdoc": { "version": "6.2.5", @@ -11902,19 +12682,11 @@ "swagger-ui-dist": ">=4.11.0" } }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, "requires": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -11945,17 +12717,20 @@ "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "requires": { "is-number": "^7.0.0" } @@ -12000,7 +12775,7 @@ "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "devOptional": true, + "dev": true, "requires": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -12073,7 +12848,8 @@ "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true }, "type-fest": { "version": "0.20.2", @@ -12094,7 +12870,7 @@ "version": "4.8.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "devOptional": true + "dev": true }, "unbox-primitive": { "version": "1.0.2", @@ -12123,6 +12899,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -12146,12 +12923,13 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "devOptional": true + "dev": true }, "v8-to-istanbul": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -12172,6 +12950,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, "requires": { "makeerror": "1.0.12" } @@ -12196,6 +12975,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -12245,6 +13025,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "requires": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -12337,18 +13118,20 @@ "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==" + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "devOptional": true + "dev": true }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true }, "z-schema": { "version": "4.2.4", diff --git a/package.json b/package.json index 3465bc77..3d3078c4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mocked-api", - "version": "0.14.0", + "version": "0.15.0", "description": "An API library for providing endpoints of mock data for use during testing", "main": "app.ts", "scripts": { @@ -27,36 +27,38 @@ }, "homepage": "https://github.com/ageddesi/Mocked-API#readme", "optionalDependencies": { - "fsevents" : "~2.3.2" + "fsevents": "~2.3.2" }, "devDependencies": { "@faker-js/faker": "7.6.0", "@types/express": "4.17.14", "@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.39.0", - "all-contributors-cli": "6.23.1", + "@types/supertest": "2.0.12", + "@types/swagger-jsdoc": "6.0.1", + "@types/swagger-ui-express": "4.1.3", + "@typescript-eslint/eslint-plugin": "5.40.0", + "all-contributors-cli": "6.24.0", "eslint": "8.25.0", "eslint-config-standard-with-typescript": "23.0.0", "eslint-plugin-import": "2.26.0", "eslint-plugin-n": "15.3.0", - "eslint-plugin-promise": "6.0.1", + "eslint-plugin-promise": "6.1.0", + "jest": "^29.1.2", "nodemon": "2.0.20", "prettier": "2.7.1", - "ts-jest": "^29.0.3", + "ts-jest": "29.0.3", "ts-node": "10.9.1", "typescript": "4.8.4", - "jest": "^29.1.2" + "jest": "29.2.0" }, "dependencies": { "cors": "^2.8.5", "dotenv": "^16.0.2", "express": "^4.18.1", - "express-rate-limit": "^6.5.2", + "express-rate-limit": "^6.6.0", "morgan": "^1.10.0", + "slugify": "^1.6.5", "supertest": "^6.2.4", "swagger-jsdoc": "^6.2.5", "swagger-ui-express": "^4.5.0" diff --git a/swagger.json b/swagger.json index ed6c8c39..fa31ae34 100644 --- a/swagger.json +++ b/swagger.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "version": "0.12.0", + "version": "0.15.0", "title": "Mocked-API", "description": "An API library for providing endpoints of mock data for use during testing. This API is still in the development and until it reaches version 1.0.0 the API is subject to change. To find out more head over to https://mocked-api.dev/" }, diff --git a/utils/route-utils.ts b/utils/route-utils.ts index 5acd4269..5e0fbe30 100644 --- a/utils/route-utils.ts +++ b/utils/route-utils.ts @@ -7,14 +7,23 @@ const imageWidthDefault = 640; const imageHeightDefault = 480; const defaultCountry = 'uk'; + +function isNumber(value: string | number): boolean +{ + return ((value != null) && + (value !== '') && + !isNaN(Number(value.toString()))); +} + + const getQtyFromRequest = (request: Request | null, overrideDefaultQty?: number | null): number => { - return request.params.qty - ? parseInt(request.params.qty) < maxQty - ? parseInt(request.params.qty) - : maxQty - : overrideDefaultQty - ? overrideDefaultQty - : defaultQty; + const defaultValue = overrideDefaultQty ?? defaultQty; + + return request.params.qty ? + isNumber(request.params.qty) && parseInt(request.params.qty) < maxQty ? + parseInt(request.params.qty) + : maxQty + :defaultValue }; const getImageDataFromRequest = (request: Request | null): ImageDataType => { diff --git a/utils/swagger.ts b/utils/swagger.ts index db602acf..01b04338 100644 --- a/utils/swagger.ts +++ b/utils/swagger.ts @@ -4,6 +4,7 @@ const { version } = require('../package.json'); const options: swaggerJsdoc.Options = { definition: { + failOnErrors: true, swagger: '2.0', info: { version, diff --git a/utils/tests/route-utils.test.ts b/utils/tests/route-utils.test.ts index 372b3402..fa2643db 100644 --- a/utils/tests/route-utils.test.ts +++ b/utils/tests/route-utils.test.ts @@ -4,6 +4,24 @@ import { getImageDataFromRequest, getQtyFromRequest } from '../route-utils'; describe('route utils', () => { describe('get qty from request', () => { + it('should qty doesnt exist - return 10', () => { + const expectedQty = 10; + const res = getQtyFromRequest({ + params: { + }, + } as unknown as Request); + + expect(res).toEqual(expectedQty); + }); + it('should qty doesnt exist, override specified - return 1', () => { + const expectedQty = 1; + const res = getQtyFromRequest({ + params: { + }, + } as unknown as Request,expectedQty); + + expect(res).toEqual(expectedQty); + }); it('should return the qty from a request', () => { const expectedQty = 5; const res = getQtyFromRequest({ @@ -21,6 +39,14 @@ describe('route utils', () => { expect(res).toEqual(expectedQty); }); + it('should return the return spomthing is qty ', () => { + const expectedQty = 100; + const res = getQtyFromRequest({ params: { qty: "foo" } } as unknown as Request, expectedQty); + expect(res).toEqual(expectedQty); + }); + + + }); describe('get getImageDataFromRequest from request', () => {